[{"data":1,"prerenderedAt":174072},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch13-jie-mian-yang-shi-yu-bu-ju-ji-qiao":3,"wiki-doc-nav":1335},{"id":4,"title":5,"body":6,"description":1327,"extension":1328,"meta":1329,"navigation":1330,"path":1331,"seo":1332,"stem":1333,"__hash__":1334},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":8,"toc":1308},"minimark",[9,13,18,22,38,138,173,178,182,187,292,348,352,355,358,394,397,400,403,406,409,412,415,418,421,424,427,430,433,436,439,471,474,478,481,489,492,495,521,524,529,532,535,542,546,549,552,584,587,590,603,609,612,615,618,621,625,628,631,634,681,685,687,690,697,739,742,746,751,765,769,772,775,778,781,784,818,821,824,884,887,890,893,896,948,951,954,1003,1007,1009,1012,1015,1018,1021,1024,1088,1091,1098,1101,1104,1137,1140,1144,1148,1151,1183,1187,1190,1238,1242,1245,1248,1251,1254,1257,1260,1263,1266,1269,1272,1275,1278,1281,1284,1289,1292,1295,1298,1301,1304],[10,11,5],"h1",{"id":12},"_13-界面样式与布局技巧",[14,15,17],"h2",{"id":16},"_131-css三角","13.1 css三角",[19,20,21],"p",{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[23,24,25,29,32,35],"ul",{},[26,27,28],"li",{},"用css 边框可以模拟三角效果",[26,30,31],{},"宽度高度为0",[26,33,34],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[26,36,37],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[39,40,45],"pre",{"className":41,"code":42,"language":43,"meta":44,"style":44},"language-Css shiki shiki-themes github-light github-dark","\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n","Css","",[46,47,48,57,68,84,96,119,132],"code",{"__ignoreMap":44},[49,50,53],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"sJ8bj","\u002F* CSS 实现三角形 *\u002F\n",[49,58,60,64],{"class":51,"line":59},2,[49,61,63],{"class":62},"sScJk",".triangle",[49,65,67],{"class":66},"sVt8B"," {\n",[49,69,71,75,78,81],{"class":51,"line":70},3,[49,72,74],{"class":73},"sj4cs","  width",[49,76,77],{"class":66},": ",[49,79,80],{"class":73},"0",[49,82,83],{"class":66},";\n",[49,85,87,90,92,94],{"class":51,"line":86},4,[49,88,89],{"class":73},"  height",[49,91,77],{"class":66},[49,93,80],{"class":73},[49,95,83],{"class":66},[49,97,99,102,104,107,111,114,117],{"class":51,"line":98},5,[49,100,101],{"class":73},"  border",[49,103,77],{"class":66},[49,105,106],{"class":73},"10",[49,108,110],{"class":109},"szBVR","px",[49,112,113],{"class":73}," solid",[49,115,116],{"class":73}," transparent",[49,118,83],{"class":66},[49,120,122,125,127,130],{"class":51,"line":121},6,[49,123,124],{"class":73},"  border-bottom-color",[49,126,77],{"class":66},[49,128,129],{"class":73},"#333",[49,131,83],{"class":66},[49,133,135],{"class":51,"line":134},7,[49,136,137],{"class":66},"}\n",[39,139,141],{"className":41,"code":140,"language":43,"meta":44,"style":44},"div {\n  border: 1px solid #ccc;\n}\n",[46,142,143,151,169],{"__ignoreMap":44},[49,144,145,149],{"class":51,"line":52},[49,146,148],{"class":147},"s9eBZ","div",[49,150,67],{"class":66},[49,152,153,155,157,160,162,164,167],{"class":51,"line":59},[49,154,101],{"class":73},[49,156,77],{"class":66},[49,158,159],{"class":73},"1",[49,161,110],{"class":109},[49,163,113],{"class":73},[49,165,166],{"class":73}," #ccc",[49,168,83],{"class":66},[49,170,171],{"class":51,"line":70},[49,172,137],{"class":66},[174,175],"img",{"style":176,"src":177},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,179,181],{"id":180},"_132-css用户界面样式","13.2 css用户界面样式",[183,184,186],"h3",{"id":185},"_1321-鼠标样式","13.2.1 鼠标样式",[39,188,190],{"className":41,"code":189,"language":43,"meta":44,"style":44},"\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",[46,191,192,197,218,236,255,273],{"__ignoreMap":44},[49,193,194],{"class":51,"line":52},[49,195,196],{"class":55},"\u002F* 鼠标样式 *\u002F\n",[49,198,199,201,204,207,209,212,215],{"class":51,"line":59},[49,200,148],{"class":147},[49,202,203],{"class":66}," { ",[49,205,206],{"class":73},"cursor",[49,208,77],{"class":66},[49,210,211],{"class":73},"pointer",[49,213,214],{"class":66},"; }   ",[49,216,217],{"class":55},"\u002F* 手型 *\u002F\n",[49,219,220,222,224,226,228,231,233],{"class":51,"line":70},[49,221,148],{"class":147},[49,223,203],{"class":66},[49,225,206],{"class":73},[49,227,77],{"class":66},[49,229,230],{"class":73},"default",[49,232,214],{"class":66},[49,234,235],{"class":55},"\u002F* 默认 *\u002F\n",[49,237,238,240,242,244,246,249,252],{"class":51,"line":86},[49,239,148],{"class":147},[49,241,203],{"class":66},[49,243,206],{"class":73},[49,245,77],{"class":66},[49,247,248],{"class":73},"move",[49,250,251],{"class":66},"; }      ",[49,253,254],{"class":55},"\u002F* 移动 *\u002F\n",[49,256,257,259,261,263,265,268,270],{"class":51,"line":98},[49,258,148],{"class":147},[49,260,203],{"class":66},[49,262,206],{"class":73},[49,264,77],{"class":66},[49,266,267],{"class":73},"text",[49,269,251],{"class":66},[49,271,272],{"class":55},"\u002F* 文本 *\u002F\n",[49,274,275,277,279,281,283,286,289],{"class":51,"line":121},[49,276,148],{"class":147},[49,278,203],{"class":66},[49,280,206],{"class":73},[49,282,77],{"class":66},[49,284,285],{"class":73},"not-allowed",[49,287,288],{"class":66},"; } ",[49,290,291],{"class":55},"\u002F* 禁止 *\u002F\n",[293,294,295,309],"table",{},[296,297,298],"thead",{},[299,300,301,306],"tr",{},[302,303,305],"th",{"align":304},"left","属性值",[302,307,308],{"align":304},"描述",[310,311,312,320,327,334,341],"tbody",{},[299,313,314,317],{},[315,316,230],"td",{"align":304},[315,318,319],{"align":304},"小白 默认",[299,321,322,324],{},[315,323,211],{"align":304},[315,325,326],{"align":304},"小手",[299,328,329,331],{},[315,330,248],{"align":304},[315,332,333],{"align":304},"移动",[299,335,336,338],{},[315,337,267],{"align":304},[315,339,340],{"align":304},"文本",[299,342,343,345],{},[315,344,285],{"align":304},[315,346,347],{"align":304},"禁止",[183,349,351],{"id":350},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,353,354],{},"去除表单轮廓线",[19,356,357],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[39,359,361],{"className":41,"code":360,"language":43,"meta":44,"style":44},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[46,362,363,368,374,390],{"__ignoreMap":44},[49,364,365],{"class":51,"line":52},[49,366,367],{"class":55},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[49,369,370,372],{"class":51,"line":59},[49,371,148],{"class":147},[49,373,67],{"class":66},[49,375,376,378,380,382,384,386,388],{"class":51,"line":70},[49,377,101],{"class":73},[49,379,77],{"class":66},[49,381,159],{"class":73},[49,383,110],{"class":109},[49,385,113],{"class":73},[49,387,166],{"class":73},[49,389,83],{"class":66},[49,391,392],{"class":51,"line":86},[49,393,137],{"class":66},[19,395,396],{},"文本域：",[174,398],{"style":176,"src":399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,401,402],{},"此时会有一个空白区域",[174,404],{"style":176,"src":405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,407,408],{},"写在同一行就不会出现这个问题",[174,410],{"style":176,"src":411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,413,414],{},"文本域是行内块元素，一定记住！！！",[19,416,417],{},"结果：",[174,419],{"style":176,"src":420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,422,423],{},"文本域尽量放在一行",[19,425,426],{},"知识回顾：cols是列，rols是行",[174,428],{"style":176,"src":429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,431,432],{},"它可以进行拖动，显然这是我们不愿意看到的",[174,434],{"style":176,"src":435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,437,438],{},"使用resize进行解决",[39,440,442],{"className":41,"code":441,"language":43,"meta":44,"style":44},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[46,443,444,451,467],{"__ignoreMap":44},[49,445,446,449],{"class":51,"line":52},[49,447,448],{"class":147},"input",[49,450,67],{"class":66},[49,452,453,456,458,461,464],{"class":51,"line":59},[49,454,455],{"class":73},"  outline",[49,457,77],{"class":66},[49,459,460],{"class":73},"none",[49,462,463],{"class":66},";  ",[49,465,466],{"class":55},"\u002F* 取消表单轮廓线 *\u002F\n",[49,468,469],{"class":51,"line":70},[49,470,137],{"class":66},[19,472,473],{},"此时就无法通过右下方实现拖动了",[183,475,477],{"id":476},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,479,480],{},"实现一个盒子中的文字和图片对齐",[19,482,483,484,488],{},"用于设置一个元素的 ",[485,486,487],"strong",{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,490,491],{},"图片和文字默认是基线对齐",[174,493],{"style":176,"src":494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[39,496,497],{"className":41,"code":441,"language":43,"meta":44,"style":44},[46,498,499,505,517],{"__ignoreMap":44},[49,500,501,503],{"class":51,"line":52},[49,502,448],{"class":147},[49,504,67],{"class":66},[49,506,507,509,511,513,515],{"class":51,"line":59},[49,508,455],{"class":73},[49,510,77],{"class":66},[49,512,460],{"class":73},[49,514,463],{"class":66},[49,516,466],{"class":55},[49,518,519],{"class":51,"line":70},[49,520,137],{"class":66},[174,522],{"style":176,"src":523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[525,526,528],"h4",{"id":527},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,530,531],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[174,533],{"style":176,"src":534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,536,537,538,541],{},"此时可以给图片、表单这些行内块元素的 ",[485,539,540],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[525,543,545],{"id":544},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,547,548],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,550,551],{},"例如：",[39,553,555],{"className":41,"code":554,"language":43,"meta":44,"style":44},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[46,556,557,562,568,580],{"__ignoreMap":44},[49,558,559],{"class":51,"line":52},[49,560,561],{"class":55},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[49,563,564,566],{"class":51,"line":59},[49,565,174],{"class":147},[49,567,67],{"class":66},[49,569,570,573,575,578],{"class":51,"line":70},[49,571,572],{"class":73},"  vertical-align",[49,574,77],{"class":66},[49,576,577],{"class":73},"middle",[49,579,83],{"class":66},[49,581,582],{"class":51,"line":86},[49,583,137],{"class":66},[174,585],{"style":176,"src":586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,588,589],{},"主要解决方法有两种：",[591,592,593],"ol",{},[26,594,595,598,599,602],{},[485,596,597],{},"给图片"," 添加 ",[485,600,601],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,604,605,606],{},"2.把图片转换为块级元素 ",[485,607,608],{},"display: block",[19,610,611],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,613,614],{},"img {",[19,616,617],{},"vertical-align:middle;",[19,619,620],{},"}",[183,622,624],{"id":623},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,626,627],{},"效果：",[174,629],{"style":176,"src":630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,632,633],{},"单行文本溢出显示省略号--必须满足三个条件：",[39,635,637],{"className":41,"code":636,"language":43,"meta":44,"style":44},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[46,638,639,644,650,660,665,677],{"__ignoreMap":44},[49,640,641],{"class":51,"line":52},[49,642,643],{"class":55},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[49,645,646,648],{"class":51,"line":59},[49,647,174],{"class":147},[49,649,67],{"class":66},[49,651,652,654,656,658],{"class":51,"line":70},[49,653,572],{"class":73},[49,655,77],{"class":66},[49,657,577],{"class":73},[49,659,83],{"class":66},[49,661,662],{"class":51,"line":86},[49,663,664],{"class":55},"  \u002F* 或 *\u002F\n",[49,666,667,670,672,675],{"class":51,"line":98},[49,668,669],{"class":73},"  display",[49,671,77],{"class":66},[49,673,674],{"class":73},"block",[49,676,83],{"class":66},[49,678,679],{"class":51,"line":121},[49,680,137],{"class":66},[183,682,684],{"id":683},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,686,627],{},[174,688],{"style":176,"src":689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,691,692,693,696],{},"多行文本溢出显示省略号， ",[485,694,695],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[39,698,699],{"className":41,"code":636,"language":43,"meta":44,"style":44},[46,700,701,705,711,721,725,735],{"__ignoreMap":44},[49,702,703],{"class":51,"line":52},[49,704,643],{"class":55},[49,706,707,709],{"class":51,"line":59},[49,708,174],{"class":147},[49,710,67],{"class":66},[49,712,713,715,717,719],{"class":51,"line":70},[49,714,572],{"class":73},[49,716,77],{"class":66},[49,718,577],{"class":73},[49,720,83],{"class":66},[49,722,723],{"class":51,"line":86},[49,724,664],{"class":55},[49,726,727,729,731,733],{"class":51,"line":98},[49,728,669],{"class":73},[49,730,77],{"class":66},[49,732,674],{"class":73},[49,734,83],{"class":66},[49,736,737],{"class":51,"line":121},[49,738,137],{"class":66},[19,740,741],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,743,745],{"id":744},"_133-常见布局技巧","13.3 常见布局技巧",[19,747,748],{},[485,749,750],{},"巧妙利用一个技术更快更好的布局：",[591,752,753,756,759,762],{},[26,754,755],{},"margin负值的运用",[26,757,758],{},"文字围绕浮动元素",[26,760,761],{},"行内块的巧妙运用",[26,763,764],{},"CSS三角强化",[183,766,768],{"id":767},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,770,771],{},"应用场景：",[174,773],{"style":176,"src":774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[174,776],{"style":176,"src":777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,779,780],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,782,783],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[39,785,786],{"className":41,"code":360,"language":43,"meta":44,"style":44},[46,787,788,792,798,814],{"__ignoreMap":44},[49,789,790],{"class":51,"line":52},[49,791,367],{"class":55},[49,793,794,796],{"class":51,"line":59},[49,795,148],{"class":147},[49,797,67],{"class":66},[49,799,800,802,804,806,808,810,812],{"class":51,"line":70},[49,801,101],{"class":73},[49,803,77],{"class":66},[49,805,159],{"class":73},[49,807,110],{"class":109},[49,809,113],{"class":73},[49,811,166],{"class":73},[49,813,83],{"class":66},[49,815,816],{"class":51,"line":86},[49,817,137],{"class":66},[174,819],{"style":176,"src":820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,822,823],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[39,825,827],{"className":41,"code":826,"language":43,"meta":44,"style":44},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[46,828,829,834,841,853,866,880],{"__ignoreMap":44},[49,830,831],{"class":51,"line":52},[49,832,833],{"class":55},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[49,835,836,839],{"class":51,"line":59},[49,837,838],{"class":62},".box",[49,840,67],{"class":66},[49,842,843,846,848,851],{"class":51,"line":70},[49,844,845],{"class":73},"  position",[49,847,77],{"class":66},[49,849,850],{"class":73},"relative",[49,852,83],{"class":66},[49,854,855,858,860,862,864],{"class":51,"line":86},[49,856,857],{"class":73},"  top",[49,859,77],{"class":66},[49,861,106],{"class":73},[49,863,110],{"class":109},[49,865,83],{"class":66},[49,867,868,871,873,876,878],{"class":51,"line":98},[49,869,870],{"class":73},"  left",[49,872,77],{"class":66},[49,874,875],{"class":73},"20",[49,877,110],{"class":109},[49,879,83],{"class":66},[49,881,882],{"class":51,"line":121},[49,883,137],{"class":66},[19,885,886],{},"加上上述代码会发现：",[174,888],{"style":176,"src":889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,891,892],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,894,895],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[39,897,898],{"className":41,"code":826,"language":43,"meta":44,"style":44},[46,899,900,904,910,920,932,944],{"__ignoreMap":44},[49,901,902],{"class":51,"line":52},[49,903,833],{"class":55},[49,905,906,908],{"class":51,"line":59},[49,907,838],{"class":62},[49,909,67],{"class":66},[49,911,912,914,916,918],{"class":51,"line":70},[49,913,845],{"class":73},[49,915,77],{"class":66},[49,917,850],{"class":73},[49,919,83],{"class":66},[49,921,922,924,926,928,930],{"class":51,"line":86},[49,923,857],{"class":73},[49,925,77],{"class":66},[49,927,106],{"class":73},[49,929,110],{"class":109},[49,931,83],{"class":66},[49,933,934,936,938,940,942],{"class":51,"line":98},[49,935,870],{"class":73},[49,937,77],{"class":66},[49,939,875],{"class":73},[49,941,110],{"class":109},[49,943,83],{"class":66},[49,945,946],{"class":51,"line":121},[49,947,137],{"class":66},[19,949,950],{},"解决方式2：",[19,952,953],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[39,955,957],{"className":41,"code":956,"language":43,"meta":44,"style":44},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[46,958,959,965,975,987,999],{"__ignoreMap":44},[49,960,961,963],{"class":51,"line":52},[49,962,148],{"class":147},[49,964,67],{"class":66},[49,966,967,969,971,973],{"class":51,"line":59},[49,968,845],{"class":73},[49,970,77],{"class":66},[49,972,850],{"class":73},[49,974,83],{"class":66},[49,976,977,979,981,983,985],{"class":51,"line":70},[49,978,857],{"class":73},[49,980,77],{"class":66},[49,982,106],{"class":73},[49,984,110],{"class":109},[49,986,83],{"class":66},[49,988,989,991,993,995,997],{"class":51,"line":86},[49,990,870],{"class":73},[49,992,77],{"class":66},[49,994,875],{"class":73},[49,996,110],{"class":109},[49,998,83],{"class":66},[49,1000,1001],{"class":51,"line":98},[49,1002,137],{"class":66},[183,1004,1006],{"id":1005},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,1008,771],{},[174,1010],{"style":176,"src":1011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,1013,1014],{},"实现结构图：",[174,1016],{"style":176,"src":1017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,1019,1020],{},"巧妙运用浮动元素不会压住文字的特性",[19,1022,1023],{},"代码显示：",[39,1025,1027],{"className":41,"code":1026,"language":43,"meta":44,"style":44},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[46,1028,1029,1035,1046,1050,1055,1060,1066,1083],{"__ignoreMap":44},[49,1030,1031,1033],{"class":51,"line":52},[49,1032,838],{"class":62},[49,1034,67],{"class":66},[49,1036,1037,1040,1042,1044],{"class":51,"line":59},[49,1038,1039],{"class":73},"  float",[49,1041,77],{"class":66},[49,1043,304],{"class":73},[49,1045,83],{"class":66},[49,1047,1048],{"class":51,"line":70},[49,1049,137],{"class":66},[49,1051,1052],{"class":51,"line":86},[49,1053,1054],{"class":66},"```Css\n",[49,1056,1057],{"class":51,"line":98},[49,1058,1059],{"class":55},"\u002F* margin 复合写法（同上） *\u002F\n",[49,1061,1062,1064],{"class":51,"line":121},[49,1063,838],{"class":62},[49,1065,67],{"class":66},[49,1067,1068,1071,1073,1075,1078,1080],{"class":51,"line":134},[49,1069,1070],{"class":73},"  margin",[49,1072,77],{"class":66},[49,1074,80],{"class":73},[49,1076,1077],{"class":73}," auto",[49,1079,463],{"class":66},[49,1081,1082],{"class":55},"\u002F* 块级盒子水平居中 *\u002F\n",[49,1084,1086],{"class":51,"line":1085},8,[49,1087,137],{"class":66},[19,1089,1090],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[39,1092,1096],{"className":1093,"code":1095,"language":267},[1094],"language-text","\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",[46,1097,1095],{"__ignoreMap":44},[174,1099],{"style":176,"src":1100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,1102,1103],{},"最终展示结果：",[39,1105,1107],{"className":41,"code":1106,"language":43,"meta":44,"style":44},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[46,1108,1109,1113,1119,1133],{"__ignoreMap":44},[49,1110,1111],{"class":51,"line":52},[49,1112,1059],{"class":55},[49,1114,1115,1117],{"class":51,"line":59},[49,1116,838],{"class":62},[49,1118,67],{"class":66},[49,1120,1121,1123,1125,1127,1129,1131],{"class":51,"line":70},[49,1122,1070],{"class":73},[49,1124,77],{"class":66},[49,1126,80],{"class":73},[49,1128,1077],{"class":73},[49,1130,463],{"class":66},[49,1132,1082],{"class":55},[49,1134,1135],{"class":51,"line":86},[49,1136,137],{"class":66},[174,1138],{"style":176,"src":1139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,1141,1143],{"id":1142},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[183,1145,1147],{"id":1146},"_1341-原理","13.4.1 原理",[174,1149],{"style":176,"src":1150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[39,1152,1153],{"className":41,"code":1106,"language":43,"meta":44,"style":44},[46,1154,1155,1159,1165,1179],{"__ignoreMap":44},[49,1156,1157],{"class":51,"line":52},[49,1158,1059],{"class":55},[49,1160,1161,1163],{"class":51,"line":59},[49,1162,838],{"class":62},[49,1164,67],{"class":66},[49,1166,1167,1169,1171,1173,1175,1177],{"class":51,"line":70},[49,1168,1070],{"class":73},[49,1170,77],{"class":66},[49,1172,80],{"class":73},[49,1174,1077],{"class":73},[49,1176,463],{"class":66},[49,1178,1082],{"class":55},[49,1180,1181],{"class":51,"line":86},[49,1182,137],{"class":66},[183,1184,1186],{"id":1185},"_1342-实例","13.4.2 实例",[174,1188],{"style":176,"src":1189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[39,1191,1193],{"className":41,"code":1192,"language":43,"meta":44,"style":44},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[46,1194,1195,1202,1212,1216,1223,1234],{"__ignoreMap":44},[49,1196,1197,1200],{"class":51,"line":52},[49,1198,1199],{"class":62},".left",[49,1201,67],{"class":66},[49,1203,1204,1206,1208,1210],{"class":51,"line":59},[49,1205,1039],{"class":73},[49,1207,77],{"class":66},[49,1209,304],{"class":73},[49,1211,83],{"class":66},[49,1213,1214],{"class":51,"line":70},[49,1215,137],{"class":66},[49,1217,1218,1221],{"class":51,"line":86},[49,1219,1220],{"class":62},".right",[49,1222,67],{"class":66},[49,1224,1225,1227,1229,1232],{"class":51,"line":98},[49,1226,1039],{"class":73},[49,1228,77],{"class":66},[49,1230,1231],{"class":73},"right",[49,1233,83],{"class":66},[49,1235,1236],{"class":51,"line":121},[49,1237,137],{"class":66},[14,1239,1241],{"id":1240},"_135-css的初始化","13.5 css的初始化",[19,1243,1244],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,1246,1247],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,1249,1250],{},"每个网页都必须首先进行 CSS初始化。",[19,1252,1253],{},"这里我们以 京东CSS初始化代码为例。",[19,1255,1256],{},"在网页右键查看网页源代码",[19,1258,1259],{},"找到css的link引入语句",[19,1261,1262],{},"然后ctrl+f 输入body",[19,1264,1265],{},"①",[174,1267],{"style":176,"src":1268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,1270,1271],{},"②",[174,1273],{"style":176,"src":1274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,1276,1277],{},"③打开了网页上传压缩的代码",[174,1279],{"style":176,"src":1280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,1282,1283],{},"④从body前可以查看这个网页的初始化代码",[19,1285,1286],{},[485,1287,1288],{},"Unicode编码字体：",[19,1290,1291],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,1293,1294],{},"比如：",[19,1296,1297],{},"黑体 \\9ED1\\4F53",[19,1299,1300],{},"宋体 \\5B8B\\4F53",[19,1302,1303],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1305,1306,1307],"style",{},"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":44,"searchDepth":59,"depth":59,"links":1309},[1310,1311,1318,1322,1326],{"id":16,"depth":59,"text":17},{"id":180,"depth":59,"text":181,"children":1312},[1313,1314,1315,1316,1317],{"id":185,"depth":70,"text":186},{"id":350,"depth":70,"text":351},{"id":476,"depth":70,"text":477},{"id":623,"depth":70,"text":624},{"id":683,"depth":70,"text":684},{"id":744,"depth":59,"text":745,"children":1319},[1320,1321],{"id":767,"depth":70,"text":768},{"id":1005,"depth":70,"text":1006},{"id":1142,"depth":59,"text":1143,"children":1323},[1324,1325],{"id":1146,"depth":70,"text":1147},{"id":1185,"depth":70,"text":1186},{"id":1240,"depth":59,"text":1241},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":5,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",[1336,6416,7522,8942,11931,13282,14771,15860,24620,24632,25230,25256,25380,25621,25686,25704,25717,25764,25888,26057,26256,26436,26641,26777,26872,26909,26922,27232,27973,28681,28702,29721,31352,31503,31516,31528,31829,51641,51656,51673,51706,54572,77907,94048,94069,94182,94303,95073,95736,96097,96135,96241,96341,96384,96410,96471,98125,98226,98251,98742,99242,100321,100604,101346,101848,101860,103876,105540,107043,108741,110658,112577,114599,118069,118501,118964,119713,122657,123005,123027,123383,126690,126702,127105,127128,127275,127442,127646,127945,128501,129158,131088,132673,133322,134813,136244,137301,138995,140747,143157,143273,144208,144419,145304,146539,146767,146780,147935,150347,152715,156036,158513,160157,161934,163947,166999,169179,171706,173900],{"id":1337,"title":1338,"body":1339,"description":44,"extension":1328,"meta":6411,"navigation":1330,"path":6412,"seo":6413,"stem":6414,"__hash__":6415},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1340,"toc":6383},[1341,1344,1348,1351,1355,1366,1370,1374,1377,1380,1383,1386,1389,1417,1421,1424,1427,1430,1433,1484,1488,1507,1509,1523,1526,1534,1537,2388,2395,2411,2415,2501,2505,2511,2598,2602,2640,2644,2708,2712,2716,2722,2733,2737,2742,2746,2751,2755,2760,2764,2768,2773,3042,3047,3185,3190,3446,3449,3457,3461,3466,3569,3572,3878,3887,3988,3991,3994,3997,4000,4260,4265,4405,4408,4587,4590,4718,4721,4873,4877,4882,4885,4896,4904,4907,5014,5018,5022,5027,5077,5082,5087,5111,5116,5169,5172,5177,5354,5359,5644,5649,6046,6050,6055,6112,6117,6125,6128,6268,6271,6380],[10,1342,1338],{"id":1343},"_1基础入门",[14,1345,1347],{"id":1346},"_11注释","1.1注释",[19,1349,1350],{},"\u002F\u002F或者\u002F* *\u002F",[14,1352,1354],{"id":1353},"_12命名","1.2命名",[591,1356,1357,1360,1363],{},[26,1358,1359],{},"字母数字下划线",[26,1361,1362],{},"开头必须是字母或_",[26,1364,1365],{},"不能使用关键词",[14,1367,1369],{"id":1368},"_13数据类型","1.3数据类型",[183,1371,1373],{"id":1372},"_131整形","1.3.1整形",[19,1375,1376],{},"short 短整形 2",[19,1378,1379],{},"int 整形 4",[19,1381,1382],{},"long 长整形 win4 linux32位4 linux64位8",[19,1384,1385],{},"long long 长长整形 8",[19,1387,1388],{},"利用sizeof可以求数据类型占用的内存空间大小",[39,1390,1394],{"className":1391,"code":1392,"language":1393,"meta":44,"style":44},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[46,1395,1396,1410],{"__ignoreMap":44},[49,1397,1398,1401,1404,1407],{"class":51,"line":52},[49,1399,1400],{"class":109},"sizeof",[49,1402,1403],{"class":66},"(",[49,1405,1406],{"class":109},"int",[49,1408,1409],{"class":66},")\n",[49,1411,1412,1414],{"class":51,"line":59},[49,1413,1400],{"class":109},[49,1415,1416],{"class":66},"(num)\n",[183,1418,1420],{"id":1419},"_132浮点型","1.3.2浮点型",[19,1422,1423],{},"float 单精度 4节 7位有效数字",[19,1425,1426],{},"double 双精度 8节 15-16有效数字",[19,1428,1429],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,1431,1432],{},"注意点：",[39,1434,1436],{"className":1391,"code":1435,"language":1393,"meta":44,"style":44},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[46,1437,1438,1461],{"__ignoreMap":44},[49,1439,1440,1443,1446,1449,1452,1455,1458],{"class":51,"line":52},[49,1441,1442],{"class":109},"float",[49,1444,1445],{"class":66}," f1",[49,1447,1448],{"class":109},"=",[49,1450,1451],{"class":73},"3.14",[49,1453,1454],{"class":109},"f",[49,1456,1457],{"class":66},";",[49,1459,1460],{"class":55}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[49,1462,1463,1465,1468,1470,1473,1476,1479,1481],{"class":51,"line":59},[49,1464,1442],{"class":109},[49,1466,1467],{"class":66}," f2",[49,1469,1448],{"class":109},[49,1471,1472],{"class":73},"3",[49,1474,1475],{"class":109},"e",[49,1477,1478],{"class":73},"2",[49,1480,1457],{"class":66},[49,1482,1483],{"class":55}," \u002F\u002F科学记数法\n",[183,1485,1487],{"id":1486},"_133字符型","1.3.3字符型",[39,1489,1491],{"className":1391,"code":1490,"language":1393,"meta":44,"style":44},"char ch='a'\n",[46,1492,1493],{"__ignoreMap":44},[49,1494,1495,1498,1501,1503],{"class":51,"line":52},[49,1496,1497],{"class":109},"char",[49,1499,1500],{"class":66}," ch",[49,1502,1448],{"class":109},[49,1504,1506],{"class":1505},"sZZnC","'a'\n",[19,1508,1432],{},[591,1510,1511,1514,1517,1520],{},[26,1512,1513],{},"在显示字符型变量时，只能单引号，双引号x",[26,1515,1516],{},"单引号内只能一个字符，不能字符串",[26,1518,1519],{},"c和c++字符型变量只占用一个字符",[26,1521,1522],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,1524,1525],{},"ASCII码大致由以下两部分组成：",[591,1527,1528,1531],{},[26,1529,1530],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[26,1532,1533],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,1535,1536],{},"ASCII码表格：",[293,1538,1539,1579],{},[296,1540,1541],{},[299,1542,1543,1549,1554,1558,1563,1567,1571,1575],{},[302,1544,1545,1548],{},[485,1546,1547],{},"ASCII","值",[302,1550,1551],{},[485,1552,1553],{},"控制字符",[302,1555,1556,1548],{},[485,1557,1547],{},[302,1559,1560],{},[485,1561,1562],{},"字符",[302,1564,1565,1548],{},[485,1566,1547],{},[302,1568,1569],{},[485,1570,1562],{},[302,1572,1573,1548],{},[485,1574,1547],{},[302,1576,1577],{},[485,1578,1562],{},[310,1580,1581,1606,1631,1656,1681,1707,1732,1757,1783,1808,1834,1859,1885,1910,1936,1962,1988,2012,2037,2062,2087,2111,2136,2161,2186,2211,2236,2262,2287,2312,2336,2362],{},[299,1582,1583,1585,1588,1591,1594,1597,1600,1603],{},[315,1584,80],{},[315,1586,1587],{},"NUT",[315,1589,1590],{},"32",[315,1592,1593],{},"(space)",[315,1595,1596],{},"64",[315,1598,1599],{},"@",[315,1601,1602],{},"96",[315,1604,1605],{},"、",[299,1607,1608,1610,1613,1616,1619,1622,1625,1628],{},[315,1609,159],{},[315,1611,1612],{},"SOH",[315,1614,1615],{},"33",[315,1617,1618],{},"!",[315,1620,1621],{},"65",[315,1623,1624],{},"A",[315,1626,1627],{},"97",[315,1629,1630],{},"a",[299,1632,1633,1635,1638,1641,1644,1647,1650,1653],{},[315,1634,1478],{},[315,1636,1637],{},"STX",[315,1639,1640],{},"34",[315,1642,1643],{},"\"",[315,1645,1646],{},"66",[315,1648,1649],{},"B",[315,1651,1652],{},"98",[315,1654,1655],{},"b",[299,1657,1658,1660,1663,1666,1669,1672,1675,1678],{},[315,1659,1472],{},[315,1661,1662],{},"ETX",[315,1664,1665],{},"35",[315,1667,1668],{},"#",[315,1670,1671],{},"67",[315,1673,1674],{},"C",[315,1676,1677],{},"99",[315,1679,1680],{},"c",[299,1682,1683,1686,1689,1692,1695,1698,1701,1704],{},[315,1684,1685],{},"4",[315,1687,1688],{},"EOT",[315,1690,1691],{},"36",[315,1693,1694],{},"$",[315,1696,1697],{},"68",[315,1699,1700],{},"D",[315,1702,1703],{},"100",[315,1705,1706],{},"d",[299,1708,1709,1712,1715,1718,1721,1724,1727,1730],{},[315,1710,1711],{},"5",[315,1713,1714],{},"ENQ",[315,1716,1717],{},"37",[315,1719,1720],{},"%",[315,1722,1723],{},"69",[315,1725,1726],{},"E",[315,1728,1729],{},"101",[315,1731,1475],{},[299,1733,1734,1737,1740,1743,1746,1749,1752,1755],{},[315,1735,1736],{},"6",[315,1738,1739],{},"ACK",[315,1741,1742],{},"38",[315,1744,1745],{},"&",[315,1747,1748],{},"70",[315,1750,1751],{},"F",[315,1753,1754],{},"102",[315,1756,1454],{},[299,1758,1759,1762,1765,1768,1771,1774,1777,1780],{},[315,1760,1761],{},"7",[315,1763,1764],{},"BEL",[315,1766,1767],{},"39",[315,1769,1770],{},",",[315,1772,1773],{},"71",[315,1775,1776],{},"G",[315,1778,1779],{},"103",[315,1781,1782],{},"g",[299,1784,1785,1788,1791,1794,1796,1799,1802,1805],{},[315,1786,1787],{},"8",[315,1789,1790],{},"BS",[315,1792,1793],{},"40",[315,1795,1403],{},[315,1797,1798],{},"72",[315,1800,1801],{},"H",[315,1803,1804],{},"104",[315,1806,1807],{},"h",[299,1809,1810,1813,1816,1819,1822,1825,1828,1831],{},[315,1811,1812],{},"9",[315,1814,1815],{},"HT",[315,1817,1818],{},"41",[315,1820,1821],{},")",[315,1823,1824],{},"73",[315,1826,1827],{},"I",[315,1829,1830],{},"105",[315,1832,1833],{},"i",[299,1835,1836,1838,1841,1844,1847,1850,1853,1856],{},[315,1837,106],{},[315,1839,1840],{},"LF",[315,1842,1843],{},"42",[315,1845,1846],{},"*",[315,1848,1849],{},"74",[315,1851,1852],{},"J",[315,1854,1855],{},"106",[315,1857,1858],{},"j",[299,1860,1861,1864,1867,1870,1873,1876,1879,1882],{},[315,1862,1863],{},"11",[315,1865,1866],{},"VT",[315,1868,1869],{},"43",[315,1871,1872],{},"+",[315,1874,1875],{},"75",[315,1877,1878],{},"K",[315,1880,1881],{},"107",[315,1883,1884],{},"k",[299,1886,1887,1890,1893,1896,1898,1901,1904,1907],{},[315,1888,1889],{},"12",[315,1891,1892],{},"FF",[315,1894,1895],{},"44",[315,1897,1770],{},[315,1899,1900],{},"76",[315,1902,1903],{},"L",[315,1905,1906],{},"108",[315,1908,1909],{},"l",[299,1911,1912,1915,1918,1921,1924,1927,1930,1933],{},[315,1913,1914],{},"13",[315,1916,1917],{},"CR",[315,1919,1920],{},"45",[315,1922,1923],{},"-",[315,1925,1926],{},"77",[315,1928,1929],{},"M",[315,1931,1932],{},"109",[315,1934,1935],{},"m",[299,1937,1938,1941,1944,1947,1950,1953,1956,1959],{},[315,1939,1940],{},"14",[315,1942,1943],{},"SO",[315,1945,1946],{},"46",[315,1948,1949],{},".",[315,1951,1952],{},"78",[315,1954,1955],{},"N",[315,1957,1958],{},"110",[315,1960,1961],{},"n",[299,1963,1964,1967,1970,1973,1976,1979,1982,1985],{},[315,1965,1966],{},"15",[315,1968,1969],{},"SI",[315,1971,1972],{},"47",[315,1974,1975],{},"\u002F",[315,1977,1978],{},"79",[315,1980,1981],{},"O",[315,1983,1984],{},"111",[315,1986,1987],{},"o",[299,1989,1990,1993,1996,1999,2001,2004,2007,2010],{},[315,1991,1992],{},"16",[315,1994,1995],{},"DLE",[315,1997,1998],{},"48",[315,2000,80],{},[315,2002,2003],{},"80",[315,2005,2006],{},"P",[315,2008,2009],{},"112",[315,2011,19],{},[299,2013,2014,2017,2020,2023,2025,2028,2031,2034],{},[315,2015,2016],{},"17",[315,2018,2019],{},"DCI",[315,2021,2022],{},"49",[315,2024,159],{},[315,2026,2027],{},"81",[315,2029,2030],{},"Q",[315,2032,2033],{},"113",[315,2035,2036],{},"q",[299,2038,2039,2042,2045,2048,2050,2053,2056,2059],{},[315,2040,2041],{},"18",[315,2043,2044],{},"DC2",[315,2046,2047],{},"50",[315,2049,1478],{},[315,2051,2052],{},"82",[315,2054,2055],{},"R",[315,2057,2058],{},"114",[315,2060,2061],{},"r",[299,2063,2064,2067,2070,2073,2075,2078,2081,2084],{},[315,2065,2066],{},"19",[315,2068,2069],{},"DC3",[315,2071,2072],{},"51",[315,2074,1472],{},[315,2076,2077],{},"83",[315,2079,2080],{},"S",[315,2082,2083],{},"115",[315,2085,2086],{},"s",[299,2088,2089,2091,2094,2097,2099,2102,2105,2108],{},[315,2090,875],{},[315,2092,2093],{},"DC4",[315,2095,2096],{},"52",[315,2098,1685],{},[315,2100,2101],{},"84",[315,2103,2104],{},"T",[315,2106,2107],{},"116",[315,2109,2110],{},"t",[299,2112,2113,2116,2119,2122,2124,2127,2130,2133],{},[315,2114,2115],{},"21",[315,2117,2118],{},"NAK",[315,2120,2121],{},"53",[315,2123,1711],{},[315,2125,2126],{},"85",[315,2128,2129],{},"U",[315,2131,2132],{},"117",[315,2134,2135],{},"u",[299,2137,2138,2141,2144,2147,2149,2152,2155,2158],{},[315,2139,2140],{},"22",[315,2142,2143],{},"SYN",[315,2145,2146],{},"54",[315,2148,1736],{},[315,2150,2151],{},"86",[315,2153,2154],{},"V",[315,2156,2157],{},"118",[315,2159,2160],{},"v",[299,2162,2163,2166,2169,2172,2174,2177,2180,2183],{},[315,2164,2165],{},"23",[315,2167,2168],{},"TB",[315,2170,2171],{},"55",[315,2173,1761],{},[315,2175,2176],{},"87",[315,2178,2179],{},"W",[315,2181,2182],{},"119",[315,2184,2185],{},"w",[299,2187,2188,2191,2194,2197,2199,2202,2205,2208],{},[315,2189,2190],{},"24",[315,2192,2193],{},"CAN",[315,2195,2196],{},"56",[315,2198,1787],{},[315,2200,2201],{},"88",[315,2203,2204],{},"X",[315,2206,2207],{},"120",[315,2209,2210],{},"x",[299,2212,2213,2216,2219,2222,2224,2227,2230,2233],{},[315,2214,2215],{},"25",[315,2217,2218],{},"EM",[315,2220,2221],{},"57",[315,2223,1812],{},[315,2225,2226],{},"89",[315,2228,2229],{},"Y",[315,2231,2232],{},"121",[315,2234,2235],{},"y",[299,2237,2238,2241,2244,2247,2250,2253,2256,2259],{},[315,2239,2240],{},"26",[315,2242,2243],{},"SUB",[315,2245,2246],{},"58",[315,2248,2249],{},":",[315,2251,2252],{},"90",[315,2254,2255],{},"Z",[315,2257,2258],{},"122",[315,2260,2261],{},"z",[299,2263,2264,2267,2270,2273,2275,2278,2281,2284],{},[315,2265,2266],{},"27",[315,2268,2269],{},"ESC",[315,2271,2272],{},"59",[315,2274,1457],{},[315,2276,2277],{},"91",[315,2279,2280],{},"[",[315,2282,2283],{},"123",[315,2285,2286],{},"{",[299,2288,2289,2292,2295,2298,2301,2304,2306,2309],{},[315,2290,2291],{},"28",[315,2293,2294],{},"FS",[315,2296,2297],{},"60",[315,2299,2300],{},"\u003C",[315,2302,2303],{},"92",[315,2305,1975],{},[315,2307,2308],{},"124",[315,2310,2311],{},"|",[299,2313,2314,2317,2320,2323,2325,2328,2331,2334],{},[315,2315,2316],{},"29",[315,2318,2319],{},"GS",[315,2321,2322],{},"61",[315,2324,1448],{},[315,2326,2327],{},"93",[315,2329,2330],{},"]",[315,2332,2333],{},"125",[315,2335,620],{},[299,2337,2338,2341,2344,2347,2350,2353,2356,2359],{},[315,2339,2340],{},"30",[315,2342,2343],{},"RS",[315,2345,2346],{},"62",[315,2348,2349],{},">",[315,2351,2352],{},"94",[315,2354,2355],{},"^",[315,2357,2358],{},"126",[315,2360,2361],{},"`",[299,2363,2364,2367,2370,2373,2376,2379,2382,2385],{},[315,2365,2366],{},"31",[315,2368,2369],{},"US",[315,2371,2372],{},"63",[315,2374,2375],{},"?",[315,2377,2378],{},"95",[315,2380,2381],{},"_",[315,2383,2384],{},"127",[315,2386,2387],{},"DEL",[19,2389,2390,2391,2394],{},"ASCII 码大致由以下",[485,2392,2393],{},"两部分组","成：",[23,2396,2397,2404],{},[26,2398,2399,2400,2403],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[485,2401,2402],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[26,2405,2406,2407,2410],{},"ASCII 打印字符：数字 ",[485,2408,2409],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[183,2412,2414],{"id":2413},"_134转义字符","1.3.4转义字符",[39,2416,2418],{"className":1391,"code":2417,"language":1393,"meta":44,"style":44},"\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",[46,2419,2420,2425,2441,2455,2460,2473,2478],{"__ignoreMap":44},[49,2421,2422],{"class":51,"line":52},[49,2423,2424],{"class":55},"\u002F\u002F换行符\n",[49,2426,2427,2430,2433,2436,2438],{"class":51,"line":59},[49,2428,2429],{"class":66},"cout ",[49,2431,2432],{"class":109},"\u003C\u003C",[49,2434,2435],{"class":1505},"\"hello world\u002Fn\"",[49,2437,1457],{"class":66},[49,2439,2440],{"class":55}," \u002F\u002F就等同于如下：\n",[49,2442,2443,2445,2447,2450,2452],{"class":51,"line":70},[49,2444,2429],{"class":66},[49,2446,2432],{"class":109},[49,2448,2449],{"class":1505},"\"hello world\"",[49,2451,2432],{"class":109},[49,2453,2454],{"class":66},"endl;\n",[49,2456,2457],{"class":51,"line":86},[49,2458,2459],{"class":55},"\u002F\u002F反斜杠\n",[49,2461,2462,2464,2466,2469,2471],{"class":51,"line":98},[49,2463,2429],{"class":66},[49,2465,2432],{"class":109},[49,2467,2468],{"class":1505},"\"\u002F\u002F\"",[49,2470,2432],{"class":109},[49,2472,2454],{"class":66},[49,2474,2475],{"class":51,"line":121},[49,2476,2477],{"class":55},"\u002F\u002F水平制表符\n",[49,2479,2480,2482,2484,2487,2490,2493,2495,2498],{"class":51,"line":134},[49,2481,2429],{"class":66},[49,2483,2432],{"class":109},[49,2485,2486],{"class":1505},"\"aaaa",[49,2488,2489],{"class":73},"\\t",[49,2491,2492],{"class":1505},"helloworld\"",[49,2494,2432],{"class":109},[49,2496,2497],{"class":66},"endl;",[49,2499,2500],{"class":55}," \u002F\u002F输出窗口时有对齐效果\n",[183,2502,2504],{"id":2503},"_135字符串型","1.3.5字符串型",[19,2506,2507,2508,2510],{},"char 变量名",[49,2509],{},"=\"字符串值\"",[39,2512,2514],{"className":1391,"code":2513,"language":1393,"meta":44,"style":44},"\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",[46,2515,2516,2521,2526,2531,2536,2549,2562,2567,2572,2584],{"__ignoreMap":44},[49,2517,2518],{"class":51,"line":52},[49,2519,2520],{"class":55},"\u002F\u002Fc风格字符串\n",[49,2522,2523],{"class":51,"line":59},[49,2524,2525],{"class":55},"\u002F\u002F注意事项：\n",[49,2527,2528],{"class":51,"line":70},[49,2529,2530],{"class":55},"\u002F\u002F1.char字符串名[]\n",[49,2532,2533],{"class":51,"line":86},[49,2534,2535],{"class":55},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[49,2537,2538,2540,2543,2545,2547],{"class":51,"line":98},[49,2539,1497],{"class":109},[49,2541,2542],{"class":66}," str[]",[49,2544,1448],{"class":109},[49,2546,2449],{"class":1505},[49,2548,83],{"class":66},[49,2550,2551,2553,2555,2558,2560],{"class":51,"line":121},[49,2552,2429],{"class":66},[49,2554,2432],{"class":109},[49,2556,2557],{"class":66},"str",[49,2559,2432],{"class":109},[49,2561,2454],{"class":66},[49,2563,2564],{"class":51,"line":134},[49,2565,2566],{"class":55},"\u002F\u002Fc++风格字符串\n",[49,2568,2569],{"class":51,"line":1085},[49,2570,2571],{"class":55},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[49,2573,2575,2578,2580,2582],{"class":51,"line":2574},9,[49,2576,2577],{"class":66},"string str2",[49,2579,1448],{"class":109},[49,2581,2449],{"class":1505},[49,2583,83],{"class":66},[49,2585,2587,2589,2591,2594,2596],{"class":51,"line":2586},10,[49,2588,2429],{"class":66},[49,2590,2432],{"class":109},[49,2592,2593],{"class":66},"str2",[49,2595,2432],{"class":109},[49,2597,2454],{"class":66},[183,2599,2601],{"id":2600},"_136布尔类型bool","1.3.6布尔类型bool",[39,2603,2605],{"className":1391,"code":2604,"language":1393,"meta":44,"style":44},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[46,2606,2607,2622],{"__ignoreMap":44},[49,2608,2609,2612,2615,2617,2620],{"class":51,"line":52},[49,2610,2611],{"class":109},"bool",[49,2613,2614],{"class":66}," flag",[49,2616,1448],{"class":109},[49,2618,2619],{"class":73},"true",[49,2621,83],{"class":66},[49,2623,2624,2627,2630,2633,2635,2637],{"class":51,"line":59},[49,2625,2626],{"class":66},"cout",[49,2628,2629],{"class":109},"\u003C\u003Csizeof",[49,2631,2632],{"class":66},"(flag)",[49,2634,2432],{"class":109},[49,2636,2497],{"class":66},[49,2638,2639],{"class":55}," \u002F\u002F查看布尔占内存空间\n",[14,2641,2643],{"id":2642},"_14键盘输入cin","1.4键盘输入cin",[39,2645,2647],{"className":1391,"code":2646,"language":1393,"meta":44,"style":44},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[46,2648,2649,2662,2679,2690],{"__ignoreMap":44},[49,2650,2651,2653,2656,2658,2660],{"class":51,"line":52},[49,2652,1406],{"class":109},[49,2654,2655],{"class":66}," a",[49,2657,1448],{"class":109},[49,2659,80],{"class":73},[49,2661,83],{"class":66},[49,2663,2664,2666,2668,2671,2673,2675,2677],{"class":51,"line":59},[49,2665,2626],{"class":66},[49,2667,2432],{"class":109},[49,2669,2670],{"class":1505},"\"请给整型变量a赋值\"",[49,2672,2432],{"class":109},[49,2674,1630],{"class":66},[49,2676,2432],{"class":109},[49,2678,2454],{"class":66},[49,2680,2681,2684,2687],{"class":51,"line":70},[49,2682,2683],{"class":66},"cin ",[49,2685,2686],{"class":109},">>",[49,2688,2689],{"class":66}," a;\n",[49,2691,2692,2694,2696,2699,2702,2704,2706],{"class":51,"line":86},[49,2693,2429],{"class":66},[49,2695,2432],{"class":109},[49,2697,2698],{"class":1505}," \"整型变量a=\"",[49,2700,2701],{"class":109}," \u003C\u003C",[49,2703,1630],{"class":66},[49,2705,2432],{"class":109},[49,2707,2454],{"class":66},[14,2709,2711],{"id":2710},"_15运算符","1.5运算符",[183,2713,2715],{"id":2714},"_151算术运算符","1.5.1算术运算符",[19,2717,2718,2721],{},[174,2719],{"alt":44,"src":2720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[591,2723,2724,2727,2730],{},[26,2725,2726],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[26,2728,2729],{},"两个小数不可以做取模运算",[26,2731,2732],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[183,2734,2736],{"id":2735},"_152赋值运算符","1.5.2赋值运算符",[19,2738,2739],{},[174,2740],{"alt":44,"src":2741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[183,2743,2745],{"id":2744},"_153比较运算符","1.5.3比较运算符",[19,2747,2748],{},[174,2749],{"alt":44,"src":2750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[183,2752,2754],{"id":2753},"_154逻辑运算符","1.5.4逻辑运算符",[19,2756,2757],{},[174,2758],{"alt":44,"src":2759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2761,2763],{"id":2762},"_16程序流程结构","1.6程序流程结构",[183,2765,2767],{"id":2766},"_161选择结构","1.6.1选择结构",[591,2769,2770],{},[26,2771,2772],{},"if语句\n单行、多行、多条件if语句",[39,2774,2776],{"className":1391,"code":2775,"language":1393,"meta":44,"style":44},"\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",[46,2777,2778,2783,2798,2803,2817,2821,2826,2835,2848,2852,2865,2870,2876,2881,2895,2900,2906,2927,2932,2946,2951,2980,2985,3002,3007,3012,3017,3031,3036],{"__ignoreMap":44},[49,2779,2780],{"class":51,"line":52},[49,2781,2782],{"class":55},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[49,2784,2785,2788,2791,2793,2796],{"class":51,"line":59},[49,2786,2787],{"class":109},"if",[49,2789,2790],{"class":66},"(score",[49,2792,2349],{"class":109},[49,2794,2795],{"class":73},"600",[49,2797,1409],{"class":66},[49,2799,2800],{"class":51,"line":70},[49,2801,2802],{"class":66},"{\n",[49,2804,2805,2808,2810,2813,2815],{"class":51,"line":86},[49,2806,2807],{"class":66},"    cout",[49,2809,2432],{"class":109},[49,2811,2812],{"class":1505},"'这是单行if语句'",[49,2814,2432],{"class":109},[49,2816,2454],{"class":66},[49,2818,2819],{"class":51,"line":98},[49,2820,137],{"class":66},[49,2822,2823],{"class":51,"line":121},[49,2824,2825],{"class":55},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[49,2827,2828,2830,2832],{"class":51,"line":134},[49,2829,2683],{"class":66},[49,2831,2686],{"class":109},[49,2833,2834],{"class":66}," score\n",[49,2836,2837,2839,2841,2844,2846],{"class":51,"line":1085},[49,2838,2787],{"class":109},[49,2840,2790],{"class":66},[49,2842,2843],{"class":109},"\u003C=",[49,2845,2795],{"class":73},[49,2847,1409],{"class":66},[49,2849,2850],{"class":51,"line":2574},[49,2851,2802],{"class":66},[49,2853,2854,2856,2858,2861,2863],{"class":51,"line":2586},[49,2855,2807],{"class":66},[49,2857,2686],{"class":109},[49,2859,2860],{"class":1505},"\"小于等于600\"",[49,2862,2432],{"class":109},[49,2864,2454],{"class":66},[49,2866,2868],{"class":51,"line":2867},11,[49,2869,137],{"class":66},[49,2871,2873],{"class":51,"line":2872},12,[49,2874,2875],{"class":109},"else\n",[49,2877,2879],{"class":51,"line":2878},13,[49,2880,2802],{"class":66},[49,2882,2884,2886,2888,2891,2893],{"class":51,"line":2883},14,[49,2885,2807],{"class":66},[49,2887,2686],{"class":109},[49,2889,2890],{"class":1505},"\"大于600\"",[49,2892,2686],{"class":109},[49,2894,2454],{"class":66},[49,2896,2898],{"class":51,"line":2897},15,[49,2899,137],{"class":66},[49,2901,2903],{"class":51,"line":2902},16,[49,2904,2905],{"class":55},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[49,2907,2909,2911,2914,2916,2918,2921,2923,2925],{"class":51,"line":2908},17,[49,2910,2787],{"class":109},[49,2912,2913],{"class":66}," (",[49,2915,80],{"class":73},[49,2917,2300],{"class":109},[49,2919,2920],{"class":66},"num",[49,2922,2300],{"class":109},[49,2924,1703],{"class":73},[49,2926,1409],{"class":66},[49,2928,2930],{"class":51,"line":2929},18,[49,2931,2802],{"class":66},[49,2933,2935,2937,2939,2942,2944],{"class":51,"line":2934},19,[49,2936,2807],{"class":66},[49,2938,2432],{"class":109},[49,2940,2941],{"class":1505},"\"小于100\"",[49,2943,2432],{"class":109},[49,2945,2454],{"class":66},[49,2947,2949],{"class":51,"line":2948},20,[49,2950,137],{"class":66},[49,2952,2954,2957,2960,2963,2966,2968,2971,2973,2975,2978],{"class":51,"line":2953},21,[49,2955,2956],{"class":109},"else",[49,2958,2959],{"class":109}," if",[49,2961,2962],{"class":66}," (nmu",[49,2964,2965],{"class":109},">=",[49,2967,1703],{"class":73},[49,2969,2970],{"class":109},"&&",[49,2972,2920],{"class":66},[49,2974,2300],{"class":109},[49,2976,2977],{"class":73},"200",[49,2979,1409],{"class":66},[49,2981,2983],{"class":51,"line":2982},22,[49,2984,2802],{"class":66},[49,2986,2988,2990,2992,2995,2997,2999],{"class":51,"line":2987},23,[49,2989,2807],{"class":66},[49,2991,2432],{"class":109},[49,2993,2994],{"class":1505},"\"不小于100且小于200\"",[49,2996,2432],{"class":109},[49,2998,2497],{"class":66},[49,3000,3001],{"class":55}," \u002F\u002F可以无限else if,python中是elif：\n",[49,3003,3005],{"class":51,"line":3004},24,[49,3006,137],{"class":66},[49,3008,3010],{"class":51,"line":3009},25,[49,3011,2875],{"class":109},[49,3013,3015],{"class":51,"line":3014},26,[49,3016,2802],{"class":66},[49,3018,3020,3022,3024,3027,3029],{"class":51,"line":3019},27,[49,3021,2807],{"class":66},[49,3023,2432],{"class":109},[49,3025,3026],{"class":1505},"\"不小于200\"",[49,3028,2432],{"class":109},[49,3030,2454],{"class":66},[49,3032,3034],{"class":51,"line":3033},28,[49,3035,137],{"class":66},[49,3037,3039],{"class":51,"line":3038},29,[49,3040,3041],{"class":55},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[591,3043,3044],{"start":59},[26,3045,3046],{},"三目运算符",[39,3048,3050],{"className":1391,"code":3049,"language":1393,"meta":44,"style":44},"\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",[46,3051,3052,3057,3062,3088,3110,3127,3132,3155,3170],{"__ignoreMap":44},[49,3053,3054],{"class":51,"line":52},[49,3055,3056],{"class":55},"\u002F\u002F创建三个变量a,b,c\n",[49,3058,3059],{"class":51,"line":59},[49,3060,3061],{"class":55},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[49,3063,3064,3066,3068,3070,3072,3075,3077,3079,3082,3084,3086],{"class":51,"line":70},[49,3065,1406],{"class":109},[49,3067,2655],{"class":66},[49,3069,1448],{"class":109},[49,3071,875],{"class":73},[49,3073,3074],{"class":66},",b",[49,3076,1448],{"class":109},[49,3078,106],{"class":73},[49,3080,3081],{"class":66},",c",[49,3083,1448],{"class":109},[49,3085,80],{"class":73},[49,3087,83],{"class":66},[49,3089,3090,3092,3094,3097,3099,3101,3103,3105,3107],{"class":51,"line":86},[49,3091,1680],{"class":66},[49,3093,1448],{"class":109},[49,3095,3096],{"class":66},"(a",[49,3098,2349],{"class":109},[49,3100,1655],{"class":66},[49,3102,2375],{"class":109},[49,3104,1630],{"class":66},[49,3106,2249],{"class":109},[49,3108,3109],{"class":66},"b)\n",[49,3111,3112,3114,3116,3119,3121,3123,3125],{"class":51,"line":98},[49,3113,2626],{"class":66},[49,3115,2432],{"class":109},[49,3117,3118],{"class":1505},"\"c=\"",[49,3120,2432],{"class":109},[49,3122,1680],{"class":66},[49,3124,2432],{"class":109},[49,3126,2454],{"class":66},[49,3128,3129],{"class":51,"line":121},[49,3130,3131],{"class":55},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[49,3133,3134,3136,3138,3140,3142,3144,3146,3149,3151,3153],{"class":51,"line":134},[49,3135,3096],{"class":66},[49,3137,2349],{"class":109},[49,3139,1655],{"class":66},[49,3141,2375],{"class":109},[49,3143,1630],{"class":66},[49,3145,2249],{"class":109},[49,3147,3148],{"class":66},"b)",[49,3150,1448],{"class":109},[49,3152,1703],{"class":73},[49,3154,83],{"class":66},[49,3156,3157,3159,3161,3163,3165,3167],{"class":51,"line":1085},[49,3158,2626],{"class":66},[49,3160,2432],{"class":109},[49,3162,1630],{"class":66},[49,3164,2432],{"class":109},[49,3166,2497],{"class":66},[49,3168,3169],{"class":55}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[49,3171,3172,3174,3176,3178,3180,3182],{"class":51,"line":2574},[49,3173,2626],{"class":66},[49,3175,2432],{"class":109},[49,3177,1655],{"class":66},[49,3179,2432],{"class":109},[49,3181,2497],{"class":66},[49,3183,3184],{"class":55}," \u002F\u002F10   a>b,b还是原值\n",[591,3186,3187],{"start":70},[26,3188,3189],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[39,3191,3193],{"className":1391,"code":3192,"language":1393,"meta":44,"style":44},"\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",[46,3194,3195,3200,3208,3221,3231,3235,3249,3262,3272,3280,3285,3310,3331,3353,3374,3396,3417,3437,3442],{"__ignoreMap":44},[49,3196,3197],{"class":51,"line":52},[49,3198,3199],{"class":55},"\u002F\u002F案例-电影打分\n",[49,3201,3202,3205],{"class":51,"line":59},[49,3203,3204],{"class":109},"#include",[49,3206,3207],{"class":1505},"\u003Ciostream>\n",[49,3209,3210,3213,3216,3219],{"class":51,"line":70},[49,3211,3212],{"class":109},"using",[49,3214,3215],{"class":109}," namespace",[49,3217,3218],{"class":62}," std",[49,3220,83],{"class":66},[49,3222,3223,3225,3228],{"class":51,"line":86},[49,3224,1406],{"class":109},[49,3226,3227],{"class":62}," main",[49,3229,3230],{"class":66},"()\n",[49,3232,3233],{"class":51,"line":98},[49,3234,2802],{"class":66},[49,3236,3237,3240,3243,3245,3247],{"class":51,"line":121},[49,3238,3239],{"class":109},"    int",[49,3241,3242],{"class":66}," score",[49,3244,1448],{"class":109},[49,3246,80],{"class":73},[49,3248,83],{"class":66},[49,3250,3251,3253,3255,3258,3260],{"class":51,"line":134},[49,3252,2807],{"class":66},[49,3254,2432],{"class":109},[49,3256,3257],{"class":1505},"\"电影打分：\"",[49,3259,2432],{"class":109},[49,3261,2454],{"class":66},[49,3263,3264,3267,3269],{"class":51,"line":1085},[49,3265,3266],{"class":66},"    cin",[49,3268,2686],{"class":109},[49,3270,3271],{"class":66},"score;\n",[49,3273,3274,3277],{"class":51,"line":2574},[49,3275,3276],{"class":109},"    switch",[49,3278,3279],{"class":66},"(score)\n",[49,3281,3282],{"class":51,"line":2586},[49,3283,3284],{"class":66},"    {\n",[49,3286,3287,3290,3293,3296,3298,3301,3303,3305,3308],{"class":51,"line":2867},[49,3288,3289],{"class":109},"        case",[49,3291,3292],{"class":73}," 10",[49,3294,3295],{"class":66},":cout",[49,3297,2432],{"class":109},[49,3299,3300],{"class":1505},"\"经典\"",[49,3302,2432],{"class":109},[49,3304,2497],{"class":66},[49,3306,3307],{"class":109},"break",[49,3309,83],{"class":66},[49,3311,3312,3314,3317,3319,3321,3323,3325,3327,3329],{"class":51,"line":2872},[49,3313,3289],{"class":109},[49,3315,3316],{"class":73}," 9",[49,3318,3295],{"class":66},[49,3320,2432],{"class":109},[49,3322,3300],{"class":1505},[49,3324,2432],{"class":109},[49,3326,2497],{"class":66},[49,3328,3307],{"class":109},[49,3330,83],{"class":66},[49,3332,3333,3335,3338,3340,3342,3345,3347,3349,3351],{"class":51,"line":2878},[49,3334,3289],{"class":109},[49,3336,3337],{"class":73}," 8",[49,3339,3295],{"class":66},[49,3341,2432],{"class":109},[49,3343,3344],{"class":1505},"\"非常好\"",[49,3346,2432],{"class":109},[49,3348,2497],{"class":66},[49,3350,3307],{"class":109},[49,3352,83],{"class":66},[49,3354,3355,3357,3360,3362,3364,3366,3368,3370,3372],{"class":51,"line":2883},[49,3356,3289],{"class":109},[49,3358,3359],{"class":73}," 7",[49,3361,3295],{"class":66},[49,3363,2432],{"class":109},[49,3365,3344],{"class":1505},[49,3367,2432],{"class":109},[49,3369,2497],{"class":66},[49,3371,3307],{"class":109},[49,3373,83],{"class":66},[49,3375,3376,3378,3381,3383,3385,3388,3390,3392,3394],{"class":51,"line":2897},[49,3377,3289],{"class":109},[49,3379,3380],{"class":73}," 6",[49,3382,3295],{"class":66},[49,3384,2432],{"class":109},[49,3386,3387],{"class":1505},"\"一般\"",[49,3389,2432],{"class":109},[49,3391,2497],{"class":66},[49,3393,3307],{"class":109},[49,3395,83],{"class":66},[49,3397,3398,3400,3403,3405,3407,3409,3411,3413,3415],{"class":51,"line":2902},[49,3399,3289],{"class":109},[49,3401,3402],{"class":73}," 5",[49,3404,3295],{"class":66},[49,3406,2432],{"class":109},[49,3408,3387],{"class":1505},[49,3410,2432],{"class":109},[49,3412,2497],{"class":66},[49,3414,3307],{"class":109},[49,3416,83],{"class":66},[49,3418,3419,3422,3424,3426,3429,3431,3433,3435],{"class":51,"line":2908},[49,3420,3421],{"class":109},"        default",[49,3423,3295],{"class":66},[49,3425,2432],{"class":109},[49,3427,3428],{"class":1505},"\"烂片\"",[49,3430,2432],{"class":109},[49,3432,2497],{"class":66},[49,3434,3307],{"class":109},[49,3436,83],{"class":66},[49,3438,3439],{"class":51,"line":2929},[49,3440,3441],{"class":66},"    }\n",[49,3443,3444],{"class":51,"line":2934},[49,3445,137],{"class":66},[19,3447,3448],{},"if和switch区别：",[23,3450,3451,3454],{},[26,3452,3453],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[26,3455,3456],{},"switch优点：结构清晰，执行效率高",[183,3458,3460],{"id":3459},"_162循环结构","1.6.2循环结构",[591,3462,3463],{},[26,3464,3465],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[39,3467,3469],{"className":1391,"code":3468,"language":1393,"meta":44,"style":44},"\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",[46,3470,3471,3476,3484,3488,3501,3515,3519,3539,3549,3553,3565],{"__ignoreMap":44},[49,3472,3473],{"class":51,"line":52},[49,3474,3475],{"class":55},"\u002F\u002F打印0-9数字\n",[49,3477,3478,3480,3482],{"class":51,"line":59},[49,3479,1406],{"class":109},[49,3481,3227],{"class":62},[49,3483,3230],{"class":66},[49,3485,3486],{"class":51,"line":70},[49,3487,2802],{"class":66},[49,3489,3490,3492,3495,3497,3499],{"class":51,"line":86},[49,3491,3239],{"class":109},[49,3493,3494],{"class":66}," num",[49,3496,1448],{"class":109},[49,3498,80],{"class":73},[49,3500,83],{"class":66},[49,3502,3503,3506,3509,3511,3513],{"class":51,"line":98},[49,3504,3505],{"class":109},"    while",[49,3507,3508],{"class":66},"(num",[49,3510,2300],{"class":109},[49,3512,106],{"class":73},[49,3514,1409],{"class":66},[49,3516,3517],{"class":51,"line":121},[49,3518,3284],{"class":66},[49,3520,3521,3524,3527,3529,3531,3533,3536],{"class":51,"line":134},[49,3522,3523],{"class":62},"       std",[49,3525,3526],{"class":66},"::cout",[49,3528,2432],{"class":109},[49,3530,2920],{"class":66},[49,3532,2432],{"class":109},[49,3534,3535],{"class":62},"std",[49,3537,3538],{"class":66},"::endl;\n",[49,3540,3541,3544,3547],{"class":51,"line":1085},[49,3542,3543],{"class":66},"        num",[49,3545,3546],{"class":109},"++",[49,3548,83],{"class":66},[49,3550,3551],{"class":51,"line":2574},[49,3552,3441],{"class":66},[49,3554,3555,3558,3560,3563],{"class":51,"line":2586},[49,3556,3557],{"class":62},"    system",[49,3559,1403],{"class":66},[49,3561,3562],{"class":1505},"\"pause\"",[49,3564,1409],{"class":66},[49,3566,3567],{"class":51,"line":2867},[49,3568,137],{"class":66},[19,3570,3571],{},"注意：写好循环条件，避免死循环情况",[39,3573,3575],{"className":1391,"code":3574,"language":1393,"meta":44,"style":44},"\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",[46,3576,3577,3582,3589,3596,3606,3614,3618,3623,3650,3655,3660,3668,3695,3700,3705,3718,3728,3732,3742,3747,3760,3765,3779,3784,3799,3803,3816,3820,3825,3829,3843,3851,3856,3862,3868,3873],{"__ignoreMap":44},[49,3578,3579],{"class":51,"line":52},[49,3580,3581],{"class":55},"\u002F\u002F循环结构-猜数字\n",[49,3583,3584,3586],{"class":51,"line":59},[49,3585,3204],{"class":109},[49,3587,3588],{"class":1505}," \u003Ciostream>\n",[49,3590,3591,3593],{"class":51,"line":70},[49,3592,3204],{"class":109},[49,3594,3595],{"class":1505}," \u003Cctime>\n",[49,3597,3598,3600,3602,3604],{"class":51,"line":86},[49,3599,3212],{"class":109},[49,3601,3215],{"class":109},[49,3603,3218],{"class":62},[49,3605,83],{"class":66},[49,3607,3608,3610,3612],{"class":51,"line":98},[49,3609,1406],{"class":109},[49,3611,3227],{"class":62},[49,3613,3230],{"class":66},[49,3615,3616],{"class":51,"line":121},[49,3617,2802],{"class":66},[49,3619,3620],{"class":51,"line":134},[49,3621,3622],{"class":55},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[49,3624,3625,3628,3631,3634,3637,3639,3642,3644,3647],{"class":51,"line":1085},[49,3626,3627],{"class":62},"    srand",[49,3629,3630],{"class":66},"((",[49,3632,3633],{"class":109},"unsigned",[49,3635,3636],{"class":109}," int",[49,3638,1821],{"class":66},[49,3640,3641],{"class":62},"time",[49,3643,1403],{"class":66},[49,3645,3646],{"class":73},"NULL",[49,3648,3649],{"class":66},"));\n",[49,3651,3652],{"class":51,"line":2574},[49,3653,3654],{"emptyLinePlaceholder":1330},"\n",[49,3656,3657],{"class":51,"line":2586},[49,3658,3659],{"class":55},"    \u002F\u002F1.系统生成随机数\n",[49,3661,3662,3665],{"class":51,"line":2867},[49,3663,3664],{"class":55},"    \u002F\u002Frand()%100",[49,3666,3667],{"class":55}," \u002F\u002F生成0-99的随机数\n",[49,3669,3670,3672,3674,3676,3679,3682,3684,3686,3688,3690,3692],{"class":51,"line":2872},[49,3671,3239],{"class":109},[49,3673,3494],{"class":66},[49,3675,1448],{"class":109},[49,3677,3678],{"class":62},"rand",[49,3680,3681],{"class":66},"()",[49,3683,1720],{"class":109},[49,3685,1703],{"class":73},[49,3687,1872],{"class":109},[49,3689,159],{"class":73},[49,3691,1457],{"class":66},[49,3693,3694],{"class":55}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[49,3696,3697],{"class":51,"line":2878},[49,3698,3699],{"class":55},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[49,3701,3702],{"class":51,"line":2883},[49,3703,3704],{"class":55},"    \u002F\u002F2.玩家猜测\n",[49,3706,3707,3709,3712,3714,3716],{"class":51,"line":2897},[49,3708,3239],{"class":109},[49,3710,3711],{"class":66}," val",[49,3713,1448],{"class":109},[49,3715,80],{"class":73},[49,3717,83],{"class":66},[49,3719,3720,3722,3724,3726],{"class":51,"line":2902},[49,3721,3505],{"class":109},[49,3723,2913],{"class":66},[49,3725,159],{"class":73},[49,3727,1409],{"class":66},[49,3729,3730],{"class":51,"line":2908},[49,3731,3284],{"class":66},[49,3733,3734,3737,3739],{"class":51,"line":2929},[49,3735,3736],{"class":66},"        cin",[49,3738,2686],{"class":109},[49,3740,3741],{"class":66},"val;\n",[49,3743,3744],{"class":51,"line":2934},[49,3745,3746],{"class":55},"        \u002F\u002F3.判断玩家猜测\n",[49,3748,3749,3752,3755,3757],{"class":51,"line":2948},[49,3750,3751],{"class":109},"        if",[49,3753,3754],{"class":66},"(val",[49,3756,2300],{"class":109},[49,3758,3759],{"class":66},"num) \n",[49,3761,3762],{"class":51,"line":2953},[49,3763,3764],{"class":66},"        {\n",[49,3766,3767,3770,3772,3775,3777],{"class":51,"line":2982},[49,3768,3769],{"class":66},"            cout",[49,3771,2432],{"class":109},[49,3773,3774],{"class":1505},"\"猜小了！\"",[49,3776,2432],{"class":109},[49,3778,2454],{"class":66},[49,3780,3781],{"class":51,"line":2987},[49,3782,3783],{"class":66},"        }\n",[49,3785,3786,3789,3791,3794,3796],{"class":51,"line":3004},[49,3787,3788],{"class":109},"        else",[49,3790,2959],{"class":109},[49,3792,3793],{"class":66}," (val",[49,3795,2349],{"class":109},[49,3797,3798],{"class":66},"num)\n",[49,3800,3801],{"class":51,"line":3009},[49,3802,3764],{"class":66},[49,3804,3805,3807,3809,3812,3814],{"class":51,"line":3014},[49,3806,3769],{"class":66},[49,3808,2432],{"class":109},[49,3810,3811],{"class":1505},"\"猜大了！\"",[49,3813,2432],{"class":109},[49,3815,2454],{"class":66},[49,3817,3818],{"class":51,"line":3019},[49,3819,3783],{"class":66},[49,3821,3822],{"class":51,"line":3033},[49,3823,3824],{"class":109},"        else\n",[49,3826,3827],{"class":51,"line":3038},[49,3828,3764],{"class":66},[49,3830,3832,3834,3836,3839,3841],{"class":51,"line":3831},30,[49,3833,3769],{"class":66},[49,3835,2432],{"class":109},[49,3837,3838],{"class":1505},"\"猜对了！\"",[49,3840,2432],{"class":109},[49,3842,2454],{"class":66},[49,3844,3846,3849],{"class":51,"line":3845},31,[49,3847,3848],{"class":109},"            break",[49,3850,83],{"class":66},[49,3852,3854],{"class":51,"line":3853},32,[49,3855,3783],{"class":66},[49,3857,3859],{"class":51,"line":3858},33,[49,3860,3861],{"class":55},"        \u002F\u002F猜对 退出游戏\n",[49,3863,3865],{"class":51,"line":3864},34,[49,3866,3867],{"class":55},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[49,3869,3871],{"class":51,"line":3870},35,[49,3872,3441],{"class":66},[49,3874,3876],{"class":51,"line":3875},36,[49,3877,137],{"class":66},[591,3879,3880],{"start":59},[26,3881,3882,3883,3886],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[485,3884,3885],{},"do...while会先执行一次循环语句","，在判断循环语句",[39,3888,3890],{"className":1391,"code":3889,"language":1393,"meta":44,"style":44},"\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",[46,3891,3892,3897,3905,3909,3921,3929,3933,3950,3957,3961,3974,3984],{"__ignoreMap":44},[49,3893,3894],{"class":51,"line":52},[49,3895,3896],{"class":55},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[49,3898,3899,3901,3903],{"class":51,"line":59},[49,3900,1406],{"class":109},[49,3902,3227],{"class":62},[49,3904,3230],{"class":66},[49,3906,3907],{"class":51,"line":70},[49,3908,2802],{"class":66},[49,3910,3911,3913,3915,3917,3919],{"class":51,"line":86},[49,3912,3239],{"class":109},[49,3914,3494],{"class":66},[49,3916,1448],{"class":109},[49,3918,80],{"class":73},[49,3920,83],{"class":66},[49,3922,3923,3926],{"class":51,"line":98},[49,3924,3925],{"class":109},"    do",[49,3927,3928],{"class":66}," \n",[49,3930,3931],{"class":51,"line":121},[49,3932,3284],{"class":66},[49,3934,3935,3938,3940,3942,3944,3946,3948],{"class":51,"line":134},[49,3936,3937],{"class":62},"        std",[49,3939,3526],{"class":66},[49,3941,2432],{"class":109},[49,3943,2920],{"class":66},[49,3945,2432],{"class":109},[49,3947,3535],{"class":62},[49,3949,3538],{"class":66},[49,3951,3952,3954],{"class":51,"line":1085},[49,3953,3543],{"class":66},[49,3955,3956],{"class":109},"++\n",[49,3958,3959],{"class":51,"line":2574},[49,3960,3441],{"class":66},[49,3962,3963,3965,3967,3969,3971],{"class":51,"line":2586},[49,3964,3505],{"class":109},[49,3966,3508],{"class":66},[49,3968,2300],{"class":109},[49,3970,106],{"class":73},[49,3972,3973],{"class":66},");\n",[49,3975,3976,3978,3980,3982],{"class":51,"line":2867},[49,3977,3557],{"class":62},[49,3979,1403],{"class":66},[49,3981,3562],{"class":1505},[49,3983,3973],{"class":66},[49,3985,3986],{"class":51,"line":2872},[49,3987,137],{"class":66},[19,3989,3990],{},"案例-水仙花数",[19,3992,3993],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3995,3996],{},"例如：1^3+5^3+3^3=153",[19,3998,3999],{},"请用do...while语句，求出所有3位数的水仙花数",[39,4001,4003],{"className":1391,"code":4002,"language":1393,"meta":44,"style":44},"#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",[46,4004,4005,4011,4021,4029,4033,4038,4050,4056,4060,4065,4081,4097,4113,4128,4147,4162,4210,4214,4226,4230,4238,4242,4256],{"__ignoreMap":44},[49,4006,4007,4009],{"class":51,"line":52},[49,4008,3204],{"class":109},[49,4010,3588],{"class":1505},[49,4012,4013,4015,4017,4019],{"class":51,"line":59},[49,4014,3212],{"class":109},[49,4016,3215],{"class":109},[49,4018,3218],{"class":62},[49,4020,83],{"class":66},[49,4022,4023,4025,4027],{"class":51,"line":70},[49,4024,1406],{"class":109},[49,4026,3227],{"class":62},[49,4028,3230],{"class":66},[49,4030,4031],{"class":51,"line":86},[49,4032,2802],{"class":66},[49,4034,4035],{"class":51,"line":98},[49,4036,4037],{"class":55},"    \u002F\u002F1.先打印所有三位数字\n",[49,4039,4040,4042,4044,4046,4048],{"class":51,"line":121},[49,4041,3239],{"class":109},[49,4043,3494],{"class":66},[49,4045,1448],{"class":109},[49,4047,1703],{"class":73},[49,4049,83],{"class":66},[49,4051,4052,4054],{"class":51,"line":134},[49,4053,3925],{"class":109},[49,4055,3928],{"class":66},[49,4057,4058],{"class":51,"line":1085},[49,4059,3284],{"class":66},[49,4061,4062],{"class":51,"line":2574},[49,4063,4064],{"class":55},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[49,4066,4067,4070,4072,4074,4076,4078],{"class":51,"line":2586},[49,4068,4069],{"class":109},"        int",[49,4071,2655],{"class":66},[49,4073,1448],{"class":109},[49,4075,80],{"class":73},[49,4077,1457],{"class":66},[49,4079,4080],{"class":55}," \u002F\u002F个位\n",[49,4082,4083,4085,4088,4090,4092,4094],{"class":51,"line":2867},[49,4084,4069],{"class":109},[49,4086,4087],{"class":66}," b",[49,4089,1448],{"class":109},[49,4091,80],{"class":73},[49,4093,1457],{"class":66},[49,4095,4096],{"class":55}," \u002F\u002F十位\n",[49,4098,4099,4101,4104,4106,4108,4110],{"class":51,"line":2872},[49,4100,4069],{"class":109},[49,4102,4103],{"class":66}," c",[49,4105,1448],{"class":109},[49,4107,80],{"class":73},[49,4109,1457],{"class":66},[49,4111,4112],{"class":55}," \u002F\u002F百位\n",[49,4114,4115,4118,4120,4122,4124,4126],{"class":51,"line":2878},[49,4116,4117],{"class":66},"        a",[49,4119,1448],{"class":109},[49,4121,2920],{"class":66},[49,4123,1720],{"class":109},[49,4125,106],{"class":73},[49,4127,83],{"class":66},[49,4129,4130,4133,4135,4137,4139,4141,4143,4145],{"class":51,"line":2883},[49,4131,4132],{"class":66},"        b",[49,4134,1448],{"class":109},[49,4136,2920],{"class":66},[49,4138,1975],{"class":109},[49,4140,106],{"class":73},[49,4142,1720],{"class":109},[49,4144,106],{"class":73},[49,4146,83],{"class":66},[49,4148,4149,4152,4154,4156,4158,4160],{"class":51,"line":2897},[49,4150,4151],{"class":66},"        c",[49,4153,1448],{"class":109},[49,4155,2920],{"class":66},[49,4157,1975],{"class":109},[49,4159,1703],{"class":73},[49,4161,83],{"class":66},[49,4163,4164,4166,4168,4170,4172,4174,4176,4178,4180,4182,4184,4186,4188,4190,4192,4194,4196,4198,4201,4204,4207],{"class":51,"line":2902},[49,4165,3751],{"class":109},[49,4167,3096],{"class":66},[49,4169,1846],{"class":109},[49,4171,1630],{"class":66},[49,4173,1846],{"class":109},[49,4175,1630],{"class":66},[49,4177,1872],{"class":109},[49,4179,1655],{"class":66},[49,4181,1846],{"class":109},[49,4183,1655],{"class":66},[49,4185,1846],{"class":109},[49,4187,1655],{"class":66},[49,4189,1872],{"class":109},[49,4191,1680],{"class":66},[49,4193,1846],{"class":109},[49,4195,1680],{"class":66},[49,4197,1846],{"class":109},[49,4199,4200],{"class":66},"c ",[49,4202,4203],{"class":109},"==",[49,4205,4206],{"class":66}," num)",[49,4208,4209],{"class":55}," \u002F\u002F如果是水仙花数，才打印\n",[49,4211,4212],{"class":51,"line":2908},[49,4213,3764],{"class":66},[49,4215,4216,4218,4220,4222,4224],{"class":51,"line":2929},[49,4217,3769],{"class":66},[49,4219,2432],{"class":109},[49,4221,2920],{"class":66},[49,4223,2432],{"class":109},[49,4225,2454],{"class":66},[49,4227,4228],{"class":51,"line":2934},[49,4229,3783],{"class":66},[49,4231,4232,4234,4236],{"class":51,"line":2948},[49,4233,3543],{"class":66},[49,4235,3546],{"class":109},[49,4237,83],{"class":66},[49,4239,4240],{"class":51,"line":2953},[49,4241,3441],{"class":66},[49,4243,4244,4246,4249,4251,4254],{"class":51,"line":2982},[49,4245,3505],{"class":109},[49,4247,4248],{"class":66}," (num ",[49,4250,2300],{"class":109},[49,4252,4253],{"class":73}," 1000",[49,4255,3973],{"class":66},[49,4257,4258],{"class":51,"line":2987},[49,4259,137],{"class":66},[591,4261,4262],{"start":70},[26,4263,4264],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[39,4266,4268],{"className":1391,"code":4267,"language":1393,"meta":44,"style":44},"\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",[46,4269,4270,4275,4304,4308,4320,4324,4329,4340,4347,4351,4365,4369,4376,4380,4392,4401],{"__ignoreMap":44},[49,4271,4272],{"class":51,"line":52},[49,4273,4274],{"class":55},"\u002F\u002F从数字0-9打印\n",[49,4276,4277,4280,4282,4284,4287,4289,4291,4294,4296,4298,4300,4302],{"class":51,"line":59},[49,4278,4279],{"class":109},"for",[49,4281,1403],{"class":66},[49,4283,1406],{"class":109},[49,4285,4286],{"class":66}," i",[49,4288,1448],{"class":109},[49,4290,80],{"class":73},[49,4292,4293],{"class":66},";i",[49,4295,2300],{"class":109},[49,4297,106],{"class":73},[49,4299,4293],{"class":66},[49,4301,3546],{"class":109},[49,4303,1409],{"class":66},[49,4305,4306],{"class":51,"line":70},[49,4307,2802],{"class":66},[49,4309,4310,4312,4314,4316,4318],{"class":51,"line":86},[49,4311,2807],{"class":66},[49,4313,2432],{"class":109},[49,4315,1833],{"class":66},[49,4317,2432],{"class":109},[49,4319,2454],{"class":66},[49,4321,4322],{"class":51,"line":98},[49,4323,137],{"class":66},[49,4325,4326],{"class":51,"line":121},[49,4327,4328],{"class":55},"\u002F\u002F上式可以进行拆分\n",[49,4330,4331,4333,4335,4337],{"class":51,"line":134},[49,4332,1406],{"class":109},[49,4334,4286],{"class":66},[49,4336,1448],{"class":109},[49,4338,4339],{"class":73},"0\n",[49,4341,4342,4344],{"class":51,"line":1085},[49,4343,4279],{"class":109},[49,4345,4346],{"class":66},"(;;;)\n",[49,4348,4349],{"class":51,"line":2574},[49,4350,2802],{"class":66},[49,4352,4353,4356,4359,4361,4363],{"class":51,"line":2586},[49,4354,4355],{"class":109},"    if",[49,4357,4358],{"class":66},"(i",[49,4360,2965],{"class":109},[49,4362,106],{"class":73},[49,4364,1409],{"class":66},[49,4366,4367],{"class":51,"line":2867},[49,4368,3284],{"class":66},[49,4370,4371,4374],{"class":51,"line":2872},[49,4372,4373],{"class":109},"        break",[49,4375,83],{"class":66},[49,4377,4378],{"class":51,"line":2878},[49,4379,3441],{"class":66},[49,4381,4382,4384,4386,4388,4390],{"class":51,"line":2883},[49,4383,2807],{"class":66},[49,4385,2432],{"class":109},[49,4387,1833],{"class":66},[49,4389,2432],{"class":109},[49,4391,2454],{"class":66},[49,4393,4394,4397,4399],{"class":51,"line":2897},[49,4395,4396],{"class":66},"    i",[49,4398,3546],{"class":109},[49,4400,83],{"class":66},[49,4402,4403],{"class":51,"line":2902},[49,4404,137],{"class":66},[19,4406,4407],{},"小练习",[39,4409,4411],{"className":1391,"code":4410,"language":1393,"meta":44,"style":44},"#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",[46,4412,4413,4419,4429,4437,4441,4446,4451,4479,4483,4488,4493,4534,4538,4551,4555,4559,4563,4575,4579,4583],{"__ignoreMap":44},[49,4414,4415,4417],{"class":51,"line":52},[49,4416,3204],{"class":109},[49,4418,3207],{"class":1505},[49,4420,4421,4423,4425,4427],{"class":51,"line":59},[49,4422,3212],{"class":109},[49,4424,3215],{"class":109},[49,4426,3218],{"class":62},[49,4428,83],{"class":66},[49,4430,4431,4433,4435],{"class":51,"line":70},[49,4432,1406],{"class":109},[49,4434,3227],{"class":62},[49,4436,3230],{"class":66},[49,4438,4439],{"class":51,"line":86},[49,4440,2802],{"class":66},[49,4442,4443],{"class":51,"line":98},[49,4444,4445],{"class":55},"    \u002F\u002F敲桌子案例\n",[49,4447,4448],{"class":51,"line":121},[49,4449,4450],{"class":55},"    \u002F\u002F1.先输出1-100的数字\n",[49,4452,4453,4456,4458,4460,4462,4464,4466,4469,4471,4473,4475,4477],{"class":51,"line":134},[49,4454,4455],{"class":109},"    for",[49,4457,1403],{"class":66},[49,4459,1406],{"class":109},[49,4461,4286],{"class":66},[49,4463,1448],{"class":109},[49,4465,159],{"class":73},[49,4467,4468],{"class":66},"; i",[49,4470,2843],{"class":109},[49,4472,1703],{"class":73},[49,4474,4468],{"class":66},[49,4476,3546],{"class":109},[49,4478,1409],{"class":66},[49,4480,4481],{"class":51,"line":1085},[49,4482,3284],{"class":66},[49,4484,4485],{"class":51,"line":2574},[49,4486,4487],{"class":55},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[49,4489,4490],{"class":51,"line":2586},[49,4491,4492],{"class":55},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[49,4494,4495,4497,4499,4501,4503,4505,4507,4510,4512,4514,4516,4518,4520,4522,4524,4526,4528,4530,4532],{"class":51,"line":2867},[49,4496,3751],{"class":109},[49,4498,4358],{"class":66},[49,4500,1720],{"class":109},[49,4502,1761],{"class":73},[49,4504,4203],{"class":109},[49,4506,80],{"class":73},[49,4508,4509],{"class":109}," ||",[49,4511,4286],{"class":66},[49,4513,1720],{"class":109},[49,4515,106],{"class":73},[49,4517,4203],{"class":109},[49,4519,1761],{"class":73},[49,4521,4509],{"class":109},[49,4523,4286],{"class":66},[49,4525,1975],{"class":109},[49,4527,106],{"class":73},[49,4529,4203],{"class":109},[49,4531,1761],{"class":73},[49,4533,1409],{"class":66},[49,4535,4536],{"class":51,"line":2872},[49,4537,3764],{"class":66},[49,4539,4540,4542,4544,4547,4549],{"class":51,"line":2878},[49,4541,3769],{"class":66},[49,4543,2432],{"class":109},[49,4545,4546],{"class":1505},"\"敲桌子\"",[49,4548,2432],{"class":109},[49,4550,2454],{"class":66},[49,4552,4553],{"class":51,"line":2883},[49,4554,3783],{"class":66},[49,4556,4557],{"class":51,"line":2897},[49,4558,3824],{"class":109},[49,4560,4561],{"class":51,"line":2902},[49,4562,3764],{"class":66},[49,4564,4565,4567,4569,4571,4573],{"class":51,"line":2908},[49,4566,3769],{"class":66},[49,4568,2432],{"class":109},[49,4570,1833],{"class":66},[49,4572,2432],{"class":109},[49,4574,2454],{"class":66},[49,4576,4577],{"class":51,"line":2929},[49,4578,3783],{"class":66},[49,4580,4581],{"class":51,"line":2934},[49,4582,3441],{"class":66},[49,4584,4585],{"class":51,"line":2948},[49,4586,137],{"class":66},[19,4588,4589],{},"嵌套实现星图",[39,4591,4593],{"className":1391,"code":4592,"language":1393,"meta":44,"style":44},"#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",[46,4594,4595,4601,4611,4619,4623,4649,4653,4682,4686,4697,4701,4710,4714],{"__ignoreMap":44},[49,4596,4597,4599],{"class":51,"line":52},[49,4598,3204],{"class":109},[49,4600,3207],{"class":1505},[49,4602,4603,4605,4607,4609],{"class":51,"line":59},[49,4604,3212],{"class":109},[49,4606,3215],{"class":109},[49,4608,3218],{"class":62},[49,4610,83],{"class":66},[49,4612,4613,4615,4617],{"class":51,"line":70},[49,4614,1406],{"class":109},[49,4616,3227],{"class":62},[49,4618,3230],{"class":66},[49,4620,4621],{"class":51,"line":86},[49,4622,2802],{"class":66},[49,4624,4625,4627,4629,4631,4633,4635,4637,4639,4641,4643,4645,4647],{"class":51,"line":98},[49,4626,4455],{"class":109},[49,4628,2913],{"class":66},[49,4630,1406],{"class":109},[49,4632,4286],{"class":66},[49,4634,1448],{"class":109},[49,4636,80],{"class":73},[49,4638,4293],{"class":66},[49,4640,2300],{"class":109},[49,4642,106],{"class":73},[49,4644,4293],{"class":66},[49,4646,3546],{"class":109},[49,4648,1409],{"class":66},[49,4650,4651],{"class":51,"line":121},[49,4652,3284],{"class":66},[49,4654,4655,4658,4660,4662,4665,4667,4669,4672,4674,4676,4678,4680],{"class":51,"line":134},[49,4656,4657],{"class":109},"        for",[49,4659,2913],{"class":66},[49,4661,1406],{"class":109},[49,4663,4664],{"class":66}," j",[49,4666,1448],{"class":109},[49,4668,80],{"class":73},[49,4670,4671],{"class":66},";j",[49,4673,2300],{"class":109},[49,4675,106],{"class":73},[49,4677,4671],{"class":66},[49,4679,3546],{"class":109},[49,4681,1409],{"class":66},[49,4683,4684],{"class":51,"line":1085},[49,4685,3764],{"class":66},[49,4687,4688,4690,4692,4695],{"class":51,"line":2574},[49,4689,3769],{"class":66},[49,4691,2432],{"class":109},[49,4693,4694],{"class":1505},"\"*\"",[49,4696,83],{"class":66},[49,4698,4699],{"class":51,"line":2586},[49,4700,3783],{"class":66},[49,4702,4703,4706,4708],{"class":51,"line":2867},[49,4704,4705],{"class":66},"        cout",[49,4707,2432],{"class":109},[49,4709,2454],{"class":66},[49,4711,4712],{"class":51,"line":2872},[49,4713,3441],{"class":66},[49,4715,4716],{"class":51,"line":2878},[49,4717,137],{"class":66},[19,4719,4720],{},"乘法口诀表",[39,4722,4724],{"className":1391,"code":4723,"language":1393,"meta":44,"style":44},"#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",[46,4725,4726,4732,4742,4750,4754,4780,4784,4809,4813,4853,4857,4865,4869],{"__ignoreMap":44},[49,4727,4728,4730],{"class":51,"line":52},[49,4729,3204],{"class":109},[49,4731,3588],{"class":1505},[49,4733,4734,4736,4738,4740],{"class":51,"line":59},[49,4735,3212],{"class":109},[49,4737,3215],{"class":109},[49,4739,3218],{"class":62},[49,4741,83],{"class":66},[49,4743,4744,4746,4748],{"class":51,"line":70},[49,4745,1406],{"class":109},[49,4747,3227],{"class":62},[49,4749,3230],{"class":66},[49,4751,4752],{"class":51,"line":86},[49,4753,2802],{"class":66},[49,4755,4756,4758,4760,4762,4764,4766,4768,4770,4772,4774,4776,4778],{"class":51,"line":98},[49,4757,4455],{"class":109},[49,4759,1403],{"class":66},[49,4761,1406],{"class":109},[49,4763,4286],{"class":66},[49,4765,1448],{"class":109},[49,4767,159],{"class":73},[49,4769,4293],{"class":66},[49,4771,2300],{"class":109},[49,4773,106],{"class":73},[49,4775,4293],{"class":66},[49,4777,3546],{"class":109},[49,4779,1409],{"class":66},[49,4781,4782],{"class":51,"line":121},[49,4783,3284],{"class":66},[49,4785,4786,4788,4790,4792,4794,4796,4798,4800,4802,4805,4807],{"class":51,"line":134},[49,4787,4657],{"class":109},[49,4789,1403],{"class":66},[49,4791,1406],{"class":109},[49,4793,4664],{"class":66},[49,4795,1448],{"class":109},[49,4797,159],{"class":73},[49,4799,4671],{"class":66},[49,4801,2843],{"class":109},[49,4803,4804],{"class":66},"i;j",[49,4806,3546],{"class":109},[49,4808,1409],{"class":66},[49,4810,4811],{"class":51,"line":1085},[49,4812,3764],{"class":66},[49,4814,4815,4817,4819,4821,4823,4825,4827,4829,4831,4834,4836,4838,4840,4842,4844,4847,4849,4851],{"class":51,"line":2574},[49,4816,3769],{"class":66},[49,4818,2432],{"class":109},[49,4820,1858],{"class":66},[49,4822,2432],{"class":109},[49,4824,4694],{"class":1505},[49,4826,2432],{"class":109},[49,4828,1833],{"class":66},[49,4830,2432],{"class":109},[49,4832,4833],{"class":1505},"\"=\"",[49,4835,2432],{"class":109},[49,4837,1833],{"class":66},[49,4839,1846],{"class":109},[49,4841,1858],{"class":66},[49,4843,2432],{"class":109},[49,4845,4846],{"class":1505},"'",[49,4848,2489],{"class":73},[49,4850,4846],{"class":1505},[49,4852,83],{"class":66},[49,4854,4855],{"class":51,"line":2586},[49,4856,3783],{"class":66},[49,4858,4859,4861,4863],{"class":51,"line":2867},[49,4860,4705],{"class":66},[49,4862,2432],{"class":109},[49,4864,2454],{"class":66},[49,4866,4867],{"class":51,"line":2872},[49,4868,3441],{"class":66},[49,4870,4871],{"class":51,"line":2878},[49,4872,137],{"class":66},[183,4874,4876],{"id":4875},"_163跳出语句","1.6.3跳出语句",[591,4878,4879],{},[26,4880,4881],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,4883,4884],{},"break使用时机：",[23,4886,4887,4890,4893],{},[26,4888,4889],{},"出现在switch条件语句中，作用是终止case并跳出switch",[26,4891,4892],{},"出现在循环结构中，作用是跳出当前的循环结构",[26,4894,4895],{},"出现在嵌套循环中，跳出最近的内层循环语句",[591,4897,4898,4901],{"start":59},[26,4899,4900],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[26,4902,4903],{},"goto语句\n语法：goto 标记;",[19,4905,4906],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[39,4908,4910],{"className":1391,"code":4909,"language":1393,"meta":44,"style":44},"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",[46,4911,4912,4920,4924,4937,4947,4960,4973,4986,4994,5010],{"__ignoreMap":44},[49,4913,4914,4916,4918],{"class":51,"line":52},[49,4915,1406],{"class":109},[49,4917,3227],{"class":62},[49,4919,3230],{"class":66},[49,4921,4922],{"class":51,"line":59},[49,4923,2802],{"class":66},[49,4925,4926,4928,4930,4933,4935],{"class":51,"line":70},[49,4927,2807],{"class":66},[49,4929,2432],{"class":109},[49,4931,4932],{"class":1505},"\"1\"",[49,4934,2432],{"class":109},[49,4936,2454],{"class":66},[49,4938,4939,4942,4945],{"class":51,"line":86},[49,4940,4941],{"class":109},"    goto",[49,4943,4944],{"class":62}," FLAG",[49,4946,83],{"class":66},[49,4948,4949,4951,4953,4956,4958],{"class":51,"line":98},[49,4950,2807],{"class":66},[49,4952,2432],{"class":109},[49,4954,4955],{"class":1505},"\"2\"",[49,4957,2432],{"class":109},[49,4959,2454],{"class":66},[49,4961,4962,4964,4966,4969,4971],{"class":51,"line":121},[49,4963,2807],{"class":66},[49,4965,2432],{"class":109},[49,4967,4968],{"class":1505},"\"3\"",[49,4970,2432],{"class":109},[49,4972,2454],{"class":66},[49,4974,4975,4977,4979,4982,4984],{"class":51,"line":134},[49,4976,2807],{"class":66},[49,4978,2432],{"class":109},[49,4980,4981],{"class":1505},"\"4\"",[49,4983,2432],{"class":109},[49,4985,2454],{"class":66},[49,4987,4988,4991],{"class":51,"line":1085},[49,4989,4990],{"class":62},"    FLAG",[49,4992,4993],{"class":66},":\n",[49,4995,4996,4998,5000,5003,5005,5007],{"class":51,"line":2574},[49,4997,2807],{"class":66},[49,4999,2432],{"class":109},[49,5001,5002],{"class":1505},"\"5\"",[49,5004,2432],{"class":109},[49,5006,2497],{"class":66},[49,5008,5009],{"class":55},"\u002F\u002F跳过了2,3,4,直接到5\n",[49,5011,5012],{"class":51,"line":2586},[49,5013,137],{"class":66},[14,5015,5017],{"id":5016},"_17数组","1.7数组",[183,5019,5021],{"id":5020},"_171一维数组","1.7.1一维数组",[591,5023,5024],{},[26,5025,5026],{},"一维数组定义方式",[293,5028,5029,5039],{},[296,5030,5031],{},[299,5032,5033,5036],{},[302,5034,5035],{},"方式",[302,5037,5038],{},"注意事项",[310,5040,5041,5055,5065],{},[299,5042,5043,5049],{},[315,5044,5045,5046,1457],{},"数据类型 数组名",[49,5047,5048],{},"数组长度",[315,5050,5051,5052,5054],{},"这种方式是先定义再arr",[49,5053,1833],{},"赋值",[299,5056,5057,5062],{},[315,5058,5045,5059,5061],{},[49,5060,5048],{},"={值1,值2....};",[315,5063,5064],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[299,5066,5067,5071],{},[315,5068,5045,5069,5061],{},[49,5070],{},[315,5072,5073,5074,5076],{},"int arr",[49,5075],{},";这是不正确的，按照这样的方式定义必须有初始长度",[591,5078,5079],{"start":59},[26,5080,5081],{},"一维数组数组名\n用途：",[23,5083,5084],{},[26,5085,5086],{},"1.可以统计整个数组在内存中的长度：",[39,5088,5090],{"className":1391,"code":5089,"language":1393,"meta":44,"style":44},"sizeof(arr);\nsizeof(arr[0]);\n",[46,5091,5092,5099],{"__ignoreMap":44},[49,5093,5094,5096],{"class":51,"line":52},[49,5095,1400],{"class":109},[49,5097,5098],{"class":66},"(arr);\n",[49,5100,5101,5103,5106,5108],{"class":51,"line":59},[49,5102,1400],{"class":109},[49,5104,5105],{"class":66},"(arr[",[49,5107,80],{"class":73},[49,5109,5110],{"class":66},"]);\n",[23,5112,5113],{},[26,5114,5115],{},"2.可以获取数组在内存中的首地址:",[39,5117,5119],{"className":1391,"code":5118,"language":1393,"meta":44,"style":44},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[46,5120,5121,5126,5139,5144],{"__ignoreMap":44},[49,5122,5123],{"class":51,"line":52},[49,5124,5125],{"class":55},"\u002F\u002F查看16进制的首地址\n",[49,5127,5128,5130,5132,5135,5137],{"class":51,"line":59},[49,5129,2626],{"class":66},[49,5131,2432],{"class":109},[49,5133,5134],{"class":66},"arr",[49,5136,2432],{"class":109},[49,5138,2454],{"class":66},[49,5140,5141],{"class":51,"line":70},[49,5142,5143],{"class":55},"\u002F\u002F看10进制数\n",[49,5145,5146,5148,5150,5152,5154,5156,5158,5161,5163,5165,5167],{"class":51,"line":86},[49,5147,2626],{"class":66},[49,5149,2432],{"class":109},[49,5151,1403],{"class":66},[49,5153,1406],{"class":109},[49,5155,1821],{"class":66},[49,5157,1745],{"class":109},[49,5159,5160],{"class":66},"arr[",[49,5162,80],{"class":73},[49,5164,2330],{"class":66},[49,5166,2432],{"class":109},[49,5168,2454],{"class":66},[19,5170,5171],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[23,5173,5174],{},[26,5175,5176],{},"1️⃣五只小猪称体重",[39,5178,5180],{"className":1391,"code":5179,"language":1393,"meta":44,"style":44},"#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",[46,5181,5182,5188,5198,5206,5210,5250,5263,5289,5293,5305,5309,5319,5323,5327,5340,5350],{"__ignoreMap":44},[49,5183,5184,5186],{"class":51,"line":52},[49,5185,3204],{"class":109},[49,5187,3207],{"class":1505},[49,5189,5190,5192,5194,5196],{"class":51,"line":59},[49,5191,3212],{"class":109},[49,5193,3215],{"class":109},[49,5195,3218],{"class":62},[49,5197,83],{"class":66},[49,5199,5200,5202,5204],{"class":51,"line":70},[49,5201,1406],{"class":109},[49,5203,3227],{"class":62},[49,5205,3230],{"class":66},[49,5207,5208],{"class":51,"line":86},[49,5209,2802],{"class":66},[49,5211,5212,5214,5217,5219,5221,5223,5225,5228,5230,5233,5235,5237,5239,5242,5244,5247],{"class":51,"line":98},[49,5213,3239],{"class":109},[49,5215,5216],{"class":66}," arr[",[49,5218,1711],{"class":73},[49,5220,2330],{"class":66},[49,5222,1448],{"class":109},[49,5224,2286],{"class":66},[49,5226,5227],{"class":73},"300",[49,5229,1770],{"class":66},[49,5231,5232],{"class":73},"350",[49,5234,1770],{"class":66},[49,5236,2977],{"class":73},[49,5238,1770],{"class":66},[49,5240,5241],{"class":73},"400",[49,5243,1770],{"class":66},[49,5245,5246],{"class":73},"250",[49,5248,5249],{"class":66},"};\n",[49,5251,5252,5254,5257,5259,5261],{"class":51,"line":121},[49,5253,3239],{"class":109},[49,5255,5256],{"class":66}," tmp",[49,5258,1448],{"class":109},[49,5260,80],{"class":73},[49,5262,83],{"class":66},[49,5264,5265,5267,5269,5271,5273,5275,5277,5279,5281,5283,5285,5287],{"class":51,"line":134},[49,5266,4455],{"class":109},[49,5268,2913],{"class":66},[49,5270,1406],{"class":109},[49,5272,4286],{"class":66},[49,5274,1448],{"class":109},[49,5276,80],{"class":73},[49,5278,4293],{"class":66},[49,5280,2300],{"class":109},[49,5282,1711],{"class":73},[49,5284,4293],{"class":66},[49,5286,3546],{"class":109},[49,5288,1409],{"class":66},[49,5290,5291],{"class":51,"line":1085},[49,5292,3284],{"class":66},[49,5294,5295,5297,5300,5302],{"class":51,"line":2574},[49,5296,3751],{"class":109},[49,5298,5299],{"class":66},"(tmp",[49,5301,2300],{"class":109},[49,5303,5304],{"class":66},"arr[i])\n",[49,5306,5307],{"class":51,"line":2586},[49,5308,3764],{"class":66},[49,5310,5311,5314,5316],{"class":51,"line":2867},[49,5312,5313],{"class":66},"            tmp",[49,5315,1448],{"class":109},[49,5317,5318],{"class":66},"arr[i];\n",[49,5320,5321],{"class":51,"line":2872},[49,5322,3783],{"class":66},[49,5324,5325],{"class":51,"line":2878},[49,5326,3441],{"class":66},[49,5328,5329,5331,5333,5336,5338],{"class":51,"line":2883},[49,5330,2807],{"class":66},[49,5332,2432],{"class":109},[49,5334,5335],{"class":66},"tmp",[49,5337,2432],{"class":109},[49,5339,2454],{"class":66},[49,5341,5342,5345,5348],{"class":51,"line":2897},[49,5343,5344],{"class":109},"    return",[49,5346,5347],{"class":73}," 0",[49,5349,83],{"class":66},[49,5351,5352],{"class":51,"line":2902},[49,5353,137],{"class":66},[23,5355,5356],{},[26,5357,5358],{},"2️⃣数组元素逆置",[39,5360,5362],{"className":1391,"code":5361,"language":1393,"meta":44,"style":44},"\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",[46,5363,5364,5369,5375,5385,5393,5397,5432,5448,5480,5493,5498,5503,5515,5525,5535,5540,5549,5559,5564,5569,5596,5600,5616,5620,5631,5640],{"__ignoreMap":44},[49,5365,5366],{"class":51,"line":52},[49,5367,5368],{"class":55},"\u002F\u002F元素逆置\n",[49,5370,5371,5373],{"class":51,"line":59},[49,5372,3204],{"class":109},[49,5374,3207],{"class":1505},[49,5376,5377,5379,5381,5383],{"class":51,"line":70},[49,5378,3212],{"class":109},[49,5380,3215],{"class":109},[49,5382,3218],{"class":62},[49,5384,83],{"class":66},[49,5386,5387,5389,5391],{"class":51,"line":86},[49,5388,1406],{"class":109},[49,5390,3227],{"class":62},[49,5392,3230],{"class":66},[49,5394,5395],{"class":51,"line":98},[49,5396,2802],{"class":66},[49,5398,5399,5402,5404,5406,5408,5410,5412,5414,5416,5418,5420,5422,5424,5426,5428,5430],{"class":51,"line":121},[49,5400,5401],{"class":109},"   int",[49,5403,5216],{"class":66},[49,5405,1711],{"class":73},[49,5407,2330],{"class":66},[49,5409,1448],{"class":109},[49,5411,2286],{"class":66},[49,5413,159],{"class":73},[49,5415,1770],{"class":66},[49,5417,1478],{"class":73},[49,5419,1770],{"class":66},[49,5421,1472],{"class":73},[49,5423,1770],{"class":66},[49,5425,1685],{"class":73},[49,5427,1770],{"class":66},[49,5429,1711],{"class":73},[49,5431,5249],{"class":66},[49,5433,5434,5436,5439,5441,5443,5445],{"class":51,"line":134},[49,5435,5401],{"class":109},[49,5437,5438],{"class":66}," start",[49,5440,1448],{"class":109},[49,5442,80],{"class":73},[49,5444,1457],{"class":66},[49,5446,5447],{"class":55},"\u002F\u002F起始下标\n",[49,5449,5450,5452,5455,5458,5461,5464,5466,5468,5471,5473,5475,5477],{"class":51,"line":1085},[49,5451,5401],{"class":109},[49,5453,5454],{"class":66}," end",[49,5456,5457],{"class":109},"=sizeof",[49,5459,5460],{"class":66},"(arr)",[49,5462,5463],{"class":109},"\u002Fsizeof",[49,5465,5105],{"class":66},[49,5467,80],{"class":73},[49,5469,5470],{"class":66},"])",[49,5472,1923],{"class":109},[49,5474,159],{"class":73},[49,5476,1457],{"class":66},[49,5478,5479],{"class":55},"\u002F\u002F结束下标\n",[49,5481,5482,5485,5488,5490],{"class":51,"line":2574},[49,5483,5484],{"class":109},"   while",[49,5486,5487],{"class":66}," (start",[49,5489,2300],{"class":109},[49,5491,5492],{"class":66},"end)\n",[49,5494,5495],{"class":51,"line":2586},[49,5496,5497],{"class":66},"   {\n",[49,5499,5500],{"class":51,"line":2867},[49,5501,5502],{"class":55},"    \u002F\u002F实现元素互换代码\n",[49,5504,5505,5507,5510,5512],{"class":51,"line":2872},[49,5506,3239],{"class":109},[49,5508,5509],{"class":66}," temp",[49,5511,1448],{"class":109},[49,5513,5514],{"class":66},"arr[start];\n",[49,5516,5517,5520,5522],{"class":51,"line":2878},[49,5518,5519],{"class":66},"    arr[start]",[49,5521,1448],{"class":109},[49,5523,5524],{"class":66},"arr[end];\n",[49,5526,5527,5530,5532],{"class":51,"line":2883},[49,5528,5529],{"class":66},"    arr[end]",[49,5531,1448],{"class":109},[49,5533,5534],{"class":66},"temp;\n",[49,5536,5537],{"class":51,"line":2897},[49,5538,5539],{"class":55},"    \u002F\u002F下标更新\n",[49,5541,5542,5545,5547],{"class":51,"line":2902},[49,5543,5544],{"class":66},"    start",[49,5546,3546],{"class":109},[49,5548,83],{"class":66},[49,5550,5551,5554,5557],{"class":51,"line":2908},[49,5552,5553],{"class":66},"    end",[49,5555,5556],{"class":109},"--",[49,5558,83],{"class":66},[49,5560,5561],{"class":51,"line":2929},[49,5562,5563],{"class":66},"   }\n",[49,5565,5566],{"class":51,"line":2934},[49,5567,5568],{"class":55},"   \u002F\u002F输出逆置后的数组\n",[49,5570,5571,5574,5576,5578,5580,5582,5584,5586,5588,5590,5592,5594],{"class":51,"line":2948},[49,5572,5573],{"class":109},"   for",[49,5575,2913],{"class":66},[49,5577,1406],{"class":109},[49,5579,4286],{"class":66},[49,5581,1448],{"class":109},[49,5583,80],{"class":73},[49,5585,4293],{"class":66},[49,5587,2300],{"class":109},[49,5589,1711],{"class":73},[49,5591,4293],{"class":66},[49,5593,3546],{"class":109},[49,5595,1409],{"class":66},[49,5597,5598],{"class":51,"line":2953},[49,5599,5497],{"class":66},[49,5601,5602,5604,5606,5609,5611,5614],{"class":51,"line":2982},[49,5603,2807],{"class":66},[49,5605,2432],{"class":109},[49,5607,5608],{"class":66},"arr[i]",[49,5610,2432],{"class":109},[49,5612,5613],{"class":1505},"\" \"",[49,5615,83],{"class":66},[49,5617,5618],{"class":51,"line":2987},[49,5619,5563],{"class":66},[49,5621,5622,5625,5627,5629],{"class":51,"line":3004},[49,5623,5624],{"class":62},"   system",[49,5626,1403],{"class":66},[49,5628,3562],{"class":1505},[49,5630,3973],{"class":66},[49,5632,5633,5636,5638],{"class":51,"line":3009},[49,5634,5635],{"class":109},"   return",[49,5637,5347],{"class":73},[49,5639,83],{"class":66},[49,5641,5642],{"class":51,"line":3014},[49,5643,137],{"class":66},[23,5645,5646],{},[26,5647,5648],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[39,5650,5652],{"className":1391,"code":5651,"language":1393,"meta":44,"style":44},"\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",[46,5653,5654,5659,5665,5675,5683,5687,5739,5752,5778,5782,5796,5800,5805,5810,5840,5844,5849,5883,5887,5892,5912,5917,5929,5945,5960,5965,5969,5973,5986,6012,6016,6030,6034,6042],{"__ignoreMap":44},[49,5655,5656],{"class":51,"line":52},[49,5657,5658],{"class":55},"\u002F\u002F冒泡排序,升序\n",[49,5660,5661,5663],{"class":51,"line":59},[49,5662,3204],{"class":109},[49,5664,3207],{"class":1505},[49,5666,5667,5669,5671,5673],{"class":51,"line":70},[49,5668,3212],{"class":109},[49,5670,3215],{"class":109},[49,5672,3218],{"class":62},[49,5674,83],{"class":66},[49,5676,5677,5679,5681],{"class":51,"line":86},[49,5678,1406],{"class":109},[49,5680,3227],{"class":62},[49,5682,3230],{"class":66},[49,5684,5685],{"class":51,"line":98},[49,5686,2802],{"class":66},[49,5688,5689,5691,5693,5695,5698,5700,5703,5705,5707,5709,5711,5713,5715,5717,5719,5721,5723,5725,5727,5729,5731,5733,5735,5737],{"class":51,"line":121},[49,5690,3239],{"class":109},[49,5692,5216],{"class":66},[49,5694,1812],{"class":73},[49,5696,5697],{"class":66},"] ",[49,5699,1448],{"class":109},[49,5701,5702],{"class":66}," {",[49,5704,1685],{"class":73},[49,5706,1770],{"class":66},[49,5708,1478],{"class":73},[49,5710,1770],{"class":66},[49,5712,1787],{"class":73},[49,5714,1770],{"class":66},[49,5716,80],{"class":73},[49,5718,1770],{"class":66},[49,5720,1711],{"class":73},[49,5722,1770],{"class":66},[49,5724,1761],{"class":73},[49,5726,1770],{"class":66},[49,5728,159],{"class":73},[49,5730,1770],{"class":66},[49,5732,1472],{"class":73},[49,5734,1770],{"class":66},[49,5736,1812],{"class":73},[49,5738,5249],{"class":66},[49,5740,5741,5743,5745,5748,5750],{"class":51,"line":134},[49,5742,2807],{"class":66},[49,5744,2432],{"class":109},[49,5746,5747],{"class":1505},"\"排序前：\"",[49,5749,2432],{"class":109},[49,5751,2454],{"class":66},[49,5753,5754,5756,5758,5760,5762,5764,5766,5768,5770,5772,5774,5776],{"class":51,"line":1085},[49,5755,4455],{"class":109},[49,5757,2913],{"class":66},[49,5759,1406],{"class":109},[49,5761,4286],{"class":66},[49,5763,1448],{"class":109},[49,5765,80],{"class":73},[49,5767,4293],{"class":66},[49,5769,2300],{"class":109},[49,5771,1812],{"class":73},[49,5773,4293],{"class":66},[49,5775,3546],{"class":109},[49,5777,1409],{"class":66},[49,5779,5780],{"class":51,"line":2574},[49,5781,3284],{"class":66},[49,5783,5784,5786,5788,5790,5792,5794],{"class":51,"line":2586},[49,5785,4705],{"class":66},[49,5787,2432],{"class":109},[49,5789,5608],{"class":66},[49,5791,2432],{"class":109},[49,5793,5613],{"class":1505},[49,5795,83],{"class":66},[49,5797,5798],{"class":51,"line":2867},[49,5799,3441],{"class":66},[49,5801,5802],{"class":51,"line":2872},[49,5803,5804],{"class":55},"    \u002F\u002F开始冒泡排序\n",[49,5806,5807],{"class":51,"line":2878},[49,5808,5809],{"class":55},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[49,5811,5812,5814,5816,5818,5820,5822,5824,5826,5828,5830,5832,5834,5836,5838],{"class":51,"line":2883},[49,5813,4455],{"class":109},[49,5815,2913],{"class":66},[49,5817,1406],{"class":109},[49,5819,4286],{"class":66},[49,5821,1448],{"class":109},[49,5823,80],{"class":73},[49,5825,4293],{"class":66},[49,5827,2300],{"class":109},[49,5829,1812],{"class":73},[49,5831,1923],{"class":109},[49,5833,159],{"class":73},[49,5835,4293],{"class":66},[49,5837,3546],{"class":109},[49,5839,1409],{"class":66},[49,5841,5842],{"class":51,"line":2897},[49,5843,3284],{"class":66},[49,5845,5846],{"class":51,"line":2902},[49,5847,5848],{"class":55},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[49,5850,5851,5853,5855,5857,5859,5861,5863,5865,5867,5869,5871,5873,5875,5877,5879,5881],{"class":51,"line":2908},[49,5852,4657],{"class":109},[49,5854,2913],{"class":66},[49,5856,1406],{"class":109},[49,5858,4664],{"class":66},[49,5860,1448],{"class":109},[49,5862,80],{"class":73},[49,5864,4671],{"class":66},[49,5866,2300],{"class":109},[49,5868,1812],{"class":73},[49,5870,1923],{"class":109},[49,5872,1833],{"class":66},[49,5874,1923],{"class":109},[49,5876,159],{"class":73},[49,5878,4671],{"class":66},[49,5880,3546],{"class":109},[49,5882,1409],{"class":66},[49,5884,5885],{"class":51,"line":2929},[49,5886,3764],{"class":66},[49,5888,5889],{"class":51,"line":2934},[49,5890,5891],{"class":55},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[49,5893,5894,5897,5900,5902,5905,5907,5909],{"class":51,"line":2948},[49,5895,5896],{"class":109},"            if",[49,5898,5899],{"class":66},"(arr[j]",[49,5901,2349],{"class":109},[49,5903,5904],{"class":66},"arr[j",[49,5906,1872],{"class":109},[49,5908,159],{"class":73},[49,5910,5911],{"class":66},"])\n",[49,5913,5914],{"class":51,"line":2953},[49,5915,5916],{"class":66},"            {\n",[49,5918,5919,5922,5924,5926],{"class":51,"line":2982},[49,5920,5921],{"class":109},"                int",[49,5923,5509],{"class":66},[49,5925,1448],{"class":109},[49,5927,5928],{"class":66},"arr[j];\n",[49,5930,5931,5934,5936,5938,5940,5942],{"class":51,"line":2987},[49,5932,5933],{"class":66},"                arr[j]",[49,5935,1448],{"class":109},[49,5937,5904],{"class":66},[49,5939,1872],{"class":109},[49,5941,159],{"class":73},[49,5943,5944],{"class":66},"];\n",[49,5946,5947,5950,5952,5954,5956,5958],{"class":51,"line":3004},[49,5948,5949],{"class":66},"                arr[j",[49,5951,1872],{"class":109},[49,5953,159],{"class":73},[49,5955,2330],{"class":66},[49,5957,1448],{"class":109},[49,5959,5534],{"class":66},[49,5961,5962],{"class":51,"line":3009},[49,5963,5964],{"class":66},"            }\n",[49,5966,5967],{"class":51,"line":3014},[49,5968,3783],{"class":66},[49,5970,5971],{"class":51,"line":3019},[49,5972,3441],{"class":66},[49,5974,5975,5977,5979,5982,5984],{"class":51,"line":3033},[49,5976,2807],{"class":66},[49,5978,2432],{"class":109},[49,5980,5981],{"class":1505},"\"排序后：\"",[49,5983,2432],{"class":109},[49,5985,2454],{"class":66},[49,5987,5988,5990,5992,5994,5996,5998,6000,6002,6004,6006,6008,6010],{"class":51,"line":3038},[49,5989,4455],{"class":109},[49,5991,2913],{"class":66},[49,5993,1406],{"class":109},[49,5995,4286],{"class":66},[49,5997,1448],{"class":109},[49,5999,80],{"class":73},[49,6001,4293],{"class":66},[49,6003,2300],{"class":109},[49,6005,1812],{"class":73},[49,6007,4293],{"class":66},[49,6009,3546],{"class":109},[49,6011,1409],{"class":66},[49,6013,6014],{"class":51,"line":3831},[49,6015,3284],{"class":66},[49,6017,6018,6020,6022,6024,6026,6028],{"class":51,"line":3845},[49,6019,4705],{"class":66},[49,6021,2432],{"class":109},[49,6023,5608],{"class":66},[49,6025,2432],{"class":109},[49,6027,5613],{"class":1505},[49,6029,83],{"class":66},[49,6031,6032],{"class":51,"line":3853},[49,6033,3441],{"class":66},[49,6035,6036,6038,6040],{"class":51,"line":3858},[49,6037,5344],{"class":109},[49,6039,5347],{"class":73},[49,6041,83],{"class":66},[49,6043,6044],{"class":51,"line":3864},[49,6045,137],{"class":66},[183,6047,6049],{"id":6048},"_172二维数组","1.7.2二维数组",[591,6051,6052],{},[26,6053,6054],{},"二维数组的四种定义方式",[293,6056,6057,6066],{},[296,6058,6059],{},[299,6060,6061,6064],{},[302,6062,6063],{},"序号",[302,6065,5035],{},[310,6067,6068,6078,6087,6096,6105],{},[299,6069,6070,6072],{},[315,6071,159],{},[315,6073,6074,6075,1457],{},"数据类型 数组名[行数]",[49,6076,6077],{},"列数",[299,6079,6080,6082],{},[315,6081,1478],{},[315,6083,6074,6084,6086],{},[49,6085,6077],{},"={ {数据1,数据2}，{数据3，数据4}... }",[299,6088,6089,6091],{},[315,6090,1472],{},[315,6092,6074,6093,6095],{},[49,6094,6077],{},"={数据1,数据2,数据3...}",[299,6097,6098,6100],{},[315,6099,1685],{},[315,6101,6102,6103,6095],{},"数据类型 数组名[]",[49,6104,6077],{},[299,6106,6107,6110],{},[315,6108,6109],{},"注意：不能只省略列数",[315,6111],{},[591,6113,6114],{"start":59},[26,6115,6116],{},"二维数组数组名",[23,6118,6119,6122],{},[26,6120,6121],{},"1.查看二维数组所占内存空间",[26,6123,6124],{},"2.获取二维数组首地址",[19,6126,6127],{},"已知二维数组，求二维数组的行数与列数",[39,6129,6131],{"className":1391,"code":6130,"language":1393,"meta":44,"style":44},"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",[46,6132,6133,6141,6145,6163,6167,6185,6201,6206,6231,6264],{"__ignoreMap":44},[49,6134,6135,6137,6139],{"class":51,"line":52},[49,6136,1406],{"class":109},[49,6138,3227],{"class":62},[49,6140,3230],{"class":66},[49,6142,6143],{"class":51,"line":59},[49,6144,2802],{"class":66},[49,6146,6147,6149,6151,6153,6156,6158,6160],{"class":51,"line":70},[49,6148,3239],{"class":109},[49,6150,5216],{"class":66},[49,6152,1478],{"class":73},[49,6154,6155],{"class":66},"][",[49,6157,1472],{"class":73},[49,6159,2330],{"class":66},[49,6161,6162],{"class":109},"=\n",[49,6164,6165],{"class":51,"line":86},[49,6166,3284],{"class":66},[49,6168,6169,6172,6174,6176,6178,6180,6182],{"class":51,"line":98},[49,6170,6171],{"class":66},"        {",[49,6173,159],{"class":73},[49,6175,1770],{"class":66},[49,6177,1478],{"class":73},[49,6179,1770],{"class":66},[49,6181,1472],{"class":73},[49,6183,6184],{"class":66},"},\n",[49,6186,6187,6189,6191,6193,6195,6197,6199],{"class":51,"line":121},[49,6188,6171],{"class":66},[49,6190,1685],{"class":73},[49,6192,1770],{"class":66},[49,6194,1711],{"class":73},[49,6196,1770],{"class":66},[49,6198,1736],{"class":73},[49,6200,137],{"class":66},[49,6202,6203],{"class":51,"line":134},[49,6204,6205],{"class":66},"    };\n",[49,6207,6208,6210,6212,6215,6217,6219,6221,6223,6225,6227,6229],{"class":51,"line":1085},[49,6209,2807],{"class":66},[49,6211,2432],{"class":109},[49,6213,6214],{"class":1505},"\"二维数组的行数\"",[49,6216,2629],{"class":109},[49,6218,5460],{"class":66},[49,6220,5463],{"class":109},[49,6222,5105],{"class":66},[49,6224,80],{"class":73},[49,6226,5470],{"class":66},[49,6228,2432],{"class":109},[49,6230,2454],{"class":66},[49,6232,6233,6235,6237,6240,6242,6244,6246,6248,6250,6252,6254,6256,6258,6260,6262],{"class":51,"line":2574},[49,6234,2807],{"class":66},[49,6236,2432],{"class":109},[49,6238,6239],{"class":1505},"\"二维数组的列数\"",[49,6241,2629],{"class":109},[49,6243,5105],{"class":66},[49,6245,80],{"class":73},[49,6247,5470],{"class":66},[49,6249,5463],{"class":109},[49,6251,5105],{"class":66},[49,6253,80],{"class":73},[49,6255,6155],{"class":66},[49,6257,80],{"class":73},[49,6259,5470],{"class":66},[49,6261,2432],{"class":109},[49,6263,2454],{"class":66},[49,6265,6266],{"class":51,"line":2586},[49,6267,137],{"class":66},[19,6269,6270],{},"查看二维数组首地址",[39,6272,6274],{"className":1391,"code":6273,"language":1393,"meta":44,"style":44},"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",[46,6275,6276,6293,6319,6344],{"__ignoreMap":44},[49,6277,6278,6280,6282,6285,6287,6289,6291],{"class":51,"line":52},[49,6279,2626],{"class":66},[49,6281,2432],{"class":109},[49,6283,6284],{"class":1505},"\"二维数组首地址：\"",[49,6286,2432],{"class":109},[49,6288,5134],{"class":66},[49,6290,2432],{"class":109},[49,6292,2454],{"class":66},[49,6294,6295,6297,6299,6302,6304,6306,6308,6311,6313,6315,6317],{"class":51,"line":59},[49,6296,2626],{"class":66},[49,6298,2432],{"class":109},[49,6300,6301],{"class":1505},"\"二维数组第一行的首地址：\"",[49,6303,2432],{"class":109},[49,6305,1403],{"class":66},[49,6307,1406],{"class":109},[49,6309,6310],{"class":66},")arr[",[49,6312,80],{"class":73},[49,6314,2330],{"class":66},[49,6316,2432],{"class":109},[49,6318,2454],{"class":66},[49,6320,6321,6323,6325,6328,6330,6332,6334,6336,6338,6340,6342],{"class":51,"line":70},[49,6322,2626],{"class":66},[49,6324,2432],{"class":109},[49,6326,6327],{"class":1505},"\"二维数组第二行的首地址：\"",[49,6329,2432],{"class":109},[49,6331,1403],{"class":66},[49,6333,1406],{"class":109},[49,6335,6310],{"class":66},[49,6337,159],{"class":73},[49,6339,2330],{"class":66},[49,6341,2432],{"class":109},[49,6343,2454],{"class":66},[49,6345,6346,6348,6350,6353,6355,6357,6359,6361,6363,6365,6367,6369,6371,6373,6375,6377],{"class":51,"line":86},[49,6347,2626],{"class":66},[49,6349,2432],{"class":109},[49,6351,6352],{"class":1505},"\"二维数组第一个元素的首地址:\"",[49,6354,2432],{"class":109},[49,6356,1403],{"class":66},[49,6358,1406],{"class":109},[49,6360,1821],{"class":66},[49,6362,1745],{"class":109},[49,6364,5160],{"class":66},[49,6366,80],{"class":73},[49,6368,6155],{"class":66},[49,6370,80],{"class":73},[49,6372,2330],{"class":66},[49,6374,2432],{"class":109},[49,6376,2497],{"class":66},[49,6378,6379],{"class":55},"\u002F\u002F对于数，要加取址符\n",[1305,6381,6382],{},"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":44,"searchDepth":59,"depth":59,"links":6384},[6385,6386,6387,6395,6396,6402,6407],{"id":1346,"depth":59,"text":1347},{"id":1353,"depth":59,"text":1354},{"id":1368,"depth":59,"text":1369,"children":6388},[6389,6390,6391,6392,6393,6394],{"id":1372,"depth":70,"text":1373},{"id":1419,"depth":70,"text":1420},{"id":1486,"depth":70,"text":1487},{"id":2413,"depth":70,"text":2414},{"id":2503,"depth":70,"text":2504},{"id":2600,"depth":70,"text":2601},{"id":2642,"depth":59,"text":2643},{"id":2710,"depth":59,"text":2711,"children":6397},[6398,6399,6400,6401],{"id":2714,"depth":70,"text":2715},{"id":2735,"depth":70,"text":2736},{"id":2744,"depth":70,"text":2745},{"id":2753,"depth":70,"text":2754},{"id":2762,"depth":59,"text":2763,"children":6403},[6404,6405,6406],{"id":2766,"depth":70,"text":2767},{"id":3459,"depth":70,"text":3460},{"id":4875,"depth":70,"text":4876},{"id":5016,"depth":59,"text":5017,"children":6408},[6409,6410],{"id":5020,"depth":70,"text":5021},{"id":6048,"depth":70,"text":6049},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1338,"description":44},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6417,"title":6418,"body":6419,"description":44,"extension":1328,"meta":7517,"navigation":1330,"path":7518,"seo":7519,"stem":7520,"__hash__":7521},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6420,"toc":7509},[6421,6424,6428,6436,6442,6445,6511,6515,6518,6594,6598,6601,6604,6607,6820,6824,6829,6893,6898,6965,6970,7061,7064,7169,7173,7176,7182,7326,7330,7333,7347,7350,7395,7398,7506],[10,6422,6418],{"id":6423},"_2函数",[14,6425,6427],{"id":6426},"_21函数概述","2.1函数概述",[591,6429,6430,6433],{},[26,6431,6432],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[26,6434,6435],{},"语法：",[39,6437,6440],{"className":6438,"code":6439,"language":267,"meta":44},[1094],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[46,6441,6439],{"__ignoreMap":44},[19,6443,6444],{},"小案例",[39,6446,6448],{"className":1391,"code":6447,"language":1393,"meta":44,"style":44},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[46,6449,6450,6455,6479,6483,6500,6507],{"__ignoreMap":44},[49,6451,6452],{"class":51,"line":52},[49,6453,6454],{"class":55},"\u002F\u002Fnum1,num2形参\n",[49,6456,6457,6459,6462,6464,6466,6470,6472,6474,6477],{"class":51,"line":59},[49,6458,1406],{"class":109},[49,6460,6461],{"class":62}," add",[49,6463,1403],{"class":66},[49,6465,1406],{"class":109},[49,6467,6469],{"class":6468},"s4XuR"," num1",[49,6471,1770],{"class":66},[49,6473,1406],{"class":109},[49,6475,6476],{"class":6468}," num2",[49,6478,1409],{"class":66},[49,6480,6481],{"class":51,"line":70},[49,6482,2802],{"class":66},[49,6484,6485,6487,6490,6492,6495,6497],{"class":51,"line":86},[49,6486,3239],{"class":109},[49,6488,6489],{"class":66}," sum",[49,6491,1448],{"class":109},[49,6493,6494],{"class":66},"num1",[49,6496,1872],{"class":109},[49,6498,6499],{"class":66},"num2;\n",[49,6501,6502,6504],{"class":51,"line":98},[49,6503,5344],{"class":109},[49,6505,6506],{"class":66}," sum;\n",[49,6508,6509],{"class":51,"line":121},[49,6510,137],{"class":66},[14,6512,6514],{"id":6513},"_22函数调用","2.2函数调用",[19,6516,6517],{},"调用刚刚写的求和函数",[39,6519,6521],{"className":1391,"code":6520,"language":1393,"meta":44,"style":44},"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",[46,6522,6523,6531,6535,6540,6552,6564,6573,6578,6590],{"__ignoreMap":44},[49,6524,6525,6527,6529],{"class":51,"line":52},[49,6526,1406],{"class":109},[49,6528,3227],{"class":62},[49,6530,3230],{"class":66},[49,6532,6533],{"class":51,"line":59},[49,6534,2802],{"class":66},[49,6536,6537],{"class":51,"line":70},[49,6538,6539],{"class":55},"    \u002F\u002Fa,b实参\n",[49,6541,6542,6544,6546,6548,6550],{"class":51,"line":86},[49,6543,3239],{"class":109},[49,6545,2655],{"class":66},[49,6547,1448],{"class":109},[49,6549,80],{"class":73},[49,6551,83],{"class":66},[49,6553,6554,6556,6558,6560,6562],{"class":51,"line":98},[49,6555,3239],{"class":109},[49,6557,4087],{"class":66},[49,6559,1448],{"class":109},[49,6561,80],{"class":73},[49,6563,83],{"class":66},[49,6565,6566,6568,6570],{"class":51,"line":121},[49,6567,3266],{"class":66},[49,6569,2686],{"class":109},[49,6571,6572],{"class":66},"a,b;\n",[49,6574,6575],{"class":51,"line":134},[49,6576,6577],{"class":55},"    \u002F\u002F调用函数时，实参值传给了形参\n",[49,6579,6580,6582,6584,6587],{"class":51,"line":1085},[49,6581,2807],{"class":66},[49,6583,2432],{"class":109},[49,6585,6586],{"class":62},"add",[49,6588,6589],{"class":66},"(a,b);\n",[49,6591,6592],{"class":51,"line":2574},[49,6593,137],{"class":66},[14,6595,6597],{"id":6596},"_23值传递","2.3值传递",[19,6599,6600],{},"值传递就是函数调用时实参将数值传给形参",[19,6602,6603],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,6605,6606],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[39,6608,6610],{"className":1391,"code":6609,"language":1393,"meta":44,"style":44},"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",[46,6611,6612,6634,6638,6651,6668,6686,6697,6706,6715,6728,6744,6760,6769,6773,6781,6785,6797,6809,6816],{"__ignoreMap":44},[49,6613,6614,6617,6620,6622,6624,6626,6628,6630,6632],{"class":51,"line":52},[49,6615,6616],{"class":109},"void",[49,6618,6619],{"class":62}," swap",[49,6621,1403],{"class":66},[49,6623,1406],{"class":109},[49,6625,6469],{"class":6468},[49,6627,1770],{"class":66},[49,6629,1406],{"class":109},[49,6631,6476],{"class":6468},[49,6633,1409],{"class":66},[49,6635,6636],{"class":51,"line":59},[49,6637,2802],{"class":66},[49,6639,6640,6642,6644,6647,6649],{"class":51,"line":70},[49,6641,2807],{"class":66},[49,6643,2432],{"class":109},[49,6645,6646],{"class":1505},"\"交换前：\"",[49,6648,2432],{"class":109},[49,6650,2454],{"class":66},[49,6652,6653,6655,6657,6660,6662,6664,6666],{"class":51,"line":86},[49,6654,2807],{"class":66},[49,6656,2432],{"class":109},[49,6658,6659],{"class":1505},"\"num1=\"",[49,6661,2432],{"class":109},[49,6663,6494],{"class":66},[49,6665,2432],{"class":109},[49,6667,2454],{"class":66},[49,6669,6670,6672,6674,6677,6679,6682,6684],{"class":51,"line":98},[49,6671,2807],{"class":66},[49,6673,2432],{"class":109},[49,6675,6676],{"class":1505},"\"num2=\"",[49,6678,2432],{"class":109},[49,6680,6681],{"class":66},"num2",[49,6683,2432],{"class":109},[49,6685,2454],{"class":66},[49,6687,6688,6690,6692,6694],{"class":51,"line":121},[49,6689,3239],{"class":109},[49,6691,5509],{"class":66},[49,6693,1448],{"class":109},[49,6695,6696],{"class":66},"num1;\n",[49,6698,6699,6702,6704],{"class":51,"line":134},[49,6700,6701],{"class":66},"    num1",[49,6703,1448],{"class":109},[49,6705,6499],{"class":66},[49,6707,6708,6711,6713],{"class":51,"line":1085},[49,6709,6710],{"class":66},"    num2",[49,6712,1448],{"class":109},[49,6714,5534],{"class":66},[49,6716,6717,6719,6721,6724,6726],{"class":51,"line":2574},[49,6718,2807],{"class":66},[49,6720,2432],{"class":109},[49,6722,6723],{"class":1505},"\"交换后：\"",[49,6725,2432],{"class":109},[49,6727,2454],{"class":66},[49,6729,6730,6732,6734,6736,6738,6740,6742],{"class":51,"line":2586},[49,6731,2807],{"class":66},[49,6733,2432],{"class":109},[49,6735,6659],{"class":1505},[49,6737,2432],{"class":109},[49,6739,6494],{"class":66},[49,6741,2432],{"class":109},[49,6743,2454],{"class":66},[49,6745,6746,6748,6750,6752,6754,6756,6758],{"class":51,"line":2867},[49,6747,2807],{"class":66},[49,6749,2432],{"class":109},[49,6751,6676],{"class":1505},[49,6753,2432],{"class":109},[49,6755,6681],{"class":66},[49,6757,2432],{"class":109},[49,6759,2454],{"class":66},[49,6761,6762,6764,6766],{"class":51,"line":2872},[49,6763,5344],{"class":109},[49,6765,1457],{"class":66},[49,6767,6768],{"class":55},"\u002F\u002F或者不写\n",[49,6770,6771],{"class":51,"line":2878},[49,6772,137],{"class":66},[49,6774,6775,6777,6779],{"class":51,"line":2883},[49,6776,1406],{"class":109},[49,6778,3227],{"class":62},[49,6780,3230],{"class":66},[49,6782,6783],{"class":51,"line":2897},[49,6784,2802],{"class":66},[49,6786,6787,6789,6791,6793,6795],{"class":51,"line":2902},[49,6788,3239],{"class":109},[49,6790,2655],{"class":66},[49,6792,1448],{"class":109},[49,6794,106],{"class":73},[49,6796,83],{"class":66},[49,6798,6799,6801,6803,6805,6807],{"class":51,"line":2908},[49,6800,3239],{"class":109},[49,6802,4087],{"class":66},[49,6804,1448],{"class":109},[49,6806,875],{"class":73},[49,6808,83],{"class":66},[49,6810,6811,6814],{"class":51,"line":2929},[49,6812,6813],{"class":62},"    swap",[49,6815,6589],{"class":66},[49,6817,6818],{"class":51,"line":2934},[49,6819,137],{"class":66},[14,6821,6823],{"id":6822},"_24函数的常见形式","2.4函数的常见形式",[591,6825,6826],{},[26,6827,6828],{},"无参无返",[39,6830,6832],{"className":1391,"code":6831,"language":1393,"meta":44,"style":44},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[46,6833,6834,6843,6847,6860,6864,6872,6876,6881,6889],{"__ignoreMap":44},[49,6835,6836,6838,6841],{"class":51,"line":52},[49,6837,6616],{"class":109},[49,6839,6840],{"class":62}," test01",[49,6842,3230],{"class":66},[49,6844,6845],{"class":51,"line":59},[49,6846,2802],{"class":66},[49,6848,6849,6851,6853,6856,6858],{"class":51,"line":70},[49,6850,2807],{"class":66},[49,6852,2432],{"class":109},[49,6854,6855],{"class":1505},"\"你好\"",[49,6857,2432],{"class":109},[49,6859,2454],{"class":66},[49,6861,6862],{"class":51,"line":86},[49,6863,137],{"class":66},[49,6865,6866,6868,6870],{"class":51,"line":98},[49,6867,1406],{"class":109},[49,6869,3227],{"class":62},[49,6871,3230],{"class":66},[49,6873,6874],{"class":51,"line":121},[49,6875,2802],{"class":66},[49,6877,6878],{"class":51,"line":134},[49,6879,6880],{"class":55},"    \u002F\u002F函数调用\n",[49,6882,6883,6886],{"class":51,"line":1085},[49,6884,6885],{"class":62},"    test01",[49,6887,6888],{"class":66},"();\n",[49,6890,6891],{"class":51,"line":2574},[49,6892,137],{"class":66},[591,6894,6895],{"start":59},[26,6896,6897],{},"有参无返",[39,6899,6901],{"className":1391,"code":6900,"language":1393,"meta":44,"style":44},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[46,6902,6903,6918,6922,6934,6938,6946,6950,6961],{"__ignoreMap":44},[49,6904,6905,6907,6910,6912,6914,6916],{"class":51,"line":52},[49,6906,6616],{"class":109},[49,6908,6909],{"class":62}," test02",[49,6911,1403],{"class":66},[49,6913,1406],{"class":109},[49,6915,2655],{"class":6468},[49,6917,1409],{"class":66},[49,6919,6920],{"class":51,"line":59},[49,6921,2802],{"class":66},[49,6923,6924,6926,6928,6930,6932],{"class":51,"line":70},[49,6925,2807],{"class":66},[49,6927,2432],{"class":109},[49,6929,6855],{"class":1505},[49,6931,2432],{"class":109},[49,6933,2454],{"class":66},[49,6935,6936],{"class":51,"line":86},[49,6937,137],{"class":66},[49,6939,6940,6942,6944],{"class":51,"line":98},[49,6941,1406],{"class":109},[49,6943,3227],{"class":62},[49,6945,3230],{"class":66},[49,6947,6948],{"class":51,"line":121},[49,6949,2802],{"class":66},[49,6951,6952,6955,6957,6959],{"class":51,"line":134},[49,6953,6954],{"class":62},"    test02",[49,6956,1403],{"class":66},[49,6958,1703],{"class":73},[49,6960,3973],{"class":66},[49,6962,6963],{"class":51,"line":1085},[49,6964,137],{"class":66},[591,6966,6967],{"start":70},[26,6968,6969],{},"无参有返",[39,6971,6973],{"className":1391,"code":6972,"language":1393,"meta":44,"style":44},"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",[46,6974,6975,6984,6988,7000,7009,7013,7021,7025,7038,7057],{"__ignoreMap":44},[49,6976,6977,6979,6982],{"class":51,"line":52},[49,6978,1406],{"class":109},[49,6980,6981],{"class":62}," test03",[49,6983,3230],{"class":66},[49,6985,6986],{"class":51,"line":59},[49,6987,2802],{"class":66},[49,6989,6990,6992,6994,6996,6998],{"class":51,"line":70},[49,6991,2807],{"class":66},[49,6993,2432],{"class":109},[49,6995,6855],{"class":1505},[49,6997,2432],{"class":109},[49,6999,2454],{"class":66},[49,7001,7002,7004,7007],{"class":51,"line":86},[49,7003,5344],{"class":109},[49,7005,7006],{"class":73}," 100",[49,7008,83],{"class":66},[49,7010,7011],{"class":51,"line":98},[49,7012,137],{"class":66},[49,7014,7015,7017,7019],{"class":51,"line":121},[49,7016,1406],{"class":109},[49,7018,3227],{"class":62},[49,7020,3230],{"class":66},[49,7022,7023],{"class":51,"line":134},[49,7024,2802],{"class":66},[49,7026,7027,7029,7031,7033,7036],{"class":51,"line":1085},[49,7028,3239],{"class":109},[49,7030,6469],{"class":66},[49,7032,1448],{"class":109},[49,7034,7035],{"class":62},"test03",[49,7037,6888],{"class":66},[49,7039,7040,7042,7044,7046,7048,7050,7052,7054],{"class":51,"line":2574},[49,7041,2807],{"class":66},[49,7043,2432],{"class":109},[49,7045,6659],{"class":1505},[49,7047,2432],{"class":109},[49,7049,6494],{"class":66},[49,7051,2432],{"class":109},[49,7053,2497],{"class":66},[49,7055,7056],{"class":55}," \u002F\u002F100\n",[49,7058,7059],{"class":51,"line":2586},[49,7060,137],{"class":66},[19,7062,7063],{},"4.有参有返",[39,7065,7067],{"className":1391,"code":7066,"language":1393,"meta":44,"style":44},"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",[46,7068,7069,7084,7088,7101,7107,7111,7120,7124,7136,7150,7165],{"__ignoreMap":44},[49,7070,7071,7073,7076,7078,7080,7082],{"class":51,"line":52},[49,7072,1406],{"class":109},[49,7074,7075],{"class":62}," test04",[49,7077,1403],{"class":66},[49,7079,1406],{"class":109},[49,7081,2655],{"class":6468},[49,7083,1409],{"class":66},[49,7085,7086],{"class":51,"line":59},[49,7087,2802],{"class":66},[49,7089,7090,7092,7094,7097,7099],{"class":51,"line":70},[49,7091,2807],{"class":66},[49,7093,2432],{"class":109},[49,7095,7096],{"class":1505},"\"hello\"",[49,7098,2432],{"class":109},[49,7100,2454],{"class":66},[49,7102,7103,7105],{"class":51,"line":86},[49,7104,5344],{"class":109},[49,7106,2689],{"class":66},[49,7108,7109],{"class":51,"line":98},[49,7110,137],{"class":66},[49,7112,7113,7115,7118],{"class":51,"line":121},[49,7114,1406],{"class":109},[49,7116,7117],{"class":62}," mian",[49,7119,3230],{"class":66},[49,7121,7122],{"class":51,"line":134},[49,7123,2802],{"class":66},[49,7125,7126,7128,7130,7132,7134],{"class":51,"line":1085},[49,7127,3239],{"class":109},[49,7129,4087],{"class":66},[49,7131,1448],{"class":109},[49,7133,159],{"class":73},[49,7135,83],{"class":66},[49,7137,7138,7140,7142,7144,7147],{"class":51,"line":2574},[49,7139,3239],{"class":109},[49,7141,4103],{"class":66},[49,7143,1448],{"class":109},[49,7145,7146],{"class":62},"test04",[49,7148,7149],{"class":66},"(b);\n",[49,7151,7152,7154,7156,7158,7160,7162],{"class":51,"line":2586},[49,7153,2807],{"class":66},[49,7155,2432],{"class":109},[49,7157,1680],{"class":66},[49,7159,2432],{"class":109},[49,7161,2497],{"class":66},[49,7163,7164],{"class":55}," \u002F\u002F1\n",[49,7166,7167],{"class":51,"line":2867},[49,7168,137],{"class":66},[14,7170,7172],{"id":7171},"_25函数的声明","2.5函数的声明",[19,7174,7175],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7177,7178,7179],{},"函数的",[485,7180,7181],{},"声明可以多次，但是函数的定义只能有一次",[39,7183,7185],{"className":1391,"code":7184,"language":1393,"meta":44,"style":44},"\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",[46,7186,7187,7192,7197,7222,7231,7235,7247,7259,7275,7279,7299,7303,7322],{"__ignoreMap":44},[49,7188,7189],{"class":51,"line":52},[49,7190,7191],{"class":55},"\u002F\u002F函数声明\n",[49,7193,7194],{"class":51,"line":59},[49,7195,7196],{"class":55},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[49,7198,7199,7201,7204,7206,7208,7210,7212,7214,7216,7219],{"class":51,"line":70},[49,7200,1406],{"class":109},[49,7202,7203],{"class":62}," max",[49,7205,1403],{"class":66},[49,7207,1406],{"class":109},[49,7209,2655],{"class":6468},[49,7211,1770],{"class":66},[49,7213,1406],{"class":109},[49,7215,4087],{"class":6468},[49,7217,7218],{"class":66},");",[49,7220,7221],{"class":55},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[49,7223,7224,7226,7228],{"class":51,"line":86},[49,7225,1406],{"class":109},[49,7227,3227],{"class":62},[49,7229,7230],{"class":66},"() \n",[49,7232,7233],{"class":51,"line":98},[49,7234,2802],{"class":66},[49,7236,7237,7239,7241,7243,7245],{"class":51,"line":121},[49,7238,3239],{"class":109},[49,7240,2655],{"class":66},[49,7242,1448],{"class":109},[49,7244,106],{"class":73},[49,7246,83],{"class":66},[49,7248,7249,7251,7253,7255,7257],{"class":51,"line":134},[49,7250,3239],{"class":109},[49,7252,4087],{"class":66},[49,7254,1448],{"class":109},[49,7256,875],{"class":73},[49,7258,83],{"class":66},[49,7260,7261,7263,7265,7268,7271,7273],{"class":51,"line":1085},[49,7262,2807],{"class":66},[49,7264,2432],{"class":109},[49,7266,7267],{"class":62},"max",[49,7269,7270],{"class":66},"(a,b)",[49,7272,2432],{"class":109},[49,7274,2454],{"class":66},[49,7276,7277],{"class":51,"line":2574},[49,7278,137],{"class":66},[49,7280,7281,7283,7285,7287,7289,7291,7293,7295,7297],{"class":51,"line":2586},[49,7282,1406],{"class":109},[49,7284,7203],{"class":62},[49,7286,1403],{"class":66},[49,7288,1406],{"class":109},[49,7290,2655],{"class":6468},[49,7292,1770],{"class":66},[49,7294,1406],{"class":109},[49,7296,4087],{"class":6468},[49,7298,1409],{"class":66},[49,7300,7301],{"class":51,"line":2867},[49,7302,2802],{"class":66},[49,7304,7305,7307,7309,7311,7313,7315,7317,7319],{"class":51,"line":2872},[49,7306,5344],{"class":109},[49,7308,2655],{"class":66},[49,7310,2349],{"class":109},[49,7312,1655],{"class":66},[49,7314,2375],{"class":109},[49,7316,1630],{"class":66},[49,7318,2249],{"class":109},[49,7320,7321],{"class":66},"b;\n",[49,7323,7324],{"class":51,"line":2878},[49,7325,137],{"class":66},[14,7327,7329],{"id":7328},"_26函数的分文件编写","2.6函数的分文件编写",[19,7331,7332],{},"4个步骤：",[23,7334,7335,7338,7341,7344],{},[26,7336,7337],{},"1.创建后缀名为.h的头文件",[26,7339,7340],{},"2.创建后缀名为.cpp的源文件",[26,7342,7343],{},"3.在头文件中写函数的定义",[26,7345,7346],{},"4.在源文件中写函数的定义\n示例：",[19,7348,7349],{},"头文件：swap.h",[39,7351,7353],{"className":1391,"code":7352,"language":1393,"meta":44,"style":44},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[46,7354,7355,7361,7371,7375],{"__ignoreMap":44},[49,7356,7357,7359],{"class":51,"line":52},[49,7358,3204],{"class":109},[49,7360,3207],{"class":1505},[49,7362,7363,7365,7367,7369],{"class":51,"line":59},[49,7364,3212],{"class":109},[49,7366,3215],{"class":109},[49,7368,3218],{"class":62},[49,7370,83],{"class":66},[49,7372,7373],{"class":51,"line":70},[49,7374,7191],{"class":55},[49,7376,7377,7379,7381,7383,7385,7387,7389,7391,7393],{"class":51,"line":86},[49,7378,6616],{"class":109},[49,7380,6619],{"class":62},[49,7382,1403],{"class":66},[49,7384,1406],{"class":109},[49,7386,2655],{"class":6468},[49,7388,1770],{"class":66},[49,7390,1406],{"class":109},[49,7392,4087],{"class":6468},[49,7394,3973],{"class":66},[19,7396,7397],{},"源文件：swap.cpp",[39,7399,7401],{"className":1391,"code":7400,"language":1393,"meta":44,"style":44},"#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",[46,7402,7403,7410,7415,7435,7439,7450,7459,7468,7485,7502],{"__ignoreMap":44},[49,7404,7405,7407],{"class":51,"line":52},[49,7406,3204],{"class":109},[49,7408,7409],{"class":1505}," \"swap.h\"\n",[49,7411,7412],{"class":51,"line":59},[49,7413,7414],{"class":55},"\u002F\u002F函数的定义\n",[49,7416,7417,7419,7421,7423,7425,7427,7429,7431,7433],{"class":51,"line":70},[49,7418,6616],{"class":109},[49,7420,6619],{"class":62},[49,7422,1403],{"class":66},[49,7424,1406],{"class":109},[49,7426,2655],{"class":6468},[49,7428,1770],{"class":66},[49,7430,1406],{"class":109},[49,7432,4087],{"class":6468},[49,7434,1409],{"class":66},[49,7436,7437],{"class":51,"line":86},[49,7438,2802],{"class":66},[49,7440,7441,7443,7445,7447],{"class":51,"line":98},[49,7442,3239],{"class":109},[49,7444,5509],{"class":66},[49,7446,1448],{"class":109},[49,7448,7449],{"class":66},"a;\n",[49,7451,7452,7455,7457],{"class":51,"line":121},[49,7453,7454],{"class":66},"    a",[49,7456,1448],{"class":109},[49,7458,7321],{"class":66},[49,7460,7461,7464,7466],{"class":51,"line":134},[49,7462,7463],{"class":66},"    b",[49,7465,1448],{"class":109},[49,7467,5534],{"class":66},[49,7469,7470,7472,7474,7477,7479,7481,7483],{"class":51,"line":1085},[49,7471,2807],{"class":66},[49,7473,2432],{"class":109},[49,7475,7476],{"class":1505},"\"a=\"",[49,7478,2432],{"class":109},[49,7480,1630],{"class":66},[49,7482,2432],{"class":109},[49,7484,2454],{"class":66},[49,7486,7487,7489,7491,7494,7496,7498,7500],{"class":51,"line":2574},[49,7488,2807],{"class":66},[49,7490,2432],{"class":109},[49,7492,7493],{"class":1505},"\"b=\"",[49,7495,2432],{"class":109},[49,7497,1655],{"class":66},[49,7499,2432],{"class":109},[49,7501,2454],{"class":66},[49,7503,7504],{"class":51,"line":2586},[49,7505,137],{"class":66},[1305,7507,7508],{},"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":44,"searchDepth":59,"depth":59,"links":7510},[7511,7512,7513,7514,7515,7516],{"id":6426,"depth":59,"text":6427},{"id":6513,"depth":59,"text":6514},{"id":6596,"depth":59,"text":6597},{"id":6822,"depth":59,"text":6823},{"id":7171,"depth":59,"text":7172},{"id":7328,"depth":59,"text":7329},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6418,"description":44},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7523,"title":7524,"body":7525,"description":7532,"extension":1328,"meta":8937,"navigation":1330,"path":8938,"seo":8939,"stem":8940,"__hash__":8941},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7526,"toc":8927},[7527,7530,7533,7537,7699,7703,7706,7709,7712,7715,7855,7859,7862,7865,7868,7933,7937,7942,8009,8012,8016,8019,8030,8035,8055,8058,8063,8082,8085,8089,8108,8111,8115,8350,8354,8357,8360,8363,8525,8528,8532,8535,8541,8924],[10,7528,7524],{"id":7529},"_3指针",[19,7531,7532],{},"通过指针保存一个地址，指针就是个地址",[14,7534,7536],{"id":7535},"_31定义指针","3.1定义指针",[39,7538,7540],{"className":1391,"code":7539,"language":1393,"meta":44,"style":44},"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",[46,7541,7542,7550,7554,7559,7571,7576,7584,7594,7612,7632,7636,7641,7646,7651,7665,7681,7695],{"__ignoreMap":44},[49,7543,7544,7546,7548],{"class":51,"line":52},[49,7545,1406],{"class":109},[49,7547,3227],{"class":62},[49,7549,3230],{"class":66},[49,7551,7552],{"class":51,"line":59},[49,7553,2802],{"class":66},[49,7555,7556],{"class":51,"line":70},[49,7557,7558],{"class":55},"    \u002F\u002F1.定义指针\n",[49,7560,7561,7563,7565,7567,7569],{"class":51,"line":86},[49,7562,3239],{"class":109},[49,7564,2655],{"class":66},[49,7566,1448],{"class":109},[49,7568,106],{"class":73},[49,7570,83],{"class":66},[49,7572,7573],{"class":51,"line":98},[49,7574,7575],{"class":55},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[49,7577,7578,7581],{"class":51,"line":121},[49,7579,7580],{"class":109},"    int*",[49,7582,7583],{"class":66},"p;\n",[49,7585,7586,7589,7592],{"class":51,"line":134},[49,7587,7588],{"class":66},"    p",[49,7590,7591],{"class":109},"=&",[49,7593,7449],{"class":66},[49,7595,7596,7598,7600,7603,7606,7608,7610],{"class":51,"line":1085},[49,7597,2807],{"class":66},[49,7599,2432],{"class":109},[49,7601,7602],{"class":1505},"\"a的地址为：\"",[49,7604,7605],{"class":109},"\u003C\u003C&",[49,7607,1630],{"class":66},[49,7609,2432],{"class":109},[49,7611,2454],{"class":66},[49,7613,7614,7616,7618,7621,7623,7625,7627,7629],{"class":51,"line":2574},[49,7615,2807],{"class":66},[49,7617,2432],{"class":109},[49,7619,7620],{"class":1505},"\"指针p为：\"",[49,7622,2432],{"class":109},[49,7624,19],{"class":66},[49,7626,2432],{"class":109},[49,7628,2497],{"class":66},[49,7630,7631],{"class":55},"\u002F\u002F指针p表示的就是a的地址\n",[49,7633,7634],{"class":51,"line":2586},[49,7635,3654],{"emptyLinePlaceholder":1330},[49,7637,7638],{"class":51,"line":2867},[49,7639,7640],{"class":55},"    \u002F\u002F2.使用指针\n",[49,7642,7643],{"class":51,"line":2872},[49,7644,7645],{"class":55},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[49,7647,7648],{"class":51,"line":2878},[49,7649,7650],{"class":55},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[49,7652,7653,7656,7658,7660,7663],{"class":51,"line":2883},[49,7654,7655],{"class":109},"    *",[49,7657,19],{"class":66},[49,7659,1448],{"class":109},[49,7661,7662],{"class":73},"1000",[49,7664,83],{"class":66},[49,7666,7667,7669,7672,7674,7676,7678],{"class":51,"line":2897},[49,7668,2807],{"class":66},[49,7670,7671],{"class":109},"\u003C\u003C*",[49,7673,19],{"class":66},[49,7675,2432],{"class":109},[49,7677,2497],{"class":66},[49,7679,7680],{"class":55},"\u002F\u002F1000\n",[49,7682,7683,7685,7687,7689,7691,7693],{"class":51,"line":2902},[49,7684,2807],{"class":66},[49,7686,2432],{"class":109},[49,7688,1630],{"class":66},[49,7690,2432],{"class":109},[49,7692,2497],{"class":66},[49,7694,7680],{"class":55},[49,7696,7697],{"class":51,"line":2908},[49,7698,137],{"class":66},[14,7700,7702],{"id":7701},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,7704,7705],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,7707,7708],{},"在32位操作系统下：占用4个字节空间",[19,7710,7711],{},"在64位操作系统下：占用8个字节空间",[19,7713,7714],{},"上方是不管啥数据类型的",[39,7716,7718],{"className":1391,"code":7717,"language":1393,"meta":44,"style":44},"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",[46,7719,7720,7728,7732,7737,7749,7754,7759,7764,7777,7799,7825,7851],{"__ignoreMap":44},[49,7721,7722,7724,7726],{"class":51,"line":52},[49,7723,1406],{"class":109},[49,7725,3227],{"class":62},[49,7727,3230],{"class":66},[49,7729,7730],{"class":51,"line":59},[49,7731,2802],{"class":66},[49,7733,7734],{"class":51,"line":70},[49,7735,7736],{"class":55},"    \u002F\u002F指针所占内存空间\n",[49,7738,7739,7741,7743,7745,7747],{"class":51,"line":86},[49,7740,3239],{"class":109},[49,7742,2655],{"class":66},[49,7744,1448],{"class":109},[49,7746,106],{"class":73},[49,7748,83],{"class":66},[49,7750,7751],{"class":51,"line":98},[49,7752,7753],{"class":55},"    \u002F\u002Fint *p;\n",[49,7755,7756],{"class":51,"line":121},[49,7757,7758],{"class":55},"    \u002F\u002Fp=&a;\n",[49,7760,7761],{"class":51,"line":134},[49,7762,7763],{"class":55},"    \u002F\u002F上述可以写为以下：\n",[49,7765,7766,7768,7771,7773,7775],{"class":51,"line":1085},[49,7767,3239],{"class":109},[49,7769,7770],{"class":109}," *",[49,7772,19],{"class":66},[49,7774,7591],{"class":109},[49,7776,7449],{"class":66},[49,7778,7779,7782,7784,7787,7789,7792,7794,7796],{"class":51,"line":2574},[49,7780,7781],{"class":66},"    cout ",[49,7783,2432],{"class":109},[49,7785,7786],{"class":1505},"\"sizeof(int *)\"",[49,7788,2629],{"class":109},[49,7790,7791],{"class":66},"(p)",[49,7793,2432],{"class":109},[49,7795,2497],{"class":66},[49,7797,7798],{"class":55},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[49,7800,7801,7803,7805,7807,7809,7811,7813,7815,7817,7819,7822],{"class":51,"line":2586},[49,7802,7781],{"class":66},[49,7804,2432],{"class":109},[49,7806,7786],{"class":1505},[49,7808,2629],{"class":109},[49,7810,1403],{"class":66},[49,7812,1406],{"class":109},[49,7814,7770],{"class":109},[49,7816,1821],{"class":66},[49,7818,2432],{"class":109},[49,7820,7821],{"class":66},"endl",[49,7823,7824],{"class":55},"  \u002F\u002F4字节(32位的话)\n",[49,7826,7827,7829,7831,7834,7836,7838,7840,7842,7844,7846,7848],{"class":51,"line":2867},[49,7828,7781],{"class":66},[49,7830,2432],{"class":109},[49,7832,7833],{"class":1505},"\"sizeof(char *)\"",[49,7835,2629],{"class":109},[49,7837,1403],{"class":66},[49,7839,1497],{"class":109},[49,7841,7770],{"class":109},[49,7843,1821],{"class":66},[49,7845,2432],{"class":109},[49,7847,2497],{"class":66},[49,7849,7850],{"class":55}," \u002F\u002F4字节(32位的话)\n",[49,7852,7853],{"class":51,"line":2872},[49,7854,137],{"class":66},[14,7856,7858],{"id":7857},"_33空指针","3.3空指针",[19,7860,7861],{},"空指针：指针变量指向内存中编号为0的空间",[19,7863,7864],{},"用途：初始化指针变量",[19,7866,7867],{},"注意：空指针指向的内存是不可以访问的",[39,7869,7871],{"className":1391,"code":7870,"language":1393,"meta":44,"style":44},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[46,7872,7873,7881,7885,7890,7904,7909,7924,7929],{"__ignoreMap":44},[49,7874,7875,7877,7879],{"class":51,"line":52},[49,7876,1406],{"class":109},[49,7878,3227],{"class":62},[49,7880,3230],{"class":66},[49,7882,7883],{"class":51,"line":59},[49,7884,2802],{"class":66},[49,7886,7887],{"class":51,"line":70},[49,7888,7889],{"class":55},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[49,7891,7892,7894,7896,7898,7900,7902],{"class":51,"line":86},[49,7893,3239],{"class":109},[49,7895,7770],{"class":109},[49,7897,19],{"class":66},[49,7899,1448],{"class":109},[49,7901,3646],{"class":73},[49,7903,83],{"class":66},[49,7905,7906],{"class":51,"line":98},[49,7907,7908],{"class":55},"    \u002F\u002F2.空指针不能进行访问\n",[49,7910,7911,7913,7915,7917,7919,7921],{"class":51,"line":121},[49,7912,7655],{"class":109},[49,7914,19],{"class":66},[49,7916,1448],{"class":109},[49,7918,1703],{"class":73},[49,7920,1457],{"class":66},[49,7922,7923],{"class":55},"\u002F\u002F直接报错，压根不能访问\n",[49,7925,7926],{"class":51,"line":134},[49,7927,7928],{"class":55},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[49,7930,7931],{"class":51,"line":1085},[49,7932,137],{"class":66},[14,7934,7936],{"id":7935},"_34野指针","3.4野指针",[19,7938,7939],{},[485,7940,7941],{},"指针变量指向非法的内存空间",[39,7943,7945],{"className":1391,"code":7944,"language":1393,"meta":44,"style":44},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[46,7946,7947,7955,7959,7988,7993,8005],{"__ignoreMap":44},[49,7948,7949,7951,7953],{"class":51,"line":52},[49,7950,1406],{"class":109},[49,7952,3227],{"class":62},[49,7954,3230],{"class":66},[49,7956,7957],{"class":51,"line":59},[49,7958,2802],{"class":66},[49,7960,7961,7963,7965,7967,7969,7971,7973,7975,7977,7980,7983,7985],{"class":51,"line":70},[49,7962,3239],{"class":109},[49,7964,7770],{"class":109},[49,7966,19],{"class":66},[49,7968,1448],{"class":109},[49,7970,1403],{"class":66},[49,7972,1406],{"class":109},[49,7974,7770],{"class":109},[49,7976,1821],{"class":66},[49,7978,7979],{"class":109},"0x",[49,7981,7982],{"class":73},"1100",[49,7984,1457],{"class":66},[49,7986,7987],{"class":55}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[49,7989,7990],{"class":51,"line":86},[49,7991,7992],{"class":55},"    \u002F\u002F访问野指针报错\n",[49,7994,7995,7997,7999,8001,8003],{"class":51,"line":98},[49,7996,2807],{"class":66},[49,7998,7671],{"class":109},[49,8000,19],{"class":66},[49,8002,2432],{"class":109},[49,8004,2454],{"class":66},[49,8006,8007],{"class":51,"line":121},[49,8008,137],{"class":66},[19,8010,8011],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8013,8015],{"id":8014},"_35const修饰指针","3.5const修饰指针",[19,8017,8018],{},"三种情况：",[23,8020,8021,8024,8027],{},[26,8022,8023],{},"const修饰指针 常量指针",[26,8025,8026],{},"const修饰常量 指针常量",[26,8028,8029],{},"const即修饰指针，又修饰常量",[591,8031,8032],{},[26,8033,8034],{},"常量指针",[39,8036,8038],{"className":1391,"code":8037,"language":1393,"meta":44,"style":44},"const int *p=&a;\n",[46,8039,8040],{"__ignoreMap":44},[49,8041,8042,8045,8047,8049,8051,8053],{"class":51,"line":52},[49,8043,8044],{"class":109},"const",[49,8046,3636],{"class":109},[49,8048,7770],{"class":109},[49,8050,19],{"class":66},[49,8052,7591],{"class":109},[49,8054,7449],{"class":66},[19,8056,8057],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[591,8059,8060],{"start":59},[26,8061,8062],{},"指针常量",[39,8064,8066],{"className":1391,"code":8065,"language":1393,"meta":44,"style":44},"int *const p=&a;\n",[46,8067,8068],{"__ignoreMap":44},[49,8069,8070,8072,8075,8078,8080],{"class":51,"line":52},[49,8071,1406],{"class":109},[49,8073,8074],{"class":109}," *const",[49,8076,8077],{"class":66}," p",[49,8079,7591],{"class":109},[49,8081,7449],{"class":66},[19,8083,8084],{},"指针的指向不可以改，指针指向的值可以改",[591,8086,8087],{"start":70},[26,8088,8029],{},[39,8090,8092],{"className":1391,"code":8091,"language":1393,"meta":44,"style":44},"const int *const p=&a;\n",[46,8093,8094],{"__ignoreMap":44},[49,8095,8096,8098,8100,8102,8104,8106],{"class":51,"line":52},[49,8097,8044],{"class":109},[49,8099,3636],{"class":109},[49,8101,8074],{"class":109},[49,8103,8077],{"class":66},[49,8105,7591],{"class":109},[49,8107,7449],{"class":66},[19,8109,8110],{},"指针的指向和指针指向的值都不可以改变",[14,8112,8114],{"id":8113},"_36指针和数组","3.6指针和数组",[39,8116,8118],{"className":1391,"code":8117,"language":1393,"meta":44,"style":44},"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",[46,8119,8120,8128,8132,8137,8191,8212,8228,8244,8255,8272,8277,8291,8317,8321,8333,8342,8346],{"__ignoreMap":44},[49,8121,8122,8124,8126],{"class":51,"line":52},[49,8123,1406],{"class":109},[49,8125,3227],{"class":62},[49,8127,3230],{"class":66},[49,8129,8130],{"class":51,"line":59},[49,8131,2802],{"class":66},[49,8133,8134],{"class":51,"line":70},[49,8135,8136],{"class":55},"    \u002F\u002F利用指针访问数组中的元素\n",[49,8138,8139,8141,8143,8145,8147,8149,8151,8153,8155,8157,8159,8161,8163,8165,8167,8169,8171,8173,8175,8177,8179,8181,8183,8185,8187,8189],{"class":51,"line":86},[49,8140,3239],{"class":109},[49,8142,5216],{"class":66},[49,8144,106],{"class":73},[49,8146,2330],{"class":66},[49,8148,1448],{"class":109},[49,8150,2286],{"class":66},[49,8152,159],{"class":73},[49,8154,1770],{"class":66},[49,8156,1478],{"class":73},[49,8158,1770],{"class":66},[49,8160,1472],{"class":73},[49,8162,1770],{"class":66},[49,8164,1685],{"class":73},[49,8166,1770],{"class":66},[49,8168,1711],{"class":73},[49,8170,1770],{"class":66},[49,8172,1736],{"class":73},[49,8174,1770],{"class":66},[49,8176,1761],{"class":73},[49,8178,1770],{"class":66},[49,8180,1787],{"class":73},[49,8182,1770],{"class":66},[49,8184,1812],{"class":73},[49,8186,1770],{"class":66},[49,8188,106],{"class":73},[49,8190,5249],{"class":66},[49,8192,8193,8195,8197,8200,8202,8204,8206,8208,8210],{"class":51,"line":98},[49,8194,2807],{"class":66},[49,8196,2432],{"class":109},[49,8198,8199],{"class":1505},"\"数组的第一个元素为：\"",[49,8201,2432],{"class":109},[49,8203,5160],{"class":66},[49,8205,80],{"class":73},[49,8207,2330],{"class":66},[49,8209,2432],{"class":109},[49,8211,2454],{"class":66},[49,8213,8214,8216,8218,8220,8222,8225],{"class":51,"line":121},[49,8215,3239],{"class":109},[49,8217,7770],{"class":109},[49,8219,19],{"class":66},[49,8221,1448],{"class":109},[49,8223,8224],{"class":66},"arr;",[49,8226,8227],{"class":55},"\u002F\u002F注意数才要加取地址符号&\n",[49,8229,8230,8232,8234,8236,8238,8240,8242],{"class":51,"line":134},[49,8231,2807],{"class":66},[49,8233,2432],{"class":109},[49,8235,8199],{"class":1505},[49,8237,7671],{"class":109},[49,8239,19],{"class":66},[49,8241,2432],{"class":109},[49,8243,2454],{"class":66},[49,8245,8246,8248,8250,8252],{"class":51,"line":1085},[49,8247,7588],{"class":66},[49,8249,3546],{"class":109},[49,8251,1457],{"class":66},[49,8253,8254],{"class":55}," \u002F\u002F让指针向后偏移4个字节\n",[49,8256,8257,8259,8261,8264,8266,8268,8270],{"class":51,"line":2574},[49,8258,2807],{"class":66},[49,8260,2432],{"class":109},[49,8262,8263],{"class":1505},"\"数组的第二个元素为：\"",[49,8265,7671],{"class":109},[49,8267,19],{"class":66},[49,8269,2432],{"class":109},[49,8271,2454],{"class":66},[49,8273,8274],{"class":51,"line":2586},[49,8275,8276],{"class":55},"    \u002F\u002F利用指针遍历数组\n",[49,8278,8279,8281,8283,8286,8288],{"class":51,"line":2867},[49,8280,3239],{"class":109},[49,8282,7770],{"class":109},[49,8284,8285],{"class":66},"p2",[49,8287,1448],{"class":109},[49,8289,8290],{"class":66},"arr;\n",[49,8292,8293,8295,8297,8299,8301,8303,8305,8307,8309,8311,8313,8315],{"class":51,"line":2872},[49,8294,4455],{"class":109},[49,8296,2913],{"class":66},[49,8298,1406],{"class":109},[49,8300,4286],{"class":66},[49,8302,1448],{"class":109},[49,8304,80],{"class":73},[49,8306,4293],{"class":66},[49,8308,2300],{"class":109},[49,8310,106],{"class":73},[49,8312,4293],{"class":66},[49,8314,3546],{"class":109},[49,8316,1409],{"class":66},[49,8318,8319],{"class":51,"line":2878},[49,8320,3284],{"class":66},[49,8322,8323,8325,8327,8329,8331],{"class":51,"line":2883},[49,8324,4705],{"class":66},[49,8326,7671],{"class":109},[49,8328,8285],{"class":66},[49,8330,2432],{"class":109},[49,8332,2454],{"class":66},[49,8334,8335,8338,8340],{"class":51,"line":2897},[49,8336,8337],{"class":66},"        p2",[49,8339,3546],{"class":109},[49,8341,83],{"class":66},[49,8343,8344],{"class":51,"line":2902},[49,8345,3441],{"class":66},[49,8347,8348],{"class":51,"line":2908},[49,8349,137],{"class":66},[14,8351,8353],{"id":8352},"_37指针和函数","3.7指针和函数",[19,8355,8356],{},"利用指针做函数参数，可以修改实参的值",[19,8358,8359],{},"值传递：只改变形参，不改变实参",[19,8361,8362],{},"地址传递：",[39,8364,8366],{"className":1391,"code":8365,"language":1393,"meta":44,"style":44},"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",[46,8367,8368,8393,8397,8409,8420,8430,8434,8442,8446,8458,8470,8475,8491,8506,8521],{"__ignoreMap":44},[49,8369,8370,8372,8374,8376,8378,8380,8383,8385,8387,8389,8391],{"class":51,"line":52},[49,8371,6616],{"class":109},[49,8373,6619],{"class":62},[49,8375,1403],{"class":66},[49,8377,1406],{"class":109},[49,8379,7770],{"class":109},[49,8381,8382],{"class":6468},"p1",[49,8384,1770],{"class":66},[49,8386,1406],{"class":109},[49,8388,7770],{"class":109},[49,8390,8285],{"class":6468},[49,8392,1409],{"class":66},[49,8394,8395],{"class":51,"line":59},[49,8396,2802],{"class":66},[49,8398,8399,8401,8403,8406],{"class":51,"line":70},[49,8400,3239],{"class":109},[49,8402,5509],{"class":66},[49,8404,8405],{"class":109},"=*",[49,8407,8408],{"class":66},"p1;\n",[49,8410,8411,8413,8415,8417],{"class":51,"line":86},[49,8412,7655],{"class":109},[49,8414,8382],{"class":66},[49,8416,8405],{"class":109},[49,8418,8419],{"class":66},"p2;\n",[49,8421,8422,8424,8426,8428],{"class":51,"line":98},[49,8423,7655],{"class":109},[49,8425,8285],{"class":66},[49,8427,1448],{"class":109},[49,8429,5534],{"class":66},[49,8431,8432],{"class":51,"line":121},[49,8433,137],{"class":66},[49,8435,8436,8438,8440],{"class":51,"line":134},[49,8437,1406],{"class":109},[49,8439,3227],{"class":62},[49,8441,3230],{"class":66},[49,8443,8444],{"class":51,"line":1085},[49,8445,2802],{"class":66},[49,8447,8448,8450,8452,8454,8456],{"class":51,"line":2574},[49,8449,3239],{"class":109},[49,8451,2655],{"class":66},[49,8453,1448],{"class":109},[49,8455,106],{"class":73},[49,8457,83],{"class":66},[49,8459,8460,8462,8464,8466,8468],{"class":51,"line":2586},[49,8461,3239],{"class":109},[49,8463,4087],{"class":66},[49,8465,1448],{"class":109},[49,8467,875],{"class":73},[49,8469,83],{"class":66},[49,8471,8472],{"class":51,"line":2867},[49,8473,8474],{"class":55},"    \u002F\u002F地址传递\n",[49,8476,8477,8479,8481,8483,8486,8488],{"class":51,"line":2872},[49,8478,6813],{"class":62},[49,8480,1403],{"class":66},[49,8482,1745],{"class":109},[49,8484,8485],{"class":66},"a,",[49,8487,1745],{"class":109},[49,8489,8490],{"class":66},"b);\n",[49,8492,8493,8495,8497,8499,8501,8503],{"class":51,"line":2878},[49,8494,2807],{"class":66},[49,8496,2432],{"class":109},[49,8498,1630],{"class":66},[49,8500,2432],{"class":109},[49,8502,2497],{"class":66},[49,8504,8505],{"class":55},"\u002F\u002F20\n",[49,8507,8508,8510,8512,8514,8516,8518],{"class":51,"line":2883},[49,8509,2807],{"class":66},[49,8511,2432],{"class":109},[49,8513,1655],{"class":66},[49,8515,2432],{"class":109},[49,8517,2497],{"class":66},[49,8519,8520],{"class":55},"\u002F\u002F10\n",[49,8522,8523],{"class":51,"line":2897},[49,8524,137],{"class":66},[19,8526,8527],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8529,8531],{"id":8530},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8533,8534],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8536,8537,8538,8540],{},"例如数组：int arr",[49,8539,106],{},"={4,3,6,9,1,2,10,8,7,5}",[39,8542,8544],{"className":1391,"code":8543,"language":1393,"meta":44,"style":44},"#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",[46,8545,8546,8552,8562,8586,8590,8621,8625,8659,8663,8681,8685,8696,8711,8726,8730,8734,8738,8742,8746,8754,8758,8763,8817,8829,8841,8846,8854,8858,8863,8888,8892,8907,8916,8920],{"__ignoreMap":44},[49,8547,8548,8550],{"class":51,"line":52},[49,8549,3204],{"class":109},[49,8551,3207],{"class":1505},[49,8553,8554,8556,8558,8560],{"class":51,"line":59},[49,8555,3212],{"class":109},[49,8557,3215],{"class":109},[49,8559,3218],{"class":62},[49,8561,83],{"class":66},[49,8563,8564,8566,8569,8571,8573,8575,8577,8579,8581,8584],{"class":51,"line":70},[49,8565,6616],{"class":109},[49,8567,8568],{"class":62}," bubbleSort",[49,8570,1403],{"class":66},[49,8572,1406],{"class":109},[49,8574,7770],{"class":109},[49,8576,19],{"class":6468},[49,8578,1770],{"class":66},[49,8580,1406],{"class":109},[49,8582,8583],{"class":6468}," len",[49,8585,1409],{"class":66},[49,8587,8588],{"class":51,"line":86},[49,8589,2802],{"class":66},[49,8591,8592,8594,8596,8598,8600,8602,8604,8606,8608,8611,8613,8615,8617,8619],{"class":51,"line":98},[49,8593,4455],{"class":109},[49,8595,1403],{"class":66},[49,8597,1406],{"class":109},[49,8599,4286],{"class":66},[49,8601,1448],{"class":109},[49,8603,80],{"class":73},[49,8605,4293],{"class":66},[49,8607,2300],{"class":109},[49,8609,8610],{"class":66},"len",[49,8612,1923],{"class":109},[49,8614,159],{"class":73},[49,8616,4293],{"class":66},[49,8618,3546],{"class":109},[49,8620,1409],{"class":66},[49,8622,8623],{"class":51,"line":121},[49,8624,3284],{"class":66},[49,8626,8627,8629,8631,8633,8635,8637,8639,8641,8643,8645,8647,8649,8651,8653,8655,8657],{"class":51,"line":134},[49,8628,4657],{"class":109},[49,8630,1403],{"class":66},[49,8632,1406],{"class":109},[49,8634,4664],{"class":66},[49,8636,1448],{"class":109},[49,8638,80],{"class":73},[49,8640,4671],{"class":66},[49,8642,2300],{"class":109},[49,8644,8610],{"class":66},[49,8646,1923],{"class":109},[49,8648,1833],{"class":66},[49,8650,1923],{"class":109},[49,8652,159],{"class":73},[49,8654,4671],{"class":66},[49,8656,3546],{"class":109},[49,8658,1409],{"class":66},[49,8660,8661],{"class":51,"line":1085},[49,8662,3764],{"class":66},[49,8664,8665,8667,8670,8672,8675,8677,8679],{"class":51,"line":2574},[49,8666,5896],{"class":109},[49,8668,8669],{"class":66},"(p[j]",[49,8671,2349],{"class":109},[49,8673,8674],{"class":66},"p[j",[49,8676,1872],{"class":109},[49,8678,159],{"class":73},[49,8680,5911],{"class":66},[49,8682,8683],{"class":51,"line":2586},[49,8684,5916],{"class":66},[49,8686,8687,8689,8691,8693],{"class":51,"line":2867},[49,8688,5921],{"class":109},[49,8690,5509],{"class":66},[49,8692,1448],{"class":109},[49,8694,8695],{"class":66},"p[j];\n",[49,8697,8698,8701,8703,8705,8707,8709],{"class":51,"line":2872},[49,8699,8700],{"class":66},"                p[j]",[49,8702,1448],{"class":109},[49,8704,8674],{"class":66},[49,8706,1872],{"class":109},[49,8708,159],{"class":73},[49,8710,5944],{"class":66},[49,8712,8713,8716,8718,8720,8722,8724],{"class":51,"line":2878},[49,8714,8715],{"class":66},"                p[j",[49,8717,1872],{"class":109},[49,8719,159],{"class":73},[49,8721,2330],{"class":66},[49,8723,1448],{"class":109},[49,8725,5534],{"class":66},[49,8727,8728],{"class":51,"line":2883},[49,8729,5964],{"class":66},[49,8731,8732],{"class":51,"line":2897},[49,8733,3783],{"class":66},[49,8735,8736],{"class":51,"line":2902},[49,8737,3441],{"class":66},[49,8739,8740],{"class":51,"line":2908},[49,8741,137],{"class":66},[49,8743,8744],{"class":51,"line":2929},[49,8745,3654],{"emptyLinePlaceholder":1330},[49,8747,8748,8750,8752],{"class":51,"line":2934},[49,8749,1406],{"class":109},[49,8751,3227],{"class":62},[49,8753,3230],{"class":66},[49,8755,8756],{"class":51,"line":2948},[49,8757,2802],{"class":66},[49,8759,8760],{"class":51,"line":2953},[49,8761,8762],{"class":55},"    \u002F\u002F 1.创建数组\n",[49,8764,8765,8767,8769,8771,8773,8775,8777,8779,8781,8783,8785,8787,8789,8791,8793,8795,8797,8799,8801,8803,8805,8807,8809,8811,8813,8815],{"class":51,"line":2982},[49,8766,3239],{"class":109},[49,8768,5216],{"class":66},[49,8770,106],{"class":73},[49,8772,2330],{"class":66},[49,8774,1448],{"class":109},[49,8776,2286],{"class":66},[49,8778,1685],{"class":73},[49,8780,1770],{"class":66},[49,8782,1472],{"class":73},[49,8784,1770],{"class":66},[49,8786,1736],{"class":73},[49,8788,1770],{"class":66},[49,8790,1812],{"class":73},[49,8792,1770],{"class":66},[49,8794,159],{"class":73},[49,8796,1770],{"class":66},[49,8798,1478],{"class":73},[49,8800,1770],{"class":66},[49,8802,106],{"class":73},[49,8804,1770],{"class":66},[49,8806,1787],{"class":73},[49,8808,1770],{"class":66},[49,8810,1761],{"class":73},[49,8812,1770],{"class":66},[49,8814,1711],{"class":73},[49,8816,5249],{"class":66},[49,8818,8819,8821,8823,8825,8827],{"class":51,"line":2987},[49,8820,3239],{"class":109},[49,8822,8583],{"class":66},[49,8824,1448],{"class":109},[49,8826,106],{"class":73},[49,8828,83],{"class":66},[49,8830,8831,8833,8835,8837,8839],{"class":51,"line":3004},[49,8832,3239],{"class":109},[49,8834,7770],{"class":109},[49,8836,19],{"class":66},[49,8838,1448],{"class":109},[49,8840,8290],{"class":66},[49,8842,8843],{"class":51,"line":3009},[49,8844,8845],{"class":55},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[49,8847,8848,8851],{"class":51,"line":3014},[49,8849,8850],{"class":62},"    bubbleSort",[49,8852,8853],{"class":66},"(p,len);\n",[49,8855,8856],{"class":51,"line":3019},[49,8857,3654],{"emptyLinePlaceholder":1330},[49,8859,8860],{"class":51,"line":3033},[49,8861,8862],{"class":55},"    \u002F\u002F 3.打印排序后的数组\n",[49,8864,8865,8867,8869,8871,8873,8875,8877,8879,8881,8884,8886],{"class":51,"line":3038},[49,8866,4455],{"class":109},[49,8868,2913],{"class":66},[49,8870,1406],{"class":109},[49,8872,4286],{"class":66},[49,8874,1448],{"class":109},[49,8876,80],{"class":73},[49,8878,4468],{"class":66},[49,8880,2300],{"class":109},[49,8882,8883],{"class":66},"len; i",[49,8885,3546],{"class":109},[49,8887,1409],{"class":66},[49,8889,8890],{"class":51,"line":3831},[49,8891,3284],{"class":66},[49,8893,8894,8896,8898,8900,8902,8905],{"class":51,"line":3845},[49,8895,4705],{"class":66},[49,8897,7671],{"class":109},[49,8899,19],{"class":66},[49,8901,2432],{"class":109},[49,8903,8904],{"class":1505},"\"\"",[49,8906,83],{"class":66},[49,8908,8909,8912,8914],{"class":51,"line":3853},[49,8910,8911],{"class":66},"        p",[49,8913,3546],{"class":109},[49,8915,83],{"class":66},[49,8917,8918],{"class":51,"line":3858},[49,8919,3441],{"class":66},[49,8921,8922],{"class":51,"line":3864},[49,8923,137],{"class":66},[1305,8925,8926],{},"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":44,"searchDepth":59,"depth":59,"links":8928},[8929,8930,8931,8932,8933,8934,8935,8936],{"id":7535,"depth":59,"text":7536},{"id":7701,"depth":59,"text":7702},{"id":7857,"depth":59,"text":7858},{"id":7935,"depth":59,"text":7936},{"id":8014,"depth":59,"text":8015},{"id":8113,"depth":59,"text":8114},{"id":8352,"depth":59,"text":8353},{"id":8530,"depth":59,"text":8531},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7524,"description":7532},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8943,"title":8944,"body":8945,"description":8952,"extension":1328,"meta":11926,"navigation":1330,"path":11927,"seo":11928,"stem":11929,"__hash__":11930},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8946,"toc":11917},[8947,8950,8953,8957,8960,8963,8974,9312,9315,9319,9322,9329,9584,9588,9591,9594,9749,9753,9756,9759,9965,9969,9972,10275,10278,10286,10290,10293,10444,10446,10457,10514,10518,10523,11180,11188,11191,11285,11288,11908,11914],[10,8948,8944],{"id":8949},"_4结构体",[19,8951,8952],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8954,8956],{"id":8955},"_41结构体定义与使用","4.1结构体定义与使用",[19,8958,8959],{},"语法：struct 结构体名 {结构体成员列表}；",[19,8961,8962],{},"通过结构体创建变量的方式：",[23,8964,8965,8968,8971],{},[26,8966,8967],{},"struct 结构体名 变量名",[26,8969,8970],{},"struct 结构体名 变量名={成员1值，成员2值...}",[26,8972,8973],{},"定义结构体时顺便创建变量",[39,8975,8977],{"className":1391,"code":8976,"language":1393,"meta":44,"style":44},"#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",[46,8978,8979,8985,8995,9002,9007,9015,9019,9024,9028,9033,9038,9043,9050,9055,9062,9066,9073,9077,9081,9085,9089,9093,9097,9103,9107,9113,9121,9129,9133,9138,9143,9154,9159,9171,9182,9193,9198,9222,9227,9233,9260,9265,9271,9283,9295,9307],{"__ignoreMap":44},[49,8980,8981,8983],{"class":51,"line":52},[49,8982,3204],{"class":109},[49,8984,3207],{"class":1505},[49,8986,8987,8989,8991,8993],{"class":51,"line":59},[49,8988,3212],{"class":109},[49,8990,3215],{"class":109},[49,8992,3218],{"class":62},[49,8994,83],{"class":66},[49,8996,8997,8999],{"class":51,"line":70},[49,8998,3204],{"class":109},[49,9000,9001],{"class":1505},"\u003Cstring>\n",[49,9003,9004],{"class":51,"line":86},[49,9005,9006],{"class":55},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[49,9008,9009,9012],{"class":51,"line":98},[49,9010,9011],{"class":109},"struct",[49,9013,9014],{"class":62}," Student\n",[49,9016,9017],{"class":51,"line":121},[49,9018,2802],{"class":66},[49,9020,9021],{"class":51,"line":134},[49,9022,9023],{"class":55},"    \u002F\u002F成员列表\n",[49,9025,9026],{"class":51,"line":1085},[49,9027,3654],{"emptyLinePlaceholder":1330},[49,9029,9030],{"class":51,"line":2574},[49,9031,9032],{"class":55},"    \u002F\u002F姓名\n",[49,9034,9035],{"class":51,"line":2586},[49,9036,9037],{"class":66},"    string name;\n",[49,9039,9040],{"class":51,"line":2867},[49,9041,9042],{"class":55},"    \u002F\u002F年龄\n",[49,9044,9045,9047],{"class":51,"line":2872},[49,9046,3239],{"class":109},[49,9048,9049],{"class":66}," age;\n",[49,9051,9052],{"class":51,"line":2878},[49,9053,9054],{"class":55},"    \u002F\u002F分数\n",[49,9056,9057,9059],{"class":51,"line":2883},[49,9058,3239],{"class":109},[49,9060,9061],{"class":66}," score;\n",[49,9063,9064],{"class":51,"line":2897},[49,9065,5249],{"class":66},[49,9067,9068,9070],{"class":51,"line":2902},[49,9069,9011],{"class":109},[49,9071,9072],{"class":62}," School\n",[49,9074,9075],{"class":51,"line":2908},[49,9076,2802],{"class":66},[49,9078,9079],{"class":51,"line":2929},[49,9080,9023],{"class":55},[49,9082,9083],{"class":51,"line":2934},[49,9084,3654],{"emptyLinePlaceholder":1330},[49,9086,9087],{"class":51,"line":2948},[49,9088,9032],{"class":55},[49,9090,9091],{"class":51,"line":2953},[49,9092,9037],{"class":66},[49,9094,9095],{"class":51,"line":2982},[49,9096,9042],{"class":55},[49,9098,9099,9101],{"class":51,"line":2987},[49,9100,3239],{"class":109},[49,9102,9049],{"class":66},[49,9104,9105],{"class":51,"line":3004},[49,9106,9054],{"class":55},[49,9108,9109,9111],{"class":51,"line":3009},[49,9110,3239],{"class":109},[49,9112,9061],{"class":66},[49,9114,9115,9118],{"class":51,"line":3014},[49,9116,9117],{"class":66},"} s3;",[49,9119,9120],{"class":55}," \u002F\u002F创建结构体时就创建了变量\n",[49,9122,9123,9125,9127],{"class":51,"line":3019},[49,9124,1406],{"class":109},[49,9126,3227],{"class":62},[49,9128,3230],{"class":66},[49,9130,9131],{"class":51,"line":3033},[49,9132,2802],{"class":66},[49,9134,9135],{"class":51,"line":3038},[49,9136,9137],{"class":55},"    \u002F\u002F2.通过学生类型创建具体学生\n",[49,9139,9140],{"class":51,"line":3831},[49,9141,9142],{"class":55},"    \u002F\u002F2.1 struct Student s1;\n",[49,9144,9145,9148,9151],{"class":51,"line":3845},[49,9146,9147],{"class":109},"    struct",[49,9149,9150],{"class":62}," Student",[49,9152,9153],{"class":66}," s1;\n",[49,9155,9156],{"class":51,"line":3853},[49,9157,9158],{"class":55},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[49,9160,9161,9164,9166,9169],{"class":51,"line":3858},[49,9162,9163],{"class":66},"    s1.name",[49,9165,1448],{"class":109},[49,9167,9168],{"class":1505},"\"张三\"",[49,9170,83],{"class":66},[49,9172,9173,9176,9178,9180],{"class":51,"line":3864},[49,9174,9175],{"class":66},"    s1.age",[49,9177,1448],{"class":109},[49,9179,2041],{"class":73},[49,9181,83],{"class":66},[49,9183,9184,9187,9189,9191],{"class":51,"line":3870},[49,9185,9186],{"class":66},"    s1.score",[49,9188,1448],{"class":109},[49,9190,1646],{"class":73},[49,9192,83],{"class":66},[49,9194,9195],{"class":51,"line":3875},[49,9196,9197],{"class":55},"    \u002F\u002F输出结果\n",[49,9199,9201,9203,9205,9208,9210,9213,9215,9218,9220],{"class":51,"line":9200},37,[49,9202,2807],{"class":66},[49,9204,2432],{"class":109},[49,9206,9207],{"class":66},"s1.name",[49,9209,2432],{"class":109},[49,9211,9212],{"class":66},"s1.age",[49,9214,2432],{"class":109},[49,9216,9217],{"class":66},"s1.score",[49,9219,2432],{"class":109},[49,9221,2454],{"class":66},[49,9223,9225],{"class":51,"line":9224},38,[49,9226,3654],{"emptyLinePlaceholder":1330},[49,9228,9230],{"class":51,"line":9229},39,[49,9231,9232],{"class":55},"    \u002F\u002F2.2 struct Student s2={...}\n",[49,9234,9236,9238,9240,9243,9245,9247,9250,9252,9254,9256,9258],{"class":51,"line":9235},40,[49,9237,9147],{"class":109},[49,9239,9150],{"class":62},[49,9241,9242],{"class":66}," s2",[49,9244,1448],{"class":109},[49,9246,2286],{"class":66},[49,9248,9249],{"class":1505},"\"王五\"",[49,9251,1770],{"class":66},[49,9253,2041],{"class":73},[49,9255,1770],{"class":66},[49,9257,1646],{"class":73},[49,9259,5249],{"class":66},[49,9261,9263],{"class":51,"line":9262},41,[49,9264,3654],{"emptyLinePlaceholder":1330},[49,9266,9268],{"class":51,"line":9267},42,[49,9269,9270],{"class":55},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[49,9272,9274,9277,9279,9281],{"class":51,"line":9273},43,[49,9275,9276],{"class":66},"    s3.name",[49,9278,1448],{"class":109},[49,9280,4932],{"class":1505},[49,9282,83],{"class":66},[49,9284,9286,9289,9291,9293],{"class":51,"line":9285},44,[49,9287,9288],{"class":66},"    s3.age",[49,9290,1448],{"class":109},[49,9292,2041],{"class":73},[49,9294,83],{"class":66},[49,9296,9298,9301,9303,9305],{"class":51,"line":9297},45,[49,9299,9300],{"class":66},"    s3.score",[49,9302,1448],{"class":109},[49,9304,875],{"class":73},[49,9306,83],{"class":66},[49,9308,9310],{"class":51,"line":9309},46,[49,9311,137],{"class":66},[19,9313,9314],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9316,9318],{"id":9317},"_42结构体数组","4.2结构体数组",[19,9320,9321],{},"将自定义的结构体放入到数组中方便维护",[19,9323,9324,9325,9328],{},"语法：struct 结构体名 数组名",[49,9326,9327],{},"元素个数","={ {}，{},...{} };",[39,9330,9332],{"className":1391,"code":9331,"language":1393,"meta":44,"style":44},"#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",[46,9333,9334,9340,9350,9356,9361,9367,9371,9375,9381,9387,9391,9395,9403,9407,9412,9427,9431,9447,9463,9467,9472,9488,9503,9518,9523,9549,9553,9576,9580],{"__ignoreMap":44},[49,9335,9336,9338],{"class":51,"line":52},[49,9337,3204],{"class":109},[49,9339,3207],{"class":1505},[49,9341,9342,9344,9346,9348],{"class":51,"line":59},[49,9343,3212],{"class":109},[49,9345,3215],{"class":109},[49,9347,3218],{"class":62},[49,9349,83],{"class":66},[49,9351,9352,9354],{"class":51,"line":70},[49,9353,3204],{"class":109},[49,9355,9001],{"class":1505},[49,9357,9358],{"class":51,"line":86},[49,9359,9360],{"class":55},"\u002F\u002F1.定义结构体\n",[49,9362,9363,9365],{"class":51,"line":98},[49,9364,9011],{"class":109},[49,9366,9014],{"class":62},[49,9368,9369],{"class":51,"line":121},[49,9370,2802],{"class":66},[49,9372,9373],{"class":51,"line":134},[49,9374,9037],{"class":66},[49,9376,9377,9379],{"class":51,"line":1085},[49,9378,3239],{"class":109},[49,9380,9049],{"class":66},[49,9382,9383,9385],{"class":51,"line":2574},[49,9384,3239],{"class":109},[49,9386,9061],{"class":66},[49,9388,9389],{"class":51,"line":2586},[49,9390,3654],{"emptyLinePlaceholder":1330},[49,9392,9393],{"class":51,"line":2867},[49,9394,5249],{"class":66},[49,9396,9397,9399,9401],{"class":51,"line":2872},[49,9398,1406],{"class":109},[49,9400,3227],{"class":62},[49,9402,3230],{"class":66},[49,9404,9405],{"class":51,"line":2878},[49,9406,2802],{"class":66},[49,9408,9409],{"class":51,"line":2883},[49,9410,9411],{"class":55},"    \u002F\u002F2.创建结构体数组\n",[49,9413,9414,9416,9418,9421,9423,9425],{"class":51,"line":2897},[49,9415,9147],{"class":109},[49,9417,9150],{"class":62},[49,9419,9420],{"class":66}," stuArray[",[49,9422,1478],{"class":73},[49,9424,2330],{"class":66},[49,9426,6162],{"class":109},[49,9428,9429],{"class":51,"line":2902},[49,9430,3284],{"class":66},[49,9432,9433,9435,9437,9439,9441,9443,9445],{"class":51,"line":2908},[49,9434,6171],{"class":66},[49,9436,9168],{"class":1505},[49,9438,1770],{"class":66},[49,9440,2041],{"class":73},[49,9442,1770],{"class":66},[49,9444,1703],{"class":73},[49,9446,6184],{"class":66},[49,9448,9449,9451,9453,9455,9457,9459,9461],{"class":51,"line":2929},[49,9450,6171],{"class":66},[49,9452,4932],{"class":1505},[49,9454,1770],{"class":66},[49,9456,1966],{"class":73},[49,9458,1770],{"class":66},[49,9460,1966],{"class":73},[49,9462,137],{"class":66},[49,9464,9465],{"class":51,"line":2934},[49,9466,3441],{"class":66},[49,9468,9469],{"class":51,"line":2948},[49,9470,9471],{"class":55},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[49,9473,9474,9477,9479,9482,9484,9486],{"class":51,"line":2953},[49,9475,9476],{"class":66},"    stuArray[",[49,9478,159],{"class":73},[49,9480,9481],{"class":66},"].name",[49,9483,1448],{"class":109},[49,9485,4955],{"class":1505},[49,9487,83],{"class":66},[49,9489,9490,9492,9494,9497,9499,9501],{"class":51,"line":2982},[49,9491,9476],{"class":66},[49,9493,159],{"class":73},[49,9495,9496],{"class":66},"].age",[49,9498,1448],{"class":109},[49,9500,1478],{"class":73},[49,9502,83],{"class":66},[49,9504,9505,9507,9509,9512,9514,9516],{"class":51,"line":2987},[49,9506,9476],{"class":66},[49,9508,159],{"class":73},[49,9510,9511],{"class":66},"].score",[49,9513,1448],{"class":109},[49,9515,1478],{"class":73},[49,9517,83],{"class":66},[49,9519,9520],{"class":51,"line":3004},[49,9521,9522],{"class":55},"    \u002F\u002F4.遍历结构体数组\n",[49,9524,9525,9527,9529,9531,9533,9535,9537,9539,9541,9543,9545,9547],{"class":51,"line":3009},[49,9526,4455],{"class":109},[49,9528,2913],{"class":66},[49,9530,1406],{"class":109},[49,9532,4286],{"class":66},[49,9534,1448],{"class":109},[49,9536,80],{"class":73},[49,9538,4293],{"class":66},[49,9540,2300],{"class":109},[49,9542,1478],{"class":73},[49,9544,4293],{"class":66},[49,9546,3546],{"class":109},[49,9548,1409],{"class":66},[49,9550,9551],{"class":51,"line":3014},[49,9552,3284],{"class":66},[49,9554,9555,9557,9559,9562,9564,9567,9569,9572,9574],{"class":51,"line":3019},[49,9556,4705],{"class":66},[49,9558,2432],{"class":109},[49,9560,9561],{"class":66},"stuArray[i].name",[49,9563,2432],{"class":109},[49,9565,9566],{"class":66},"stuArray[i].age",[49,9568,2432],{"class":109},[49,9570,9571],{"class":66},"stuArray[i].score",[49,9573,2432],{"class":109},[49,9575,2454],{"class":66},[49,9577,9578],{"class":51,"line":3033},[49,9579,3441],{"class":66},[49,9581,9582],{"class":51,"line":3038},[49,9583,137],{"class":66},[14,9585,9587],{"id":9586},"_43结构体指针","4.3结构体指针",[19,9589,9590],{},"作用：通过指针访问结构体中的成员",[19,9592,9593],{},"利用操作符->可以通过结构体指针访问结构体属性",[39,9595,9597],{"className":1391,"code":9596,"language":1393,"meta":44,"style":44},"#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",[46,9598,9599,9605,9615,9621,9625,9631,9635,9639,9645,9651,9655,9663,9667,9672,9697,9702,9717,9722,9745],{"__ignoreMap":44},[49,9600,9601,9603],{"class":51,"line":52},[49,9602,3204],{"class":109},[49,9604,3207],{"class":1505},[49,9606,9607,9609,9611,9613],{"class":51,"line":59},[49,9608,3212],{"class":109},[49,9610,3215],{"class":109},[49,9612,3218],{"class":62},[49,9614,83],{"class":66},[49,9616,9617,9619],{"class":51,"line":70},[49,9618,3204],{"class":109},[49,9620,9001],{"class":1505},[49,9622,9623],{"class":51,"line":86},[49,9624,9360],{"class":55},[49,9626,9627,9629],{"class":51,"line":98},[49,9628,9011],{"class":109},[49,9630,9014],{"class":62},[49,9632,9633],{"class":51,"line":121},[49,9634,2802],{"class":66},[49,9636,9637],{"class":51,"line":134},[49,9638,9037],{"class":66},[49,9640,9641,9643],{"class":51,"line":1085},[49,9642,3239],{"class":109},[49,9644,9049],{"class":66},[49,9646,9647,9649],{"class":51,"line":2574},[49,9648,3239],{"class":109},[49,9650,9061],{"class":66},[49,9652,9653],{"class":51,"line":2586},[49,9654,5249],{"class":66},[49,9656,9657,9659,9661],{"class":51,"line":2867},[49,9658,1406],{"class":109},[49,9660,3227],{"class":62},[49,9662,3230],{"class":66},[49,9664,9665],{"class":51,"line":2872},[49,9666,2802],{"class":66},[49,9668,9669],{"class":51,"line":2878},[49,9670,9671],{"class":55},"    \u002F\u002F创建学生结构体变量\n",[49,9673,9674,9676,9678,9681,9683,9685,9687,9689,9691,9693,9695],{"class":51,"line":2883},[49,9675,9147],{"class":109},[49,9677,9150],{"class":62},[49,9679,9680],{"class":66}," s",[49,9682,1448],{"class":109},[49,9684,2286],{"class":66},[49,9686,9168],{"class":1505},[49,9688,1770],{"class":66},[49,9690,2041],{"class":73},[49,9692,1770],{"class":66},[49,9694,2977],{"class":73},[49,9696,5249],{"class":66},[49,9698,9699],{"class":51,"line":2897},[49,9700,9701],{"class":55},"    \u002F\u002F通过指针指向结构体变量\n",[49,9703,9704,9706,9708,9710,9712,9714],{"class":51,"line":2902},[49,9705,9147],{"class":109},[49,9707,9150],{"class":62},[49,9709,7770],{"class":109},[49,9711,19],{"class":66},[49,9713,7591],{"class":109},[49,9715,9716],{"class":66},"s\n",[49,9718,9719],{"class":51,"line":2908},[49,9720,9721],{"class":55},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[49,9723,9724,9726,9728,9731,9733,9736,9738,9741,9743],{"class":51,"line":2929},[49,9725,2807],{"class":66},[49,9727,2432],{"class":109},[49,9729,9730],{"class":66},"p->name",[49,9732,2432],{"class":109},[49,9734,9735],{"class":66},"p->age",[49,9737,2432],{"class":109},[49,9739,9740],{"class":66},"p->score",[49,9742,2432],{"class":109},[49,9744,2454],{"class":66},[49,9746,9747],{"class":51,"line":2934},[49,9748,137],{"class":66},[14,9750,9752],{"id":9751},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,9754,9755],{},"作用：结构体中的成员可以是另一个结构体",[19,9757,9758],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[39,9760,9762],{"className":1391,"code":9761,"language":1393,"meta":44,"style":44},"#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",[46,9763,9764,9770,9780,9786,9791,9799,9803,9807,9813,9819,9823,9828,9835,9839,9846,9850,9856,9861,9865,9873,9877,9882,9887,9892,9903,9915,9926,9939,9950,9961],{"__ignoreMap":44},[49,9765,9766,9768],{"class":51,"line":52},[49,9767,3204],{"class":109},[49,9769,3207],{"class":1505},[49,9771,9772,9774,9776,9778],{"class":51,"line":59},[49,9773,3212],{"class":109},[49,9775,3215],{"class":109},[49,9777,3218],{"class":62},[49,9779,83],{"class":66},[49,9781,9782,9784],{"class":51,"line":70},[49,9783,3204],{"class":109},[49,9785,9001],{"class":1505},[49,9787,9788],{"class":51,"line":86},[49,9789,9790],{"class":55},"\u002F\u002F定义学生结构体\n",[49,9792,9793,9795,9797],{"class":51,"line":98},[49,9794,9011],{"class":109},[49,9796,9150],{"class":62},[49,9798,3928],{"class":66},[49,9800,9801],{"class":51,"line":121},[49,9802,2802],{"class":66},[49,9804,9805],{"class":51,"line":134},[49,9806,9037],{"class":66},[49,9808,9809,9811],{"class":51,"line":1085},[49,9810,3239],{"class":109},[49,9812,9049],{"class":66},[49,9814,9815,9817],{"class":51,"line":2574},[49,9816,3239],{"class":109},[49,9818,9061],{"class":66},[49,9820,9821],{"class":51,"line":2586},[49,9822,137],{"class":66},[49,9824,9825],{"class":51,"line":2867},[49,9826,9827],{"class":55},"\u002F\u002F定义老师结构体\n",[49,9829,9830,9832],{"class":51,"line":2872},[49,9831,9011],{"class":109},[49,9833,9834],{"class":62}," Teacher\n",[49,9836,9837],{"class":51,"line":2878},[49,9838,2802],{"class":66},[49,9840,9841,9843],{"class":51,"line":2883},[49,9842,3239],{"class":109},[49,9844,9845],{"class":66}," id;\n",[49,9847,9848],{"class":51,"line":2897},[49,9849,9037],{"class":66},[49,9851,9852,9854],{"class":51,"line":2902},[49,9853,3239],{"class":109},[49,9855,9049],{"class":66},[49,9857,9858],{"class":51,"line":2908},[49,9859,9860],{"class":66},"    Student stu;\n",[49,9862,9863],{"class":51,"line":2929},[49,9864,137],{"class":66},[49,9866,9867,9869,9871],{"class":51,"line":2934},[49,9868,1406],{"class":109},[49,9870,3227],{"class":62},[49,9872,7230],{"class":66},[49,9874,9875],{"class":51,"line":2948},[49,9876,2802],{"class":66},[49,9878,9879],{"class":51,"line":2953},[49,9880,9881],{"class":55},"    \u002F\u002F结构体嵌套结构体\n",[49,9883,9884],{"class":51,"line":2982},[49,9885,9886],{"class":55},"    \u002F\u002F创建老师\n",[49,9888,9889],{"class":51,"line":2987},[49,9890,9891],{"class":66},"    Teacher t;\n",[49,9893,9894,9897,9899,9901],{"class":51,"line":3004},[49,9895,9896],{"class":66},"    t.id",[49,9898,1448],{"class":109},[49,9900,1703],{"class":73},[49,9902,83],{"class":66},[49,9904,9905,9908,9910,9913],{"class":51,"line":3009},[49,9906,9907],{"class":66},"    t.name",[49,9909,1448],{"class":109},[49,9911,9912],{"class":1505},"\"老王\"",[49,9914,83],{"class":66},[49,9916,9917,9920,9922,9924],{"class":51,"line":3014},[49,9918,9919],{"class":66},"    t.age",[49,9921,1448],{"class":109},[49,9923,2041],{"class":73},[49,9925,83],{"class":66},[49,9927,9928,9931,9933,9936],{"class":51,"line":3019},[49,9929,9930],{"class":66},"    t.stu.name",[49,9932,1448],{"class":109},[49,9934,9935],{"class":1505},"\"小王\"",[49,9937,9938],{"class":66},"；\n",[49,9940,9941,9944,9946,9948],{"class":51,"line":3033},[49,9942,9943],{"class":66},"    t.stu.age",[49,9945,1448],{"class":109},[49,9947,875],{"class":73},[49,9949,83],{"class":66},[49,9951,9952,9955,9957,9959],{"class":51,"line":3038},[49,9953,9954],{"class":66},"    t.stu.score",[49,9956,1448],{"class":109},[49,9958,1736],{"class":73},[49,9960,83],{"class":66},[49,9962,9963],{"class":51,"line":3831},[49,9964,137],{"class":66},[14,9966,9968],{"id":9967},"_45结构体做函数参数","4.5结构体做函数参数",[19,9970,9971],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[39,9973,9975],{"className":1391,"code":9974,"language":1393,"meta":44,"style":44},"#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",[46,9976,9977,9983,9993,9999,10005,10009,10013,10019,10025,10029,10034,10039,10056,10060,10093,10097,10102,10121,10125,10156,10160,10168,10172,10181,10193,10205,10217,10230,10238,10251,10263,10271],{"__ignoreMap":44},[49,9978,9979,9981],{"class":51,"line":52},[49,9980,3204],{"class":109},[49,9982,3207],{"class":1505},[49,9984,9985,9987,9989,9991],{"class":51,"line":59},[49,9986,3212],{"class":109},[49,9988,3215],{"class":109},[49,9990,3218],{"class":62},[49,9992,83],{"class":66},[49,9994,9995,9997],{"class":51,"line":70},[49,9996,3204],{"class":109},[49,9998,9001],{"class":1505},[49,10000,10001,10003],{"class":51,"line":86},[49,10002,9011],{"class":109},[49,10004,9014],{"class":62},[49,10006,10007],{"class":51,"line":98},[49,10008,2802],{"class":66},[49,10010,10011],{"class":51,"line":121},[49,10012,9037],{"class":66},[49,10014,10015,10017],{"class":51,"line":134},[49,10016,3239],{"class":109},[49,10018,9049],{"class":66},[49,10020,10021,10023],{"class":51,"line":1085},[49,10022,3239],{"class":109},[49,10024,9061],{"class":66},[49,10026,10027],{"class":51,"line":2574},[49,10028,5249],{"class":66},[49,10030,10031],{"class":51,"line":2586},[49,10032,10033],{"class":55},"\u002F\u002F打印学生信息的函数\n",[49,10035,10036],{"class":51,"line":2867},[49,10037,10038],{"class":55},"\u002F\u002F值传递\n",[49,10040,10041,10043,10046,10048,10050,10052,10054],{"class":51,"line":2872},[49,10042,6616],{"class":109},[49,10044,10045],{"class":62}," printStudent1",[49,10047,1403],{"class":66},[49,10049,9011],{"class":109},[49,10051,9150],{"class":62},[49,10053,9680],{"class":6468},[49,10055,1409],{"class":66},[49,10057,10058],{"class":51,"line":2878},[49,10059,2802],{"class":66},[49,10061,10062,10064,10066,10069,10071,10074,10076,10079,10081,10083,10085,10088,10090],{"class":51,"line":2883},[49,10063,7781],{"class":66},[49,10065,2432],{"class":109},[49,10067,10068],{"class":66}," s.name ",[49,10070,2432],{"class":109},[49,10072,10073],{"class":1505}," \" \"",[49,10075,2701],{"class":109},[49,10077,10078],{"class":66}," s.age ",[49,10080,2432],{"class":109},[49,10082,10073],{"class":1505},[49,10084,2701],{"class":109},[49,10086,10087],{"class":66}," s.score ",[49,10089,2432],{"class":109},[49,10091,10092],{"class":66}," endl;\n",[49,10094,10095],{"class":51,"line":2897},[49,10096,137],{"class":66},[49,10098,10099],{"class":51,"line":2902},[49,10100,10101],{"class":55},"\u002F\u002F地址传递\n",[49,10103,10104,10106,10109,10111,10113,10115,10117,10119],{"class":51,"line":2908},[49,10105,6616],{"class":109},[49,10107,10108],{"class":62}," printStudent2",[49,10110,1403],{"class":66},[49,10112,9011],{"class":109},[49,10114,9150],{"class":62},[49,10116,7770],{"class":109},[49,10118,2086],{"class":6468},[49,10120,1409],{"class":66},[49,10122,10123],{"class":51,"line":2929},[49,10124,2802],{"class":66},[49,10126,10127,10129,10131,10134,10136,10138,10140,10143,10145,10147,10149,10152,10154],{"class":51,"line":2934},[49,10128,7781],{"class":66},[49,10130,2432],{"class":109},[49,10132,10133],{"class":66}," s->name ",[49,10135,2432],{"class":109},[49,10137,10073],{"class":1505},[49,10139,2701],{"class":109},[49,10141,10142],{"class":66}," s->age ",[49,10144,2432],{"class":109},[49,10146,10073],{"class":1505},[49,10148,2701],{"class":109},[49,10150,10151],{"class":66}," s->score ",[49,10153,2432],{"class":109},[49,10155,10092],{"class":66},[49,10157,10158],{"class":51,"line":2948},[49,10159,137],{"class":66},[49,10161,10162,10164,10166],{"class":51,"line":2953},[49,10163,1406],{"class":109},[49,10165,3227],{"class":62},[49,10167,3230],{"class":66},[49,10169,10170],{"class":51,"line":2982},[49,10171,2802],{"class":66},[49,10173,10174,10176,10178],{"class":51,"line":2987},[49,10175,9147],{"class":109},[49,10177,9150],{"class":62},[49,10179,10180],{"class":66}," s;\n",[49,10182,10183,10186,10188,10191],{"class":51,"line":3004},[49,10184,10185],{"class":66},"    s.name ",[49,10187,1448],{"class":109},[49,10189,10190],{"class":1505}," \"张三\"",[49,10192,83],{"class":66},[49,10194,10195,10198,10200,10203],{"class":51,"line":3009},[49,10196,10197],{"class":66},"    s.age ",[49,10199,1448],{"class":109},[49,10201,10202],{"class":73}," 20",[49,10204,83],{"class":66},[49,10206,10207,10210,10212,10215],{"class":51,"line":3014},[49,10208,10209],{"class":66},"    s.score ",[49,10211,1448],{"class":109},[49,10213,10214],{"class":73}," 85",[49,10216,83],{"class":66},[49,10218,10219,10221,10223,10226,10228],{"class":51,"line":3019},[49,10220,2807],{"class":66},[49,10222,2432],{"class":109},[49,10224,10225],{"class":1505},"\"值传递:\"",[49,10227,2432],{"class":109},[49,10229,2454],{"class":66},[49,10231,10232,10235],{"class":51,"line":3033},[49,10233,10234],{"class":62},"    printStudent1",[49,10236,10237],{"class":66},"(s);\n",[49,10239,10240,10242,10244,10247,10249],{"class":51,"line":3038},[49,10241,2807],{"class":66},[49,10243,2432],{"class":109},[49,10245,10246],{"class":1505},"\"地址传递:\"",[49,10248,2432],{"class":109},[49,10250,2454],{"class":66},[49,10252,10253,10256,10258,10260],{"class":51,"line":3831},[49,10254,10255],{"class":62},"    printStudent2",[49,10257,1403],{"class":66},[49,10259,1745],{"class":109},[49,10261,10262],{"class":66},"s); \n",[49,10264,10265,10267,10269],{"class":51,"line":3845},[49,10266,5344],{"class":109},[49,10268,5347],{"class":73},[49,10270,83],{"class":66},[49,10272,10273],{"class":51,"line":3853},[49,10274,137],{"class":66},[19,10276,10277],{},"注意：",[23,10279,10280,10283],{},[26,10281,10282],{},"1.先定义结构体，不要在函数中写结构体的定义",[26,10284,10285],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10287,10289],{"id":10288},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10291,10292],{},"用const防止误操作",[39,10294,10296],{"className":1391,"code":10295,"language":1393,"meta":44,"style":44},"#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",[46,10297,10298,10304,10314,10320,10325,10329,10333,10339,10345,10349,10365,10369,10392,10396,10404,10408,10429,10436,10440],{"__ignoreMap":44},[49,10299,10300,10302],{"class":51,"line":52},[49,10301,3204],{"class":109},[49,10303,3207],{"class":1505},[49,10305,10306,10308,10310,10312],{"class":51,"line":59},[49,10307,3212],{"class":109},[49,10309,3215],{"class":109},[49,10311,3218],{"class":62},[49,10313,83],{"class":66},[49,10315,10316,10318],{"class":51,"line":70},[49,10317,3204],{"class":109},[49,10319,9001],{"class":1505},[49,10321,10322],{"class":51,"line":86},[49,10323,10324],{"class":66},"sctuct Student\n",[49,10326,10327],{"class":51,"line":98},[49,10328,2802],{"class":66},[49,10330,10331],{"class":51,"line":121},[49,10332,9037],{"class":66},[49,10334,10335,10337],{"class":51,"line":134},[49,10336,3239],{"class":109},[49,10338,9049],{"class":66},[49,10340,10341,10343],{"class":51,"line":1085},[49,10342,3239],{"class":109},[49,10344,9061],{"class":66},[49,10346,10347],{"class":51,"line":2574},[49,10348,5249],{"class":66},[49,10350,10351,10353,10356,10358,10361,10363],{"class":51,"line":2586},[49,10352,6616],{"class":109},[49,10354,10355],{"class":62}," printStudents",[49,10357,1403],{"class":66},[49,10359,10360],{"class":62},"student",[49,10362,9680],{"class":6468},[49,10364,1409],{"class":66},[49,10366,10367],{"class":51,"line":2867},[49,10368,2802],{"class":66},[49,10370,10371,10373,10375,10378,10380,10383,10385,10388,10390],{"class":51,"line":2872},[49,10372,2807],{"class":66},[49,10374,2432],{"class":109},[49,10376,10377],{"class":66},"s.name",[49,10379,2432],{"class":109},[49,10381,10382],{"class":66},"s.age",[49,10384,2432],{"class":109},[49,10386,10387],{"class":66},"s.score",[49,10389,2432],{"class":109},[49,10391,2454],{"class":66},[49,10393,10394],{"class":51,"line":2878},[49,10395,137],{"class":66},[49,10397,10398,10400,10402],{"class":51,"line":2883},[49,10399,1406],{"class":109},[49,10401,3227],{"class":62},[49,10403,7230],{"class":66},[49,10405,10406],{"class":51,"line":2897},[49,10407,2802],{"class":66},[49,10409,10410,10413,10415,10417,10419,10421,10423,10425,10427],{"class":51,"line":2902},[49,10411,10412],{"class":66},"    Student s",[49,10414,1448],{"class":109},[49,10416,2286],{"class":66},[49,10418,9168],{"class":1505},[49,10420,1770],{"class":66},[49,10422,2041],{"class":73},[49,10424,1770],{"class":66},[49,10426,2041],{"class":73},[49,10428,5249],{"class":66},[49,10430,10431,10434],{"class":51,"line":2908},[49,10432,10433],{"class":62},"    printStudent",[49,10435,10237],{"class":66},[49,10437,10438],{"class":51,"line":2929},[49,10439,3654],{"emptyLinePlaceholder":1330},[49,10441,10442],{"class":51,"line":2934},[49,10443,137],{"class":66},[19,10445,10277],{},[23,10447,10448,10451,10454],{},[26,10449,10450],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[26,10452,10453],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[26,10455,10456],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[39,10458,10460],{"className":1391,"code":10459,"language":1393,"meta":44,"style":44},"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",[46,10461,10462,10481,10485,10490,10510],{"__ignoreMap":44},[49,10463,10464,10466,10468,10470,10472,10475,10477,10479],{"class":51,"line":52},[49,10465,6616],{"class":109},[49,10467,10355],{"class":62},[49,10469,1403],{"class":66},[49,10471,8044],{"class":109},[49,10473,10474],{"class":62}," student",[49,10476,7770],{"class":109},[49,10478,2086],{"class":6468},[49,10480,1409],{"class":66},[49,10482,10483],{"class":51,"line":59},[49,10484,2802],{"class":66},[49,10486,10487],{"class":51,"line":70},[49,10488,10489],{"class":55},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[49,10491,10492,10494,10496,10498,10500,10502,10504,10506,10508],{"class":51,"line":86},[49,10493,2807],{"class":66},[49,10495,2432],{"class":109},[49,10497,10377],{"class":66},[49,10499,2432],{"class":109},[49,10501,10382],{"class":66},[49,10503,2432],{"class":109},[49,10505,10387],{"class":66},[49,10507,2432],{"class":109},[49,10509,2454],{"class":66},[49,10511,10512],{"class":51,"line":98},[49,10513,137],{"class":66},[14,10515,10517],{"id":10516},"_47案例","4.7案例",[591,10519,10520],{},[26,10521,10522],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[39,10524,10526],{"className":1391,"code":10525,"language":1393,"meta":44,"style":44},"#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",[46,10527,10528,10534,10544,10550,10557,10561,10567,10571,10576,10582,10588,10592,10596,10602,10606,10611,10616,10629,10633,10638,10664,10668,10680,10707,10711,10723,10733,10737,10742,10771,10775,10787,10796,10823,10834,10844,10848,10852,10856,10861,10885,10889,10913,10917,10936,10962,10966,10991,11014,11038,11043,11048,11053,11062,11067,11073,11094,11100,11114,11120,11147,11156,11162,11170,11175],{"__ignoreMap":44},[49,10529,10530,10532],{"class":51,"line":52},[49,10531,3204],{"class":109},[49,10533,3207],{"class":1505},[49,10535,10536,10538,10540,10542],{"class":51,"line":59},[49,10537,3212],{"class":109},[49,10539,3215],{"class":109},[49,10541,3218],{"class":62},[49,10543,83],{"class":66},[49,10545,10546,10548],{"class":51,"line":70},[49,10547,3204],{"class":109},[49,10549,9001],{"class":1505},[49,10551,10552,10554],{"class":51,"line":86},[49,10553,3204],{"class":109},[49,10555,10556],{"class":1505},"\u003Cctime>\n",[49,10558,10559],{"class":51,"line":98},[49,10560,9790],{"class":55},[49,10562,10563,10565],{"class":51,"line":121},[49,10564,9011],{"class":109},[49,10566,9014],{"class":62},[49,10568,10569],{"class":51,"line":134},[49,10570,2802],{"class":66},[49,10572,10573],{"class":51,"line":1085},[49,10574,10575],{"class":66},"    string sName;\n",[49,10577,10578,10580],{"class":51,"line":2574},[49,10579,3239],{"class":109},[49,10581,9049],{"class":66},[49,10583,10584,10586],{"class":51,"line":2586},[49,10585,3239],{"class":109},[49,10587,9061],{"class":66},[49,10589,10590],{"class":51,"line":2867},[49,10591,5249],{"class":66},[49,10593,10594],{"class":51,"line":2872},[49,10595,9827],{"class":55},[49,10597,10598,10600],{"class":51,"line":2878},[49,10599,9011],{"class":109},[49,10601,9834],{"class":62},[49,10603,10604],{"class":51,"line":2883},[49,10605,2802],{"class":66},[49,10607,10608],{"class":51,"line":2897},[49,10609,10610],{"class":66},"    string tName;\n",[49,10612,10613],{"class":51,"line":2902},[49,10614,10615],{"class":55},"    \u002F\u002F学生数组\n",[49,10617,10618,10620,10622,10625,10627],{"class":51,"line":2908},[49,10619,9147],{"class":109},[49,10621,9150],{"class":62},[49,10623,10624],{"class":66}," sArray[",[49,10626,1711],{"class":73},[49,10628,5944],{"class":66},[49,10630,10631],{"class":51,"line":2929},[49,10632,5249],{"class":66},[49,10634,10635],{"class":51,"line":2934},[49,10636,10637],{"class":55},"\u002F\u002F给老师和学生赋值的函数\n",[49,10639,10640,10642,10645,10647,10649,10652,10655,10658,10660,10662],{"class":51,"line":2948},[49,10641,6616],{"class":109},[49,10643,10644],{"class":62}," allocateSpace",[49,10646,1403],{"class":66},[49,10648,9011],{"class":109},[49,10650,10651],{"class":62}," Teacher",[49,10653,10654],{"class":6468}," tArray",[49,10656,10657],{"class":66},"[],",[49,10659,1406],{"class":109},[49,10661,8583],{"class":6468},[49,10663,1409],{"class":66},[49,10665,10666],{"class":51,"line":2953},[49,10667,2802],{"class":66},[49,10669,10670,10673,10675,10678],{"class":51,"line":2982},[49,10671,10672],{"class":66},"    string nameSeed",[49,10674,1448],{"class":109},[49,10676,10677],{"class":1505},"\"ABCDE\"",[49,10679,83],{"class":66},[49,10681,10682,10684,10686,10688,10691,10693,10695,10698,10700,10703,10705],{"class":51,"line":2987},[49,10683,4455],{"class":109},[49,10685,2913],{"class":66},[49,10687,1406],{"class":109},[49,10689,10690],{"class":66}," i ",[49,10692,1448],{"class":109},[49,10694,5347],{"class":73},[49,10696,10697],{"class":66},"; i ",[49,10699,2300],{"class":109},[49,10701,10702],{"class":66}," len; i",[49,10704,3546],{"class":109},[49,10706,1409],{"class":66},[49,10708,10709],{"class":51,"line":3004},[49,10710,3284],{"class":66},[49,10712,10713,10716,10718,10721],{"class":51,"line":3009},[49,10714,10715],{"class":66},"        tArray[i].tName ",[49,10717,1448],{"class":109},[49,10719,10720],{"class":1505}," \"Teacher_\"",[49,10722,83],{"class":66},[49,10724,10725,10727,10730],{"class":51,"line":3014},[49,10726,10715],{"class":66},[49,10728,10729],{"class":109},"+=",[49,10731,10732],{"class":66},"nameSeed[i];\n",[49,10734,10735],{"class":51,"line":3019},[49,10736,3654],{"emptyLinePlaceholder":1330},[49,10738,10739],{"class":51,"line":3033},[49,10740,10741],{"class":55},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[49,10743,10744,10746,10748,10750,10753,10755,10757,10760,10762,10764,10767,10769],{"class":51,"line":3038},[49,10745,4657],{"class":109},[49,10747,2913],{"class":66},[49,10749,1406],{"class":109},[49,10751,10752],{"class":66}," j ",[49,10754,1448],{"class":109},[49,10756,5347],{"class":73},[49,10758,10759],{"class":66},"; j ",[49,10761,2300],{"class":109},[49,10763,3402],{"class":73},[49,10765,10766],{"class":66},"; j",[49,10768,3546],{"class":109},[49,10770,1409],{"class":66},[49,10772,10773],{"class":51,"line":3831},[49,10774,3764],{"class":66},[49,10776,10777,10780,10782,10785],{"class":51,"line":3845},[49,10778,10779],{"class":66},"            tArray[i].sArray[j].sName ",[49,10781,1448],{"class":109},[49,10783,10784],{"class":1505}," \"Student_\"",[49,10786,83],{"class":66},[49,10788,10789,10791,10793],{"class":51,"line":3853},[49,10790,10779],{"class":66},[49,10792,10729],{"class":109},[49,10794,10795],{"class":66}," nameSeed[j];\n",[49,10797,10798,10801,10804,10806,10808,10810,10812,10814,10816,10818,10820],{"class":51,"line":3858},[49,10799,10800],{"class":109},"            int",[49,10802,10803],{"class":66}," random",[49,10805,1448],{"class":109},[49,10807,3678],{"class":62},[49,10809,3681],{"class":66},[49,10811,1720],{"class":109},[49,10813,2297],{"class":73},[49,10815,1872],{"class":109},[49,10817,1793],{"class":73},[49,10819,1457],{"class":66},[49,10821,10822],{"class":55},"\u002F\u002F40~99\n",[49,10824,10825,10828,10830,10832],{"class":51,"line":3864},[49,10826,10827],{"class":66},"            tArray[i].sArray[j].age ",[49,10829,1448],{"class":109},[49,10831,10202],{"class":73},[49,10833,83],{"class":66},[49,10835,10836,10839,10841],{"class":51,"line":3870},[49,10837,10838],{"class":66},"            tArray[i].sArray[j].score ",[49,10840,1448],{"class":109},[49,10842,10843],{"class":66}," random;\n",[49,10845,10846],{"class":51,"line":3875},[49,10847,3783],{"class":66},[49,10849,10850],{"class":51,"line":9200},[49,10851,3441],{"class":66},[49,10853,10854],{"class":51,"line":9224},[49,10855,137],{"class":66},[49,10857,10858],{"class":51,"line":9229},[49,10859,10860],{"class":55},"\u002F\u002F打印所有信息的函数\n",[49,10862,10863,10865,10868,10870,10872,10874,10876,10879,10881,10883],{"class":51,"line":9235},[49,10864,6616],{"class":109},[49,10866,10867],{"class":62}," printInfo",[49,10869,1403],{"class":66},[49,10871,9011],{"class":109},[49,10873,10651],{"class":62},[49,10875,10654],{"class":6468},[49,10877,10878],{"class":66},"[], ",[49,10880,1406],{"class":109},[49,10882,8583],{"class":6468},[49,10884,1409],{"class":66},[49,10886,10887],{"class":51,"line":9262},[49,10888,2802],{"class":66},[49,10890,10891,10893,10895,10897,10899,10901,10903,10905,10907,10909,10911],{"class":51,"line":9267},[49,10892,4455],{"class":109},[49,10894,2913],{"class":66},[49,10896,1406],{"class":109},[49,10898,10690],{"class":66},[49,10900,1448],{"class":109},[49,10902,5347],{"class":73},[49,10904,10697],{"class":66},[49,10906,2300],{"class":109},[49,10908,10702],{"class":66},[49,10910,3546],{"class":109},[49,10912,1409],{"class":66},[49,10914,10915],{"class":51,"line":9273},[49,10916,3284],{"class":66},[49,10918,10919,10922,10924,10927,10929,10932,10934],{"class":51,"line":9285},[49,10920,10921],{"class":66},"        cout ",[49,10923,2432],{"class":109},[49,10925,10926],{"class":1505}," \"Teacher: \"",[49,10928,2701],{"class":109},[49,10930,10931],{"class":66}," tArray[i].tName ",[49,10933,2432],{"class":109},[49,10935,10092],{"class":66},[49,10937,10938,10940,10942,10944,10946,10948,10950,10952,10954,10956,10958,10960],{"class":51,"line":9297},[49,10939,4657],{"class":109},[49,10941,2913],{"class":66},[49,10943,1406],{"class":109},[49,10945,10752],{"class":66},[49,10947,1448],{"class":109},[49,10949,5347],{"class":73},[49,10951,10759],{"class":66},[49,10953,2300],{"class":109},[49,10955,3402],{"class":73},[49,10957,10766],{"class":66},[49,10959,3546],{"class":109},[49,10961,1409],{"class":66},[49,10963,10964],{"class":51,"line":9309},[49,10965,3764],{"class":66},[49,10967,10969,10972,10974,10977,10979,10982,10984,10987,10989],{"class":51,"line":10968},47,[49,10970,10971],{"class":66},"            cout ",[49,10973,2432],{"class":109},[49,10975,10976],{"class":1505}," \"",[49,10978,2489],{"class":73},[49,10980,10981],{"class":1505},"Student: \"",[49,10983,2701],{"class":109},[49,10985,10986],{"class":66}," tArray[i].sArray[j].sName",[49,10988,2432],{"class":109},[49,10990,2454],{"class":66},[49,10992,10994,10996,10998,11000,11002,11005,11007,11010,11012],{"class":51,"line":10993},48,[49,10995,10971],{"class":66},[49,10997,2432],{"class":109},[49,10999,10976],{"class":1505},[49,11001,2489],{"class":73},[49,11003,11004],{"class":1505},"Age: \"",[49,11006,2701],{"class":109},[49,11008,11009],{"class":66}," tArray[i].sArray[j].age ",[49,11011,2432],{"class":109},[49,11013,10092],{"class":66},[49,11015,11017,11019,11021,11023,11025,11028,11030,11033,11035],{"class":51,"line":11016},49,[49,11018,10971],{"class":66},[49,11020,2432],{"class":109},[49,11022,10976],{"class":1505},[49,11024,2489],{"class":73},[49,11026,11027],{"class":1505},"Score: \"",[49,11029,2701],{"class":109},[49,11031,11032],{"class":66}," tArray[i].sArray[j].score ",[49,11034,2432],{"class":109},[49,11036,11037],{"class":66}," endl;   \n",[49,11039,11041],{"class":51,"line":11040},50,[49,11042,3783],{"class":66},[49,11044,11046],{"class":51,"line":11045},51,[49,11047,3441],{"class":66},[49,11049,11051],{"class":51,"line":11050},52,[49,11052,137],{"class":66},[49,11054,11056,11058,11060],{"class":51,"line":11055},53,[49,11057,1406],{"class":109},[49,11059,3227],{"class":62},[49,11061,3230],{"class":66},[49,11063,11065],{"class":51,"line":11064},54,[49,11066,2802],{"class":66},[49,11068,11070],{"class":51,"line":11069},55,[49,11071,11072],{"class":55},"    \u002F\u002F随机数种子\n",[49,11074,11076,11078,11080,11082,11084,11086,11088,11090,11092],{"class":51,"line":11075},56,[49,11077,3627],{"class":62},[49,11079,3630],{"class":66},[49,11081,3633],{"class":109},[49,11083,3636],{"class":109},[49,11085,1821],{"class":66},[49,11087,3641],{"class":62},[49,11089,1403],{"class":66},[49,11091,3646],{"class":73},[49,11093,3649],{"class":66},[49,11095,11097],{"class":51,"line":11096},57,[49,11098,11099],{"class":55},"    \u002F\u002F1.创建3名老师的数组\n",[49,11101,11103,11105,11107,11110,11112],{"class":51,"line":11102},58,[49,11104,9147],{"class":109},[49,11106,10651],{"class":62},[49,11108,11109],{"class":66}," tArray[",[49,11111,1472],{"class":73},[49,11113,5944],{"class":66},[49,11115,11117],{"class":51,"line":11116},59,[49,11118,11119],{"class":55},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[49,11121,11123,11125,11128,11130,11133,11136,11138,11140,11143,11145],{"class":51,"line":11122},60,[49,11124,3239],{"class":109},[49,11126,11127],{"class":66}," len ",[49,11129,1448],{"class":109},[49,11131,11132],{"class":109}," sizeof",[49,11134,11135],{"class":66},"(tArray) ",[49,11137,1975],{"class":109},[49,11139,11132],{"class":109},[49,11141,11142],{"class":66},"(tArray[",[49,11144,80],{"class":73},[49,11146,5110],{"class":66},[49,11148,11150,11153],{"class":51,"line":11149},61,[49,11151,11152],{"class":62},"    allocateSpace",[49,11154,11155],{"class":66},"(tArray, len);\n",[49,11157,11159],{"class":51,"line":11158},62,[49,11160,11161],{"class":55},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[49,11163,11165,11168],{"class":51,"line":11164},63,[49,11166,11167],{"class":62},"    printInfo",[49,11169,11155],{"class":66},[49,11171,11173],{"class":51,"line":11172},64,[49,11174,3654],{"emptyLinePlaceholder":1330},[49,11176,11178],{"class":51,"line":11177},65,[49,11179,137],{"class":66},[591,11181,11182],{"start":59},[26,11183,11184,11187],{},[485,11185,11186],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11189,11190],{},"五名英雄信息如下：",[39,11192,11196],{"className":11193,"code":11194,"language":11195,"meta":44,"style":44},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[46,11197,11198,11216,11233,11250,11267],{"__ignoreMap":44},[49,11199,11200,11202,11205,11207,11209,11211,11214],{"class":51,"line":52},[49,11201,6171],{"class":66},[49,11203,11204],{"class":1505},"\"刘备\"",[49,11206,1770],{"class":66},[49,11208,2165],{"class":73},[49,11210,1770],{"class":66},[49,11212,11213],{"class":1505},"\"男\"",[49,11215,6184],{"class":66},[49,11217,11218,11220,11223,11225,11227,11229,11231],{"class":51,"line":59},[49,11219,6171],{"class":66},[49,11221,11222],{"class":1505},"\"关羽\"",[49,11224,1770],{"class":66},[49,11226,2140],{"class":73},[49,11228,1770],{"class":66},[49,11230,11213],{"class":1505},[49,11232,6184],{"class":66},[49,11234,11235,11237,11240,11242,11244,11246,11248],{"class":51,"line":70},[49,11236,6171],{"class":66},[49,11238,11239],{"class":1505},"\"张飞\"",[49,11241,1770],{"class":66},[49,11243,875],{"class":73},[49,11245,1770],{"class":66},[49,11247,11213],{"class":1505},[49,11249,6184],{"class":66},[49,11251,11252,11254,11257,11259,11261,11263,11265],{"class":51,"line":86},[49,11253,6171],{"class":66},[49,11255,11256],{"class":1505},"\"赵云\"",[49,11258,1770],{"class":66},[49,11260,2115],{"class":73},[49,11262,1770],{"class":66},[49,11264,11213],{"class":1505},[49,11266,6184],{"class":66},[49,11268,11269,11271,11274,11276,11278,11280,11283],{"class":51,"line":98},[49,11270,6171],{"class":66},[49,11272,11273],{"class":1505},"\"貂蝉\"",[49,11275,1770],{"class":66},[49,11277,2066],{"class":73},[49,11279,1770],{"class":66},[49,11281,11282],{"class":1505},"\"女\"",[49,11284,6184],{"class":66},[19,11286,11287],{},"代码：",[39,11289,11291],{"className":1391,"code":11290,"language":1393,"meta":44,"style":44},"#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",[46,11292,11293,11299,11309,11315,11322,11326,11330,11336,11341,11345,11350,11373,11377,11402,11406,11439,11444,11473,11478,11493,11519,11539,11544,11549,11553,11557,11562,11584,11588,11612,11616,11678,11682,11686,11694,11698,11703,11714,11718,11734,11750,11766,11782,11798,11802,11822,11844,11849,11862,11869,11874,11880,11885,11898,11904],{"__ignoreMap":44},[49,11294,11295,11297],{"class":51,"line":52},[49,11296,3204],{"class":109},[49,11298,3207],{"class":1505},[49,11300,11301,11303,11305,11307],{"class":51,"line":59},[49,11302,3212],{"class":109},[49,11304,3215],{"class":109},[49,11306,3218],{"class":62},[49,11308,83],{"class":66},[49,11310,11311,11313],{"class":51,"line":70},[49,11312,3204],{"class":109},[49,11314,9001],{"class":1505},[49,11316,11317,11319],{"class":51,"line":86},[49,11318,9011],{"class":109},[49,11320,11321],{"class":62}," Sanguo\n",[49,11323,11324],{"class":51,"line":98},[49,11325,2802],{"class":66},[49,11327,11328],{"class":51,"line":121},[49,11329,9037],{"class":66},[49,11331,11332,11334],{"class":51,"line":134},[49,11333,3239],{"class":109},[49,11335,9049],{"class":66},[49,11337,11338],{"class":51,"line":1085},[49,11339,11340],{"class":66},"    string gender;\n",[49,11342,11343],{"class":51,"line":2574},[49,11344,5249],{"class":66},[49,11346,11347],{"class":51,"line":2586},[49,11348,11349],{"class":55},"\u002F\u002F定义排序函数\n",[49,11351,11352,11354,11356,11358,11361,11363,11365,11367,11369,11371],{"class":51,"line":2867},[49,11353,6616],{"class":109},[49,11355,8568],{"class":62},[49,11357,1403],{"class":66},[49,11359,11360],{"class":62},"Sanguo",[49,11362,7770],{"class":109},[49,11364,2086],{"class":6468},[49,11366,1770],{"class":66},[49,11368,1406],{"class":109},[49,11370,8583],{"class":6468},[49,11372,1409],{"class":66},[49,11374,11375],{"class":51,"line":2872},[49,11376,2802],{"class":66},[49,11378,11379,11381,11383,11385,11387,11389,11391,11393,11395,11398,11400],{"class":51,"line":2878},[49,11380,4455],{"class":109},[49,11382,1403],{"class":66},[49,11384,1406],{"class":109},[49,11386,4286],{"class":66},[49,11388,1448],{"class":109},[49,11390,80],{"class":73},[49,11392,4293],{"class":66},[49,11394,2300],{"class":109},[49,11396,11397],{"class":66},"len;i",[49,11399,3546],{"class":109},[49,11401,1409],{"class":66},[49,11403,11404],{"class":51,"line":2883},[49,11405,3284],{"class":66},[49,11407,11408,11411,11413,11415,11417,11419,11421,11423,11425,11427,11429,11431,11433,11435,11437],{"class":51,"line":2897},[49,11409,11410],{"class":109},"     for",[49,11412,2913],{"class":66},[49,11414,1406],{"class":109},[49,11416,4664],{"class":66},[49,11418,1448],{"class":109},[49,11420,80],{"class":73},[49,11422,4671],{"class":66},[49,11424,2300],{"class":109},[49,11426,8610],{"class":66},[49,11428,1923],{"class":109},[49,11430,159],{"class":73},[49,11432,1923],{"class":109},[49,11434,4804],{"class":66},[49,11436,3546],{"class":109},[49,11438,1409],{"class":66},[49,11440,11441],{"class":51,"line":2902},[49,11442,11443],{"class":66},"     {\n",[49,11445,11446,11449,11452,11454,11457,11459,11462,11464,11466,11468,11470],{"class":51,"line":2908},[49,11447,11448],{"class":109},"         if",[49,11450,11451],{"class":66}," ((s",[49,11453,1872],{"class":109},[49,11455,11456],{"class":66},"j)->age ",[49,11458,2349],{"class":109},[49,11460,11461],{"class":66}," (s",[49,11463,1872],{"class":109},[49,11465,1858],{"class":66},[49,11467,1872],{"class":109},[49,11469,159],{"class":73},[49,11471,11472],{"class":66},")->age)\n",[49,11474,11475],{"class":51,"line":2929},[49,11476,11477],{"class":66},"         {\n",[49,11479,11480,11483,11485,11488,11490],{"class":51,"line":2934},[49,11481,11482],{"class":66},"             Sanguo temp",[49,11484,8405],{"class":109},[49,11486,11487],{"class":66},"(s",[49,11489,1872],{"class":109},[49,11491,11492],{"class":66},"j);\n",[49,11494,11495,11498,11500,11502,11505,11507,11509,11511,11513,11515,11517],{"class":51,"line":2948},[49,11496,11497],{"class":109},"             *",[49,11499,11487],{"class":66},[49,11501,1872],{"class":109},[49,11503,11504],{"class":66},"j)",[49,11506,8405],{"class":109},[49,11508,11487],{"class":66},[49,11510,1872],{"class":109},[49,11512,1858],{"class":66},[49,11514,1872],{"class":109},[49,11516,159],{"class":73},[49,11518,3973],{"class":66},[49,11520,11521,11523,11525,11527,11529,11531,11533,11535,11537],{"class":51,"line":2953},[49,11522,11497],{"class":109},[49,11524,11487],{"class":66},[49,11526,1872],{"class":109},[49,11528,1858],{"class":66},[49,11530,1872],{"class":109},[49,11532,159],{"class":73},[49,11534,1821],{"class":66},[49,11536,1448],{"class":109},[49,11538,5534],{"class":66},[49,11540,11541],{"class":51,"line":2982},[49,11542,11543],{"class":66},"         }\n",[49,11545,11546],{"class":51,"line":2987},[49,11547,11548],{"class":66},"     }\n",[49,11550,11551],{"class":51,"line":3004},[49,11552,3441],{"class":66},[49,11554,11555],{"class":51,"line":3009},[49,11556,137],{"class":66},[49,11558,11559],{"class":51,"line":3014},[49,11560,11561],{"class":55},"\u002F\u002F定义打印函数\n",[49,11563,11564,11566,11568,11570,11572,11574,11576,11578,11580,11582],{"class":51,"line":3019},[49,11565,6616],{"class":109},[49,11567,10867],{"class":62},[49,11569,1403],{"class":66},[49,11571,11360],{"class":62},[49,11573,7770],{"class":109},[49,11575,2086],{"class":6468},[49,11577,1770],{"class":66},[49,11579,1406],{"class":109},[49,11581,8583],{"class":6468},[49,11583,1409],{"class":66},[49,11585,11586],{"class":51,"line":3033},[49,11587,2802],{"class":66},[49,11589,11590,11592,11594,11596,11598,11600,11602,11604,11606,11608,11610],{"class":51,"line":3038},[49,11591,4455],{"class":109},[49,11593,2913],{"class":66},[49,11595,1406],{"class":109},[49,11597,4286],{"class":66},[49,11599,1448],{"class":109},[49,11601,80],{"class":73},[49,11603,4293],{"class":66},[49,11605,2300],{"class":109},[49,11607,11397],{"class":66},[49,11609,3546],{"class":109},[49,11611,1409],{"class":66},[49,11613,11614],{"class":51,"line":3831},[49,11615,3284],{"class":66},[49,11617,11618,11620,11622,11624,11626,11629,11631,11633,11635,11638,11640,11642,11644,11647,11649,11651,11653,11656,11658,11660,11662,11665,11667,11669,11671,11674,11676],{"class":51,"line":3845},[49,11619,4705],{"class":66},[49,11621,2432],{"class":109},[49,11623,1643],{"class":1505},[49,11625,2489],{"class":73},[49,11627,11628],{"class":1505},"姓名：\"",[49,11630,2432],{"class":109},[49,11632,11487],{"class":66},[49,11634,1872],{"class":109},[49,11636,11637],{"class":66},"i)->name",[49,11639,2432],{"class":109},[49,11641,1643],{"class":1505},[49,11643,2489],{"class":73},[49,11645,11646],{"class":1505},"年龄：\"",[49,11648,2432],{"class":109},[49,11650,11487],{"class":66},[49,11652,1872],{"class":109},[49,11654,11655],{"class":66},"i)->age",[49,11657,2432],{"class":109},[49,11659,1643],{"class":1505},[49,11661,2489],{"class":73},[49,11663,11664],{"class":1505},"性别：\"",[49,11666,2432],{"class":109},[49,11668,11487],{"class":66},[49,11670,1872],{"class":109},[49,11672,11673],{"class":66},"i)->gender",[49,11675,2432],{"class":109},[49,11677,2454],{"class":66},[49,11679,11680],{"class":51,"line":3853},[49,11681,3441],{"class":66},[49,11683,11684],{"class":51,"line":3858},[49,11685,137],{"class":66},[49,11687,11688,11690,11692],{"class":51,"line":3864},[49,11689,1406],{"class":109},[49,11691,3227],{"class":62},[49,11693,3230],{"class":66},[49,11695,11696],{"class":51,"line":3870},[49,11697,2802],{"class":66},[49,11699,11700],{"class":51,"line":3875},[49,11701,11702],{"class":55},"    \u002F\u002F定义结构体变量\n",[49,11704,11705,11708,11710,11712],{"class":51,"line":9200},[49,11706,11707],{"class":66},"    Sanguo s1[",[49,11709,1711],{"class":73},[49,11711,2330],{"class":66},[49,11713,6162],{"class":109},[49,11715,11716],{"class":51,"line":9224},[49,11717,3284],{"class":66},[49,11719,11720,11722,11724,11726,11728,11730,11732],{"class":51,"line":9229},[49,11721,6171],{"class":66},[49,11723,11204],{"class":1505},[49,11725,1770],{"class":66},[49,11727,2165],{"class":73},[49,11729,1770],{"class":66},[49,11731,11213],{"class":1505},[49,11733,6184],{"class":66},[49,11735,11736,11738,11740,11742,11744,11746,11748],{"class":51,"line":9235},[49,11737,6171],{"class":66},[49,11739,11222],{"class":1505},[49,11741,1770],{"class":66},[49,11743,2140],{"class":73},[49,11745,1770],{"class":66},[49,11747,11213],{"class":1505},[49,11749,6184],{"class":66},[49,11751,11752,11754,11756,11758,11760,11762,11764],{"class":51,"line":9262},[49,11753,6171],{"class":66},[49,11755,11239],{"class":1505},[49,11757,1770],{"class":66},[49,11759,875],{"class":73},[49,11761,1770],{"class":66},[49,11763,11213],{"class":1505},[49,11765,6184],{"class":66},[49,11767,11768,11770,11772,11774,11776,11778,11780],{"class":51,"line":9267},[49,11769,6171],{"class":66},[49,11771,11256],{"class":1505},[49,11773,1770],{"class":66},[49,11775,2115],{"class":73},[49,11777,1770],{"class":66},[49,11779,11213],{"class":1505},[49,11781,6184],{"class":66},[49,11783,11784,11786,11788,11790,11792,11794,11796],{"class":51,"line":9273},[49,11785,6171],{"class":66},[49,11787,11273],{"class":1505},[49,11789,1770],{"class":66},[49,11791,2066],{"class":73},[49,11793,1770],{"class":66},[49,11795,11282],{"class":1505},[49,11797,6184],{"class":66},[49,11799,11800],{"class":51,"line":9285},[49,11801,6205],{"class":66},[49,11803,11804,11806,11808,11810,11813,11815,11818,11820],{"class":51,"line":9297},[49,11805,3239],{"class":109},[49,11807,8583],{"class":66},[49,11809,5457],{"class":109},[49,11811,11812],{"class":66},"(s1)",[49,11814,5463],{"class":109},[49,11816,11817],{"class":66},"(s1[",[49,11819,80],{"class":73},[49,11821,5110],{"class":66},[49,11823,11824,11827,11829,11832,11834,11837,11840,11842],{"class":51,"line":9309},[49,11825,11826],{"class":66},"    Sanguo ",[49,11828,1846],{"class":109},[49,11830,11831],{"class":66},"s ",[49,11833,1448],{"class":109},[49,11835,11836],{"class":109}," &",[49,11838,11839],{"class":66},"s1[",[49,11841,80],{"class":73},[49,11843,5944],{"class":66},[49,11845,11846],{"class":51,"line":10968},[49,11847,11848],{"class":55},"    \u002F\u002F排序前：\n",[49,11850,11851,11853,11855,11858,11860],{"class":51,"line":10993},[49,11852,7781],{"class":66},[49,11854,2432],{"class":109},[49,11856,11857],{"class":1505}," \"排序前：\"",[49,11859,2701],{"class":109},[49,11861,10092],{"class":66},[49,11863,11864,11866],{"class":51,"line":11016},[49,11865,11167],{"class":62},[49,11867,11868],{"class":66},"(s,len);\n",[49,11870,11871],{"class":51,"line":11040},[49,11872,11873],{"class":55},"    \u002F\u002F调用排序函数\n",[49,11875,11876,11878],{"class":51,"line":11045},[49,11877,8850],{"class":62},[49,11879,11868],{"class":66},[49,11881,11882],{"class":51,"line":11050},[49,11883,11884],{"class":55},"    \u002F\u002F排序后\n",[49,11886,11887,11889,11891,11894,11896],{"class":51,"line":11055},[49,11888,7781],{"class":66},[49,11890,2432],{"class":109},[49,11892,11893],{"class":1505}," \"排序后：\"",[49,11895,2701],{"class":109},[49,11897,10092],{"class":66},[49,11899,11900,11902],{"class":51,"line":11064},[49,11901,11167],{"class":62},[49,11903,11868],{"class":66},[49,11905,11906],{"class":51,"line":11069},[49,11907,137],{"class":66},[19,11909,11910,11911,11913],{},"注意：使用指针时直接用传首地址**&s",[49,11912,80],{},"**",[1305,11915,11916],{},"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":44,"searchDepth":59,"depth":59,"links":11918},[11919,11920,11921,11922,11923,11924,11925],{"id":8955,"depth":59,"text":8956},{"id":9317,"depth":59,"text":9318},{"id":9586,"depth":59,"text":9587},{"id":9751,"depth":59,"text":9752},{"id":9967,"depth":59,"text":9968},{"id":10288,"depth":59,"text":10289},{"id":10516,"depth":59,"text":10517},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8944,"description":8952},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11932,"title":11933,"body":11934,"description":44,"extension":1328,"meta":13277,"navigation":1330,"path":13278,"seo":13279,"stem":13280,"__hash__":13281},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11935,"toc":13271},[11936,11939,11943,11949,11963,11968,11971,11975,11982,11988,11991,11998,12004,12009,12012,12015,12018,12582,12585,12599,12603,12608,12624,12764,12767,12773,12776,12781,12789,12897,12900,12905,12908,12913,12916,12922,12925,13268],[10,11937,11933],{"id":11938},"_5程序内存模型",[14,11940,11942],{"id":11941},"_51内存分区模型","5.1内存分区模型",[19,11944,11945,11946],{},"C++程序在执行时，将内存大方向划分为",[485,11947,11948],{},"4个区域",[23,11950,11951,11954,11957,11960],{},[26,11952,11953],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[26,11955,11956],{},"全局区：存放全局变量和静态变量以及常量",[26,11958,11959],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[26,11961,11962],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,11964,11965],{},[485,11966,11967],{},"内存四区意义：",[19,11969,11970],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[183,11972,11974],{"id":11973},"_511程序运行前","5.1.1程序运行前",[19,11976,11977,11978,11981],{},"​\t在程序编译后，生成了exe可执行程序，",[485,11979,11980],{},"未执行该程序前","分为两个区域",[19,11983,11984,11985],{},"​\t",[485,11986,11987],{},"代码区：",[19,11989,11990],{},"​\t\t存放 CPU 执行的机器指令",[19,11992,11993,11994,11997],{},"​\t\t代码区是",[485,11995,11996],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11999,11993,12000,12003],{},[485,12001,12002],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12005,11984,12006],{},[485,12007,12008],{},"全局区：",[19,12010,12011],{},"​\t\t全局变量和静态变量存放在此.",[19,12013,12014],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12016,12017],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[39,12019,12021],{"className":1391,"code":12020,"language":1393,"meta":44,"style":44},"\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",[46,12022,12023,12028,12041,12054,12058,12063,12078,12093,12097,12106,12110,12115,12128,12141,12145,12150,12176,12202,12206,12233,12259,12263,12268,12284,12299,12303,12329,12355,12359,12384,12409,12413,12439,12465,12469,12485,12500,12526,12552,12556,12566,12570,12578],{"__ignoreMap":44},[49,12024,12025],{"class":51,"line":52},[49,12026,12027],{"class":55},"\u002F\u002F全局变量\n",[49,12029,12030,12032,12035,12037,12039],{"class":51,"line":59},[49,12031,1406],{"class":109},[49,12033,12034],{"class":66}," g_a ",[49,12036,1448],{"class":109},[49,12038,3292],{"class":73},[49,12040,83],{"class":66},[49,12042,12043,12045,12048,12050,12052],{"class":51,"line":70},[49,12044,1406],{"class":109},[49,12046,12047],{"class":66}," g_b ",[49,12049,1448],{"class":109},[49,12051,3292],{"class":73},[49,12053,83],{"class":66},[49,12055,12056],{"class":51,"line":86},[49,12057,3654],{"emptyLinePlaceholder":1330},[49,12059,12060],{"class":51,"line":98},[49,12061,12062],{"class":55},"\u002F\u002F全局常量\n",[49,12064,12065,12067,12069,12072,12074,12076],{"class":51,"line":121},[49,12066,8044],{"class":109},[49,12068,3636],{"class":109},[49,12070,12071],{"class":66}," c_g_a ",[49,12073,1448],{"class":109},[49,12075,3292],{"class":73},[49,12077,83],{"class":66},[49,12079,12080,12082,12084,12087,12089,12091],{"class":51,"line":134},[49,12081,8044],{"class":109},[49,12083,3636],{"class":109},[49,12085,12086],{"class":66}," c_g_b ",[49,12088,1448],{"class":109},[49,12090,3292],{"class":73},[49,12092,83],{"class":66},[49,12094,12095],{"class":51,"line":1085},[49,12096,3654],{"emptyLinePlaceholder":1330},[49,12098,12099,12101,12103],{"class":51,"line":2574},[49,12100,1406],{"class":109},[49,12102,3227],{"class":62},[49,12104,12105],{"class":66},"() {\n",[49,12107,12108],{"class":51,"line":2586},[49,12109,3654],{"emptyLinePlaceholder":1330},[49,12111,12112],{"class":51,"line":2867},[49,12113,12114],{"class":55},"    \u002F\u002F局部变量\n",[49,12116,12117,12119,12122,12124,12126],{"class":51,"line":2872},[49,12118,3239],{"class":109},[49,12120,12121],{"class":66}," a ",[49,12123,1448],{"class":109},[49,12125,3292],{"class":73},[49,12127,83],{"class":66},[49,12129,12130,12132,12135,12137,12139],{"class":51,"line":2878},[49,12131,3239],{"class":109},[49,12133,12134],{"class":66}," b ",[49,12136,1448],{"class":109},[49,12138,3292],{"class":73},[49,12140,83],{"class":66},[49,12142,12143],{"class":51,"line":2883},[49,12144,3654],{"emptyLinePlaceholder":1330},[49,12146,12147],{"class":51,"line":2897},[49,12148,12149],{"class":55},"    \u002F\u002F打印地址\n",[49,12151,12152,12154,12156,12159,12161,12163,12165,12167,12169,12172,12174],{"class":51,"line":2902},[49,12153,7781],{"class":66},[49,12155,2432],{"class":109},[49,12157,12158],{"class":1505}," \"局部变量a地址为： \"",[49,12160,2701],{"class":109},[49,12162,2913],{"class":66},[49,12164,1406],{"class":109},[49,12166,1821],{"class":66},[49,12168,1745],{"class":109},[49,12170,12171],{"class":66},"a ",[49,12173,2432],{"class":109},[49,12175,10092],{"class":66},[49,12177,12178,12180,12182,12185,12187,12189,12191,12193,12195,12198,12200],{"class":51,"line":2908},[49,12179,7781],{"class":66},[49,12181,2432],{"class":109},[49,12183,12184],{"class":1505}," \"局部变量b地址为： \"",[49,12186,2701],{"class":109},[49,12188,2913],{"class":66},[49,12190,1406],{"class":109},[49,12192,1821],{"class":66},[49,12194,1745],{"class":109},[49,12196,12197],{"class":66},"b ",[49,12199,2432],{"class":109},[49,12201,10092],{"class":66},[49,12203,12204],{"class":51,"line":2929},[49,12205,3654],{"emptyLinePlaceholder":1330},[49,12207,12208,12210,12212,12215,12217,12220,12222,12224,12226,12229,12231],{"class":51,"line":2934},[49,12209,7781],{"class":66},[49,12211,2432],{"class":109},[49,12213,12214],{"class":1505}," \"全局变量g_a地址为： \"",[49,12216,2701],{"class":109},[49,12218,12219],{"class":66},"  (",[49,12221,1406],{"class":109},[49,12223,1821],{"class":66},[49,12225,1745],{"class":109},[49,12227,12228],{"class":66},"g_a ",[49,12230,2432],{"class":109},[49,12232,10092],{"class":66},[49,12234,12235,12237,12239,12242,12244,12246,12248,12250,12252,12255,12257],{"class":51,"line":2948},[49,12236,7781],{"class":66},[49,12238,2432],{"class":109},[49,12240,12241],{"class":1505}," \"全局变量g_b地址为： \"",[49,12243,2701],{"class":109},[49,12245,12219],{"class":66},[49,12247,1406],{"class":109},[49,12249,1821],{"class":66},[49,12251,1745],{"class":109},[49,12253,12254],{"class":66},"g_b ",[49,12256,2432],{"class":109},[49,12258,10092],{"class":66},[49,12260,12261],{"class":51,"line":2953},[49,12262,3654],{"emptyLinePlaceholder":1330},[49,12264,12265],{"class":51,"line":2982},[49,12266,12267],{"class":55},"    \u002F\u002F静态变量\n",[49,12269,12270,12273,12275,12278,12280,12282],{"class":51,"line":2987},[49,12271,12272],{"class":109},"    static",[49,12274,3636],{"class":109},[49,12276,12277],{"class":66}," s_a ",[49,12279,1448],{"class":109},[49,12281,3292],{"class":73},[49,12283,83],{"class":66},[49,12285,12286,12288,12290,12293,12295,12297],{"class":51,"line":3004},[49,12287,12272],{"class":109},[49,12289,3636],{"class":109},[49,12291,12292],{"class":66}," s_b ",[49,12294,1448],{"class":109},[49,12296,3292],{"class":73},[49,12298,83],{"class":66},[49,12300,12301],{"class":51,"line":3009},[49,12302,3654],{"emptyLinePlaceholder":1330},[49,12304,12305,12307,12309,12312,12314,12316,12318,12320,12322,12325,12327],{"class":51,"line":3014},[49,12306,7781],{"class":66},[49,12308,2432],{"class":109},[49,12310,12311],{"class":1505}," \"静态变量s_a地址为： \"",[49,12313,2701],{"class":109},[49,12315,2913],{"class":66},[49,12317,1406],{"class":109},[49,12319,1821],{"class":66},[49,12321,1745],{"class":109},[49,12323,12324],{"class":66},"s_a ",[49,12326,2432],{"class":109},[49,12328,10092],{"class":66},[49,12330,12331,12333,12335,12338,12340,12342,12344,12346,12348,12351,12353],{"class":51,"line":3019},[49,12332,7781],{"class":66},[49,12334,2432],{"class":109},[49,12336,12337],{"class":1505}," \"静态变量s_b地址为： \"",[49,12339,2701],{"class":109},[49,12341,2913],{"class":66},[49,12343,1406],{"class":109},[49,12345,1821],{"class":66},[49,12347,1745],{"class":109},[49,12349,12350],{"class":66},"s_b ",[49,12352,2432],{"class":109},[49,12354,10092],{"class":66},[49,12356,12357],{"class":51,"line":3033},[49,12358,3654],{"emptyLinePlaceholder":1330},[49,12360,12361,12363,12365,12368,12370,12372,12374,12376,12378,12380,12382],{"class":51,"line":3038},[49,12362,7781],{"class":66},[49,12364,2432],{"class":109},[49,12366,12367],{"class":1505}," \"字符串常量地址为： \"",[49,12369,2701],{"class":109},[49,12371,2913],{"class":66},[49,12373,1406],{"class":109},[49,12375,1821],{"class":66},[49,12377,1745],{"class":109},[49,12379,2449],{"class":1505},[49,12381,2701],{"class":109},[49,12383,10092],{"class":66},[49,12385,12386,12388,12390,12392,12394,12396,12398,12400,12402,12405,12407],{"class":51,"line":3831},[49,12387,7781],{"class":66},[49,12389,2432],{"class":109},[49,12391,12367],{"class":1505},[49,12393,2701],{"class":109},[49,12395,2913],{"class":66},[49,12397,1406],{"class":109},[49,12399,1821],{"class":66},[49,12401,1745],{"class":109},[49,12403,12404],{"class":1505},"\"hello world1\"",[49,12406,2701],{"class":109},[49,12408,10092],{"class":66},[49,12410,12411],{"class":51,"line":3845},[49,12412,3654],{"emptyLinePlaceholder":1330},[49,12414,12415,12417,12419,12422,12424,12426,12428,12430,12432,12435,12437],{"class":51,"line":3853},[49,12416,7781],{"class":66},[49,12418,2432],{"class":109},[49,12420,12421],{"class":1505}," \"全局常量c_g_a地址为： \"",[49,12423,2701],{"class":109},[49,12425,2913],{"class":66},[49,12427,1406],{"class":109},[49,12429,1821],{"class":66},[49,12431,1745],{"class":109},[49,12433,12434],{"class":66},"c_g_a ",[49,12436,2432],{"class":109},[49,12438,10092],{"class":66},[49,12440,12441,12443,12445,12448,12450,12452,12454,12456,12458,12461,12463],{"class":51,"line":3858},[49,12442,7781],{"class":66},[49,12444,2432],{"class":109},[49,12446,12447],{"class":1505}," \"全局常量c_g_b地址为： \"",[49,12449,2701],{"class":109},[49,12451,2913],{"class":66},[49,12453,1406],{"class":109},[49,12455,1821],{"class":66},[49,12457,1745],{"class":109},[49,12459,12460],{"class":66},"c_g_b ",[49,12462,2432],{"class":109},[49,12464,10092],{"class":66},[49,12466,12467],{"class":51,"line":3864},[49,12468,3654],{"emptyLinePlaceholder":1330},[49,12470,12471,12474,12476,12479,12481,12483],{"class":51,"line":3870},[49,12472,12473],{"class":109},"    const",[49,12475,3636],{"class":109},[49,12477,12478],{"class":66}," c_l_a ",[49,12480,1448],{"class":109},[49,12482,3292],{"class":73},[49,12484,83],{"class":66},[49,12486,12487,12489,12491,12494,12496,12498],{"class":51,"line":3875},[49,12488,12473],{"class":109},[49,12490,3636],{"class":109},[49,12492,12493],{"class":66}," c_l_b ",[49,12495,1448],{"class":109},[49,12497,3292],{"class":73},[49,12499,83],{"class":66},[49,12501,12502,12504,12506,12509,12511,12513,12515,12517,12519,12522,12524],{"class":51,"line":9200},[49,12503,7781],{"class":66},[49,12505,2432],{"class":109},[49,12507,12508],{"class":1505}," \"局部常量c_l_a地址为： \"",[49,12510,2701],{"class":109},[49,12512,2913],{"class":66},[49,12514,1406],{"class":109},[49,12516,1821],{"class":66},[49,12518,1745],{"class":109},[49,12520,12521],{"class":66},"c_l_a ",[49,12523,2432],{"class":109},[49,12525,10092],{"class":66},[49,12527,12528,12530,12532,12535,12537,12539,12541,12543,12545,12548,12550],{"class":51,"line":9224},[49,12529,7781],{"class":66},[49,12531,2432],{"class":109},[49,12533,12534],{"class":1505}," \"局部常量c_l_b地址为： \"",[49,12536,2701],{"class":109},[49,12538,2913],{"class":66},[49,12540,1406],{"class":109},[49,12542,1821],{"class":66},[49,12544,1745],{"class":109},[49,12546,12547],{"class":66},"c_l_b ",[49,12549,2432],{"class":109},[49,12551,10092],{"class":66},[49,12553,12554],{"class":51,"line":9229},[49,12555,3654],{"emptyLinePlaceholder":1330},[49,12557,12558,12560,12562,12564],{"class":51,"line":9235},[49,12559,3557],{"class":62},[49,12561,1403],{"class":66},[49,12563,3562],{"class":1505},[49,12565,3973],{"class":66},[49,12567,12568],{"class":51,"line":9262},[49,12569,3654],{"emptyLinePlaceholder":1330},[49,12571,12572,12574,12576],{"class":51,"line":9267},[49,12573,5344],{"class":109},[49,12575,5347],{"class":73},[49,12577,83],{"class":66},[49,12579,12580],{"class":51,"line":9273},[49,12581,137],{"class":66},[19,12583,12584],{},"总结：",[23,12586,12587,12590,12593,12596],{},[26,12588,12589],{},"c++中程序运行前分为全局区和代码区",[26,12591,12592],{},"代码区特点是共享和只读",[26,12594,12595],{},"全局区中存放全局变量、静态变量、常量",[26,12597,12598],{},"常量区中存放const修饰的全局常量和字符串常量",[183,12600,12602],{"id":12601},"_512程序运行后","5.1.2程序运行后",[591,12604,12605],{},[26,12606,12607],{},"栈区：",[23,12609,12610,12617],{},[26,12611,12612,12613,12616],{},"由编译器自动分配释放, 存放",[485,12614,12615],{},"函数的参数值,局部变量","等",[26,12618,12619,12620,12623],{},"注意事项：",[485,12621,12622],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[39,12625,12627],{"className":1391,"code":12626,"language":1393,"meta":44,"style":44},"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",[46,12628,12629,12640,12644,12659,12671,12675,12679,12687,12692,12707,12725,12742,12752,12760],{"__ignoreMap":44},[49,12630,12631,12633,12635,12638],{"class":51,"line":52},[49,12632,1406],{"class":109},[49,12634,7770],{"class":109},[49,12636,12637],{"class":62}," func",[49,12639,3230],{"class":66},[49,12641,12642],{"class":51,"line":59},[49,12643,2802],{"class":66},[49,12645,12646,12648,12650,12652,12654,12656],{"class":51,"line":70},[49,12647,3239],{"class":109},[49,12649,12121],{"class":66},[49,12651,1448],{"class":109},[49,12653,3292],{"class":73},[49,12655,1457],{"class":66},[49,12657,12658],{"class":55}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[49,12660,12661,12663,12665,12668],{"class":51,"line":86},[49,12662,5344],{"class":109},[49,12664,11836],{"class":109},[49,12666,12667],{"class":66},"a;",[49,12669,12670],{"class":55}," \u002F\u002F放回局部变量的地址\n",[49,12672,12673],{"class":51,"line":98},[49,12674,137],{"class":66},[49,12676,12677],{"class":51,"line":121},[49,12678,3654],{"emptyLinePlaceholder":1330},[49,12680,12681,12683,12685],{"class":51,"line":134},[49,12682,1406],{"class":109},[49,12684,3227],{"class":62},[49,12686,12105],{"class":66},[49,12688,12689],{"class":51,"line":1085},[49,12690,12691],{"class":55},"    \u002F\u002F接受func的返回值\n",[49,12693,12694,12696,12698,12701,12703,12705],{"class":51,"line":2574},[49,12695,3239],{"class":109},[49,12697,7770],{"class":109},[49,12699,12700],{"class":66},"p ",[49,12702,1448],{"class":109},[49,12704,12637],{"class":62},[49,12706,6888],{"class":66},[49,12708,12709,12711,12713,12715,12717,12719,12722],{"class":51,"line":2586},[49,12710,7781],{"class":66},[49,12712,2432],{"class":109},[49,12714,7770],{"class":109},[49,12716,12700],{"class":66},[49,12718,2432],{"class":109},[49,12720,12721],{"class":66}," endl;",[49,12723,12724],{"class":55}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[49,12726,12727,12729,12731,12733,12735,12737,12739],{"class":51,"line":2867},[49,12728,7781],{"class":66},[49,12730,2432],{"class":109},[49,12732,7770],{"class":109},[49,12734,12700],{"class":66},[49,12736,2432],{"class":109},[49,12738,12721],{"class":66},[49,12740,12741],{"class":55}," \u002F\u002F第二次这个数据不再保留\n",[49,12743,12744,12746,12748,12750],{"class":51,"line":2872},[49,12745,3557],{"class":62},[49,12747,1403],{"class":66},[49,12749,3562],{"class":1505},[49,12751,3973],{"class":66},[49,12753,12754,12756,12758],{"class":51,"line":2878},[49,12755,5344],{"class":109},[49,12757,5347],{"class":73},[49,12759,83],{"class":66},[49,12761,12762],{"class":51,"line":2883},[49,12763,137],{"class":66},[19,12765,12766],{},"输出结果：",[19,12768,12769],{},[174,12770],{"alt":12771,"src":12772},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,12774,12775],{},"总结：不要返回局部变量的地址",[591,12777,12778],{"start":59},[26,12779,12780],{},"堆区",[23,12782,12783,12786],{},[26,12784,12785],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[26,12787,12788],{},"在c++中主要利用new在堆区开辟内存",[39,12790,12792],{"className":1391,"code":12791,"language":1393,"meta":44,"style":44},"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",[46,12793,12794,12809,12813,12818,12839,12846,12850,12858,12862,12867,12881,12893],{"__ignoreMap":44},[49,12795,12796,12798,12801,12804,12806],{"class":51,"line":52},[49,12797,1406],{"class":109},[49,12799,12800],{"class":109},"  *",[49,12802,12803],{"class":62},"func",[49,12805,3681],{"class":66},[49,12807,12808],{"class":55},"  \u002F\u002F函数返回指针\n",[49,12810,12811],{"class":51,"line":59},[49,12812,2802],{"class":66},[49,12814,12815],{"class":51,"line":70},[49,12816,12817],{"class":55},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[49,12819,12820,12822,12824,12826,12828,12831,12833,12835,12837],{"class":51,"line":86},[49,12821,5401],{"class":109},[49,12823,7770],{"class":109},[49,12825,19],{"class":66},[49,12827,1448],{"class":109},[49,12829,12830],{"class":109}," new",[49,12832,3636],{"class":109},[49,12834,1403],{"class":66},[49,12836,106],{"class":73},[49,12838,3973],{"class":66},[49,12840,12841,12843],{"class":51,"line":98},[49,12842,5635],{"class":109},[49,12844,12845],{"class":66}," p;\n",[49,12847,12848],{"class":51,"line":121},[49,12849,137],{"class":66},[49,12851,12852,12854,12856],{"class":51,"line":134},[49,12853,1406],{"class":109},[49,12855,3227],{"class":62},[49,12857,3230],{"class":66},[49,12859,12860],{"class":51,"line":1085},[49,12861,2802],{"class":66},[49,12863,12864],{"class":51,"line":2574},[49,12865,12866],{"class":55},"    \u002F\u002F在堆区开辟数据\n",[49,12868,12869,12871,12873,12875,12877,12879],{"class":51,"line":2586},[49,12870,3239],{"class":109},[49,12872,7770],{"class":109},[49,12874,19],{"class":66},[49,12876,1448],{"class":109},[49,12878,12803],{"class":62},[49,12880,6888],{"class":66},[49,12882,12883,12885,12887,12889,12891],{"class":51,"line":2867},[49,12884,2807],{"class":66},[49,12886,7671],{"class":109},[49,12888,19],{"class":66},[49,12890,2432],{"class":109},[49,12892,2454],{"class":66},[49,12894,12895],{"class":51,"line":2872},[49,12896,137],{"class":66},[19,12898,12899],{},"图片展示：",[19,12901,12902],{},[174,12903],{"alt":12771,"src":12904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,12906,12907],{},"堆区内存由程序员管生死！！！",[591,12909,12910],{"start":70},[26,12911,12912],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,12914,12915],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,12917,12918,12919],{},"​语法：",[46,12920,12921],{}," new 数据类型",[19,12923,12924],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[39,12926,12928],{"className":1391,"code":12927,"language":1393,"meta":44,"style":44},"\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",[46,12929,12930,12935,12945,12949,12954,12959,12981,12985,12993,12997,13011,13023,13035,13047,13052,13057,13068,13072,13077,13085,13089,13094,13116,13142,13146,13164,13168,13194,13198,13210,13214,13219,13224,13232,13236,13240,13248,13252,13258,13264],{"__ignoreMap":44},[49,12931,12932],{"class":51,"line":52},[49,12933,12934],{"class":55},"\u002F\u002F1.new的基本语法\n",[49,12936,12937,12939,12941,12943],{"class":51,"line":59},[49,12938,1406],{"class":109},[49,12940,7770],{"class":109},[49,12942,12803],{"class":62},[49,12944,3230],{"class":66},[49,12946,12947],{"class":51,"line":70},[49,12948,2802],{"class":66},[49,12950,12951],{"class":51,"line":86},[49,12952,12953],{"class":55},"    \u002F\u002F在堆区创建整型数据\n",[49,12955,12956],{"class":51,"line":98},[49,12957,12958],{"class":55},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[49,12960,12961,12963,12965,12967,12970,12972,12974,12976,12978],{"class":51,"line":121},[49,12962,3239],{"class":109},[49,12964,7770],{"class":109},[49,12966,19],{"class":66},[49,12968,12969],{"class":109},"=new",[49,12971,3636],{"class":109},[49,12973,1403],{"class":66},[49,12975,106],{"class":73},[49,12977,7218],{"class":66},[49,12979,12980],{"class":55},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[49,12982,12983],{"class":51,"line":134},[49,12984,137],{"class":66},[49,12986,12987,12989,12991],{"class":51,"line":1085},[49,12988,6616],{"class":109},[49,12990,6840],{"class":62},[49,12992,3230],{"class":66},[49,12994,12995],{"class":51,"line":2574},[49,12996,2802],{"class":66},[49,12998,12999,13001,13003,13005,13007,13009],{"class":51,"line":2586},[49,13000,3239],{"class":109},[49,13002,7770],{"class":109},[49,13004,19],{"class":66},[49,13006,1448],{"class":109},[49,13008,12803],{"class":62},[49,13010,6888],{"class":66},[49,13012,13013,13015,13017,13019,13021],{"class":51,"line":2867},[49,13014,2807],{"class":66},[49,13016,7671],{"class":109},[49,13018,19],{"class":66},[49,13020,2432],{"class":109},[49,13022,2454],{"class":66},[49,13024,13025,13027,13029,13031,13033],{"class":51,"line":2872},[49,13026,2807],{"class":66},[49,13028,7671],{"class":109},[49,13030,19],{"class":66},[49,13032,2432],{"class":109},[49,13034,2454],{"class":66},[49,13036,13037,13039,13041,13043,13045],{"class":51,"line":2878},[49,13038,2807],{"class":66},[49,13040,7671],{"class":109},[49,13042,19],{"class":66},[49,13044,2432],{"class":109},[49,13046,2454],{"class":66},[49,13048,13049],{"class":51,"line":2883},[49,13050,13051],{"class":55},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[49,13053,13054],{"class":51,"line":2897},[49,13055,13056],{"class":55},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[49,13058,13059,13062,13065],{"class":51,"line":2902},[49,13060,13061],{"class":109},"    delete",[49,13063,13064],{"class":66}," p;",[49,13066,13067],{"class":55},"\u002F\u002F删除这块地址\n",[49,13069,13070],{"class":51,"line":2908},[49,13071,137],{"class":66},[49,13073,13074],{"class":51,"line":2929},[49,13075,13076],{"class":55},"\u002F\u002F2.在堆区利用new开辟数组\n",[49,13078,13079,13081,13083],{"class":51,"line":2934},[49,13080,6616],{"class":109},[49,13082,6909],{"class":62},[49,13084,3230],{"class":66},[49,13086,13087],{"class":51,"line":2948},[49,13088,2802],{"class":66},[49,13090,13091],{"class":51,"line":2953},[49,13092,13093],{"class":55},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[49,13095,13096,13098,13100,13102,13104,13106,13108,13110,13113],{"class":51,"line":2982},[49,13097,3239],{"class":109},[49,13099,7770],{"class":109},[49,13101,5134],{"class":66},[49,13103,12969],{"class":109},[49,13105,3636],{"class":109},[49,13107,2280],{"class":66},[49,13109,106],{"class":73},[49,13111,13112],{"class":66},"];",[49,13114,13115],{"class":55},"\u002F\u002F10代表数组有10个元素\n",[49,13117,13118,13120,13122,13124,13126,13128,13130,13132,13134,13136,13138,13140],{"class":51,"line":2987},[49,13119,4455],{"class":109},[49,13121,2913],{"class":66},[49,13123,1406],{"class":109},[49,13125,4286],{"class":66},[49,13127,1448],{"class":109},[49,13129,80],{"class":73},[49,13131,4293],{"class":66},[49,13133,2300],{"class":109},[49,13135,106],{"class":73},[49,13137,4293],{"class":66},[49,13139,3546],{"class":109},[49,13141,1409],{"class":66},[49,13143,13144],{"class":51,"line":3004},[49,13145,3284],{"class":66},[49,13147,13148,13151,13153,13155,13157,13159,13161],{"class":51,"line":3009},[49,13149,13150],{"class":66},"        arr[i]",[49,13152,1448],{"class":109},[49,13154,1833],{"class":66},[49,13156,1872],{"class":109},[49,13158,1703],{"class":73},[49,13160,1457],{"class":66},[49,13162,13163],{"class":55},"\u002F\u002F给10个元素赋值100～109\n",[49,13165,13166],{"class":51,"line":3014},[49,13167,3441],{"class":66},[49,13169,13170,13172,13174,13176,13178,13180,13182,13184,13186,13188,13190,13192],{"class":51,"line":3019},[49,13171,4455],{"class":109},[49,13173,2913],{"class":66},[49,13175,1406],{"class":109},[49,13177,4286],{"class":66},[49,13179,1448],{"class":109},[49,13181,80],{"class":73},[49,13183,4293],{"class":66},[49,13185,2300],{"class":109},[49,13187,106],{"class":73},[49,13189,4293],{"class":66},[49,13191,3546],{"class":109},[49,13193,1409],{"class":66},[49,13195,13196],{"class":51,"line":3033},[49,13197,3284],{"class":66},[49,13199,13200,13202,13204,13206,13208],{"class":51,"line":3038},[49,13201,4705],{"class":66},[49,13203,2432],{"class":109},[49,13205,5608],{"class":66},[49,13207,2432],{"class":109},[49,13209,2454],{"class":66},[49,13211,13212],{"class":51,"line":3831},[49,13213,3441],{"class":66},[49,13215,13216],{"class":51,"line":3845},[49,13217,13218],{"class":55},"    \u002F\u002F释放堆区数组\n",[49,13220,13221],{"class":51,"line":3853},[49,13222,13223],{"class":55},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[49,13225,13226,13229],{"class":51,"line":3858},[49,13227,13228],{"class":109},"    delete[]",[49,13230,13231],{"class":66}," arr;\n",[49,13233,13234],{"class":51,"line":3864},[49,13235,137],{"class":66},[49,13237,13238],{"class":51,"line":3870},[49,13239,3654],{"emptyLinePlaceholder":1330},[49,13241,13242,13244,13246],{"class":51,"line":3875},[49,13243,1406],{"class":109},[49,13245,3227],{"class":62},[49,13247,3230],{"class":66},[49,13249,13250],{"class":51,"line":9200},[49,13251,2802],{"class":66},[49,13253,13254,13256],{"class":51,"line":9224},[49,13255,6885],{"class":62},[49,13257,6888],{"class":66},[49,13259,13260,13262],{"class":51,"line":9229},[49,13261,6954],{"class":62},[49,13263,6888],{"class":66},[49,13265,13266],{"class":51,"line":9235},[49,13267,137],{"class":66},[1305,13269,13270],{},"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":44,"searchDepth":59,"depth":59,"links":13272},[13273],{"id":11941,"depth":59,"text":11942,"children":13274},[13275,13276],{"id":11973,"depth":70,"text":11974},{"id":12601,"depth":70,"text":12602},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11933,"description":44},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13283,"title":13284,"body":13285,"description":44,"extension":1328,"meta":14766,"navigation":1330,"path":14767,"seo":14768,"stem":14769,"__hash__":14770},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13286,"toc":14758},[13287,13290,13294,13297,13300,13469,13473,13478,13495,13500,13652,13656,13659,13662,14056,14060,14063,14068,14071,14383,14387,14393,14553,14555,14563,14567,14570,14577,14755],[10,13288,13284],{"id":13289},"_6引用",[14,13291,13293],{"id":13292},"_61引用基本用法","6.1引用基本用法",[19,13295,13296],{},"引用的本质：给变量起别名",[19,13298,13299],{},"语法：数据类型 &别名=原名",[39,13301,13303],{"className":1391,"code":13302,"language":1393,"meta":44,"style":44},"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",[46,13304,13305,13313,13317,13329,13341,13345,13364,13383,13387,13398,13402,13421,13439,13443,13453,13457,13465],{"__ignoreMap":44},[49,13306,13307,13309,13311],{"class":51,"line":52},[49,13308,1406],{"class":109},[49,13310,3227],{"class":62},[49,13312,12105],{"class":66},[49,13314,13315],{"class":51,"line":59},[49,13316,3654],{"emptyLinePlaceholder":1330},[49,13318,13319,13321,13323,13325,13327],{"class":51,"line":70},[49,13320,3239],{"class":109},[49,13322,12121],{"class":66},[49,13324,1448],{"class":109},[49,13326,3292],{"class":73},[49,13328,83],{"class":66},[49,13330,13331,13333,13335,13337,13339],{"class":51,"line":86},[49,13332,3239],{"class":109},[49,13334,11836],{"class":109},[49,13336,12197],{"class":66},[49,13338,1448],{"class":109},[49,13340,2689],{"class":66},[49,13342,13343],{"class":51,"line":98},[49,13344,3654],{"emptyLinePlaceholder":1330},[49,13346,13347,13349,13351,13354,13356,13358,13360,13362],{"class":51,"line":121},[49,13348,7781],{"class":66},[49,13350,2432],{"class":109},[49,13352,13353],{"class":1505}," \"a = \"",[49,13355,2701],{"class":109},[49,13357,12121],{"class":66},[49,13359,2432],{"class":109},[49,13361,12721],{"class":66},[49,13363,8520],{"class":55},[49,13365,13366,13368,13370,13373,13375,13377,13379,13381],{"class":51,"line":134},[49,13367,7781],{"class":66},[49,13369,2432],{"class":109},[49,13371,13372],{"class":1505}," \"b = \"",[49,13374,2701],{"class":109},[49,13376,12134],{"class":66},[49,13378,2432],{"class":109},[49,13380,12721],{"class":66},[49,13382,8520],{"class":55},[49,13384,13385],{"class":51,"line":1085},[49,13386,3654],{"emptyLinePlaceholder":1330},[49,13388,13389,13392,13394,13396],{"class":51,"line":2574},[49,13390,13391],{"class":66},"    b ",[49,13393,1448],{"class":109},[49,13395,7006],{"class":73},[49,13397,83],{"class":66},[49,13399,13400],{"class":51,"line":2586},[49,13401,3654],{"emptyLinePlaceholder":1330},[49,13403,13404,13406,13408,13410,13412,13414,13416,13418],{"class":51,"line":2867},[49,13405,7781],{"class":66},[49,13407,2432],{"class":109},[49,13409,13353],{"class":1505},[49,13411,2701],{"class":109},[49,13413,12121],{"class":66},[49,13415,2432],{"class":109},[49,13417,12721],{"class":66},[49,13419,13420],{"class":55},"\u002F\u002F100\n",[49,13422,13423,13425,13427,13429,13431,13433,13435,13437],{"class":51,"line":2872},[49,13424,7781],{"class":66},[49,13426,2432],{"class":109},[49,13428,13372],{"class":1505},[49,13430,2701],{"class":109},[49,13432,12134],{"class":66},[49,13434,2432],{"class":109},[49,13436,12721],{"class":66},[49,13438,13420],{"class":55},[49,13440,13441],{"class":51,"line":2878},[49,13442,3654],{"emptyLinePlaceholder":1330},[49,13444,13445,13447,13449,13451],{"class":51,"line":2883},[49,13446,3557],{"class":62},[49,13448,1403],{"class":66},[49,13450,3562],{"class":1505},[49,13452,3973],{"class":66},[49,13454,13455],{"class":51,"line":2897},[49,13456,3654],{"emptyLinePlaceholder":1330},[49,13458,13459,13461,13463],{"class":51,"line":2902},[49,13460,5344],{"class":109},[49,13462,5347],{"class":73},[49,13464,83],{"class":66},[49,13466,13467],{"class":51,"line":2908},[49,13468,137],{"class":66},[14,13470,13472],{"id":13471},"_62引用的注意事项","6.2引用的注意事项",[591,13474,13475],{},[26,13476,13477],{},"引用必须要初始化",[39,13479,13481],{"className":1391,"code":13480,"language":1393,"meta":44,"style":44},"int &b;\u002F\u002F非常错误！\n",[46,13482,13483],{"__ignoreMap":44},[49,13484,13485,13487,13489,13492],{"class":51,"line":52},[49,13486,1406],{"class":109},[49,13488,11836],{"class":109},[49,13490,13491],{"class":66},"b;",[49,13493,13494],{"class":55},"\u002F\u002F非常错误！\n",[591,13496,13497],{"start":59},[26,13498,13499],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[39,13501,13503],{"className":1391,"code":13502,"language":1393,"meta":44,"style":44},"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",[46,13504,13505,13513,13525,13537,13545,13561,13574,13592,13610,13630,13640,13648],{"__ignoreMap":44},[49,13506,13507,13509,13511],{"class":51,"line":52},[49,13508,1406],{"class":109},[49,13510,3227],{"class":62},[49,13512,12105],{"class":66},[49,13514,13515,13517,13519,13521,13523],{"class":51,"line":59},[49,13516,3239],{"class":109},[49,13518,12121],{"class":66},[49,13520,1448],{"class":109},[49,13522,3292],{"class":73},[49,13524,83],{"class":66},[49,13526,13527,13529,13531,13533,13535],{"class":51,"line":70},[49,13528,3239],{"class":109},[49,13530,12134],{"class":66},[49,13532,1448],{"class":109},[49,13534,10202],{"class":73},[49,13536,83],{"class":66},[49,13538,13539,13542],{"class":51,"line":86},[49,13540,13541],{"class":55},"    \u002F\u002Fint &c;",[49,13543,13544],{"class":55}," \u002F\u002F错误，引用必须初始化\n",[49,13546,13547,13549,13551,13553,13555,13558],{"class":51,"line":98},[49,13548,3239],{"class":109},[49,13550,11836],{"class":109},[49,13552,4200],{"class":66},[49,13554,1448],{"class":109},[49,13556,13557],{"class":66}," a;",[49,13559,13560],{"class":55}," \u002F\u002F一旦初始化后，就不可以更改\n",[49,13562,13563,13566,13568,13571],{"class":51,"line":121},[49,13564,13565],{"class":66},"    c ",[49,13567,1448],{"class":109},[49,13569,13570],{"class":66}," b;",[49,13572,13573],{"class":55}," \u002F\u002F这是赋值操作，不是更改引用\n",[49,13575,13576,13578,13580,13582,13584,13586,13588,13590],{"class":51,"line":134},[49,13577,7781],{"class":66},[49,13579,2432],{"class":109},[49,13581,13353],{"class":1505},[49,13583,2701],{"class":109},[49,13585,12121],{"class":66},[49,13587,2432],{"class":109},[49,13589,12721],{"class":66},[49,13591,8505],{"class":55},[49,13593,13594,13596,13598,13600,13602,13604,13606,13608],{"class":51,"line":1085},[49,13595,7781],{"class":66},[49,13597,2432],{"class":109},[49,13599,13372],{"class":1505},[49,13601,2701],{"class":109},[49,13603,12134],{"class":66},[49,13605,2432],{"class":109},[49,13607,12721],{"class":66},[49,13609,8505],{"class":55},[49,13611,13612,13614,13616,13619,13621,13624,13626,13628],{"class":51,"line":2574},[49,13613,7781],{"class":66},[49,13615,2432],{"class":109},[49,13617,13618],{"class":1505}," \"c = \"",[49,13620,2701],{"class":109},[49,13622,13623],{"class":66}," c ",[49,13625,2432],{"class":109},[49,13627,12721],{"class":66},[49,13629,8505],{"class":55},[49,13631,13632,13634,13636,13638],{"class":51,"line":2586},[49,13633,3557],{"class":62},[49,13635,1403],{"class":66},[49,13637,3562],{"class":1505},[49,13639,3973],{"class":66},[49,13641,13642,13644,13646],{"class":51,"line":2867},[49,13643,5344],{"class":109},[49,13645,5347],{"class":73},[49,13647,83],{"class":66},[49,13649,13650],{"class":51,"line":2872},[49,13651,137],{"class":66},[14,13653,13655],{"id":13654},"_63引用做函数参数","6.3引用做函数参数",[19,13657,13658],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,13660,13661],{},"优点：可以简化指针修改实参",[39,13663,13665],{"className":1391,"code":13664,"language":1393,"meta":44,"style":44},"\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",[46,13666,13667,13672,13695,13706,13716,13725,13729,13733,13738,13760,13772,13784,13794,13798,13802,13807,13829,13839,13847,13855,13859,13863,13871,13875,13887,13899,13903,13914,13940,13944,13964,13988,13992,14002,14026,14030,14040,14044,14052],{"__ignoreMap":44},[49,13668,13669],{"class":51,"line":52},[49,13670,13671],{"class":55},"\u002F\u002F1. 值传递\n",[49,13673,13674,13676,13679,13681,13683,13685,13688,13690,13692],{"class":51,"line":59},[49,13675,6616],{"class":109},[49,13677,13678],{"class":62}," mySwap01",[49,13680,1403],{"class":66},[49,13682,1406],{"class":109},[49,13684,2655],{"class":6468},[49,13686,13687],{"class":66},", ",[49,13689,1406],{"class":109},[49,13691,4087],{"class":6468},[49,13693,13694],{"class":66},") {\n",[49,13696,13697,13699,13702,13704],{"class":51,"line":70},[49,13698,3239],{"class":109},[49,13700,13701],{"class":66}," temp ",[49,13703,1448],{"class":109},[49,13705,2689],{"class":66},[49,13707,13708,13711,13713],{"class":51,"line":86},[49,13709,13710],{"class":66},"    a ",[49,13712,1448],{"class":109},[49,13714,13715],{"class":66}," b;\n",[49,13717,13718,13720,13722],{"class":51,"line":98},[49,13719,13391],{"class":66},[49,13721,1448],{"class":109},[49,13723,13724],{"class":66}," temp;\n",[49,13726,13727],{"class":51,"line":121},[49,13728,137],{"class":66},[49,13730,13731],{"class":51,"line":134},[49,13732,3654],{"emptyLinePlaceholder":1330},[49,13734,13735],{"class":51,"line":1085},[49,13736,13737],{"class":55},"\u002F\u002F2. 地址传递\n",[49,13739,13740,13742,13745,13747,13750,13752,13754,13756,13758],{"class":51,"line":2574},[49,13741,6616],{"class":109},[49,13743,13744],{"class":62}," mySwap02",[49,13746,1403],{"class":66},[49,13748,13749],{"class":109},"int*",[49,13751,2655],{"class":6468},[49,13753,13687],{"class":66},[49,13755,13749],{"class":109},[49,13757,4087],{"class":6468},[49,13759,13694],{"class":66},[49,13761,13762,13764,13766,13768,13770],{"class":51,"line":2586},[49,13763,3239],{"class":109},[49,13765,13701],{"class":66},[49,13767,1448],{"class":109},[49,13769,7770],{"class":109},[49,13771,7449],{"class":66},[49,13773,13774,13776,13778,13780,13782],{"class":51,"line":2867},[49,13775,7655],{"class":109},[49,13777,12171],{"class":66},[49,13779,1448],{"class":109},[49,13781,7770],{"class":109},[49,13783,7321],{"class":66},[49,13785,13786,13788,13790,13792],{"class":51,"line":2872},[49,13787,7655],{"class":109},[49,13789,12197],{"class":66},[49,13791,1448],{"class":109},[49,13793,13724],{"class":66},[49,13795,13796],{"class":51,"line":2878},[49,13797,137],{"class":66},[49,13799,13800],{"class":51,"line":2883},[49,13801,3654],{"emptyLinePlaceholder":1330},[49,13803,13804],{"class":51,"line":2897},[49,13805,13806],{"class":55},"\u002F\u002F3. 引用传递\n",[49,13808,13809,13811,13814,13816,13819,13821,13823,13825,13827],{"class":51,"line":2902},[49,13810,6616],{"class":109},[49,13812,13813],{"class":62}," mySwap03",[49,13815,1403],{"class":66},[49,13817,13818],{"class":109},"int&",[49,13820,2655],{"class":6468},[49,13822,13687],{"class":66},[49,13824,13818],{"class":109},[49,13826,4087],{"class":6468},[49,13828,13694],{"class":66},[49,13830,13831,13833,13835,13837],{"class":51,"line":2908},[49,13832,3239],{"class":109},[49,13834,13701],{"class":66},[49,13836,1448],{"class":109},[49,13838,2689],{"class":66},[49,13840,13841,13843,13845],{"class":51,"line":2929},[49,13842,13710],{"class":66},[49,13844,1448],{"class":109},[49,13846,13715],{"class":66},[49,13848,13849,13851,13853],{"class":51,"line":2934},[49,13850,13391],{"class":66},[49,13852,1448],{"class":109},[49,13854,13724],{"class":66},[49,13856,13857],{"class":51,"line":2948},[49,13858,137],{"class":66},[49,13860,13861],{"class":51,"line":2953},[49,13862,3654],{"emptyLinePlaceholder":1330},[49,13864,13865,13867,13869],{"class":51,"line":2982},[49,13866,1406],{"class":109},[49,13868,3227],{"class":62},[49,13870,12105],{"class":66},[49,13872,13873],{"class":51,"line":2987},[49,13874,3654],{"emptyLinePlaceholder":1330},[49,13876,13877,13879,13881,13883,13885],{"class":51,"line":3004},[49,13878,3239],{"class":109},[49,13880,12121],{"class":66},[49,13882,1448],{"class":109},[49,13884,3292],{"class":73},[49,13886,83],{"class":66},[49,13888,13889,13891,13893,13895,13897],{"class":51,"line":3009},[49,13890,3239],{"class":109},[49,13892,12134],{"class":66},[49,13894,1448],{"class":109},[49,13896,10202],{"class":73},[49,13898,83],{"class":66},[49,13900,13901],{"class":51,"line":3014},[49,13902,3654],{"emptyLinePlaceholder":1330},[49,13904,13905,13908,13911],{"class":51,"line":3019},[49,13906,13907],{"class":62},"    mySwap01",[49,13909,13910],{"class":66},"(a, b);",[49,13912,13913],{"class":55},"\u002F\u002F值传递，形参不会修饰实参\n",[49,13915,13916,13918,13920,13923,13925,13927,13929,13932,13934,13936,13938],{"class":51,"line":3033},[49,13917,7781],{"class":66},[49,13919,2432],{"class":109},[49,13921,13922],{"class":1505}," \"a:\"",[49,13924,2701],{"class":109},[49,13926,12121],{"class":66},[49,13928,2432],{"class":109},[49,13930,13931],{"class":1505}," \" b:\"",[49,13933,2701],{"class":109},[49,13935,12134],{"class":66},[49,13937,2432],{"class":109},[49,13939,10092],{"class":66},[49,13941,13942],{"class":51,"line":3038},[49,13943,3654],{"emptyLinePlaceholder":1330},[49,13945,13946,13949,13951,13953,13956,13958,13961],{"class":51,"line":3831},[49,13947,13948],{"class":62},"    mySwap02",[49,13950,1403],{"class":66},[49,13952,1745],{"class":109},[49,13954,13955],{"class":66},"a, ",[49,13957,1745],{"class":109},[49,13959,13960],{"class":66},"b);",[49,13962,13963],{"class":55},"\u002F\u002F地址传递，形参会修饰实参\n",[49,13965,13966,13968,13970,13972,13974,13976,13978,13980,13982,13984,13986],{"class":51,"line":3845},[49,13967,7781],{"class":66},[49,13969,2432],{"class":109},[49,13971,13922],{"class":1505},[49,13973,2701],{"class":109},[49,13975,12121],{"class":66},[49,13977,2432],{"class":109},[49,13979,13931],{"class":1505},[49,13981,2701],{"class":109},[49,13983,12134],{"class":66},[49,13985,2432],{"class":109},[49,13987,10092],{"class":66},[49,13989,13990],{"class":51,"line":3853},[49,13991,3654],{"emptyLinePlaceholder":1330},[49,13993,13994,13997,13999],{"class":51,"line":3858},[49,13995,13996],{"class":62},"    mySwap03",[49,13998,13910],{"class":66},[49,14000,14001],{"class":55},"\u002F\u002F引用传递，形参会修饰实参\n",[49,14003,14004,14006,14008,14010,14012,14014,14016,14018,14020,14022,14024],{"class":51,"line":3864},[49,14005,7781],{"class":66},[49,14007,2432],{"class":109},[49,14009,13922],{"class":1505},[49,14011,2701],{"class":109},[49,14013,12121],{"class":66},[49,14015,2432],{"class":109},[49,14017,13931],{"class":1505},[49,14019,2701],{"class":109},[49,14021,12134],{"class":66},[49,14023,2432],{"class":109},[49,14025,10092],{"class":66},[49,14027,14028],{"class":51,"line":3870},[49,14029,3654],{"emptyLinePlaceholder":1330},[49,14031,14032,14034,14036,14038],{"class":51,"line":3875},[49,14033,3557],{"class":62},[49,14035,1403],{"class":66},[49,14037,3562],{"class":1505},[49,14039,3973],{"class":66},[49,14041,14042],{"class":51,"line":9200},[49,14043,3654],{"emptyLinePlaceholder":1330},[49,14045,14046,14048,14050],{"class":51,"line":9224},[49,14047,5344],{"class":109},[49,14049,5347],{"class":73},[49,14051,83],{"class":66},[49,14053,14054],{"class":51,"line":9229},[49,14055,137],{"class":66},[14,14057,14059],{"id":14058},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14061,14062],{},"作用：引用是可以作为函数的返回值存在的",[19,14064,10277,14065],{},[485,14066,14067],{},"不要返回局部变量引用",[19,14069,14070],{},"用法：函数调用作为左值",[39,14072,14074],{"className":11193,"code":14073,"language":11195,"meta":44,"style":44},"\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",[46,14075,14076,14081,14089,14104,14110,14114,14118,14123,14131,14148,14154,14158,14162,14170,14174,14179,14193,14213,14232,14236,14241,14254,14274,14292,14296,14312,14316,14335,14353,14357,14367,14371,14379],{"__ignoreMap":44},[49,14077,14078],{"class":51,"line":52},[49,14079,14080],{"class":55},"\u002F\u002F返回局部变量引用\n",[49,14082,14083,14085,14087],{"class":51,"line":59},[49,14084,13818],{"class":109},[49,14086,6840],{"class":62},[49,14088,12105],{"class":66},[49,14090,14091,14093,14095,14097,14099,14101],{"class":51,"line":70},[49,14092,3239],{"class":109},[49,14094,12121],{"class":66},[49,14096,1448],{"class":109},[49,14098,3292],{"class":73},[49,14100,1457],{"class":66},[49,14102,14103],{"class":55}," \u002F\u002F局部变量\n",[49,14105,14106,14108],{"class":51,"line":86},[49,14107,5344],{"class":109},[49,14109,2689],{"class":66},[49,14111,14112],{"class":51,"line":98},[49,14113,137],{"class":66},[49,14115,14116],{"class":51,"line":121},[49,14117,3654],{"emptyLinePlaceholder":1330},[49,14119,14120],{"class":51,"line":134},[49,14121,14122],{"class":55},"\u002F\u002F返回静态变量引用\n",[49,14124,14125,14127,14129],{"class":51,"line":1085},[49,14126,13818],{"class":109},[49,14128,6909],{"class":62},[49,14130,12105],{"class":66},[49,14132,14133,14135,14137,14139,14141,14143,14145],{"class":51,"line":2574},[49,14134,12272],{"class":109},[49,14136,3636],{"class":109},[49,14138,12121],{"class":66},[49,14140,1448],{"class":109},[49,14142,10202],{"class":73},[49,14144,1457],{"class":66},[49,14146,14147],{"class":55},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[49,14149,14150,14152],{"class":51,"line":2586},[49,14151,5344],{"class":109},[49,14153,2689],{"class":66},[49,14155,14156],{"class":51,"line":2867},[49,14157,137],{"class":66},[49,14159,14160],{"class":51,"line":2872},[49,14161,3654],{"emptyLinePlaceholder":1330},[49,14163,14164,14166,14168],{"class":51,"line":2878},[49,14165,1406],{"class":109},[49,14167,3227],{"class":62},[49,14169,12105],{"class":66},[49,14171,14172],{"class":51,"line":2883},[49,14173,3654],{"emptyLinePlaceholder":1330},[49,14175,14176],{"class":51,"line":2897},[49,14177,14178],{"class":55},"    \u002F\u002F不能返回局部变量的引用\n",[49,14180,14181,14184,14187,14189,14191],{"class":51,"line":2902},[49,14182,14183],{"class":109},"    int&",[49,14185,14186],{"class":66}," ref ",[49,14188,1448],{"class":109},[49,14190,6840],{"class":62},[49,14192,6888],{"class":66},[49,14194,14195,14197,14199,14202,14204,14206,14208,14210],{"class":51,"line":2908},[49,14196,7781],{"class":66},[49,14198,2432],{"class":109},[49,14200,14201],{"class":1505}," \"ref = \"",[49,14203,2701],{"class":109},[49,14205,14186],{"class":66},[49,14207,2432],{"class":109},[49,14209,12721],{"class":66},[49,14211,14212],{"class":55},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[49,14214,14215,14217,14219,14221,14223,14225,14227,14229],{"class":51,"line":2929},[49,14216,7781],{"class":66},[49,14218,2432],{"class":109},[49,14220,14201],{"class":1505},[49,14222,2701],{"class":109},[49,14224,14186],{"class":66},[49,14226,2432],{"class":109},[49,14228,12721],{"class":66},[49,14230,14231],{"class":55},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[49,14233,14234],{"class":51,"line":2934},[49,14235,3654],{"emptyLinePlaceholder":1330},[49,14237,14238],{"class":51,"line":2948},[49,14239,14240],{"class":55},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[49,14242,14243,14245,14248,14250,14252],{"class":51,"line":2953},[49,14244,14183],{"class":109},[49,14246,14247],{"class":66}," ref2 ",[49,14249,1448],{"class":109},[49,14251,6909],{"class":62},[49,14253,6888],{"class":66},[49,14255,14256,14258,14260,14263,14265,14267,14269,14271],{"class":51,"line":2982},[49,14257,7781],{"class":66},[49,14259,2432],{"class":109},[49,14261,14262],{"class":1505}," \"ref2 = \"",[49,14264,2701],{"class":109},[49,14266,14247],{"class":66},[49,14268,2432],{"class":109},[49,14270,12721],{"class":66},[49,14272,14273],{"class":55}," \u002F\u002F20\n",[49,14275,14276,14278,14280,14282,14284,14286,14288,14290],{"class":51,"line":2987},[49,14277,7781],{"class":66},[49,14279,2432],{"class":109},[49,14281,14262],{"class":1505},[49,14283,2701],{"class":109},[49,14285,14247],{"class":66},[49,14287,2432],{"class":109},[49,14289,12721],{"class":66},[49,14291,14273],{"class":55},[49,14293,14294],{"class":51,"line":3004},[49,14295,3654],{"emptyLinePlaceholder":1330},[49,14297,14298,14300,14303,14305,14307,14309],{"class":51,"line":3009},[49,14299,6954],{"class":62},[49,14301,14302],{"class":66},"() ",[49,14304,1448],{"class":109},[49,14306,4253],{"class":73},[49,14308,1457],{"class":66},[49,14310,14311],{"class":55},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[49,14313,14314],{"class":51,"line":3014},[49,14315,3654],{"emptyLinePlaceholder":1330},[49,14317,14318,14320,14322,14324,14326,14328,14330,14332],{"class":51,"line":3019},[49,14319,7781],{"class":66},[49,14321,2432],{"class":109},[49,14323,14262],{"class":1505},[49,14325,2701],{"class":109},[49,14327,14247],{"class":66},[49,14329,2432],{"class":109},[49,14331,12721],{"class":66},[49,14333,14334],{"class":55}," \u002F\u002F1000\n",[49,14336,14337,14339,14341,14343,14345,14347,14349,14351],{"class":51,"line":3033},[49,14338,7781],{"class":66},[49,14340,2432],{"class":109},[49,14342,14262],{"class":1505},[49,14344,2701],{"class":109},[49,14346,14247],{"class":66},[49,14348,2432],{"class":109},[49,14350,12721],{"class":66},[49,14352,14334],{"class":55},[49,14354,14355],{"class":51,"line":3038},[49,14356,3654],{"emptyLinePlaceholder":1330},[49,14358,14359,14361,14363,14365],{"class":51,"line":3831},[49,14360,3557],{"class":62},[49,14362,1403],{"class":66},[49,14364,3562],{"class":1505},[49,14366,3973],{"class":66},[49,14368,14369],{"class":51,"line":3845},[49,14370,3654],{"emptyLinePlaceholder":1330},[49,14372,14373,14375,14377],{"class":51,"line":3853},[49,14374,5344],{"class":109},[49,14376,5347],{"class":73},[49,14378,83],{"class":66},[49,14380,14381],{"class":51,"line":3858},[49,14382,137],{"class":66},[14,14384,14386],{"id":14385},"_65引用的本质","6.5引用的本质",[19,14388,14389,14390],{},"本质：",[485,14391,14392],{},"引用的本质在c++内部实现是一个指针常量.",[39,14394,14396],{"className":1391,"code":14395,"language":1393,"meta":44,"style":44},"\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",[46,14397,14398,14403,14419,14433,14437,14446,14458,14463,14468,14479,14492,14496,14512,14529,14533,14541,14549],{"__ignoreMap":44},[49,14399,14400],{"class":51,"line":52},[49,14401,14402],{"class":55},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[49,14404,14405,14407,14409,14411,14413,14416],{"class":51,"line":59},[49,14406,6616],{"class":109},[49,14408,12637],{"class":62},[49,14410,1403],{"class":66},[49,14412,13818],{"class":109},[49,14414,14415],{"class":6468}," ref",[49,14417,14418],{"class":66},"){\n",[49,14420,14421,14424,14426,14428,14430],{"class":51,"line":70},[49,14422,14423],{"class":66},"    ref ",[49,14425,1448],{"class":109},[49,14427,7006],{"class":73},[49,14429,1457],{"class":66},[49,14431,14432],{"class":55}," \u002F\u002F ref是引用，转换为*ref = 100\n",[49,14434,14435],{"class":51,"line":86},[49,14436,137],{"class":66},[49,14438,14439,14441,14443],{"class":51,"line":98},[49,14440,1406],{"class":109},[49,14442,3227],{"class":62},[49,14444,14445],{"class":66},"(){\n",[49,14447,14448,14450,14452,14454,14456],{"class":51,"line":121},[49,14449,3239],{"class":109},[49,14451,12121],{"class":66},[49,14453,1448],{"class":109},[49,14455,3292],{"class":73},[49,14457,83],{"class":66},[49,14459,14460],{"class":51,"line":134},[49,14461,14462],{"class":66},"    \n",[49,14464,14465],{"class":51,"line":1085},[49,14466,14467],{"class":55},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[49,14469,14470,14472,14474,14476],{"class":51,"line":2574},[49,14471,14183],{"class":109},[49,14473,14186],{"class":66},[49,14475,1448],{"class":109},[49,14477,14478],{"class":66}," a; \n",[49,14480,14481,14483,14485,14487,14489],{"class":51,"line":2586},[49,14482,14423],{"class":66},[49,14484,1448],{"class":109},[49,14486,10202],{"class":73},[49,14488,1457],{"class":66},[49,14490,14491],{"class":55}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[49,14493,14494],{"class":51,"line":2867},[49,14495,14462],{"class":66},[49,14497,14498,14500,14502,14504,14506,14508,14510],{"class":51,"line":2872},[49,14499,7781],{"class":66},[49,14501,2432],{"class":109},[49,14503,13922],{"class":1505},[49,14505,2701],{"class":109},[49,14507,12121],{"class":66},[49,14509,2432],{"class":109},[49,14511,10092],{"class":66},[49,14513,14514,14516,14518,14521,14523,14525,14527],{"class":51,"line":2878},[49,14515,7781],{"class":66},[49,14517,2432],{"class":109},[49,14519,14520],{"class":1505}," \"ref:\"",[49,14522,2701],{"class":109},[49,14524,14186],{"class":66},[49,14526,2432],{"class":109},[49,14528,10092],{"class":66},[49,14530,14531],{"class":51,"line":2883},[49,14532,14462],{"class":66},[49,14534,14535,14538],{"class":51,"line":2897},[49,14536,14537],{"class":62},"    func",[49,14539,14540],{"class":66},"(a);\n",[49,14542,14543,14545,14547],{"class":51,"line":2902},[49,14544,5344],{"class":109},[49,14546,5347],{"class":73},[49,14548,83],{"class":66},[49,14550,14551],{"class":51,"line":2908},[49,14552,137],{"class":66},[19,14554,12584],{},[591,14556,14557,14560],{},[26,14558,14559],{},"引用的本质，就是一个指针常量",[26,14561,14562],{},"引用一旦初始化，就不可以发生改变",[14,14564,14566],{"id":14565},"_66常量引用","6.6常量引用",[19,14568,14569],{},"作用：常量引用主要用来修饰形参",[19,14571,14572,14573,14576],{},"在函数形参列表中，可以加",[485,14574,14575],{},"const修饰形参","，防止形参改变实参",[39,14578,14580],{"className":1391,"code":14579,"language":1393,"meta":44,"style":44},"\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",[46,14581,14582,14587,14592,14611,14616,14629,14633,14637,14645,14649,14654,14659,14673,14677,14685,14697,14701,14706,14718,14725,14729,14739,14743,14751],{"__ignoreMap":44},[49,14583,14584],{"class":51,"line":52},[49,14585,14586],{"class":55},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[49,14588,14589],{"class":51,"line":59},[49,14590,14591],{"class":55},"\u002F\u002F加上const就不能修改实参的\n",[49,14593,14594,14596,14599,14601,14603,14606,14609],{"class":51,"line":70},[49,14595,6616],{"class":109},[49,14597,14598],{"class":62}," showValue",[49,14600,1403],{"class":66},[49,14602,8044],{"class":109},[49,14604,14605],{"class":109}," int&",[49,14607,14608],{"class":6468}," v",[49,14610,13694],{"class":66},[49,14612,14613],{"class":51,"line":86},[49,14614,14615],{"class":55},"    \u002F\u002Fv += 100;\n",[49,14617,14618,14620,14622,14625,14627],{"class":51,"line":98},[49,14619,7781],{"class":66},[49,14621,2432],{"class":109},[49,14623,14624],{"class":66}," v ",[49,14626,2432],{"class":109},[49,14628,10092],{"class":66},[49,14630,14631],{"class":51,"line":121},[49,14632,137],{"class":66},[49,14634,14635],{"class":51,"line":134},[49,14636,3654],{"emptyLinePlaceholder":1330},[49,14638,14639,14641,14643],{"class":51,"line":1085},[49,14640,1406],{"class":109},[49,14642,3227],{"class":62},[49,14644,12105],{"class":66},[49,14646,14647],{"class":51,"line":2574},[49,14648,3654],{"emptyLinePlaceholder":1330},[49,14650,14651],{"class":51,"line":2586},[49,14652,14653],{"class":55},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[49,14655,14656],{"class":51,"line":2867},[49,14657,14658],{"class":55},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[49,14660,14661,14663,14665,14667,14669,14671],{"class":51,"line":2872},[49,14662,12473],{"class":109},[49,14664,14605],{"class":109},[49,14666,14186],{"class":66},[49,14668,1448],{"class":109},[49,14670,3292],{"class":73},[49,14672,83],{"class":66},[49,14674,14675],{"class":51,"line":2878},[49,14676,3654],{"emptyLinePlaceholder":1330},[49,14678,14679,14682],{"class":51,"line":2883},[49,14680,14681],{"class":55},"    \u002F\u002Fref = 100;",[49,14683,14684],{"class":55},"  \u002F\u002F加入const后不可以修改变量\n",[49,14686,14687,14689,14691,14693,14695],{"class":51,"line":2897},[49,14688,7781],{"class":66},[49,14690,2432],{"class":109},[49,14692,14186],{"class":66},[49,14694,2432],{"class":109},[49,14696,10092],{"class":66},[49,14698,14699],{"class":51,"line":2902},[49,14700,3654],{"emptyLinePlaceholder":1330},[49,14702,14703],{"class":51,"line":2908},[49,14704,14705],{"class":55},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[49,14707,14708,14710,14712,14714,14716],{"class":51,"line":2929},[49,14709,3239],{"class":109},[49,14711,12121],{"class":66},[49,14713,1448],{"class":109},[49,14715,3292],{"class":73},[49,14717,83],{"class":66},[49,14719,14720,14723],{"class":51,"line":2934},[49,14721,14722],{"class":62},"    showValue",[49,14724,14540],{"class":66},[49,14726,14727],{"class":51,"line":2948},[49,14728,3654],{"emptyLinePlaceholder":1330},[49,14730,14731,14733,14735,14737],{"class":51,"line":2953},[49,14732,3557],{"class":62},[49,14734,1403],{"class":66},[49,14736,3562],{"class":1505},[49,14738,3973],{"class":66},[49,14740,14741],{"class":51,"line":2982},[49,14742,3654],{"emptyLinePlaceholder":1330},[49,14744,14745,14747,14749],{"class":51,"line":2987},[49,14746,5344],{"class":109},[49,14748,5347],{"class":73},[49,14750,83],{"class":66},[49,14752,14753],{"class":51,"line":3004},[49,14754,137],{"class":66},[1305,14756,14757],{},"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":44,"searchDepth":59,"depth":59,"links":14759},[14760,14761,14762,14763,14764,14765],{"id":13292,"depth":59,"text":13293},{"id":13471,"depth":59,"text":13472},{"id":13654,"depth":59,"text":13655},{"id":14058,"depth":59,"text":14059},{"id":14385,"depth":59,"text":14386},{"id":14565,"depth":59,"text":14566},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13284,"description":44},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14772,"title":14773,"body":14774,"description":44,"extension":1328,"meta":15855,"navigation":1330,"path":15856,"seo":15857,"stem":15858,"__hash__":15859},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14775,"toc":15847},[14776,14779,14783,14786,14791,15023,15025,15036,15040,15043,15051,15155,15158,15162,15165,15169,15172,15177,15199,15205,15532,15535,15539,15547,15844],[10,14777,14773],{"id":14778},"_7函数高级部分",[14,14780,14782],{"id":14781},"_71函数默认参数","7.1函数默认参数",[19,14784,14785],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,14787,6435,14788],{},[46,14789,14790],{}," 返回值类型  函数名 （参数= 默认值）{}",[39,14792,14794],{"className":1391,"code":14793,"language":1393,"meta":44,"style":44},"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",[46,14795,14796,14831,14846,14850,14854,14859,14864,14893,14913,14923,14927,14931,14939,14943,14971,14993,14997,15007,15011,15019],{"__ignoreMap":44},[49,14797,14798,14800,14802,14804,14806,14808,14810,14812,14814,14817,14819,14821,14823,14825,14827,14829],{"class":51,"line":52},[49,14799,1406],{"class":109},[49,14801,12637],{"class":62},[49,14803,1403],{"class":66},[49,14805,1406],{"class":109},[49,14807,2655],{"class":6468},[49,14809,13687],{"class":66},[49,14811,1406],{"class":109},[49,14813,4087],{"class":6468},[49,14815,14816],{"class":109}," =",[49,14818,3292],{"class":73},[49,14820,13687],{"class":66},[49,14822,1406],{"class":109},[49,14824,4103],{"class":6468},[49,14826,14816],{"class":109},[49,14828,3292],{"class":73},[49,14830,13694],{"class":66},[49,14832,14833,14835,14837,14839,14841,14843],{"class":51,"line":59},[49,14834,5344],{"class":109},[49,14836,12121],{"class":66},[49,14838,1872],{"class":109},[49,14840,12134],{"class":66},[49,14842,1872],{"class":109},[49,14844,14845],{"class":66}," c;\n",[49,14847,14848],{"class":51,"line":70},[49,14849,137],{"class":66},[49,14851,14852],{"class":51,"line":86},[49,14853,3654],{"emptyLinePlaceholder":1330},[49,14855,14856],{"class":51,"line":98},[49,14857,14858],{"class":55},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[49,14860,14861],{"class":51,"line":121},[49,14862,14863],{"class":55},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[49,14865,14866,14868,14871,14873,14875,14877,14879,14881,14883,14885,14887,14889,14891],{"class":51,"line":134},[49,14867,1406],{"class":109},[49,14869,14870],{"class":62}," func2",[49,14872,1403],{"class":66},[49,14874,1406],{"class":109},[49,14876,2655],{"class":6468},[49,14878,14816],{"class":109},[49,14880,3292],{"class":73},[49,14882,13687],{"class":66},[49,14884,1406],{"class":109},[49,14886,4087],{"class":6468},[49,14888,14816],{"class":109},[49,14890,3292],{"class":73},[49,14892,3973],{"class":66},[49,14894,14895,14897,14899,14901,14903,14905,14907,14909,14911],{"class":51,"line":1085},[49,14896,1406],{"class":109},[49,14898,14870],{"class":62},[49,14900,1403],{"class":66},[49,14902,1406],{"class":109},[49,14904,2655],{"class":6468},[49,14906,13687],{"class":66},[49,14908,1406],{"class":109},[49,14910,4087],{"class":6468},[49,14912,13694],{"class":66},[49,14914,14915,14917,14919,14921],{"class":51,"line":2574},[49,14916,5344],{"class":109},[49,14918,12121],{"class":66},[49,14920,1872],{"class":109},[49,14922,13715],{"class":66},[49,14924,14925],{"class":51,"line":2586},[49,14926,137],{"class":66},[49,14928,14929],{"class":51,"line":2867},[49,14930,3654],{"emptyLinePlaceholder":1330},[49,14932,14933,14935,14937],{"class":51,"line":2872},[49,14934,1406],{"class":109},[49,14936,3227],{"class":62},[49,14938,12105],{"class":66},[49,14940,14941],{"class":51,"line":2878},[49,14942,3654],{"emptyLinePlaceholder":1330},[49,14944,14945,14947,14949,14952,14954,14956,14958,14960,14962,14964,14967,14969],{"class":51,"line":2883},[49,14946,7781],{"class":66},[49,14948,2432],{"class":109},[49,14950,14951],{"class":1505}," \"ret = \"",[49,14953,2701],{"class":109},[49,14955,12637],{"class":62},[49,14957,1403],{"class":66},[49,14959,875],{"class":73},[49,14961,13687],{"class":66},[49,14963,875],{"class":73},[49,14965,14966],{"class":66},") ",[49,14968,2432],{"class":109},[49,14970,10092],{"class":66},[49,14972,14973,14975,14977,14979,14981,14983,14985,14987,14989,14991],{"class":51,"line":2897},[49,14974,7781],{"class":66},[49,14976,2432],{"class":109},[49,14978,14951],{"class":1505},[49,14980,2701],{"class":109},[49,14982,12637],{"class":62},[49,14984,1403],{"class":66},[49,14986,1703],{"class":73},[49,14988,14966],{"class":66},[49,14990,2432],{"class":109},[49,14992,10092],{"class":66},[49,14994,14995],{"class":51,"line":2902},[49,14996,3654],{"emptyLinePlaceholder":1330},[49,14998,14999,15001,15003,15005],{"class":51,"line":2908},[49,15000,3557],{"class":62},[49,15002,1403],{"class":66},[49,15004,3562],{"class":1505},[49,15006,3973],{"class":66},[49,15008,15009],{"class":51,"line":2929},[49,15010,3654],{"emptyLinePlaceholder":1330},[49,15012,15013,15015,15017],{"class":51,"line":2934},[49,15014,5344],{"class":109},[49,15016,5347],{"class":73},[49,15018,83],{"class":66},[49,15020,15021],{"class":51,"line":2948},[49,15022,137],{"class":66},[19,15024,12584],{},[591,15026,15027,15030,15033],{},[26,15028,15029],{},"我传就用我；没传就用你",[26,15031,15032],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[26,15034,15035],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15037,15039],{"id":15038},"_72函数的占位参数","7.2函数的占位参数",[19,15041,15042],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15044,15045,15047,15048],{},[485,15046,6435],{}," ",[46,15049,15050],{},"返回值类型 函数名 (数据类型){}",[39,15052,15054],{"className":1391,"code":15053,"language":1393,"meta":44,"style":44},"\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",[46,15055,15056,15061,15079,15092,15096,15104,15108,15125,15129,15139,15143,15151],{"__ignoreMap":44},[49,15057,15058],{"class":51,"line":52},[49,15059,15060],{"class":55},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[49,15062,15063,15065,15067,15069,15071,15073,15075,15077],{"class":51,"line":59},[49,15064,6616],{"class":109},[49,15066,12637],{"class":62},[49,15068,1403],{"class":66},[49,15070,1406],{"class":109},[49,15072,2655],{"class":6468},[49,15074,13687],{"class":66},[49,15076,1406],{"class":109},[49,15078,13694],{"class":66},[49,15080,15081,15083,15085,15088,15090],{"class":51,"line":70},[49,15082,7781],{"class":66},[49,15084,2432],{"class":109},[49,15086,15087],{"class":1505}," \"this is func\"",[49,15089,2701],{"class":109},[49,15091,10092],{"class":66},[49,15093,15094],{"class":51,"line":86},[49,15095,137],{"class":66},[49,15097,15098,15100,15102],{"class":51,"line":98},[49,15099,1406],{"class":109},[49,15101,3227],{"class":62},[49,15103,12105],{"class":66},[49,15105,15106],{"class":51,"line":121},[49,15107,3654],{"emptyLinePlaceholder":1330},[49,15109,15110,15112,15114,15116,15118,15120,15122],{"class":51,"line":134},[49,15111,14537],{"class":62},[49,15113,1403],{"class":66},[49,15115,106],{"class":73},[49,15117,1770],{"class":66},[49,15119,106],{"class":73},[49,15121,7218],{"class":66},[49,15123,15124],{"class":55}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[49,15126,15127],{"class":51,"line":1085},[49,15128,3654],{"emptyLinePlaceholder":1330},[49,15130,15131,15133,15135,15137],{"class":51,"line":2574},[49,15132,3557],{"class":62},[49,15134,1403],{"class":66},[49,15136,3562],{"class":1505},[49,15138,3973],{"class":66},[49,15140,15141],{"class":51,"line":2586},[49,15142,3654],{"emptyLinePlaceholder":1330},[49,15144,15145,15147,15149],{"class":51,"line":2867},[49,15146,5344],{"class":109},[49,15148,5347],{"class":73},[49,15150,83],{"class":66},[49,15152,15153],{"class":51,"line":2872},[49,15154,137],{"class":66},[19,15156,15157],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15159,15161],{"id":15160},"_73函数重载","7.3函数重载",[19,15163,15164],{},"意思是函数名是可以相同的",[183,15166,15168],{"id":15167},"_731基本语法","7.3.1基本语法",[19,15170,15171],{},"作用：函数名可以相同，提高复用性",[19,15173,15174],{},[485,15175,15176],{},"函数重载满足条件：",[23,15178,15179,15182,15185],{},[26,15180,15181],{},"同一个作用域下",[26,15183,15184],{},"函数名称相同",[26,15186,15187,15188,15191,15192,15195,15196],{},"函数参数",[485,15189,15190],{},"类型不同","  或者 ",[485,15193,15194],{},"个数不同"," 或者 ",[485,15197,15198],{},"顺序不同",[19,15200,15201,15204],{},[485,15202,15203],{},"注意:","  函数的返回值不可以作为函数重载的条件",[39,15206,15208],{"className":11193,"code":15207,"language":11195,"meta":44,"style":44},"\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",[46,15209,15210,15215,15223,15227,15240,15244,15258,15262,15275,15279,15294,15298,15311,15315,15336,15340,15353,15357,15377,15381,15394,15398,15402,15407,15412,15417,15422,15427,15431,15435,15443,15447,15453,15463,15473,15487,15502,15506,15516,15520,15528],{"__ignoreMap":44},[49,15211,15212],{"class":51,"line":52},[49,15213,15214],{"class":55},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[49,15216,15217,15219,15221],{"class":51,"line":59},[49,15218,6616],{"class":109},[49,15220,12637],{"class":62},[49,15222,3230],{"class":66},[49,15224,15225],{"class":51,"line":70},[49,15226,2802],{"class":66},[49,15228,15229,15231,15233,15236,15238],{"class":51,"line":86},[49,15230,7781],{"class":66},[49,15232,2432],{"class":109},[49,15234,15235],{"class":1505}," \"func 的调用！\"",[49,15237,2701],{"class":109},[49,15239,10092],{"class":66},[49,15241,15242],{"class":51,"line":98},[49,15243,137],{"class":66},[49,15245,15246,15248,15250,15252,15254,15256],{"class":51,"line":121},[49,15247,6616],{"class":109},[49,15249,12637],{"class":62},[49,15251,1403],{"class":66},[49,15253,1406],{"class":109},[49,15255,2655],{"class":6468},[49,15257,1409],{"class":66},[49,15259,15260],{"class":51,"line":134},[49,15261,2802],{"class":66},[49,15263,15264,15266,15268,15271,15273],{"class":51,"line":1085},[49,15265,7781],{"class":66},[49,15267,2432],{"class":109},[49,15269,15270],{"class":1505}," \"func (int a) 的调用！\"",[49,15272,2701],{"class":109},[49,15274,10092],{"class":66},[49,15276,15277],{"class":51,"line":2574},[49,15278,137],{"class":66},[49,15280,15281,15283,15285,15287,15290,15292],{"class":51,"line":2586},[49,15282,6616],{"class":109},[49,15284,12637],{"class":62},[49,15286,1403],{"class":66},[49,15288,15289],{"class":109},"double",[49,15291,2655],{"class":6468},[49,15293,1409],{"class":66},[49,15295,15296],{"class":51,"line":2867},[49,15297,2802],{"class":66},[49,15299,15300,15302,15304,15307,15309],{"class":51,"line":2872},[49,15301,7781],{"class":66},[49,15303,2432],{"class":109},[49,15305,15306],{"class":1505}," \"func (double a)的调用！\"",[49,15308,2701],{"class":109},[49,15310,10092],{"class":66},[49,15312,15313],{"class":51,"line":2878},[49,15314,137],{"class":66},[49,15316,15317,15319,15321,15323,15325,15327,15330,15332,15334],{"class":51,"line":2883},[49,15318,6616],{"class":109},[49,15320,12637],{"class":62},[49,15322,1403],{"class":66},[49,15324,1406],{"class":109},[49,15326,2655],{"class":6468},[49,15328,15329],{"class":66}," ,",[49,15331,15289],{"class":109},[49,15333,4087],{"class":6468},[49,15335,1409],{"class":66},[49,15337,15338],{"class":51,"line":2897},[49,15339,2802],{"class":66},[49,15341,15342,15344,15346,15349,15351],{"class":51,"line":2902},[49,15343,7781],{"class":66},[49,15345,2432],{"class":109},[49,15347,15348],{"class":1505}," \"func (int a ,double b) 的调用！\"",[49,15350,2701],{"class":109},[49,15352,10092],{"class":66},[49,15354,15355],{"class":51,"line":2908},[49,15356,137],{"class":66},[49,15358,15359,15361,15363,15365,15367,15369,15371,15373,15375],{"class":51,"line":2929},[49,15360,6616],{"class":109},[49,15362,12637],{"class":62},[49,15364,1403],{"class":66},[49,15366,15289],{"class":109},[49,15368,2655],{"class":6468},[49,15370,15329],{"class":66},[49,15372,1406],{"class":109},[49,15374,4087],{"class":6468},[49,15376,1409],{"class":66},[49,15378,15379],{"class":51,"line":2934},[49,15380,2802],{"class":66},[49,15382,15383,15385,15387,15390,15392],{"class":51,"line":2948},[49,15384,7781],{"class":66},[49,15386,2432],{"class":109},[49,15388,15389],{"class":1505}," \"func (double a ,int b)的调用！\"",[49,15391,2701],{"class":109},[49,15393,10092],{"class":66},[49,15395,15396],{"class":51,"line":2953},[49,15397,137],{"class":66},[49,15399,15400],{"class":51,"line":2982},[49,15401,3654],{"emptyLinePlaceholder":1330},[49,15403,15404],{"class":51,"line":2987},[49,15405,15406],{"class":55},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[49,15408,15409],{"class":51,"line":3004},[49,15410,15411],{"class":55},"\u002F\u002Fint func(double a, int b)\n",[49,15413,15414],{"class":51,"line":3009},[49,15415,15416],{"class":55},"\u002F\u002F{\n",[49,15418,15419],{"class":51,"line":3014},[49,15420,15421],{"class":55},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[49,15423,15424],{"class":51,"line":3019},[49,15425,15426],{"class":55},"\u002F\u002F}\n",[49,15428,15429],{"class":51,"line":3033},[49,15430,3654],{"emptyLinePlaceholder":1330},[49,15432,15433],{"class":51,"line":3038},[49,15434,3654],{"emptyLinePlaceholder":1330},[49,15436,15437,15439,15441],{"class":51,"line":3831},[49,15438,1406],{"class":109},[49,15440,3227],{"class":62},[49,15442,12105],{"class":66},[49,15444,15445],{"class":51,"line":3845},[49,15446,3654],{"emptyLinePlaceholder":1330},[49,15448,15449,15451],{"class":51,"line":3853},[49,15450,14537],{"class":62},[49,15452,6888],{"class":66},[49,15454,15455,15457,15459,15461],{"class":51,"line":3858},[49,15456,14537],{"class":62},[49,15458,1403],{"class":66},[49,15460,106],{"class":73},[49,15462,3973],{"class":66},[49,15464,15465,15467,15469,15471],{"class":51,"line":3864},[49,15466,14537],{"class":62},[49,15468,1403],{"class":66},[49,15470,1451],{"class":73},[49,15472,3973],{"class":66},[49,15474,15475,15477,15479,15481,15483,15485],{"class":51,"line":3870},[49,15476,14537],{"class":62},[49,15478,1403],{"class":66},[49,15480,106],{"class":73},[49,15482,1770],{"class":66},[49,15484,1451],{"class":73},[49,15486,3973],{"class":66},[49,15488,15489,15491,15493,15495,15498,15500],{"class":51,"line":3875},[49,15490,14537],{"class":62},[49,15492,1403],{"class":66},[49,15494,1451],{"class":73},[49,15496,15497],{"class":66}," , ",[49,15499,106],{"class":73},[49,15501,3973],{"class":66},[49,15503,15504],{"class":51,"line":9200},[49,15505,14462],{"class":66},[49,15507,15508,15510,15512,15514],{"class":51,"line":9224},[49,15509,3557],{"class":62},[49,15511,1403],{"class":66},[49,15513,3562],{"class":1505},[49,15515,3973],{"class":66},[49,15517,15518],{"class":51,"line":9229},[49,15519,3654],{"emptyLinePlaceholder":1330},[49,15521,15522,15524,15526],{"class":51,"line":9235},[49,15523,5344],{"class":109},[49,15525,5347],{"class":73},[49,15527,83],{"class":66},[49,15529,15530],{"class":51,"line":9262},[49,15531,137],{"class":66},[19,15533,15534],{},"重点：函数返回值不可以作为函数重载条件！",[183,15536,15538],{"id":15537},"_732注意事项","7.3.2注意事项",[23,15540,15541,15544],{},[26,15542,15543],{},"引用作为重载条件!!!",[26,15545,15546],{},"函数重载碰到函数默认参数",[39,15548,15550],{"className":1391,"code":15549,"language":1393,"meta":44,"style":44},"\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",[46,15551,15552,15557,15562,15566,15582,15586,15599,15603,15607,15625,15629,15642,15646,15650,15654,15659,15663,15687,15691,15704,15708,15712,15726,15730,15743,15747,15751,15759,15763,15775,15785,15798,15802,15806,15814,15818,15828,15832,15840],{"__ignoreMap":44},[49,15553,15554],{"class":51,"line":52},[49,15555,15556],{"class":55},"\u002F\u002F函数重载注意事项\n",[49,15558,15559],{"class":51,"line":59},[49,15560,15561],{"class":55},"\u002F\u002F1、引用作为重载条件\n",[49,15563,15564],{"class":51,"line":70},[49,15565,3654],{"emptyLinePlaceholder":1330},[49,15567,15568,15570,15572,15574,15576,15578,15580],{"class":51,"line":86},[49,15569,6616],{"class":109},[49,15571,12637],{"class":62},[49,15573,1403],{"class":66},[49,15575,1406],{"class":109},[49,15577,11836],{"class":109},[49,15579,1630],{"class":6468},[49,15581,1409],{"class":66},[49,15583,15584],{"class":51,"line":98},[49,15585,2802],{"class":66},[49,15587,15588,15590,15592,15595,15597],{"class":51,"line":121},[49,15589,7781],{"class":66},[49,15591,2432],{"class":109},[49,15593,15594],{"class":1505}," \"func (int &a) 调用 \"",[49,15596,2701],{"class":109},[49,15598,10092],{"class":66},[49,15600,15601],{"class":51,"line":134},[49,15602,137],{"class":66},[49,15604,15605],{"class":51,"line":1085},[49,15606,3654],{"emptyLinePlaceholder":1330},[49,15608,15609,15611,15613,15615,15617,15619,15621,15623],{"class":51,"line":2574},[49,15610,6616],{"class":109},[49,15612,12637],{"class":62},[49,15614,1403],{"class":66},[49,15616,8044],{"class":109},[49,15618,3636],{"class":109},[49,15620,11836],{"class":109},[49,15622,1630],{"class":6468},[49,15624,1409],{"class":66},[49,15626,15627],{"class":51,"line":2586},[49,15628,2802],{"class":66},[49,15630,15631,15633,15635,15638,15640],{"class":51,"line":2867},[49,15632,7781],{"class":66},[49,15634,2432],{"class":109},[49,15636,15637],{"class":1505}," \"func (const int &a) 调用 \"",[49,15639,2701],{"class":109},[49,15641,10092],{"class":66},[49,15643,15644],{"class":51,"line":2872},[49,15645,137],{"class":66},[49,15647,15648],{"class":51,"line":2878},[49,15649,3654],{"emptyLinePlaceholder":1330},[49,15651,15652],{"class":51,"line":2883},[49,15653,3654],{"emptyLinePlaceholder":1330},[49,15655,15656],{"class":51,"line":2897},[49,15657,15658],{"class":55},"\u002F\u002F2、函数重载碰到函数默认参数\n",[49,15660,15661],{"class":51,"line":2902},[49,15662,3654],{"emptyLinePlaceholder":1330},[49,15664,15665,15667,15669,15671,15673,15675,15677,15679,15681,15683,15685],{"class":51,"line":2908},[49,15666,6616],{"class":109},[49,15668,14870],{"class":62},[49,15670,1403],{"class":66},[49,15672,1406],{"class":109},[49,15674,2655],{"class":6468},[49,15676,13687],{"class":66},[49,15678,1406],{"class":109},[49,15680,4087],{"class":6468},[49,15682,14816],{"class":109},[49,15684,3292],{"class":73},[49,15686,1409],{"class":66},[49,15688,15689],{"class":51,"line":2929},[49,15690,2802],{"class":66},[49,15692,15693,15695,15697,15700,15702],{"class":51,"line":2934},[49,15694,7781],{"class":66},[49,15696,2432],{"class":109},[49,15698,15699],{"class":1505}," \"func2(int a, int b = 10) 调用\"",[49,15701,2701],{"class":109},[49,15703,10092],{"class":66},[49,15705,15706],{"class":51,"line":2948},[49,15707,137],{"class":66},[49,15709,15710],{"class":51,"line":2953},[49,15711,3654],{"emptyLinePlaceholder":1330},[49,15713,15714,15716,15718,15720,15722,15724],{"class":51,"line":2982},[49,15715,6616],{"class":109},[49,15717,14870],{"class":62},[49,15719,1403],{"class":66},[49,15721,1406],{"class":109},[49,15723,2655],{"class":6468},[49,15725,1409],{"class":66},[49,15727,15728],{"class":51,"line":2987},[49,15729,2802],{"class":66},[49,15731,15732,15734,15736,15739,15741],{"class":51,"line":3004},[49,15733,7781],{"class":66},[49,15735,2432],{"class":109},[49,15737,15738],{"class":1505}," \"func2(int a) 调用\"",[49,15740,2701],{"class":109},[49,15742,10092],{"class":66},[49,15744,15745],{"class":51,"line":3009},[49,15746,137],{"class":66},[49,15748,15749],{"class":51,"line":3014},[49,15750,3654],{"emptyLinePlaceholder":1330},[49,15752,15753,15755,15757],{"class":51,"line":3019},[49,15754,1406],{"class":109},[49,15756,3227],{"class":62},[49,15758,12105],{"class":66},[49,15760,15761],{"class":51,"line":3033},[49,15762,14462],{"class":66},[49,15764,15765,15767,15769,15771,15773],{"class":51,"line":3038},[49,15766,3239],{"class":109},[49,15768,12121],{"class":66},[49,15770,1448],{"class":109},[49,15772,3292],{"class":73},[49,15774,83],{"class":66},[49,15776,15777,15779,15782],{"class":51,"line":3831},[49,15778,14537],{"class":62},[49,15780,15781],{"class":66},"(a);",[49,15783,15784],{"class":55}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[49,15786,15787,15789,15791,15793,15795],{"class":51,"line":3845},[49,15788,14537],{"class":62},[49,15790,1403],{"class":66},[49,15792,106],{"class":73},[49,15794,7218],{"class":66},[49,15796,15797],{"class":55},"\u002F\u002F调用有const   10是个常量\n",[49,15799,15800],{"class":51,"line":3853},[49,15801,3654],{"emptyLinePlaceholder":1330},[49,15803,15804],{"class":51,"line":3858},[49,15805,3654],{"emptyLinePlaceholder":1330},[49,15807,15808,15811],{"class":51,"line":3864},[49,15809,15810],{"class":55},"    \u002F\u002Ffunc2(10);",[49,15812,15813],{"class":55}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[49,15815,15816],{"class":51,"line":3870},[49,15817,3654],{"emptyLinePlaceholder":1330},[49,15819,15820,15822,15824,15826],{"class":51,"line":3875},[49,15821,3557],{"class":62},[49,15823,1403],{"class":66},[49,15825,3562],{"class":1505},[49,15827,3973],{"class":66},[49,15829,15830],{"class":51,"line":9200},[49,15831,3654],{"emptyLinePlaceholder":1330},[49,15833,15834,15836,15838],{"class":51,"line":9224},[49,15835,5344],{"class":109},[49,15837,5347],{"class":73},[49,15839,83],{"class":66},[49,15841,15842],{"class":51,"line":9229},[49,15843,137],{"class":66},[1305,15845,15846],{},"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":44,"searchDepth":59,"depth":59,"links":15848},[15849,15850,15851],{"id":14781,"depth":59,"text":14782},{"id":15038,"depth":59,"text":15039},{"id":15160,"depth":59,"text":15161,"children":15852},[15853,15854],{"id":15167,"depth":70,"text":15168},{"id":15537,"depth":70,"text":15538},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14773,"description":44},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15861,"title":15862,"body":15863,"description":24614,"extension":1328,"meta":24615,"navigation":1330,"path":24616,"seo":24617,"stem":24618,"__hash__":24619},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15864,"toc":24595},[15865,15868,15874,15881,15885,15888,15891,15894,15898,15902,15905,15908,15916,15921,15924,15931,15936,16095,16098,16351,16354,16357,16360,16365,16368,16371,16382,16387,16623,16627,16637,16640,16648,16795,16799,16802,16805,16809,17253,17257,17265,17273,18185,18192,18197,18825,18828,18831,18834,18953,18956,19043,19046,19172,19175,19269,19272,19625,19629,19637,19641,19648,19651,19654,19665,19671,19676,19688,19696,19716,19724,19741,19927,19930,19934,19937,19940,19943,19946,19949,19952,19955,20415,20421,20425,20428,20439,21026,21029,21518,21522,21525,21528,21531,21534,21537,21545,21941,21945,21948,21951,22398,22401,22404,22409,22412,22417,22420,22424,22427,22429,22435,22438,22744,22754,22795,22799,22802,22804,22837,22840,23147,23149,23164,23167,23190,23199,23205,23208,23212,23215,23218,23223,23234,23239,23247,23251,23381,23384,23387,23562,23567,23779,23783,23786,23900,23905,24144,24148,24152,24155,24158,24163,24268,24271,24274,24277,24281,24392,24395,24398,24403,24455,24458,24461,24466,24512,24515,24520,24588,24590,24593],[10,15866,15862],{"id":15867},"_8类和对象",[19,15869,15870,15871],{},"C++面向对象的三大特性为",[485,15872,15873],{},"封装、继承、多态",[19,15875,15876,15877,15880],{},"C++认为",[485,15878,15879],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15882,15883],{},[485,15884,551],{},[19,15886,15887],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15889,15890],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15892,15893],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15895,15897],{"id":15896},"_81封装","8.1封装",[183,15899,15901],{"id":15900},"_811封装的意义","8.1.1封装的意义",[19,15903,15904],{},"封装是C++面向对象三大特性之一",[19,15906,15907],{},"封装的意义：",[23,15909,15910,15913],{},[26,15911,15912],{},"将属性和行为作为一个整体，表现生活中的事物",[26,15914,15915],{},"将属性和行为加以权限控制",[19,15917,15918],{},[485,15919,15920],{},"封装意义一：",[19,15922,15923],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,15925,15926,15047,15928],{},[485,15927,6435],{},[46,15929,15930],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[591,15932,15933],{},[26,15934,15935],{},"**示例1：**设计一个圆类，求圆的周长",[39,15937,15939],{"className":1391,"code":15938,"language":1393,"meta":44,"style":44},"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",[46,15940,15941,15949,15953,15958,15963,15968,15973,15980,15985,15995,15999,16017,16021,16025,16033,16037,16042,16047,16052,16057,16068,16091],{"__ignoreMap":44},[49,15942,15943,15946],{"class":51,"line":52},[49,15944,15945],{"class":109},"class",[49,15947,15948],{"class":62}," Circle\n",[49,15950,15951],{"class":51,"line":59},[49,15952,2802],{"class":66},[49,15954,15955],{"class":51,"line":70},[49,15956,15957],{"class":55},"    \u002F\u002F访问权限\n",[49,15959,15960],{"class":51,"line":86},[49,15961,15962],{"class":55},"    \u002F\u002F公共权限\n",[49,15964,15965],{"class":51,"line":98},[49,15966,15967],{"class":109},"public:\n",[49,15969,15970],{"class":51,"line":121},[49,15971,15972],{"class":55},"    \u002F\u002F属性\n",[49,15974,15975,15977],{"class":51,"line":134},[49,15976,3239],{"class":109},[49,15978,15979],{"class":66}," m_r;\n",[49,15981,15982],{"class":51,"line":1085},[49,15983,15984],{"class":55},"    \u002F\u002F行为\n",[49,15986,15987,15990,15993],{"class":51,"line":2574},[49,15988,15989],{"class":109},"    double",[49,15991,15992],{"class":62}," calculateZC",[49,15994,3230],{"class":66},[49,15996,15997],{"class":51,"line":2586},[49,15998,3284],{"class":66},[49,16000,16001,16004,16007,16009,16012,16014],{"class":51,"line":2867},[49,16002,16003],{"class":109},"        return",[49,16005,16006],{"class":73}," 2",[49,16008,1846],{"class":109},[49,16010,16011],{"class":66},"PI",[49,16013,1846],{"class":109},[49,16015,16016],{"class":66},"m_r;\n",[49,16018,16019],{"class":51,"line":2872},[49,16020,3441],{"class":66},[49,16022,16023],{"class":51,"line":2878},[49,16024,5249],{"class":66},[49,16026,16027,16029,16031],{"class":51,"line":2883},[49,16028,1406],{"class":109},[49,16030,3227],{"class":62},[49,16032,3230],{"class":66},[49,16034,16035],{"class":51,"line":2897},[49,16036,2802],{"class":66},[49,16038,16039],{"class":51,"line":2902},[49,16040,16041],{"class":55},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[49,16043,16044],{"class":51,"line":2908},[49,16045,16046],{"class":55},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[49,16048,16049],{"class":51,"line":2929},[49,16050,16051],{"class":66},"    Circle c1;\n",[49,16053,16054],{"class":51,"line":2934},[49,16055,16056],{"class":55},"    \u002F\u002F给圆对象 的属性进行赋值\n",[49,16058,16059,16062,16064,16066],{"class":51,"line":2948},[49,16060,16061],{"class":66},"    c1.m_r",[49,16063,1448],{"class":109},[49,16065,106],{"class":73},[49,16067,83],{"class":66},[49,16069,16070,16072,16074,16077,16079,16082,16085,16087,16089],{"class":51,"line":2953},[49,16071,2807],{"class":66},[49,16073,2432],{"class":109},[49,16075,16076],{"class":1505},"\"圆的周长\"",[49,16078,2432],{"class":109},[49,16080,16081],{"class":66},"c1.",[49,16083,16084],{"class":62},"calculateZC",[49,16086,3681],{"class":66},[49,16088,2432],{"class":109},[49,16090,2454],{"class":66},[49,16092,16093],{"class":51,"line":2982},[49,16094,137],{"class":66},[19,16096,16097],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[39,16099,16101],{"className":1391,"code":16100,"language":1393,"meta":44,"style":44},"#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",[46,16102,16103,16109,16119,16125,16131,16135,16139,16144,16151,16156,16174,16178,16188,16192,16197,16213,16217,16227,16231,16236,16244,16248,16280,16284,16288,16296,16300,16305,16310,16324,16338,16347],{"__ignoreMap":44},[49,16104,16105,16107],{"class":51,"line":52},[49,16106,3204],{"class":109},[49,16108,3207],{"class":1505},[49,16110,16111,16113,16115,16117],{"class":51,"line":59},[49,16112,3212],{"class":109},[49,16114,3215],{"class":109},[49,16116,3218],{"class":62},[49,16118,83],{"class":66},[49,16120,16121,16123],{"class":51,"line":70},[49,16122,3204],{"class":109},[49,16124,9001],{"class":1505},[49,16126,16127,16129],{"class":51,"line":86},[49,16128,15945],{"class":109},[49,16130,9014],{"class":62},[49,16132,16133],{"class":51,"line":98},[49,16134,2802],{"class":66},[49,16136,16137],{"class":51,"line":121},[49,16138,15967],{"class":109},[49,16140,16141],{"class":51,"line":134},[49,16142,16143],{"class":66},"    string m_name;\n",[49,16145,16146,16148],{"class":51,"line":1085},[49,16147,3239],{"class":109},[49,16149,16150],{"class":66}," m_id;\n",[49,16152,16153],{"class":51,"line":2574},[49,16154,16155],{"class":55},"    \u002F\u002F赋值姓名\n",[49,16157,16158,16161,16164,16166,16169,16172],{"class":51,"line":2586},[49,16159,16160],{"class":109},"    void",[49,16162,16163],{"class":62}," setName",[49,16165,1403],{"class":66},[49,16167,16168],{"class":62},"string",[49,16170,16171],{"class":6468}," name",[49,16173,1409],{"class":66},[49,16175,16176],{"class":51,"line":2867},[49,16177,3284],{"class":66},[49,16179,16180,16183,16185],{"class":51,"line":2872},[49,16181,16182],{"class":66},"        m_name",[49,16184,1448],{"class":109},[49,16186,16187],{"class":66},"name;\n",[49,16189,16190],{"class":51,"line":2878},[49,16191,3441],{"class":66},[49,16193,16194],{"class":51,"line":2883},[49,16195,16196],{"class":55},"    \u002F\u002F赋值学号\n",[49,16198,16199,16201,16204,16206,16208,16211],{"class":51,"line":2897},[49,16200,16160],{"class":109},[49,16202,16203],{"class":62}," setId",[49,16205,1403],{"class":66},[49,16207,1406],{"class":109},[49,16209,16210],{"class":6468}," id",[49,16212,1409],{"class":66},[49,16214,16215],{"class":51,"line":2902},[49,16216,3284],{"class":66},[49,16218,16219,16222,16224],{"class":51,"line":2908},[49,16220,16221],{"class":66},"        m_id",[49,16223,1448],{"class":109},[49,16225,16226],{"class":66},"id;\n",[49,16228,16229],{"class":51,"line":2929},[49,16230,3441],{"class":66},[49,16232,16233],{"class":51,"line":2934},[49,16234,16235],{"class":55},"    \u002F\u002F打印学生信息\n",[49,16237,16238,16240,16242],{"class":51,"line":2948},[49,16239,16160],{"class":109},[49,16241,10867],{"class":62},[49,16243,3230],{"class":66},[49,16245,16246],{"class":51,"line":2953},[49,16247,3284],{"class":66},[49,16249,16250,16252,16254,16257,16259,16262,16264,16266,16268,16271,16273,16276,16278],{"class":51,"line":2982},[49,16251,4705],{"class":66},[49,16253,2432],{"class":109},[49,16255,16256],{"class":1505},"\"姓名：\"",[49,16258,2432],{"class":109},[49,16260,16261],{"class":66},"m_name",[49,16263,2432],{"class":109},[49,16265,5613],{"class":1505},[49,16267,2432],{"class":109},[49,16269,16270],{"class":1505},"\"学号：\"",[49,16272,2432],{"class":109},[49,16274,16275],{"class":66},"m_id",[49,16277,2432],{"class":109},[49,16279,2454],{"class":66},[49,16281,16282],{"class":51,"line":2987},[49,16283,3441],{"class":66},[49,16285,16286],{"class":51,"line":3004},[49,16287,5249],{"class":66},[49,16289,16290,16292,16294],{"class":51,"line":3009},[49,16291,1406],{"class":109},[49,16293,3227],{"class":62},[49,16295,3230],{"class":66},[49,16297,16298],{"class":51,"line":3014},[49,16299,2802],{"class":66},[49,16301,16302],{"class":51,"line":3019},[49,16303,16304],{"class":55},"    \u002F\u002F实例化\n",[49,16306,16307],{"class":51,"line":3033},[49,16308,16309],{"class":66},"    Student s1;\n",[49,16311,16312,16315,16318,16320,16322],{"class":51,"line":3038},[49,16313,16314],{"class":66},"    s1.",[49,16316,16317],{"class":62},"setName",[49,16319,1403],{"class":66},[49,16321,9168],{"class":1505},[49,16323,3973],{"class":66},[49,16325,16326,16328,16331,16333,16336],{"class":51,"line":3831},[49,16327,16314],{"class":66},[49,16329,16330],{"class":62},"setId",[49,16332,1403],{"class":66},[49,16334,16335],{"class":73},"123456",[49,16337,3973],{"class":66},[49,16339,16340,16342,16345],{"class":51,"line":3845},[49,16341,16314],{"class":66},[49,16343,16344],{"class":62},"printInfo",[49,16346,6888],{"class":66},[49,16348,16349],{"class":51,"line":3853},[49,16350,137],{"class":66},[19,16352,16353],{},"类中的属性和行为统称为成员",[19,16355,16356],{},"属性：成员属性(成员变量)",[19,16358,16359],{},"方法：成员函数(成员方法)",[19,16361,16362],{},[485,16363,16364],{},"封装意义二：",[19,16366,16367],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16369,16370],{},"访问权限有三种：",[591,16372,16373,16376,16379],{},[26,16374,16375],{},"public        公共权限",[26,16377,16378],{},"protected 保护权限",[26,16380,16381],{},"private      私有权限",[19,16383,16384],{},[485,16385,16386],{},"示例：",[39,16388,16390],{"className":11193,"code":16389,"language":11195,"meta":44,"style":44},"\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",[46,16391,16392,16397,16402,16407,16412,16416,16423,16427,16432,16436,16441,16445,16450,16455,16460,16464,16469,16474,16481,16485,16489,16497,16501,16512,16524,16536,16540,16544,16548,16556,16560,16565,16577,16585,16593,16597,16607,16611,16619],{"__ignoreMap":44},[49,16393,16394],{"class":51,"line":52},[49,16395,16396],{"class":55},"\u002F\u002F三种权限\n",[49,16398,16399],{"class":51,"line":59},[49,16400,16401],{"class":55},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[49,16403,16404],{"class":51,"line":70},[49,16405,16406],{"class":55},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[49,16408,16409],{"class":51,"line":86},[49,16410,16411],{"class":55},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[49,16413,16414],{"class":51,"line":98},[49,16415,3654],{"emptyLinePlaceholder":1330},[49,16417,16418,16420],{"class":51,"line":121},[49,16419,15945],{"class":109},[49,16421,16422],{"class":62}," Person\n",[49,16424,16425],{"class":51,"line":134},[49,16426,2802],{"class":66},[49,16428,16429],{"class":51,"line":1085},[49,16430,16431],{"class":55},"    \u002F\u002F姓名  公共权限\n",[49,16433,16434],{"class":51,"line":2574},[49,16435,15967],{"class":109},[49,16437,16438],{"class":51,"line":2586},[49,16439,16440],{"class":66},"    string m_Name;\n",[49,16442,16443],{"class":51,"line":2867},[49,16444,3654],{"emptyLinePlaceholder":1330},[49,16446,16447],{"class":51,"line":2872},[49,16448,16449],{"class":55},"    \u002F\u002F汽车  保护权限\n",[49,16451,16452],{"class":51,"line":2878},[49,16453,16454],{"class":109},"protected:\n",[49,16456,16457],{"class":51,"line":2883},[49,16458,16459],{"class":66},"    string m_Car;\n",[49,16461,16462],{"class":51,"line":2897},[49,16463,3654],{"emptyLinePlaceholder":1330},[49,16465,16466],{"class":51,"line":2902},[49,16467,16468],{"class":55},"    \u002F\u002F银行卡密码  私有权限\n",[49,16470,16471],{"class":51,"line":2908},[49,16472,16473],{"class":109},"private:\n",[49,16475,16476,16478],{"class":51,"line":2929},[49,16477,3239],{"class":109},[49,16479,16480],{"class":66}," m_Password;\n",[49,16482,16483],{"class":51,"line":2934},[49,16484,3654],{"emptyLinePlaceholder":1330},[49,16486,16487],{"class":51,"line":2948},[49,16488,15967],{"class":109},[49,16490,16491,16493,16495],{"class":51,"line":2953},[49,16492,16160],{"class":109},[49,16494,12637],{"class":62},[49,16496,3230],{"class":66},[49,16498,16499],{"class":51,"line":2982},[49,16500,3284],{"class":66},[49,16502,16503,16506,16508,16510],{"class":51,"line":2987},[49,16504,16505],{"class":66},"        m_Name ",[49,16507,1448],{"class":109},[49,16509,10190],{"class":1505},[49,16511,83],{"class":66},[49,16513,16514,16517,16519,16522],{"class":51,"line":3004},[49,16515,16516],{"class":66},"        m_Car ",[49,16518,1448],{"class":109},[49,16520,16521],{"class":1505}," \"拖拉机\"",[49,16523,83],{"class":66},[49,16525,16526,16529,16531,16534],{"class":51,"line":3009},[49,16527,16528],{"class":66},"        m_Password ",[49,16530,1448],{"class":109},[49,16532,16533],{"class":73}," 123456",[49,16535,83],{"class":66},[49,16537,16538],{"class":51,"line":3014},[49,16539,3441],{"class":66},[49,16541,16542],{"class":51,"line":3019},[49,16543,5249],{"class":66},[49,16545,16546],{"class":51,"line":3033},[49,16547,3654],{"emptyLinePlaceholder":1330},[49,16549,16550,16552,16554],{"class":51,"line":3038},[49,16551,1406],{"class":109},[49,16553,3227],{"class":62},[49,16555,12105],{"class":66},[49,16557,16558],{"class":51,"line":3831},[49,16559,3654],{"emptyLinePlaceholder":1330},[49,16561,16562],{"class":51,"line":3845},[49,16563,16564],{"class":66},"    Person p;\n",[49,16566,16567,16570,16572,16575],{"class":51,"line":3853},[49,16568,16569],{"class":66},"    p.m_Name ",[49,16571,1448],{"class":109},[49,16573,16574],{"class":1505}," \"李四\"",[49,16576,83],{"class":66},[49,16578,16579,16582],{"class":51,"line":3858},[49,16580,16581],{"class":55},"    \u002F\u002Fp.m_Car = \"奔驰\";",[49,16583,16584],{"class":55},"  \u002F\u002F保护权限类外访问不到\n",[49,16586,16587,16590],{"class":51,"line":3864},[49,16588,16589],{"class":55},"    \u002F\u002Fp.m_Password = 123;",[49,16591,16592],{"class":55}," \u002F\u002F私有权限类外访问不到\n",[49,16594,16595],{"class":51,"line":3870},[49,16596,3654],{"emptyLinePlaceholder":1330},[49,16598,16599,16601,16603,16605],{"class":51,"line":3875},[49,16600,3557],{"class":62},[49,16602,1403],{"class":66},[49,16604,3562],{"class":1505},[49,16606,3973],{"class":66},[49,16608,16609],{"class":51,"line":9200},[49,16610,3654],{"emptyLinePlaceholder":1330},[49,16612,16613,16615,16617],{"class":51,"line":9224},[49,16614,5344],{"class":109},[49,16616,5347],{"class":73},[49,16618,83],{"class":66},[49,16620,16621],{"class":51,"line":9229},[49,16622,137],{"class":66},[183,16624,16626],{"id":16625},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16628,16629,16630,16633,16634],{},"在C++中 struct和class唯一的",[485,16631,16632],{},"区别","就在于 ",[485,16635,16636],{},"默认的访问权限不同",[19,16638,16639],{},"区别：",[23,16641,16642,16645],{},[26,16643,16644],{},"struct 默认权限为公共",[26,16646,16647],{},"class   默认权限为私有",[39,16649,16651],{"className":11193,"code":16650,"language":11195,"meta":44,"style":44},"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",[46,16652,16653,16660,16664,16674,16678,16682,16689,16693,16703,16707,16711,16719,16723,16728,16742,16746,16751,16765,16769,16779,16783,16791],{"__ignoreMap":44},[49,16654,16655,16657],{"class":51,"line":52},[49,16656,15945],{"class":109},[49,16658,16659],{"class":62}," C1\n",[49,16661,16662],{"class":51,"line":59},[49,16663,2802],{"class":66},[49,16665,16666,16668,16671],{"class":51,"line":70},[49,16667,3239],{"class":109},[49,16669,16670],{"class":66},"  m_A;",[49,16672,16673],{"class":55}," \u002F\u002F默认是私有权限\n",[49,16675,16676],{"class":51,"line":86},[49,16677,5249],{"class":66},[49,16679,16680],{"class":51,"line":98},[49,16681,3654],{"emptyLinePlaceholder":1330},[49,16683,16684,16686],{"class":51,"line":121},[49,16685,9011],{"class":109},[49,16687,16688],{"class":62}," C2\n",[49,16690,16691],{"class":51,"line":134},[49,16692,2802],{"class":66},[49,16694,16695,16697,16700],{"class":51,"line":1085},[49,16696,3239],{"class":109},[49,16698,16699],{"class":66}," m_A;",[49,16701,16702],{"class":55},"  \u002F\u002F默认是公共权限\n",[49,16704,16705],{"class":51,"line":2574},[49,16706,5249],{"class":66},[49,16708,16709],{"class":51,"line":2586},[49,16710,3654],{"emptyLinePlaceholder":1330},[49,16712,16713,16715,16717],{"class":51,"line":2867},[49,16714,1406],{"class":109},[49,16716,3227],{"class":62},[49,16718,12105],{"class":66},[49,16720,16721],{"class":51,"line":2872},[49,16722,3654],{"emptyLinePlaceholder":1330},[49,16724,16725],{"class":51,"line":2878},[49,16726,16727],{"class":66},"    C1 c1;\n",[49,16729,16730,16733,16735,16737,16739],{"class":51,"line":2883},[49,16731,16732],{"class":66},"    c1.m_A ",[49,16734,1448],{"class":109},[49,16736,3292],{"class":73},[49,16738,1457],{"class":66},[49,16740,16741],{"class":55}," \u002F\u002F错误，访问权限是私有\n",[49,16743,16744],{"class":51,"line":2897},[49,16745,3654],{"emptyLinePlaceholder":1330},[49,16747,16748],{"class":51,"line":2902},[49,16749,16750],{"class":66},"    C2 c2;\n",[49,16752,16753,16756,16758,16760,16762],{"class":51,"line":2908},[49,16754,16755],{"class":66},"    c2.m_A ",[49,16757,1448],{"class":109},[49,16759,3292],{"class":73},[49,16761,1457],{"class":66},[49,16763,16764],{"class":55}," \u002F\u002F正确，访问权限是公共\n",[49,16766,16767],{"class":51,"line":2929},[49,16768,3654],{"emptyLinePlaceholder":1330},[49,16770,16771,16773,16775,16777],{"class":51,"line":2934},[49,16772,3557],{"class":62},[49,16774,1403],{"class":66},[49,16776,3562],{"class":1505},[49,16778,3973],{"class":66},[49,16780,16781],{"class":51,"line":2948},[49,16782,3654],{"emptyLinePlaceholder":1330},[49,16784,16785,16787,16789],{"class":51,"line":2953},[49,16786,5344],{"class":109},[49,16788,5347],{"class":73},[49,16790,83],{"class":66},[49,16792,16793],{"class":51,"line":2982},[49,16794,137],{"class":66},[183,16796,16798],{"id":16797},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16800,16801],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16803,16804],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16806,16807],{},[485,16808,16386],{},[39,16810,16812],{"className":11193,"code":16811,"language":11195,"meta":44,"style":44},"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",[46,16813,16814,16823,16827,16831,16836,16850,16859,16863,16873,16877,16884,16888,16892,16896,16901,16910,16917,16921,16926,16942,16965,16978,16985,16989,16998,17002,17006,17011,17027,17037,17041,17045,17049,17057,17061,17071,17075,17083,17087,17091,17099,17103,17107,17112,17125,17148,17152,17157,17170,17192,17196,17201,17215,17223,17227,17237,17241,17249],{"__ignoreMap":44},[49,16815,16816,16818,16821],{"class":51,"line":52},[49,16817,15945],{"class":109},[49,16819,16820],{"class":62}," Person",[49,16822,67],{"class":66},[49,16824,16825],{"class":51,"line":59},[49,16826,15967],{"class":109},[49,16828,16829],{"class":51,"line":70},[49,16830,3654],{"emptyLinePlaceholder":1330},[49,16832,16833],{"class":51,"line":86},[49,16834,16835],{"class":55},"    \u002F\u002F姓名设置可读可写\n",[49,16837,16838,16840,16842,16844,16846,16848],{"class":51,"line":98},[49,16839,16160],{"class":109},[49,16841,16163],{"class":62},[49,16843,1403],{"class":66},[49,16845,16168],{"class":62},[49,16847,16171],{"class":6468},[49,16849,13694],{"class":66},[49,16851,16852,16854,16856],{"class":51,"line":121},[49,16853,16505],{"class":66},[49,16855,1448],{"class":109},[49,16857,16858],{"class":66}," name;\n",[49,16860,16861],{"class":51,"line":134},[49,16862,3441],{"class":66},[49,16864,16865,16868,16871],{"class":51,"line":1085},[49,16866,16867],{"class":62},"    string",[49,16869,16870],{"class":62}," getName",[49,16872,3230],{"class":66},[49,16874,16875],{"class":51,"line":2574},[49,16876,3284],{"class":66},[49,16878,16879,16881],{"class":51,"line":2586},[49,16880,16003],{"class":109},[49,16882,16883],{"class":66}," m_Name;\n",[49,16885,16886],{"class":51,"line":2867},[49,16887,3441],{"class":66},[49,16889,16890],{"class":51,"line":2872},[49,16891,3654],{"emptyLinePlaceholder":1330},[49,16893,16894],{"class":51,"line":2878},[49,16895,3654],{"emptyLinePlaceholder":1330},[49,16897,16898],{"class":51,"line":2883},[49,16899,16900],{"class":55},"    \u002F\u002F获取年龄 \n",[49,16902,16903,16905,16908],{"class":51,"line":2897},[49,16904,3239],{"class":109},[49,16906,16907],{"class":62}," getAge",[49,16909,12105],{"class":66},[49,16911,16912,16914],{"class":51,"line":2902},[49,16913,16003],{"class":109},[49,16915,16916],{"class":66}," m_Age;\n",[49,16918,16919],{"class":51,"line":2908},[49,16920,3441],{"class":66},[49,16922,16923],{"class":51,"line":2929},[49,16924,16925],{"class":55},"    \u002F\u002F设置年龄\n",[49,16927,16928,16930,16933,16935,16937,16940],{"class":51,"line":2934},[49,16929,16160],{"class":109},[49,16931,16932],{"class":62}," setAge",[49,16934,1403],{"class":66},[49,16936,1406],{"class":109},[49,16938,16939],{"class":6468}," age",[49,16941,13694],{"class":66},[49,16943,16944,16946,16949,16951,16953,16955,16958,16960,16963],{"class":51,"line":2948},[49,16945,3751],{"class":109},[49,16947,16948],{"class":66}," (age ",[49,16950,2300],{"class":109},[49,16952,5347],{"class":73},[49,16954,4509],{"class":109},[49,16956,16957],{"class":66}," age ",[49,16959,2349],{"class":109},[49,16961,16962],{"class":73}," 150",[49,16964,13694],{"class":66},[49,16966,16967,16969,16971,16974,16976],{"class":51,"line":2953},[49,16968,10971],{"class":66},[49,16970,2432],{"class":109},[49,16972,16973],{"class":1505}," \"你个老妖精!\"",[49,16975,2701],{"class":109},[49,16977,10092],{"class":66},[49,16979,16980,16983],{"class":51,"line":2982},[49,16981,16982],{"class":109},"            return",[49,16984,83],{"class":66},[49,16986,16987],{"class":51,"line":2987},[49,16988,3783],{"class":66},[49,16990,16991,16994,16996],{"class":51,"line":3004},[49,16992,16993],{"class":66},"        m_Age ",[49,16995,1448],{"class":109},[49,16997,9049],{"class":66},[49,16999,17000],{"class":51,"line":3009},[49,17001,3441],{"class":66},[49,17003,17004],{"class":51,"line":3014},[49,17005,3654],{"emptyLinePlaceholder":1330},[49,17007,17008],{"class":51,"line":3019},[49,17009,17010],{"class":55},"    \u002F\u002F情人设置为只写\n",[49,17012,17013,17015,17018,17020,17022,17025],{"class":51,"line":3033},[49,17014,16160],{"class":109},[49,17016,17017],{"class":62}," setLover",[49,17019,1403],{"class":66},[49,17021,16168],{"class":62},[49,17023,17024],{"class":6468}," lover",[49,17026,13694],{"class":66},[49,17028,17029,17032,17034],{"class":51,"line":3038},[49,17030,17031],{"class":66},"        m_Lover ",[49,17033,1448],{"class":109},[49,17035,17036],{"class":66}," lover;\n",[49,17038,17039],{"class":51,"line":3831},[49,17040,3441],{"class":66},[49,17042,17043],{"class":51,"line":3845},[49,17044,3654],{"emptyLinePlaceholder":1330},[49,17046,17047],{"class":51,"line":3853},[49,17048,16473],{"class":109},[49,17050,17051,17054],{"class":51,"line":3858},[49,17052,17053],{"class":66},"    string m_Name;",[49,17055,17056],{"class":55}," \u002F\u002F可读可写  姓名\n",[49,17058,17059],{"class":51,"line":3864},[49,17060,14462],{"class":66},[49,17062,17063,17065,17068],{"class":51,"line":3870},[49,17064,3239],{"class":109},[49,17066,17067],{"class":66}," m_Age;",[49,17069,17070],{"class":55}," \u002F\u002F只读  年龄\n",[49,17072,17073],{"class":51,"line":3875},[49,17074,3654],{"emptyLinePlaceholder":1330},[49,17076,17077,17080],{"class":51,"line":9200},[49,17078,17079],{"class":66},"    string m_Lover;",[49,17081,17082],{"class":55}," \u002F\u002F只写  情人\n",[49,17084,17085],{"class":51,"line":9224},[49,17086,5249],{"class":66},[49,17088,17089],{"class":51,"line":9229},[49,17090,3654],{"emptyLinePlaceholder":1330},[49,17092,17093,17095,17097],{"class":51,"line":9235},[49,17094,1406],{"class":109},[49,17096,3227],{"class":62},[49,17098,12105],{"class":66},[49,17100,17101],{"class":51,"line":9262},[49,17102,3654],{"emptyLinePlaceholder":1330},[49,17104,17105],{"class":51,"line":9267},[49,17106,16564],{"class":66},[49,17108,17109],{"class":51,"line":9273},[49,17110,17111],{"class":55},"    \u002F\u002F姓名设置\n",[49,17113,17114,17117,17119,17121,17123],{"class":51,"line":9285},[49,17115,17116],{"class":66},"    p.",[49,17118,16317],{"class":62},[49,17120,1403],{"class":66},[49,17122,9168],{"class":1505},[49,17124,3973],{"class":66},[49,17126,17127,17129,17131,17134,17136,17139,17142,17144,17146],{"class":51,"line":9297},[49,17128,7781],{"class":66},[49,17130,2432],{"class":109},[49,17132,17133],{"class":1505}," \"姓名： \"",[49,17135,2701],{"class":109},[49,17137,17138],{"class":66}," p.",[49,17140,17141],{"class":62},"getName",[49,17143,14302],{"class":66},[49,17145,2432],{"class":109},[49,17147,10092],{"class":66},[49,17149,17150],{"class":51,"line":9309},[49,17151,3654],{"emptyLinePlaceholder":1330},[49,17153,17154],{"class":51,"line":10968},[49,17155,17156],{"class":55},"    \u002F\u002F年龄设置\n",[49,17158,17159,17161,17164,17166,17168],{"class":51,"line":10993},[49,17160,17116],{"class":66},[49,17162,17163],{"class":62},"setAge",[49,17165,1403],{"class":66},[49,17167,2047],{"class":73},[49,17169,3973],{"class":66},[49,17171,17172,17174,17176,17179,17181,17183,17186,17188,17190],{"class":51,"line":11016},[49,17173,7781],{"class":66},[49,17175,2432],{"class":109},[49,17177,17178],{"class":1505}," \"年龄： \"",[49,17180,2701],{"class":109},[49,17182,17138],{"class":66},[49,17184,17185],{"class":62},"getAge",[49,17187,14302],{"class":66},[49,17189,2432],{"class":109},[49,17191,10092],{"class":66},[49,17193,17194],{"class":51,"line":11040},[49,17195,3654],{"emptyLinePlaceholder":1330},[49,17197,17198],{"class":51,"line":11045},[49,17199,17200],{"class":55},"    \u002F\u002F情人设置\n",[49,17202,17203,17205,17208,17210,17213],{"class":51,"line":11050},[49,17204,17116],{"class":66},[49,17206,17207],{"class":62},"setLover",[49,17209,1403],{"class":66},[49,17211,17212],{"class":1505},"\"苍井\"",[49,17214,3973],{"class":66},[49,17216,17217,17220],{"class":51,"line":11055},[49,17218,17219],{"class":55},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[49,17221,17222],{"class":55},"  \u002F\u002F只写属性，不可以读取\n",[49,17224,17225],{"class":51,"line":11064},[49,17226,3654],{"emptyLinePlaceholder":1330},[49,17228,17229,17231,17233,17235],{"class":51,"line":11069},[49,17230,3557],{"class":62},[49,17232,1403],{"class":66},[49,17234,3562],{"class":1505},[49,17236,3973],{"class":66},[49,17238,17239],{"class":51,"line":11075},[49,17240,3654],{"emptyLinePlaceholder":1330},[49,17242,17243,17245,17247],{"class":51,"line":11096},[49,17244,5344],{"class":109},[49,17246,5347],{"class":73},[49,17248,83],{"class":66},[49,17250,17251],{"class":51,"line":11102},[49,17252,137],{"class":66},[183,17254,17256],{"id":17255},"_814封装案例","8.1.4封装案例",[591,17258,17259],{},[26,17260,17261,17264],{},[485,17262,17263],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[23,17266,17267,17270],{},[26,17268,17269],{},"求出立方体的面积和体积",[26,17271,17272],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[39,17274,17276],{"className":1391,"code":17275,"language":1393,"meta":44,"style":44},"#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",[46,17277,17278,17284,17294,17301,17305,17309,17314,17344,17348,17358,17368,17378,17382,17391,17395,17431,17435,17444,17448,17464,17468,17473,17482,17486,17493,17497,17506,17510,17517,17521,17530,17534,17541,17545,17550,17567,17571,17617,17621,17630,17634,17638,17642,17651,17655,17659,17664,17668,17674,17680,17686,17690,17694,17699,17721,17725,17779,17783,17791,17795,17800,17805,17818,17825,17841,17852,17858,17881,17887,17910,17924,17944,17950,17961,17984,18006,18011,18017,18031,18044,18049,18063,18068,18074,18079,18093,18098,18103,18117,18129,18134,18147,18152,18157,18162,18175,18180],{"__ignoreMap":44},[49,17279,17280,17282],{"class":51,"line":52},[49,17281,3204],{"class":109},[49,17283,3207],{"class":1505},[49,17285,17286,17288,17290,17292],{"class":51,"line":59},[49,17287,3212],{"class":109},[49,17289,3215],{"class":109},[49,17291,3218],{"class":62},[49,17293,83],{"class":66},[49,17295,17296,17298],{"class":51,"line":70},[49,17297,15945],{"class":109},[49,17299,17300],{"class":62}," Cube\n",[49,17302,17303],{"class":51,"line":86},[49,17304,2802],{"class":66},[49,17306,17307],{"class":51,"line":98},[49,17308,15967],{"class":109},[49,17310,17311],{"class":51,"line":121},[49,17312,17313],{"class":55},"    \u002F\u002F输入长宽高\n",[49,17315,17316,17318,17321,17323,17325,17328,17330,17332,17335,17337,17339,17342],{"class":51,"line":134},[49,17317,16160],{"class":109},[49,17319,17320],{"class":62}," setLwh",[49,17322,1403],{"class":66},[49,17324,1406],{"class":109},[49,17326,17327],{"class":6468}," l",[49,17329,1770],{"class":66},[49,17331,1406],{"class":109},[49,17333,17334],{"class":6468}," w",[49,17336,1770],{"class":66},[49,17338,1406],{"class":109},[49,17340,17341],{"class":6468}," h",[49,17343,1409],{"class":66},[49,17345,17346],{"class":51,"line":1085},[49,17347,3284],{"class":66},[49,17349,17350,17353,17355],{"class":51,"line":2574},[49,17351,17352],{"class":66},"        m_L",[49,17354,1448],{"class":109},[49,17356,17357],{"class":66},"l;\n",[49,17359,17360,17363,17365],{"class":51,"line":2586},[49,17361,17362],{"class":66},"        m_W",[49,17364,1448],{"class":109},[49,17366,17367],{"class":66},"w;\n",[49,17369,17370,17373,17375],{"class":51,"line":2867},[49,17371,17372],{"class":66},"        m_H",[49,17374,1448],{"class":109},[49,17376,17377],{"class":66},"h;\n",[49,17379,17380],{"class":51,"line":2872},[49,17381,3441],{"class":66},[49,17383,17384,17386,17389],{"class":51,"line":2878},[49,17385,3239],{"class":109},[49,17387,17388],{"class":62}," mianji",[49,17390,3230],{"class":66},[49,17392,17393],{"class":51,"line":2883},[49,17394,3284],{"class":66},[49,17396,17397,17399,17401,17403,17406,17408,17411,17413,17416,17418,17421,17423,17426,17428],{"class":51,"line":2897},[49,17398,16003],{"class":109},[49,17400,16006],{"class":73},[49,17402,1846],{"class":109},[49,17404,17405],{"class":66},"(m_L",[49,17407,1846],{"class":109},[49,17409,17410],{"class":66},"m_W ",[49,17412,1872],{"class":109},[49,17414,17415],{"class":66}," m_L",[49,17417,1846],{"class":109},[49,17419,17420],{"class":66},"m_H ",[49,17422,1872],{"class":109},[49,17424,17425],{"class":66}," m_W",[49,17427,1846],{"class":109},[49,17429,17430],{"class":66},"m_H);\n",[49,17432,17433],{"class":51,"line":2902},[49,17434,3441],{"class":66},[49,17436,17437,17439,17442],{"class":51,"line":2908},[49,17438,3239],{"class":109},[49,17440,17441],{"class":62}," tiji",[49,17443,3230],{"class":66},[49,17445,17446],{"class":51,"line":2929},[49,17447,3284],{"class":66},[49,17449,17450,17452,17454,17456,17459,17461],{"class":51,"line":2934},[49,17451,16003],{"class":109},[49,17453,17415],{"class":66},[49,17455,1846],{"class":109},[49,17457,17458],{"class":66},"m_W",[49,17460,1846],{"class":109},[49,17462,17463],{"class":66},"m_H;\n",[49,17465,17466],{"class":51,"line":2948},[49,17467,3441],{"class":66},[49,17469,17470],{"class":51,"line":2953},[49,17471,17472],{"class":55},"    \u002F\u002F获取长宽高\n",[49,17474,17475,17477,17480],{"class":51,"line":2982},[49,17476,3239],{"class":109},[49,17478,17479],{"class":62}," getLength",[49,17481,3230],{"class":66},[49,17483,17484],{"class":51,"line":2987},[49,17485,3284],{"class":66},[49,17487,17488,17490],{"class":51,"line":3004},[49,17489,16003],{"class":109},[49,17491,17492],{"class":66}," m_L;\n",[49,17494,17495],{"class":51,"line":3009},[49,17496,3441],{"class":66},[49,17498,17499,17501,17504],{"class":51,"line":3014},[49,17500,3239],{"class":109},[49,17502,17503],{"class":62}," getWidth",[49,17505,3230],{"class":66},[49,17507,17508],{"class":51,"line":3019},[49,17509,3284],{"class":66},[49,17511,17512,17514],{"class":51,"line":3033},[49,17513,16003],{"class":109},[49,17515,17516],{"class":66}," m_W;\n",[49,17518,17519],{"class":51,"line":3038},[49,17520,3441],{"class":66},[49,17522,17523,17525,17528],{"class":51,"line":3831},[49,17524,3239],{"class":109},[49,17526,17527],{"class":62}," getHeight",[49,17529,3230],{"class":66},[49,17531,17532],{"class":51,"line":3845},[49,17533,3284],{"class":66},[49,17535,17536,17538],{"class":51,"line":3853},[49,17537,16003],{"class":109},[49,17539,17540],{"class":66}," m_H;\n",[49,17542,17543],{"class":51,"line":3858},[49,17544,3441],{"class":66},[49,17546,17547],{"class":51,"line":3864},[49,17548,17549],{"class":55},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[49,17551,17552,17555,17558,17560,17563,17565],{"class":51,"line":3870},[49,17553,17554],{"class":109},"    bool",[49,17556,17557],{"class":62}," isEqual",[49,17559,1403],{"class":66},[49,17561,17562],{"class":62},"Cube",[49,17564,4103],{"class":6468},[49,17566,1409],{"class":66},[49,17568,17569],{"class":51,"line":3875},[49,17570,3284],{"class":66},[49,17572,17573,17575,17578,17581,17583,17585,17588,17590,17593,17596,17598,17600,17603,17605,17607,17610,17612,17614],{"class":51,"line":9200},[49,17574,3751],{"class":109},[49,17576,17577],{"class":66}," (c.",[49,17579,17580],{"class":62},"getLength",[49,17582,14302],{"class":66},[49,17584,4203],{"class":109},[49,17586,17587],{"class":66}," m_L ",[49,17589,2970],{"class":109},[49,17591,17592],{"class":66}," c.",[49,17594,17595],{"class":62},"getWidth",[49,17597,14302],{"class":66},[49,17599,4203],{"class":109},[49,17601,17602],{"class":66}," m_W ",[49,17604,2970],{"class":109},[49,17606,17592],{"class":66},[49,17608,17609],{"class":62},"getHeight",[49,17611,14302],{"class":66},[49,17613,4203],{"class":109},[49,17615,17616],{"class":66}," m_H)\n",[49,17618,17619],{"class":51,"line":9224},[49,17620,3764],{"class":66},[49,17622,17623,17625,17628],{"class":51,"line":9229},[49,17624,16982],{"class":109},[49,17626,17627],{"class":73}," true",[49,17629,83],{"class":66},[49,17631,17632],{"class":51,"line":9235},[49,17633,3783],{"class":66},[49,17635,17636],{"class":51,"line":9262},[49,17637,3824],{"class":109},[49,17639,17640],{"class":51,"line":9267},[49,17641,3764],{"class":66},[49,17643,17644,17646,17649],{"class":51,"line":9273},[49,17645,16982],{"class":109},[49,17647,17648],{"class":73}," false",[49,17650,83],{"class":66},[49,17652,17653],{"class":51,"line":9285},[49,17654,3783],{"class":66},[49,17656,17657],{"class":51,"line":9297},[49,17658,3441],{"class":66},[49,17660,17661],{"class":51,"line":9309},[49,17662,17663],{"class":55},"    \u002F\u002F私有属性\n",[49,17665,17666],{"class":51,"line":10968},[49,17667,16473],{"class":109},[49,17669,17670,17672],{"class":51,"line":10993},[49,17671,3239],{"class":109},[49,17673,17492],{"class":66},[49,17675,17676,17678],{"class":51,"line":11016},[49,17677,3239],{"class":109},[49,17679,17516],{"class":66},[49,17681,17682,17684],{"class":51,"line":11040},[49,17683,3239],{"class":109},[49,17685,17540],{"class":66},[49,17687,17688],{"class":51,"line":11045},[49,17689,3654],{"emptyLinePlaceholder":1330},[49,17691,17692],{"class":51,"line":11050},[49,17693,5249],{"class":66},[49,17695,17696],{"class":51,"line":11055},[49,17697,17698],{"class":55},"\u002F\u002F全局函数判断两个立方体是否相等\n",[49,17700,17701,17703,17705,17707,17709,17712,17714,17716,17719],{"class":51,"line":11064},[49,17702,2611],{"class":109},[49,17704,17557],{"class":62},[49,17706,1403],{"class":66},[49,17708,17562],{"class":62},[49,17710,17711],{"class":6468}," c1",[49,17713,1770],{"class":66},[49,17715,17562],{"class":62},[49,17717,17718],{"class":6468}," c2",[49,17720,1409],{"class":66},[49,17722,17723],{"class":51,"line":11069},[49,17724,2802],{"class":66},[49,17726,17727,17729,17732,17734,17736,17738,17741,17743,17746,17748,17750,17752,17754,17756,17758,17760,17762,17764,17766,17768,17770,17772,17774,17776],{"class":51,"line":11075},[49,17728,5344],{"class":109},[49,17730,17731],{"class":66}," (c1.",[49,17733,17580],{"class":62},[49,17735,14302],{"class":66},[49,17737,4203],{"class":109},[49,17739,17740],{"class":66}," c2.",[49,17742,17580],{"class":62},[49,17744,17745],{"class":66},"()) ",[49,17747,2970],{"class":109},[49,17749,17731],{"class":66},[49,17751,17595],{"class":62},[49,17753,14302],{"class":66},[49,17755,4203],{"class":109},[49,17757,17740],{"class":66},[49,17759,17595],{"class":62},[49,17761,17745],{"class":66},[49,17763,2970],{"class":109},[49,17765,17731],{"class":66},[49,17767,17609],{"class":62},[49,17769,14302],{"class":66},[49,17771,4203],{"class":109},[49,17773,17740],{"class":66},[49,17775,17609],{"class":62},[49,17777,17778],{"class":66},"());\n",[49,17780,17781],{"class":51,"line":11096},[49,17782,137],{"class":66},[49,17784,17785,17787,17789],{"class":51,"line":11102},[49,17786,1406],{"class":109},[49,17788,3227],{"class":62},[49,17790,3230],{"class":66},[49,17792,17793],{"class":51,"line":11116},[49,17794,2802],{"class":66},[49,17796,17797],{"class":51,"line":11122},[49,17798,17799],{"class":66},"    Cube c1;\n",[49,17801,17802],{"class":51,"line":11149},[49,17803,17804],{"class":55},"    \u002F\u002F输入立方体的长宽高\n",[49,17806,17807,17809,17811,17814,17816],{"class":51,"line":11158},[49,17808,2807],{"class":66},[49,17810,2432],{"class":109},[49,17812,17813],{"class":1505},"\"请输入第一个立方体的长、宽、高：\"",[49,17815,2432],{"class":109},[49,17817,2454],{"class":66},[49,17819,17820,17822],{"class":51,"line":11164},[49,17821,3239],{"class":109},[49,17823,17824],{"class":66}," l,w,h,l1,w1,h1;\n",[49,17826,17827,17829,17831,17833,17835,17837,17839],{"class":51,"line":11172},[49,17828,3266],{"class":66},[49,17830,2686],{"class":109},[49,17832,1909],{"class":66},[49,17834,2686],{"class":109},[49,17836,2185],{"class":66},[49,17838,2686],{"class":109},[49,17840,17377],{"class":66},[49,17842,17843,17846,17849],{"class":51,"line":11177},[49,17844,17845],{"class":66},"    c1.",[49,17847,17848],{"class":62},"setLwh",[49,17850,17851],{"class":66},"(l,w,h);\n",[49,17853,17855],{"class":51,"line":17854},66,[49,17856,17857],{"class":55},"    \u002F\u002F面积\n",[49,17859,17861,17863,17865,17868,17870,17872,17875,17877,17879],{"class":51,"line":17860},67,[49,17862,2807],{"class":66},[49,17864,2432],{"class":109},[49,17866,17867],{"class":1505},"\"立方体的表面积为：\"",[49,17869,2432],{"class":109},[49,17871,16081],{"class":66},[49,17873,17874],{"class":62},"mianji",[49,17876,3681],{"class":66},[49,17878,2432],{"class":109},[49,17880,2454],{"class":66},[49,17882,17884],{"class":51,"line":17883},68,[49,17885,17886],{"class":55},"    \u002F\u002F体积\n",[49,17888,17890,17892,17894,17897,17899,17901,17904,17906,17908],{"class":51,"line":17889},69,[49,17891,2807],{"class":66},[49,17893,2432],{"class":109},[49,17895,17896],{"class":1505},"\"立方体的体积为：\"",[49,17898,2432],{"class":109},[49,17900,16081],{"class":66},[49,17902,17903],{"class":62},"tiji",[49,17905,3681],{"class":66},[49,17907,2432],{"class":109},[49,17909,2454],{"class":66},[49,17911,17913,17915,17917,17920,17922],{"class":51,"line":17912},70,[49,17914,2807],{"class":66},[49,17916,2432],{"class":109},[49,17918,17919],{"class":1505},"\"请输入第二个立方体的长、宽、高：\"",[49,17921,2432],{"class":109},[49,17923,2454],{"class":66},[49,17925,17927,17929,17931,17934,17936,17939,17941],{"class":51,"line":17926},71,[49,17928,3266],{"class":66},[49,17930,2686],{"class":109},[49,17932,17933],{"class":66},"l1",[49,17935,2686],{"class":109},[49,17937,17938],{"class":66},"w1",[49,17940,2686],{"class":109},[49,17942,17943],{"class":66},"h1;\n",[49,17945,17947],{"class":51,"line":17946},72,[49,17948,17949],{"class":66},"    Cube c2;\n",[49,17951,17953,17956,17958],{"class":51,"line":17952},73,[49,17954,17955],{"class":66},"    c2.",[49,17957,17848],{"class":62},[49,17959,17960],{"class":66},"(l1,w1,h1);\n",[49,17962,17964,17966,17968,17971,17973,17976,17978,17980,17982],{"class":51,"line":17963},74,[49,17965,2807],{"class":66},[49,17967,2432],{"class":109},[49,17969,17970],{"class":1505},"\"第二个立方体的表面积为：\"",[49,17972,2432],{"class":109},[49,17974,17975],{"class":66},"c2.",[49,17977,17874],{"class":62},[49,17979,3681],{"class":66},[49,17981,2432],{"class":109},[49,17983,2454],{"class":66},[49,17985,17987,17989,17991,17994,17996,17998,18000,18002,18004],{"class":51,"line":17986},75,[49,17988,2807],{"class":66},[49,17990,2432],{"class":109},[49,17992,17993],{"class":1505},"\"第二个立方体的体积为：\"",[49,17995,2432],{"class":109},[49,17997,17975],{"class":66},[49,17999,17903],{"class":62},[49,18001,3681],{"class":66},[49,18003,2432],{"class":109},[49,18005,2454],{"class":66},[49,18007,18009],{"class":51,"line":18008},76,[49,18010,3654],{"emptyLinePlaceholder":1330},[49,18012,18014],{"class":51,"line":18013},77,[49,18015,18016],{"class":55},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[49,18018,18020,18022,18024,18027,18029],{"class":51,"line":18019},78,[49,18021,2807],{"class":66},[49,18023,2432],{"class":109},[49,18025,18026],{"class":1505},"\"内部函数判断结果：\"",[49,18028,2432],{"class":109},[49,18030,2454],{"class":66},[49,18032,18034,18036,18038,18041],{"class":51,"line":18033},79,[49,18035,4355],{"class":109},[49,18037,17731],{"class":66},[49,18039,18040],{"class":62},"isEqual",[49,18042,18043],{"class":66},"(c2))\n",[49,18045,18047],{"class":51,"line":18046},80,[49,18048,3284],{"class":66},[49,18050,18052,18054,18056,18059,18061],{"class":51,"line":18051},81,[49,18053,4705],{"class":66},[49,18055,2432],{"class":109},[49,18057,18058],{"class":1505},"\"两个立方体相等\"",[49,18060,2432],{"class":109},[49,18062,2454],{"class":66},[49,18064,18066],{"class":51,"line":18065},82,[49,18067,3441],{"class":66},[49,18069,18071],{"class":51,"line":18070},83,[49,18072,18073],{"class":109},"    else\n",[49,18075,18077],{"class":51,"line":18076},84,[49,18078,3284],{"class":66},[49,18080,18082,18084,18086,18089,18091],{"class":51,"line":18081},85,[49,18083,4705],{"class":66},[49,18085,2432],{"class":109},[49,18087,18088],{"class":1505},"\"两个立方体不相等\"",[49,18090,2432],{"class":109},[49,18092,2454],{"class":66},[49,18094,18096],{"class":51,"line":18095},86,[49,18097,3441],{"class":66},[49,18099,18101],{"class":51,"line":18100},87,[49,18102,3654],{"emptyLinePlaceholder":1330},[49,18104,18106,18108,18110,18113,18115],{"class":51,"line":18105},88,[49,18107,2807],{"class":66},[49,18109,2432],{"class":109},[49,18111,18112],{"class":1505},"\"全局函数判断结果：\"",[49,18114,2432],{"class":109},[49,18116,2454],{"class":66},[49,18118,18120,18122,18124,18126],{"class":51,"line":18119},89,[49,18121,4355],{"class":109},[49,18123,2913],{"class":66},[49,18125,18040],{"class":62},[49,18127,18128],{"class":66},"(c1, c2))\n",[49,18130,18132],{"class":51,"line":18131},90,[49,18133,3284],{"class":66},[49,18135,18137,18139,18141,18143,18145],{"class":51,"line":18136},91,[49,18138,4705],{"class":66},[49,18140,2432],{"class":109},[49,18142,18058],{"class":1505},[49,18144,2432],{"class":109},[49,18146,2454],{"class":66},[49,18148,18150],{"class":51,"line":18149},92,[49,18151,3441],{"class":66},[49,18153,18155],{"class":51,"line":18154},93,[49,18156,18073],{"class":109},[49,18158,18160],{"class":51,"line":18159},94,[49,18161,3284],{"class":66},[49,18163,18165,18167,18169,18171,18173],{"class":51,"line":18164},95,[49,18166,4705],{"class":66},[49,18168,2432],{"class":109},[49,18170,18088],{"class":1505},[49,18172,2432],{"class":109},[49,18174,2454],{"class":66},[49,18176,18178],{"class":51,"line":18177},96,[49,18179,3441],{"class":66},[49,18181,18183],{"class":51,"line":18182},97,[49,18184,137],{"class":66},[591,18186,18187],{"start":59},[26,18188,18189],{},[485,18190,18191],{},"练习案例2：点和圆的关系",[23,18193,18194],{},[26,18195,18196],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[39,18198,18200],{"className":1391,"code":18199,"language":1393,"meta":44,"style":44},"#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",[46,18201,18202,18208,18218,18225,18232,18236,18240,18245,18279,18284,18300,18314,18318,18322,18329,18336,18340,18346,18350,18354,18358,18380,18403,18408,18422,18437,18441,18445,18451,18456,18461,18465,18491,18495,18525,18553,18581,18598,18602,18615,18619,18623,18627,18640,18644,18648,18656,18660,18664,18668,18673,18677,18688,18695,18704,18714,18725,18732,18745,18756,18766,18777,18784,18798,18803,18813,18821],{"__ignoreMap":44},[49,18203,18204,18206],{"class":51,"line":52},[49,18205,3204],{"class":109},[49,18207,3207],{"class":1505},[49,18209,18210,18212,18214,18216],{"class":51,"line":59},[49,18211,3212],{"class":109},[49,18213,3215],{"class":109},[49,18215,3218],{"class":62},[49,18217,83],{"class":66},[49,18219,18220,18222],{"class":51,"line":70},[49,18221,3204],{"class":109},[49,18223,18224],{"class":1505},"\u003Ccmath>\n",[49,18226,18227,18229],{"class":51,"line":86},[49,18228,15945],{"class":109},[49,18230,18231],{"class":62}," Point\n",[49,18233,18234],{"class":51,"line":98},[49,18235,2802],{"class":66},[49,18237,18238],{"class":51,"line":121},[49,18239,15967],{"class":109},[49,18241,18242],{"class":51,"line":134},[49,18243,18244],{"class":55},"    \u002F\u002F赋值\n",[49,18246,18247,18249,18252,18254,18256,18259,18261,18263,18266,18269,18271,18274,18276],{"class":51,"line":1085},[49,18248,16160],{"class":109},[49,18250,18251],{"class":62}," setPoint",[49,18253,1403],{"class":66},[49,18255,15289],{"class":109},[49,18257,18258],{"class":6468}," x",[49,18260,13687],{"class":66},[49,18262,15289],{"class":109},[49,18264,18265],{"class":6468}," y",[49,18267,18268],{"class":66},") { m_x ",[49,18270,1448],{"class":109},[49,18272,18273],{"class":66}," x; m_y ",[49,18275,1448],{"class":109},[49,18277,18278],{"class":66}," y; }\n",[49,18280,18281],{"class":51,"line":2574},[49,18282,18283],{"class":55},"    \u002F\u002F获取坐标\n",[49,18285,18286,18288,18291,18294,18297],{"class":51,"line":2586},[49,18287,15989],{"class":109},[49,18289,18290],{"class":62}," getX",[49,18292,18293],{"class":66},"() { ",[49,18295,18296],{"class":109},"return",[49,18298,18299],{"class":66}," m_x; }\n",[49,18301,18302,18304,18307,18309,18311],{"class":51,"line":2867},[49,18303,15989],{"class":109},[49,18305,18306],{"class":62}," getY",[49,18308,18293],{"class":66},[49,18310,18296],{"class":109},[49,18312,18313],{"class":66}," m_y; }\n",[49,18315,18316],{"class":51,"line":2872},[49,18317,3654],{"emptyLinePlaceholder":1330},[49,18319,18320],{"class":51,"line":2878},[49,18321,16473],{"class":109},[49,18323,18324,18326],{"class":51,"line":2883},[49,18325,15989],{"class":109},[49,18327,18328],{"class":66}," m_x;\n",[49,18330,18331,18333],{"class":51,"line":2897},[49,18332,15989],{"class":109},[49,18334,18335],{"class":66}," m_y;\n",[49,18337,18338],{"class":51,"line":2902},[49,18339,5249],{"class":66},[49,18341,18342,18344],{"class":51,"line":2908},[49,18343,15945],{"class":109},[49,18345,15948],{"class":62},[49,18347,18348],{"class":51,"line":2929},[49,18349,2802],{"class":66},[49,18351,18352],{"class":51,"line":2934},[49,18353,15967],{"class":109},[49,18355,18356],{"class":51,"line":2948},[49,18357,18244],{"class":55},[49,18359,18360,18362,18365,18367,18369,18372,18375,18377],{"class":51,"line":2953},[49,18361,16160],{"class":109},[49,18363,18364],{"class":62}," setRadius",[49,18366,1403],{"class":66},[49,18368,15289],{"class":109},[49,18370,18371],{"class":6468}," r",[49,18373,18374],{"class":66},") { m_r ",[49,18376,1448],{"class":109},[49,18378,18379],{"class":66}," r; }\n",[49,18381,18382,18384,18387,18389,18392,18395,18398,18400],{"class":51,"line":2982},[49,18383,16160],{"class":109},[49,18385,18386],{"class":62}," setCenter",[49,18388,1403],{"class":66},[49,18390,18391],{"class":62},"Point",[49,18393,18394],{"class":6468}," center",[49,18396,18397],{"class":66},") { m_center ",[49,18399,1448],{"class":109},[49,18401,18402],{"class":66}," center; }\n",[49,18404,18405],{"class":51,"line":2987},[49,18406,18407],{"class":55},"    \u002F\u002F获取属性\n",[49,18409,18410,18412,18415,18417,18419],{"class":51,"line":3004},[49,18411,15989],{"class":109},[49,18413,18414],{"class":62}," getRadius",[49,18416,18293],{"class":66},[49,18418,18296],{"class":109},[49,18420,18421],{"class":66}," m_r; }\n",[49,18423,18424,18427,18430,18432,18434],{"class":51,"line":3009},[49,18425,18426],{"class":62},"    Point",[49,18428,18429],{"class":62}," getCenter",[49,18431,18293],{"class":66},[49,18433,18296],{"class":109},[49,18435,18436],{"class":66}," m_center; }\n",[49,18438,18439],{"class":51,"line":3014},[49,18440,3654],{"emptyLinePlaceholder":1330},[49,18442,18443],{"class":51,"line":3019},[49,18444,16473],{"class":109},[49,18446,18447,18449],{"class":51,"line":3033},[49,18448,15989],{"class":109},[49,18450,15979],{"class":66},[49,18452,18453],{"class":51,"line":3038},[49,18454,18455],{"class":55},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[49,18457,18458],{"class":51,"line":3831},[49,18459,18460],{"class":66},"    Point m_center;\n",[49,18462,18463],{"class":51,"line":3845},[49,18464,5249],{"class":66},[49,18466,18467,18469,18472,18474,18477,18479,18481,18483,18485,18487,18489],{"class":51,"line":3853},[49,18468,6616],{"class":109},[49,18470,18471],{"class":62}," isInCircle",[49,18473,1403],{"class":66},[49,18475,18476],{"class":62},"Circle",[49,18478,11836],{"class":109},[49,18480,1680],{"class":6468},[49,18482,1770],{"class":66},[49,18484,18391],{"class":62},[49,18486,11836],{"class":109},[49,18488,19],{"class":6468},[49,18490,1409],{"class":66},[49,18492,18493],{"class":51,"line":3858},[49,18494,2802],{"class":66},[49,18496,18497,18499,18502,18504,18506,18509,18512,18515,18517,18519,18521,18523],{"class":51,"line":3864},[49,18498,15989],{"class":109},[49,18500,18501],{"class":66}," dx ",[49,18503,1448],{"class":109},[49,18505,17592],{"class":66},[49,18507,18508],{"class":62},"getCenter",[49,18510,18511],{"class":66},"().",[49,18513,18514],{"class":62},"getX",[49,18516,14302],{"class":66},[49,18518,1923],{"class":109},[49,18520,17138],{"class":66},[49,18522,18514],{"class":62},[49,18524,6888],{"class":66},[49,18526,18527,18529,18532,18534,18536,18538,18540,18543,18545,18547,18549,18551],{"class":51,"line":3870},[49,18528,15989],{"class":109},[49,18530,18531],{"class":66}," dy ",[49,18533,1448],{"class":109},[49,18535,17592],{"class":66},[49,18537,18508],{"class":62},[49,18539,18511],{"class":66},[49,18541,18542],{"class":62},"getY",[49,18544,14302],{"class":66},[49,18546,1923],{"class":109},[49,18548,17138],{"class":66},[49,18550,18542],{"class":62},[49,18552,6888],{"class":66},[49,18554,18555,18557,18560,18562,18565,18568,18570,18572,18574,18576,18578],{"class":51,"line":3875},[49,18556,15989],{"class":109},[49,18558,18559],{"class":66}," distance ",[49,18561,1448],{"class":109},[49,18563,18564],{"class":62}," sqrt",[49,18566,18567],{"class":66},"(dx ",[49,18569,1846],{"class":109},[49,18571,18501],{"class":66},[49,18573,1872],{"class":109},[49,18575,18531],{"class":66},[49,18577,1846],{"class":109},[49,18579,18580],{"class":66}," dy);\n",[49,18582,18583,18585,18588,18590,18592,18595],{"class":51,"line":9200},[49,18584,4355],{"class":109},[49,18586,18587],{"class":66}," (distance ",[49,18589,2300],{"class":109},[49,18591,17592],{"class":66},[49,18593,18594],{"class":62},"getRadius",[49,18596,18597],{"class":66},"())\n",[49,18599,18600],{"class":51,"line":9224},[49,18601,3284],{"class":66},[49,18603,18604,18606,18608,18611,18613],{"class":51,"line":9229},[49,18605,10921],{"class":66},[49,18607,2432],{"class":109},[49,18609,18610],{"class":1505}," \"点在圆内\"",[49,18612,2701],{"class":109},[49,18614,10092],{"class":66},[49,18616,18617],{"class":51,"line":9235},[49,18618,3441],{"class":66},[49,18620,18621],{"class":51,"line":9262},[49,18622,18073],{"class":109},[49,18624,18625],{"class":51,"line":9267},[49,18626,3284],{"class":66},[49,18628,18629,18631,18633,18636,18638],{"class":51,"line":9273},[49,18630,10921],{"class":66},[49,18632,2432],{"class":109},[49,18634,18635],{"class":1505}," \"点在圆外\"",[49,18637,2701],{"class":109},[49,18639,10092],{"class":66},[49,18641,18642],{"class":51,"line":9285},[49,18643,3441],{"class":66},[49,18645,18646],{"class":51,"line":9297},[49,18647,137],{"class":66},[49,18649,18650,18652,18654],{"class":51,"line":9309},[49,18651,1406],{"class":109},[49,18653,3227],{"class":62},[49,18655,3230],{"class":66},[49,18657,18658],{"class":51,"line":10968},[49,18659,2802],{"class":66},[49,18661,18662],{"class":51,"line":10993},[49,18663,16304],{"class":55},[49,18665,18666],{"class":51,"line":11016},[49,18667,16051],{"class":66},[49,18669,18670],{"class":51,"line":11040},[49,18671,18672],{"class":66},"    Point p1;\n",[49,18674,18675],{"class":51,"line":11045},[49,18676,18244],{"class":55},[49,18678,18679,18681,18683,18686],{"class":51,"line":11050},[49,18680,2807],{"class":66},[49,18682,2432],{"class":109},[49,18684,18685],{"class":1505},"\"请输入圆的半径：\"",[49,18687,83],{"class":66},[49,18689,18690,18692],{"class":51,"line":11055},[49,18691,15989],{"class":109},[49,18693,18694],{"class":66}," r;\n",[49,18696,18697,18699,18701],{"class":51,"line":11064},[49,18698,3266],{"class":66},[49,18700,2686],{"class":109},[49,18702,18703],{"class":66},"r;\n",[49,18705,18706,18708,18711],{"class":51,"line":11069},[49,18707,17845],{"class":66},[49,18709,18710],{"class":62},"setRadius",[49,18712,18713],{"class":66},"(r);\n",[49,18715,18716,18718,18720,18723],{"class":51,"line":11075},[49,18717,2807],{"class":66},[49,18719,2432],{"class":109},[49,18721,18722],{"class":1505},"\"请输入圆心坐标：\"",[49,18724,83],{"class":66},[49,18726,18727,18729],{"class":51,"line":11096},[49,18728,15989],{"class":109},[49,18730,18731],{"class":66}," x, y;\n",[49,18733,18734,18736,18738,18740,18742],{"class":51,"line":11102},[49,18735,3266],{"class":66},[49,18737,2686],{"class":109},[49,18739,2210],{"class":66},[49,18741,2686],{"class":109},[49,18743,18744],{"class":66},"y;\n",[49,18746,18747,18750,18753],{"class":51,"line":11116},[49,18748,18749],{"class":66},"    p1.",[49,18751,18752],{"class":62},"setPoint",[49,18754,18755],{"class":66},"(x, y);\n",[49,18757,18758,18760,18763],{"class":51,"line":11122},[49,18759,17845],{"class":66},[49,18761,18762],{"class":62},"setCenter",[49,18764,18765],{"class":66},"(p1);\n",[49,18767,18768,18770,18772,18775],{"class":51,"line":11149},[49,18769,2807],{"class":66},[49,18771,2432],{"class":109},[49,18773,18774],{"class":1505},"\"请输入测试点坐标：\"",[49,18776,83],{"class":66},[49,18778,18779,18781],{"class":51,"line":11158},[49,18780,15989],{"class":109},[49,18782,18783],{"class":66}," x1, y1;\n",[49,18785,18786,18788,18790,18793,18795],{"class":51,"line":11164},[49,18787,3266],{"class":66},[49,18789,2686],{"class":109},[49,18791,18792],{"class":66},"x1",[49,18794,2686],{"class":109},[49,18796,18797],{"class":66},"y1;\n",[49,18799,18800],{"class":51,"line":11172},[49,18801,18802],{"class":66},"    Point p2;\n",[49,18804,18805,18808,18810],{"class":51,"line":11177},[49,18806,18807],{"class":66},"    p2.",[49,18809,18752],{"class":62},[49,18811,18812],{"class":66},"(x1, y1);\n",[49,18814,18815,18818],{"class":51,"line":17854},[49,18816,18817],{"class":62},"    isInCircle",[49,18819,18820],{"class":66},"(c1, p2);\n",[49,18822,18823],{"class":51,"line":17860},[49,18824,137],{"class":66},[19,18826,18827],{},"在类中可以让另一个类作为本来的成员",[19,18829,18830],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18832,18833],{},"创建point.h",[39,18835,18837],{"className":1391,"code":18836,"language":1393,"meta":44,"style":44},"#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",[46,18838,18839,18850,18856,18866,18872,18876,18881,18885,18889,18909,18913,18921,18929,18933,18937,18943,18949],{"__ignoreMap":44},[49,18840,18841,18844,18847],{"class":51,"line":52},[49,18842,18843],{"class":109},"#pragma",[49,18845,18846],{"class":62}," once",[49,18848,18849],{"class":55}," \u002F\u002F防止头文件重复包含\n",[49,18851,18852,18854],{"class":51,"line":59},[49,18853,3204],{"class":109},[49,18855,3207],{"class":1505},[49,18857,18858,18860,18862,18864],{"class":51,"line":70},[49,18859,3212],{"class":109},[49,18861,3215],{"class":109},[49,18863,3218],{"class":62},[49,18865,83],{"class":66},[49,18867,18868,18870],{"class":51,"line":86},[49,18869,15945],{"class":109},[49,18871,18231],{"class":62},[49,18873,18874],{"class":51,"line":98},[49,18875,2802],{"class":66},[49,18877,18878],{"class":51,"line":121},[49,18879,18880],{"class":55},"\u002F\u002F做好声明与变量定义就可以\n",[49,18882,18883],{"class":51,"line":134},[49,18884,15967],{"class":109},[49,18886,18887],{"class":51,"line":1085},[49,18888,18244],{"class":55},[49,18890,18891,18893,18895,18897,18899,18901,18903,18905,18907],{"class":51,"line":2574},[49,18892,16160],{"class":109},[49,18894,18251],{"class":62},[49,18896,1403],{"class":66},[49,18898,15289],{"class":109},[49,18900,18258],{"class":6468},[49,18902,13687],{"class":66},[49,18904,15289],{"class":109},[49,18906,18265],{"class":6468},[49,18908,3973],{"class":66},[49,18910,18911],{"class":51,"line":2586},[49,18912,18283],{"class":55},[49,18914,18915,18917,18919],{"class":51,"line":2867},[49,18916,15989],{"class":109},[49,18918,18290],{"class":62},[49,18920,6888],{"class":66},[49,18922,18923,18925,18927],{"class":51,"line":2872},[49,18924,15989],{"class":109},[49,18926,18306],{"class":62},[49,18928,6888],{"class":66},[49,18930,18931],{"class":51,"line":2878},[49,18932,3654],{"emptyLinePlaceholder":1330},[49,18934,18935],{"class":51,"line":2883},[49,18936,16473],{"class":109},[49,18938,18939,18941],{"class":51,"line":2897},[49,18940,15989],{"class":109},[49,18942,18328],{"class":66},[49,18944,18945,18947],{"class":51,"line":2902},[49,18946,15989],{"class":109},[49,18948,18335],{"class":66},[49,18950,18951],{"class":51,"line":2908},[49,18952,5249],{"class":66},[19,18954,18955],{},"创建point.cpp",[39,18957,18959],{"className":1391,"code":18958,"language":1393,"meta":44,"style":44},"#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",[46,18960,18961,18968,18973,19007,19011,19027],{"__ignoreMap":44},[49,18962,18963,18965],{"class":51,"line":52},[49,18964,3204],{"class":109},[49,18966,18967],{"class":1505},"\u003Cpoint.h>\n",[49,18969,18970],{"class":51,"line":59},[49,18971,18972],{"class":55},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[49,18974,18975,18977,18980,18983,18985,18987,18989,18991,18993,18995,18997,18999,19001,19003,19005],{"class":51,"line":70},[49,18976,16160],{"class":109},[49,18978,18979],{"class":62}," Point",[49,18981,18982],{"class":66},"::",[49,18984,18752],{"class":62},[49,18986,1403],{"class":66},[49,18988,15289],{"class":109},[49,18990,18258],{"class":6468},[49,18992,13687],{"class":66},[49,18994,15289],{"class":109},[49,18996,18265],{"class":6468},[49,18998,18268],{"class":66},[49,19000,1448],{"class":109},[49,19002,18273],{"class":66},[49,19004,1448],{"class":109},[49,19006,18278],{"class":66},[49,19008,19009],{"class":51,"line":86},[49,19010,18283],{"class":55},[49,19012,19013,19015,19017,19019,19021,19023,19025],{"class":51,"line":98},[49,19014,15989],{"class":109},[49,19016,18979],{"class":62},[49,19018,18982],{"class":66},[49,19020,18514],{"class":62},[49,19022,18293],{"class":66},[49,19024,18296],{"class":109},[49,19026,18299],{"class":66},[49,19028,19029,19031,19033,19035,19037,19039,19041],{"class":51,"line":121},[49,19030,15989],{"class":109},[49,19032,18979],{"class":62},[49,19034,18982],{"class":66},[49,19036,18542],{"class":62},[49,19038,18293],{"class":66},[49,19040,18296],{"class":109},[49,19042,18313],{"class":66},[19,19044,19045],{},"创建circle.h",[39,19047,19049],{"className":1391,"code":19048,"language":1393,"meta":44,"style":44},"#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",[46,19050,19051,19058,19064,19074,19080,19086,19090,19094,19098,19112,19126,19130,19138,19146,19150,19154,19160,19164,19168],{"__ignoreMap":44},[49,19052,19053,19055],{"class":51,"line":52},[49,19054,18843],{"class":109},[49,19056,19057],{"class":62}," once\n",[49,19059,19060,19062],{"class":51,"line":59},[49,19061,3204],{"class":109},[49,19063,3207],{"class":1505},[49,19065,19066,19068,19070,19072],{"class":51,"line":70},[49,19067,3212],{"class":109},[49,19069,3215],{"class":109},[49,19071,3218],{"class":62},[49,19073,83],{"class":66},[49,19075,19076,19078],{"class":51,"line":86},[49,19077,3204],{"class":109},[49,19079,18967],{"class":1505},[49,19081,19082,19084],{"class":51,"line":98},[49,19083,15945],{"class":109},[49,19085,15948],{"class":62},[49,19087,19088],{"class":51,"line":121},[49,19089,2802],{"class":66},[49,19091,19092],{"class":51,"line":134},[49,19093,15967],{"class":109},[49,19095,19096],{"class":51,"line":1085},[49,19097,18244],{"class":55},[49,19099,19100,19102,19104,19106,19108,19110],{"class":51,"line":2574},[49,19101,16160],{"class":109},[49,19103,18364],{"class":62},[49,19105,1403],{"class":66},[49,19107,15289],{"class":109},[49,19109,18371],{"class":6468},[49,19111,3973],{"class":66},[49,19113,19114,19116,19118,19120,19122,19124],{"class":51,"line":2586},[49,19115,16160],{"class":109},[49,19117,18386],{"class":62},[49,19119,1403],{"class":66},[49,19121,18391],{"class":62},[49,19123,18394],{"class":6468},[49,19125,3973],{"class":66},[49,19127,19128],{"class":51,"line":2867},[49,19129,18407],{"class":55},[49,19131,19132,19134,19136],{"class":51,"line":2872},[49,19133,15989],{"class":109},[49,19135,18414],{"class":62},[49,19137,6888],{"class":66},[49,19139,19140,19142,19144],{"class":51,"line":2878},[49,19141,18426],{"class":62},[49,19143,18429],{"class":62},[49,19145,6888],{"class":66},[49,19147,19148],{"class":51,"line":2883},[49,19149,3654],{"emptyLinePlaceholder":1330},[49,19151,19152],{"class":51,"line":2897},[49,19153,16473],{"class":109},[49,19155,19156,19158],{"class":51,"line":2902},[49,19157,15989],{"class":109},[49,19159,15979],{"class":66},[49,19161,19162],{"class":51,"line":2908},[49,19163,18455],{"class":55},[49,19165,19166],{"class":51,"line":2929},[49,19167,18460],{"class":66},[49,19169,19170],{"class":51,"line":2934},[49,19171,5249],{"class":66},[19,19173,19174],{},"创建circle.cpp",[39,19176,19178],{"className":1391,"code":19177,"language":1393,"meta":44,"style":44},"#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",[46,19179,19180,19187,19210,19232,19237,19253],{"__ignoreMap":44},[49,19181,19182,19184],{"class":51,"line":52},[49,19183,3204],{"class":109},[49,19185,19186],{"class":1505},"\u003Ccircle.h>\n",[49,19188,19189,19191,19194,19196,19198,19200,19202,19204,19206,19208],{"class":51,"line":59},[49,19190,6616],{"class":109},[49,19192,19193],{"class":62}," Circle",[49,19195,18982],{"class":66},[49,19197,18710],{"class":62},[49,19199,1403],{"class":66},[49,19201,15289],{"class":109},[49,19203,18371],{"class":6468},[49,19205,18374],{"class":66},[49,19207,1448],{"class":109},[49,19209,18379],{"class":66},[49,19211,19212,19214,19216,19218,19220,19222,19224,19226,19228,19230],{"class":51,"line":70},[49,19213,6616],{"class":109},[49,19215,19193],{"class":62},[49,19217,18982],{"class":66},[49,19219,18762],{"class":62},[49,19221,1403],{"class":66},[49,19223,18391],{"class":62},[49,19225,18394],{"class":6468},[49,19227,18397],{"class":66},[49,19229,1448],{"class":109},[49,19231,18402],{"class":66},[49,19233,19234],{"class":51,"line":86},[49,19235,19236],{"class":55},"\u002F\u002F获取属性\n",[49,19238,19239,19241,19243,19245,19247,19249,19251],{"class":51,"line":98},[49,19240,15289],{"class":109},[49,19242,19193],{"class":62},[49,19244,18982],{"class":66},[49,19246,18594],{"class":62},[49,19248,18293],{"class":66},[49,19250,18296],{"class":109},[49,19252,18421],{"class":66},[49,19254,19255,19257,19259,19261,19263,19265,19267],{"class":51,"line":121},[49,19256,18391],{"class":62},[49,19258,19193],{"class":62},[49,19260,18982],{"class":66},[49,19262,18508],{"class":62},[49,19264,18293],{"class":66},[49,19266,18296],{"class":109},[49,19268,18436],{"class":66},[19,19270,19271],{},"使用封装的类",[39,19273,19275],{"className":1391,"code":19274,"language":1393,"meta":44,"style":44},"#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",[46,19276,19277,19283,19293,19299,19305,19329,19333,19359,19385,19409,19423,19427,19439,19443,19447,19451,19463,19467,19471,19479,19483,19487,19491,19495,19499,19509,19515,19523,19531,19541,19547,19559,19567,19575,19585,19591,19603,19607,19615,19621],{"__ignoreMap":44},[49,19278,19279,19281],{"class":51,"line":52},[49,19280,3204],{"class":109},[49,19282,3207],{"class":1505},[49,19284,19285,19287,19289,19291],{"class":51,"line":59},[49,19286,3212],{"class":109},[49,19288,3215],{"class":109},[49,19290,3218],{"class":62},[49,19292,83],{"class":66},[49,19294,19295,19297],{"class":51,"line":70},[49,19296,3204],{"class":109},[49,19298,19186],{"class":1505},[49,19300,19301,19303],{"class":51,"line":86},[49,19302,3204],{"class":109},[49,19304,18967],{"class":1505},[49,19306,19307,19309,19311,19313,19315,19317,19319,19321,19323,19325,19327],{"class":51,"line":98},[49,19308,6616],{"class":109},[49,19310,18471],{"class":62},[49,19312,1403],{"class":66},[49,19314,18476],{"class":62},[49,19316,11836],{"class":109},[49,19318,1680],{"class":6468},[49,19320,1770],{"class":66},[49,19322,18391],{"class":62},[49,19324,11836],{"class":109},[49,19326,19],{"class":6468},[49,19328,1409],{"class":66},[49,19330,19331],{"class":51,"line":121},[49,19332,2802],{"class":66},[49,19334,19335,19337,19339,19341,19343,19345,19347,19349,19351,19353,19355,19357],{"class":51,"line":134},[49,19336,15989],{"class":109},[49,19338,18501],{"class":66},[49,19340,1448],{"class":109},[49,19342,17592],{"class":66},[49,19344,18508],{"class":62},[49,19346,18511],{"class":66},[49,19348,18514],{"class":62},[49,19350,14302],{"class":66},[49,19352,1923],{"class":109},[49,19354,17138],{"class":66},[49,19356,18514],{"class":62},[49,19358,6888],{"class":66},[49,19360,19361,19363,19365,19367,19369,19371,19373,19375,19377,19379,19381,19383],{"class":51,"line":1085},[49,19362,15989],{"class":109},[49,19364,18531],{"class":66},[49,19366,1448],{"class":109},[49,19368,17592],{"class":66},[49,19370,18508],{"class":62},[49,19372,18511],{"class":66},[49,19374,18542],{"class":62},[49,19376,14302],{"class":66},[49,19378,1923],{"class":109},[49,19380,17138],{"class":66},[49,19382,18542],{"class":62},[49,19384,6888],{"class":66},[49,19386,19387,19389,19391,19393,19395,19397,19399,19401,19403,19405,19407],{"class":51,"line":2574},[49,19388,15989],{"class":109},[49,19390,18559],{"class":66},[49,19392,1448],{"class":109},[49,19394,18564],{"class":62},[49,19396,18567],{"class":66},[49,19398,1846],{"class":109},[49,19400,18501],{"class":66},[49,19402,1872],{"class":109},[49,19404,18531],{"class":66},[49,19406,1846],{"class":109},[49,19408,18580],{"class":66},[49,19410,19411,19413,19415,19417,19419,19421],{"class":51,"line":2586},[49,19412,4355],{"class":109},[49,19414,18587],{"class":66},[49,19416,2300],{"class":109},[49,19418,17592],{"class":66},[49,19420,18594],{"class":62},[49,19422,18597],{"class":66},[49,19424,19425],{"class":51,"line":2867},[49,19426,3284],{"class":66},[49,19428,19429,19431,19433,19435,19437],{"class":51,"line":2872},[49,19430,10921],{"class":66},[49,19432,2432],{"class":109},[49,19434,18610],{"class":1505},[49,19436,2701],{"class":109},[49,19438,10092],{"class":66},[49,19440,19441],{"class":51,"line":2878},[49,19442,3441],{"class":66},[49,19444,19445],{"class":51,"line":2883},[49,19446,18073],{"class":109},[49,19448,19449],{"class":51,"line":2897},[49,19450,3284],{"class":66},[49,19452,19453,19455,19457,19459,19461],{"class":51,"line":2902},[49,19454,10921],{"class":66},[49,19456,2432],{"class":109},[49,19458,18635],{"class":1505},[49,19460,2701],{"class":109},[49,19462,10092],{"class":66},[49,19464,19465],{"class":51,"line":2908},[49,19466,3441],{"class":66},[49,19468,19469],{"class":51,"line":2929},[49,19470,137],{"class":66},[49,19472,19473,19475,19477],{"class":51,"line":2934},[49,19474,1406],{"class":109},[49,19476,3227],{"class":62},[49,19478,3230],{"class":66},[49,19480,19481],{"class":51,"line":2948},[49,19482,2802],{"class":66},[49,19484,19485],{"class":51,"line":2953},[49,19486,16304],{"class":55},[49,19488,19489],{"class":51,"line":2982},[49,19490,16051],{"class":66},[49,19492,19493],{"class":51,"line":2987},[49,19494,18672],{"class":66},[49,19496,19497],{"class":51,"line":3004},[49,19498,18244],{"class":55},[49,19500,19501,19503,19505,19507],{"class":51,"line":3009},[49,19502,2807],{"class":66},[49,19504,2432],{"class":109},[49,19506,18685],{"class":1505},[49,19508,83],{"class":66},[49,19510,19511,19513],{"class":51,"line":3014},[49,19512,15989],{"class":109},[49,19514,18694],{"class":66},[49,19516,19517,19519,19521],{"class":51,"line":3019},[49,19518,3266],{"class":66},[49,19520,2686],{"class":109},[49,19522,18703],{"class":66},[49,19524,19525,19527,19529],{"class":51,"line":3033},[49,19526,17845],{"class":66},[49,19528,18710],{"class":62},[49,19530,18713],{"class":66},[49,19532,19533,19535,19537,19539],{"class":51,"line":3038},[49,19534,2807],{"class":66},[49,19536,2432],{"class":109},[49,19538,18722],{"class":1505},[49,19540,83],{"class":66},[49,19542,19543,19545],{"class":51,"line":3831},[49,19544,15989],{"class":109},[49,19546,18731],{"class":66},[49,19548,19549,19551,19553,19555,19557],{"class":51,"line":3845},[49,19550,3266],{"class":66},[49,19552,2686],{"class":109},[49,19554,2210],{"class":66},[49,19556,2686],{"class":109},[49,19558,18744],{"class":66},[49,19560,19561,19563,19565],{"class":51,"line":3853},[49,19562,18749],{"class":66},[49,19564,18752],{"class":62},[49,19566,18755],{"class":66},[49,19568,19569,19571,19573],{"class":51,"line":3858},[49,19570,17845],{"class":66},[49,19572,18762],{"class":62},[49,19574,18765],{"class":66},[49,19576,19577,19579,19581,19583],{"class":51,"line":3864},[49,19578,2807],{"class":66},[49,19580,2432],{"class":109},[49,19582,18774],{"class":1505},[49,19584,83],{"class":66},[49,19586,19587,19589],{"class":51,"line":3870},[49,19588,15989],{"class":109},[49,19590,18783],{"class":66},[49,19592,19593,19595,19597,19599,19601],{"class":51,"line":3875},[49,19594,3266],{"class":66},[49,19596,2686],{"class":109},[49,19598,18792],{"class":66},[49,19600,2686],{"class":109},[49,19602,18797],{"class":66},[49,19604,19605],{"class":51,"line":9200},[49,19606,18802],{"class":66},[49,19608,19609,19611,19613],{"class":51,"line":9224},[49,19610,18807],{"class":66},[49,19612,18752],{"class":62},[49,19614,18812],{"class":66},[49,19616,19617,19619],{"class":51,"line":9229},[49,19618,18817],{"class":62},[49,19620,18820],{"class":66},[49,19622,19623],{"class":51,"line":9235},[49,19624,137],{"class":66},[14,19626,19628],{"id":19627},"_82对象的初始化清理","8.2对象的初始化清理",[23,19630,19631,19634],{},[26,19632,19633],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[26,19635,19636],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[183,19638,19640],{"id":19639},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,19642,19643,19644,19647],{},"对象的",[485,19645,19646],{},"初始化和清理","也是两个非常重要的安全问题",[19,19649,19650],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,19652,19653],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,19655,19656,19657,19660,19661,19664],{},"c++利用了",[485,19658,19659],{},"构造函数","和",[485,19662,19663],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,19666,19667,19668],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[485,19669,19670],{},"我们不提供构造和析构，编译器会提供",[19,19672,19673],{},[485,19674,19675],{},"编译器提供的构造函数和析构函数是空实现。",[23,19677,19678,19681],{},[26,19679,19680],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[26,19682,19683,19684,19687],{},"析构函数：主要作用在于对象",[485,19685,19686],{},"销毁前","系统自动调用，执行一些清理工作。",[19,19689,19690,19693],{},[485,19691,19692],{},"构造函数语法：",[46,19694,19695],{},"类名(){}",[591,19697,19698,19701,19704,19707,19710],{},[26,19699,19700],{},"构造函数，没有返回值也不写void",[26,19702,19703],{},"函数名称与类名相同",[26,19705,19706],{},"构造函数可以有参数，因此可以发生重载",[26,19708,19709],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[26,19711,19712,19713,1821],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[46,19714,19715],{},"Person(){}",[19,19717,19718,15047,19721],{},[485,19719,19720],{},"析构函数语法：",[46,19722,19723],{},"~类名(){}",[591,19725,19726,19729,19732,19738],{},[26,19727,19728],{},"析构函数，没有返回值也不写void",[26,19730,19731],{},"函数名称与类名相同,在名称前加上符号  ~",[26,19733,19734,19735],{},"析构函数不可以有参数，因此",[485,19736,19737],{},"不可以发生重载",[26,19739,19740],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[39,19742,19744],{"className":1391,"code":19743,"language":1393,"meta":44,"style":44},"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",[46,19745,19746,19752,19756,19760,19765,19772,19776,19789,19793,19798,19805,19809,19822,19826,19830,19834,19838,19846,19850,19858,19862,19866,19874,19878,19883,19887,19894,19898,19911,19915,19923],{"__ignoreMap":44},[49,19747,19748,19750],{"class":51,"line":52},[49,19749,15945],{"class":109},[49,19751,16422],{"class":62},[49,19753,19754],{"class":51,"line":59},[49,19755,2802],{"class":66},[49,19757,19758],{"class":51,"line":70},[49,19759,15967],{"class":109},[49,19761,19762],{"class":51,"line":86},[49,19763,19764],{"class":55},"    \u002F\u002F构造函数\n",[49,19766,19767,19770],{"class":51,"line":98},[49,19768,19769],{"class":62},"    Person",[49,19771,3230],{"class":66},[49,19773,19774],{"class":51,"line":121},[49,19775,3284],{"class":66},[49,19777,19778,19780,19782,19785,19787],{"class":51,"line":134},[49,19779,10921],{"class":66},[49,19781,2432],{"class":109},[49,19783,19784],{"class":1505}," \"Person的构造函数调用\"",[49,19786,2701],{"class":109},[49,19788,10092],{"class":66},[49,19790,19791],{"class":51,"line":1085},[49,19792,3441],{"class":66},[49,19794,19795],{"class":51,"line":2574},[49,19796,19797],{"class":55},"    \u002F\u002F析构函数\n",[49,19799,19800,19803],{"class":51,"line":2586},[49,19801,19802],{"class":62},"    ~Person",[49,19804,3230],{"class":66},[49,19806,19807],{"class":51,"line":2867},[49,19808,3284],{"class":66},[49,19810,19811,19813,19815,19818,19820],{"class":51,"line":2872},[49,19812,10921],{"class":66},[49,19814,2432],{"class":109},[49,19816,19817],{"class":1505}," \"Person的析构函数调用\"",[49,19819,2701],{"class":109},[49,19821,10092],{"class":66},[49,19823,19824],{"class":51,"line":2878},[49,19825,3441],{"class":66},[49,19827,19828],{"class":51,"line":2883},[49,19829,3654],{"emptyLinePlaceholder":1330},[49,19831,19832],{"class":51,"line":2897},[49,19833,5249],{"class":66},[49,19835,19836],{"class":51,"line":2902},[49,19837,3654],{"emptyLinePlaceholder":1330},[49,19839,19840,19842,19844],{"class":51,"line":2908},[49,19841,6616],{"class":109},[49,19843,6840],{"class":62},[49,19845,3230],{"class":66},[49,19847,19848],{"class":51,"line":2929},[49,19849,2802],{"class":66},[49,19851,19852,19855],{"class":51,"line":2934},[49,19853,19854],{"class":66},"    Person p;",[49,19856,19857],{"class":55},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[49,19859,19860],{"class":51,"line":2948},[49,19861,137],{"class":66},[49,19863,19864],{"class":51,"line":2953},[49,19865,3654],{"emptyLinePlaceholder":1330},[49,19867,19868,19870,19872],{"class":51,"line":2982},[49,19869,1406],{"class":109},[49,19871,3227],{"class":62},[49,19873,12105],{"class":66},[49,19875,19876],{"class":51,"line":2987},[49,19877,14462],{"class":66},[49,19879,19880],{"class":51,"line":3004},[49,19881,19882],{"class":55},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[49,19884,19885],{"class":51,"line":3009},[49,19886,3654],{"emptyLinePlaceholder":1330},[49,19888,19889,19891],{"class":51,"line":3014},[49,19890,19854],{"class":66},[49,19892,19893],{"class":55},"\u002F\u002F只有构造函数\n",[49,19895,19896],{"class":51,"line":3019},[49,19897,3654],{"emptyLinePlaceholder":1330},[49,19899,19900,19902,19904,19906,19908],{"class":51,"line":3033},[49,19901,3557],{"class":62},[49,19903,1403],{"class":66},[49,19905,3562],{"class":1505},[49,19907,7218],{"class":66},[49,19909,19910],{"class":55},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[49,19912,19913],{"class":51,"line":3038},[49,19914,3654],{"emptyLinePlaceholder":1330},[49,19916,19917,19919,19921],{"class":51,"line":3831},[49,19918,5344],{"class":109},[49,19920,5347],{"class":73},[49,19922,83],{"class":66},[49,19924,19925],{"class":51,"line":3845},[49,19926,137],{"class":66},[19,19928,19929],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[183,19931,19933],{"id":19932},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,19935,19936],{},"两种分类方式：",[19,19938,19939],{},"​\t按参数分为： 有参构造和无参构造",[19,19941,19942],{},"​\t按类型分为： 普通构造和拷贝构造",[19,19944,19945],{},"三种调用方式：",[19,19947,19948],{},"​\t括号法",[19,19950,19951],{},"​\t显示法",[19,19953,19954],{},"​\t隐式转换法",[39,19956,19958],{"className":1391,"code":19957,"language":1393,"meta":44,"style":44},"#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",[46,19959,19960,19966,19976,19981,19986,19991,19996,20000,20008,20012,20016,20020,20026,20030,20043,20047,20059,20063,20072,20085,20089,20093,20099,20103,20116,20120,20125,20141,20145,20150,20159,20172,20176,20182,20186,20191,20199,20203,20208,20212,20220,20224,20229,20234,20239,20244,20249,20253,20258,20263,20268,20273,20277,20282,20287,20303,20315,20320,20324,20329,20334,20339,20343,20348,20362,20375,20379,20387,20391,20397,20403,20411],{"__ignoreMap":44},[49,19961,19962,19964],{"class":51,"line":52},[49,19963,3204],{"class":109},[49,19965,3207],{"class":1505},[49,19967,19968,19970,19972,19974],{"class":51,"line":59},[49,19969,3212],{"class":109},[49,19971,3215],{"class":109},[49,19973,3218],{"class":62},[49,19975,83],{"class":66},[49,19977,19978],{"class":51,"line":70},[49,19979,19980],{"class":55},"\u002F\u002F1.构造函数的分类及调用\n",[49,19982,19983],{"class":51,"line":86},[49,19984,19985],{"class":55},"\u002F\u002F分类\n",[49,19987,19988],{"class":51,"line":98},[49,19989,19990],{"class":55},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[49,19992,19993],{"class":51,"line":121},[49,19994,19995],{"class":55},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[49,19997,19998],{"class":51,"line":134},[49,19999,3654],{"emptyLinePlaceholder":1330},[49,20001,20002,20004,20006],{"class":51,"line":1085},[49,20003,15945],{"class":109},[49,20005,16820],{"class":62},[49,20007,3928],{"class":66},[49,20009,20010],{"class":51,"line":2574},[49,20011,2802],{"class":66},[49,20013,20014],{"class":51,"line":2586},[49,20015,15967],{"class":109},[49,20017,20018],{"class":51,"line":2867},[49,20019,19764],{"class":55},[49,20021,20022,20024],{"class":51,"line":2872},[49,20023,19769],{"class":62},[49,20025,3230],{"class":66},[49,20027,20028],{"class":51,"line":2878},[49,20029,3284],{"class":66},[49,20031,20032,20034,20036,20039,20041],{"class":51,"line":2883},[49,20033,4705],{"class":66},[49,20035,2432],{"class":109},[49,20037,20038],{"class":1505},"\"Person构造函数无参构造\"",[49,20040,2432],{"class":109},[49,20042,2454],{"class":66},[49,20044,20045],{"class":51,"line":2897},[49,20046,3441],{"class":66},[49,20048,20049,20051,20053,20055,20057],{"class":51,"line":2902},[49,20050,19769],{"class":62},[49,20052,1403],{"class":66},[49,20054,1406],{"class":109},[49,20056,2655],{"class":6468},[49,20058,1409],{"class":66},[49,20060,20061],{"class":51,"line":2908},[49,20062,3284],{"class":66},[49,20064,20065,20068,20070],{"class":51,"line":2929},[49,20066,20067],{"class":66},"        age",[49,20069,1448],{"class":109},[49,20071,7449],{"class":66},[49,20073,20074,20076,20078,20081,20083],{"class":51,"line":2934},[49,20075,4705],{"class":66},[49,20077,2432],{"class":109},[49,20079,20080],{"class":1505},"\"Person构造函数有参构造\"",[49,20082,2432],{"class":109},[49,20084,2454],{"class":66},[49,20086,20087],{"class":51,"line":2948},[49,20088,3441],{"class":66},[49,20090,20091],{"class":51,"line":2953},[49,20092,19797],{"class":55},[49,20094,20095,20097],{"class":51,"line":2982},[49,20096,19802],{"class":62},[49,20098,3230],{"class":66},[49,20100,20101],{"class":51,"line":2987},[49,20102,3284],{"class":66},[49,20104,20105,20107,20109,20112,20114],{"class":51,"line":3004},[49,20106,4705],{"class":66},[49,20108,2432],{"class":109},[49,20110,20111],{"class":1505},"\"Person析构函数被调用\"",[49,20113,2432],{"class":109},[49,20115,2454],{"class":66},[49,20117,20118],{"class":51,"line":3009},[49,20119,3441],{"class":66},[49,20121,20122],{"class":51,"line":3014},[49,20123,20124],{"class":55},"    \u002F\u002F拷贝构造函数\n",[49,20126,20127,20129,20131,20133,20135,20137,20139],{"class":51,"line":3019},[49,20128,19769],{"class":62},[49,20130,1403],{"class":66},[49,20132,8044],{"class":109},[49,20134,16820],{"class":62},[49,20136,11836],{"class":109},[49,20138,19],{"class":6468},[49,20140,1409],{"class":66},[49,20142,20143],{"class":51,"line":3033},[49,20144,3284],{"class":66},[49,20146,20147],{"class":51,"line":3038},[49,20148,20149],{"class":55},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[49,20151,20152,20154,20156],{"class":51,"line":3831},[49,20153,20067],{"class":66},[49,20155,1448],{"class":109},[49,20157,20158],{"class":66},"p.age;\n",[49,20160,20161,20163,20165,20168,20170],{"class":51,"line":3845},[49,20162,4705],{"class":66},[49,20164,2432],{"class":109},[49,20166,20167],{"class":1505},"\"Person拷贝构造函数被调用\"",[49,20169,2432],{"class":109},[49,20171,2454],{"class":66},[49,20173,20174],{"class":51,"line":3853},[49,20175,3441],{"class":66},[49,20177,20178,20180],{"class":51,"line":3858},[49,20179,3239],{"class":109},[49,20181,9049],{"class":66},[49,20183,20184],{"class":51,"line":3864},[49,20185,5249],{"class":66},[49,20187,20188],{"class":51,"line":3870},[49,20189,20190],{"class":55},"\u002F\u002F调用\n",[49,20192,20193,20195,20197],{"class":51,"line":3875},[49,20194,6616],{"class":109},[49,20196,6840],{"class":62},[49,20198,3230],{"class":66},[49,20200,20201],{"class":51,"line":9200},[49,20202,2802],{"class":66},[49,20204,20205],{"class":51,"line":9224},[49,20206,20207],{"class":55},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[49,20209,20210],{"class":51,"line":9229},[49,20211,137],{"class":66},[49,20213,20214,20216,20218],{"class":51,"line":9235},[49,20215,6616],{"class":109},[49,20217,6909],{"class":62},[49,20219,3230],{"class":66},[49,20221,20222],{"class":51,"line":9262},[49,20223,2802],{"class":66},[49,20225,20226],{"class":51,"line":9267},[49,20227,20228],{"class":55},"    \u002F\u002F1.括号法\n",[49,20230,20231],{"class":51,"line":9273},[49,20232,20233],{"class":55},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[49,20235,20236],{"class":51,"line":9285},[49,20237,20238],{"class":55},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[49,20240,20241],{"class":51,"line":9297},[49,20242,20243],{"class":55},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[49,20245,20246],{"class":51,"line":9309},[49,20247,20248],{"class":55},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[49,20250,20251],{"class":51,"line":10968},[49,20252,3654],{"emptyLinePlaceholder":1330},[49,20254,20255],{"class":51,"line":10993},[49,20256,20257],{"class":55},"    \u002F\u002F注意事项\n",[49,20259,20260],{"class":51,"line":11016},[49,20261,20262],{"class":55},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[49,20264,20265],{"class":51,"line":11040},[49,20266,20267],{"class":55},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[49,20269,20270],{"class":51,"line":11045},[49,20271,20272],{"class":55},"    \u002F\u002F Person p4();\n",[49,20274,20275],{"class":51,"line":11050},[49,20276,3654],{"emptyLinePlaceholder":1330},[49,20278,20279],{"class":51,"line":11055},[49,20280,20281],{"class":55},"    \u002F\u002F2.显示法\n",[49,20283,20284],{"class":51,"line":11064},[49,20285,20286],{"class":66},"    Person p1;\n",[49,20288,20289,20292,20294,20297,20299,20301],{"class":51,"line":11069},[49,20290,20291],{"class":66},"    Person p2",[49,20293,1448],{"class":109},[49,20295,20296],{"class":62},"Person",[49,20298,1403],{"class":66},[49,20300,106],{"class":73},[49,20302,3973],{"class":66},[49,20304,20305,20308,20310,20312],{"class":51,"line":11075},[49,20306,20307],{"class":66},"    Person p3",[49,20309,1448],{"class":109},[49,20311,20296],{"class":62},[49,20313,20314],{"class":66},"(p2);\n",[49,20316,20317],{"class":51,"line":11096},[49,20318,20319],{"class":55},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[49,20321,20322],{"class":51,"line":11102},[49,20323,3654],{"emptyLinePlaceholder":1330},[49,20325,20326],{"class":51,"line":11116},[49,20327,20328],{"class":55},"    \u002F\u002F 注意事项2\n",[49,20330,20331],{"class":51,"line":11122},[49,20332,20333],{"class":55},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[49,20335,20336],{"class":51,"line":11149},[49,20337,20338],{"class":55},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[49,20340,20341],{"class":51,"line":11158},[49,20342,3654],{"emptyLinePlaceholder":1330},[49,20344,20345],{"class":51,"line":11164},[49,20346,20347],{"class":55},"    \u002F\u002F3.隐士转换法\n",[49,20349,20350,20353,20355,20357,20359],{"class":51,"line":11172},[49,20351,20352],{"class":66},"    Person p4",[49,20354,1448],{"class":109},[49,20356,106],{"class":73},[49,20358,1457],{"class":66},[49,20360,20361],{"class":55},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[49,20363,20364,20367,20369,20372],{"class":51,"line":11177},[49,20365,20366],{"class":66},"    Person p5",[49,20368,1448],{"class":109},[49,20370,20371],{"class":66},"p4;",[49,20373,20374],{"class":55}," \u002F\u002F 这里会调用拷贝构造函数\n",[49,20376,20377],{"class":51,"line":17854},[49,20378,137],{"class":66},[49,20380,20381,20383,20385],{"class":51,"line":17860},[49,20382,1406],{"class":109},[49,20384,3227],{"class":62},[49,20386,3230],{"class":66},[49,20388,20389],{"class":51,"line":17883},[49,20390,2802],{"class":66},[49,20392,20393,20395],{"class":51,"line":17889},[49,20394,6885],{"class":62},[49,20396,6888],{"class":66},[49,20398,20399,20401],{"class":51,"line":17912},[49,20400,6954],{"class":62},[49,20402,6888],{"class":66},[49,20404,20405,20407,20409],{"class":51,"line":17926},[49,20406,5344],{"class":109},[49,20408,5347],{"class":73},[49,20410,83],{"class":66},[49,20412,20413],{"class":51,"line":17946},[49,20414,137],{"class":66},[19,20416,20417,20420],{},[485,20418,20419],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[183,20422,20424],{"id":20423},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20426,20427],{},"C++中拷贝构造函数调用时机通常有三种情况",[23,20429,20430,20433,20436],{},[26,20431,20432],{},"使用一个已经创建完毕的对象来初始化一个新对象",[26,20434,20435],{},"值传递的方式给函数参数传值",[26,20437,20438],{},"以值方式返回局部对象",[39,20440,20442],{"className":1391,"code":20441,"language":1393,"meta":44,"style":44},"#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",[46,20443,20444,20450,20460,20464,20469,20473,20478,20483,20488,20494,20498,20502,20508,20512,20525,20529,20534,20546,20550,20558,20571,20575,20579,20595,20599,20608,20621,20625,20631,20635,20647,20651,20657,20661,20665,20673,20677,20690,20698,20716,20720,20725,20730,20745,20749,20762,20766,20774,20778,20782,20790,20794,20799,20808,20812,20816,20841,20851,20855,20863,20867,20878,20903,20907,20911,20915,20923,20927,20932,20937,20944,20949,20954,20959,20964,20968,20973,20977,20982,20986,20991,20996,21000,21004,21009,21014,21022],{"__ignoreMap":44},[49,20445,20446,20448],{"class":51,"line":52},[49,20447,3204],{"class":109},[49,20449,3207],{"class":1505},[49,20451,20452,20454,20456,20458],{"class":51,"line":59},[49,20453,3212],{"class":109},[49,20455,3215],{"class":109},[49,20457,3218],{"class":62},[49,20459,83],{"class":66},[49,20461,20462],{"class":51,"line":70},[49,20463,3654],{"emptyLinePlaceholder":1330},[49,20465,20466],{"class":51,"line":86},[49,20467,20468],{"class":55},"\u002F\u002F拷贝构造函数调用时机\n",[49,20470,20471],{"class":51,"line":98},[49,20472,3654],{"emptyLinePlaceholder":1330},[49,20474,20475],{"class":51,"line":121},[49,20476,20477],{"class":55},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[49,20479,20480],{"class":51,"line":134},[49,20481,20482],{"class":55},"\u002F\u002F2.值传递的方式给函数参数传值\n",[49,20484,20485],{"class":51,"line":1085},[49,20486,20487],{"class":55},"\u002F\u002F3.以值方式返回局部对象\n",[49,20489,20490,20492],{"class":51,"line":2574},[49,20491,15945],{"class":109},[49,20493,16422],{"class":62},[49,20495,20496],{"class":51,"line":2586},[49,20497,2802],{"class":66},[49,20499,20500],{"class":51,"line":2867},[49,20501,15967],{"class":109},[49,20503,20504,20506],{"class":51,"line":2872},[49,20505,19769],{"class":62},[49,20507,3230],{"class":66},[49,20509,20510],{"class":51,"line":2878},[49,20511,3284],{"class":66},[49,20513,20514,20516,20518,20521,20523],{"class":51,"line":2883},[49,20515,10921],{"class":66},[49,20517,2432],{"class":109},[49,20519,20520],{"class":1505}," \"Person的默认构造函数调用\"",[49,20522,2701],{"class":109},[49,20524,10092],{"class":66},[49,20526,20527],{"class":51,"line":2897},[49,20528,3441],{"class":66},[49,20530,20531],{"class":51,"line":2902},[49,20532,20533],{"class":55},"    \u002F\u002F有参构造\n",[49,20535,20536,20538,20540,20542,20544],{"class":51,"line":2908},[49,20537,19769],{"class":62},[49,20539,1403],{"class":66},[49,20541,1406],{"class":109},[49,20543,16939],{"class":6468},[49,20545,1409],{"class":66},[49,20547,20548],{"class":51,"line":2929},[49,20549,3284],{"class":66},[49,20551,20552,20554,20556],{"class":51,"line":2934},[49,20553,16993],{"class":66},[49,20555,1448],{"class":109},[49,20557,9049],{"class":66},[49,20559,20560,20562,20564,20567,20569],{"class":51,"line":2948},[49,20561,10921],{"class":66},[49,20563,2432],{"class":109},[49,20565,20566],{"class":1505}," \"Person的有参构造函数调用\"",[49,20568,2701],{"class":109},[49,20570,10092],{"class":66},[49,20572,20573],{"class":51,"line":2953},[49,20574,3441],{"class":66},[49,20576,20577],{"class":51,"line":2982},[49,20578,20124],{"class":55},[49,20580,20581,20583,20585,20587,20589,20591,20593],{"class":51,"line":2987},[49,20582,19769],{"class":62},[49,20584,1403],{"class":66},[49,20586,8044],{"class":109},[49,20588,16820],{"class":62},[49,20590,11836],{"class":109},[49,20592,19],{"class":6468},[49,20594,1409],{"class":66},[49,20596,20597],{"class":51,"line":3004},[49,20598,3284],{"class":66},[49,20600,20601,20603,20605],{"class":51,"line":3009},[49,20602,16993],{"class":66},[49,20604,1448],{"class":109},[49,20606,20607],{"class":66}," p.m_Age;\n",[49,20609,20610,20612,20614,20617,20619],{"class":51,"line":3014},[49,20611,10921],{"class":66},[49,20613,2432],{"class":109},[49,20615,20616],{"class":1505}," \"Person的拷贝构造函数调用\"",[49,20618,2701],{"class":109},[49,20620,10092],{"class":66},[49,20622,20623],{"class":51,"line":3019},[49,20624,3441],{"class":66},[49,20626,20627,20629],{"class":51,"line":3033},[49,20628,19802],{"class":62},[49,20630,3230],{"class":66},[49,20632,20633],{"class":51,"line":3038},[49,20634,3284],{"class":66},[49,20636,20637,20639,20641,20643,20645],{"class":51,"line":3831},[49,20638,10921],{"class":66},[49,20640,2432],{"class":109},[49,20642,19817],{"class":1505},[49,20644,2701],{"class":109},[49,20646,10092],{"class":66},[49,20648,20649],{"class":51,"line":3845},[49,20650,3441],{"class":66},[49,20652,20653,20655],{"class":51,"line":3853},[49,20654,3239],{"class":109},[49,20656,16916],{"class":66},[49,20658,20659],{"class":51,"line":3858},[49,20660,5249],{"class":66},[49,20662,20663],{"class":51,"line":3864},[49,20664,20477],{"class":55},[49,20666,20667,20669,20671],{"class":51,"line":3870},[49,20668,6616],{"class":109},[49,20670,6840],{"class":62},[49,20672,3230],{"class":66},[49,20674,20675],{"class":51,"line":3875},[49,20676,2802],{"class":66},[49,20678,20679,20682,20684,20686,20688],{"class":51,"line":9200},[49,20680,20681],{"class":66},"    Person ",[49,20683,8382],{"class":62},[49,20685,1403],{"class":66},[49,20687,875],{"class":73},[49,20689,3973],{"class":66},[49,20691,20692,20694,20696],{"class":51,"line":9224},[49,20693,20681],{"class":66},[49,20695,8285],{"class":62},[49,20697,18765],{"class":66},[49,20699,20700,20702,20704,20707,20709,20712,20714],{"class":51,"line":9229},[49,20701,2807],{"class":66},[49,20703,2432],{"class":109},[49,20705,20706],{"class":1505},"\"P2的年龄为：\"",[49,20708,2432],{"class":109},[49,20710,20711],{"class":66},"p2.m_Age",[49,20713,2432],{"class":109},[49,20715,2454],{"class":66},[49,20717,20718],{"class":51,"line":9235},[49,20719,137],{"class":66},[49,20721,20722],{"class":51,"line":9262},[49,20723,20724],{"class":55},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[49,20726,20727],{"class":51,"line":9267},[49,20728,20729],{"class":55},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[49,20731,20732,20734,20737,20739,20741,20743],{"class":51,"line":9273},[49,20733,6616],{"class":109},[49,20735,20736],{"class":62}," doWork",[49,20738,1403],{"class":66},[49,20740,20296],{"class":62},[49,20742,8077],{"class":6468},[49,20744,1409],{"class":66},[49,20746,20747],{"class":51,"line":9285},[49,20748,2802],{"class":66},[49,20750,20751,20753,20755,20758,20760],{"class":51,"line":9297},[49,20752,7781],{"class":66},[49,20754,2432],{"class":109},[49,20756,20757],{"class":1505}," \"doWork函数调用\"",[49,20759,2701],{"class":109},[49,20761,10092],{"class":66},[49,20763,20764],{"class":51,"line":9309},[49,20765,137],{"class":66},[49,20767,20768,20770,20772],{"class":51,"line":10968},[49,20769,6616],{"class":109},[49,20771,6909],{"class":62},[49,20773,3230],{"class":66},[49,20775,20776],{"class":51,"line":10993},[49,20777,2802],{"class":66},[49,20779,20780],{"class":51,"line":11016},[49,20781,16564],{"class":66},[49,20783,20784,20787],{"class":51,"line":11040},[49,20785,20786],{"class":62},"    doWork",[49,20788,20789],{"class":66},"(p);\n",[49,20791,20792],{"class":51,"line":11045},[49,20793,137],{"class":66},[49,20795,20796],{"class":51,"line":11050},[49,20797,20798],{"class":55},"\u002F\u002F 3.以值方式返回局部对象\n",[49,20800,20801,20803,20806],{"class":51,"line":11055},[49,20802,20296],{"class":62},[49,20804,20805],{"class":62}," doWork2",[49,20807,3230],{"class":66},[49,20809,20810],{"class":51,"line":11064},[49,20811,2802],{"class":66},[49,20813,20814],{"class":51,"line":11069},[49,20815,20286],{"class":66},[49,20817,20818,20820,20822,20824,20826,20828,20830,20832,20834,20836,20838],{"class":51,"line":11075},[49,20819,2807],{"class":66},[49,20821,2432],{"class":109},[49,20823,1403],{"class":66},[49,20825,1406],{"class":109},[49,20827,7770],{"class":109},[49,20829,1821],{"class":66},[49,20831,1745],{"class":109},[49,20833,8382],{"class":66},[49,20835,2432],{"class":109},[49,20837,2497],{"class":66},[49,20839,20840],{"class":55},"\u002F\u002F打印p1的地址\n",[49,20842,20843,20845,20848],{"class":51,"line":11096},[49,20844,5344],{"class":109},[49,20846,20847],{"class":66}," p1;",[49,20849,20850],{"class":55},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[49,20852,20853],{"class":51,"line":11102},[49,20854,137],{"class":66},[49,20856,20857,20859,20861],{"class":51,"line":11116},[49,20858,6616],{"class":109},[49,20860,6981],{"class":62},[49,20862,3230],{"class":66},[49,20864,20865],{"class":51,"line":11122},[49,20866,2802],{"class":66},[49,20868,20869,20872,20874,20876],{"class":51,"line":11149},[49,20870,20871],{"class":66},"    Person p ",[49,20873,1448],{"class":109},[49,20875,20805],{"class":62},[49,20877,6888],{"class":66},[49,20879,20880,20882,20884,20886,20888,20890,20892,20894,20896,20898,20900],{"class":51,"line":11158},[49,20881,2807],{"class":66},[49,20883,2432],{"class":109},[49,20885,1403],{"class":66},[49,20887,1406],{"class":109},[49,20889,7770],{"class":109},[49,20891,1821],{"class":66},[49,20893,1745],{"class":109},[49,20895,19],{"class":66},[49,20897,2432],{"class":109},[49,20899,2497],{"class":66},[49,20901,20902],{"class":55},"\u002F\u002F打印p的地址\n",[49,20904,20905],{"class":51,"line":11164},[49,20906,137],{"class":66},[49,20908,20909],{"class":51,"line":11172},[49,20910,3654],{"emptyLinePlaceholder":1330},[49,20912,20913],{"class":51,"line":11177},[49,20914,3654],{"emptyLinePlaceholder":1330},[49,20916,20917,20919,20921],{"class":51,"line":17854},[49,20918,1406],{"class":109},[49,20920,3227],{"class":62},[49,20922,3230],{"class":66},[49,20924,20925],{"class":51,"line":17860},[49,20926,2802],{"class":66},[49,20928,20929],{"class":51,"line":17883},[49,20930,20931],{"class":55},"    \u002F\u002F test01();\n",[49,20933,20934],{"class":51,"line":17889},[49,20935,20936],{"class":55},"    \u002F\u002F test02();\n",[49,20938,20939,20942],{"class":51,"line":17912},[49,20940,20941],{"class":62},"    test03",[49,20943,6888],{"class":66},[49,20945,20946],{"class":51,"line":17926},[49,20947,20948],{"class":55},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[49,20950,20951],{"class":51,"line":17946},[49,20952,20953],{"class":55},"\u002F\u002F 输出结果如下：\n",[49,20955,20956],{"class":51,"line":17952},[49,20957,20958],{"class":55},"\u002F\u002F Person的默认构造函数调用\n",[49,20960,20961],{"class":51,"line":17963},[49,20962,20963],{"class":55},"\u002F\u002F 0x7fffffffceec\n",[49,20965,20966],{"class":51,"line":17986},[49,20967,20963],{"class":55},[49,20969,20970],{"class":51,"line":18008},[49,20971,20972],{"class":55},"\u002F\u002F Person的析构函数调用\n",[49,20974,20975],{"class":51,"line":18013},[49,20976,3654],{"emptyLinePlaceholder":1330},[49,20978,20979],{"class":51,"line":18019},[49,20980,20981],{"class":55},"\u002F\u002F 之前的输出结果如下：\n",[49,20983,20984],{"class":51,"line":18033},[49,20985,20958],{"class":55},[49,20987,20988],{"class":51,"line":18046},[49,20989,20990],{"class":55},"\u002F\u002F 地址\n",[49,20992,20993],{"class":51,"line":18051},[49,20994,20995],{"class":55},"\u002F\u002F Person的拷贝构造函数调用\n",[49,20997,20998],{"class":51,"line":18065},[49,20999,20972],{"class":55},[49,21001,21002],{"class":51,"line":18070},[49,21003,20990],{"class":55},[49,21005,21006],{"class":51,"line":18076},[49,21007,21008],{"class":55},"\u002F\u002F (这两次输出的地址也是不同的) \n",[49,21010,21011],{"class":51,"line":18081},[49,21012,21013],{"class":55},"\u002F\u002F Person的析构函数调用     \n",[49,21015,21016,21018,21020],{"class":51,"line":18095},[49,21017,5344],{"class":109},[49,21019,5347],{"class":73},[49,21021,83],{"class":66},[49,21023,21024],{"class":51,"line":18100},[49,21025,137],{"class":66},[19,21027,21028],{},"简化版理解",[39,21030,21032],{"className":1391,"code":21031,"language":1393,"meta":44,"style":44},"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",[46,21033,21034,21042,21046,21052,21065,21076,21080,21092,21105,21113,21117,21133,21146,21155,21159,21164,21170,21183,21187,21191,21198,21202,21206,21211,21219,21223,21239,21252,21265,21269,21274,21282,21286,21290,21295,21300,21316,21324,21331,21337,21341,21345,21350,21358,21362,21366,21389,21396,21400,21404,21412,21416,21426,21448,21452,21456,21460,21468,21472,21477,21482,21488,21492,21502,21506,21514],{"__ignoreMap":44},[49,21035,21036,21038,21040],{"class":51,"line":52},[49,21037,15945],{"class":109},[49,21039,16820],{"class":62},[49,21041,67],{"class":66},[49,21043,21044],{"class":51,"line":59},[49,21045,15967],{"class":109},[49,21047,21048,21050],{"class":51,"line":70},[49,21049,19769],{"class":62},[49,21051,12105],{"class":66},[49,21053,21054,21056,21058,21061,21063],{"class":51,"line":86},[49,21055,10921],{"class":66},[49,21057,2432],{"class":109},[49,21059,21060],{"class":1505}," \"无参构造函数!\"",[49,21062,2701],{"class":109},[49,21064,10092],{"class":66},[49,21066,21067,21070,21072,21074],{"class":51,"line":98},[49,21068,21069],{"class":66},"        mAge ",[49,21071,1448],{"class":109},[49,21073,5347],{"class":73},[49,21075,83],{"class":66},[49,21077,21078],{"class":51,"line":121},[49,21079,3441],{"class":66},[49,21081,21082,21084,21086,21088,21090],{"class":51,"line":134},[49,21083,19769],{"class":62},[49,21085,1403],{"class":66},[49,21087,1406],{"class":109},[49,21089,16939],{"class":6468},[49,21091,13694],{"class":66},[49,21093,21094,21096,21098,21101,21103],{"class":51,"line":1085},[49,21095,10921],{"class":66},[49,21097,2432],{"class":109},[49,21099,21100],{"class":1505}," \"有参构造函数!\"",[49,21102,2701],{"class":109},[49,21104,10092],{"class":66},[49,21106,21107,21109,21111],{"class":51,"line":2574},[49,21108,21069],{"class":66},[49,21110,1448],{"class":109},[49,21112,9049],{"class":66},[49,21114,21115],{"class":51,"line":2586},[49,21116,3441],{"class":66},[49,21118,21119,21121,21123,21125,21127,21129,21131],{"class":51,"line":2867},[49,21120,19769],{"class":62},[49,21122,1403],{"class":66},[49,21124,8044],{"class":109},[49,21126,16820],{"class":62},[49,21128,1745],{"class":109},[49,21130,8077],{"class":6468},[49,21132,13694],{"class":66},[49,21134,21135,21137,21139,21142,21144],{"class":51,"line":2872},[49,21136,10921],{"class":66},[49,21138,2432],{"class":109},[49,21140,21141],{"class":1505}," \"拷贝构造函数!\"",[49,21143,2701],{"class":109},[49,21145,10092],{"class":66},[49,21147,21148,21150,21152],{"class":51,"line":2878},[49,21149,21069],{"class":66},[49,21151,1448],{"class":109},[49,21153,21154],{"class":66}," p.mAge;\n",[49,21156,21157],{"class":51,"line":2883},[49,21158,3441],{"class":66},[49,21160,21161],{"class":51,"line":2897},[49,21162,21163],{"class":55},"    \u002F\u002F析构函数在释放内存之前调用\n",[49,21165,21166,21168],{"class":51,"line":2902},[49,21167,19802],{"class":62},[49,21169,12105],{"class":66},[49,21171,21172,21174,21176,21179,21181],{"class":51,"line":2908},[49,21173,10921],{"class":66},[49,21175,2432],{"class":109},[49,21177,21178],{"class":1505}," \"析构函数!\"",[49,21180,2701],{"class":109},[49,21182,10092],{"class":66},[49,21184,21185],{"class":51,"line":2929},[49,21186,3441],{"class":66},[49,21188,21189],{"class":51,"line":2934},[49,21190,15967],{"class":109},[49,21192,21193,21195],{"class":51,"line":2948},[49,21194,3239],{"class":109},[49,21196,21197],{"class":66}," mAge;\n",[49,21199,21200],{"class":51,"line":2953},[49,21201,5249],{"class":66},[49,21203,21204],{"class":51,"line":2982},[49,21205,3654],{"emptyLinePlaceholder":1330},[49,21207,21208],{"class":51,"line":2987},[49,21209,21210],{"class":55},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[49,21212,21213,21215,21217],{"class":51,"line":3004},[49,21214,6616],{"class":109},[49,21216,6840],{"class":62},[49,21218,12105],{"class":66},[49,21220,21221],{"class":51,"line":3009},[49,21222,3654],{"emptyLinePlaceholder":1330},[49,21224,21225,21227,21230,21232,21234,21236],{"class":51,"line":3014},[49,21226,20681],{"class":66},[49,21228,21229],{"class":62},"man",[49,21231,1403],{"class":66},[49,21233,1703],{"class":73},[49,21235,7218],{"class":66},[49,21237,21238],{"class":55}," \u002F\u002Fp对象已经创建完毕\n",[49,21240,21241,21243,21246,21249],{"class":51,"line":3019},[49,21242,20681],{"class":66},[49,21244,21245],{"class":62},"newman",[49,21247,21248],{"class":66},"(man);",[49,21250,21251],{"class":55}," \u002F\u002F调用拷贝构造函数\n",[49,21253,21254,21257,21259,21262],{"class":51,"line":3033},[49,21255,21256],{"class":66},"    Person newman2 ",[49,21258,1448],{"class":109},[49,21260,21261],{"class":66}," man;",[49,21263,21264],{"class":55}," \u002F\u002F拷贝构造\n",[49,21266,21267],{"class":51,"line":3038},[49,21268,3654],{"emptyLinePlaceholder":1330},[49,21270,21271],{"class":51,"line":3831},[49,21272,21273],{"class":55},"    \u002F\u002FPerson newman3;\n",[49,21275,21276,21279],{"class":51,"line":3845},[49,21277,21278],{"class":55},"    \u002F\u002Fnewman3 = man;",[49,21280,21281],{"class":55}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[49,21283,21284],{"class":51,"line":3853},[49,21285,137],{"class":66},[49,21287,21288],{"class":51,"line":3858},[49,21289,3654],{"emptyLinePlaceholder":1330},[49,21291,21292],{"class":51,"line":3864},[49,21293,21294],{"class":55},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[49,21296,21297],{"class":51,"line":3870},[49,21298,21299],{"class":55},"\u002F\u002F相当于Person p1 = p;\n",[49,21301,21302,21304,21306,21308,21310,21313],{"class":51,"line":3875},[49,21303,6616],{"class":109},[49,21305,20736],{"class":62},[49,21307,1403],{"class":66},[49,21309,20296],{"class":62},[49,21311,21312],{"class":6468}," p1",[49,21314,21315],{"class":66},") {}\n",[49,21317,21318,21320,21322],{"class":51,"line":9200},[49,21319,6616],{"class":109},[49,21321,6909],{"class":62},[49,21323,12105],{"class":66},[49,21325,21326,21328],{"class":51,"line":9224},[49,21327,19854],{"class":66},[49,21329,21330],{"class":55}," \u002F\u002F无参构造函数\n",[49,21332,21333,21335],{"class":51,"line":9229},[49,21334,20786],{"class":62},[49,21336,20789],{"class":66},[49,21338,21339],{"class":51,"line":9235},[49,21340,137],{"class":66},[49,21342,21343],{"class":51,"line":9262},[49,21344,3654],{"emptyLinePlaceholder":1330},[49,21346,21347],{"class":51,"line":9267},[49,21348,21349],{"class":55},"\u002F\u002F3. 以值方式返回局部对象\n",[49,21351,21352,21354,21356],{"class":51,"line":9273},[49,21353,20296],{"class":62},[49,21355,20805],{"class":62},[49,21357,3230],{"class":66},[49,21359,21360],{"class":51,"line":9285},[49,21361,2802],{"class":66},[49,21363,21364],{"class":51,"line":9297},[49,21365,20286],{"class":66},[49,21367,21368,21370,21372,21374,21376,21378,21380,21382,21385,21387],{"class":51,"line":9309},[49,21369,7781],{"class":66},[49,21371,2432],{"class":109},[49,21373,2913],{"class":66},[49,21375,1406],{"class":109},[49,21377,7770],{"class":109},[49,21379,1821],{"class":66},[49,21381,1745],{"class":109},[49,21383,21384],{"class":66},"p1 ",[49,21386,2432],{"class":109},[49,21388,10092],{"class":66},[49,21390,21391,21393],{"class":51,"line":10968},[49,21392,5344],{"class":109},[49,21394,21395],{"class":66}," p1;\n",[49,21397,21398],{"class":51,"line":10993},[49,21399,137],{"class":66},[49,21401,21402],{"class":51,"line":11016},[49,21403,3654],{"emptyLinePlaceholder":1330},[49,21405,21406,21408,21410],{"class":51,"line":11040},[49,21407,6616],{"class":109},[49,21409,6981],{"class":62},[49,21411,3230],{"class":66},[49,21413,21414],{"class":51,"line":11045},[49,21415,2802],{"class":66},[49,21417,21418,21420,21422,21424],{"class":51,"line":11050},[49,21419,20871],{"class":66},[49,21421,1448],{"class":109},[49,21423,20805],{"class":62},[49,21425,6888],{"class":66},[49,21427,21428,21430,21432,21434,21436,21438,21440,21442,21444,21446],{"class":51,"line":11055},[49,21429,7781],{"class":66},[49,21431,2432],{"class":109},[49,21433,2913],{"class":66},[49,21435,1406],{"class":109},[49,21437,7770],{"class":109},[49,21439,1821],{"class":66},[49,21441,1745],{"class":109},[49,21443,12700],{"class":66},[49,21445,2432],{"class":109},[49,21447,10092],{"class":66},[49,21449,21450],{"class":51,"line":11064},[49,21451,137],{"class":66},[49,21453,21454],{"class":51,"line":11069},[49,21455,3654],{"emptyLinePlaceholder":1330},[49,21457,21458],{"class":51,"line":11075},[49,21459,3654],{"emptyLinePlaceholder":1330},[49,21461,21462,21464,21466],{"class":51,"line":11096},[49,21463,1406],{"class":109},[49,21465,3227],{"class":62},[49,21467,12105],{"class":66},[49,21469,21470],{"class":51,"line":11102},[49,21471,3654],{"emptyLinePlaceholder":1330},[49,21473,21474],{"class":51,"line":11116},[49,21475,21476],{"class":55},"    \u002F\u002Ftest01();\n",[49,21478,21479],{"class":51,"line":11122},[49,21480,21481],{"class":55},"    \u002F\u002Ftest02();\n",[49,21483,21484,21486],{"class":51,"line":11149},[49,21485,20941],{"class":62},[49,21487,6888],{"class":66},[49,21489,21490],{"class":51,"line":11158},[49,21491,3654],{"emptyLinePlaceholder":1330},[49,21493,21494,21496,21498,21500],{"class":51,"line":11164},[49,21495,3557],{"class":62},[49,21497,1403],{"class":66},[49,21499,3562],{"class":1505},[49,21501,3973],{"class":66},[49,21503,21504],{"class":51,"line":11172},[49,21505,3654],{"emptyLinePlaceholder":1330},[49,21507,21508,21510,21512],{"class":51,"line":11177},[49,21509,5344],{"class":109},[49,21511,5347],{"class":73},[49,21513,83],{"class":66},[49,21515,21516],{"class":51,"line":17854},[49,21517,137],{"class":66},[183,21519,21521],{"id":21520},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,21523,21524],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,21526,21527],{},"1．默认构造函数(无参，函数体为空)",[19,21529,21530],{},"2．默认析构函数(无参，函数体为空)",[19,21532,21533],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21535,21536],{},"构造函数调用规则如下：",[23,21538,21539,21542],{},[26,21540,21541],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[26,21543,21544],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[39,21546,21548],{"className":1391,"code":21547,"language":1393,"meta":44,"style":44},"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",[46,21549,21550,21558,21562,21567,21573,21585,21589,21594,21606,21615,21627,21631,21635,21651,21660,21672,21676,21680,21686,21698,21702,21706,21712,21716,21720,21728,21732,21744,21749,21757,21761,21779,21783,21787,21795,21799,21804,21812,21827,21840,21844,21849,21856,21872,21885,21889,21893,21901,21905,21911,21915,21925,21929,21937],{"__ignoreMap":44},[49,21551,21552,21554,21556],{"class":51,"line":52},[49,21553,15945],{"class":109},[49,21555,16820],{"class":62},[49,21557,67],{"class":66},[49,21559,21560],{"class":51,"line":59},[49,21561,15967],{"class":109},[49,21563,21564],{"class":51,"line":70},[49,21565,21566],{"class":55},"    \u002F\u002F无参（默认）构造函数\n",[49,21568,21569,21571],{"class":51,"line":86},[49,21570,19769],{"class":62},[49,21572,12105],{"class":66},[49,21574,21575,21577,21579,21581,21583],{"class":51,"line":98},[49,21576,10921],{"class":66},[49,21578,2432],{"class":109},[49,21580,21060],{"class":1505},[49,21582,2701],{"class":109},[49,21584,10092],{"class":66},[49,21586,21587],{"class":51,"line":121},[49,21588,3441],{"class":66},[49,21590,21591],{"class":51,"line":134},[49,21592,21593],{"class":55},"    \u002F\u002F有参构造函数\n",[49,21595,21596,21598,21600,21602,21604],{"class":51,"line":1085},[49,21597,19769],{"class":62},[49,21599,1403],{"class":66},[49,21601,1406],{"class":109},[49,21603,2655],{"class":6468},[49,21605,13694],{"class":66},[49,21607,21608,21611,21613],{"class":51,"line":2574},[49,21609,21610],{"class":66},"        age ",[49,21612,1448],{"class":109},[49,21614,2689],{"class":66},[49,21616,21617,21619,21621,21623,21625],{"class":51,"line":2586},[49,21618,10921],{"class":66},[49,21620,2432],{"class":109},[49,21622,21100],{"class":1505},[49,21624,2701],{"class":109},[49,21626,10092],{"class":66},[49,21628,21629],{"class":51,"line":2867},[49,21630,3441],{"class":66},[49,21632,21633],{"class":51,"line":2872},[49,21634,20124],{"class":55},[49,21636,21637,21639,21641,21643,21645,21647,21649],{"class":51,"line":2878},[49,21638,19769],{"class":62},[49,21640,1403],{"class":66},[49,21642,8044],{"class":109},[49,21644,16820],{"class":62},[49,21646,1745],{"class":109},[49,21648,8077],{"class":6468},[49,21650,13694],{"class":66},[49,21652,21653,21655,21657],{"class":51,"line":2883},[49,21654,21610],{"class":66},[49,21656,1448],{"class":109},[49,21658,21659],{"class":66}," p.age;\n",[49,21661,21662,21664,21666,21668,21670],{"class":51,"line":2897},[49,21663,10921],{"class":66},[49,21665,2432],{"class":109},[49,21667,21141],{"class":1505},[49,21669,2701],{"class":109},[49,21671,10092],{"class":66},[49,21673,21674],{"class":51,"line":2902},[49,21675,3441],{"class":66},[49,21677,21678],{"class":51,"line":2908},[49,21679,19797],{"class":55},[49,21681,21682,21684],{"class":51,"line":2929},[49,21683,19802],{"class":62},[49,21685,12105],{"class":66},[49,21687,21688,21690,21692,21694,21696],{"class":51,"line":2934},[49,21689,10921],{"class":66},[49,21691,2432],{"class":109},[49,21693,21178],{"class":1505},[49,21695,2701],{"class":109},[49,21697,10092],{"class":66},[49,21699,21700],{"class":51,"line":2948},[49,21701,3441],{"class":66},[49,21703,21704],{"class":51,"line":2953},[49,21705,15967],{"class":109},[49,21707,21708,21710],{"class":51,"line":2982},[49,21709,3239],{"class":109},[49,21711,9049],{"class":66},[49,21713,21714],{"class":51,"line":2987},[49,21715,5249],{"class":66},[49,21717,21718],{"class":51,"line":3004},[49,21719,3654],{"emptyLinePlaceholder":1330},[49,21721,21722,21724,21726],{"class":51,"line":3009},[49,21723,6616],{"class":109},[49,21725,6840],{"class":62},[49,21727,3230],{"class":66},[49,21729,21730],{"class":51,"line":3014},[49,21731,2802],{"class":66},[49,21733,21734,21736,21738,21740,21742],{"class":51,"line":3019},[49,21735,20681],{"class":66},[49,21737,8382],{"class":62},[49,21739,1403],{"class":66},[49,21741,2041],{"class":73},[49,21743,3973],{"class":66},[49,21745,21746],{"class":51,"line":3033},[49,21747,21748],{"class":55},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[49,21750,21751,21753,21755],{"class":51,"line":3038},[49,21752,20681],{"class":66},[49,21754,8285],{"class":62},[49,21756,18765],{"class":66},[49,21758,21759],{"class":51,"line":3831},[49,21760,3654],{"emptyLinePlaceholder":1330},[49,21762,21763,21765,21767,21770,21772,21775,21777],{"class":51,"line":3845},[49,21764,7781],{"class":66},[49,21766,2432],{"class":109},[49,21768,21769],{"class":1505}," \"p2的年龄为： \"",[49,21771,2701],{"class":109},[49,21773,21774],{"class":66}," p2.age ",[49,21776,2432],{"class":109},[49,21778,10092],{"class":66},[49,21780,21781],{"class":51,"line":3853},[49,21782,137],{"class":66},[49,21784,21785],{"class":51,"line":3858},[49,21786,3654],{"emptyLinePlaceholder":1330},[49,21788,21789,21791,21793],{"class":51,"line":3864},[49,21790,6616],{"class":109},[49,21792,6909],{"class":62},[49,21794,3230],{"class":66},[49,21796,21797],{"class":51,"line":3870},[49,21798,2802],{"class":66},[49,21800,21801],{"class":51,"line":3875},[49,21802,21803],{"class":55},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[49,21805,21806,21809],{"class":51,"line":9200},[49,21807,21808],{"class":66},"    Person p1;",[49,21810,21811],{"class":55}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[49,21813,21814,21816,21818,21820,21822,21824],{"class":51,"line":9224},[49,21815,20681],{"class":66},[49,21817,8285],{"class":62},[49,21819,1403],{"class":66},[49,21821,106],{"class":73},[49,21823,7218],{"class":66},[49,21825,21826],{"class":55}," \u002F\u002F用户提供的有参\n",[49,21828,21829,21831,21834,21837],{"class":51,"line":9229},[49,21830,20681],{"class":66},[49,21832,21833],{"class":62},"p3",[49,21835,21836],{"class":66},"(p2);",[49,21838,21839],{"class":55}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[49,21841,21842],{"class":51,"line":9235},[49,21843,3654],{"emptyLinePlaceholder":1330},[49,21845,21846],{"class":51,"line":9262},[49,21847,21848],{"class":55},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[49,21850,21851,21854],{"class":51,"line":9267},[49,21852,21853],{"class":66},"    Person p4;",[49,21855,21811],{"class":55},[49,21857,21858,21860,21863,21865,21867,21869],{"class":51,"line":9273},[49,21859,20681],{"class":66},[49,21861,21862],{"class":62},"p5",[49,21864,1403],{"class":66},[49,21866,106],{"class":73},[49,21868,7218],{"class":66},[49,21870,21871],{"class":55}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[49,21873,21874,21876,21879,21882],{"class":51,"line":9285},[49,21875,20681],{"class":66},[49,21877,21878],{"class":62},"p6",[49,21880,21881],{"class":66},"(p5);",[49,21883,21884],{"class":55}," \u002F\u002F用户自己提供拷贝构造\n",[49,21886,21887],{"class":51,"line":9297},[49,21888,137],{"class":66},[49,21890,21891],{"class":51,"line":9309},[49,21892,3654],{"emptyLinePlaceholder":1330},[49,21894,21895,21897,21899],{"class":51,"line":10968},[49,21896,1406],{"class":109},[49,21898,3227],{"class":62},[49,21900,12105],{"class":66},[49,21902,21903],{"class":51,"line":10993},[49,21904,3654],{"emptyLinePlaceholder":1330},[49,21906,21907,21909],{"class":51,"line":11016},[49,21908,6885],{"class":62},[49,21910,6888],{"class":66},[49,21912,21913],{"class":51,"line":11040},[49,21914,3654],{"emptyLinePlaceholder":1330},[49,21916,21917,21919,21921,21923],{"class":51,"line":11045},[49,21918,3557],{"class":62},[49,21920,1403],{"class":66},[49,21922,3562],{"class":1505},[49,21924,3973],{"class":66},[49,21926,21927],{"class":51,"line":11050},[49,21928,3654],{"emptyLinePlaceholder":1330},[49,21930,21931,21933,21935],{"class":51,"line":11055},[49,21932,5344],{"class":109},[49,21934,5347],{"class":73},[49,21936,83],{"class":66},[49,21938,21939],{"class":51,"line":11064},[49,21940,137],{"class":66},[183,21942,21944],{"id":21943},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,21946,21947],{},"浅拷贝：简单的赋值拷贝操作",[19,21949,21950],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[39,21952,21954],{"className":1391,"code":21953,"language":1393,"meta":44,"style":44},"#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",[46,21955,21956,21962,21972,21978,21982,21986,21991,21997,22001,22014,22018,22022,22029,22033,22043,22058,22071,22075,22080,22085,22101,22105,22118,22123,22128,22133,22142,22147,22162,22166,22170,22174,22180,22184,22189,22204,22208,22219,22233,22237,22246,22250,22256,22268,22272,22280,22284,22301,22332,22340,22368,22372,22376,22384,22388,22394],{"__ignoreMap":44},[49,21957,21958,21960],{"class":51,"line":52},[49,21959,3204],{"class":109},[49,21961,3207],{"class":1505},[49,21963,21964,21966,21968,21970],{"class":51,"line":59},[49,21965,3212],{"class":109},[49,21967,3215],{"class":109},[49,21969,3218],{"class":62},[49,21971,83],{"class":66},[49,21973,21974,21976],{"class":51,"line":70},[49,21975,15945],{"class":109},[49,21977,16422],{"class":62},[49,21979,21980],{"class":51,"line":86},[49,21981,2802],{"class":66},[49,21983,21984],{"class":51,"line":98},[49,21985,15967],{"class":109},[49,21987,21988],{"class":51,"line":121},[49,21989,21990],{"class":55},"    \u002F\u002F默认构造函数\n",[49,21992,21993,21995],{"class":51,"line":134},[49,21994,19769],{"class":62},[49,21996,3230],{"class":66},[49,21998,21999],{"class":51,"line":1085},[49,22000,3284],{"class":66},[49,22002,22003,22005,22007,22010,22012],{"class":51,"line":2574},[49,22004,4705],{"class":66},[49,22006,2432],{"class":109},[49,22008,22009],{"class":1505},"\"默认构造函数\"",[49,22011,2432],{"class":109},[49,22013,2454],{"class":66},[49,22015,22016],{"class":51,"line":2586},[49,22017,3441],{"class":66},[49,22019,22020],{"class":51,"line":2867},[49,22021,21593],{"class":55},[49,22023,22024,22026],{"class":51,"line":2872},[49,22025,19802],{"class":62},[49,22027,22028],{"class":66},"(int age,int height)\n",[49,22030,22031],{"class":51,"line":2878},[49,22032,3284],{"class":66},[49,22034,22035,22038,22040],{"class":51,"line":2883},[49,22036,22037],{"class":66},"        m_Age",[49,22039,1448],{"class":109},[49,22041,22042],{"class":66},"age;\n",[49,22044,22045,22048,22050,22052,22055],{"class":51,"line":2897},[49,22046,22047],{"class":66},"        m_Height",[49,22049,12969],{"class":109},[49,22051,3636],{"class":109},[49,22053,22054],{"class":66},"(height);",[49,22056,22057],{"class":55},"\u002F\u002F放到堆区\n",[49,22059,22060,22062,22064,22067,22069],{"class":51,"line":2902},[49,22061,4705],{"class":66},[49,22063,2432],{"class":109},[49,22065,22066],{"class":1505},"\"有参构造函数\"",[49,22068,2432],{"class":109},[49,22070,2454],{"class":66},[49,22072,22073],{"class":51,"line":2908},[49,22074,3441],{"class":66},[49,22076,22077],{"class":51,"line":2929},[49,22078,22079],{"class":55},"    \u002F\u002F深拷贝解决上述问题\n",[49,22081,22082],{"class":51,"line":2934},[49,22083,22084],{"class":55},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[49,22086,22087,22089,22091,22093,22095,22097,22099],{"class":51,"line":2948},[49,22088,19769],{"class":62},[49,22090,1403],{"class":66},[49,22092,8044],{"class":109},[49,22094,16820],{"class":62},[49,22096,11836],{"class":109},[49,22098,19],{"class":6468},[49,22100,1409],{"class":66},[49,22102,22103],{"class":51,"line":2953},[49,22104,3284],{"class":66},[49,22106,22107,22109,22111,22114,22116],{"class":51,"line":2982},[49,22108,4705],{"class":66},[49,22110,2432],{"class":109},[49,22112,22113],{"class":1505},"\"拷贝构造函数\"",[49,22115,2432],{"class":109},[49,22117,2454],{"class":66},[49,22119,22120],{"class":51,"line":2987},[49,22121,22122],{"class":55},"        \u002F\u002F编译器默认的写如下注释部分\n",[49,22124,22125],{"class":51,"line":3004},[49,22126,22127],{"class":55},"        \u002F\u002Fm_Age=p.m_Age;\n",[49,22129,22130],{"class":51,"line":3009},[49,22131,22132],{"class":55},"        \u002F\u002Fm_Height=p.m_Height;\n",[49,22134,22135,22137,22139],{"class":51,"line":3014},[49,22136,22037],{"class":66},[49,22138,1448],{"class":109},[49,22140,22141],{"class":66},"p.m_Age;\n",[49,22143,22144],{"class":51,"line":3019},[49,22145,22146],{"class":55},"        \u002F\u002F深拷贝操作\n",[49,22148,22149,22151,22153,22155,22157,22159],{"class":51,"line":3033},[49,22150,22047],{"class":66},[49,22152,12969],{"class":109},[49,22154,3636],{"class":109},[49,22156,1403],{"class":66},[49,22158,1846],{"class":109},[49,22160,22161],{"class":66},"p.m_Height);\n",[49,22163,22164],{"class":51,"line":3038},[49,22165,3441],{"class":66},[49,22167,22168],{"class":51,"line":3831},[49,22169,3654],{"emptyLinePlaceholder":1330},[49,22171,22172],{"class":51,"line":3845},[49,22173,19797],{"class":55},[49,22175,22176,22178],{"class":51,"line":3853},[49,22177,19802],{"class":62},[49,22179,3230],{"class":66},[49,22181,22182],{"class":51,"line":3858},[49,22183,3284],{"class":66},[49,22185,22186],{"class":51,"line":3864},[49,22187,22188],{"class":55},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[49,22190,22191,22193,22196,22199,22202],{"class":51,"line":3870},[49,22192,3751],{"class":109},[49,22194,22195],{"class":66},"(m_Height ",[49,22197,22198],{"class":109},"!=",[49,22200,22201],{"class":73}," NULL",[49,22203,1409],{"class":66},[49,22205,22206],{"class":51,"line":3875},[49,22207,3764],{"class":66},[49,22209,22210,22213,22216],{"class":51,"line":9200},[49,22211,22212],{"class":109},"            delete",[49,22214,22215],{"class":66}," m_Height;",[49,22217,22218],{"class":55}," \u002F\u002F释放堆区内存\n",[49,22220,22221,22224,22226,22228,22230],{"class":51,"line":9224},[49,22222,22223],{"class":66},"            m_Height",[49,22225,1448],{"class":109},[49,22227,3646],{"class":73},[49,22229,1457],{"class":66},[49,22231,22232],{"class":55}," \u002F\u002F防止野指针\n",[49,22234,22235],{"class":51,"line":9229},[49,22236,3783],{"class":66},[49,22238,22239,22241,22243],{"class":51,"line":9235},[49,22240,4705],{"class":66},[49,22242,2432],{"class":109},[49,22244,22245],{"class":1505},"\"Person的析构函数调用\"\n",[49,22247,22248],{"class":51,"line":9262},[49,22249,3441],{"class":66},[49,22251,22252,22254],{"class":51,"line":9267},[49,22253,3239],{"class":109},[49,22255,16916],{"class":66},[49,22257,22258,22260,22262,22265],{"class":51,"line":9273},[49,22259,3239],{"class":109},[49,22261,7770],{"class":109},[49,22263,22264],{"class":66},"m_Height;",[49,22266,22267],{"class":55}," \u002F\u002F定义一个指针，指向身高\n",[49,22269,22270],{"class":51,"line":9285},[49,22271,5249],{"class":66},[49,22273,22274,22276,22278],{"class":51,"line":9297},[49,22275,6616],{"class":109},[49,22277,6840],{"class":62},[49,22279,3230],{"class":66},[49,22281,22282],{"class":51,"line":9309},[49,22283,2802],{"class":66},[49,22285,22286,22288,22290,22292,22294,22296,22299],{"class":51,"line":10968},[49,22287,20681],{"class":66},[49,22289,8382],{"class":62},[49,22291,1403],{"class":66},[49,22293,2041],{"class":73},[49,22295,1770],{"class":66},[49,22297,22298],{"class":73},"160",[49,22300,3973],{"class":66},[49,22302,22303,22305,22307,22310,22312,22315,22317,22320,22322,22325,22327,22329],{"class":51,"line":10993},[49,22304,2807],{"class":66},[49,22306,2432],{"class":109},[49,22308,22309],{"class":1505},"\"p1的年龄为:\"",[49,22311,2432],{"class":109},[49,22313,22314],{"class":66},"p1.m_Age",[49,22316,2432],{"class":109},[49,22318,22319],{"class":1505},"\"身高为：\"",[49,22321,7671],{"class":109},[49,22323,22324],{"class":66},"p1.m_Height",[49,22326,2432],{"class":109},[49,22328,2497],{"class":66},[49,22330,22331],{"class":55},"  \u002F\u002F18\n",[49,22333,22334,22336,22338],{"class":51,"line":11016},[49,22335,20681],{"class":66},[49,22337,8285],{"class":62},[49,22339,18765],{"class":66},[49,22341,22342,22344,22346,22349,22351,22353,22355,22357,22359,22362,22364,22366],{"class":51,"line":11040},[49,22343,2807],{"class":66},[49,22345,2432],{"class":109},[49,22347,22348],{"class":1505},"\"p2的年龄为：\"",[49,22350,2432],{"class":109},[49,22352,20711],{"class":66},[49,22354,2432],{"class":109},[49,22356,22319],{"class":1505},[49,22358,7671],{"class":109},[49,22360,22361],{"class":66},"p2.m_Height",[49,22363,2432],{"class":109},[49,22365,2497],{"class":66},[49,22367,22331],{"class":55},[49,22369,22370],{"class":51,"line":11045},[49,22371,14462],{"class":66},[49,22373,22374],{"class":51,"line":11050},[49,22375,137],{"class":66},[49,22377,22378,22380,22382],{"class":51,"line":11055},[49,22379,1406],{"class":109},[49,22381,3227],{"class":62},[49,22383,3230],{"class":66},[49,22385,22386],{"class":51,"line":11064},[49,22387,2802],{"class":66},[49,22389,22390,22392],{"class":51,"line":11069},[49,22391,6885],{"class":62},[49,22393,6888],{"class":66},[49,22395,22396],{"class":51,"line":11075},[49,22397,137],{"class":66},[19,22399,22400],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22402,22403],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22405,22406],{},[174,22407],{"alt":44,"src":22408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22410,22411],{},"浅拷贝问题要使用深拷贝来解决",[19,22413,22414],{},[174,22415],{"alt":44,"src":22416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22418,22419],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[183,22421,22423],{"id":22422},"_826初始化列表","8.2.6初始化列表",[19,22425,22426],{},"作用：初始化属性",[19,22428,6435],{},[39,22430,22433],{"className":22431,"code":22432,"language":267},[1094],"构造函数():属性1(值1),属性2(值2).....{}\n",[46,22434,22432],{"__ignoreMap":44},[19,22436,22437],{},"例子",[39,22439,22441],{"className":1391,"code":22440,"language":1393,"meta":44,"style":44},"#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",[46,22442,22443,22449,22459,22465,22469,22474,22478,22483,22488,22493,22498,22503,22508,22512,22517,22522,22565,22574,22592,22610,22628,22632,22636,22643,22650,22657,22661,22665,22673,22677,22681,22701,22710,22714,22718,22728,22732,22740],{"__ignoreMap":44},[49,22444,22445,22447],{"class":51,"line":52},[49,22446,3204],{"class":109},[49,22448,3207],{"class":1505},[49,22450,22451,22453,22455,22457],{"class":51,"line":59},[49,22452,3212],{"class":109},[49,22454,3215],{"class":109},[49,22456,3218],{"class":62},[49,22458,83],{"class":66},[49,22460,22461,22463],{"class":51,"line":70},[49,22462,15945],{"class":109},[49,22464,16422],{"class":62},[49,22466,22467],{"class":51,"line":86},[49,22468,2802],{"class":66},[49,22470,22471],{"class":51,"line":98},[49,22472,22473],{"class":109},"    public:\n",[49,22475,22476],{"class":51,"line":121},[49,22477,3654],{"emptyLinePlaceholder":1330},[49,22479,22480],{"class":51,"line":134},[49,22481,22482],{"class":55},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[49,22484,22485],{"class":51,"line":1085},[49,22486,22487],{"class":55},"    \u002F\u002FPerson(int a, int b, int c) {\n",[49,22489,22490],{"class":51,"line":2574},[49,22491,22492],{"class":55},"    \u002F\u002F  m_A = a;\n",[49,22494,22495],{"class":51,"line":2586},[49,22496,22497],{"class":55},"    \u002F\u002F  m_B = b;\n",[49,22499,22500],{"class":51,"line":2867},[49,22501,22502],{"class":55},"    \u002F\u002F  m_C = c;\n",[49,22504,22505],{"class":51,"line":2872},[49,22506,22507],{"class":55},"    \u002F\u002F}\n",[49,22509,22510],{"class":51,"line":2878},[49,22511,3654],{"emptyLinePlaceholder":1330},[49,22513,22514],{"class":51,"line":2883},[49,22515,22516],{"class":55},"    \u002F\u002F初始化列表方式初始化\n",[49,22518,22519],{"class":51,"line":2897},[49,22520,22521],{"class":55},"    \u002F\u002F使用有参构造函数\n",[49,22523,22524,22526,22528,22530,22532,22534,22536,22538,22540,22542,22544,22547,22550,22553,22556,22559,22562],{"class":51,"line":2902},[49,22525,19769],{"class":62},[49,22527,1403],{"class":66},[49,22529,1406],{"class":109},[49,22531,2655],{"class":6468},[49,22533,13687],{"class":66},[49,22535,1406],{"class":109},[49,22537,4087],{"class":6468},[49,22539,13687],{"class":66},[49,22541,1406],{"class":109},[49,22543,4103],{"class":6468},[49,22545,22546],{"class":66},") :",[49,22548,22549],{"class":62},"m_A",[49,22551,22552],{"class":66},"(a), ",[49,22554,22555],{"class":62},"m_B",[49,22557,22558],{"class":66},"(b), ",[49,22560,22561],{"class":62},"m_C",[49,22563,22564],{"class":66},"(c) {}\n",[49,22566,22567,22569,22572],{"class":51,"line":2908},[49,22568,16160],{"class":109},[49,22570,22571],{"class":62}," PrintPerson",[49,22573,12105],{"class":66},[49,22575,22576,22578,22580,22583,22585,22588,22590],{"class":51,"line":2929},[49,22577,10921],{"class":66},[49,22579,2432],{"class":109},[49,22581,22582],{"class":1505}," \"mA:\"",[49,22584,2701],{"class":109},[49,22586,22587],{"class":66}," m_A ",[49,22589,2432],{"class":109},[49,22591,10092],{"class":66},[49,22593,22594,22596,22598,22601,22603,22606,22608],{"class":51,"line":2934},[49,22595,10921],{"class":66},[49,22597,2432],{"class":109},[49,22599,22600],{"class":1505}," \"mB:\"",[49,22602,2701],{"class":109},[49,22604,22605],{"class":66}," m_B ",[49,22607,2432],{"class":109},[49,22609,10092],{"class":66},[49,22611,22612,22614,22616,22619,22621,22624,22626],{"class":51,"line":2948},[49,22613,10921],{"class":66},[49,22615,2432],{"class":109},[49,22617,22618],{"class":1505}," \"mC:\"",[49,22620,2701],{"class":109},[49,22622,22623],{"class":66}," m_C ",[49,22625,2432],{"class":109},[49,22627,10092],{"class":66},[49,22629,22630],{"class":51,"line":2953},[49,22631,3441],{"class":66},[49,22633,22634],{"class":51,"line":2982},[49,22635,16473],{"class":109},[49,22637,22638,22640],{"class":51,"line":2987},[49,22639,3239],{"class":109},[49,22641,22642],{"class":66}," m_A;\n",[49,22644,22645,22647],{"class":51,"line":3004},[49,22646,3239],{"class":109},[49,22648,22649],{"class":66}," m_B;\n",[49,22651,22652,22654],{"class":51,"line":3009},[49,22653,3239],{"class":109},[49,22655,22656],{"class":66}," m_C;\n",[49,22658,22659],{"class":51,"line":3014},[49,22660,5249],{"class":66},[49,22662,22663],{"class":51,"line":3019},[49,22664,3654],{"emptyLinePlaceholder":1330},[49,22666,22667,22669,22671],{"class":51,"line":3033},[49,22668,1406],{"class":109},[49,22670,3227],{"class":62},[49,22672,7230],{"class":66},[49,22674,22675],{"class":51,"line":3038},[49,22676,2802],{"class":66},[49,22678,22679],{"class":51,"line":3831},[49,22680,3654],{"emptyLinePlaceholder":1330},[49,22682,22683,22685,22687,22689,22691,22693,22695,22697,22699],{"class":51,"line":3845},[49,22684,20681],{"class":66},[49,22686,19],{"class":62},[49,22688,1403],{"class":66},[49,22690,159],{"class":73},[49,22692,13687],{"class":66},[49,22694,1478],{"class":73},[49,22696,13687],{"class":66},[49,22698,1472],{"class":73},[49,22700,3973],{"class":66},[49,22702,22703,22705,22708],{"class":51,"line":3853},[49,22704,17116],{"class":66},[49,22706,22707],{"class":62},"PrintPerson",[49,22709,6888],{"class":66},[49,22711,22712],{"class":51,"line":3858},[49,22713,3654],{"emptyLinePlaceholder":1330},[49,22715,22716],{"class":51,"line":3864},[49,22717,3654],{"emptyLinePlaceholder":1330},[49,22719,22720,22722,22724,22726],{"class":51,"line":3870},[49,22721,3557],{"class":62},[49,22723,1403],{"class":66},[49,22725,3562],{"class":1505},[49,22727,3973],{"class":66},[49,22729,22730],{"class":51,"line":3875},[49,22731,3654],{"emptyLinePlaceholder":1330},[49,22733,22734,22736,22738],{"class":51,"line":9200},[49,22735,5344],{"class":109},[49,22737,5347],{"class":73},[49,22739,83],{"class":66},[49,22741,22742],{"class":51,"line":9224},[49,22743,137],{"class":66},[19,22745,22746,22747,22750,22751],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[485,22748,22749],{},"参数名就是定义的对象属性","，",[485,22752,22753],{},"属性后面的值为有参构造函数的形参",[39,22755,22757],{"className":1391,"code":22756,"language":1393,"meta":44,"style":44},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[46,22758,22759],{"__ignoreMap":44},[49,22760,22761,22763,22765,22767,22770,22772,22775,22777,22780,22782,22785,22787,22790,22792],{"class":51,"line":52},[49,22762,20296],{"class":62},[49,22764,1403],{"class":66},[49,22766,1406],{"class":109},[49,22768,22769],{"class":66}," a.",[49,22771,1406],{"class":109},[49,22773,22774],{"class":66}," b,",[49,22776,1406],{"class":109},[49,22778,22779],{"class":66}," b):",[49,22781,22549],{"class":62},[49,22783,22784],{"class":66},"(a),",[49,22786,22555],{"class":62},[49,22788,22789],{"class":66},"(c),",[49,22791,22561],{"class":62},[49,22793,22794],{"class":66},"(b) {}\n",[183,22796,22798],{"id":22797},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22800,22801],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22803,551],{},[39,22805,22807],{"className":1391,"code":22806,"language":1393,"meta":44,"style":44},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[46,22808,22809,22814,22819,22823,22828,22832],{"__ignoreMap":44},[49,22810,22811],{"class":51,"line":52},[49,22812,22813],{"class":66},"A{};\n",[49,22815,22816],{"class":51,"line":59},[49,22817,22818],{"class":66},"B\n",[49,22820,22821],{"class":51,"line":70},[49,22822,2802],{"class":66},[49,22824,22825],{"class":51,"line":86},[49,22826,22827],{"class":66},"    A a;\n",[49,22829,22830],{"class":51,"line":98},[49,22831,137],{"class":66},[49,22833,22834],{"class":51,"line":121},[49,22835,22836],{"class":55},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22838,22839],{},"案例",[39,22841,22843],{"className":1391,"code":22842,"language":1393,"meta":44,"style":44},"\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",[46,22844,22845,22850,22857,22861,22866,22871,22885,22889,22899,22910,22914,22921,22925,22938,22942,22947,22952,22956,22962,22966,22970,22974,23005,23009,23020,23024,23030,23034,23047,23051,23055,23059,23064,23069,23073,23081,23085,23102,23121,23125,23133,23137,23143],{"__ignoreMap":44},[49,22846,22847],{"class":51,"line":52},[49,22848,22849],{"class":55},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[49,22851,22852,22854],{"class":51,"line":59},[49,22853,15945],{"class":109},[49,22855,22856],{"class":62}," Phone\n",[49,22858,22859],{"class":51,"line":70},[49,22860,2802],{"class":66},[49,22862,22863],{"class":51,"line":86},[49,22864,22865],{"class":66},"public：\n",[49,22867,22868],{"class":51,"line":98},[49,22869,22870],{"class":55},"    \u002F\u002F 赋值(构造函数)\n",[49,22872,22873,22876,22878,22880,22883],{"class":51,"line":121},[49,22874,22875],{"class":62},"    Phone",[49,22877,1403],{"class":66},[49,22879,16168],{"class":62},[49,22881,22882],{"class":6468}," pName",[49,22884,1409],{"class":66},[49,22886,22887],{"class":51,"line":134},[49,22888,3284],{"class":66},[49,22890,22891,22894,22896],{"class":51,"line":1085},[49,22892,22893],{"class":66},"        m_pName",[49,22895,1448],{"class":109},[49,22897,22898],{"class":66},"pName;\n",[49,22900,22901,22903,22905,22908],{"class":51,"line":2574},[49,22902,4705],{"class":66},[49,22904,2432],{"class":109},[49,22906,22907],{"class":1505},"\"Phone的构造函数调用\"",[49,22909,83],{"class":66},[49,22911,22912],{"class":51,"line":2586},[49,22913,3441],{"class":66},[49,22915,22916,22919],{"class":51,"line":2867},[49,22917,22918],{"class":62},"    ~Phone",[49,22920,3230],{"class":66},[49,22922,22923],{"class":51,"line":2872},[49,22924,3284],{"class":66},[49,22926,22927,22929,22931,22934,22936],{"class":51,"line":2878},[49,22928,4705],{"class":66},[49,22930,2432],{"class":109},[49,22932,22933],{"class":1505},"\"Phone析构函数调用\"",[49,22935,2432],{"class":109},[49,22937,2454],{"class":66},[49,22939,22940],{"class":51,"line":2883},[49,22941,3441],{"class":66},[49,22943,22944],{"class":51,"line":2897},[49,22945,22946],{"class":55},"    \u002F\u002F\n",[49,22948,22949],{"class":51,"line":2902},[49,22950,22951],{"class":66},"    string m_PName;\n",[49,22953,22954],{"class":51,"line":2908},[49,22955,5249],{"class":66},[49,22957,22958,22960],{"class":51,"line":2929},[49,22959,15945],{"class":109},[49,22961,16422],{"class":62},[49,22963,22964],{"class":51,"line":2934},[49,22965,2802],{"class":66},[49,22967,22968],{"class":51,"line":2948},[49,22969,15967],{"class":109},[49,22971,22972],{"class":51,"line":2953},[49,22973,18244],{"class":55},[49,22975,22976,22978,22980,22982,22984,22986,22988,22991,22994,22996,22999,23002],{"class":51,"line":2982},[49,22977,19769],{"class":62},[49,22979,1403],{"class":66},[49,22981,16168],{"class":62},[49,22983,16171],{"class":6468},[49,22985,1770],{"class":66},[49,22987,16168],{"class":62},[49,22989,22990],{"class":6468}," pname",[49,22992,22993],{"class":66},"):",[49,22995,16261],{"class":62},[49,22997,22998],{"class":66},"(name),m_phone.",[49,23000,23001],{"class":62},"m_PName",[49,23003,23004],{"class":66},"(pname) \n",[49,23006,23007],{"class":51,"line":2987},[49,23008,3284],{"class":66},[49,23010,23011,23013,23015,23018],{"class":51,"line":3004},[49,23012,4705],{"class":66},[49,23014,2432],{"class":109},[49,23016,23017],{"class":1505},"\"Person的构造函数调用\"",[49,23019,83],{"class":66},[49,23021,23022],{"class":51,"line":3009},[49,23023,3441],{"class":66},[49,23025,23026,23028],{"class":51,"line":3014},[49,23027,19802],{"class":62},[49,23029,3230],{"class":66},[49,23031,23032],{"class":51,"line":3019},[49,23033,3284],{"class":66},[49,23035,23036,23038,23040,23043,23045],{"class":51,"line":3033},[49,23037,4705],{"class":66},[49,23039,2432],{"class":109},[49,23041,23042],{"class":1505},"\"Person析构函数调用\"",[49,23044,2432],{"class":109},[49,23046,2454],{"class":66},[49,23048,23049],{"class":51,"line":3038},[49,23050,3441],{"class":66},[49,23052,23053],{"class":51,"line":3831},[49,23054,9032],{"class":55},[49,23056,23057],{"class":51,"line":3845},[49,23058,16143],{"class":66},[49,23060,23061],{"class":51,"line":3853},[49,23062,23063],{"class":55},"    \u002F\u002F手机\n",[49,23065,23066],{"class":51,"line":3858},[49,23067,23068],{"class":66},"    Phone m_Phone;\n",[49,23070,23071],{"class":51,"line":3864},[49,23072,5249],{"class":66},[49,23074,23075,23077,23079],{"class":51,"line":3870},[49,23076,6616],{"class":109},[49,23078,6840],{"class":62},[49,23080,3230],{"class":66},[49,23082,23083],{"class":51,"line":3875},[49,23084,2802],{"class":66},[49,23086,23087,23089,23091,23093,23095,23097,23100],{"class":51,"line":9200},[49,23088,20681],{"class":66},[49,23090,19],{"class":62},[49,23092,1403],{"class":66},[49,23094,9168],{"class":1505},[49,23096,1770],{"class":66},[49,23098,23099],{"class":1505},"\"安卓\"",[49,23101,3973],{"class":66},[49,23103,23104,23106,23108,23111,23113,23116,23118],{"class":51,"line":9224},[49,23105,2807],{"class":66},[49,23107,2432],{"class":109},[49,23109,23110],{"class":66},"p.Name",[49,23112,2432],{"class":109},[49,23114,23115],{"class":1505},"\"拿着：\"",[49,23117,2432],{"class":109},[49,23119,23120],{"class":66},"p.m_phone.m_PName;\n",[49,23122,23123],{"class":51,"line":9229},[49,23124,137],{"class":66},[49,23126,23127,23129,23131],{"class":51,"line":9235},[49,23128,1406],{"class":109},[49,23130,3227],{"class":62},[49,23132,3230],{"class":66},[49,23134,23135],{"class":51,"line":9262},[49,23136,2802],{"class":66},[49,23138,23139,23141],{"class":51,"line":9267},[49,23140,6885],{"class":62},[49,23142,6888],{"class":66},[49,23144,23145],{"class":51,"line":9273},[49,23146,137],{"class":66},[19,23148,10277],{},[39,23150,23152],{"className":1391,"code":23151,"language":1393,"meta":44,"style":44},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[46,23153,23154,23159],{"__ignoreMap":44},[49,23155,23156],{"class":51,"line":52},[49,23157,23158],{"class":55},"    \u002F\u002F不需要写这个：\n",[49,23160,23161],{"class":51,"line":59},[49,23162,23163],{"class":55},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23165,23166],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[39,23168,23170],{"className":1391,"code":23169,"language":1393,"meta":44,"style":44},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[46,23171,23172],{"__ignoreMap":44},[49,23173,23174,23176,23179,23181,23184,23187],{"class":51,"line":52},[49,23175,20296],{"class":62},[49,23177,23178],{"class":66},"(string name.string pname):",[49,23180,16261],{"class":62},[49,23182,23183],{"class":66},"(name),",[49,23185,23186],{"class":62},"m_phone",[49,23188,23189],{"class":66},"(pname) {}\n",[19,23191,23192,23193,1448,23196],{},"采用的是隐式转换法，实际为如下：\n",[46,23194,23195],{},"m_phone(pname)",[46,23197,23198],{},"Phone m_phone=pname",[19,23200,23201,23204],{},[485,23202,23203],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23206,23207],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[183,23209,23211],{"id":23210},"_828静态对象","8.2.8静态对象",[19,23213,23214],{},"静态对象在成员对象前static，称为静态对象",[19,23216,23217],{},"静态对象分为两类：",[591,23219,23220],{},[26,23221,23222],{},"静态成员变量",[23,23224,23225,23228,23231],{},[26,23226,23227],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[26,23229,23230],{},"②在编译阶段分配内存",[26,23232,23233],{},"③类内声明，类外初始化",[591,23235,23236],{"start":59},[26,23237,23238],{},"静态成员函数",[23,23240,23241,23244],{},[26,23242,23243],{},"①所有对象共享同一个函数",[26,23245,23246],{},"②静态成员函数只能访问静态成员变量",[525,23248,23250],{"id":23249},"_8281静态成员变量","8.2.8.1静态成员变量",[39,23252,23254],{"className":1391,"code":23253,"language":1393,"meta":44,"style":44},"#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",[46,23255,23256,23262,23272,23278,23282,23286,23291,23296,23301,23309,23313,23317,23321,23329,23333,23337,23342,23355,23359,23367,23371,23377],{"__ignoreMap":44},[49,23257,23258,23260],{"class":51,"line":52},[49,23259,3204],{"class":109},[49,23261,3207],{"class":1505},[49,23263,23264,23266,23268,23270],{"class":51,"line":59},[49,23265,3212],{"class":109},[49,23267,3215],{"class":109},[49,23269,3218],{"class":62},[49,23271,83],{"class":66},[49,23273,23274,23276],{"class":51,"line":70},[49,23275,15945],{"class":109},[49,23277,16422],{"class":62},[49,23279,23280],{"class":51,"line":86},[49,23281,2802],{"class":66},[49,23283,23284],{"class":51,"line":98},[49,23285,15967],{"class":109},[49,23287,23288],{"class":51,"line":121},[49,23289,23290],{"class":55},"    \u002F\u002F非静态成员变量\n",[49,23292,23293],{"class":51,"line":134},[49,23294,23295],{"class":55},"    \u002F\u002F int m_A;\n",[49,23297,23298],{"class":51,"line":1085},[49,23299,23300],{"class":55},"    \u002F\u002F定义静态成员变量\n",[49,23302,23303,23305,23307],{"class":51,"line":2574},[49,23304,12272],{"class":109},[49,23306,3636],{"class":109},[49,23308,22642],{"class":66},[49,23310,23311],{"class":51,"line":2586},[49,23312,3654],{"emptyLinePlaceholder":1330},[49,23314,23315],{"class":51,"line":2867},[49,23316,3654],{"emptyLinePlaceholder":1330},[49,23318,23319],{"class":51,"line":2872},[49,23320,5249],{"class":66},[49,23322,23323,23325,23327],{"class":51,"line":2878},[49,23324,6616],{"class":109},[49,23326,6840],{"class":62},[49,23328,3230],{"class":66},[49,23330,23331],{"class":51,"line":2883},[49,23332,2802],{"class":66},[49,23334,23335],{"class":51,"line":2897},[49,23336,16564],{"class":66},[49,23338,23339],{"class":51,"line":2902},[49,23340,23341],{"class":55},"    \u002F\u002F输出类成员变量这块内存\n",[49,23343,23344,23346,23348,23351,23353],{"class":51,"line":2908},[49,23345,2807],{"class":66},[49,23347,2432],{"class":109},[49,23349,23350],{"class":66},"p.m_A",[49,23352,2432],{"class":109},[49,23354,2454],{"class":66},[49,23356,23357],{"class":51,"line":2929},[49,23358,137],{"class":66},[49,23360,23361,23363,23365],{"class":51,"line":2934},[49,23362,1406],{"class":109},[49,23364,3227],{"class":62},[49,23366,3230],{"class":66},[49,23368,23369],{"class":51,"line":2948},[49,23370,2802],{"class":66},[49,23372,23373,23375],{"class":51,"line":2953},[49,23374,6885],{"class":62},[49,23376,3230],{"class":66},[49,23378,23379],{"class":51,"line":2982},[49,23380,137],{"class":66},[19,23382,23383],{},"此时输出是报错的：无法解析外部命令",[19,23385,23386],{},"解决这一问题：必须用到类内声明，类外初始化操作",[39,23388,23390],{"className":1391,"code":23389,"language":1393,"meta":44,"style":44},"#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",[46,23391,23392,23398,23408,23414,23418,23422,23427,23435,23439,23444,23459,23467,23471,23475,23480,23485,23497,23502,23513,23518,23523,23536,23540,23548,23552,23558],{"__ignoreMap":44},[49,23393,23394,23396],{"class":51,"line":52},[49,23395,3204],{"class":109},[49,23397,3207],{"class":1505},[49,23399,23400,23402,23404,23406],{"class":51,"line":59},[49,23401,3212],{"class":109},[49,23403,3215],{"class":109},[49,23405,3218],{"class":62},[49,23407,83],{"class":66},[49,23409,23410,23412],{"class":51,"line":70},[49,23411,15945],{"class":109},[49,23413,16422],{"class":62},[49,23415,23416],{"class":51,"line":86},[49,23417,2802],{"class":66},[49,23419,23420],{"class":51,"line":98},[49,23421,15967],{"class":109},[49,23423,23424],{"class":51,"line":121},[49,23425,23426],{"class":55},"    \u002F\u002F类内声明\n",[49,23428,23429,23431,23433],{"class":51,"line":134},[49,23430,12272],{"class":109},[49,23432,3636],{"class":109},[49,23434,22642],{"class":66},[49,23436,23437],{"class":51,"line":1085},[49,23438,5249],{"class":66},[49,23440,23441],{"class":51,"line":2574},[49,23442,23443],{"class":55},"\u002F\u002F类外初始化\n",[49,23445,23446,23448,23450,23453,23455,23457],{"class":51,"line":2586},[49,23447,1406],{"class":109},[49,23449,16820],{"class":62},[49,23451,23452],{"class":66},"::m_A",[49,23454,1448],{"class":109},[49,23456,106],{"class":73},[49,23458,83],{"class":66},[49,23460,23461,23463,23465],{"class":51,"line":2867},[49,23462,6616],{"class":109},[49,23464,6840],{"class":62},[49,23466,3230],{"class":66},[49,23468,23469],{"class":51,"line":2872},[49,23470,2802],{"class":66},[49,23472,23473],{"class":51,"line":2878},[49,23474,16564],{"class":66},[49,23476,23477],{"class":51,"line":2883},[49,23478,23479],{"class":55},"    \u002F\u002F访问变量的原内存空间\n",[49,23481,23482],{"class":51,"line":2897},[49,23483,23484],{"class":55},"    \u002F\u002F100\n",[49,23486,23487,23489,23491,23493,23495],{"class":51,"line":2902},[49,23488,2807],{"class":66},[49,23490,2432],{"class":109},[49,23492,23350],{"class":66},[49,23494,2432],{"class":109},[49,23496,2454],{"class":66},[49,23498,23499],{"class":51,"line":2908},[49,23500,23501],{"class":66},"    Person p2;\n",[49,23503,23504,23507,23509,23511],{"class":51,"line":2929},[49,23505,23506],{"class":66},"    p2.m_A",[49,23508,1448],{"class":109},[49,23510,2977],{"class":73},[49,23512,83],{"class":66},[49,23514,23515],{"class":51,"line":2934},[49,23516,23517],{"class":55},"    \u002F\u002F继续访问这片空间\n",[49,23519,23520],{"class":51,"line":2948},[49,23521,23522],{"class":55},"    \u002F\u002F200\n",[49,23524,23525,23527,23529,23532,23534],{"class":51,"line":2953},[49,23526,2807],{"class":66},[49,23528,2432],{"class":109},[49,23530,23531],{"class":66},"p2.m_A",[49,23533,2432],{"class":109},[49,23535,2454],{"class":66},[49,23537,23538],{"class":51,"line":2982},[49,23539,137],{"class":66},[49,23541,23542,23544,23546],{"class":51,"line":2987},[49,23543,1406],{"class":109},[49,23545,3227],{"class":62},[49,23547,3230],{"class":66},[49,23549,23550],{"class":51,"line":3004},[49,23551,2802],{"class":66},[49,23553,23554,23556],{"class":51,"line":3009},[49,23555,6885],{"class":62},[49,23557,6888],{"class":66},[49,23559,23560],{"class":51,"line":3014},[49,23561,137],{"class":66},[19,23563,23564],{},[485,23565,23566],{},"静态变量的访问",[39,23568,23570],{"className":1391,"code":23569,"language":1393,"meta":44,"style":44},"#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",[46,23571,23572,23578,23588,23594,23598,23602,23606,23614,23618,23623,23631,23635,23639,23653,23668,23676,23680,23685,23690,23695,23700,23712,23717,23722,23736,23753,23757,23765,23769,23775],{"__ignoreMap":44},[49,23573,23574,23576],{"class":51,"line":52},[49,23575,3204],{"class":109},[49,23577,3207],{"class":1505},[49,23579,23580,23582,23584,23586],{"class":51,"line":59},[49,23581,3212],{"class":109},[49,23583,3215],{"class":109},[49,23585,3218],{"class":62},[49,23587,83],{"class":66},[49,23589,23590,23592],{"class":51,"line":70},[49,23591,15945],{"class":109},[49,23593,16422],{"class":62},[49,23595,23596],{"class":51,"line":86},[49,23597,2802],{"class":66},[49,23599,23600],{"class":51,"line":98},[49,23601,15967],{"class":109},[49,23603,23604],{"class":51,"line":121},[49,23605,23426],{"class":55},[49,23607,23608,23610,23612],{"class":51,"line":134},[49,23609,12272],{"class":109},[49,23611,3636],{"class":109},[49,23613,22642],{"class":66},[49,23615,23616],{"class":51,"line":1085},[49,23617,16473],{"class":109},[49,23619,23620],{"class":51,"line":2574},[49,23621,23622],{"class":55},"    \u002F\u002F静态成员变量也是有访问权限的\n",[49,23624,23625,23627,23629],{"class":51,"line":2586},[49,23626,12272],{"class":109},[49,23628,3636],{"class":109},[49,23630,22649],{"class":66},[49,23632,23633],{"class":51,"line":2867},[49,23634,5249],{"class":66},[49,23636,23637],{"class":51,"line":2872},[49,23638,23443],{"class":55},[49,23640,23641,23643,23645,23647,23649,23651],{"class":51,"line":2878},[49,23642,1406],{"class":109},[49,23644,16820],{"class":62},[49,23646,23452],{"class":66},[49,23648,1448],{"class":109},[49,23650,106],{"class":73},[49,23652,83],{"class":66},[49,23654,23655,23657,23659,23662,23664,23666],{"class":51,"line":2883},[49,23656,1406],{"class":109},[49,23658,16820],{"class":62},[49,23660,23661],{"class":66},"::m_B",[49,23663,1448],{"class":109},[49,23665,875],{"class":73},[49,23667,83],{"class":66},[49,23669,23670,23672,23674],{"class":51,"line":2897},[49,23671,6616],{"class":109},[49,23673,6909],{"class":62},[49,23675,3230],{"class":66},[49,23677,23678],{"class":51,"line":2902},[49,23679,2802],{"class":66},[49,23681,23682],{"class":51,"line":2908},[49,23683,23684],{"class":55},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[49,23686,23687],{"class":51,"line":2929},[49,23688,23689],{"class":55},"    \u002F\u002F静态成员变量有两种访问方式：\n",[49,23691,23692],{"class":51,"line":2934},[49,23693,23694],{"class":55},"    \u002F\u002F1.通过对象进行访问\n",[49,23696,23697],{"class":51,"line":2948},[49,23698,23699],{"class":66},"    Person p;  \n",[49,23701,23702,23704,23706,23708,23710],{"class":51,"line":2953},[49,23703,2807],{"class":66},[49,23705,2432],{"class":109},[49,23707,23350],{"class":66},[49,23709,2432],{"class":109},[49,23711,2454],{"class":66},[49,23713,23714],{"class":51,"line":2982},[49,23715,23716],{"class":55},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[49,23718,23719],{"class":51,"line":2987},[49,23720,23721],{"class":55},"    \u002F\u002F2.通过类名进行访问\n",[49,23723,23724,23726,23728,23730,23732,23734],{"class":51,"line":3004},[49,23725,2807],{"class":66},[49,23727,2432],{"class":109},[49,23729,20296],{"class":62},[49,23731,23452],{"class":66},[49,23733,2432],{"class":109},[49,23735,2454],{"class":66},[49,23737,23738,23740,23742,23744,23746,23748,23750],{"class":51,"line":3009},[49,23739,2807],{"class":66},[49,23741,2432],{"class":109},[49,23743,20296],{"class":62},[49,23745,23661],{"class":66},[49,23747,2432],{"class":109},[49,23749,2497],{"class":66},[49,23751,23752],{"class":55}," \u002F\u002F没有访问权限，报错\n",[49,23754,23755],{"class":51,"line":3014},[49,23756,137],{"class":66},[49,23758,23759,23761,23763],{"class":51,"line":3019},[49,23760,1406],{"class":109},[49,23762,3227],{"class":62},[49,23764,3230],{"class":66},[49,23766,23767],{"class":51,"line":3033},[49,23768,2802],{"class":66},[49,23770,23771,23773],{"class":51,"line":3038},[49,23772,6954],{"class":62},[49,23774,6888],{"class":66},[49,23776,23777],{"class":51,"line":3831},[49,23778,137],{"class":66},[525,23780,23782],{"id":23781},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23784,23785],{},"1.静态成员函数定义与访问",[39,23787,23789],{"className":1391,"code":23788,"language":1393,"meta":44,"style":44},"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",[46,23790,23791,23797,23801,23805,23810,23821,23825,23839,23843,23847,23855,23859,23864,23869,23873,23881,23886,23896],{"__ignoreMap":44},[49,23792,23793,23795],{"class":51,"line":52},[49,23794,15945],{"class":109},[49,23796,16422],{"class":62},[49,23798,23799],{"class":51,"line":59},[49,23800,2802],{"class":66},[49,23802,23803],{"class":51,"line":70},[49,23804,15967],{"class":109},[49,23806,23807],{"class":51,"line":86},[49,23808,23809],{"class":55},"    \u002F\u002F在公共权限下定义静态成员函数\n",[49,23811,23812,23814,23817,23819],{"class":51,"line":98},[49,23813,12272],{"class":109},[49,23815,23816],{"class":109}," void",[49,23818,12637],{"class":62},[49,23820,3230],{"class":66},[49,23822,23823],{"class":51,"line":121},[49,23824,3284],{"class":66},[49,23826,23827,23830,23832,23835,23837],{"class":51,"line":134},[49,23828,23829],{"class":66},"        coout",[49,23831,2432],{"class":109},[49,23833,23834],{"class":1505},"\"静态成员函数的调用\"",[49,23836,2432],{"class":109},[49,23838,2454],{"class":66},[49,23840,23841],{"class":51,"line":1085},[49,23842,3441],{"class":66},[49,23844,23845],{"class":51,"line":2574},[49,23846,5249],{"class":66},[49,23848,23849,23851,23853],{"class":51,"line":2586},[49,23850,6616],{"class":109},[49,23852,6840],{"class":62},[49,23854,3230],{"class":66},[49,23856,23857],{"class":51,"line":2867},[49,23858,2802],{"class":66},[49,23860,23861],{"class":51,"line":2872},[49,23862,23863],{"class":55},"    \u002F\u002F静态成员函数的调用方式:\n",[49,23865,23866],{"class":51,"line":2878},[49,23867,23868],{"class":55},"    \u002F\u002F1.通过对象访问\n",[49,23870,23871],{"class":51,"line":2883},[49,23872,16564],{"class":66},[49,23874,23875,23877,23879],{"class":51,"line":2897},[49,23876,17116],{"class":66},[49,23878,12803],{"class":62},[49,23880,6888],{"class":66},[49,23882,23883],{"class":51,"line":2902},[49,23884,23885],{"class":55},"    \u002F\u002F2.通过类名访问\n",[49,23887,23888,23890,23892,23894],{"class":51,"line":2908},[49,23889,19769],{"class":62},[49,23891,18982],{"class":66},[49,23893,12803],{"class":62},[49,23895,6888],{"class":66},[49,23897,23898],{"class":51,"line":2929},[49,23899,137],{"class":66},[591,23901,23902],{"start":59},[26,23903,23904],{},"静态成员函数只能访问静态成员变量",[39,23906,23908],{"className":1391,"code":23907,"language":1393,"meta":44,"style":44},"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",[46,23909,23910,23916,23920,23924,23928,23938,23942,23956,23961,23973,23977,23988,23998,24002,24006,24010,24020,24024,24037,24041,24045,24049,24053,24067,24075,24079,24083,24087,24091,24099,24103,24113,24118,24122,24130,24134,24140],{"__ignoreMap":44},[49,23911,23912,23914],{"class":51,"line":52},[49,23913,15945],{"class":109},[49,23915,16422],{"class":62},[49,23917,23918],{"class":51,"line":59},[49,23919,2802],{"class":66},[49,23921,23922],{"class":51,"line":70},[49,23923,15967],{"class":109},[49,23925,23926],{"class":51,"line":86},[49,23927,23809],{"class":55},[49,23929,23930,23932,23934,23936],{"class":51,"line":98},[49,23931,12272],{"class":109},[49,23933,23816],{"class":109},[49,23935,12637],{"class":62},[49,23937,3230],{"class":66},[49,23939,23940],{"class":51,"line":121},[49,23941,3284],{"class":66},[49,23943,23944,23947,23949,23951,23953],{"class":51,"line":134},[49,23945,23946],{"class":66},"        m_A",[49,23948,1448],{"class":109},[49,23950,1703],{"class":73},[49,23952,1457],{"class":66},[49,23954,23955],{"class":55}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[49,23957,23958],{"class":51,"line":1085},[49,23959,23960],{"class":55},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[49,23962,23963,23965,23967,23969,23971],{"class":51,"line":2574},[49,23964,23829],{"class":66},[49,23966,2432],{"class":109},[49,23968,23834],{"class":1505},[49,23970,2432],{"class":109},[49,23972,2454],{"class":66},[49,23974,23975],{"class":51,"line":2586},[49,23976,3441],{"class":66},[49,23978,23979,23981,23983,23985],{"class":51,"line":2867},[49,23980,12272],{"class":109},[49,23982,3636],{"class":109},[49,23984,16699],{"class":66},[49,23986,23987],{"class":55}," \u002F\u002F静态成员变量\n",[49,23989,23990,23992,23995],{"class":51,"line":2872},[49,23991,3239],{"class":109},[49,23993,23994],{"class":66}," m_B;",[49,23996,23997],{"class":55}," \u002F\u002F非静态成员变量\n",[49,23999,24000],{"class":51,"line":2878},[49,24001,3654],{"emptyLinePlaceholder":1330},[49,24003,24004],{"class":51,"line":2883},[49,24005,16473],{"class":109},[49,24007,24008],{"class":51,"line":2897},[49,24009,23622],{"class":55},[49,24011,24012,24014,24016,24018],{"class":51,"line":2902},[49,24013,12272],{"class":109},[49,24015,23816],{"class":109},[49,24017,14870],{"class":62},[49,24019,3230],{"class":66},[49,24021,24022],{"class":51,"line":2908},[49,24023,3284],{"class":66},[49,24025,24026,24028,24030,24033,24035],{"class":51,"line":2929},[49,24027,4705],{"class":66},[49,24029,2432],{"class":109},[49,24031,24032],{"class":1505},"\"这是私有权限下的静态函数调用\"",[49,24034,2432],{"class":109},[49,24036,2454],{"class":66},[49,24038,24039],{"class":51,"line":2934},[49,24040,3441],{"class":66},[49,24042,24043],{"class":51,"line":2948},[49,24044,3654],{"emptyLinePlaceholder":1330},[49,24046,24047],{"class":51,"line":2953},[49,24048,3654],{"emptyLinePlaceholder":1330},[49,24050,24051],{"class":51,"line":2982},[49,24052,5249],{"class":66},[49,24054,24055,24057,24059,24061,24063,24065],{"class":51,"line":2987},[49,24056,1406],{"class":109},[49,24058,16820],{"class":62},[49,24060,23452],{"class":66},[49,24062,1448],{"class":109},[49,24064,80],{"class":73},[49,24066,83],{"class":66},[49,24068,24069,24071,24073],{"class":51,"line":3004},[49,24070,6616],{"class":109},[49,24072,6840],{"class":62},[49,24074,3230],{"class":66},[49,24076,24077],{"class":51,"line":3009},[49,24078,2802],{"class":66},[49,24080,24081],{"class":51,"line":3014},[49,24082,23863],{"class":55},[49,24084,24085],{"class":51,"line":3019},[49,24086,23868],{"class":55},[49,24088,24089],{"class":51,"line":3033},[49,24090,16564],{"class":66},[49,24092,24093,24095,24097],{"class":51,"line":3038},[49,24094,17116],{"class":66},[49,24096,12803],{"class":62},[49,24098,6888],{"class":66},[49,24100,24101],{"class":51,"line":3831},[49,24102,23885],{"class":55},[49,24104,24105,24107,24109,24111],{"class":51,"line":3845},[49,24106,19769],{"class":62},[49,24108,18982],{"class":66},[49,24110,12803],{"class":62},[49,24112,6888],{"class":66},[49,24114,24115],{"class":51,"line":3853},[49,24116,24117],{"class":55},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[49,24119,24120],{"class":51,"line":3858},[49,24121,137],{"class":66},[49,24123,24124,24126,24128],{"class":51,"line":3864},[49,24125,1406],{"class":109},[49,24127,3227],{"class":62},[49,24129,3230],{"class":66},[49,24131,24132],{"class":51,"line":3870},[49,24133,2802],{"class":66},[49,24135,24136,24138],{"class":51,"line":3875},[49,24137,6885],{"class":62},[49,24139,6888],{"class":66},[49,24141,24142],{"class":51,"line":9200},[49,24143,137],{"class":66},[183,24145,24147],{"id":24146},"_83c对象模型和this指针","8.3C++对象模型和this指针",[525,24149,24151],{"id":24150},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24153,24154],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24156,24157],{},"只有非静态成员变量才属于类的对象上",[24159,24160,24162],"h5",{"id":24161},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[39,24164,24166],{"className":1391,"code":24165,"language":1393,"meta":44,"style":44},"#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",[46,24167,24168,24175,24185,24191,24195,24199,24203,24211,24215,24219,24242,24246,24254,24258,24264],{"__ignoreMap":44},[49,24169,24170,24172],{"class":51,"line":52},[49,24171,3204],{"class":109},[49,24173,24174],{"class":1505},"\u003Ciostraem>\n",[49,24176,24177,24179,24181,24183],{"class":51,"line":59},[49,24178,3212],{"class":109},[49,24180,3215],{"class":109},[49,24182,3218],{"class":62},[49,24184,83],{"class":66},[49,24186,24187,24189],{"class":51,"line":70},[49,24188,15945],{"class":109},[49,24190,16422],{"class":62},[49,24192,24193],{"class":51,"line":86},[49,24194,2802],{"class":66},[49,24196,24197],{"class":51,"line":98},[49,24198,3654],{"emptyLinePlaceholder":1330},[49,24200,24201],{"class":51,"line":121},[49,24202,5249],{"class":66},[49,24204,24205,24207,24209],{"class":51,"line":134},[49,24206,6616],{"class":109},[49,24208,6840],{"class":62},[49,24210,3230],{"class":66},[49,24212,24213],{"class":51,"line":1085},[49,24214,2802],{"class":66},[49,24216,24217],{"class":51,"line":2574},[49,24218,16564],{"class":66},[49,24220,24221,24223,24225,24228,24230,24233,24235,24237,24239],{"class":51,"line":2586},[49,24222,2807],{"class":66},[49,24224,2432],{"class":109},[49,24226,24227],{"class":1505},"\"size of p=\"",[49,24229,2432],{"class":109},[49,24231,24232],{"class":62},"sizeoif",[49,24234,7791],{"class":66},[49,24236,2432],{"class":109},[49,24238,2497],{"class":66},[49,24240,24241],{"class":55}," \u002F\u002F查看这个空类的占用的内存空间\n",[49,24243,24244],{"class":51,"line":2867},[49,24245,137],{"class":66},[49,24247,24248,24250,24252],{"class":51,"line":2872},[49,24249,1406],{"class":109},[49,24251,3227],{"class":62},[49,24253,3230],{"class":66},[49,24255,24256],{"class":51,"line":2878},[49,24257,2802],{"class":66},[49,24259,24260,24262],{"class":51,"line":2883},[49,24261,6885],{"class":62},[49,24263,6888],{"class":66},[49,24265,24266],{"class":51,"line":2897},[49,24267,137],{"class":66},[19,24269,24270],{},"输出结果为：size of p=1",[19,24272,24273],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24275,24276],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24159,24278,24280],{"id":24279},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[39,24282,24284],{"className":1391,"code":24283,"language":1393,"meta":44,"style":44},"#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",[46,24285,24286,24292,24302,24310,24314,24323,24327,24335,24339,24343,24362,24366,24370,24378,24382,24388],{"__ignoreMap":44},[49,24287,24288,24290],{"class":51,"line":52},[49,24289,3204],{"class":109},[49,24291,3207],{"class":1505},[49,24293,24294,24296,24298,24300],{"class":51,"line":59},[49,24295,3212],{"class":109},[49,24297,3215],{"class":109},[49,24299,3218],{"class":62},[49,24301,83],{"class":66},[49,24303,24304,24306,24308],{"class":51,"line":70},[49,24305,15945],{"class":109},[49,24307,16820],{"class":62},[49,24309,3928],{"class":66},[49,24311,24312],{"class":51,"line":86},[49,24313,2802],{"class":66},[49,24315,24316,24318,24320],{"class":51,"line":98},[49,24317,3239],{"class":109},[49,24319,16699],{"class":66},[49,24321,24322],{"class":55},"\u002F\u002F非静态成员变量\n",[49,24324,24325],{"class":51,"line":121},[49,24326,5249],{"class":66},[49,24328,24329,24331,24333],{"class":51,"line":134},[49,24330,6616],{"class":109},[49,24332,6840],{"class":62},[49,24334,3230],{"class":66},[49,24336,24337],{"class":51,"line":1085},[49,24338,2802],{"class":66},[49,24340,24341],{"class":51,"line":2574},[49,24342,16564],{"class":66},[49,24344,24345,24347,24349,24351,24353,24355,24357,24359],{"class":51,"line":2586},[49,24346,2807],{"class":66},[49,24348,2432],{"class":109},[49,24350,24227],{"class":1505},[49,24352,2629],{"class":109},[49,24354,7791],{"class":66},[49,24356,2432],{"class":109},[49,24358,2497],{"class":66},[49,24360,24361],{"class":55}," \u002F\u002F查看不是空对象时占用多少内存\n",[49,24363,24364],{"class":51,"line":2867},[49,24365,3654],{"emptyLinePlaceholder":1330},[49,24367,24368],{"class":51,"line":2872},[49,24369,137],{"class":66},[49,24371,24372,24374,24376],{"class":51,"line":2878},[49,24373,1406],{"class":109},[49,24375,3227],{"class":62},[49,24377,3230],{"class":66},[49,24379,24380],{"class":51,"line":2883},[49,24381,2802],{"class":66},[49,24383,24384,24386],{"class":51,"line":2897},[49,24385,6885],{"class":62},[49,24387,6888],{"class":66},[49,24389,24390],{"class":51,"line":2902},[49,24391,137],{"class":66},[19,24393,24394],{},"输出结果：size of p=4",[19,24396,24397],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[591,24399,24400],{},[26,24401,24402],{},"如果加上非静态成员变量，Person类修改如下",[39,24404,24406],{"className":1391,"code":24405,"language":1393,"meta":44,"style":44},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[46,24407,24408,24414,24418,24424,24432,24436,24441],{"__ignoreMap":44},[49,24409,24410,24412],{"class":51,"line":52},[49,24411,15945],{"class":109},[49,24413,16422],{"class":62},[49,24415,24416],{"class":51,"line":59},[49,24417,2802],{"class":66},[49,24419,24420,24422],{"class":51,"line":70},[49,24421,3239],{"class":109},[49,24423,22642],{"class":66},[49,24425,24426,24428,24430],{"class":51,"line":86},[49,24427,12272],{"class":109},[49,24429,3636],{"class":109},[49,24431,22649],{"class":66},[49,24433,24434],{"class":51,"line":98},[49,24435,5249],{"class":66},[49,24437,24438],{"class":51,"line":121},[49,24439,24440],{"class":55},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[49,24442,24443,24445,24447,24449,24451,24453],{"class":51,"line":134},[49,24444,1406],{"class":109},[49,24446,16820],{"class":62},[49,24448,23661],{"class":66},[49,24450,1448],{"class":109},[49,24452,80],{"class":73},[49,24454,83],{"class":66},[19,24456,24457],{},"输出结果：4",[19,24459,24460],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[591,24462,24463],{"start":59},[26,24464,24465],{},"加上非静态成员函数",[39,24467,24469],{"className":1391,"code":24468,"language":1393,"meta":44,"style":44},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[46,24470,24471,24478,24482,24488,24496,24500,24504,24508],{"__ignoreMap":44},[49,24472,24473,24475],{"class":51,"line":52},[49,24474,15945],{"class":109},[49,24476,24477],{"class":62},"  Person\n",[49,24479,24480],{"class":51,"line":59},[49,24481,2802],{"class":66},[49,24483,24484,24486],{"class":51,"line":70},[49,24485,3239],{"class":109},[49,24487,22642],{"class":66},[49,24489,24490,24492,24494],{"class":51,"line":86},[49,24491,16160],{"class":109},[49,24493,12637],{"class":62},[49,24495,3230],{"class":66},[49,24497,24498],{"class":51,"line":98},[49,24499,3284],{"class":66},[49,24501,24502],{"class":51,"line":121},[49,24503,3654],{"emptyLinePlaceholder":1330},[49,24505,24506],{"class":51,"line":134},[49,24507,3441],{"class":66},[49,24509,24510],{"class":51,"line":1085},[49,24511,5249],{"class":66},[19,24513,24514],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[591,24516,24517],{"start":70},[26,24518,24519],{},"加上静态成员函数",[39,24521,24523],{"className":1391,"code":24522,"language":1393,"meta":44,"style":44},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[46,24524,24525,24531,24535,24541,24549,24553,24557,24561,24572,24576,24580,24584],{"__ignoreMap":44},[49,24526,24527,24529],{"class":51,"line":52},[49,24528,15945],{"class":109},[49,24530,24477],{"class":62},[49,24532,24533],{"class":51,"line":59},[49,24534,2802],{"class":66},[49,24536,24537,24539],{"class":51,"line":70},[49,24538,3239],{"class":109},[49,24540,22642],{"class":66},[49,24542,24543,24545,24547],{"class":51,"line":86},[49,24544,16160],{"class":109},[49,24546,12637],{"class":62},[49,24548,3230],{"class":66},[49,24550,24551],{"class":51,"line":98},[49,24552,3284],{"class":66},[49,24554,24555],{"class":51,"line":121},[49,24556,3654],{"emptyLinePlaceholder":1330},[49,24558,24559],{"class":51,"line":134},[49,24560,3441],{"class":66},[49,24562,24563,24565,24567,24570],{"class":51,"line":1085},[49,24564,12272],{"class":109},[49,24566,23816],{"class":109},[49,24568,24569],{"class":62}," func1",[49,24571,3230],{"class":66},[49,24573,24574],{"class":51,"line":2574},[49,24575,3284],{"class":66},[49,24577,24578],{"class":51,"line":2586},[49,24579,3654],{"emptyLinePlaceholder":1330},[49,24581,24582],{"class":51,"line":2867},[49,24583,3441],{"class":66},[49,24585,24586],{"class":51,"line":2872},[49,24587,5249],{"class":66},[19,24589,24457],{},[19,24591,24592],{},"解释：静态成员函数也不属于类上",[1305,24594,8926],{},{"title":44,"searchDepth":59,"depth":59,"links":24596},[24597,24603],{"id":15896,"depth":59,"text":15897,"children":24598},[24599,24600,24601,24602],{"id":15900,"depth":70,"text":15901},{"id":16625,"depth":70,"text":16626},{"id":16797,"depth":70,"text":16798},{"id":17255,"depth":70,"text":17256},{"id":19627,"depth":59,"text":19628,"children":24604},[24605,24606,24607,24608,24609,24610,24611,24612,24613],{"id":19639,"depth":70,"text":19640},{"id":19932,"depth":70,"text":19933},{"id":20423,"depth":70,"text":20424},{"id":21520,"depth":70,"text":21521},{"id":21943,"depth":70,"text":21944},{"id":22422,"depth":70,"text":22423},{"id":22797,"depth":70,"text":22798},{"id":23210,"depth":70,"text":23211},{"id":24146,"depth":70,"text":24147},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15862,"description":24614},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24621,"title":1393,"body":24622,"description":1327,"extension":1328,"meta":24626,"navigation":1330,"path":24628,"seo":24629,"stem":24630,"__hash__":24631},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24623,"toc":24624},[],{"title":44,"searchDepth":59,"depth":59,"links":24625},[],{"category":24627},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1393,"description":1327},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24633,"title":24634,"body":24635,"description":44,"extension":1328,"meta":25225,"navigation":1330,"path":25226,"seo":25227,"stem":25228,"__hash__":25229},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24636,"toc":25207},[24637,24640,24644,24647,24650,24653,24671,24676,24679,24682,24685,24688,24693,24696,24701,24704,24707,24711,24714,24717,24723,24726,24744,24748,24752,24755,24760,24763,24767,24770,24783,24786,24790,24793,24796,24799,24824,24827,24836,24847,24862,24894,24898,24905,24913,24917,24920,24923,24928,24932,24935,24938,24943,24946,24950,24953,24956,24961,24964,24968,24973,24977,25043,25047,25050,25053,25056,25059,25062,25068,25089,25092,25106,25115,25119,25122,25125,25130,25133,25138,25143,25146,25149,25154,25159,25162,25167,25172,25175,25180,25185,25188,25191,25196,25199,25204],[10,24638,24634],{"id":24639},"_1强化学习基本认识",[14,24641,24643],{"id":24642},"_11什么是强化学习","1.1.什么是强化学习",[19,24645,24646],{},"强化学习有两部分组成：智能体和环境；",[19,24648,24649],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,24651,24652],{},"强化学习与监督学习的区别:",[591,24654,24655,24658,24661,24664],{},[26,24656,24657],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[26,24659,24660],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[26,24662,24663],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[26,24665,24666,24667,24670],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[485,24668,24669],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,24672,24673],{},[174,24674],{"alt":44,"src":24675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,24677,24678],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,24680,24681],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,24683,24684],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,24686,24687],{},"获取奖励",[19,24689,24690],{},[174,24691],{"alt":44,"src":24692},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,24694,24695],{},"强化学习可以分成标准强化学习和深度强化学习",[19,24697,24698],{},[174,24699],{"alt":44,"src":24700},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,24702,24703],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,24705,24706],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24708,24710],{"id":24709},"_12强化学习应用场景","1.2.强化学习应用场景",[19,24712,24713],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,24715,24716],{},"具身智能中的应用",[19,24718,24719,24722],{},[485,24720,24721],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,24724,24725],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,24727,24728,24729,24732,24733,24736,24737,24740,24741],{},"机器人是",[485,24730,24731],{},"躯体","，深度学习是",[485,24734,24735],{},"神经元****网络","，VLA是",[485,24738,24739],{},"通用的行为逻辑","，而强化学习是",[485,24742,24743],{},"教练",[14,24745,24747],{"id":24746},"_13序列决策","1.3.序列决策",[183,24749,24751],{"id":24750},"_131智能体与环境","1.3.1.智能体与环境",[19,24753,24754],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,24756,24757],{},[174,24758],{"alt":44,"src":24759},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,24761,24762],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[183,24764,24766],{"id":24765},"_132奖励","1.3.2.奖励",[19,24768,24769],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,24771,24772,24773,24782],{},"取某个策略的表现如何。强化学习的目的就是",[485,24774,24775,24776,24781],{},"最大化",[485,24777,24778],{},[485,24779,24780],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,24784,24785],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[183,24787,24789],{"id":24788},"_133序列决策","1.3.3.序列决策",[19,24791,24792],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,24794,24795],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,24797,24798],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,24800,24801,24805,24806,24808,24809,24811,24812,24814,24815,15047,24818,15047,24821],{},[24802,24803,24804],"em",{},"Ht"," = ",[24802,24807,1987],{},"1*, a",[24802,24810,159],{},", r",[24802,24813,159],{},", . . . ,* ",[24802,24816,24817],{},"ot",[24802,24819,24820],{},", at ,",[24802,24822,24823],{},"rt",[19,24825,24826],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,24828,24829,24805,24832,2913,24834,1821],{},[24802,24830,24831],{},"st",[24802,24833,1454],{},[24802,24835,24804],{},[19,24837,24838,24839,24842,24843,24846],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[485,24840,24841],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[485,24844,24845],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,24848,24849,24850,24853,24854,24857,24858,24861],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[485,24851,24852],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[485,24855,24856],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24802,24859,24860],{},"S, A, T, R, Ω, O, γ",")。",[19,24863,24864,24865,24867,24868,24870,24871,1403,24873,24876,24877,24879,24880,1403,24883,24886,24887,24889,24890,24893],{},"其中 ",[24802,24866,2080],{}," 表示状态空间，为隐变量，",[24802,24869,1624],{}," 为动作空间，",[24802,24872,2104],{},[24802,24874,24875],{},"s ′ |s, a",") 为状态转移概率，",[24802,24878,2055],{}," 为奖励函数，",[24802,24881,24882],{},"Ω",[24802,24884,24885],{},"o|s, a",") 为观测概率，",[24802,24888,1981],{}," 为观测空间，",[24802,24891,24892],{},"γ"," 为折扣因子。",[14,24895,24897],{"id":24896},"_14动作空间","1.4.动作空间",[19,24899,24900,24901,24904],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[485,24902,24903],{},"动作空间"," ，动作空间分为:",[591,24906,24907,24910],{},[26,24908,24909],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[26,24911,24912],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24914,24916],{"id":24915},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,24918,24919],{},"由策略、价值函数、模型三部分组成",[19,24921,24922],{},"这三者组成马尔可夫决策过程",[19,24924,24925],{},[174,24926],{"alt":44,"src":24927},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[183,24929,24931],{"id":24930},"_151策略","1.5.1.策略",[19,24933,24934],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,24936,24937],{},"策略可分为两种：",[19,24939,24940],{},[174,24941],{"alt":44,"src":24942},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,24944,24945],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[183,24947,24949],{"id":24948},"_152价值函数","1.5.2.价值函数",[19,24951,24952],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,24954,24955],{},"价值函数中有一个折扣因子，类似于存款利息",[19,24957,24958],{},[174,24959],{"alt":44,"src":24960},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,24962,24963],{},"进入某个状态采取的最优动作可以通过Q函数得到",[183,24965,24967],{"id":24966},"_153模型","1.5.3.模型",[19,24969,24970],{},[174,24971],{"alt":44,"src":24972},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24974,24976],{"id":24975},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[293,24978,24979,24989],{},[296,24980,24981],{},[299,24982,24983,24986],{},[302,24984,24985],{"align":304},"类型",[302,24987,24988],{"align":304},"特点",[310,24990,24991,25001,25011,25021,25033],{},[299,24992,24993,24998],{},[315,24994,24995],{"align":304},[485,24996,24997],{},"基于价值的智能体",[315,24999,25000],{"align":304},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[299,25002,25003,25008],{},[315,25004,25005],{"align":304},[485,25006,25007],{},"基于策略的智能体",[315,25009,25010],{"align":304},"直接学习策略，没有学习价值函数",[299,25012,25013,25018],{},[315,25014,25015],{"align":304},[485,25016,25017],{},"演员-评论员智能体",[315,25019,25020],{"align":304},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[299,25022,25023,25028],{},[315,25024,25025],{"align":304},[485,25026,25027],{},"有模型强化学习智能体",[315,25029,25030],{"align":304},[174,25031],{"alt":44,"src":25032},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[299,25034,25035,25040],{},[315,25036,25037],{"align":304},[485,25038,25039],{},"免模型强化学习智能体",[315,25041,25042],{"align":304},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25044,25046],{"id":25045},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25048,25049],{},"学习和规划是序列决策的两个基本问题",[19,25051,25052],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25054,25055],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25057,25058],{},"强化学习用到的库：Gym",[19,25060,25061],{},"Gym可以检验强化学习算法的优劣",[19,25063,25064,25067],{},[485,25065,25066],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[39,25069,25073],{"className":25070,"code":25071,"language":25072,"meta":44,"style":44},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[46,25074,25075],{"__ignoreMap":44},[49,25076,25077,25080,25083,25086],{"class":51,"line":52},[49,25078,25079],{"class":62},"pip",[49,25081,25082],{"class":1505}," install",[49,25084,25085],{"class":1505}," gym==",[49,25087,25088],{"class":73},"0.25.2\n",[19,25090,25091],{},"显示图形界面需要",[39,25093,25095],{"className":25070,"code":25094,"language":25072,"meta":44,"style":44},"pip install pygame\n",[46,25096,25097],{"__ignoreMap":44},[49,25098,25099,25101,25103],{"class":51,"line":52},[49,25100,25079],{"class":62},[49,25102,25082],{"class":1505},[49,25104,25105],{"class":1505}," pygame\n",[19,25107,25108,25109],{},"有关Gym库的相关文档介绍：",[1630,25110,25114],{"href":25111,"rel":25112},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25113],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25116,25118],{"id":25117},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25120,25121],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25123,25124],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25126,25127],{},[174,25128],{"alt":44,"src":25129},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25131,25132],{},"折扣率需要自己来设定",[19,25134,25135],{},[174,25136],{"alt":44,"src":25137},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[591,25139,25140],{},[26,25141,25142],{},"状态转移函数：",[19,25144,25145],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25147,25148],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25150,25151],{},[174,25152],{"alt":44,"src":25153},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[591,25155,25156],{"start":59},[26,25157,25158],{},"动作价值函数：",[19,25160,25161],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25163,25164],{},[174,25165],{"alt":44,"src":25166},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[591,25168,25169],{"start":70},[26,25170,25171],{},"最优动作价值函数：",[19,25173,25174],{},"这个函数是对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,25176,25177],{},[174,25178],{"alt":44,"src":25179},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[591,25181,25182],{"start":86},[26,25183,25184],{},"状态价值函数:",[19,25186,25187],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25189,25190],{},"它衡量的是“一个具体动作”的长期价值",[19,25192,25193],{},[174,25194],{"alt":44,"src":25195},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25197,25198],{},"几个价值函数之间的比较：",[19,25200,25201],{},[174,25202],{"alt":44,"src":25203},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1305,25205,25206],{},"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":44,"searchDepth":59,"depth":59,"links":25208},[25209,25210,25211,25216,25217,25222,25223,25224],{"id":24642,"depth":59,"text":24643},{"id":24709,"depth":59,"text":24710},{"id":24746,"depth":59,"text":24747,"children":25212},[25213,25214,25215],{"id":24750,"depth":70,"text":24751},{"id":24765,"depth":70,"text":24766},{"id":24788,"depth":70,"text":24789},{"id":24896,"depth":59,"text":24897},{"id":24915,"depth":59,"text":24916,"children":25218},[25219,25220,25221],{"id":24930,"depth":70,"text":24931},{"id":24948,"depth":70,"text":24949},{"id":24966,"depth":70,"text":24967},{"id":24975,"depth":59,"text":24976},{"id":25045,"depth":59,"text":25046},{"id":25117,"depth":59,"text":25118},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24634,"description":44},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25231,"title":25232,"body":25233,"description":25240,"extension":1328,"meta":25251,"navigation":1330,"path":25252,"seo":25253,"stem":25254,"__hash__":25255},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25234,"toc":25249},[25235,25238,25241,25246],[10,25236,25232],{"id":25237},"_2马尔可夫决策过程",[19,25239,25240],{},"这是强化学习的基本框架",[19,25242,25243],{},[174,25244],{"alt":44,"src":25245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25247,25248],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":44,"searchDepth":59,"depth":59,"links":25250},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25232,"description":25240},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25257,"title":25258,"body":25259,"description":44,"extension":1328,"meta":25375,"navigation":1330,"path":25376,"seo":25377,"stem":25378,"__hash__":25379},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25260,"toc":25370},[25261,25264,25268,25271,25276,25281,25284,25289,25292,25297,25300,25304,25309,25312,25317,25322,25327,25330,25334,25339,25342,25347,25352,25357,25362,25365],[10,25262,25258],{"id":25263},"_3动作价值函数",[14,25265,25267],{"id":25266},"_31dqn","3.1.DQN",[19,25269,25270],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25272,25273],{},[174,25274],{"alt":44,"src":25275},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25277,25278],{},[174,25279],{"alt":44,"src":25280},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25282,25283],{},"DQN算法的描述：",[19,25285,25286],{},[174,25287],{"alt":44,"src":25288},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25290,25291],{},"这里的Dense指的是全连接层",[19,25293,25294],{},[174,25295],{"alt":44,"src":25296},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25298,25299],{},"当前观测的状态为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,25301,25303],{"id":25302},"_32dqn的举例","3.2.DQN的举例",[19,25305,25306],{},[174,25307],{"alt":44,"src":25308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25310,25311],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25313,25314],{},[174,25315],{"alt":44,"src":25316},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25318,25319],{},[174,25320],{"alt":44,"src":25321},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25323,25324],{},[174,25325],{"alt":44,"src":25326},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25328,25329],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25331,25333],{"id":25332},"_33td算法","3.3.TD算法",[19,25335,25336],{},[174,25337],{"alt":44,"src":25338},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25340,25341],{},"强化学习TD算法公式的粗略解释：",[19,25343,25344],{},[174,25345],{"alt":44,"src":25346},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25348,25349],{},[174,25350],{"alt":44,"src":25351},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25353,25354],{},[174,25355],{"alt":44,"src":25356},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25358,25359],{},[174,25360],{"alt":44,"src":25361},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25363,25364],{},"TD算法总结：",[19,25366,25367],{},[174,25368],{"alt":44,"src":25369},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":44,"searchDepth":59,"depth":59,"links":25371},[25372,25373,25374],{"id":25266,"depth":59,"text":25267},{"id":25302,"depth":59,"text":25303},{"id":25332,"depth":59,"text":25333},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25258,"description":44},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25381,"title":25382,"body":25383,"description":44,"extension":1328,"meta":25616,"navigation":1330,"path":25617,"seo":25618,"stem":25619,"__hash__":25620},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25384,"toc":25612},[25385,25388,25392,25395,25398,25403,25408,25411,25416,25421,25424,25429,25432,25437,25440,25445,25448,25453,25456,25461,25466,25469,25474,25477,25480,25485,25488,25493,25498,25502,25505,25508,25513,25518,25521,25526,25531,25534,25539,25542,25545,25550,25553,25558,25561,25566,25571,25574,25579,25584,25587,25592,25595,25600,25603],[10,25386,25382],{"id":25387},"_4策略学习",[14,25389,25391],{"id":25390},"_41概念描述","4.1.概念描述",[19,25393,25394],{},"用神经网络（策略网络）近似策略函数",[19,25396,25397],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25399,25400],{},[174,25401],{"alt":44,"src":25402},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25404,25405],{},[174,25406],{"alt":44,"src":25407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25409,25410],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25412,25413],{},[174,25414],{"alt":44,"src":25415},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25417,25418],{},[174,25419],{"alt":44,"src":25420},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25422,25423],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25425,25426],{},[174,25427],{"alt":44,"src":25428},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25430,25431],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25433,25434],{},[174,25435],{"alt":44,"src":25436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25438,25439],{},"改进theta要用到策略梯度算法",[19,25441,25442],{},[174,25443],{"alt":44,"src":25444},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25446,25447],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25449,25450],{},[174,25451],{"alt":44,"src":25452},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25454,25455],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,25457,25458],{},[174,25459],{"alt":44,"src":25460},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,25462,25463],{},[174,25464],{"alt":44,"src":25465},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,25467,25468],{},"梯度公式总结：",[19,25470,25471],{},[174,25472],{"alt":44,"src":25473},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,25475,25476],{},"两个公式的分别应用场景：",[19,25478,25479],{},"对于离散的动作：",[19,25481,25482],{},[174,25483],{"alt":44,"src":25484},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,25486,25487],{},"对于连续的动作：",[19,25489,25490],{},[174,25491],{"alt":44,"src":25492},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,25494,25495],{},[174,25496],{"alt":44,"src":25497},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25499,25501],{"id":25500},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,25503,25504],{},"使用蒙特卡洛来近似计算策略梯度",[19,25506,25507],{},"蒙特卡洛法的解释如下：",[19,25509,25510],{},[174,25511],{"alt":44,"src":25512},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,25514,25515],{},[174,25516],{"alt":44,"src":25517},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,25519,25520],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[591,25522,25523],{},[26,25524,25525],{},"方法一：reinforce算法",[19,25527,25528],{},[174,25529],{"alt":44,"src":25530},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,25532,25533],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[591,25535,25536],{"start":59},[26,25537,25538],{},"方法二：actor-critic算法",[19,25540,25541],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25543,25544],{},"两个网络的构建：",[19,25546,25547],{},[174,25548],{"alt":44,"src":25549},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25551,25552],{},"actor网路：",[19,25554,25555],{},[174,25556],{"alt":44,"src":25557},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25559,25560],{},"critic网络",[19,25562,25563],{},[174,25564],{"alt":44,"src":25565},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[591,25567,25568],{"start":70},[26,25569,25570],{},"网络的训练",[19,25572,25573],{},"网络描述",[19,25575,25576],{},[174,25577],{"alt":44,"src":25578},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25580,25581],{},[174,25582],{"alt":44,"src":25583},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25585,25586],{},"TD算法更新梯度：",[19,25588,25589],{},[174,25590],{"alt":44,"src":25591},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,25593,25594],{},"策略网络更新梯度：",[19,25596,25597],{},[174,25598],{"alt":44,"src":25599},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,25601,25602],{},"训练整个流程的具体描述：",[19,25604,25605,25608,25609],{},[174,25606],{"alt":44,"src":25607},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[174,25610],{"alt":44,"src":25611},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":44,"searchDepth":59,"depth":59,"links":25613},[25614,25615],{"id":25390,"depth":59,"text":25391},{"id":25500,"depth":59,"text":25501},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25382,"description":44},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25622,"title":25623,"body":25624,"description":25631,"extension":1328,"meta":25681,"navigation":1330,"path":25682,"seo":25683,"stem":25684,"__hash__":25685},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25625,"toc":25677},[25626,25629,25632,25636,25639,25644,25648,25651,25656,25659,25664,25669,25672],[10,25627,25623],{"id":25628},"_5alphago算法",[19,25630,25631],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25633,25635],{"id":25634},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,25637,25638],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,25640,25641],{},[174,25642],{"alt":44,"src":25643},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25645,25647],{"id":25646},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,25649,25650],{},"采用强化学习的方式训练策略网络",[19,25652,25653],{},[174,25654],{"alt":44,"src":25655},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,25657,25658],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,25660,25661],{},[174,25662],{"alt":44,"src":25663},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,25665,25666],{},[174,25667],{"alt":44,"src":25668},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,25670,25671],{},"强化学习训练策略网络的总结：",[19,25673,25674],{},[174,25675],{"alt":44,"src":25676},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":44,"searchDepth":59,"depth":59,"links":25678},[25679,25680],{"id":25634,"depth":59,"text":25635},{"id":25646,"depth":59,"text":25647},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25623,"description":25631},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25687,"title":25688,"body":25689,"description":25696,"extension":1328,"meta":25699,"navigation":1330,"path":25700,"seo":25701,"stem":25702,"__hash__":25703},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25690,"toc":25697},[25691,25694],[10,25692,25688],{"id":25693},"_6价值网络",[19,25695,25696],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":44,"searchDepth":59,"depth":59,"links":25698},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25688,"description":25696},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25705,"title":25706,"body":25707,"description":25711,"extension":1328,"meta":25712,"navigation":1330,"path":25713,"seo":25714,"stem":25715,"__hash__":25716},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25708,"toc":25709},[],{"title":44,"searchDepth":59,"depth":59,"links":25710},[],"记录自己的强化学习笔记。",{"category":24627},"\u002Fwiki\u002F2025-12-04",{"title":25706,"description":25711},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25718,"title":25719,"body":25720,"description":1327,"extension":1328,"meta":25759,"navigation":1330,"path":25760,"seo":25761,"stem":25762,"__hash__":25763},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25721,"toc":25757},[25722,25725,25728,25734,25737,25743,25746,25751,25754],[10,25723,25719],{"id":25724},"_1-项目概览与官方资源",[19,25726,25727],{},"官方文档：",[19,25729,25730],{},[1630,25731,25732],{"href":25732,"rel":25733},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25113],[19,25735,25736],{},"官方代码仓库：",[19,25738,25739],{},[1630,25740,25741],{"href":25741,"rel":25742},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25113],[19,25744,25745],{},"复现大体流程：",[19,25747,25748],{},[174,25749],{"alt":44,"src":25750},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,25752,25753],{},"本教程的目标是打通这条链路：",[19,25755,25756],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":44,"searchDepth":59,"depth":59,"links":25758},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25719,"description":1327},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25765,"title":25766,"body":25767,"description":1327,"extension":1328,"meta":25883,"navigation":1330,"path":25884,"seo":25885,"stem":25886,"__hash__":25887},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25768,"toc":25878},[25769,25772,25776,25779,25786,25790,25793,25802,25812,25816,25846,25849,25875],[10,25770,25766],{"id":25771},"_2-环境准备与设备连接",[14,25773,25775],{"id":25774},"_21-系统与环境","2.1 系统与环境",[19,25777,25778],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,25780,25781,25782,25785],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[46,25783,25784],{},"lerobot"," 依赖。",[14,25787,25789],{"id":25788},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,25791,25792],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[39,25794,25796],{"className":25070,"code":25795,"language":25072,"meta":44,"style":44},"lerobot-find-out\n",[46,25797,25798],{"__ignoreMap":44},[49,25799,25800],{"class":51,"line":52},[49,25801,25795],{"class":62},[19,25803,25804,25805,1605,25808,25811],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[46,25806,25807],{},"\u002Fdev\u002FttyACM0",[46,25809,25810],{},"\u002Fdev\u002FttyACM1","）。",[14,25813,25815],{"id":25814},"_23-串口授权","2.3 串口授权",[39,25817,25819],{"className":25070,"code":25818,"language":25072,"meta":44,"style":44},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[46,25820,25821,25835],{"__ignoreMap":44},[49,25822,25823,25826,25829,25832],{"class":51,"line":52},[49,25824,25825],{"class":62},"sudo",[49,25827,25828],{"class":1505}," chmod",[49,25830,25831],{"class":73}," 666",[49,25833,25834],{"class":1505}," \u002Fdev\u002FttyACM0\n",[49,25836,25837,25839,25841,25843],{"class":51,"line":59},[49,25838,25825],{"class":62},[49,25840,25828],{"class":1505},[49,25842,25831],{"class":73},[49,25844,25845],{"class":1505}," \u002Fdev\u002FttyACM1\n",[19,25847,25848],{},"说明：",[23,25850,25851,25856,25862,25872],{},[26,25852,25853,25855],{},[46,25854,25825],{},"：以 root 权限执行命令。",[26,25857,25858,25861],{},[46,25859,25860],{},"chmod","：修改设备节点权限。",[26,25863,25864,25867,25868,25871],{},[46,25865,25866],{},"666","：",[46,25869,25870],{},"rw-rw-rw-","，所有用户可读写。",[26,25873,25874],{},"串口号必须替换为你机器上的真实端口。",[1305,25876,25877],{},"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":44,"searchDepth":59,"depth":59,"links":25879},[25880,25881,25882],{"id":25774,"depth":59,"text":25775},{"id":25788,"depth":59,"text":25789},{"id":25814,"depth":59,"text":25815},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25766,"description":1327},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25889,"title":25890,"body":25891,"description":1327,"extension":1328,"meta":26052,"navigation":1330,"path":26053,"seo":26054,"stem":26055,"__hash__":26056},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25892,"toc":26048},[25893,25897,25901,25907,25910,25967,25970,25974,25977,26045],[10,25894,25896],{"id":25895},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25898,25900],{"id":25899},"_31-配置电机-id","3.1 配置电机 ID",[19,25902,25903,25904,25906],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[46,25905,159],{},"，需要改成机械臂链路里不冲突的编号。",[19,25908,25909],{},"方式一：用 LeRobot 命令逐步写入。",[39,25911,25913],{"className":25070,"code":25912,"language":25072,"meta":44,"style":44},"# 主臂舵机配置 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",[46,25914,25915,25920,25928,25935,25940,25944,25949,25955,25962],{"__ignoreMap":44},[49,25916,25917],{"class":51,"line":52},[49,25918,25919],{"class":55},"# 主臂舵机配置 ID\n",[49,25921,25922,25925],{"class":51,"line":59},[49,25923,25924],{"class":62},"lerobot-setup-motors",[49,25926,25927],{"class":73}," \\\n",[49,25929,25930,25933],{"class":51,"line":70},[49,25931,25932],{"class":73},"  --teleop.type=so101_leader",[49,25934,25927],{"class":73},[49,25936,25937],{"class":51,"line":86},[49,25938,25939],{"class":73},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[49,25941,25942],{"class":51,"line":98},[49,25943,3654],{"emptyLinePlaceholder":1330},[49,25945,25946],{"class":51,"line":121},[49,25947,25948],{"class":55},"# 从臂舵机配置 ID\n",[49,25950,25951,25953],{"class":51,"line":134},[49,25952,25924],{"class":62},[49,25954,25927],{"class":73},[49,25956,25957,25960],{"class":51,"line":1085},[49,25958,25959],{"class":73},"  --robot.type=so101_follower",[49,25961,25927],{"class":73},[49,25963,25964],{"class":51,"line":2574},[49,25965,25966],{"class":73},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,25968,25969],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25971,25973],{"id":25972},"_32-机械臂校准","3.2 机械臂校准",[19,25975,25976],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[39,25978,25980],{"className":25070,"code":25979,"language":25072,"meta":44,"style":44},"# 主臂校准\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",[46,25981,25982,25987,25994,26000,26007,26012,26016,26021,26027,26033,26040],{"__ignoreMap":44},[49,25983,25984],{"class":51,"line":52},[49,25985,25986],{"class":55},"# 主臂校准\n",[49,25988,25989,25992],{"class":51,"line":59},[49,25990,25991],{"class":62},"lerobot-calibrate",[49,25993,25927],{"class":73},[49,25995,25996,25998],{"class":51,"line":70},[49,25997,25932],{"class":73},[49,25999,25927],{"class":73},[49,26001,26002,26005],{"class":51,"line":86},[49,26003,26004],{"class":73},"  --teleop.port=\u002Fdev\u002FttyACM0",[49,26006,25927],{"class":73},[49,26008,26009],{"class":51,"line":98},[49,26010,26011],{"class":73},"  --teleop.id=my_awesome_leader_arm\n",[49,26013,26014],{"class":51,"line":121},[49,26015,3654],{"emptyLinePlaceholder":1330},[49,26017,26018],{"class":51,"line":134},[49,26019,26020],{"class":55},"# 从臂校准\n",[49,26022,26023,26025],{"class":51,"line":1085},[49,26024,25991],{"class":62},[49,26026,25927],{"class":73},[49,26028,26029,26031],{"class":51,"line":2574},[49,26030,25959],{"class":73},[49,26032,25927],{"class":73},[49,26034,26035,26038],{"class":51,"line":2586},[49,26036,26037],{"class":73},"  --robot.port=\u002Fdev\u002FttyACM1",[49,26039,25927],{"class":73},[49,26041,26042],{"class":51,"line":2867},[49,26043,26044],{"class":73},"  --robot.id=my_awesome_follower_arm\n",[1305,26046,26047],{},"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":44,"searchDepth":59,"depth":59,"links":26049},[26050,26051],{"id":25899,"depth":59,"text":25900},{"id":25972,"depth":59,"text":25973},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25890,"description":1327},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26058,"title":26059,"body":26060,"description":1327,"extension":1328,"meta":26251,"navigation":1330,"path":26252,"seo":26253,"stem":26254,"__hash__":26255},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26061,"toc":26247},[26062,26065,26069,26116,26120,26133,26196,26199,26244],[10,26063,26059],{"id":26064},"_4-遥操与相机接入",[14,26066,26068],{"id":26067},"_41-不带相机遥操","4.1 不带相机遥操",[39,26070,26072],{"className":25070,"code":26071,"language":25072,"meta":44,"style":44},"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",[46,26073,26074,26081,26087,26093,26100,26106,26112],{"__ignoreMap":44},[49,26075,26076,26079],{"class":51,"line":52},[49,26077,26078],{"class":62},"lerobot-teleoperate",[49,26080,25927],{"class":73},[49,26082,26083,26085],{"class":51,"line":59},[49,26084,25959],{"class":73},[49,26086,25927],{"class":73},[49,26088,26089,26091],{"class":51,"line":70},[49,26090,26037],{"class":73},[49,26092,25927],{"class":73},[49,26094,26095,26098],{"class":51,"line":86},[49,26096,26097],{"class":73},"  --robot.id=my_awesome_follower_arm",[49,26099,25927],{"class":73},[49,26101,26102,26104],{"class":51,"line":98},[49,26103,25932],{"class":73},[49,26105,25927],{"class":73},[49,26107,26108,26110],{"class":51,"line":121},[49,26109,26004],{"class":73},[49,26111,25927],{"class":73},[49,26113,26114],{"class":51,"line":134},[49,26115,26011],{"class":73},[14,26117,26119],{"id":26118},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[39,26121,26123],{"className":25070,"code":26122,"language":25072,"meta":44,"style":44},"lerobot-find-cameras opencv\n",[46,26124,26125],{"__ignoreMap":44},[49,26126,26127,26130],{"class":51,"line":52},[49,26128,26129],{"class":62},"lerobot-find-cameras",[49,26131,26132],{"class":1505}," opencv\n",[39,26134,26136],{"className":25070,"code":26135,"language":25072,"meta":44,"style":44},"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",[46,26137,26138,26144,26150,26156,26162,26172,26178,26184,26191],{"__ignoreMap":44},[49,26139,26140,26142],{"class":51,"line":52},[49,26141,26078],{"class":62},[49,26143,25927],{"class":73},[49,26145,26146,26148],{"class":51,"line":59},[49,26147,25959],{"class":73},[49,26149,25927],{"class":73},[49,26151,26152,26154],{"class":51,"line":70},[49,26153,26037],{"class":73},[49,26155,25927],{"class":73},[49,26157,26158,26160],{"class":51,"line":86},[49,26159,26097],{"class":73},[49,26161,25927],{"class":73},[49,26163,26164,26167,26170],{"class":51,"line":98},[49,26165,26166],{"class":73},"  --robot.cameras=",[49,26168,26169],{"class":1505},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[49,26171,25927],{"class":73},[49,26173,26174,26176],{"class":51,"line":121},[49,26175,25932],{"class":73},[49,26177,25927],{"class":73},[49,26179,26180,26182],{"class":51,"line":134},[49,26181,26004],{"class":73},[49,26183,25927],{"class":73},[49,26185,26186,26189],{"class":51,"line":1085},[49,26187,26188],{"class":73},"  --teleop.id=my_awesome_leader_arm",[49,26190,25927],{"class":73},[49,26192,26193],{"class":51,"line":2574},[49,26194,26195],{"class":73},"  --display_data=true\n",[19,26197,26198],{},"相机参数说明：",[23,26200,26201,26207,26213,26222,26232,26238],{},[26,26202,26203,26206],{},[46,26204,26205],{},"front","：相机名称。",[26,26208,26209,26212],{},[46,26210,26211],{},"type: opencv","：相机驱动类型。",[26,26214,26215,26218,26219,25811],{},[46,26216,26217],{},"index_or_path","：设备编号或设备路径（如 ",[46,26220,26221],{},"\u002Fdev\u002Fvideo4",[26,26223,26224,26227,26228,26231],{},[46,26225,26226],{},"width"," \u002F ",[46,26229,26230],{},"height","：图像分辨率。",[26,26233,26234,26237],{},[46,26235,26236],{},"fps","：采样帧率。",[26,26239,26240,26243],{},[46,26241,26242],{},"--display_data=true","：启用实时可视化。",[1305,26245,26246],{},"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":44,"searchDepth":59,"depth":59,"links":26248},[26249,26250],{"id":26067,"depth":59,"text":26068},{"id":26118,"depth":59,"text":26119},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26059,"description":1327},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26257,"title":26258,"body":26259,"description":1327,"extension":1328,"meta":26431,"navigation":1330,"path":26432,"seo":26433,"stem":26434,"__hash__":26435},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26260,"toc":26426},[26261,26265,26269,26274,26279,26282,26324,26330,26334,26383,26388,26392,26395,26403,26408,26413,26418,26423],[10,26262,26264],{"id":26263},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26266,26268],{"id":26267},"_51-生成访问令牌","5.1 生成访问令牌",[19,26270,26271],{},[174,26272],{"alt":44,"src":26273},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26275,26276],{},[174,26277],{"alt":44,"src":26278},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26280,26281],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[39,26283,26285],{"className":25070,"code":26284,"language":25072,"meta":44,"style":44},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[46,26286,26287,26300],{"__ignoreMap":44},[49,26288,26289,26292,26295,26297],{"class":51,"line":52},[49,26290,26291],{"class":109},"export",[49,26293,26294],{"class":66}," HF_TOKEN",[49,26296,1448],{"class":109},[49,26298,26299],{"class":1505},"\"your_huggingface_token\"\n",[49,26301,26302,26305,26308,26311,26314,26316,26319,26321],{"class":51,"line":59},[49,26303,26304],{"class":62},"hf",[49,26306,26307],{"class":1505}," auth",[49,26309,26310],{"class":1505}," login",[49,26312,26313],{"class":73}," --token",[49,26315,10976],{"class":1505},[49,26317,26318],{"class":66},"$HF_TOKEN",[49,26320,1643],{"class":1505},[49,26322,26323],{"class":73}," --add-to-git-credential\n",[19,26325,26326,26329],{},[46,26327,26328],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26331,26333],{"id":26332},"_52-验证登录","5.2 验证登录",[39,26335,26337],{"className":25070,"code":26336,"language":25072,"meta":44,"style":44},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[46,26338,26339,26370],{"__ignoreMap":44},[49,26340,26341,26344,26346,26349,26351,26353,26356,26359,26362,26365,26368],{"class":51,"line":52},[49,26342,26343],{"class":66},"HF_USER",[49,26345,1448],{"class":109},[49,26347,26348],{"class":66},"$(",[49,26350,26304],{"class":62},[49,26352,26307],{"class":1505},[49,26354,26355],{"class":1505}," whoami",[49,26357,26358],{"class":109}," |",[49,26360,26361],{"class":62}," head",[49,26363,26364],{"class":73}," -n",[49,26366,26367],{"class":73}," 1",[49,26369,1409],{"class":66},[49,26371,26372,26375,26377,26380],{"class":51,"line":59},[49,26373,26374],{"class":73},"echo",[49,26376,10976],{"class":1505},[49,26378,26379],{"class":66},"$HF_USER",[49,26381,26382],{"class":1505},"\"\n",[19,26384,26385],{},[174,26386],{"alt":44,"src":26387},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26389,26391],{"id":26390},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26393,26394],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[23,26396,26397,26400],{},[26,26398,26399],{},"Dataset Repo（用于上传演示数据）",[26,26401,26402],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26404,26405],{},[174,26406],{"alt":44,"src":26407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26409,26410],{},[174,26411],{"alt":44,"src":26412},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26414,26415],{},[174,26416],{"alt":44,"src":26417},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26419,26420],{},[174,26421],{"alt":44,"src":26422},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1305,26424,26425],{},"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":44,"searchDepth":59,"depth":59,"links":26427},[26428,26429,26430],{"id":26267,"depth":59,"text":26268},{"id":26332,"depth":59,"text":26333},{"id":26390,"depth":59,"text":26391},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26258,"description":1327},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26437,"title":26438,"body":26439,"description":1327,"extension":1328,"meta":26636,"navigation":1330,"path":26637,"seo":26638,"stem":26639,"__hash__":26640},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26440,"toc":26631},[26441,26445,26449,26545,26553,26558,26562,26578,26581,26585,26628],[10,26442,26444],{"id":26443},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26446,26448],{"id":26447},"_61-录制示教数据","6.1 录制示教数据",[39,26450,26452],{"className":25070,"code":26451,"language":25072,"meta":44,"style":44},"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",[46,26453,26454,26461,26467,26473,26479,26488,26494,26500,26506,26513,26523,26530,26540],{"__ignoreMap":44},[49,26455,26456,26459],{"class":51,"line":52},[49,26457,26458],{"class":62},"lerobot-record",[49,26460,25927],{"class":73},[49,26462,26463,26465],{"class":51,"line":59},[49,26464,25959],{"class":73},[49,26466,25927],{"class":73},[49,26468,26469,26471],{"class":51,"line":70},[49,26470,26037],{"class":73},[49,26472,25927],{"class":73},[49,26474,26475,26477],{"class":51,"line":86},[49,26476,26097],{"class":73},[49,26478,25927],{"class":73},[49,26480,26481,26483,26486],{"class":51,"line":98},[49,26482,26166],{"class":73},[49,26484,26485],{"class":1505},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[49,26487,25927],{"class":73},[49,26489,26490,26492],{"class":51,"line":121},[49,26491,25932],{"class":73},[49,26493,25927],{"class":73},[49,26495,26496,26498],{"class":51,"line":134},[49,26497,26004],{"class":73},[49,26499,25927],{"class":73},[49,26501,26502,26504],{"class":51,"line":1085},[49,26503,26188],{"class":73},[49,26505,25927],{"class":73},[49,26507,26508,26511],{"class":51,"line":2574},[49,26509,26510],{"class":73},"  --display_data=true",[49,26512,25927],{"class":73},[49,26514,26515,26518,26521],{"class":51,"line":2586},[49,26516,26517],{"class":73},"  --dataset.repo_id=",[49,26519,26520],{"class":1505},"\"Embodied-AI-6\u002Fso101_test\"",[49,26522,25927],{"class":73},[49,26524,26525,26528],{"class":51,"line":2867},[49,26526,26527],{"class":73},"  --dataset.num_episodes=10",[49,26529,25927],{"class":73},[49,26531,26532,26535,26538],{"class":51,"line":2872},[49,26533,26534],{"class":73},"  --dataset.single_task=",[49,26536,26537],{"class":1505},"\"Grab the green cube\"",[49,26539,25927],{"class":73},[49,26541,26542],{"class":51,"line":2878},[49,26543,26544],{"class":73},"  --resume=true\n",[23,26546,26547],{},[26,26548,26549,26552],{},[46,26550,26551],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26554,26555],{},[174,26556],{"alt":44,"src":26557},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26559,26561],{"id":26560},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[39,26563,26565],{"className":25070,"code":26564,"language":25072,"meta":44,"style":44},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[46,26566,26567],{"__ignoreMap":44},[49,26568,26569,26572,26575],{"class":51,"line":52},[49,26570,26571],{"class":62},"rm",[49,26573,26574],{"class":73}," -rf",[49,26576,26577],{"class":1505}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26579,26580],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26582,26584],{"id":26583},"_63-回放指定-episode","6.3 回放指定 episode",[39,26586,26588],{"className":25070,"code":26587,"language":25072,"meta":44,"style":44},"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",[46,26589,26590,26597,26603,26609,26615,26623],{"__ignoreMap":44},[49,26591,26592,26595],{"class":51,"line":52},[49,26593,26594],{"class":62},"lerobot-replay",[49,26596,25927],{"class":73},[49,26598,26599,26601],{"class":51,"line":59},[49,26600,25959],{"class":73},[49,26602,25927],{"class":73},[49,26604,26605,26607],{"class":51,"line":70},[49,26606,26037],{"class":73},[49,26608,25927],{"class":73},[49,26610,26611,26613],{"class":51,"line":86},[49,26612,26097],{"class":73},[49,26614,25927],{"class":73},[49,26616,26617,26619,26621],{"class":51,"line":98},[49,26618,26517],{"class":73},[49,26620,26520],{"class":1505},[49,26622,25927],{"class":73},[49,26624,26625],{"class":51,"line":121},[49,26626,26627],{"class":73},"  --dataset.episode=0\n",[1305,26629,26630],{},"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":44,"searchDepth":59,"depth":59,"links":26632},[26633,26634,26635],{"id":26447,"depth":59,"text":26448},{"id":26560,"depth":59,"text":26561},{"id":26583,"depth":59,"text":26584},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26438,"description":1327},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26642,"title":26643,"body":26644,"description":1327,"extension":1328,"meta":26772,"navigation":1330,"path":26773,"seo":26774,"stem":26775,"__hash__":26776},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26645,"toc":26770},[26646,26650,26713,26716,26763,26768],[10,26647,26649],{"id":26648},"_7-act-模型训练","7. ACT 模型训练",[39,26651,26653],{"className":25070,"code":26652,"language":25072,"meta":44,"style":44},"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",[46,26654,26655,26662,26670,26677,26684,26691,26698,26705],{"__ignoreMap":44},[49,26656,26657,26660],{"class":51,"line":52},[49,26658,26659],{"class":62},"lerobot-train",[49,26661,25927],{"class":73},[49,26663,26664,26666,26668],{"class":51,"line":59},[49,26665,26517],{"class":73},[49,26667,26520],{"class":1505},[49,26669,25927],{"class":73},[49,26671,26672,26675],{"class":51,"line":70},[49,26673,26674],{"class":73},"  --policy.type=act",[49,26676,25927],{"class":73},[49,26678,26679,26682],{"class":51,"line":86},[49,26680,26681],{"class":73},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[49,26683,25927],{"class":73},[49,26685,26686,26689],{"class":51,"line":98},[49,26687,26688],{"class":73},"  --job_name=act_so101_test",[49,26690,25927],{"class":73},[49,26692,26693,26696],{"class":51,"line":121},[49,26694,26695],{"class":73},"  --policy.device=cuda",[49,26697,25927],{"class":73},[49,26699,26700,26703],{"class":51,"line":134},[49,26701,26702],{"class":73},"  --wandb.enable=false",[49,26704,25927],{"class":73},[49,26706,26707,26710],{"class":51,"line":1085},[49,26708,26709],{"class":73},"  --policy.repo_id=",[49,26711,26712],{"class":1505},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,26714,26715],{},"参数说明：",[23,26717,26718,26724,26730,26736,26742,26751,26757],{},[26,26719,26720,26723],{},[46,26721,26722],{},"--dataset.repo_id","：训练数据集仓库。",[26,26725,26726,26729],{},[46,26727,26728],{},"--policy.type=act","：策略模型类型为 ACT。",[26,26731,26732,26735],{},[46,26733,26734],{},"--output_dir","：本地训练输出目录。",[26,26737,26738,26741],{},[46,26739,26740],{},"--job_name","：训练任务名称。",[26,26743,26744,26747,26748,25811],{},[46,26745,26746],{},"--policy.device","：训练设备（如 ",[46,26749,26750],{},"cuda",[26,26752,26753,26756],{},[46,26754,26755],{},"--wandb.enable","：是否启用 WandB 可视化。",[26,26758,26759,26762],{},[46,26760,26761],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,26764,26765],{},[174,26766],{"alt":44,"src":26767},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1305,26769,26630],{},{"title":44,"searchDepth":59,"depth":59,"links":26771},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26643,"description":1327},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26778,"title":26779,"body":26780,"description":1327,"extension":1328,"meta":26867,"navigation":1330,"path":26868,"seo":26869,"stem":26870,"__hash__":26871},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26781,"toc":26865},[26782,26785,26788,26855,26863],[10,26783,26779],{"id":26784},"_8-策略部署与自动采集",[19,26786,26787],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[39,26789,26791],{"className":25070,"code":26790,"language":25072,"meta":44,"style":44},"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",[46,26792,26793,26799,26805,26811,26819,26825,26832,26840,26848],{"__ignoreMap":44},[49,26794,26795,26797],{"class":51,"line":52},[49,26796,26458],{"class":62},[49,26798,25927],{"class":73},[49,26800,26801,26803],{"class":51,"line":59},[49,26802,25959],{"class":73},[49,26804,25927],{"class":73},[49,26806,26807,26809],{"class":51,"line":70},[49,26808,26037],{"class":73},[49,26810,25927],{"class":73},[49,26812,26813,26815,26817],{"class":51,"line":86},[49,26814,26166],{"class":73},[49,26816,26485],{"class":1505},[49,26818,25927],{"class":73},[49,26820,26821,26823],{"class":51,"line":98},[49,26822,26097],{"class":73},[49,26824,25927],{"class":73},[49,26826,26827,26830],{"class":51,"line":121},[49,26828,26829],{"class":73},"  --display_data=false",[49,26831,25927],{"class":73},[49,26833,26834,26836,26838],{"class":51,"line":134},[49,26835,26517],{"class":73},[49,26837,26520],{"class":1505},[49,26839,25927],{"class":73},[49,26841,26842,26844,26846],{"class":51,"line":1085},[49,26843,26534],{"class":73},[49,26845,26537],{"class":1505},[49,26847,25927],{"class":73},[49,26849,26850,26853],{"class":51,"line":2574},[49,26851,26852],{"class":73},"  --policy.path=",[49,26854,26712],{"class":1505},[23,26856,26857],{},[26,26858,26859,26862],{},[46,26860,26861],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1305,26864,26630],{},{"title":44,"searchDepth":59,"depth":59,"links":26866},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26779,"description":1327},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26873,"title":26874,"body":26875,"description":1327,"extension":1328,"meta":26904,"navigation":1330,"path":26905,"seo":26906,"stem":26907,"__hash__":26908},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26876,"toc":26902},[26877,26881,26884,26890,26893,26899],[10,26878,26880],{"id":26879},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26882,26883],{},"项目地址：",[19,26885,26886],{},[1630,26887,26888],{"href":26888,"rel":26889},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25113],[19,26891,26892],{},"参考教程：",[19,26894,26895],{},[1630,26896,26897],{"href":26897,"rel":26898},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25113],[19,26900,26901],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":44,"searchDepth":59,"depth":59,"links":26903},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26874,"description":1327},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26910,"title":26911,"body":26912,"description":26916,"extension":1328,"meta":26917,"navigation":1330,"path":26918,"seo":26919,"stem":26920,"__hash__":26921},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26913,"toc":26914},[],{"title":44,"searchDepth":59,"depth":59,"links":26915},[],"act复现",{"category":24627},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26911,"description":26916},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26923,"title":26924,"body":26925,"description":44,"extension":1328,"meta":27227,"navigation":1330,"path":27228,"seo":27229,"stem":27230,"__hash__":27231},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26926,"toc":27219},[26927,26930,26934,26944,26951,26958,26961,26968,26971,26974,26978,26990,26994,27040,27043,27046,27049,27052,27055,27059,27097,27103,27107,27161,27166,27169,27172,27177,27180,27185,27188,27191,27195,27198,27201,27205],[10,26928,26924],{"id":26929},"_1简介",[183,26931,26933],{"id":26932},"_11什么是-docker","1.1什么是 Docker？",[19,26935,26936,26937,26940,26941],{},"Docker 是一个开源的 ",[485,26938,26939],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[485,26942,26943],{},"一次构建，到处运行。",[19,26945,26946,26947,26950],{},"“ ",[485,26948,26949],{},"一次构建，到处运行"," ”也就是说：",[591,26952,26953],{},[26,26954,26955],{},[485,26956,26957],{},"之前：",[19,26959,26960],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[591,26962,26963],{},[26,26964,26965],{},[485,26966,26967],{},"使用docker后：",[19,26969,26970],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,26972,26973],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[183,26975,26977],{"id":26976},"_12它是怎么工作的","1.2.它是怎么工作的？",[23,26979,26980,26983],{},[26,26981,26982],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[26,26984,26985,26986,26989],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[485,26987,26988],{},"无论在哪运行都一样稳定"," 。",[183,26991,26993],{"id":26992},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[293,26995,26996,27006],{},[296,26997,26998],{},[299,26999,27000,27003],{},[302,27001,27002],{"align":304},"概念",[302,27004,27005],{"align":304},"解释",[310,27007,27008,27016,27024,27032],{},[299,27009,27010,27013],{},[315,27011,27012],{"align":304},"镜像",[315,27014,27015],{"align":304},"Image，运行容器的模板，像是一个应用快照",[299,27017,27018,27021],{},[315,27019,27020],{"align":304},"容器",[315,27022,27023],{"align":304},"Container，运行中的镜像实例，有自己的文件系统、网络等",[299,27025,27026,27029],{},[315,27027,27028],{"align":304},"Dockerfile",[315,27030,27031],{"align":304},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[299,27033,27034,27037],{},[315,27035,27036],{"align":304},"仓库",[315,27038,27039],{"align":304},"Registry，存放镜像的地方，比如 Docker Hub",[19,27041,27042],{},"抽象化理解:",[19,27044,27045],{},"Docker镜像≈C++类",[19,27047,27048],{},"Docker容器≈C++类实例(即对象)",[19,27050,27051],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27053,27054],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[183,27056,27058],{"id":27057},"_14类比理解","1.4.类比理解",[293,27060,27061,27071],{},[296,27062,27063],{},[299,27064,27065,27068],{},[302,27066,27067],{"align":304},"传统部署",[302,27069,27070],{"align":304},"Docker部署",[310,27072,27073,27081,27089],{},[299,27074,27075,27078],{},[315,27076,27077],{"align":304},"手动安装依赖、调试版本不一致问题",[315,27079,27080],{"align":304},"一次打包环境和代码",[299,27082,27083,27086],{},[315,27084,27085],{"align":304},"程序“裸奔”跑在系统上",[315,27087,27088],{"align":304},"程序“穿着容器”隔离运行",[299,27090,27091,27094],{},[315,27092,27093],{"align":304},"容易“在我电脑上能跑”",[315,27095,27096],{"align":304},"保证“无论在哪都能跑”",[19,27098,27099,27100],{},"就像快递包裹： ",[485,27101,27102],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[183,27104,27106],{"id":27105},"_15docker-的核心优势","1.5.Docker 的核心优势",[293,27108,27109,27119],{},[296,27110,27111],{},[299,27112,27113,27116],{},[302,27114,27115],{"align":304},"优势",[302,27117,27118],{"align":304},"说明",[310,27120,27121,27129,27137,27145,27153],{},[299,27122,27123,27126],{},[315,27124,27125],{"align":304},"轻量级",[315,27127,27128],{"align":304},"基于系统内核共享，启动速度快，占资源少",[299,27130,27131,27134],{},[315,27132,27133],{"align":304},"跨平台",[315,27135,27136],{"align":304},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[299,27138,27139,27142],{},[315,27140,27141],{"align":304},"易于迁移部署",[315,27143,27144],{"align":304},"应用和环境一起封装，不怕依赖不一致",[299,27146,27147,27150],{},[315,27148,27149],{"align":304},"易于版本控制",[315,27151,27152],{"align":304},"镜像版本可控，支持回滚",[299,27154,27155,27158],{},[315,27156,27157],{"align":304},"生态丰富",[315,27159,27160],{"align":304},"Docker Hub 上有成千上万的现成镜像可用",[591,27162,27163],{},[26,27164,27165],{},"在Linux上可以几乎实现无性能损失。",[19,27167,27168],{},"docker里的发行版和本机共用Linux内核。",[19,27170,27171],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[591,27173,27174],{},[26,27175,27176],{},"可以快速部署在绝大多数Linux发行版",[19,27178,27179],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[591,27181,27182],{},[26,27183,27184],{},"配置环境简单",[19,27186,27187],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27189,27190],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[591,27192,27193],{},[26,27194,27157],{},[19,27196,27197],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27199,27200],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[183,27202,27204],{"id":27203},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[23,27206,27207,27210,27213,27216],{},[26,27208,27209],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[26,27211,27212],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[26,27214,27215],{},"微服务架构：每个服务一个容器，灵活组合",[26,27217,27218],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":44,"searchDepth":59,"depth":59,"links":27220},[27221,27222,27223,27224,27225,27226],{"id":26932,"depth":70,"text":26933},{"id":26976,"depth":70,"text":26977},{"id":26992,"depth":70,"text":26993},{"id":27057,"depth":70,"text":27058},{"id":27105,"depth":70,"text":27106},{"id":27203,"depth":70,"text":27204},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26924,"description":44},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27233,"title":27234,"body":27235,"description":44,"extension":1328,"meta":27968,"navigation":1330,"path":27969,"seo":27970,"stem":27971,"__hash__":27972},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27236,"toc":27963},[27237,27240,27244,27247,27250,27256,27262,27266,27275,27278,27335,27338,27389,27392,27475,27478,27515,27519,27530,27543,27550,27553,27633,27636,27686,27689,27712,27716,27723,27726,27742,27748,27751,27767,27773,27776,27792,27806,27812,27832,27838,27841,27853,27859,27862,27876,27882,27885,27905,27910,27913,27916,27920,27923,27926,27929,27936,27939,27942,27945,27950,27955,27960],[10,27238,27234],{"id":27239},"_2安装docker",[183,27241,27243],{"id":27242},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27245,27246],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27248,27249],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27251,27252],{},[1630,27253,27254],{"href":27254,"rel":27255},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25113],[19,27257,27258],{},[1630,27259,27260],{"href":27260,"rel":27261},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25113],[525,27263,27265],{"id":27264},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27267,27268,27269,27274],{},"以下内容根据 ",[1630,27270,27273],{"href":27271,"rel":27272},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25113],"官方文档"," 修改而来。",[19,27276,27277],{},"如果你过去安装过 docker，先删掉：",[39,27279,27281],{"className":25070,"code":27280,"language":25072,"meta":44,"style":44},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[46,27282,27283],{"__ignoreMap":44},[49,27284,27285,27287,27290,27293,27296,27299,27302,27305,27308,27311,27314,27317,27320,27323,27326,27329,27332],{"class":51,"line":52},[49,27286,4279],{"class":109},[49,27288,27289],{"class":66}," pkg ",[49,27291,27292],{"class":109},"in",[49,27294,27295],{"class":1505}," docker.io",[49,27297,27298],{"class":1505}," docker-doc",[49,27300,27301],{"class":1505}," docker-compose",[49,27303,27304],{"class":1505}," docker-compose-v2",[49,27306,27307],{"class":1505}," podman-docker",[49,27309,27310],{"class":1505}," containerd",[49,27312,27313],{"class":1505}," runc",[49,27315,27316],{"class":66},"; ",[49,27318,27319],{"class":109},"do",[49,27321,27322],{"class":62}," sudo",[49,27324,27325],{"class":1505}," apt-get",[49,27327,27328],{"class":1505}," remove",[49,27330,27331],{"class":66}," $pkg; ",[49,27333,27334],{"class":109},"done\n",[19,27336,27337],{},"首先安装依赖和GPG：",[39,27339,27343],{"className":27340,"code":27341,"language":27342,"meta":44,"style":44},"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",[46,27344,27345,27350,27355,27360,27365,27370,27375,27379,27384],{"__ignoreMap":44},[49,27346,27347],{"class":51,"line":52},[49,27348,27349],{},"# Add Docker's official GPG key:\n",[49,27351,27352],{"class":51,"line":59},[49,27353,27354],{},"sudo apt-get update\n",[49,27356,27357],{"class":51,"line":70},[49,27358,27359],{},"sudo apt-get install ca-certificates curl\n",[49,27361,27362],{"class":51,"line":86},[49,27363,27364],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[49,27366,27367],{"class":51,"line":98},[49,27368,27369],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[49,27371,27372],{"class":51,"line":121},[49,27373,27374],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[49,27376,27377],{"class":51,"line":134},[49,27378,3654],{"emptyLinePlaceholder":1330},[49,27380,27381],{"class":51,"line":1085},[49,27382,27383],{},"# 如果上面这行报错就弄下面这行\n",[49,27385,27386],{"class":51,"line":2574},[49,27387,27388],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27390,27391],{},"信任 Docker 的 GPG 公钥并添加仓库：",[39,27393,27395],{"className":25070,"code":27394,"language":25072,"meta":44,"style":44},"# 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",[46,27396,27397,27402,27408,27425,27458],{"__ignoreMap":44},[49,27398,27399],{"class":51,"line":52},[49,27400,27401],{"class":55},"# Add the repository to Apt sources:\n",[49,27403,27404,27406],{"class":51,"line":59},[49,27405,26374],{"class":73},[49,27407,25927],{"class":73},[49,27409,27410,27413,27416,27419,27422],{"class":51,"line":70},[49,27411,27412],{"class":1505},"  \"deb [arch=$(",[49,27414,27415],{"class":62},"dpkg",[49,27417,27418],{"class":73}," --print-architecture",[49,27420,27421],{"class":1505},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[49,27423,27424],{"class":73},"\\\n",[49,27426,27427,27430,27432,27434,27437,27440,27442,27444,27447,27449,27451,27454,27456],{"class":51,"line":86},[49,27428,27429],{"class":1505},"  \"",[49,27431,26348],{"class":66},[49,27433,1949],{"class":73},[49,27435,27436],{"class":1505}," \u002Fetc\u002Fos-release",[49,27438,27439],{"class":66}," && ",[49,27441,26374],{"class":73},[49,27443,10976],{"class":1505},[49,27445,27446],{"class":66},"$VERSION_CODENAME",[49,27448,1643],{"class":1505},[49,27450,1821],{"class":66},[49,27452,27453],{"class":1505},"\" stable\"",[49,27455,26358],{"class":109},[49,27457,25927],{"class":73},[49,27459,27460,27463,27466,27469,27472],{"class":51,"line":98},[49,27461,27462],{"class":62},"  sudo",[49,27464,27465],{"class":1505}," tee",[49,27467,27468],{"class":1505}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[49,27470,27471],{"class":109}," >",[49,27473,27474],{"class":1505}," \u002Fdev\u002Fnull\n",[19,27476,27477],{},"最后安装",[39,27479,27481],{"className":25070,"code":27480,"language":25072,"meta":44,"style":44},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[46,27482,27483,27492],{"__ignoreMap":44},[49,27484,27485,27487,27489],{"class":51,"line":52},[49,27486,25825],{"class":62},[49,27488,27325],{"class":1505},[49,27490,27491],{"class":1505}," update\n",[49,27493,27494,27496,27498,27500,27503,27506,27509,27512],{"class":51,"line":59},[49,27495,25825],{"class":62},[49,27497,27325],{"class":1505},[49,27499,25082],{"class":1505},[49,27501,27502],{"class":1505}," docker-ce",[49,27504,27505],{"class":1505}," docker-ce-cli",[49,27507,27508],{"class":1505}," containerd.io",[49,27510,27511],{"class":1505}," docker-buildx-plugin",[49,27513,27514],{"class":1505}," docker-compose-plugin\n",[525,27516,27518],{"id":27517},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,27520,27521,27522,27525,27526,27529],{},"查看自己自己包管理工具版本（dnf是 ",[485,27523,27524],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[485,27527,27528],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[39,27531,27533],{"className":25070,"code":27532,"language":25072,"meta":44,"style":44},"dnf --version\n",[46,27534,27535],{"__ignoreMap":44},[49,27536,27537,27540],{"class":51,"line":52},[49,27538,27539],{"class":62},"dnf",[49,27541,27542],{"class":73}," --version\n",[19,27544,27268,27545,27549],{},[1630,27546,27273],{"href":27547,"rel":27548},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25113]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,27551,27552],{},"如果你之前安装过 docker，请先删掉",[39,27554,27556],{"className":25070,"code":27555,"language":25072,"meta":44,"style":44},"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",[46,27557,27558,27572,27579,27586,27593,27600,27607,27614,27621,27628],{"__ignoreMap":44},[49,27559,27560,27562,27565,27567,27570],{"class":51,"line":52},[49,27561,25825],{"class":62},[49,27563,27564],{"class":1505}," dnf",[49,27566,27328],{"class":1505},[49,27568,27569],{"class":1505}," docker",[49,27571,25927],{"class":73},[49,27573,27574,27577],{"class":51,"line":59},[49,27575,27576],{"class":1505},"                  docker-client",[49,27578,25927],{"class":73},[49,27580,27581,27584],{"class":51,"line":70},[49,27582,27583],{"class":1505},"                  docker-client-latest",[49,27585,25927],{"class":73},[49,27587,27588,27591],{"class":51,"line":86},[49,27589,27590],{"class":1505},"                  docker-common",[49,27592,25927],{"class":73},[49,27594,27595,27598],{"class":51,"line":98},[49,27596,27597],{"class":1505},"                  docker-latest",[49,27599,25927],{"class":73},[49,27601,27602,27605],{"class":51,"line":121},[49,27603,27604],{"class":1505},"                  docker-latest-logrotate",[49,27606,25927],{"class":73},[49,27608,27609,27612],{"class":51,"line":134},[49,27610,27611],{"class":1505},"                  docker-logrotate",[49,27613,25927],{"class":73},[49,27615,27616,27619],{"class":51,"line":1085},[49,27617,27618],{"class":1505},"                  docker-selinux",[49,27620,25927],{"class":73},[49,27622,27623,27626],{"class":51,"line":2574},[49,27624,27625],{"class":1505},"                  docker-engine-selinux",[49,27627,25927],{"class":73},[49,27629,27630],{"class":51,"line":2586},[49,27631,27632],{"class":1505},"                  docker-engine\n",[19,27634,27635],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[39,27637,27639],{"className":25070,"code":27638,"language":25072,"meta":44,"style":44},"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",[46,27640,27641,27655,27670],{"__ignoreMap":44},[49,27642,27643,27645,27647,27650,27652],{"class":51,"line":52},[49,27644,25825],{"class":62},[49,27646,27564],{"class":1505},[49,27648,27649],{"class":73}," -y",[49,27651,25082],{"class":1505},[49,27653,27654],{"class":1505}," dnf-plugins-core\n",[49,27656,27657,27659,27661,27664,27667],{"class":51,"line":59},[49,27658,25825],{"class":62},[49,27660,27564],{"class":1505},[49,27662,27663],{"class":1505}," config-manager",[49,27665,27666],{"class":1505}," addrepo",[49,27668,27669],{"class":73}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[49,27671,27672,27674,27677,27680,27683],{"class":51,"line":70},[49,27673,25825],{"class":62},[49,27675,27676],{"class":1505}," sed",[49,27678,27679],{"class":73}," -i",[49,27681,27682],{"class":1505}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[49,27684,27685],{"class":1505}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,27687,27688],{},"最后安装：",[39,27690,27692],{"className":25070,"code":27691,"language":25072,"meta":44,"style":44},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[46,27693,27694],{"__ignoreMap":44},[49,27695,27696,27698,27700,27702,27704,27706,27708,27710],{"class":51,"line":52},[49,27697,25825],{"class":62},[49,27699,27564],{"class":1505},[49,27701,25082],{"class":1505},[49,27703,27502],{"class":1505},[49,27705,27505],{"class":1505},[49,27707,27508],{"class":1505},[49,27709,27511],{"class":1505},[49,27711,27514],{"class":1505},[183,27713,27715],{"id":27714},"_22配置环境","2.2.配置环境",[525,27717,27719,27722],{"id":27718},"_221检查-docker-服务状态",[485,27720,27721],{},"2.2.1.检查 Docker 服务状态"," ：",[19,27724,27725],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[39,27727,27729],{"className":25070,"code":27728,"language":25072,"meta":44,"style":44},"systemctl status docker\n",[46,27730,27731],{"__ignoreMap":44},[49,27732,27733,27736,27739],{"class":51,"line":52},[49,27734,27735],{"class":62},"systemctl",[49,27737,27738],{"class":1505}," status",[49,27740,27741],{"class":1505}," docker\n",[525,27743,27745,27722],{"id":27744},"_222启动-docker-服务",[485,27746,27747],{},"2.2.2.启动 Docker 服务",[19,27749,27750],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[39,27752,27754],{"className":25070,"code":27753,"language":25072,"meta":44,"style":44},"sudo systemctl start docker\n",[46,27755,27756],{"__ignoreMap":44},[49,27757,27758,27760,27763,27765],{"class":51,"line":52},[49,27759,25825],{"class":62},[49,27761,27762],{"class":1505}," systemctl",[49,27764,5438],{"class":1505},[49,27766,27741],{"class":1505},[525,27768,27770,27722],{"id":27769},"_223设置-docker-开机自启",[485,27771,27772],{},"2.2.3.设置 Docker 开机自启",[19,27774,27775],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[39,27777,27779],{"className":25070,"code":27778,"language":25072,"meta":44,"style":44},"sudo systemctl enable docker\n",[46,27780,27781],{"__ignoreMap":44},[49,27782,27783,27785,27787,27790],{"class":51,"line":52},[49,27784,25825],{"class":62},[49,27786,27762],{"class":1505},[49,27788,27789],{"class":1505}," enable",[49,27791,27741],{"class":1505},[525,27793,27795,15047,27798,15047,27803,27722],{"id":27794},"_224将用户添加到-docker-组",[485,27796,27797],{},"2.2.4.将用户添加到",[485,27799,27800],{},[46,27801,27802],{},"docker",[485,27804,27805],{},"组",[19,27807,27808,27809,27811],{},"使用以下命令将当前用户添加到 ",[46,27810,27802],{}," 组：",[39,27813,27815],{"className":25070,"code":27814,"language":25072,"meta":44,"style":44},"sudo usermod -aG docker $USER\n",[46,27816,27817],{"__ignoreMap":44},[49,27818,27819,27821,27824,27827,27829],{"class":51,"line":52},[49,27820,25825],{"class":62},[49,27822,27823],{"class":1505}," usermod",[49,27825,27826],{"class":73}," -aG",[49,27828,27569],{"class":1505},[49,27830,27831],{"class":66}," $USER\n",[525,27833,27835,27722],{"id":27834},"_225退出并重新登录",[485,27836,27837],{},"2.2.5.退出并重新登录",[19,27839,27840],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[39,27842,27844],{"className":25070,"code":27843,"language":25072,"meta":44,"style":44},"newgrp docker\n",[46,27845,27846],{"__ignoreMap":44},[49,27847,27848,27851],{"class":51,"line":52},[49,27849,27850],{"class":62},"newgrp",[49,27852,27741],{"class":1505},[525,27854,27856,27722],{"id":27855},"_226重新启动-docker-服务如果需要",[485,27857,27858],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,27860,27861],{},"确保 Docker 服务正在运行，可以使用以下命令：",[39,27863,27864],{"className":25070,"code":27753,"language":25072,"meta":44,"style":44},[46,27865,27866],{"__ignoreMap":44},[49,27867,27868,27870,27872,27874],{"class":51,"line":52},[49,27869,25825],{"class":62},[49,27871,27762],{"class":1505},[49,27873,5438],{"class":1505},[49,27875,27741],{"class":1505},[525,27877,27879,27722],{"id":27878},"_227重启电脑后检查-docker-服务状态",[485,27880,27881],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,27883,27884],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[39,27886,27888],{"className":25070,"code":27887,"language":25072,"meta":44,"style":44},"sudo reboot\nsystemctl status docker\n",[46,27889,27890,27897],{"__ignoreMap":44},[49,27891,27892,27894],{"class":51,"line":52},[49,27893,25825],{"class":62},[49,27895,27896],{"class":1505}," reboot\n",[49,27898,27899,27901,27903],{"class":51,"line":59},[49,27900,27735],{"class":62},[49,27902,27738],{"class":1505},[49,27904,27741],{"class":1505},[19,27906,27907],{},[174,27908],{"alt":44,"src":27909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,27911,27912],{},"第三行显示enabled说明开机自启动成功",[19,27914,27915],{},"按q退出",[183,27917,27919],{"id":27918},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,27921,27922],{},"优先使用linux来使用docker是比较好的",[19,27924,27925],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,27927,27928],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,27930,27931,27932],{},"官方下载安装:",[1630,27933,27934],{"href":27934,"rel":27935},"https:\u002F\u002Fwww.docker.com\u002F",[25113],[19,27937,27938],{},"Windows的Docker显卡直通与USB直通:",[19,27940,27941],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,27943,27944],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,27946,27947],{},[174,27948],{"alt":44,"src":27949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,27951,27952],{},[174,27953],{"alt":44,"src":27954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,27956,27957],{},[174,27958],{"alt":44,"src":27959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1305,27961,27962],{},"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":44,"searchDepth":59,"depth":59,"links":27964},[27965,27966,27967],{"id":27242,"depth":70,"text":27243},{"id":27714,"depth":70,"text":27715},{"id":27918,"depth":70,"text":27919},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27234,"description":44},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27974,"title":27975,"body":27976,"description":27983,"extension":1328,"meta":28676,"navigation":1330,"path":28677,"seo":28678,"stem":28679,"__hash__":28680},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27977,"toc":28670},[27978,27981,27984,27988,27993,27998,28001,28029,28034,28043,28046,28051,28055,28062,28067,28073,28077,28080,28084,28089,28181,28186,28204,28209,28230,28235,28251,28255,28260,28289,28294,28340,28345,28389,28397,28414,28419,28435,28440,28454,28457,28460,28463,28466,28495,28498,28503,28507,28510,28513,28519,28522,28525,28528,28590,28597,28602,28605,28623,28627,28630,28647,28650,28653,28667],[10,27979,27975],{"id":27980},"_3docker直通",[19,27982,27983],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[183,27985,27987],{"id":27986},"_31usb直通","3.1.USB直通",[19,27989,27990],{},[174,27991],{"alt":44,"src":27992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[591,27994,27995],{},[26,27996,27997],{},"方法一(不是很推荐新手)：",[19,27999,28000],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[39,28002,28004],{"className":25070,"code":28003,"language":25072,"meta":44,"style":44},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[46,28005,28006,28014,28019],{"__ignoreMap":44},[49,28007,28008,28011],{"class":51,"line":52},[49,28009,28010],{"class":62},"ls",[49,28012,28013],{"class":1505}," \u002Fdev\n",[49,28015,28016],{"class":51,"line":59},[49,28017,28018],{"class":55},"#例如\n",[49,28020,28021,28024,28026],{"class":51,"line":70},[49,28022,28023],{"class":66},"--device",[49,28025,1448],{"class":109},[49,28027,28028],{"class":1505},"\u002Fdev\u002Ftty_USB0\n",[591,28030,28031],{"start":59},[26,28032,28033],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[39,28035,28037],{"className":25070,"code":28036,"language":25072,"meta":44,"style":44},"--privileged\n",[46,28038,28039],{"__ignoreMap":44},[49,28040,28041],{"class":51,"line":52},[49,28042,28036],{"class":62},[19,28044,28045],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28047,28048],{},[174,28049],{"alt":44,"src":28050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[183,28052,28054],{"id":28053},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28056,28057,28058,28061],{},"NVIDIA Container Toolkit使用户 ",[485,28059,28060],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28063,28064],{},[174,28065],{"alt":44,"src":28066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28068,28069],{},[1630,28070,28071],{"href":28071,"rel":28072},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25113],[525,28074,28076],{"id":28075},"_321安装","3.2.1.安装",[19,28078,28079],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24159,28081,28083],{"id":28082},"_3211ubuntu","3.2.1.1.Ubuntu",[591,28085,28086],{},[26,28087,28088],{},"配置存储库 并更新",[39,28090,28092],{"className":25070,"code":28091,"language":25072,"meta":44,"style":44},"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",[46,28093,28094,28123,28143,28155,28167,28173],{"__ignoreMap":44},[49,28095,28096,28099,28102,28105,28107,28109,28112,28115,28118,28121],{"class":51,"line":52},[49,28097,28098],{"class":62},"curl",[49,28100,28101],{"class":73}," -fsSL",[49,28103,28104],{"class":1505}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[49,28106,26358],{"class":109},[49,28108,27322],{"class":62},[49,28110,28111],{"class":1505}," gpg",[49,28113,28114],{"class":73}," --dearmor",[49,28116,28117],{"class":73}," -o",[49,28119,28120],{"class":1505}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[49,28122,25927],{"class":73},[49,28124,28125,28128,28130,28133,28136,28139,28141],{"class":51,"line":59},[49,28126,28127],{"class":66},"  && ",[49,28129,28098],{"class":62},[49,28131,28132],{"class":73}," -s",[49,28134,28135],{"class":73}," -L",[49,28137,28138],{"class":1505}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[49,28140,26358],{"class":109},[49,28142,25927],{"class":73},[49,28144,28145,28148,28151,28153],{"class":51,"line":70},[49,28146,28147],{"class":62},"    sed",[49,28149,28150],{"class":1505}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[49,28152,26358],{"class":109},[49,28154,25927],{"class":73},[49,28156,28157,28160,28162,28165],{"class":51,"line":86},[49,28158,28159],{"class":62},"    sudo",[49,28161,27465],{"class":1505},[49,28163,28164],{"class":1505}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[49,28166,25927],{"class":73},[49,28168,28169,28171],{"class":51,"line":98},[49,28170,28127],{"class":66},[49,28172,27424],{"class":73},[49,28174,28175,28177,28179],{"class":51,"line":121},[49,28176,28159],{"class":62},[49,28178,27325],{"class":1505},[49,28180,27491],{"class":1505},[591,28182,28183],{"start":59},[26,28184,28185],{},"安装nvidia-docker2",[39,28187,28189],{"className":25070,"code":28188,"language":25072,"meta":44,"style":44},"sudo apt-get install -y nvidia-docker2\n",[46,28190,28191],{"__ignoreMap":44},[49,28192,28193,28195,28197,28199,28201],{"class":51,"line":52},[49,28194,25825],{"class":62},[49,28196,27325],{"class":1505},[49,28198,25082],{"class":1505},[49,28200,27649],{"class":73},[49,28202,28203],{"class":1505}," nvidia-docker2\n",[591,28205,28206],{"start":70},[26,28207,28208],{},"使用nvidia-ctk命令配置container runtime",[39,28210,28212],{"className":25070,"code":28211,"language":25072,"meta":44,"style":44},"sudo nvidia-ctk runtime configure --runtime=docker\n",[46,28213,28214],{"__ignoreMap":44},[49,28215,28216,28218,28221,28224,28227],{"class":51,"line":52},[49,28217,25825],{"class":62},[49,28219,28220],{"class":1505}," nvidia-ctk",[49,28222,28223],{"class":1505}," runtime",[49,28225,28226],{"class":1505}," configure",[49,28228,28229],{"class":73}," --runtime=docker\n",[591,28231,28232],{"start":86},[26,28233,28234],{},"重启docker服务:",[39,28236,28238],{"className":25070,"code":28237,"language":25072,"meta":44,"style":44},"sudo systemctl restart docker\n",[46,28239,28240],{"__ignoreMap":44},[49,28241,28242,28244,28246,28249],{"class":51,"line":52},[49,28243,25825],{"class":62},[49,28245,27762],{"class":1505},[49,28247,28248],{"class":1505}," restart",[49,28250,27741],{"class":1505},[24159,28252,28254],{"id":28253},"_3212fedora","3.2.1.2.Fedora",[591,28256,28257],{},[26,28258,28259],{},"配置存储库",[39,28261,28263],{"className":25070,"code":28262,"language":25072,"meta":44,"style":44},"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",[46,28264,28265,28280],{"__ignoreMap":44},[49,28266,28267,28269,28271,28273,28276,28278],{"class":51,"line":52},[49,28268,28098],{"class":62},[49,28270,28132],{"class":73},[49,28272,28135],{"class":73},[49,28274,28275],{"class":1505}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[49,28277,26358],{"class":109},[49,28279,25927],{"class":73},[49,28281,28282,28284,28286],{"class":51,"line":59},[49,28283,25825],{"class":62},[49,28285,27465],{"class":1505},[49,28287,28288],{"class":1505}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[591,28290,28291],{"start":59},[26,28292,28293],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[39,28295,28297],{"className":25070,"code":28296,"language":25072,"meta":44,"style":44},"# 如果是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",[46,28298,28299,28304,28318,28322,28327],{"__ignoreMap":44},[49,28300,28301],{"class":51,"line":52},[49,28302,28303],{"class":55},"# 如果是RHEL或者Rocky（DNF4）\n",[49,28305,28306,28308,28310,28312,28315],{"class":51,"line":59},[49,28307,25825],{"class":62},[49,28309,27564],{"class":1505},[49,28311,27663],{"class":1505},[49,28313,28314],{"class":73}," --add-repo",[49,28316,28317],{"class":1505}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[49,28319,28320],{"class":51,"line":70},[49,28321,3654],{"emptyLinePlaceholder":1330},[49,28323,28324],{"class":51,"line":86},[49,28325,28326],{"class":55},"# 如果是Feodra41+（DNF5）\n",[49,28328,28329,28331,28333,28335,28337],{"class":51,"line":98},[49,28330,25825],{"class":62},[49,28332,27564],{"class":1505},[49,28334,27663],{"class":1505},[49,28336,27666],{"class":1505},[49,28338,28339],{"class":73}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[591,28341,28342],{"start":70},[26,28343,28344],{},"安装NVIDIA Container Toolki包",[39,28346,28348],{"className":25070,"code":28347,"language":25072,"meta":44,"style":44},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[46,28349,28350,28355,28368,28372,28377],{"__ignoreMap":44},[49,28351,28352],{"class":51,"line":52},[49,28353,28354],{"class":55},"# 如果是RHEL或者Rocky\n",[49,28356,28357,28359,28361,28363,28365],{"class":51,"line":59},[49,28358,25825],{"class":62},[49,28360,27564],{"class":1505},[49,28362,25082],{"class":1505},[49,28364,27649],{"class":73},[49,28366,28367],{"class":1505}," nvidia-container-toolkit\n",[49,28369,28370],{"class":51,"line":70},[49,28371,3654],{"emptyLinePlaceholder":1330},[49,28373,28374],{"class":51,"line":86},[49,28375,28376],{"class":55},"# 如果是Fedora\n",[49,28378,28379,28381,28383,28385,28387],{"class":51,"line":98},[49,28380,25825],{"class":62},[49,28382,27564],{"class":1505},[49,28384,25082],{"class":1505},[49,28386,27649],{"class":73},[49,28388,28367],{"class":1505},[591,28390,28391],{"start":86},[26,28392,28393,28394,28396],{},"安装nvidia-docker2 ： 在Fedora上使用",[46,28395,27539],{},"进行安装",[39,28398,28400],{"className":25070,"code":28399,"language":25072,"meta":44,"style":44},"sudo dnf install -y nvidia-docker2\n",[46,28401,28402],{"__ignoreMap":44},[49,28403,28404,28406,28408,28410,28412],{"class":51,"line":52},[49,28405,25825],{"class":62},[49,28407,27564],{"class":1505},[49,28409,25082],{"class":1505},[49,28411,27649],{"class":73},[49,28413,28203],{"class":1505},[591,28415,28416],{"start":98},[26,28417,28418],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[39,28420,28421],{"className":25070,"code":28211,"language":25072,"meta":44,"style":44},[46,28422,28423],{"__ignoreMap":44},[49,28424,28425,28427,28429,28431,28433],{"class":51,"line":52},[49,28426,25825],{"class":62},[49,28428,28220],{"class":1505},[49,28430,28223],{"class":1505},[49,28432,28226],{"class":1505},[49,28434,28229],{"class":73},[591,28436,28437],{"start":121},[26,28438,28439],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[39,28441,28442],{"className":25070,"code":28237,"language":25072,"meta":44,"style":44},[46,28443,28444],{"__ignoreMap":44},[49,28445,28446,28448,28450,28452],{"class":51,"line":52},[49,28447,25825],{"class":62},[49,28449,27762],{"class":1505},[49,28451,28248],{"class":1505},[49,28453,27741],{"class":1505},[19,28455,28456],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28458,28459],{},"方法：",[19,28461,28462],{},"1️⃣nvidia-smi",[19,28464,28465],{},"2️⃣运行nvidia cuda 容器进行测试",[39,28467,28469],{"className":25070,"code":28468,"language":25072,"meta":44,"style":44},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[46,28470,28471],{"__ignoreMap":44},[49,28472,28473,28475,28477,28480,28483,28486,28489,28492],{"class":51,"line":52},[49,28474,25825],{"class":62},[49,28476,27569],{"class":1505},[49,28478,28479],{"class":1505}," run",[49,28481,28482],{"class":73}," --rm",[49,28484,28485],{"class":73}," --gpus",[49,28487,28488],{"class":1505}," all",[49,28490,28491],{"class":1505}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[49,28493,28494],{"class":1505}," nvidia-smi\n",[19,28496,28497],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,28499,28500],{},[174,28501],{"alt":44,"src":28502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[183,28504,28506],{"id":28505},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,28508,28509],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,28511,28512],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,28514,28515],{},[1630,28516,28517],{"href":28517,"rel":28518},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25113],[19,28520,28521],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,28523,28524],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,28526,28527],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[293,28529,28530,28546],{},[296,28531,28532],{},[299,28533,28534,28537,28540,28543],{},[302,28535,28536],{"align":304},"镜像类型",[302,28538,28539],{"align":304},"适用场景",[302,28541,28542],{"align":304},"示例标签",[302,28544,28545],{"align":304},"大小",[310,28547,28548,28562,28576],{},[299,28549,28550,28553,28556,28559],{},[315,28551,28552],{"align":304},"base",[315,28554,28555],{"align":304},"仅需 CUDA 运行时库",[315,28557,28558],{"align":304},"12.4.0-base-ubuntu22.04",[315,28560,28561],{"align":304},"~240MB",[299,28563,28564,28567,28570,28573],{},[315,28565,28566],{"align":304},"runtime",[315,28568,28569],{"align":304},"部署编译后的应用（含数学库）",[315,28571,28572],{"align":304},"12.4.0-runtime-ubuntu22.04",[315,28574,28575],{"align":304},"~2GB",[299,28577,28578,28581,28584,28587],{},[315,28579,28580],{"align":304},"devel",[315,28582,28583],{"align":304},"开发环境（含编译工具）",[315,28585,28586],{"align":304},"12.4.0-devel-ubuntu22.04",[315,28588,28589],{"align":304},"~3GB",[19,28591,28592,28593,28596],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[46,28594,28595],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,28598,28599],{},[174,28600],{"alt":44,"src":28601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,28603,28604],{},"在dockerfile里就可以开头这么写：",[39,28606,28608],{"className":25070,"code":28607,"language":25072,"meta":44,"style":44},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[46,28609,28610,28615],{"__ignoreMap":44},[49,28611,28612],{"class":51,"line":52},[49,28613,28614],{"class":55},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[49,28616,28617,28620],{"class":51,"line":59},[49,28618,28619],{"class":62},"FROM",[49,28621,28622],{"class":1505}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[183,28624,28626],{"id":28625},"_34配置以太网","3.4.配置以太网",[19,28628,28629],{},"指定网络模式",[39,28631,28633],{"className":25070,"code":28632,"language":25072,"meta":44,"style":44},"--net=host \\\n",[46,28634,28635],{"__ignoreMap":44},[49,28636,28637,28640,28642,28645],{"class":51,"line":52},[49,28638,28639],{"class":66},"--net",[49,28641,1448],{"class":109},[49,28643,28644],{"class":1505},"host",[49,28646,25927],{"class":62},[19,28648,28649],{},"启动参数里加上这行即可。具体在下方",[19,28651,28652],{},"--net选项：指定网络模式，该选项有以下参数可选：",[23,28654,28655,28658,28661,28664],{},[26,28656,28657],{},"--net=bridge:默认选项，表示连接到默认的网桥",[26,28659,28660],{},"--net=host:容器使用宿主机的网络",[26,28662,28663],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[26,28665,28666],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1305,28668,28669],{},"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":44,"searchDepth":59,"depth":59,"links":28671},[28672,28673,28674,28675],{"id":27986,"depth":70,"text":27987},{"id":28053,"depth":70,"text":28054},{"id":28505,"depth":70,"text":28506},{"id":28625,"depth":70,"text":28626},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27975,"description":27983},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28682,"title":28683,"body":28684,"description":28691,"extension":1328,"meta":28697,"navigation":1330,"path":28698,"seo":28699,"stem":28700,"__hash__":28701},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28685,"toc":28695},[28686,28689,28692],[10,28687,28683],{"id":28688},"_4dockerhub换源",[19,28690,28691],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,28693,28694],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":44,"searchDepth":59,"depth":59,"links":28696},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28683,"description":28691},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28703,"title":28704,"body":28705,"description":44,"extension":1328,"meta":29716,"navigation":1330,"path":29717,"seo":29718,"stem":29719,"__hash__":29720},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28706,"toc":29711},[28707,28710,28714,28720,28724,28727,29066,29069,29072,29075,29080,29085,29088,29091,29094,29097,29116,29119,29130,29136,29318,29328,29344,29607,29609,29634,29649,29658,29708],[10,28708,28704],{"id":28709},"_5docker命令学习",[183,28711,28713],{"id":28712},"_51参考文档","5.1.参考文档",[19,28715,28716],{},[1630,28717,28718],{"href":28718,"rel":28719},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25113],[183,28721,28723],{"id":28722},"_52常用命令","5.2.常用命令",[19,28725,28726],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[293,28728,28729,28741],{},[296,28730,28731],{},[299,28732,28733,28736,28738],{},[302,28734,28735],{"align":304},"命令",[302,28737,308],{"align":304},[302,28739,28740],{"align":304},"示例",[310,28742,28743,28754,28765,28776,28787,28798,28809,28820,28830,28841,28852,28863,28873,28884,28895,28906,28916,28926,28936,28946,28957,28968,28979,28990,29001,29012,29022,29033,29044,29055],{},[299,28744,28745,28748,28751],{},[315,28746,28747],{"align":304},"docker run",[315,28749,28750],{"align":304},"创建并启动一个新的容器。",[315,28752,28753],{"align":304},"docker run -it ubuntu bash",[299,28755,28756,28759,28762],{},[315,28757,28758],{"align":304},"docker build",[315,28760,28761],{"align":304},"通过指定的 Dockerfile 创建一个新的镜像。",[315,28763,28764],{"align":304},"docker build -t myimage .",[299,28766,28767,28770,28773],{},[315,28768,28769],{"align":304},"docker pull",[315,28771,28772],{"align":304},"从 Docker 仓库拉取镜像。",[315,28774,28775],{"align":304},"docker pull ubuntu",[299,28777,28778,28781,28784],{},[315,28779,28780],{"align":304},"docker push",[315,28782,28783],{"align":304},"将本地镜像推送到 Docker 仓库。",[315,28785,28786],{"align":304},"docker push myimage",[299,28788,28789,28792,28795],{},[315,28790,28791],{"align":304},"docker stop",[315,28793,28794],{"align":304},"停止一个正在运行的容器。",[315,28796,28797],{"align":304},"docker stop container_id",[299,28799,28800,28803,28806],{},[315,28801,28802],{"align":304},"docker start",[315,28804,28805],{"align":304},"启动一个已经存在的容器。",[315,28807,28808],{"align":304},"docker start container_id",[299,28810,28811,28814,28817],{},[315,28812,28813],{"align":304},"docker restart",[315,28815,28816],{"align":304},"重新启动容器。",[315,28818,28819],{"align":304},"docker restart container_id",[299,28821,28822,28825,28828],{},[315,28823,28824],{"align":304},"docker ps",[315,28826,28827],{"align":304},"列出当前正在运行的容器。",[315,28829,28824],{"align":304},[299,28831,28832,28835,28838],{},[315,28833,28834],{"align":304},"docker rm",[315,28836,28837],{"align":304},"删除一个或多个停止的容器。",[315,28839,28840],{"align":304},"docker rm container_id",[299,28842,28843,28846,28849],{},[315,28844,28845],{"align":304},"docker exec",[315,28847,28848],{"align":304},"在一个正在运行的容器中执行命令。",[315,28850,28851],{"align":304},"docker exec -it container_id bash",[299,28853,28854,28857,28860],{},[315,28855,28856],{"align":304},"docker logs",[315,28858,28859],{"align":304},"查看容器的日志输出。",[315,28861,28862],{"align":304},"docker logs container_id",[299,28864,28865,28868,28871],{},[315,28866,28867],{"align":304},"docker images",[315,28869,28870],{"align":304},"列出本地所有镜像。",[315,28872,28867],{"align":304},[299,28874,28875,28878,28881],{},[315,28876,28877],{"align":304},"docker rmi",[315,28879,28880],{"align":304},"删除一个或多个镜像。",[315,28882,28883],{"align":304},"docker rmi myimage",[299,28885,28886,28889,28892],{},[315,28887,28888],{"align":304},"docker network",[315,28890,28891],{"align":304},"管理 Docker 网络。",[315,28893,28894],{"align":304},"docker network ls",[299,28896,28897,28900,28903],{},[315,28898,28899],{"align":304},"docker volume",[315,28901,28902],{"align":304},"管理 Docker 数据卷。",[315,28904,28905],{"align":304},"docker volume ls",[299,28907,28908,28911,28914],{},[315,28909,28910],{"align":304},"docker-compose up",[315,28912,28913],{"align":304},"启动 docker-compose.yml 中定义的所有服务。",[315,28915,28910],{"align":304},[299,28917,28918,28921,28924],{},[315,28919,28920],{"align":304},"docker-compose down",[315,28922,28923],{"align":304},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[315,28925,28920],{"align":304},[299,28927,28928,28931,28934],{},[315,28929,28930],{"align":304},"docker info",[315,28932,28933],{"align":304},"显示 Docker 系统的详细信息。",[315,28935,28930],{"align":304},[299,28937,28938,28941,28944],{},[315,28939,28940],{"align":304},"docker stats",[315,28942,28943],{"align":304},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[315,28945,28940],{"align":304},[299,28947,28948,28951,28954],{},[315,28949,28950],{"align":304},"docker inspect",[315,28952,28953],{"align":304},"查看容器或镜像的详细信息（JSON 格式）。",[315,28955,28956],{"align":304},"docker inspect container_id",[299,28958,28959,28962,28965],{},[315,28960,28961],{"align":304},"docker save",[315,28963,28964],{"align":304},"将一个镜像保存为 tar 文件。",[315,28966,28967],{"align":304},"docker save -o myimage.tar myimage",[299,28969,28970,28973,28976],{},[315,28971,28972],{"align":304},"docker load",[315,28974,28975],{"align":304},"从 tar 文件中加载镜像。",[315,28977,28978],{"align":304},"docker load -i myimage.tar",[299,28980,28981,28984,28987],{},[315,28982,28983],{"align":304},"docker tag",[315,28985,28986],{"align":304},"为镜像添加标签（tag）。",[315,28988,28989],{"align":304},"docker tag myimage myimage:v1",[299,28991,28992,28995,28998],{},[315,28993,28994],{"align":304},"docker buildx build",[315,28996,28997],{"align":304},"使用 Buildx 构建多架构镜像。",[315,28999,29000],{"align":304},"docker buildx build -t myimage .",[299,29002,29003,29006,29009],{},[315,29004,29005],{"align":304},"docker buildx create",[315,29007,29008],{"align":304},"创建一个新的 Buildx 构建实例。",[315,29010,29011],{"align":304},"docker buildx create –use",[299,29013,29014,29017,29020],{},[315,29015,29016],{"align":304},"docker buildx ls",[315,29018,29019],{"align":304},"列出所有可用的 Buildx 构建实例。",[315,29021,29016],{"align":304},[299,29023,29024,29027,29030],{},[315,29025,29026],{"align":304},"docker buildx use",[315,29028,29029],{"align":304},"设置当前的 Buildx 构建实例。",[315,29031,29032],{"align":304},"docker buildx use mybuilder",[299,29034,29035,29038,29041],{},[315,29036,29037],{"align":304},"docker buildx bake",[315,29039,29040],{"align":304},"使用 Bake 文件批量构建镜像。",[315,29042,29043],{"align":304},"docker buildx bake -f bake.hcl",[299,29045,29046,29049,29052],{},[315,29047,29048],{"align":304},"docker buildx build –push",[315,29050,29051],{"align":304},"构建镜像并推送到镜像仓库。",[315,29053,29054],{"align":304},"docker buildx build –push -t myimage .",[299,29056,29057,29060,29063],{},[315,29058,29059],{"align":304},"docker buildx build –platform",[315,29061,29062],{"align":304},"构建镜像并为多个平台生成支持。",[315,29064,29065],{"align":304},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29067,29068],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29070,29071],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29073,29074],{},"docker images 可以查看已经下载的镜像",[19,29076,29077],{},[174,29078],{"alt":44,"src":29079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29081,29082],{},[485,29083,29084],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29086,29087],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29089,29090],{},"docker container logs 查看容器日志",[19,29092,29093],{},"docker top 查看容器里的进程",[19,29095,29096],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[39,29098,29100],{"className":25070,"code":29099,"language":25072,"meta":44,"style":44},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[46,29101,29102],{"__ignoreMap":44},[49,29103,29104,29107,29110,29113],{"class":51,"line":52},[49,29105,29106],{"class":62},"如：docker",[49,29108,29109],{"class":1505}," cp",[49,29111,29112],{"class":1505}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[49,29114,29115],{"class":1505}," \u002Fmydata\u002Fnginx\n",[19,29117,29118],{},"docker run时在启动容器的时候会有几个常用的选项：",[23,29120,29121,29124,29127],{},[26,29122,29123],{},"-d选项：表示后台运行",[26,29125,29126],{},"-P选项：随机端口映射",[26,29128,29129],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[183,29131,29133],{"id":29132},"_53run命令的参数非常重要",[485,29134,29135],{},"5.3.run命令的参数（非常重要）",[293,29137,29138,29151],{},[296,29139,29140],{},[299,29141,29142,29145,29148],{},[302,29143,29144],{"align":304},"参数\u002F配置",[302,29146,29147],{"align":304},"功能说明",[302,29149,29150],{"align":304},"重要性与参考依据",[310,29152,29153,29164,29175,29186,29197,29208,29219,29230,29241,29252,29263,29274,29285,29296,29307],{},[299,29154,29155,29158,29161],{},[315,29156,29157],{"align":304},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[315,29159,29160],{"align":304},"指定容器名称，便于后续管理",[315,29162,29163],{"align":304},"替代随机生成的容器名。",[299,29165,29166,29169,29172],{},[315,29167,29168],{"align":304},"–gpus all",[315,29170,29171],{"align":304},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[315,29173,29174],{"align":304},"用于CUDA加速等GPU依赖任务。",[299,29176,29177,29180,29183],{},[315,29178,29179],{"align":304},"-e NVIDIA_DRIVER_CAPABILITIES=all",[315,29181,29182],{"align":304},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[315,29184,29185],{"align":304},"确保容器内GPU功能完整67。",[299,29187,29188,29191,29194],{},[315,29189,29190],{"align":304},"-dit",[315,29192,29193],{"align":304},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[315,29195,29196],{"align":304},"允许容器在后台运行并支持交互操作。",[299,29198,29199,29202,29205],{},[315,29200,29201],{"align":304},"–privileged",[315,29203,29204],{"align":304},"赋予容器完全主机权限（可访问设备、内核模块等）",[315,29206,29207],{"align":304},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[299,29209,29210,29213,29216],{},[315,29211,29212],{"align":304},"–net=host",[315,29214,29215],{"align":304},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[315,29217,29218],{"align":304},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[299,29220,29221,29224,29227],{},[315,29222,29223],{"align":304},"–group-add audio–group-add video–group-add dialout",[315,29225,29226],{"align":304},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[315,29228,29229],{"align":304},"避免权限问题（如避免无法调用摄像头、麦克风）。",[299,29231,29232,29235,29238],{},[315,29233,29234],{"align":304},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[315,29236,29237],{"align":304},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[315,29239,29240],{"align":304},"支持容器内运行图形界面应用（如OpenCV可视化）。",[299,29242,29243,29246,29249],{},[315,29244,29245],{"align":304},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[315,29247,29248],{"align":304},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[315,29250,29251],{"align":304},"实现容器内图形显示。",[299,29253,29254,29257,29260],{},[315,29255,29256],{"align":304},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[315,29258,29259],{"align":304},"挂载X11认证文件（只读）",[315,29261,29262],{"align":304},"确保容器有权连接宿主机显示服务。",[299,29264,29265,29268,29271],{},[315,29266,29267],{"align":304},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[315,29269,29270],{"align":304},"挂载Wayland显示协议相关目录",[315,29272,29273],{"align":304},"支持Wayland协议的图形显示。",[299,29275,29276,29279,29282],{},[315,29277,29278],{"align":304},"–ulimit nofile=1024:524288",[315,29280,29281],{"align":304},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[315,29283,29284],{"align":304},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[299,29286,29287,29290,29293],{},[315,29288,29289],{"align":304},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[315,29291,29292],{"align":304},"挂载宿主机用户目录到容器内同名路径",[315,29294,29295],{"align":304},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[299,29297,29298,29301,29304],{},[315,29299,29300],{"align":304},"-w \u002Fhome\u002Ftungchiahui",[315,29302,29303],{"align":304},"设置容器启动后的默认工作目录",[315,29305,29306],{"align":304},"直接进入项目路径，方便执行命令2324。",[299,29308,29309,29312,29315],{},[315,29310,29311],{"align":304},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[315,29313,29314],{"align":304},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[315,29316,29317],{"align":304},"提供预配置的深度学习与机器人开发环境。",[19,29319,29320,29321,29323,29324,29327],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[46,29322,25825],{},"加不加",[46,29325,29326],{},"sudo -E","都无所谓。",[19,29329,29330,29331,29333,29334,29336,29337,29340,29341,29343],{},"用户已经被加到docker组了，不用",[46,29332,25825],{},"也行跑，其次，",[46,29335,25825],{},"运行的话，你的",[46,29338,29339],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[46,29342,29339],{},"更不可能变了。",[39,29345,29347],{"className":25070,"code":29346,"language":25072,"meta":44,"style":44},"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",[46,29348,29349,29362,29372,29382,29394,29401,29408,29415,29425,29434,29443,29457,29469,29481,29490,29500,29509,29524,29557,29584,29595,29602],{"__ignoreMap":44},[49,29350,29351,29353,29355,29357,29360],{"class":51,"line":52},[49,29352,25825],{"class":62},[49,29354,27569],{"class":1505},[49,29356,28479],{"class":1505},[49,29358,29359],{"class":73}," --name=ros_opencv_cuda",[49,29361,25927],{"class":73},[49,29363,29364,29367,29370],{"class":51,"line":59},[49,29365,29366],{"class":66},"--gpus ",[49,29368,29369],{"class":1505},"all",[49,29371,25927],{"class":73},[49,29373,29374,29377,29380],{"class":51,"line":70},[49,29375,29376],{"class":66},"-e ",[49,29378,29379],{"class":1505},"NVIDIA_DRIVER_CAPABILITIES=all",[49,29381,25927],{"class":73},[49,29383,29384,29386,29389,29392],{"class":51,"line":86},[49,29385,29376],{"class":66},[49,29387,29388],{"class":1505},"DISPLAY=",[49,29390,29391],{"class":66},"$DISPLAY ",[49,29393,27424],{"class":73},[49,29395,29396,29399],{"class":51,"line":98},[49,29397,29398],{"class":66},"-dit ",[49,29400,27424],{"class":73},[49,29402,29403,29406],{"class":51,"line":121},[49,29404,29405],{"class":66},"--privileged ",[49,29407,27424],{"class":73},[49,29409,29410,29413],{"class":51,"line":134},[49,29411,29412],{"class":66},"--net=host ",[49,29414,27424],{"class":73},[49,29416,29417,29420,29423],{"class":51,"line":1085},[49,29418,29419],{"class":66},"--group-add ",[49,29421,29422],{"class":1505},"audio",[49,29424,25927],{"class":73},[49,29426,29427,29429,29432],{"class":51,"line":2574},[49,29428,29419],{"class":66},[49,29430,29431],{"class":1505},"video",[49,29433,25927],{"class":73},[49,29435,29436,29438,29441],{"class":51,"line":2586},[49,29437,29419],{"class":66},[49,29439,29440],{"class":1505},"dialout",[49,29442,25927],{"class":73},[49,29444,29445,29447,29450,29452,29455],{"class":51,"line":2867},[49,29446,29376],{"class":66},[49,29448,29449],{"class":1505},"XAUTHORITY=",[49,29451,29339],{"class":66},[49,29453,29454],{"class":1505},"\u002F.Xauthority",[49,29456,25927],{"class":73},[49,29458,29459,29461,29464,29467],{"class":51,"line":2872},[49,29460,29376],{"class":66},[49,29462,29463],{"class":1505},"WAYLAND_DISPLAY=",[49,29465,29466],{"class":66},"$WAYLAND_DISPLAY ",[49,29468,27424],{"class":73},[49,29470,29471,29473,29476,29479],{"class":51,"line":2878},[49,29472,29376],{"class":66},[49,29474,29475],{"class":1505},"XDG_RUNTIME_DIR=",[49,29477,29478],{"class":66},"$XDG_RUNTIME_DIR ",[49,29480,27424],{"class":73},[49,29482,29483,29485,29488],{"class":51,"line":2883},[49,29484,29376],{"class":66},[49,29486,29487],{"class":1505},"QT_QPA_PLATFORM=xcb",[49,29489,25927],{"class":73},[49,29491,29492,29495,29498],{"class":51,"line":2897},[49,29493,29494],{"class":66},"-v ",[49,29496,29497],{"class":1505},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[49,29499,25927],{"class":73},[49,29501,29502,29504,29507],{"class":51,"line":2902},[49,29503,29494],{"class":66},[49,29505,29506],{"class":1505},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[49,29508,25927],{"class":73},[49,29510,29511,29514,29517,29519,29522],{"class":51,"line":2908},[49,29512,29513],{"class":66},"-v $HOME",[49,29515,29516],{"class":1505},"\u002F.Xauthority:",[49,29518,29339],{"class":66},[49,29520,29521],{"class":1505},"\u002F.Xauthority:ro",[49,29523,25927],{"class":73},[49,29525,29526,29528,29531,29533,29536,29539,29541,29544,29546,29548,29550,29552,29555],{"class":51,"line":2929},[49,29527,29494],{"class":66},[49,29529,29530],{"class":1505},"\u002Frun\u002Fuser\u002F",[49,29532,26348],{"class":66},[49,29534,29535],{"class":62},"id",[49,29537,29538],{"class":73}," -u",[49,29540,1821],{"class":66},[49,29542,29543],{"class":1505},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[49,29545,26348],{"class":66},[49,29547,29535],{"class":62},[49,29549,29538],{"class":73},[49,29551,1821],{"class":66},[49,29553,29554],{"class":1505},"\u002Fwayland-0",[49,29556,25927],{"class":73},[49,29558,29559,29561,29563,29565,29567,29569,29571,29574,29576,29578,29580,29582],{"class":51,"line":2934},[49,29560,29494],{"class":66},[49,29562,29530],{"class":1505},[49,29564,26348],{"class":66},[49,29566,29535],{"class":62},[49,29568,29538],{"class":73},[49,29570,1821],{"class":66},[49,29572,29573],{"class":1505},":\u002Frun\u002Fuser\u002F",[49,29575,26348],{"class":66},[49,29577,29535],{"class":62},[49,29579,29538],{"class":73},[49,29581,14966],{"class":66},[49,29583,27424],{"class":73},[49,29585,29586,29588,29590,29593],{"class":51,"line":2948},[49,29587,29513],{"class":66},[49,29589,2249],{"class":1505},[49,29591,29592],{"class":66},"$HOME ",[49,29594,27424],{"class":73},[49,29596,29597,29600],{"class":51,"line":2953},[49,29598,29599],{"class":66},"-w $HOME ",[49,29601,27424],{"class":73},[49,29603,29604],{"class":51,"line":2982},[49,29605,29606],{"class":66},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,29608,10277],{},[591,29610,29611,29619,29622,29625],{},[26,29612,29613,15047,29615,29618],{},[46,29614,29379],{},[46,29616,29617],{},"--gpus all","没有英伟达显卡请注释。",[26,29620,29621],{},"--name后面请自己为容器起名。",[26,29623,29624],{},"最后一行仓库名称请你自己找对应的镜像填上。",[26,29626,29627,29628,29633],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24802,29629,29630],{},[485,29631,29632],{},"请不要加","。",[39,29635,29637],{"className":25070,"code":29636,"language":25072,"meta":44,"style":44},"--ulimit nofile=1024:524288 \\\n",[46,29638,29639],{"__ignoreMap":44},[49,29640,29641,29644,29647],{"class":51,"line":52},[49,29642,29643],{"class":62},"--ulimit",[49,29645,29646],{"class":1505}," nofile=1024:524288",[49,29648,25927],{"class":73},[19,29650,29651,29652,29657],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24802,29653,29654],{},[485,29655,29656],{},"不建议","**.**",[39,29659,29661],{"className":25070,"code":29660,"language":25072,"meta":44,"style":44},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[46,29662,29663,29690,29699],{"__ignoreMap":44},[49,29664,29665,29668,29671,29673,29675,29677,29679,29681,29683,29686,29688],{"class":51,"line":52},[49,29666,29667],{"class":62},"--user",[49,29669,29670],{"class":66}," $(",[49,29672,29535],{"class":62},[49,29674,29538],{"class":73},[49,29676,1821],{"class":66},[49,29678,2249],{"class":1505},[49,29680,26348],{"class":66},[49,29682,29535],{"class":62},[49,29684,29685],{"class":73}," -g",[49,29687,14966],{"class":66},[49,29689,27424],{"class":73},[49,29691,29692,29694,29697],{"class":51,"line":59},[49,29693,29494],{"class":66},[49,29695,29696],{"class":1505},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[49,29698,25927],{"class":73},[49,29700,29701,29703,29706],{"class":51,"line":70},[49,29702,29494],{"class":66},[49,29704,29705],{"class":1505},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[49,29707,25927],{"class":73},[1305,29709,29710],{},"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":44,"searchDepth":59,"depth":59,"links":29712},[29713,29714,29715],{"id":28712,"depth":70,"text":28713},{"id":28722,"depth":70,"text":28723},{"id":29132,"depth":70,"text":29135},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28704,"description":44},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29722,"title":29723,"body":29724,"description":44,"extension":1328,"meta":31347,"navigation":1330,"path":31348,"seo":31349,"stem":31350,"__hash__":31351},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29725,"toc":31342},[29726,29729,29733,29736,29958,29962,29966,29969,30075,30080,30083,30088,30091,30096,30099,30104,30107,30119,30122,30127,30134,30162,30169,30245,30250,30253,30276,30278,30353,30358,30361,30365,30373,30378,30383,30387,30398,30404,30407,30410,30434,30437,30440,30468,30471,30474,30939,30942,30947,30952,30956,30979,30984,30988,30992,30995,30998,31001,31028,31031,31034,31052,31055,31058,31080,31088,31093,31098,31102,31105,31108,31111,31114,31159,31162,31180,31183,31188,31191,31212,31215,31271,31274,31279,31283,31286,31293,31296,31299,31304,31307,31323,31326,31339],[10,29727,29723],{"id":29728},"_6手动创建docker镜像",[183,29730,29732],{"id":29731},"_61dockerfile","6.1.DockerFile",[19,29734,29735],{},"常用命令：",[293,29737,29738,29749],{},[296,29739,29740],{},[299,29741,29742,29745,29747],{},[302,29743,29744],{"align":304},"指令",[302,29746,27118],{"align":304},[302,29748,28740],{"align":304},[310,29750,29751,29761,29777,29788,29799,29810,29821,29832,29843,29857,29871,29882,29896,29907,29918,29932,29947],{},[299,29752,29753,29755,29758],{},[315,29754,28619],{"align":304},[315,29756,29757],{"align":304},"指定基础镜像，是 Dockerfile 的起点",[315,29759,29760],{"align":304},"FROM ubuntu:22.04",[299,29762,29763,29766,29769],{},[315,29764,29765],{"align":304},"LABEL",[315,29767,29768],{"align":304},"添加元数据（如作者、版本等）",[315,29770,29771,29772,29776],{"align":304},"LABEL maintainer=”",[1630,29773,29775],{"href":29774},"mailto:you@example.com","you@example.com","”",[299,29778,29779,29782,29785],{},[315,29780,29781],{"align":304},"ENV",[315,29783,29784],{"align":304},"设置环境变量",[315,29786,29787],{"align":304},"ENV PORT=8080",[299,29789,29790,29793,29796],{},[315,29791,29792],{"align":304},"ARG",[315,29794,29795],{"align":304},"构建参数，只在构建期间可用",[315,29797,29798],{"align":304},"ARG VERSION=1.0",[299,29800,29801,29804,29807],{},[315,29802,29803],{"align":304},"RUN",[315,29805,29806],{"align":304},"构建镜像时运行命令",[315,29808,29809],{"align":304},"RUN apt-get update && apt-get install -y curl",[299,29811,29812,29815,29818],{},[315,29813,29814],{"align":304},"COPY",[315,29816,29817],{"align":304},"复制文件到镜像中",[315,29819,29820],{"align":304},"COPY . \u002Fapp",[299,29822,29823,29826,29829],{},[315,29824,29825],{"align":304},"ADD",[315,29827,29828],{"align":304},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[315,29830,29831],{"align":304},"ADD archive.tar.gz \u002Fdata\u002F",[299,29833,29834,29837,29840],{},[315,29835,29836],{"align":304},"WORKDIR",[315,29838,29839],{"align":304},"设置工作目录",[315,29841,29842],{"align":304},"WORKDIR \u002Fopt",[299,29844,29845,29848,29851],{},[315,29846,29847],{"align":304},"CMD",[315,29849,29850],{"align":304},"设置容器启动时默认命令（可被 docker run 覆盖）",[315,29852,29853,29854],{"align":304},"CMD ",[49,29855,29856],{},"“node”, “index.js”",[299,29858,29859,29862,29865],{},[315,29860,29861],{"align":304},"ENTRYPOINT",[315,29863,29864],{"align":304},"设置容器启动时固定命令（通常用于 CLI 工具等）",[315,29866,29867,29868],{"align":304},"ENTRYPOINT ",[49,29869,29870],{},"“python3”",[299,29872,29873,29876,29879],{},[315,29874,29875],{"align":304},"EXPOSE",[315,29877,29878],{"align":304},"声明镜像内服务监听的端口（不会自动映射）",[315,29880,29881],{"align":304},"EXPOSE 80",[299,29883,29884,29887,29890],{},[315,29885,29886],{"align":304},"VOLUME",[315,29888,29889],{"align":304},"声明数据卷挂载点",[315,29891,29892,29893],{"align":304},"VOLUME ",[49,29894,29895],{},"“\u002Fdata”",[299,29897,29898,29901,29904],{},[315,29899,29900],{"align":304},"USER",[315,29902,29903],{"align":304},"设置后续命令执行的用户",[315,29905,29906],{"align":304},"USER appuser",[299,29908,29909,29912,29915],{},[315,29910,29911],{"align":304},"ONBUILD",[315,29913,29914],{"align":304},"当镜像作为其他镜像基础镜像时触发的构建指令",[315,29916,29917],{"align":304},"ONBUILD COPY . \u002Fsrc",[299,29919,29920,29923,29926],{},[315,29921,29922],{"align":304},"SHELL",[315,29924,29925],{"align":304},"更改默认 shell，比如将 sh -c 改为 bash -c",[315,29927,29928,29929],{"align":304},"SHELL ",[49,29930,29931],{},"“\u002Fbin\u002Fbash”, “-c”",[299,29933,29934,29937,29940],{},[315,29935,29936],{"align":304},"HEALTHCHECK",[315,29938,29939],{"align":304},"定义容器运行时的健康检查命令",[315,29941,29942,29943],{"align":304},"`HEALTHCHECK CMD curl –fail ",[1630,29944,29945],{"href":29945,"rel":29946},"http:\u002F\u002Flocalhost:8080",[25113],[299,29948,29949,29952,29955],{},[315,29950,29951],{"align":304},"STOPSIGNAL",[315,29953,29954],{"align":304},"容器停止时发送的信号",[315,29956,29957],{"align":304},"STOPSIGNAL SIGKILL",[183,29959,29961],{"id":29960},"_62自己创建容器","6.2.自己创建容器",[525,29963,29965],{"id":29964},"_621手动创建","6.2.1.手动创建",[19,29967,29968],{},"在x86电脑上编译x86的：",[39,29970,29972],{"className":25070,"code":29971,"language":25072,"meta":44,"style":44},"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",[46,29973,29974,29990,29994,30007,30011,30024,30028,30041,30045,30058,30062],{"__ignoreMap":44},[49,29975,29976,29978,29981,29984,29987],{"class":51,"line":52},[49,29977,27802],{"class":62},[49,29979,29980],{"class":1505}," build",[49,29982,29983],{"class":73}," -t",[49,29985,29986],{"class":1505}," ros-melodic-cuda118-cudnn8-bionic:latest",[49,29988,29989],{"class":1505}," .\n",[49,29991,29992],{"class":51,"line":59},[49,29993,3654],{"emptyLinePlaceholder":1330},[49,29995,29996,29998,30000,30002,30005],{"class":51,"line":70},[49,29997,27802],{"class":62},[49,29999,29980],{"class":1505},[49,30001,29983],{"class":73},[49,30003,30004],{"class":1505}," ros-noetic-focal:latest",[49,30006,29989],{"class":1505},[49,30008,30009],{"class":51,"line":86},[49,30010,3654],{"emptyLinePlaceholder":1330},[49,30012,30013,30015,30017,30019,30022],{"class":51,"line":98},[49,30014,27802],{"class":62},[49,30016,29980],{"class":1505},[49,30018,29983],{"class":73},[49,30020,30021],{"class":1505}," ros-humble-jammy:latest",[49,30023,29989],{"class":1505},[49,30025,30026],{"class":51,"line":121},[49,30027,3654],{"emptyLinePlaceholder":1330},[49,30029,30030,30032,30034,30036,30039],{"class":51,"line":134},[49,30031,27802],{"class":62},[49,30033,29980],{"class":1505},[49,30035,29983],{"class":73},[49,30037,30038],{"class":1505}," ros-jazzy-noble:latest",[49,30040,29989],{"class":1505},[49,30042,30043],{"class":51,"line":1085},[49,30044,3654],{"emptyLinePlaceholder":1330},[49,30046,30047,30049,30051,30053,30056],{"class":51,"line":2574},[49,30048,27802],{"class":62},[49,30050,29980],{"class":1505},[49,30052,29983],{"class":73},[49,30054,30055],{"class":1505}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[49,30057,29989],{"class":1505},[49,30059,30060],{"class":51,"line":2586},[49,30061,3654],{"emptyLinePlaceholder":1330},[49,30063,30064,30066,30068,30070,30073],{"class":51,"line":2867},[49,30065,27802],{"class":62},[49,30067,29980],{"class":1505},[49,30069,29983],{"class":73},[49,30071,30072],{"class":1505}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[49,30074,29989],{"class":1505},[19,30076,30077],{},[174,30078],{"alt":44,"src":30079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30081,30082],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30084,30085],{},[174,30086],{"alt":44,"src":30087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30089,30090],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[591,30092,30093],{},[26,30094,30095],{},"创建 Docker Hub 账户",[19,30097,30098],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[591,30100,30101],{"start":59},[26,30102,30103],{},"登录 Docker Hub",[19,30105,30106],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[39,30108,30110],{"className":25070,"code":30109,"language":25072,"meta":44,"style":44},"docker login\n",[46,30111,30112],{"__ignoreMap":44},[49,30113,30114,30116],{"class":51,"line":52},[49,30115,27802],{"class":62},[49,30117,30118],{"class":1505}," login\n",[19,30120,30121],{},"输入你的 Docker Hub 用户名和密码进行验证。",[591,30123,30124],{},[26,30125,30126],{},"为你的镜像打标签",[19,30128,30129,30130,30133],{},"Docker Hub 使用 ",[46,30131,30132],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[39,30135,30137],{"className":25070,"code":30136,"language":25072,"meta":44,"style":44},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[46,30138,30139],{"__ignoreMap":44},[49,30140,30141,30143,30146,30148,30151,30154,30157,30159],{"class":51,"line":52},[49,30142,27802],{"class":62},[49,30144,30145],{"class":1505}," tag",[49,30147,30038],{"class":1505},[49,30149,30150],{"class":109}," \u003C",[49,30152,30153],{"class":1505},"你的用户",[49,30155,30156],{"class":66},"名",[49,30158,2349],{"class":109},[49,30160,30161],{"class":1505},"\u002Fros-jazzy-noble:latest\n",[19,30163,30164,30165,30168],{},"例如，如果你的 Docker Hub 用户名是 ",[46,30166,30167],{},"tungchiahui","，你应该执行：",[39,30170,30172],{"className":25070,"code":30171,"language":25072,"meta":44,"style":44},"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",[46,30173,30174,30185,30189,30200,30204,30215,30219,30230,30234],{"__ignoreMap":44},[49,30175,30176,30178,30180,30182],{"class":51,"line":52},[49,30177,27802],{"class":62},[49,30179,30145],{"class":1505},[49,30181,30004],{"class":1505},[49,30183,30184],{"class":1505}," tungchiahui\u002Fros-noetic-focal:latest\n",[49,30186,30187],{"class":51,"line":59},[49,30188,3654],{"emptyLinePlaceholder":1330},[49,30190,30191,30193,30195,30197],{"class":51,"line":70},[49,30192,27802],{"class":62},[49,30194,30145],{"class":1505},[49,30196,30021],{"class":1505},[49,30198,30199],{"class":1505}," tungchiahui\u002Fros-humble-jammy:latest\n",[49,30201,30202],{"class":51,"line":86},[49,30203,3654],{"emptyLinePlaceholder":1330},[49,30205,30206,30208,30210,30212],{"class":51,"line":98},[49,30207,27802],{"class":62},[49,30209,30145],{"class":1505},[49,30211,30038],{"class":1505},[49,30213,30214],{"class":1505}," tungchiahui\u002Fros-jazzy-noble:latest\n",[49,30216,30217],{"class":51,"line":121},[49,30218,3654],{"emptyLinePlaceholder":1330},[49,30220,30221,30223,30225,30227],{"class":51,"line":134},[49,30222,27802],{"class":62},[49,30224,30145],{"class":1505},[49,30226,30055],{"class":1505},[49,30228,30229],{"class":1505}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[49,30231,30232],{"class":51,"line":1085},[49,30233,3654],{"emptyLinePlaceholder":1330},[49,30235,30236,30238,30240,30242],{"class":51,"line":2574},[49,30237,27802],{"class":62},[49,30239,30145],{"class":1505},[49,30241,30072],{"class":1505},[49,30243,30244],{"class":1505}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[591,30246,30247],{"start":59},[26,30248,30249],{},"推送镜像到 Docker Hub",[19,30251,30252],{},"使用以下命令将镜像推送到 Docker Hub：",[39,30254,30256],{"className":25070,"code":30255,"language":25072,"meta":44,"style":44},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[46,30257,30258],{"__ignoreMap":44},[49,30259,30260,30262,30265,30267,30269,30271,30273],{"class":51,"line":52},[49,30261,27802],{"class":62},[49,30263,30264],{"class":1505}," push",[49,30266,30150],{"class":109},[49,30268,30153],{"class":1505},[49,30270,30156],{"class":66},[49,30272,2349],{"class":109},[49,30274,30275],{"class":1505},"\u002Fros-noetic-jazzy-noble:latest\n",[19,30277,551],{},[39,30279,30281],{"className":25070,"code":30280,"language":25072,"meta":44,"style":44},"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",[46,30282,30283,30291,30295,30303,30307,30315,30319,30328,30332,30340,30344],{"__ignoreMap":44},[49,30284,30285,30287,30289],{"class":51,"line":52},[49,30286,27802],{"class":62},[49,30288,30264],{"class":1505},[49,30290,30184],{"class":1505},[49,30292,30293],{"class":51,"line":59},[49,30294,3654],{"emptyLinePlaceholder":1330},[49,30296,30297,30299,30301],{"class":51,"line":70},[49,30298,27802],{"class":62},[49,30300,30264],{"class":1505},[49,30302,30199],{"class":1505},[49,30304,30305],{"class":51,"line":86},[49,30306,3654],{"emptyLinePlaceholder":1330},[49,30308,30309,30311,30313],{"class":51,"line":98},[49,30310,27802],{"class":62},[49,30312,30264],{"class":1505},[49,30314,30214],{"class":1505},[49,30316,30317],{"class":51,"line":121},[49,30318,3654],{"emptyLinePlaceholder":1330},[49,30320,30321,30323,30325],{"class":51,"line":134},[49,30322,27802],{"class":62},[49,30324,30264],{"class":1505},[49,30326,30327],{"class":1505}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[49,30329,30330],{"class":51,"line":1085},[49,30331,3654],{"emptyLinePlaceholder":1330},[49,30333,30334,30336,30338],{"class":51,"line":2574},[49,30335,27802],{"class":62},[49,30337,30264],{"class":1505},[49,30339,30244],{"class":1505},[49,30341,30342],{"class":51,"line":2586},[49,30343,3654],{"emptyLinePlaceholder":1330},[49,30345,30346,30348,30350],{"class":51,"line":2867},[49,30347,27802],{"class":62},[49,30349,30264],{"class":1505},[49,30351,30352],{"class":1505}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[591,30354,30355],{"start":70},[26,30356,30357],{},"验证推送成功",[19,30359,30360],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,30362,30363],{},[485,30364,5038],{},[23,30366,30367,30370],{},[26,30368,30369],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[26,30371,30372],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,30374,30375],{},[174,30376],{"alt":44,"src":30377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,30379,30380],{},[174,30381],{"alt":44,"src":30382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[525,30384,30386],{"id":30385},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,30388,30389,30390,30393,30394,30397],{},"如果您想在 ",[485,30391,30392],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[485,30395,30396],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,30399,30400,30401],{},"1. ",[485,30402,30403],{},"启用 Docker 跨平台构建",[19,30405,30406],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,30408,30409],{},"第一步：启用 buildx（只需执行一次）",[39,30411,30413],{"className":25070,"code":30412,"language":25072,"meta":44,"style":44},"docker buildx create --name multiarch_builder --use\n",[46,30414,30415],{"__ignoreMap":44},[49,30416,30417,30419,30422,30425,30428,30431],{"class":51,"line":52},[49,30418,27802],{"class":62},[49,30420,30421],{"class":1505}," buildx",[49,30423,30424],{"class":1505}," create",[49,30426,30427],{"class":73}," --name",[49,30429,30430],{"class":1505}," multiarch_builder",[49,30432,30433],{"class":73}," --use\n",[19,30435,30436],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,30438,30439],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[39,30441,30443],{"className":25070,"code":30442,"language":25072,"meta":44,"style":44},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[46,30444,30445],{"__ignoreMap":44},[49,30446,30447,30449,30451,30453,30456,30459,30462,30465],{"class":51,"line":52},[49,30448,27802],{"class":62},[49,30450,28479],{"class":1505},[49,30452,28482],{"class":73},[49,30454,30455],{"class":73}," --privileged",[49,30457,30458],{"class":1505}," multiarch\u002Fqemu-user-static",[49,30460,30461],{"class":73}," --reset",[49,30463,30464],{"class":73}," -p",[49,30466,30467],{"class":1505}," yes\n",[19,30469,30470],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,30472,30473],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[39,30475,30477],{"className":25070,"code":30476,"language":25072,"meta":44,"style":44},"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",[46,30478,30479,30521,30525,30530,30540,30550,30559,30565,30569,30573,30583,30591,30600,30606,30610,30614,30624,30632,30641,30647,30651,30655,30665,30673,30682,30688,30692,30696,30706,30714,30723,30729,30733,30737,30747,30755,30764,30770,30774,30778,30788,30796,30805,30811,30815,30819,30829,30837,30846,30852,30856,30860,30870,30878,30887,30893,30897,30901,30912,30920,30929,30935],{"__ignoreMap":44},[49,30480,30481,30483,30485,30487,30490,30493,30495,30497,30500,30502,30504,30506,30508,30511,30514,30516,30519],{"class":51,"line":52},[49,30482,27802],{"class":62},[49,30484,30421],{"class":1505},[49,30486,29980],{"class":1505},[49,30488,30489],{"class":73}," --platform",[49,30491,30492],{"class":1505}," linux\u002Famd64,linux\u002Farm64",[49,30494,29983],{"class":73},[49,30496,30150],{"class":109},[49,30498,30499],{"class":1505},"你的镜像",[49,30501,30156],{"class":66},[49,30503,2349],{"class":109},[49,30505,2249],{"class":1505},[49,30507,2300],{"class":109},[49,30509,30510],{"class":1505},"标",[49,30512,30513],{"class":66},"签",[49,30515,2349],{"class":109},[49,30517,30518],{"class":73}," --push",[49,30520,29989],{"class":1505},[49,30522,30523],{"class":51,"line":59},[49,30524,3654],{"emptyLinePlaceholder":1330},[49,30526,30527],{"class":51,"line":70},[49,30528,30529],{"class":55},"# 例子：\n",[49,30531,30532,30534,30536,30538],{"class":51,"line":86},[49,30533,27802],{"class":62},[49,30535,30421],{"class":1505},[49,30537,29980],{"class":1505},[49,30539,25927],{"class":73},[49,30541,30542,30545,30548],{"class":51,"line":98},[49,30543,30544],{"class":66},"--platform ",[49,30546,30547],{"class":1505},"linux\u002Famd64,linux\u002Farm64",[49,30549,25927],{"class":73},[49,30551,30552,30554,30557],{"class":51,"line":121},[49,30553,29983],{"class":73},[49,30555,30556],{"class":1505}," tungchiahui\u002Fros:noetic-focal",[49,30558,25927],{"class":73},[49,30560,30561,30563],{"class":51,"line":134},[49,30562,30518],{"class":73},[49,30564,25927],{"class":73},[49,30566,30567],{"class":51,"line":1085},[49,30568,29989],{"class":1505},[49,30570,30571],{"class":51,"line":2574},[49,30572,3654],{"emptyLinePlaceholder":1330},[49,30574,30575,30577,30579,30581],{"class":51,"line":2586},[49,30576,27802],{"class":62},[49,30578,30421],{"class":1505},[49,30580,29980],{"class":1505},[49,30582,25927],{"class":73},[49,30584,30585,30587,30589],{"class":51,"line":2867},[49,30586,30544],{"class":66},[49,30588,30547],{"class":1505},[49,30590,25927],{"class":73},[49,30592,30593,30595,30598],{"class":51,"line":2872},[49,30594,29983],{"class":73},[49,30596,30597],{"class":1505}," tungchiahui\u002Fros:humble-jammy",[49,30599,25927],{"class":73},[49,30601,30602,30604],{"class":51,"line":2878},[49,30603,30518],{"class":73},[49,30605,25927],{"class":73},[49,30607,30608],{"class":51,"line":2883},[49,30609,29989],{"class":1505},[49,30611,30612],{"class":51,"line":2897},[49,30613,3654],{"emptyLinePlaceholder":1330},[49,30615,30616,30618,30620,30622],{"class":51,"line":2902},[49,30617,27802],{"class":62},[49,30619,30421],{"class":1505},[49,30621,29980],{"class":1505},[49,30623,25927],{"class":73},[49,30625,30626,30628,30630],{"class":51,"line":2908},[49,30627,30544],{"class":66},[49,30629,30547],{"class":1505},[49,30631,25927],{"class":73},[49,30633,30634,30636,30639],{"class":51,"line":2929},[49,30635,29983],{"class":73},[49,30637,30638],{"class":1505}," tungchiahui\u002Fros:jazzy-noble",[49,30640,25927],{"class":73},[49,30642,30643,30645],{"class":51,"line":2934},[49,30644,30518],{"class":73},[49,30646,25927],{"class":73},[49,30648,30649],{"class":51,"line":2948},[49,30650,29989],{"class":1505},[49,30652,30653],{"class":51,"line":2953},[49,30654,3654],{"emptyLinePlaceholder":1330},[49,30656,30657,30659,30661,30663],{"class":51,"line":2982},[49,30658,27569],{"class":62},[49,30660,30421],{"class":1505},[49,30662,29980],{"class":1505},[49,30664,25927],{"class":73},[49,30666,30667,30669,30671],{"class":51,"line":2987},[49,30668,30544],{"class":66},[49,30670,30547],{"class":1505},[49,30672,25927],{"class":73},[49,30674,30675,30677,30680],{"class":51,"line":3004},[49,30676,29983],{"class":73},[49,30678,30679],{"class":1505}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[49,30681,25927],{"class":73},[49,30683,30684,30686],{"class":51,"line":3009},[49,30685,30518],{"class":73},[49,30687,25927],{"class":73},[49,30689,30690],{"class":51,"line":3014},[49,30691,29989],{"class":1505},[49,30693,30694],{"class":51,"line":3019},[49,30695,3654],{"emptyLinePlaceholder":1330},[49,30697,30698,30700,30702,30704],{"class":51,"line":3033},[49,30699,27802],{"class":62},[49,30701,30421],{"class":1505},[49,30703,29980],{"class":1505},[49,30705,25927],{"class":73},[49,30707,30708,30710,30712],{"class":51,"line":3038},[49,30709,30544],{"class":66},[49,30711,30547],{"class":1505},[49,30713,25927],{"class":73},[49,30715,30716,30718,30721],{"class":51,"line":3831},[49,30717,29983],{"class":73},[49,30719,30720],{"class":1505}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[49,30722,25927],{"class":73},[49,30724,30725,30727],{"class":51,"line":3845},[49,30726,30518],{"class":73},[49,30728,25927],{"class":73},[49,30730,30731],{"class":51,"line":3853},[49,30732,29989],{"class":1505},[49,30734,30735],{"class":51,"line":3858},[49,30736,3654],{"emptyLinePlaceholder":1330},[49,30738,30739,30741,30743,30745],{"class":51,"line":3864},[49,30740,27569],{"class":62},[49,30742,30421],{"class":1505},[49,30744,29980],{"class":1505},[49,30746,25927],{"class":73},[49,30748,30749,30751,30753],{"class":51,"line":3870},[49,30750,30544],{"class":66},[49,30752,30547],{"class":1505},[49,30754,25927],{"class":73},[49,30756,30757,30759,30762],{"class":51,"line":3875},[49,30758,29983],{"class":73},[49,30760,30761],{"class":1505}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[49,30763,25927],{"class":73},[49,30765,30766,30768],{"class":51,"line":9200},[49,30767,30518],{"class":73},[49,30769,25927],{"class":73},[49,30771,30772],{"class":51,"line":9224},[49,30773,29989],{"class":1505},[49,30775,30776],{"class":51,"line":9229},[49,30777,3654],{"emptyLinePlaceholder":1330},[49,30779,30780,30782,30784,30786],{"class":51,"line":9235},[49,30781,27802],{"class":62},[49,30783,30421],{"class":1505},[49,30785,29980],{"class":1505},[49,30787,25927],{"class":73},[49,30789,30790,30792,30794],{"class":51,"line":9262},[49,30791,30544],{"class":66},[49,30793,30547],{"class":1505},[49,30795,25927],{"class":73},[49,30797,30798,30800,30803],{"class":51,"line":9267},[49,30799,29983],{"class":73},[49,30801,30802],{"class":1505}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[49,30804,25927],{"class":73},[49,30806,30807,30809],{"class":51,"line":9273},[49,30808,30518],{"class":73},[49,30810,25927],{"class":73},[49,30812,30813],{"class":51,"line":9285},[49,30814,29989],{"class":1505},[49,30816,30817],{"class":51,"line":9297},[49,30818,3654],{"emptyLinePlaceholder":1330},[49,30820,30821,30823,30825,30827],{"class":51,"line":9309},[49,30822,27802],{"class":62},[49,30824,30421],{"class":1505},[49,30826,29980],{"class":1505},[49,30828,25927],{"class":73},[49,30830,30831,30833,30835],{"class":51,"line":10968},[49,30832,30544],{"class":66},[49,30834,30547],{"class":1505},[49,30836,25927],{"class":73},[49,30838,30839,30841,30844],{"class":51,"line":10993},[49,30840,29983],{"class":73},[49,30842,30843],{"class":1505}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[49,30845,25927],{"class":73},[49,30847,30848,30850],{"class":51,"line":11016},[49,30849,30518],{"class":73},[49,30851,25927],{"class":73},[49,30853,30854],{"class":51,"line":11040},[49,30855,29989],{"class":1505},[49,30857,30858],{"class":51,"line":11045},[49,30859,3654],{"emptyLinePlaceholder":1330},[49,30861,30862,30864,30866,30868],{"class":51,"line":11050},[49,30863,27569],{"class":62},[49,30865,30421],{"class":1505},[49,30867,29980],{"class":1505},[49,30869,25927],{"class":73},[49,30871,30872,30874,30876],{"class":51,"line":11055},[49,30873,30544],{"class":66},[49,30875,30547],{"class":1505},[49,30877,25927],{"class":73},[49,30879,30880,30882,30885],{"class":51,"line":11064},[49,30881,29983],{"class":73},[49,30883,30884],{"class":1505}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[49,30886,25927],{"class":73},[49,30888,30889,30891],{"class":51,"line":11069},[49,30890,30518],{"class":73},[49,30892,25927],{"class":73},[49,30894,30895],{"class":51,"line":11075},[49,30896,29989],{"class":1505},[49,30898,30899],{"class":51,"line":11096},[49,30900,3654],{"emptyLinePlaceholder":1330},[49,30902,30903,30906,30908,30910],{"class":51,"line":11102},[49,30904,30905],{"class":62},"  docker",[49,30907,30421],{"class":1505},[49,30909,29980],{"class":1505},[49,30911,25927],{"class":73},[49,30913,30914,30916,30918],{"class":51,"line":11116},[49,30915,30544],{"class":66},[49,30917,30547],{"class":1505},[49,30919,25927],{"class":73},[49,30921,30922,30924,30927],{"class":51,"line":11122},[49,30923,29983],{"class":73},[49,30925,30926],{"class":1505}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[49,30928,25927],{"class":73},[49,30930,30931,30933],{"class":51,"line":11149},[49,30932,30518],{"class":73},[49,30934,25927],{"class":73},[49,30936,30937],{"class":51,"line":11158},[49,30938,29989],{"class":1505},[19,30940,30941],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,30943,30944],{},[174,30945],{"alt":44,"src":30946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,30948,30949],{},[174,30950],{"alt":44,"src":30951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[525,30953,30955],{"id":30954},"_623清除构建缓存","6.2.3.清除构建缓存",[39,30957,30959],{"className":25070,"code":30958,"language":25072,"meta":44,"style":44},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[46,30960,30961,30966],{"__ignoreMap":44},[49,30962,30963],{"class":51,"line":52},[49,30964,30965],{"class":55},"# 清理BuildKit构建缓存\n",[49,30967,30968,30970,30973,30976],{"class":51,"line":59},[49,30969,27802],{"class":62},[49,30971,30972],{"class":1505}," builder",[49,30974,30975],{"class":1505}," prune",[49,30977,30978],{"class":73}," -f\n",[19,30980,30981],{},[174,30982],{"alt":44,"src":30983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[183,30985,30987],{"id":30986},"_63补充","6.3.补充",[525,30989,30991],{"id":30990},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30993,30994],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30996,30997],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30999,31000],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[39,31002,31004],{"className":25070,"code":31003,"language":25072,"meta":44,"style":44},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[46,31005,31006,31013],{"__ignoreMap":44},[49,31007,31008,31010],{"class":51,"line":52},[49,31009,28619],{"class":62},[49,31011,31012],{"class":1505}," nginx\n",[49,31014,31015,31017,31020,31023,31025],{"class":51,"line":59},[49,31016,29803],{"class":62},[49,31018,31019],{"class":1505}," echo",[49,31021,31022],{"class":1505}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[49,31024,27471],{"class":109},[49,31026,31027],{"class":1505}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31029,31030],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31032,31033],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[39,31035,31037],{"className":25070,"code":31036,"language":25072,"meta":44,"style":44},"docker build -t nginx:tuling .\n",[46,31038,31039],{"__ignoreMap":44},[49,31040,31041,31043,31045,31047,31050],{"class":51,"line":52},[49,31042,27802],{"class":62},[49,31044,29980],{"class":1505},[49,31046,29983],{"class":73},[49,31048,31049],{"class":1505}," nginx:tuling",[49,31051,29989],{"class":1505},[19,31053,31054],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31056,31057],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[39,31059,31061],{"className":25070,"code":31060,"language":25072,"meta":44,"style":44},"docker run -d -p 92:80 nginx:tuling\n",[46,31062,31063],{"__ignoreMap":44},[49,31064,31065,31067,31069,31072,31074,31077],{"class":51,"line":52},[49,31066,27802],{"class":62},[49,31068,28479],{"class":1505},[49,31070,31071],{"class":73}," -d",[49,31073,30464],{"class":73},[49,31075,31076],{"class":1505}," 92:80",[49,31078,31079],{"class":1505}," nginx:tuling\n",[19,31081,31082,31083],{},"4、访问 ",[1630,31084,31087],{"href":31085,"rel":31086},"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",[25113],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31089,31090],{},[174,31091],{"alt":44,"src":31092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31094,31095],{},[174,31096],{"alt":44,"src":31097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[525,31099,31101],{"id":31100},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31103,31104],{},"只需要知道大体流程即可",[19,31106,31107],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31109,31110],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31112,31113],{},"2、在Dockerfile中添加以下内容",[39,31115,31117],{"className":27340,"code":31116,"language":27342,"meta":44,"style":44},"# 基于哪个镜像\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",[46,31118,31119,31124,31129,31134,31139,31144,31149,31154],{"__ignoreMap":44},[49,31120,31121],{"class":51,"line":52},[49,31122,31123],{},"# 基于哪个镜像\n",[49,31125,31126],{"class":51,"line":59},[49,31127,31128],{},"From java:8\n",[49,31130,31131],{"class":51,"line":70},[49,31132,31133],{},"# 复制文件到容器\n",[49,31135,31136],{"class":51,"line":86},[49,31137,31138],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[49,31140,31141],{"class":51,"line":98},[49,31142,31143],{},"# 声明需要暴露的端口\n",[49,31145,31146],{"class":51,"line":121},[49,31147,31148],{},"EXPOSE 8877\n",[49,31150,31151],{"class":51,"line":134},[49,31152,31153],{},"# 配置容器启动后执行的命令\n",[49,31155,31156],{"class":51,"line":1085},[49,31157,31158],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31160,31161],{},"3、使用docker build命令构建镜像",[39,31163,31165],{"className":25070,"code":31164,"language":25072,"meta":44,"style":44},"docker build -t tulingmall-member:0.0.5 .\n",[46,31166,31167],{"__ignoreMap":44},[49,31168,31169,31171,31173,31175,31178],{"class":51,"line":52},[49,31170,27802],{"class":62},[49,31172,29980],{"class":1505},[49,31174,29983],{"class":73},[49,31176,31177],{"class":1505}," tulingmall-member:0.0.5",[49,31179,29989],{"class":1505},[19,31181,31182],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31184,31185],{},[174,31186],{"alt":44,"src":31187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31189,31190],{},"4、启动镜像，加-d可在后台启动",[39,31192,31194],{"className":25070,"code":31193,"language":25072,"meta":44,"style":44},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[46,31195,31196],{"__ignoreMap":44},[49,31197,31198,31200,31202,31204,31206,31209],{"class":51,"line":52},[49,31199,27802],{"class":62},[49,31201,28479],{"class":1505},[49,31203,31071],{"class":73},[49,31205,30464],{"class":73},[49,31207,31208],{"class":1505}," 8877:8877",[49,31210,31211],{"class":1505}," tulingmall-member:0.0.5\n",[19,31213,31214],{},"加上JVM参数：",[39,31216,31218],{"className":25070,"code":31217,"language":25072,"meta":44,"style":44},"# --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",[46,31219,31220,31225,31240,31250,31259,31266],{"__ignoreMap":44},[49,31221,31222],{"class":51,"line":52},[49,31223,31224],{"class":55},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[49,31226,31227,31229,31231,31234,31236,31238],{"class":51,"line":59},[49,31228,27802],{"class":62},[49,31230,28479],{"class":1505},[49,31232,31233],{"class":73},"  -d",[49,31235,30464],{"class":73},[49,31237,31208],{"class":1505},[49,31239,25927],{"class":73},[49,31241,31242,31244,31247],{"class":51,"line":70},[49,31243,29376],{"class":66},[49,31245,31246],{"class":1505},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[49,31248,31249],{"class":73},"  \\\n",[49,31251,31252,31254,31257],{"class":51,"line":86},[49,31253,29376],{"class":66},[49,31255,31256],{"class":1505},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[49,31258,31249],{"class":73},[49,31260,31261,31264],{"class":51,"line":98},[49,31262,31263],{"class":66},"--cap-add=SYS_PTRACE  ",[49,31265,27424],{"class":73},[49,31267,31268],{"class":51,"line":121},[49,31269,31270],{"class":66},"tulingmall-member:0.0.5\n",[19,31272,31273],{},"5、访问会员服务接口",[19,31275,31276],{},[174,31277],{"alt":44,"src":31278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[525,31280,31282],{"id":31281},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,31284,31285],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,31287,31288,31289],{},"阿里云docker镜像仓库：",[1630,31290,31291],{"href":31291,"rel":31292},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25113],[19,31294,31295],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,31297,31298],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,31300,31301],{},[174,31302],{"alt":44,"src":31303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,31305,31306],{},"要把镜像推送到镜像仓库",[39,31308,31310],{"className":25070,"code":31309,"language":25072,"meta":44,"style":44},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[46,31311,31312],{"__ignoreMap":44},[49,31313,31314,31316,31318,31320],{"class":51,"line":52},[49,31315,27802],{"class":62},[49,31317,30145],{"class":1505},[49,31319,31177],{"class":1505},[49,31321,31322],{"class":1505}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,31324,31325],{},"最后将镜像推送到远程仓库",[39,31327,31329],{"className":25070,"code":31328,"language":25072,"meta":44,"style":44},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[46,31330,31331],{"__ignoreMap":44},[49,31332,31333,31335,31337],{"class":51,"line":52},[49,31334,27802],{"class":62},[49,31336,30264],{"class":1505},[49,31338,31322],{"class":1505},[1305,31340,31341],{},"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":44,"searchDepth":59,"depth":59,"links":31343},[31344,31345,31346],{"id":29731,"depth":70,"text":29732},{"id":29960,"depth":70,"text":29961},{"id":30986,"depth":70,"text":30987},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29723,"description":44},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31353,"title":31354,"body":31355,"description":44,"extension":1328,"meta":31498,"navigation":1330,"path":31499,"seo":31500,"stem":31501,"__hash__":31502},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31356,"toc":31496},[31357,31360,31365,31370,31373,31378,31383,31386,31391,31396,31399,31404,31407,31410,31413,31416,31419,31422,31442,31464,31467,31470,31490,31493],[10,31358,31354],{"id":31359},"_7vscode远程开发",[591,31361,31362],{},[26,31363,31364],{},"插件1：微软Docker工具",[19,31366,31367],{},[174,31368],{"alt":44,"src":31369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31371,31372],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31374,31375],{},[174,31376],{"alt":44,"src":31377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[591,31379,31380],{"start":59},[26,31381,31382],{},"插件2：微软Docker远程开发工具",[19,31384,31385],{},"下面这是远程开发的插件。",[19,31387,31388],{},[174,31389],{"alt":44,"src":31390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31392,31393],{},[174,31394],{"alt":44,"src":31395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31397,31398],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31400,31401],{},[174,31402],{"alt":44,"src":31403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31405,31406],{},"安装完拓展之后，vscode进行链接：",[19,31408,31409],{},"1.按ctrl+shift+p",[19,31411,31412],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31414,31415],{},"3.选择目前运行的容器",[19,31417,31418],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31420,31421],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[39,31423,31425],{"className":25070,"code":31424,"language":25072,"meta":44,"style":44},"docker run -v 主机目录:容器目录 image-name\n",[46,31426,31427],{"__ignoreMap":44},[49,31428,31429,31431,31433,31436,31439],{"class":51,"line":52},[49,31430,27802],{"class":62},[49,31432,28479],{"class":1505},[49,31434,31435],{"class":73}," -v",[49,31437,31438],{"class":1505}," 主机目录:容器目录",[49,31440,31441],{"class":1505}," image-name\n",[39,31443,31445],{"className":25070,"code":31444,"language":25072,"meta":44,"style":44},"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",[46,31446,31447],{"__ignoreMap":44},[49,31448,31449,31451,31453,31456,31458,31461],{"class":51,"line":52},[49,31450,27802],{"class":62},[49,31452,28479],{"class":1505},[49,31454,31455],{"class":73}," -it",[49,31457,31435],{"class":73},[49,31459,31460],{"class":1505}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[49,31462,31463],{"class":1505}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,31465,31466],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,31468,31469],{},"查看挂载情况：",[39,31471,31473],{"className":25070,"code":31472,"language":25072,"meta":44,"style":44},"mount | grep -i project\n",[46,31474,31475],{"__ignoreMap":44},[49,31476,31477,31480,31482,31485,31487],{"class":51,"line":52},[49,31478,31479],{"class":62},"mount",[49,31481,26358],{"class":109},[49,31483,31484],{"class":62}," grep",[49,31486,27679],{"class":73},[49,31488,31489],{"class":1505}," project\n",[19,31491,31492],{},"也可以通过ls来进行查看",[1305,31494,31495],{},"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":44,"searchDepth":59,"depth":59,"links":31497},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31354,"description":44},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31504,"title":31505,"body":31506,"description":1327,"extension":1328,"meta":31510,"navigation":1330,"path":31512,"seo":31513,"stem":31514,"__hash__":31515},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31507,"toc":31508},[],{"title":44,"searchDepth":59,"depth":59,"links":31509},[],{"category":31511},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31505,"description":1327},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31517,"title":31518,"body":31519,"description":1327,"extension":1328,"meta":31523,"navigation":1330,"path":31524,"seo":31525,"stem":31526,"__hash__":31527},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31520,"toc":31521},[],{"title":44,"searchDepth":59,"depth":59,"links":31522},[],{"category":31511},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31518,"description":1327},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31529,"title":31530,"body":31531,"description":1327,"extension":1328,"meta":31824,"navigation":1330,"path":31825,"seo":31826,"stem":31827,"__hash__":31828},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31532,"toc":31822},[31533,31536,31544,31559,31564,31615,31618,31624,31811,31816,31819],[10,31534,31530],{"id":31535},"_1验证深度学习环境",[19,31537,31538,31539],{},"关于环境的安装，看",[1630,31540,31543],{"href":31541,"rel":31542},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25113],"Pytorch-->深度学习",[19,31545,31546,31547,31550,31551,31554,31555,31558],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[46,31548,31549],{},"pytorch-cuda=12.4"," 是一个“ ",[485,31552,31553],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[485,31556,31557],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,31560,31561],{},[174,31562],{"alt":44,"src":31563},"\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",[39,31565,31567],{"className":25070,"code":31566,"language":25072,"meta":44,"style":44},"# 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",[46,31568,31569,31574],{"__ignoreMap":44},[49,31570,31571],{"class":51,"line":52},[49,31572,31573],{"class":55},"# CUDA 12.4\n",[49,31575,31576,31579,31581,31584,31587,31590,31593,31596,31598,31601,31604,31607,31610,31612],{"class":51,"line":59},[49,31577,31578],{"class":62},"conda",[49,31580,25082],{"class":1505},[49,31582,31583],{"class":1505}," pytorch==",[49,31585,31586],{"class":73},"2.5.1",[49,31588,31589],{"class":1505}," torchvision==",[49,31591,31592],{"class":73},"0.20.1",[49,31594,31595],{"class":1505}," torchaudio==",[49,31597,31586],{"class":73},[49,31599,31600],{"class":1505}," pytorch-cuda=",[49,31602,31603],{"class":73},"12.4",[49,31605,31606],{"class":73}," -c",[49,31608,31609],{"class":1505}," pytorch",[49,31611,31606],{"class":73},[49,31613,31614],{"class":1505}," nvidia\n",[19,31616,31617],{},"）：",[19,31619,31620],{},[1630,31621,31622],{"href":31622,"rel":31623},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25113],[39,31625,31629],{"className":31626,"code":31627,"language":31628,"meta":44,"style":44},"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",[46,31630,31631,31636,31644,31649,31659,31675,31680,31690,31727,31734,31746,31762,31767,31777,31789,31799],{"__ignoreMap":44},[49,31632,31633],{"class":51,"line":52},[49,31634,31635],{"class":55},"# 对深度学习环境进行测试\n",[49,31637,31638,31641],{"class":51,"line":59},[49,31639,31640],{"class":109},"import",[49,31642,31643],{"class":66}," torch\n",[49,31645,31646],{"class":51,"line":70},[49,31647,31648],{"class":55},"# 查看cuda是否被激活\n",[49,31650,31651,31654,31656],{"class":51,"line":86},[49,31652,31653],{"class":66},"flag",[49,31655,1448],{"class":109},[49,31657,31658],{"class":66},"torch.cuda.is_available()\n",[49,31660,31661,31664,31666,31669,31672],{"class":51,"line":98},[49,31662,31663],{"class":73},"print",[49,31665,1403],{"class":66},[49,31667,31668],{"class":1505},"\"cuda:\"",[49,31670,31671],{"class":66},", flag)   ",[49,31673,31674],{"class":55},"#返回true的话说明被激活\n",[49,31676,31677],{"class":51,"line":121},[49,31678,31679],{"class":55},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[49,31681,31682,31685,31687],{"class":51,"line":134},[49,31683,31684],{"class":66},"ngpu",[49,31686,1448],{"class":109},[49,31688,31689],{"class":73},"1\n",[49,31691,31692,31695,31697,31700,31703,31705,31708,31711,31714,31716,31718,31720,31722,31725],{"class":51,"line":1085},[49,31693,31694],{"class":66},"device",[49,31696,1448],{"class":109},[49,31698,31699],{"class":66},"torch.device(",[49,31701,31702],{"class":1505},"\"cuda:0\"",[49,31704,2959],{"class":109},[49,31706,31707],{"class":66},"(torch.cuda.is_available() ",[49,31709,31710],{"class":109},"and",[49,31712,31713],{"class":66}," ngpu",[49,31715,2349],{"class":109},[49,31717,80],{"class":73},[49,31719,14966],{"class":66},[49,31721,2956],{"class":109},[49,31723,31724],{"class":1505}," \"cpu\"",[49,31726,1409],{"class":66},[49,31728,31729,31731],{"class":51,"line":2574},[49,31730,31663],{"class":73},[49,31732,31733],{"class":66},"(device)\n",[49,31735,31736,31738,31741,31743],{"class":51,"line":2586},[49,31737,31663],{"class":73},[49,31739,31740],{"class":66},"(torch.cuda.get_device_name(",[49,31742,80],{"class":73},[49,31744,31745],{"class":66},"))\n",[49,31747,31748,31750,31753,31755,31757,31759],{"class":51,"line":2867},[49,31749,31663],{"class":73},[49,31751,31752],{"class":66},"(torch.rand(",[49,31754,1472],{"class":73},[49,31756,1770],{"class":66},[49,31758,1472],{"class":73},[49,31760,31761],{"class":66},").cuda())\n",[49,31763,31764],{"class":51,"line":2872},[49,31765,31766],{"class":55},"# 查看cuda和cudnn的版本\n",[49,31768,31769,31772,31774],{"class":51,"line":2878},[49,31770,31771],{"class":66},"cuda_version",[49,31773,1448],{"class":109},[49,31775,31776],{"class":66},"torch.version.cuda\n",[49,31778,31779,31781,31783,31786],{"class":51,"line":2883},[49,31780,31663],{"class":73},[49,31782,1403],{"class":66},[49,31784,31785],{"class":1505},"\"cuda version\"",[49,31787,31788],{"class":66},",cuda_version)\n",[49,31790,31791,31794,31796],{"class":51,"line":2897},[49,31792,31793],{"class":66},"cudnn_version",[49,31795,1448],{"class":109},[49,31797,31798],{"class":66},"torch.backends.cudnn.version()\n",[49,31800,31801,31803,31805,31808],{"class":51,"line":2902},[49,31802,31663],{"class":73},[49,31804,1403],{"class":66},[49,31806,31807],{"class":1505},"\"cudnn version\"",[49,31809,31810],{"class":66},",cudnn_version)\n",[19,31812,31813],{},[174,31814],{"alt":44,"src":31815},"\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,31817,31818],{},"cuda:0 指的是一块显卡",[1305,31820,31821],{},"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":44,"searchDepth":59,"depth":59,"links":31823},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31530,"description":1327},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31830,"title":31831,"body":31832,"description":1327,"extension":1328,"meta":51636,"navigation":1330,"path":51637,"seo":51638,"stem":51639,"__hash__":51640},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31833,"toc":51630},[31834,31837,31841,31845,31848,31853,31858,31861,31866,31871,31876,31879,31883,31888,31892,31897,31900,31905,31908,31911,31914,31917,31922,31925,31930,31935,31940,31945,31948,31952,31955,31960,32564,32569,32572,32577,32580,32583,33047,33050,33053,33056,33059,35110,35113,35118,35123,35918,35921,35926,36704,36708,38367,38371,39085,39089,39093,39098,39103,39108,39111,39116,39121,39126,39131,39136,39140,39145,40427,40432,40435,40438,40441,40596,40599,40602,41818,41823,42518,42522,42526,42531,42536,42539,42544,42549,42554,42559,42564,42569,42574,42579,42584,42589,42594,42599,42604,42609,42614,42619,42624,42629,42634,42639,42644,42649,42654,42659,42664,42669,42674,42679,42684,42689,42693,42697,42700,44178,44182,45829,45833,46527,46531,46534,46537,47081,47084,47088,47091,48488,48492,48495,49073,50860,50864,50867,51627],[10,31835,31831],{"id":31836},"_2经典神经网络",[183,31838,31840],{"id":31839},"_21lenet与alexnet","2.1.LeNet与AlexNet",[525,31842,31844],{"id":31843},"_211原理介绍","2.1.1.原理介绍",[19,31846,31847],{},"LeNet-5",[591,31849,31850],{},[26,31851,31852],{},"原理",[19,31854,31855],{},[174,31856],{"alt":44,"src":31857},"\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,31859,31860],{},"B是batch批次；C是channel通道",[591,31862,31863],{"start":59},[26,31864,31865],{},"网络参数详细",[19,31867,31868],{},[174,31869],{"alt":44,"src":31870},"\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,31872,31873],{},[174,31874],{"alt":44,"src":31875},"\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,31877,31878],{},"AlexNet",[591,31880,31881],{},[26,31882,31852],{},[19,31884,31885],{},[174,31886],{"alt":44,"src":31887},"\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",[591,31889,31890],{"start":59},[26,31891,31865],{},[19,31893,31894],{},[174,31895],{"alt":44,"src":31896},"\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,31898,31899],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31901,31902],{},[174,31903],{"alt":44,"src":31904},"\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,31906,31907],{},"数据处理中的图像增强操作:",[19,31909,31910],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31912,31913],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31915,31916],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,31918,31919],{},[174,31920],{"alt":44,"src":31921},"\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,31923,31924],{},"提升网络精确度的方法：LRN正则化",[19,31926,31927],{},[174,31928],{"alt":44,"src":31929},"\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,31931,31932],{},[174,31933],{"alt":44,"src":31934},"\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",[591,31936,31937],{"start":70},[26,31938,31939],{},"AlexNet的总结",[19,31941,31942],{},[174,31943],{"alt":44,"src":31944},"\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,31946,31947],{},"比LeNet模型要深一丢丢",[525,31949,31951],{"id":31950},"_212代码实现","2.1.2.代码实现",[19,31953,31954],{},"（1）LeNet",[591,31956,31957],{},[26,31958,31959],{},"模型搭建",[39,31961,31963],{"className":31626,"code":31962,"language":31628,"meta":44,"style":44},"# 导入库\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",[46,31964,31965,31970,31976,31981,31994,31999,32011,32015,32035,32040,32045,32056,32061,32080,32084,32089,32138,32150,32155,32184,32219,32246,32251,32263,32268,32288,32307,32326,32330,32335,32345,32362,32373,32388,32399,32410,32425,32440,32451,32458,32462,32476,32481,32504,32509,32514,32519,32523,32528,32533,32543],{"__ignoreMap":44},[49,31966,31967],{"class":51,"line":52},[49,31968,31969],{"class":55},"# 导入库\n",[49,31971,31972,31974],{"class":51,"line":59},[49,31973,31640],{"class":109},[49,31975,31643],{"class":66},[49,31977,31978],{"class":51,"line":70},[49,31979,31980],{"class":55},"# 导入神经网络层\n",[49,31982,31983,31986,31989,31991],{"class":51,"line":86},[49,31984,31985],{"class":109},"from",[49,31987,31988],{"class":66}," torch ",[49,31990,31640],{"class":109},[49,31992,31993],{"class":66}," nn\n",[49,31995,31996],{"class":51,"line":98},[49,31997,31998],{"class":55},"# 导入展示神经网络参数的包\n",[49,32000,32001,32003,32006,32008],{"class":51,"line":121},[49,32002,31985],{"class":109},[49,32004,32005],{"class":66}," torchsummary ",[49,32007,31640],{"class":109},[49,32009,32010],{"class":66}," summary\n",[49,32012,32013],{"class":51,"line":134},[49,32014,3654],{"emptyLinePlaceholder":1330},[49,32016,32017,32019,32022,32024,32027,32029,32032],{"class":51,"line":1085},[49,32018,15945],{"class":109},[49,32020,32021],{"class":62}," LeNet",[49,32023,1403],{"class":66},[49,32025,32026],{"class":62},"nn",[49,32028,1949],{"class":66},[49,32030,32031],{"class":62},"Module",[49,32033,32034],{"class":66},"):\n",[49,32036,32037],{"class":51,"line":2574},[49,32038,32039],{"class":55},"    # 模型初始化:\n",[49,32041,32042],{"class":51,"line":2586},[49,32043,32044],{"class":55},"    # 定义一些网络层和激活函数\n",[49,32046,32047,32050,32053],{"class":51,"line":2867},[49,32048,32049],{"class":109},"    def",[49,32051,32052],{"class":73}," __init__",[49,32054,32055],{"class":66},"(self):\n",[49,32057,32058],{"class":51,"line":2872},[49,32059,32060],{"class":55},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[49,32062,32063,32066,32069,32072,32075,32078],{"class":51,"line":2878},[49,32064,32065],{"class":73},"        super",[49,32067,32068],{"class":66},"(LeNet,",[49,32070,32071],{"class":73},"self",[49,32073,32074],{"class":66},").",[49,32076,32077],{"class":73},"__init__",[49,32079,3230],{"class":66},[49,32081,32082],{"class":51,"line":2883},[49,32083,3654],{"emptyLinePlaceholder":1330},[49,32085,32086],{"class":51,"line":2897},[49,32087,32088],{"class":55},"        # 定义网络层\n",[49,32090,32091,32094,32097,32099,32102,32105,32107,32109,32111,32114,32116,32118,32120,32123,32125,32127,32129,32132,32134,32136],{"class":51,"line":2902},[49,32092,32093],{"class":73},"        self",[49,32095,32096],{"class":66},".c1",[49,32098,1448],{"class":109},[49,32100,32101],{"class":66},"nn.Conv2d(",[49,32103,32104],{"class":6468},"in_channels",[49,32106,1448],{"class":109},[49,32108,159],{"class":73},[49,32110,1770],{"class":66},[49,32112,32113],{"class":6468},"out_channels",[49,32115,1448],{"class":109},[49,32117,1736],{"class":73},[49,32119,1770],{"class":66},[49,32121,32122],{"class":6468},"kernel_size",[49,32124,1448],{"class":109},[49,32126,1711],{"class":73},[49,32128,1770],{"class":66},[49,32130,32131],{"class":6468},"padding",[49,32133,1448],{"class":109},[49,32135,1478],{"class":73},[49,32137,1409],{"class":66},[49,32139,32140,32142,32145,32147],{"class":51,"line":2908},[49,32141,32093],{"class":73},[49,32143,32144],{"class":66},".sig",[49,32146,1448],{"class":109},[49,32148,32149],{"class":66},"nn.Sigmoid()\n",[49,32151,32152],{"class":51,"line":2929},[49,32153,32154],{"class":55},"        # 定义池化\n",[49,32156,32157,32159,32162,32164,32167,32169,32171,32173,32175,32178,32180,32182],{"class":51,"line":2934},[49,32158,32093],{"class":73},[49,32160,32161],{"class":66},".s2",[49,32163,1448],{"class":109},[49,32165,32166],{"class":66},"nn.AvgPool2d(",[49,32168,32122],{"class":6468},[49,32170,1448],{"class":109},[49,32172,1478],{"class":73},[49,32174,1770],{"class":66},[49,32176,32177],{"class":6468},"stride",[49,32179,1448],{"class":109},[49,32181,1478],{"class":73},[49,32183,1409],{"class":66},[49,32185,32186,32188,32191,32193,32195,32197,32199,32201,32203,32205,32207,32209,32211,32213,32215,32217],{"class":51,"line":2948},[49,32187,32093],{"class":73},[49,32189,32190],{"class":66},".c3",[49,32192,1448],{"class":109},[49,32194,32101],{"class":66},[49,32196,32104],{"class":6468},[49,32198,1448],{"class":109},[49,32200,1736],{"class":73},[49,32202,1770],{"class":66},[49,32204,32113],{"class":6468},[49,32206,1448],{"class":109},[49,32208,1992],{"class":73},[49,32210,1770],{"class":66},[49,32212,32122],{"class":6468},[49,32214,1448],{"class":109},[49,32216,1711],{"class":73},[49,32218,1409],{"class":66},[49,32220,32221,32223,32226,32228,32230,32232,32234,32236,32238,32240,32242,32244],{"class":51,"line":2953},[49,32222,32093],{"class":73},[49,32224,32225],{"class":66},".s4",[49,32227,1448],{"class":109},[49,32229,32166],{"class":66},[49,32231,32122],{"class":6468},[49,32233,1448],{"class":109},[49,32235,1478],{"class":73},[49,32237,1770],{"class":66},[49,32239,32177],{"class":6468},[49,32241,1448],{"class":109},[49,32243,1478],{"class":73},[49,32245,1409],{"class":66},[49,32247,32248],{"class":51,"line":2982},[49,32249,32250],{"class":55},"        # 定义平展层\n",[49,32252,32253,32255,32258,32260],{"class":51,"line":2987},[49,32254,32093],{"class":73},[49,32256,32257],{"class":66},".flatten",[49,32259,1448],{"class":109},[49,32261,32262],{"class":66},"nn.Flatten()\n",[49,32264,32265],{"class":51,"line":3004},[49,32266,32267],{"class":55},"        # 定义全连接层\n",[49,32269,32270,32272,32275,32277,32280,32282,32284,32286],{"class":51,"line":3009},[49,32271,32093],{"class":73},[49,32273,32274],{"class":66},".f5",[49,32276,1448],{"class":109},[49,32278,32279],{"class":66},"nn.Linear(",[49,32281,5241],{"class":73},[49,32283,1770],{"class":66},[49,32285,2207],{"class":73},[49,32287,1409],{"class":66},[49,32289,32290,32292,32295,32297,32299,32301,32303,32305],{"class":51,"line":3014},[49,32291,32093],{"class":73},[49,32293,32294],{"class":66},".f6",[49,32296,1448],{"class":109},[49,32298,32279],{"class":66},[49,32300,2207],{"class":73},[49,32302,1770],{"class":66},[49,32304,2101],{"class":73},[49,32306,1409],{"class":66},[49,32308,32309,32311,32314,32316,32318,32320,32322,32324],{"class":51,"line":3019},[49,32310,32093],{"class":73},[49,32312,32313],{"class":66},".f7",[49,32315,1448],{"class":109},[49,32317,32279],{"class":66},[49,32319,2101],{"class":73},[49,32321,1770],{"class":66},[49,32323,106],{"class":73},[49,32325,1409],{"class":66},[49,32327,32328],{"class":51,"line":3033},[49,32329,3654],{"emptyLinePlaceholder":1330},[49,32331,32332],{"class":51,"line":3038},[49,32333,32334],{"class":55},"    # 写工具->写前向传播\n",[49,32336,32337,32339,32342],{"class":51,"line":3831},[49,32338,32049],{"class":109},[49,32340,32341],{"class":62}," forward",[49,32343,32344],{"class":66},"(self,x):\n",[49,32346,32347,32350,32352,32354,32357,32359],{"class":51,"line":3845},[49,32348,32349],{"class":66},"        x",[49,32351,1448],{"class":109},[49,32353,32071],{"class":73},[49,32355,32356],{"class":66},".sig(",[49,32358,32071],{"class":73},[49,32360,32361],{"class":66},".c1(x))\n",[49,32363,32364,32366,32368,32370],{"class":51,"line":3853},[49,32365,32349],{"class":66},[49,32367,1448],{"class":109},[49,32369,32071],{"class":73},[49,32371,32372],{"class":66},".s2(x)\n",[49,32374,32375,32377,32379,32381,32383,32385],{"class":51,"line":3858},[49,32376,32349],{"class":66},[49,32378,1448],{"class":109},[49,32380,32071],{"class":73},[49,32382,32356],{"class":66},[49,32384,32071],{"class":73},[49,32386,32387],{"class":66},".c3(x))\n",[49,32389,32390,32392,32394,32396],{"class":51,"line":3864},[49,32391,32349],{"class":66},[49,32393,1448],{"class":109},[49,32395,32071],{"class":73},[49,32397,32398],{"class":66},".s4(x)\n",[49,32400,32401,32403,32405,32407],{"class":51,"line":3870},[49,32402,32349],{"class":66},[49,32404,1448],{"class":109},[49,32406,32071],{"class":73},[49,32408,32409],{"class":66},".flatten(x)\n",[49,32411,32412,32414,32416,32418,32420,32422],{"class":51,"line":3875},[49,32413,32349],{"class":66},[49,32415,1448],{"class":109},[49,32417,32071],{"class":73},[49,32419,32356],{"class":66},[49,32421,32071],{"class":73},[49,32423,32424],{"class":66},".f5(x))\n",[49,32426,32427,32429,32431,32433,32435,32437],{"class":51,"line":9200},[49,32428,32349],{"class":66},[49,32430,1448],{"class":109},[49,32432,32071],{"class":73},[49,32434,32356],{"class":66},[49,32436,32071],{"class":73},[49,32438,32439],{"class":66},".f6(x))\n",[49,32441,32442,32444,32446,32448],{"class":51,"line":9224},[49,32443,32349],{"class":66},[49,32445,1448],{"class":109},[49,32447,32071],{"class":73},[49,32449,32450],{"class":66},".f7(x)\n",[49,32452,32453,32455],{"class":51,"line":9229},[49,32454,16003],{"class":109},[49,32456,32457],{"class":66}," x\n",[49,32459,32460],{"class":51,"line":9235},[49,32461,3654],{"emptyLinePlaceholder":1330},[49,32463,32464,32466,32469,32471,32474],{"class":51,"line":9262},[49,32465,2787],{"class":109},[49,32467,32468],{"class":73}," __name__",[49,32470,4203],{"class":109},[49,32472,32473],{"class":1505},"\"__main__\"",[49,32475,4993],{"class":66},[49,32477,32478],{"class":51,"line":9267},[49,32479,32480],{"class":55},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[49,32482,32483,32486,32488,32490,32493,32495,32498,32500,32502],{"class":51,"line":9273},[49,32484,32485],{"class":66},"    device",[49,32487,1448],{"class":109},[49,32489,31699],{"class":66},[49,32491,32492],{"class":1505},"\"cuda\"",[49,32494,2959],{"class":109},[49,32496,32497],{"class":66}," torch.cuda.is_available() ",[49,32499,2956],{"class":109},[49,32501,31724],{"class":1505},[49,32503,1409],{"class":66},[49,32505,32506],{"class":51,"line":9285},[49,32507,32508],{"class":55},"    # 如果就是想指定用cpu用下方代码:\n",[49,32510,32511],{"class":51,"line":9297},[49,32512,32513],{"class":55},"    # device=\"cpu\"\n",[49,32515,32516],{"class":51,"line":9309},[49,32517,32518],{"class":55},"    # print(device)\n",[49,32520,32521],{"class":51,"line":10968},[49,32522,3654],{"emptyLinePlaceholder":1330},[49,32524,32525],{"class":51,"line":10993},[49,32526,32527],{"class":55},"    # 实例化模型\n",[49,32529,32530],{"class":51,"line":11016},[49,32531,32532],{"class":55},"    # 将模型放到设备中去运行\n",[49,32534,32535,32538,32540],{"class":51,"line":11040},[49,32536,32537],{"class":66},"    model",[49,32539,1448],{"class":109},[49,32541,32542],{"class":66},"LeNet().to(device)\n",[49,32544,32545,32548,32551,32553,32555,32557,32559,32561],{"class":51,"line":11045},[49,32546,32547],{"class":73},"    print",[49,32549,32550],{"class":66},"(summary(model,(",[49,32552,159],{"class":73},[49,32554,1770],{"class":66},[49,32556,2291],{"class":73},[49,32558,1770],{"class":66},[49,32560,2291],{"class":73},[49,32562,32563],{"class":66},")))\n",[19,32565,32566],{},[174,32567],{"alt":44,"src":32568},"\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,32570,32571],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[591,32573,32574],{"start":59},[26,32575,32576],{},"训练",[19,32578,32579],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,32581,32582],{},"在训练之前可以将数据展示看一下",[39,32584,32586],{"className":31626,"code":32585,"language":31628,"meta":44,"style":44},"# 建立画图的函数，用于展示数据\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",[46,32587,32588,32593,32598,32610,32622,32635,32640,32652,32657,32669,32674,32686,32690,32694,32715,32727,32732,32753,32764,32768,32773,32791,32802,32807,32818,32823,32834,32838,32843,32858,32871,32876,32881,32894,32907,32920,32925,32929,32934,32954,32971,32991,33004,33017,33027,33042],{"__ignoreMap":44},[49,32589,32590],{"class":51,"line":52},[49,32591,32592],{"class":55},"# 建立画图的函数，用于展示数据\n",[49,32594,32595],{"class":51,"line":59},[49,32596,32597],{"class":55},"# torchvision中包含很多内置的数据集\n",[49,32599,32600,32602,32605,32607],{"class":51,"line":70},[49,32601,31985],{"class":109},[49,32603,32604],{"class":66}," sklearn.externals.array_api_compat.torch ",[49,32606,31640],{"class":109},[49,32608,32609],{"class":66}," squeeze\n",[49,32611,32612,32614,32617,32619],{"class":51,"line":86},[49,32613,31985],{"class":109},[49,32615,32616],{"class":66}," torchvision.datasets ",[49,32618,31640],{"class":109},[49,32620,32621],{"class":66}," FashionMNIST\n",[49,32623,32624,32626,32629,32632],{"class":51,"line":98},[49,32625,31640],{"class":109},[49,32627,32628],{"class":66}," numpy ",[49,32630,32631],{"class":109},"as",[49,32633,32634],{"class":66}," np\n",[49,32636,32637],{"class":51,"line":121},[49,32638,32639],{"class":55},"# 引入处理数据集的包\n",[49,32641,32642,32644,32647,32649],{"class":51,"line":134},[49,32643,31985],{"class":109},[49,32645,32646],{"class":66}," torchvision ",[49,32648,31640],{"class":109},[49,32650,32651],{"class":66}," transforms\n",[49,32653,32654],{"class":51,"line":1085},[49,32655,32656],{"class":55},"# 从torch库中引入数据处理的包\n",[49,32658,32659,32661,32664,32666],{"class":51,"line":2574},[49,32660,31640],{"class":109},[49,32662,32663],{"class":66}," torch.utils.data ",[49,32665,32631],{"class":109},[49,32667,32668],{"class":66}," Data\n",[49,32670,32671],{"class":51,"line":2586},[49,32672,32673],{"class":55},"# 导入画图的库\n",[49,32675,32676,32678,32681,32683],{"class":51,"line":2867},[49,32677,31640],{"class":109},[49,32679,32680],{"class":66}," matplotlib.pyplot ",[49,32682,32631],{"class":109},[49,32684,32685],{"class":66}," plt\n",[49,32687,32688],{"class":51,"line":2872},[49,32689,3654],{"emptyLinePlaceholder":1330},[49,32691,32692],{"class":51,"line":2878},[49,32693,3654],{"emptyLinePlaceholder":1330},[49,32695,32696,32699,32701,32704,32707,32709,32712],{"class":51,"line":2883},[49,32697,32698],{"class":66},"train_data",[49,32700,1448],{"class":109},[49,32702,32703],{"class":66},"FashionMNIST(",[49,32705,32706],{"class":6468},"root",[49,32708,1448],{"class":109},[49,32710,32711],{"class":1505},"'.\u002Fdata'",[49,32713,32714],{"class":66},",\n",[49,32716,32717,32720,32722,32725],{"class":51,"line":2897},[49,32718,32719],{"class":6468},"                        train",[49,32721,1448],{"class":109},[49,32723,32724],{"class":73},"True",[49,32726,32714],{"class":66},[49,32728,32729],{"class":51,"line":2902},[49,32730,32731],{"class":55},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[49,32733,32734,32737,32739,32742,32745,32747,32750],{"class":51,"line":2908},[49,32735,32736],{"class":6468},"                        transform",[49,32738,1448],{"class":109},[49,32740,32741],{"class":66},"transforms.Compose([transforms.Resize(",[49,32743,32744],{"class":6468},"size",[49,32746,1448],{"class":109},[49,32748,32749],{"class":73},"224",[49,32751,32752],{"class":66},"),transforms.ToTensor()]),\n",[49,32754,32755,32758,32760,32762],{"class":51,"line":2929},[49,32756,32757],{"class":6468},"                        download",[49,32759,1448],{"class":109},[49,32761,32724],{"class":73},[49,32763,1409],{"class":66},[49,32765,32766],{"class":51,"line":2934},[49,32767,3654],{"emptyLinePlaceholder":1330},[49,32769,32770],{"class":51,"line":2948},[49,32771,32772],{"class":55},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[49,32774,32775,32778,32780,32783,32786,32788],{"class":51,"line":2953},[49,32776,32777],{"class":66},"train_loader",[49,32779,1448],{"class":109},[49,32781,32782],{"class":66},"Data.DataLoader(",[49,32784,32785],{"class":6468},"dataset",[49,32787,1448],{"class":109},[49,32789,32790],{"class":66},"train_data,\n",[49,32792,32793,32796,32798,32800],{"class":51,"line":2982},[49,32794,32795],{"class":6468},"                             batch_size",[49,32797,1448],{"class":109},[49,32799,1596],{"class":73},[49,32801,32714],{"class":66},[49,32803,32804],{"class":51,"line":2987},[49,32805,32806],{"class":55},"                             # 数据是否打乱\n",[49,32808,32809,32812,32814,32816],{"class":51,"line":3004},[49,32810,32811],{"class":6468},"                             shuffle",[49,32813,1448],{"class":109},[49,32815,32724],{"class":73},[49,32817,32714],{"class":66},[49,32819,32820],{"class":51,"line":3009},[49,32821,32822],{"class":55},"                             # 规定加载数据的进程\n",[49,32824,32825,32828,32830,32832],{"class":51,"line":3014},[49,32826,32827],{"class":6468},"                             num_workers",[49,32829,1448],{"class":109},[49,32831,80],{"class":73},[49,32833,1409],{"class":66},[49,32835,32836],{"class":51,"line":3019},[49,32837,3654],{"emptyLinePlaceholder":1330},[49,32839,32840],{"class":51,"line":3033},[49,32841,32842],{"class":55},"# 获得一个batch的数据\n",[49,32844,32845,32847,32850,32852,32855],{"class":51,"line":3038},[49,32846,4279],{"class":109},[49,32848,32849],{"class":66}," step,(b_x,b_y) ",[49,32851,27292],{"class":109},[49,32853,32854],{"class":73}," enumerate",[49,32856,32857],{"class":66},"(train_loader):\n",[49,32859,32860,32862,32865,32867,32869],{"class":51,"line":3831},[49,32861,4355],{"class":109},[49,32863,32864],{"class":66}," step ",[49,32866,2349],{"class":109},[49,32868,5347],{"class":73},[49,32870,4993],{"class":66},[49,32872,32873],{"class":51,"line":3845},[49,32874,32875],{"class":109},"        break\n",[49,32877,32878],{"class":51,"line":3853},[49,32879,32880],{"class":55},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[49,32882,32883,32886,32888,32891],{"class":51,"line":3858},[49,32884,32885],{"class":66},"batch_x",[49,32887,1448],{"class":109},[49,32889,32890],{"class":66},"b_x.squeeze().numpy()  ",[49,32892,32893],{"class":55},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[49,32895,32896,32899,32901,32904],{"class":51,"line":3864},[49,32897,32898],{"class":66},"batch_y",[49,32900,1448],{"class":109},[49,32902,32903],{"class":66},"b_y.numpy()   ",[49,32905,32906],{"class":55},"#将张量转换成功numpy数组\n",[49,32908,32909,32912,32914,32917],{"class":51,"line":3870},[49,32910,32911],{"class":66},"class_label",[49,32913,1448],{"class":109},[49,32915,32916],{"class":66},"train_data.classes  ",[49,32918,32919],{"class":55},"#训练集标签\n",[49,32921,32922],{"class":51,"line":3875},[49,32923,32924],{"class":55},"# print(class_label)\n",[49,32926,32927],{"class":51,"line":9200},[49,32928,3654],{"emptyLinePlaceholder":1330},[49,32930,32931],{"class":51,"line":9224},[49,32932,32933],{"class":55},"# 可视化一个batch的图像\n",[49,32935,32936,32939,32942,32944,32946,32948,32950,32952],{"class":51,"line":9229},[49,32937,32938],{"class":66},"plt.figure(",[49,32940,32941],{"class":6468},"figsize",[49,32943,1448],{"class":109},[49,32945,1403],{"class":66},[49,32947,1889],{"class":73},[49,32949,1770],{"class":66},[49,32951,1711],{"class":73},[49,32953,31745],{"class":66},[49,32955,32956,32958,32961,32963,32966,32968],{"class":51,"line":9235},[49,32957,4279],{"class":109},[49,32959,32960],{"class":66}," ii ",[49,32962,27292],{"class":109},[49,32964,32965],{"class":66}," np.arange(",[49,32967,8610],{"class":73},[49,32969,32970],{"class":66},"(batch_y)):\n",[49,32972,32973,32976,32978,32980,32982,32985,32987,32989],{"class":51,"line":9262},[49,32974,32975],{"class":66},"    plt.subplot(",[49,32977,1685],{"class":73},[49,32979,1770],{"class":66},[49,32981,1992],{"class":73},[49,32983,32984],{"class":66},",ii ",[49,32986,1872],{"class":109},[49,32988,26367],{"class":73},[49,32990,1409],{"class":66},[49,32992,32993,32996,32999,33001],{"class":51,"line":9267},[49,32994,32995],{"class":66},"    plt.imshow(batch_x[ii,:,:],",[49,32997,32998],{"class":6468},"cmap",[49,33000,1448],{"class":109},[49,33002,33003],{"class":66},"plt.cm.gray)\n",[49,33005,33006,33009,33011,33013,33015],{"class":51,"line":9273},[49,33007,33008],{"class":66},"    plt.title(class_label[batch_y[ii]],",[49,33010,32744],{"class":6468},[49,33012,1448],{"class":109},[49,33014,106],{"class":73},[49,33016,1409],{"class":66},[49,33018,33019,33022,33025],{"class":51,"line":9285},[49,33020,33021],{"class":66},"    plt.axis(",[49,33023,33024],{"class":1505},"\"off\"",[49,33026,1409],{"class":66},[49,33028,33029,33032,33035,33037,33040],{"class":51,"line":9297},[49,33030,33031],{"class":66},"    plt.subplots_adjust(",[49,33033,33034],{"class":6468},"wspace",[49,33036,1448],{"class":109},[49,33038,33039],{"class":73},"0.05",[49,33041,1409],{"class":66},[49,33043,33044],{"class":51,"line":9309},[49,33045,33046],{"class":66},"plt.show()\n",[19,33048,33049],{},"用matplotlib进行展示的过程可以后续再补",[19,33051,33052],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33054,33055],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33057,33058],{},"模型训练：",[39,33060,33062],{"className":31626,"code":33061,"language":31628,"meta":44,"style":44},"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",[46,33063,33064,33071,33078,33082,33094,33100,33111,33121,33131,33141,33151,33156,33168,33178,33182,33186,33191,33202,33215,33226,33243,33254,33293,33309,33321,33332,33337,33348,33364,33375,33386,33397,33404,33408,33413,33418,33422,33427,33437,33458,33462,33466,33471,33476,33481,33501,33505,33510,33520,33524,33529,33538,33543,33548,33553,33563,33567,33571,33576,33581,33591,33596,33606,33611,33620,33625,33634,33639,33648,33652,33657,33667,33671,33675,33680,33695,33723,33738,33742,33747,33752,33761,33766,33775,33780,33789,33794,33803,33808,33817,33822,33831,33836,33849,33854,33864,33869,33879,33885,33891,33897,33903,33914,33920,33940,33946,33957,33963,33969,33975,33981,33987,33993,33999,34019,34025,34041,34047,34061,34067,34082,34088,34097,34103,34112,34118,34124,34133,34139,34150,34156,34175,34181,34192,34198,34218,34234,34240,34254,34260,34266,34277,34283,34289,34299,34305,34316,34322,34332,34337,34343,34392,34439,34444,34450,34469,34475,34495,34501,34507,34517,34522,34528,34544,34589,34595,34601,34607,34618,34624,34630,34636,34654,34668,34677,34686,34695,34704,34710,34716,34724,34729,34735,34746,34752,34772,34778,34784,34790,34807,34813,34819,34825,34831,34837,34864,34888,34894,34900,34906,34917,34928,34934,34951,34974,34997,35003,35008,35017,35027,35033,35038,35044,35057,35063,35074,35085,35104],{"__ignoreMap":44},[49,33065,33066,33068],{"class":51,"line":52},[49,33067,31640],{"class":109},[49,33069,33070],{"class":66}," copy\n",[49,33072,33073,33075],{"class":51,"line":59},[49,33074,31640],{"class":109},[49,33076,33077],{"class":66}," time\n",[49,33079,33080],{"class":51,"line":70},[49,33081,3654],{"emptyLinePlaceholder":1330},[49,33083,33084,33086,33089,33091],{"class":51,"line":86},[49,33085,31640],{"class":109},[49,33087,33088],{"class":66}," pandas ",[49,33090,32631],{"class":109},[49,33092,33093],{"class":66}," pd\n",[49,33095,33096,33098],{"class":51,"line":98},[49,33097,31640],{"class":109},[49,33099,31643],{"class":66},[49,33101,33102,33104,33106,33108],{"class":51,"line":121},[49,33103,31985],{"class":109},[49,33105,32663],{"class":66},[49,33107,31640],{"class":109},[49,33109,33110],{"class":66}," Dataset\n",[49,33112,33113,33115,33117,33119],{"class":51,"line":134},[49,33114,31985],{"class":109},[49,33116,32616],{"class":66},[49,33118,31640],{"class":109},[49,33120,32621],{"class":66},[49,33122,33123,33125,33127,33129],{"class":51,"line":1085},[49,33124,31985],{"class":109},[49,33126,32646],{"class":66},[49,33128,31640],{"class":109},[49,33130,32651],{"class":66},[49,33132,33133,33135,33137,33139],{"class":51,"line":2574},[49,33134,31640],{"class":109},[49,33136,32663],{"class":66},[49,33138,32631],{"class":109},[49,33140,32668],{"class":66},[49,33142,33143,33145,33147,33149],{"class":51,"line":2586},[49,33144,31640],{"class":109},[49,33146,32680],{"class":66},[49,33148,32631],{"class":109},[49,33150,32685],{"class":66},[49,33152,33153],{"class":51,"line":2867},[49,33154,33155],{"class":55},"# 导入模型\n",[49,33157,33158,33160,33163,33165],{"class":51,"line":2872},[49,33159,31985],{"class":109},[49,33161,33162],{"class":66}," model ",[49,33164,31640],{"class":109},[49,33166,33167],{"class":66}," LeNet\n",[49,33169,33170,33172,33174,33176],{"class":51,"line":2878},[49,33171,31985],{"class":109},[49,33173,31988],{"class":66},[49,33175,31640],{"class":109},[49,33177,31993],{"class":66},[49,33179,33180],{"class":51,"line":2883},[49,33181,3654],{"emptyLinePlaceholder":1330},[49,33183,33184],{"class":51,"line":2897},[49,33185,3654],{"emptyLinePlaceholder":1330},[49,33187,33188],{"class":51,"line":2902},[49,33189,33190],{"class":55},"# 处理训练集与验证集函数--->划分数据集\n",[49,33192,33193,33196,33199],{"class":51,"line":2908},[49,33194,33195],{"class":109},"def",[49,33197,33198],{"class":62}," train_val_data_process",[49,33200,33201],{"class":66},"():\n",[49,33203,33204,33207,33209,33211,33213],{"class":51,"line":2929},[49,33205,33206],{"class":66},"    train_data",[49,33208,1448],{"class":109},[49,33210,32703],{"class":66},[49,33212,32711],{"class":1505},[49,33214,32714],{"class":66},[49,33216,33217,33220,33222,33224],{"class":51,"line":2934},[49,33218,33219],{"class":6468},"                            train",[49,33221,1448],{"class":109},[49,33223,32724],{"class":73},[49,33225,32714],{"class":66},[49,33227,33228,33231,33233,33235,33237,33239,33241],{"class":51,"line":2948},[49,33229,33230],{"class":6468},"                            transform",[49,33232,1448],{"class":109},[49,33234,32741],{"class":66},[49,33236,32744],{"class":6468},[49,33238,1448],{"class":109},[49,33240,2291],{"class":73},[49,33242,32752],{"class":66},[49,33244,33245,33248,33250,33252],{"class":51,"line":2953},[49,33246,33247],{"class":6468},"                            download",[49,33249,1448],{"class":109},[49,33251,32724],{"class":73},[49,33253,1409],{"class":66},[49,33255,33256,33259,33261,33264,33267,33269,33272,33274,33276,33279,33281,33283,33286,33288,33290],{"class":51,"line":2982},[49,33257,33258],{"class":66},"    train_data,val_data",[49,33260,1448],{"class":109},[49,33262,33263],{"class":66},"Data.random_split(train_data,[",[49,33265,33266],{"class":73},"round",[49,33268,1403],{"class":66},[49,33270,33271],{"class":73},"0.8",[49,33273,1846],{"class":109},[49,33275,8610],{"class":73},[49,33277,33278],{"class":66},"(train_data)),",[49,33280,33266],{"class":73},[49,33282,1403],{"class":66},[49,33284,33285],{"class":73},"0.2",[49,33287,1846],{"class":109},[49,33289,8610],{"class":73},[49,33291,33292],{"class":66},"(train_data))])\n",[49,33294,33295,33298,33300,33303,33305,33307],{"class":51,"line":2987},[49,33296,33297],{"class":66},"    train_dataloader ",[49,33299,1448],{"class":109},[49,33301,33302],{"class":66}," Data.DataLoader(",[49,33304,32785],{"class":6468},[49,33306,1448],{"class":109},[49,33308,32790],{"class":66},[49,33310,33311,33314,33316,33319],{"class":51,"line":3004},[49,33312,33313],{"class":6468},"                                       batch_size",[49,33315,1448],{"class":109},[49,33317,33318],{"class":73},"128",[49,33320,32714],{"class":66},[49,33322,33323,33326,33328,33330],{"class":51,"line":3009},[49,33324,33325],{"class":6468},"                                       shuffle",[49,33327,1448],{"class":109},[49,33329,32724],{"class":73},[49,33331,32714],{"class":66},[49,33333,33334],{"class":51,"line":3014},[49,33335,33336],{"class":55},"                                       # 规定8个进程\n",[49,33338,33339,33342,33344,33346],{"class":51,"line":3019},[49,33340,33341],{"class":6468},"                                       num_workers",[49,33343,1448],{"class":109},[49,33345,1787],{"class":73},[49,33347,1409],{"class":66},[49,33349,33350,33353,33355,33357,33359,33361],{"class":51,"line":3033},[49,33351,33352],{"class":66},"    val_dataloader",[49,33354,1448],{"class":109},[49,33356,32782],{"class":66},[49,33358,32785],{"class":6468},[49,33360,1448],{"class":109},[49,33362,33363],{"class":66},"val_data,\n",[49,33365,33366,33369,33371,33373],{"class":51,"line":3038},[49,33367,33368],{"class":6468},"                                   batch_size",[49,33370,1448],{"class":109},[49,33372,33318],{"class":73},[49,33374,32714],{"class":66},[49,33376,33377,33380,33382,33384],{"class":51,"line":3831},[49,33378,33379],{"class":6468},"                                   shuffle",[49,33381,1448],{"class":109},[49,33383,32724],{"class":73},[49,33385,32714],{"class":66},[49,33387,33388,33391,33393,33395],{"class":51,"line":3845},[49,33389,33390],{"class":6468},"                                   num_workers",[49,33392,1448],{"class":109},[49,33394,1787],{"class":73},[49,33396,1409],{"class":66},[49,33398,33399,33401],{"class":51,"line":3853},[49,33400,5344],{"class":109},[49,33402,33403],{"class":66}," train_dataloader,val_dataloader\n",[49,33405,33406],{"class":51,"line":3858},[49,33407,3654],{"emptyLinePlaceholder":1330},[49,33409,33410],{"class":51,"line":3864},[49,33411,33412],{"class":55},"# 验证是否出错\n",[49,33414,33415],{"class":51,"line":3870},[49,33416,33417],{"class":55},"# train_val_data_process()\n",[49,33419,33420],{"class":51,"line":3875},[49,33421,3654],{"emptyLinePlaceholder":1330},[49,33423,33424],{"class":51,"line":9200},[49,33425,33426],{"class":55},"# 定义模型训练函数\n",[49,33428,33429,33431,33434],{"class":51,"line":9224},[49,33430,33195],{"class":109},[49,33432,33433],{"class":62}," train_model_process",[49,33435,33436],{"class":66},"(model,train_dataloader,val_dataloader,num_epochs):\n",[49,33438,33439,33441,33443,33445,33447,33449,33451,33453,33456],{"class":51,"line":9229},[49,33440,32485],{"class":66},[49,33442,1448],{"class":109},[49,33444,31699],{"class":66},[49,33446,32492],{"class":1505},[49,33448,2959],{"class":109},[49,33450,32497],{"class":66},[49,33452,2956],{"class":109},[49,33454,33455],{"class":1505}," 'cpu'",[49,33457,1409],{"class":66},[49,33459,33460],{"class":51,"line":9235},[49,33461,3654],{"emptyLinePlaceholder":1330},[49,33463,33464],{"class":51,"line":9262},[49,33465,3654],{"emptyLinePlaceholder":1330},[49,33467,33468],{"class":51,"line":9267},[49,33469,33470],{"class":55},"    # 定义优化器\n",[49,33472,33473],{"class":51,"line":9273},[49,33474,33475],{"class":55},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[49,33477,33478],{"class":51,"line":9285},[49,33479,33480],{"class":55},"    # lr为学习率\n",[49,33482,33483,33486,33488,33491,33494,33496,33499],{"class":51,"line":9297},[49,33484,33485],{"class":66},"    optimizer",[49,33487,1448],{"class":109},[49,33489,33490],{"class":66},"torch.optim.Adam(model.parameters(),",[49,33492,33493],{"class":6468},"lr",[49,33495,1448],{"class":109},[49,33497,33498],{"class":73},"0.001",[49,33500,1409],{"class":66},[49,33502,33503],{"class":51,"line":9309},[49,33504,3654],{"emptyLinePlaceholder":1330},[49,33506,33507],{"class":51,"line":10968},[49,33508,33509],{"class":55},"    # 定义损失函数使用交叉熵损失函数\n",[49,33511,33512,33515,33517],{"class":51,"line":10993},[49,33513,33514],{"class":66},"    criterion",[49,33516,1448],{"class":109},[49,33518,33519],{"class":66},"nn.CrossEntropyLoss()\n",[49,33521,33522],{"class":51,"line":11016},[49,33523,3654],{"emptyLinePlaceholder":1330},[49,33525,33526],{"class":51,"line":11040},[49,33527,33528],{"class":55},"    # 将模型放到GPU中进行训练\n",[49,33530,33531,33533,33535],{"class":51,"line":11045},[49,33532,32537],{"class":66},[49,33534,1448],{"class":109},[49,33536,33537],{"class":66},"model.to(device)\n",[49,33539,33540],{"class":51,"line":11050},[49,33541,33542],{"class":55},"    # 复制当前模型的参数\n",[49,33544,33545],{"class":51,"line":11055},[49,33546,33547],{"class":55},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[49,33549,33550],{"class":51,"line":11064},[49,33551,33552],{"class":55},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[49,33554,33555,33558,33560],{"class":51,"line":11069},[49,33556,33557],{"class":66},"    best_model_wts",[49,33559,1448],{"class":109},[49,33561,33562],{"class":66},"copy.deepcopy(model.state_dict())\n",[49,33564,33565],{"class":51,"line":11075},[49,33566,3654],{"emptyLinePlaceholder":1330},[49,33568,33569],{"class":51,"line":11096},[49,33570,3654],{"emptyLinePlaceholder":1330},[49,33572,33573],{"class":51,"line":11102},[49,33574,33575],{"class":55},"    # 初始化参数\n",[49,33577,33578],{"class":51,"line":11116},[49,33579,33580],{"class":55},"    # 最高准确度\n",[49,33582,33583,33586,33588],{"class":51,"line":11122},[49,33584,33585],{"class":66},"    best_acc",[49,33587,1448],{"class":109},[49,33589,33590],{"class":73},"0.0\n",[49,33592,33593],{"class":51,"line":11149},[49,33594,33595],{"class":55},"    # 训练集损失列表\n",[49,33597,33598,33601,33603],{"class":51,"line":11158},[49,33599,33600],{"class":66},"    train_loss_all",[49,33602,1448],{"class":109},[49,33604,33605],{"class":66},"[]\n",[49,33607,33608],{"class":51,"line":11164},[49,33609,33610],{"class":55},"    # 验证集函数列表\n",[49,33612,33613,33616,33618],{"class":51,"line":11172},[49,33614,33615],{"class":66},"    val_loss_all",[49,33617,1448],{"class":109},[49,33619,33605],{"class":66},[49,33621,33622],{"class":51,"line":11177},[49,33623,33624],{"class":55},"    # 训练集准确度列表\n",[49,33626,33627,33630,33632],{"class":51,"line":17854},[49,33628,33629],{"class":66},"    train_acc_all",[49,33631,1448],{"class":109},[49,33633,33605],{"class":66},[49,33635,33636],{"class":51,"line":17860},[49,33637,33638],{"class":55},"    # 验证集准确度列表\n",[49,33640,33641,33644,33646],{"class":51,"line":17883},[49,33642,33643],{"class":66},"    val_acc_all",[49,33645,1448],{"class":109},[49,33647,33605],{"class":66},[49,33649,33650],{"class":51,"line":17889},[49,33651,3654],{"emptyLinePlaceholder":1330},[49,33653,33654],{"class":51,"line":17912},[49,33655,33656],{"class":55},"    # 保存当前时间--->方便看每轮训练的时间\n",[49,33658,33659,33662,33664],{"class":51,"line":17926},[49,33660,33661],{"class":66},"    since",[49,33663,1448],{"class":109},[49,33665,33666],{"class":66},"time.time()\n",[49,33668,33669],{"class":51,"line":17946},[49,33670,3654],{"emptyLinePlaceholder":1330},[49,33672,33673],{"class":51,"line":17952},[49,33674,3654],{"emptyLinePlaceholder":1330},[49,33676,33677],{"class":51,"line":17963},[49,33678,33679],{"class":55},"    # 准备工作完成--->开始训练模型\n",[49,33681,33682,33684,33687,33689,33692],{"class":51,"line":17986},[49,33683,4455],{"class":109},[49,33685,33686],{"class":66}," epoch ",[49,33688,27292],{"class":109},[49,33690,33691],{"class":73}," range",[49,33693,33694],{"class":66},"(num_epochs):\n",[49,33696,33697,33700,33702,33705,33708,33710,33712,33714,33717,33719,33721],{"class":51,"line":18008},[49,33698,33699],{"class":73},"        print",[49,33701,1403],{"class":66},[49,33703,33704],{"class":1505},"\"Epoch ",[49,33706,33707],{"class":73},"{}",[49,33709,1975],{"class":1505},[49,33711,33707],{"class":73},[49,33713,1643],{"class":1505},[49,33715,33716],{"class":66},".format(epoch,num_epochs",[49,33718,1923],{"class":109},[49,33720,159],{"class":73},[49,33722,31745],{"class":66},[49,33724,33725,33727,33729,33732,33734,33736],{"class":51,"line":18013},[49,33726,33699],{"class":73},[49,33728,1403],{"class":66},[49,33730,33731],{"class":1505},"\"-\"",[49,33733,1846],{"class":109},[49,33735,106],{"class":73},[49,33737,1409],{"class":66},[49,33739,33740],{"class":51,"line":18019},[49,33741,3654],{"emptyLinePlaceholder":1330},[49,33743,33744],{"class":51,"line":18033},[49,33745,33746],{"class":55},"        # 初始化参数\n",[49,33748,33749],{"class":51,"line":18046},[49,33750,33751],{"class":55},"        # 训练集损失函数\n",[49,33753,33754,33757,33759],{"class":51,"line":18051},[49,33755,33756],{"class":66},"        train_loss",[49,33758,1448],{"class":109},[49,33760,33590],{"class":73},[49,33762,33763],{"class":51,"line":18065},[49,33764,33765],{"class":55},"        # 训练集准确度\n",[49,33767,33768,33771,33773],{"class":51,"line":18070},[49,33769,33770],{"class":66},"        train_corrects",[49,33772,1448],{"class":109},[49,33774,4339],{"class":73},[49,33776,33777],{"class":51,"line":18076},[49,33778,33779],{"class":55},"        # 验证集损失函数\n",[49,33781,33782,33785,33787],{"class":51,"line":18081},[49,33783,33784],{"class":66},"        val_loss",[49,33786,1448],{"class":109},[49,33788,33590],{"class":73},[49,33790,33791],{"class":51,"line":18095},[49,33792,33793],{"class":55},"        # 验证集准确度\n",[49,33795,33796,33799,33801],{"class":51,"line":18100},[49,33797,33798],{"class":66},"        val_corrects",[49,33800,1448],{"class":109},[49,33802,4339],{"class":73},[49,33804,33805],{"class":51,"line":18105},[49,33806,33807],{"class":55},"        # 训练集样本数量\n",[49,33809,33810,33813,33815],{"class":51,"line":18119},[49,33811,33812],{"class":66},"        train_num",[49,33814,1448],{"class":109},[49,33816,4339],{"class":73},[49,33818,33819],{"class":51,"line":18131},[49,33820,33821],{"class":55},"        # 验证集样本数量\n",[49,33823,33824,33827,33829],{"class":51,"line":18136},[49,33825,33826],{"class":66},"        val_num",[49,33828,1448],{"class":109},[49,33830,4339],{"class":73},[49,33832,33833],{"class":51,"line":18149},[49,33834,33835],{"class":55},"        # 将数据放到设备,并开始训练\n",[49,33837,33838,33840,33842,33844,33846],{"class":51,"line":18154},[49,33839,4657],{"class":109},[49,33841,32849],{"class":66},[49,33843,27292],{"class":109},[49,33845,32854],{"class":73},[49,33847,33848],{"class":66},"(train_dataloader):\n",[49,33850,33851],{"class":51,"line":18159},[49,33852,33853],{"class":55},"            # 将特征放入到训练设备\n",[49,33855,33856,33859,33861],{"class":51,"line":18164},[49,33857,33858],{"class":66},"            b_x",[49,33860,1448],{"class":109},[49,33862,33863],{"class":66},"b_x.to(device)\n",[49,33865,33866],{"class":51,"line":18177},[49,33867,33868],{"class":55},"            # 将标签放入到训练设备当中\n",[49,33870,33871,33874,33876],{"class":51,"line":18182},[49,33872,33873],{"class":66},"            b_y",[49,33875,1448],{"class":109},[49,33877,33878],{"class":66},"b_y.to(device)\n",[49,33880,33882],{"class":51,"line":33881},98,[49,33883,33884],{"class":55},"            # 设置模型为训练模式\n",[49,33886,33888],{"class":51,"line":33887},99,[49,33889,33890],{"class":66},"            model.train()\n",[49,33892,33894],{"class":51,"line":33893},100,[49,33895,33896],{"class":55},"            # 将数据放到模型当中,开始前向传播\n",[49,33898,33900],{"class":51,"line":33899},101,[49,33901,33902],{"class":55},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[49,33904,33906,33909,33911],{"class":51,"line":33905},102,[49,33907,33908],{"class":66},"            output",[49,33910,1448],{"class":109},[49,33912,33913],{"class":66},"model(b_x)\n",[49,33915,33917],{"class":51,"line":33916},103,[49,33918,33919],{"class":55},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[49,33921,33923,33926,33928,33931,33934,33936,33938],{"class":51,"line":33922},104,[49,33924,33925],{"class":66},"            pre_lab",[49,33927,1448],{"class":109},[49,33929,33930],{"class":66},"torch.argmax(output,",[49,33932,33933],{"class":6468},"dim",[49,33935,1448],{"class":109},[49,33937,159],{"class":73},[49,33939,1409],{"class":66},[49,33941,33943],{"class":51,"line":33942},105,[49,33944,33945],{"class":55},"            # 计算每一个batch的损失函数\n",[49,33947,33949,33952,33954],{"class":51,"line":33948},106,[49,33950,33951],{"class":66},"            loss",[49,33953,1448],{"class":109},[49,33955,33956],{"class":66},"criterion(output,b_y)\n",[49,33958,33960],{"class":51,"line":33959},107,[49,33961,33962],{"class":55},"            # 将梯度初始化为0\n",[49,33964,33966],{"class":51,"line":33965},108,[49,33967,33968],{"class":66},"            optimizer.zero_grad()\n",[49,33970,33972],{"class":51,"line":33971},109,[49,33973,33974],{"class":55},"            # 梯度置为0后再进行反向传播\n",[49,33976,33978],{"class":51,"line":33977},110,[49,33979,33980],{"class":66},"            loss.backward()\n",[49,33982,33984],{"class":51,"line":33983},111,[49,33985,33986],{"class":55},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[49,33988,33990],{"class":51,"line":33989},112,[49,33991,33992],{"class":66},"            optimizer.step()\n",[49,33994,33996],{"class":51,"line":33995},113,[49,33997,33998],{"class":55},"            # loss.item()指的是batch的平均损失\n",[49,34000,34002,34005,34007,34010,34012,34015,34017],{"class":51,"line":34001},114,[49,34003,34004],{"class":66},"            train_loss",[49,34006,10729],{"class":109},[49,34008,34009],{"class":66},"loss.item()",[49,34011,1846],{"class":109},[49,34013,34014],{"class":66},"b_x.size(",[49,34016,80],{"class":73},[49,34018,1409],{"class":66},[49,34020,34022],{"class":51,"line":34021},115,[49,34023,34024],{"class":55},"            # 计算每个批次中正确预测的数量\n",[49,34026,34028,34031,34033,34036,34038],{"class":51,"line":34027},116,[49,34029,34030],{"class":66},"            train_corrects",[49,34032,10729],{"class":109},[49,34034,34035],{"class":66},"torch.sum(pre_lab",[49,34037,4203],{"class":109},[49,34039,34040],{"class":66},"b_y.data)\n",[49,34042,34044],{"class":51,"line":34043},117,[49,34045,34046],{"class":55},"            # 计算目前为止一共处理了多少样本\n",[49,34048,34050,34053,34055,34057,34059],{"class":51,"line":34049},118,[49,34051,34052],{"class":66},"            train_num",[49,34054,10729],{"class":109},[49,34056,34014],{"class":66},[49,34058,80],{"class":73},[49,34060,1409],{"class":66},[49,34062,34064],{"class":51,"line":34063},119,[49,34065,34066],{"class":55},"        # 验证数据\n",[49,34068,34070,34072,34075,34077,34079],{"class":51,"line":34069},120,[49,34071,4657],{"class":109},[49,34073,34074],{"class":66}," step ,(b_x,b_y) ",[49,34076,27292],{"class":109},[49,34078,32854],{"class":73},[49,34080,34081],{"class":66},"(val_dataloader):\n",[49,34083,34085],{"class":51,"line":34084},121,[49,34086,34087],{"class":55},"            # 将特征放到验证设备当中\n",[49,34089,34091,34093,34095],{"class":51,"line":34090},122,[49,34092,33858],{"class":66},[49,34094,1448],{"class":109},[49,34096,33863],{"class":66},[49,34098,34100],{"class":51,"line":34099},123,[49,34101,34102],{"class":55},"            # 将标签放到放到训练设备当中\n",[49,34104,34106,34108,34110],{"class":51,"line":34105},124,[49,34107,33873],{"class":66},[49,34109,1448],{"class":109},[49,34111,33878],{"class":66},[49,34113,34115],{"class":51,"line":34114},125,[49,34116,34117],{"class":55},"            # 开启验证模式，设置模型为评估模式\n",[49,34119,34121],{"class":51,"line":34120},126,[49,34122,34123],{"class":66},"            model.eval()\n",[49,34125,34127,34130],{"class":51,"line":34126},127,[49,34128,34129],{"class":109},"            with",[49,34131,34132],{"class":66}," torch.no_grad():\n",[49,34134,34136],{"class":51,"line":34135},128,[49,34137,34138],{"class":55},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[49,34140,34142,34145,34147],{"class":51,"line":34141},129,[49,34143,34144],{"class":66},"                output ",[49,34146,1448],{"class":109},[49,34148,34149],{"class":66}," model(b_x)\n",[49,34151,34153],{"class":51,"line":34152},130,[49,34154,34155],{"class":55},"                # 查找每一行中最大值对应的下标\n",[49,34157,34159,34162,34164,34167,34169,34171,34173],{"class":51,"line":34158},131,[49,34160,34161],{"class":66},"                pre_lab ",[49,34163,1448],{"class":109},[49,34165,34166],{"class":66}," torch.argmax(output, ",[49,34168,33933],{"class":6468},[49,34170,1448],{"class":109},[49,34172,159],{"class":73},[49,34174,1409],{"class":66},[49,34176,34178],{"class":51,"line":34177},132,[49,34179,34180],{"class":55},"                # 计算验证集上的当前 batch 损失\n",[49,34182,34184,34187,34189],{"class":51,"line":34183},133,[49,34185,34186],{"class":66},"                val_batch_loss ",[49,34188,1448],{"class":109},[49,34190,34191],{"class":66}," criterion(output, b_y)\n",[49,34193,34195],{"class":51,"line":34194},134,[49,34196,34197],{"class":55},"                # 对损失函数进行累加（按样本数加权）\n",[49,34199,34201,34204,34206,34209,34211,34214,34216],{"class":51,"line":34200},135,[49,34202,34203],{"class":66},"                val_loss ",[49,34205,10729],{"class":109},[49,34207,34208],{"class":66}," val_batch_loss.item() ",[49,34210,1846],{"class":109},[49,34212,34213],{"class":66}," b_x.size(",[49,34215,80],{"class":73},[49,34217,1409],{"class":66},[49,34219,34221,34224,34226,34229,34231],{"class":51,"line":34220},136,[49,34222,34223],{"class":66},"                val_corrects ",[49,34225,10729],{"class":109},[49,34227,34228],{"class":66}," torch.sum(pre_lab ",[49,34230,4203],{"class":109},[49,34232,34233],{"class":66}," b_y.data)\n",[49,34235,34237],{"class":51,"line":34236},137,[49,34238,34239],{"class":55},"                # 当前用于验证的样本数量\n",[49,34241,34243,34246,34248,34250,34252],{"class":51,"line":34242},138,[49,34244,34245],{"class":66},"            val_num ",[49,34247,10729],{"class":109},[49,34249,34213],{"class":66},[49,34251,80],{"class":73},[49,34253,1409],{"class":66},[49,34255,34257],{"class":51,"line":34256},139,[49,34258,34259],{"class":55},"        # 计算并保存每一次迭代的loss值和准确率\n",[49,34261,34263],{"class":51,"line":34262},140,[49,34264,34265],{"class":55},"        # 计算并保存训练集的loss值\n",[49,34267,34269,34272,34274],{"class":51,"line":34268},141,[49,34270,34271],{"class":66},"        train_loss_all.append(train_loss",[49,34273,1975],{"class":109},[49,34275,34276],{"class":66},"train_num)\n",[49,34278,34280],{"class":51,"line":34279},142,[49,34281,34282],{"class":55},"        # 取双精度\n",[49,34284,34286],{"class":51,"line":34285},143,[49,34287,34288],{"class":55},"        # 计算并保存训练集的准确率\n",[49,34290,34292,34295,34297],{"class":51,"line":34291},144,[49,34293,34294],{"class":66},"        train_acc_all.append(train_corrects.double().item()",[49,34296,1975],{"class":109},[49,34298,34276],{"class":66},[49,34300,34302],{"class":51,"line":34301},145,[49,34303,34304],{"class":55},"        # 计算并保存验证集的loss值\n",[49,34306,34308,34311,34313],{"class":51,"line":34307},146,[49,34309,34310],{"class":66},"        val_loss_all.append(val_loss",[49,34312,1975],{"class":109},[49,34314,34315],{"class":66},"val_num)\n",[49,34317,34319],{"class":51,"line":34318},147,[49,34320,34321],{"class":55},"        # 计算并保存验证集的准确率\n",[49,34323,34325,34328,34330],{"class":51,"line":34324},148,[49,34326,34327],{"class":66},"        val_acc_all.append(val_corrects.double().item()",[49,34329,1975],{"class":109},[49,34331,34315],{"class":66},[49,34333,34335],{"class":51,"line":34334},149,[49,34336,3654],{"emptyLinePlaceholder":1330},[49,34338,34340],{"class":51,"line":34339},150,[49,34341,34342],{"class":55},"        # 打印训练一轮的loss值和准确率\n",[49,34344,34346,34348,34350,34352,34354,34357,34359,34362,34364,34367,34369,34371,34373,34375,34378,34380,34382,34385,34387,34389],{"class":51,"line":34345},151,[49,34347,33699],{"class":73},[49,34349,1403],{"class":66},[49,34351,4846],{"class":1505},[49,34353,33707],{"class":73},[49,34355,34356],{"class":1505},"train loss:",[49,34358,2286],{"class":73},[49,34360,34361],{"class":109},":.4f",[49,34363,620],{"class":73},[49,34365,34366],{"class":1505}," train acc:",[49,34368,2286],{"class":73},[49,34370,34361],{"class":109},[49,34372,620],{"class":73},[49,34374,4846],{"class":1505},[49,34376,34377],{"class":66},".format(epoch,train_loss_all[",[49,34379,1923],{"class":109},[49,34381,159],{"class":73},[49,34383,34384],{"class":66},"],train_acc_all[",[49,34386,1923],{"class":109},[49,34388,159],{"class":73},[49,34390,34391],{"class":66},"]))\n",[49,34393,34395,34397,34399,34401,34403,34406,34408,34410,34412,34415,34417,34419,34421,34423,34426,34428,34430,34433,34435,34437],{"class":51,"line":34394},152,[49,34396,33699],{"class":73},[49,34398,1403],{"class":66},[49,34400,4846],{"class":1505},[49,34402,33707],{"class":73},[49,34404,34405],{"class":1505},"val loss:",[49,34407,2286],{"class":73},[49,34409,34361],{"class":109},[49,34411,620],{"class":73},[49,34413,34414],{"class":1505}," val acc:",[49,34416,2286],{"class":73},[49,34418,34361],{"class":109},[49,34420,620],{"class":73},[49,34422,4846],{"class":1505},[49,34424,34425],{"class":66},".format(epoch,val_loss_all[",[49,34427,1923],{"class":109},[49,34429,159],{"class":73},[49,34431,34432],{"class":66},"],val_acc_all[",[49,34434,1923],{"class":109},[49,34436,159],{"class":73},[49,34438,34391],{"class":66},[49,34440,34442],{"class":51,"line":34441},153,[49,34443,3654],{"emptyLinePlaceholder":1330},[49,34445,34447],{"class":51,"line":34446},154,[49,34448,34449],{"class":55},"        # 判断准确度--->保存最优模型\n",[49,34451,34453,34455,34458,34460,34462,34464,34466],{"class":51,"line":34452},155,[49,34454,3751],{"class":109},[49,34456,34457],{"class":66}," val_acc_all[",[49,34459,1923],{"class":109},[49,34461,159],{"class":73},[49,34463,2330],{"class":66},[49,34465,2349],{"class":109},[49,34467,34468],{"class":66},"best_acc:\n",[49,34470,34472],{"class":51,"line":34471},156,[49,34473,34474],{"class":55},"            # 保存当前模型准确度\n",[49,34476,34478,34481,34483,34485,34488,34490,34492],{"class":51,"line":34477},157,[49,34479,34480],{"class":66},"            best_acc:",[49,34482,1442],{"class":73},[49,34484,1448],{"class":109},[49,34486,34487],{"class":66},"val_acc_all[",[49,34489,1923],{"class":109},[49,34491,159],{"class":73},[49,34493,34494],{"class":66},"]\n",[49,34496,34498],{"class":51,"line":34497},158,[49,34499,34500],{"class":55},"            # 保存当前的准确度\n",[49,34502,34504],{"class":51,"line":34503},159,[49,34505,34506],{"class":55},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[49,34508,34510,34513,34515],{"class":51,"line":34509},160,[49,34511,34512],{"class":66},"            best_model_wts",[49,34514,1448],{"class":109},[49,34516,33562],{"class":66},[49,34518,34520],{"class":51,"line":34519},161,[49,34521,3654],{"emptyLinePlaceholder":1330},[49,34523,34525],{"class":51,"line":34524},162,[49,34526,34527],{"class":55},"        # 计算耗时\n",[49,34529,34531,34534,34536,34539,34541],{"class":51,"line":34530},163,[49,34532,34533],{"class":66},"        time_use",[49,34535,1448],{"class":109},[49,34537,34538],{"class":66},"time.time()",[49,34540,1923],{"class":109},[49,34542,34543],{"class":66},"since\n",[49,34545,34547,34549,34551,34554,34556,34559,34561,34563,34565,34567,34569,34572,34575,34578,34580,34583,34585,34587],{"class":51,"line":34546},164,[49,34548,33699],{"class":73},[49,34550,1403],{"class":66},[49,34552,34553],{"class":1505},"'训练和验证耗费的时间",[49,34555,2286],{"class":73},[49,34557,34558],{"class":109},":.0f",[49,34560,620],{"class":73},[49,34562,1935],{"class":1505},[49,34564,2286],{"class":73},[49,34566,34558],{"class":109},[49,34568,620],{"class":73},[49,34570,34571],{"class":1505},"s'",[49,34573,34574],{"class":66},".format(time_use",[49,34576,34577],{"class":109},"\u002F\u002F",[49,34579,2297],{"class":73},[49,34581,34582],{"class":66},",time_use",[49,34584,1720],{"class":109},[49,34586,2297],{"class":73},[49,34588,31745],{"class":66},[49,34590,34592],{"class":51,"line":34591},165,[49,34593,34594],{"class":55},"    # 选择最优参数\n",[49,34596,34598],{"class":51,"line":34597},166,[49,34599,34600],{"class":55},"    # 加载最高准确率下的模型参数\n",[49,34602,34604],{"class":51,"line":34603},167,[49,34605,34606],{"class":55},"    # model.load_state_dict(best_model_wts)\n",[49,34608,34610,34613,34616],{"class":51,"line":34609},168,[49,34611,34612],{"class":66},"    torch.save(model.state_dict(best_model_wts), ",[49,34614,34615],{"class":1505},"'.\u002Fbest_model.pth'",[49,34617,1409],{"class":66},[49,34619,34621],{"class":51,"line":34620},169,[49,34622,34623],{"class":55},"    # 或者写成\n",[49,34625,34627],{"class":51,"line":34626},170,[49,34628,34629],{"class":55},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[49,34631,34633],{"class":51,"line":34632},171,[49,34634,34635],{"class":55},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[49,34637,34639,34642,34644,34647,34650,34652],{"class":51,"line":34638},172,[49,34640,34641],{"class":66},"    train_process",[49,34643,1448],{"class":109},[49,34645,34646],{"class":66},"pd.DataFrame(",[49,34648,34649],{"class":6468},"data",[49,34651,1448],{"class":109},[49,34653,2802],{"class":66},[49,34655,34657,34660,34662,34665],{"class":51,"line":34656},173,[49,34658,34659],{"class":1505},"        \"epoch\"",[49,34661,2249],{"class":66},[49,34663,34664],{"class":73},"range",[49,34666,34667],{"class":66},"(num_epochs),\n",[49,34669,34671,34674],{"class":51,"line":34670},174,[49,34672,34673],{"class":1505},"        \"train_loss_all\"",[49,34675,34676],{"class":66},":train_loss_all,\n",[49,34678,34680,34683],{"class":51,"line":34679},175,[49,34681,34682],{"class":1505},"        \"val_loss_all\"",[49,34684,34685],{"class":66},":val_loss_all,\n",[49,34687,34689,34692],{"class":51,"line":34688},176,[49,34690,34691],{"class":1505},"        \"train_acc_all\"",[49,34693,34694],{"class":66},":train_acc_all,\n",[49,34696,34698,34701],{"class":51,"line":34697},177,[49,34699,34700],{"class":1505},"        \"val_acc_all\"",[49,34702,34703],{"class":66},":val_acc_all\n",[49,34705,34707],{"class":51,"line":34706},178,[49,34708,34709],{"class":66},"    })\n",[49,34711,34713],{"class":51,"line":34712},179,[49,34714,34715],{"class":55},"    # 返回训练保存的过程\n",[49,34717,34719,34721],{"class":51,"line":34718},180,[49,34720,5344],{"class":109},[49,34722,34723],{"class":66}," train_process\n",[49,34725,34727],{"class":51,"line":34726},181,[49,34728,3654],{"emptyLinePlaceholder":1330},[49,34730,34732],{"class":51,"line":34731},182,[49,34733,34734],{"class":55},"# 将loss值和精度按照图片的形式展示出来\n",[49,34736,34738,34740,34743],{"class":51,"line":34737},183,[49,34739,33195],{"class":109},[49,34741,34742],{"class":62}," matplot_acc_loss",[49,34744,34745],{"class":66},"(train_process):\n",[49,34747,34749],{"class":51,"line":34748},184,[49,34750,34751],{"class":55},"    # 设置图的大小\n",[49,34753,34755,34758,34760,34762,34764,34766,34768,34770],{"class":51,"line":34754},185,[49,34756,34757],{"class":66},"    plt.figure(",[49,34759,32941],{"class":6468},[49,34761,1448],{"class":109},[49,34763,1403],{"class":66},[49,34765,1889],{"class":73},[49,34767,1770],{"class":66},[49,34769,1685],{"class":73},[49,34771,31745],{"class":66},[49,34773,34775],{"class":51,"line":34774},186,[49,34776,34777],{"class":55},"    # 设置图中有几张图\n",[49,34779,34781],{"class":51,"line":34780},187,[49,34782,34783],{"class":55},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[49,34785,34787],{"class":51,"line":34786},188,[49,34788,34789],{"class":55},"    # ①loss图\n",[49,34791,34793,34795,34797,34799,34801,34803,34805],{"class":51,"line":34792},189,[49,34794,32975],{"class":66},[49,34796,159],{"class":73},[49,34798,1770],{"class":66},[49,34800,1478],{"class":73},[49,34802,1770],{"class":66},[49,34804,159],{"class":73},[49,34806,1409],{"class":66},[49,34808,34810],{"class":51,"line":34809},190,[49,34811,34812],{"class":55},"    # 补充:\n",[49,34814,34816],{"class":51,"line":34815},191,[49,34817,34818],{"class":55},"    # plt.subplot(nrows, ncols, index)\n",[49,34820,34822],{"class":51,"line":34821},192,[49,34823,34824],{"class":55},"    # nrows：行数\n",[49,34826,34828],{"class":51,"line":34827},193,[49,34829,34830],{"class":55},"    # ncols：列数\n",[49,34832,34834],{"class":51,"line":34833},194,[49,34835,34836],{"class":55},"    # index：目前选中第几个子图（从1开始）\n",[49,34838,34840,34843,34846,34849,34852,34854,34857,34859,34862],{"class":51,"line":34839},195,[49,34841,34842],{"class":66},"    plt.plot(train_process[",[49,34844,34845],{"class":1505},"\"epoch\"",[49,34847,34848],{"class":66},"],train_process.train_loss_all,",[49,34850,34851],{"class":1505},"'ro-'",[49,34853,1770],{"class":66},[49,34855,34856],{"class":6468},"label",[49,34858,1448],{"class":109},[49,34860,34861],{"class":1505},"'train loss'",[49,34863,1409],{"class":66},[49,34865,34867,34869,34871,34874,34877,34879,34881,34883,34886],{"class":51,"line":34866},196,[49,34868,34842],{"class":66},[49,34870,34845],{"class":1505},[49,34872,34873],{"class":66},"],train_process.val_loss_all,",[49,34875,34876],{"class":1505},"'bs--'",[49,34878,1770],{"class":66},[49,34880,34856],{"class":6468},[49,34882,1448],{"class":109},[49,34884,34885],{"class":1505},"'val loss'",[49,34887,1409],{"class":66},[49,34889,34891],{"class":51,"line":34890},197,[49,34892,34893],{"class":55},"    # 添加一个图例\n",[49,34895,34897],{"class":51,"line":34896},198,[49,34898,34899],{"class":66},"    plt.legend()\n",[49,34901,34903],{"class":51,"line":34902},199,[49,34904,34905],{"class":55},"    # 给轴添加标签\n",[49,34907,34909,34912,34915],{"class":51,"line":34908},200,[49,34910,34911],{"class":66},"    plt.xlabel(",[49,34913,34914],{"class":1505},"'epoch'",[49,34916,1409],{"class":66},[49,34918,34920,34923,34926],{"class":51,"line":34919},201,[49,34921,34922],{"class":66},"    plt.ylabel(",[49,34924,34925],{"class":1505},"'loss'",[49,34927,1409],{"class":66},[49,34929,34931],{"class":51,"line":34930},202,[49,34932,34933],{"class":55},"    # ②准确度图\n",[49,34935,34937,34939,34941,34943,34945,34947,34949],{"class":51,"line":34936},203,[49,34938,32975],{"class":66},[49,34940,159],{"class":73},[49,34942,1770],{"class":66},[49,34944,1478],{"class":73},[49,34946,1770],{"class":66},[49,34948,1478],{"class":73},[49,34950,1409],{"class":66},[49,34952,34954,34956,34958,34961,34963,34965,34967,34969,34972],{"class":51,"line":34953},204,[49,34955,34842],{"class":66},[49,34957,34845],{"class":1505},[49,34959,34960],{"class":66},"],train_process.train_acc_all,",[49,34962,34851],{"class":1505},[49,34964,1770],{"class":66},[49,34966,34856],{"class":6468},[49,34968,1448],{"class":109},[49,34970,34971],{"class":1505},"'train acc'",[49,34973,1409],{"class":66},[49,34975,34977,34979,34981,34984,34986,34988,34990,34992,34995],{"class":51,"line":34976},205,[49,34978,34842],{"class":66},[49,34980,34845],{"class":1505},[49,34982,34983],{"class":66},"],train_process.val_acc_all,",[49,34985,34876],{"class":1505},[49,34987,1770],{"class":66},[49,34989,34856],{"class":6468},[49,34991,1448],{"class":109},[49,34993,34994],{"class":1505},"'val acc'",[49,34996,1409],{"class":66},[49,34998,35000],{"class":51,"line":34999},206,[49,35001,35002],{"class":55},"    # 添加图例\n",[49,35004,35006],{"class":51,"line":35005},207,[49,35007,34899],{"class":66},[49,35009,35011,35013,35015],{"class":51,"line":35010},208,[49,35012,34911],{"class":66},[49,35014,34845],{"class":1505},[49,35016,1409],{"class":66},[49,35018,35020,35022,35025],{"class":51,"line":35019},209,[49,35021,34922],{"class":66},[49,35023,35024],{"class":1505},"\"acc\"",[49,35026,1409],{"class":66},[49,35028,35030],{"class":51,"line":35029},210,[49,35031,35032],{"class":66},"    plt.show()\n",[49,35034,35036],{"class":51,"line":35035},211,[49,35037,3654],{"emptyLinePlaceholder":1330},[49,35039,35041],{"class":51,"line":35040},212,[49,35042,35043],{"class":55},"# 正式开始训练:\n",[49,35045,35047,35049,35051,35053,35055],{"class":51,"line":35046},213,[49,35048,2787],{"class":109},[49,35050,32468],{"class":73},[49,35052,4203],{"class":109},[49,35054,32473],{"class":1505},[49,35056,4993],{"class":66},[49,35058,35060],{"class":51,"line":35059},214,[49,35061,35062],{"class":55},"    # 将模型实例化\n",[49,35064,35066,35069,35071],{"class":51,"line":35065},215,[49,35067,35068],{"class":66},"    LeNet",[49,35070,1448],{"class":109},[49,35072,35073],{"class":66},"LeNet()\n",[49,35075,35077,35080,35082],{"class":51,"line":35076},216,[49,35078,35079],{"class":66},"    train_dataloader,val_dataloader",[49,35081,1448],{"class":109},[49,35083,35084],{"class":66},"train_val_data_process()\n",[49,35086,35088,35090,35092,35095,35098,35100,35102],{"class":51,"line":35087},217,[49,35089,34641],{"class":66},[49,35091,1448],{"class":109},[49,35093,35094],{"class":66},"train_model_process(LeNet,train_dataloader,val_dataloader,",[49,35096,35097],{"class":6468},"num_epochs",[49,35099,1448],{"class":109},[49,35101,875],{"class":73},[49,35103,1409],{"class":66},[49,35105,35107],{"class":51,"line":35106},218,[49,35108,35109],{"class":66},"    matplot_acc_loss(train_process)\n",[19,35111,35112],{},"画图的补充点学习：",[19,35114,35115],{},[174,35116],{"alt":44,"src":35117},"\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",[591,35119,35120],{"start":70},[26,35121,35122],{},"测试",[39,35124,35126],{"className":31626,"code":35125,"language":31628,"meta":44,"style":44},"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",[46,35127,35128,35134,35144,35156,35166,35171,35181,35191,35195,35200,35209,35226,35238,35255,35266,35282,35287,35298,35309,35320,35327,35331,35336,35346,35351,35368,35376,35380,35385,35394,35403,35407,35412,35417,35422,35429,35434,35446,35456,35466,35471,35475,35480,35489,35494,35510,35515,35520,35525,35539,35544,35558,35562,35567,35582,35587,35599,35603,35608,35620,35625,35633,35638,35643,35653,35658,35667,35672,35677,35681,35686,35691,35707,35715,35720,35725,35784,35790,35795,35806,35814,35822,35826,35831,35835,35840,35848,35853,35869,35874,35884,35894],{"__ignoreMap":44},[49,35129,35130,35132],{"class":51,"line":52},[49,35131,31640],{"class":109},[49,35133,31643],{"class":66},[49,35135,35136,35138,35140,35142],{"class":51,"line":59},[49,35137,31640],{"class":109},[49,35139,32663],{"class":66},[49,35141,32631],{"class":109},[49,35143,32668],{"class":66},[49,35145,35146,35148,35151,35153],{"class":51,"line":70},[49,35147,31985],{"class":109},[49,35149,35150],{"class":66}," jupyter_client.consoleapp ",[49,35152,31640],{"class":109},[49,35154,35155],{"class":66}," classes\n",[49,35157,35158,35160,35162,35164],{"class":51,"line":86},[49,35159,31985],{"class":109},[49,35161,32646],{"class":66},[49,35163,31640],{"class":109},[49,35165,32651],{"class":66},[49,35167,35168],{"class":51,"line":98},[49,35169,35170],{"class":55},"# 导入数据集\n",[49,35172,35173,35175,35177,35179],{"class":51,"line":121},[49,35174,31985],{"class":109},[49,35176,32616],{"class":66},[49,35178,31640],{"class":109},[49,35180,32621],{"class":66},[49,35182,35183,35185,35187,35189],{"class":51,"line":134},[49,35184,31985],{"class":109},[49,35186,33162],{"class":66},[49,35188,31640],{"class":109},[49,35190,33167],{"class":66},[49,35192,35193],{"class":51,"line":1085},[49,35194,3654],{"emptyLinePlaceholder":1330},[49,35196,35197],{"class":51,"line":2574},[49,35198,35199],{"class":55},"# 测试数据处理\n",[49,35201,35202,35204,35207],{"class":51,"line":2586},[49,35203,33195],{"class":109},[49,35205,35206],{"class":62}," test_data_process",[49,35208,33201],{"class":66},[49,35210,35211,35214,35216,35218,35220,35222,35224],{"class":51,"line":2867},[49,35212,35213],{"class":66},"    test_data",[49,35215,1448],{"class":109},[49,35217,32703],{"class":66},[49,35219,32706],{"class":6468},[49,35221,1448],{"class":109},[49,35223,32711],{"class":1505},[49,35225,32714],{"class":66},[49,35227,35228,35231,35233,35236],{"class":51,"line":2872},[49,35229,35230],{"class":6468},"                           train",[49,35232,1448],{"class":109},[49,35234,35235],{"class":73},"False",[49,35237,32714],{"class":66},[49,35239,35240,35243,35245,35247,35249,35251,35253],{"class":51,"line":2878},[49,35241,35242],{"class":6468},"                           transform",[49,35244,1448],{"class":109},[49,35246,32741],{"class":66},[49,35248,32744],{"class":6468},[49,35250,1448],{"class":109},[49,35252,2291],{"class":73},[49,35254,32752],{"class":66},[49,35256,35257,35260,35262,35264],{"class":51,"line":2883},[49,35258,35259],{"class":6468},"                           download",[49,35261,1448],{"class":109},[49,35263,32724],{"class":73},[49,35265,1409],{"class":66},[49,35267,35268,35271,35273,35275,35277,35279],{"class":51,"line":2897},[49,35269,35270],{"class":66},"    test_dataloader",[49,35272,1448],{"class":109},[49,35274,32782],{"class":66},[49,35276,32785],{"class":6468},[49,35278,1448],{"class":109},[49,35280,35281],{"class":66},"test_data,\n",[49,35283,35284],{"class":51,"line":2902},[49,35285,35286],{"class":55},"                                    # 这里是一张一张进行测试\n",[49,35288,35289,35292,35294,35296],{"class":51,"line":2908},[49,35290,35291],{"class":6468},"                                    batch_size",[49,35293,1448],{"class":109},[49,35295,159],{"class":73},[49,35297,32714],{"class":66},[49,35299,35300,35303,35305,35307],{"class":51,"line":2929},[49,35301,35302],{"class":6468},"                                    shuffle",[49,35304,1448],{"class":109},[49,35306,32724],{"class":73},[49,35308,32714],{"class":66},[49,35310,35311,35314,35316,35318],{"class":51,"line":2934},[49,35312,35313],{"class":6468},"                                    num_workers",[49,35315,1448],{"class":109},[49,35317,80],{"class":73},[49,35319,1409],{"class":66},[49,35321,35322,35324],{"class":51,"line":2948},[49,35323,5344],{"class":109},[49,35325,35326],{"class":66}," test_dataloader\n",[49,35328,35329],{"class":51,"line":2953},[49,35330,3654],{"emptyLinePlaceholder":1330},[49,35332,35333],{"class":51,"line":2982},[49,35334,35335],{"class":55},"# 定义模型测试函数\n",[49,35337,35338,35340,35343],{"class":51,"line":2987},[49,35339,33195],{"class":109},[49,35341,35342],{"class":62}," test_model_process",[49,35344,35345],{"class":66},"(model,test_dataloader):\n",[49,35347,35348],{"class":51,"line":3004},[49,35349,35350],{"class":55},"    # 将模型放到设备当中，先进行判断\n",[49,35352,35353,35355,35357,35359,35361,35363,35365],{"class":51,"line":3009},[49,35354,32485],{"class":66},[49,35356,1448],{"class":109},[49,35358,32492],{"class":1505},[49,35360,2959],{"class":109},[49,35362,32497],{"class":66},[49,35364,2956],{"class":109},[49,35366,35367],{"class":1505}," \"cpu\"\n",[49,35369,35370,35372,35374],{"class":51,"line":3014},[49,35371,32537],{"class":66},[49,35373,1448],{"class":109},[49,35375,33537],{"class":66},[49,35377,35378],{"class":51,"line":3019},[49,35379,3654],{"emptyLinePlaceholder":1330},[49,35381,35382],{"class":51,"line":3033},[49,35383,35384],{"class":55},"    # 设置初始化参数\n",[49,35386,35387,35390,35392],{"class":51,"line":3038},[49,35388,35389],{"class":66},"    test_corrects",[49,35391,1448],{"class":109},[49,35393,33590],{"class":73},[49,35395,35396,35399,35401],{"class":51,"line":3831},[49,35397,35398],{"class":66},"    test_num",[49,35400,1448],{"class":109},[49,35402,4339],{"class":73},[49,35404,35405],{"class":51,"line":3845},[49,35406,3654],{"emptyLinePlaceholder":1330},[49,35408,35409],{"class":51,"line":3853},[49,35410,35411],{"class":55},"    # 进行模型测试\n",[49,35413,35414],{"class":51,"line":3858},[49,35415,35416],{"class":55},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[49,35418,35419],{"class":51,"line":3864},[49,35420,35421],{"class":55},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[49,35423,35424,35427],{"class":51,"line":3870},[49,35425,35426],{"class":109},"    with",[49,35428,34132],{"class":66},[49,35430,35431],{"class":51,"line":3875},[49,35432,35433],{"class":55},"        # 从数据中进行\n",[49,35435,35436,35438,35441,35443],{"class":51,"line":9200},[49,35437,4657],{"class":109},[49,35439,35440],{"class":66}," test_data_x,test_data_y ",[49,35442,27292],{"class":109},[49,35444,35445],{"class":66}," test_dataloader:\n",[49,35447,35448,35451,35453],{"class":51,"line":9224},[49,35449,35450],{"class":66},"            test_data_x",[49,35452,1448],{"class":109},[49,35454,35455],{"class":66},"test_data_x.to(device)\n",[49,35457,35458,35461,35463],{"class":51,"line":9229},[49,35459,35460],{"class":66},"            test_data_y",[49,35462,1448],{"class":109},[49,35464,35465],{"class":66},"test_data_y.to(device)\n",[49,35467,35468],{"class":51,"line":9235},[49,35469,35470],{"class":55},"            # 设置为验证模式\n",[49,35472,35473],{"class":51,"line":9262},[49,35474,34123],{"class":66},[49,35476,35477],{"class":51,"line":9267},[49,35478,35479],{"class":55},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[49,35481,35482,35484,35486],{"class":51,"line":9273},[49,35483,33908],{"class":66},[49,35485,1448],{"class":109},[49,35487,35488],{"class":66},"model(test_data_x)\n",[49,35490,35491],{"class":51,"line":9285},[49,35492,35493],{"class":55},"            # 查找每一行中最大值对应的下标\n",[49,35495,35496,35498,35500,35502,35504,35506,35508],{"class":51,"line":9297},[49,35497,33925],{"class":66},[49,35499,1448],{"class":109},[49,35501,33930],{"class":66},[49,35503,33933],{"class":6468},[49,35505,1448],{"class":109},[49,35507,159],{"class":73},[49,35509,1409],{"class":66},[49,35511,35512],{"class":51,"line":9309},[49,35513,35514],{"class":55},"            # 计算正确率\n",[49,35516,35517],{"class":51,"line":10968},[49,35518,35519],{"class":55},"            # .data表示是一个不带梯度信息的tensor\n",[49,35521,35522],{"class":51,"line":10993},[49,35523,35524],{"class":55},"            # 如果预测正确，则准确度test_corrects加1\n",[49,35526,35527,35530,35532,35534,35536],{"class":51,"line":11016},[49,35528,35529],{"class":66},"            test_corrects",[49,35531,10729],{"class":109},[49,35533,34035],{"class":66},[49,35535,4203],{"class":109},[49,35537,35538],{"class":66},"test_data_y.data)\n",[49,35540,35541],{"class":51,"line":11040},[49,35542,35543],{"class":55},"            # 将所有的测试样本进行累计\n",[49,35545,35546,35549,35551,35554,35556],{"class":51,"line":11045},[49,35547,35548],{"class":66},"            test_num",[49,35550,10729],{"class":109},[49,35552,35553],{"class":66},"test_data_x.size(",[49,35555,80],{"class":73},[49,35557,1409],{"class":66},[49,35559,35560],{"class":51,"line":11050},[49,35561,3654],{"emptyLinePlaceholder":1330},[49,35563,35564],{"class":51,"line":11055},[49,35565,35566],{"class":55},"        # 计算准确度\n",[49,35568,35569,35572,35574,35577,35579],{"class":51,"line":11064},[49,35570,35571],{"class":66},"        test_acc",[49,35573,1448],{"class":109},[49,35575,35576],{"class":66},"test_corrects.double().item()",[49,35578,1975],{"class":109},[49,35580,35581],{"class":66},"test_num\n",[49,35583,35584],{"class":51,"line":11069},[49,35585,35586],{"class":55},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[49,35588,35589,35591,35593,35596],{"class":51,"line":11075},[49,35590,33699],{"class":73},[49,35592,1403],{"class":66},[49,35594,35595],{"class":1505},"\"测试的准确率：\"",[49,35597,35598],{"class":66},",test_acc)\n",[49,35600,35601],{"class":51,"line":11096},[49,35602,3654],{"emptyLinePlaceholder":1330},[49,35604,35605],{"class":51,"line":11102},[49,35606,35607],{"class":55},"# 实现模型的测试功能\n",[49,35609,35610,35612,35614,35616,35618],{"class":51,"line":11116},[49,35611,2787],{"class":109},[49,35613,32468],{"class":73},[49,35615,4203],{"class":109},[49,35617,32473],{"class":1505},[49,35619,4993],{"class":66},[49,35621,35622],{"class":51,"line":11122},[49,35623,35624],{"class":55},"    # 加载模型\n",[49,35626,35627,35629,35631],{"class":51,"line":11149},[49,35628,32537],{"class":66},[49,35630,1448],{"class":109},[49,35632,35073],{"class":66},[49,35634,35635],{"class":51,"line":11158},[49,35636,35637],{"class":55},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[49,35639,35640],{"class":51,"line":11164},[49,35641,35642],{"class":55},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[49,35644,35645,35648,35651],{"class":51,"line":11172},[49,35646,35647],{"class":66},"    model.load_state_dict(torch.load(",[49,35649,35650],{"class":1505},"'best_model.pth'",[49,35652,31745],{"class":66},[49,35654,35655],{"class":51,"line":11177},[49,35656,35657],{"class":55},"    # 数据加载\n",[49,35659,35660,35662,35664],{"class":51,"line":17854},[49,35661,35270],{"class":66},[49,35663,1448],{"class":109},[49,35665,35666],{"class":66},"test_data_process()\n",[49,35668,35669],{"class":51,"line":17860},[49,35670,35671],{"class":55},"    # 加载模型测试的函数\n",[49,35673,35674],{"class":51,"line":17883},[49,35675,35676],{"class":66},"    test_model_process(model,test_dataloader)\n",[49,35678,35679],{"class":51,"line":17889},[49,35680,3654],{"emptyLinePlaceholder":1330},[49,35682,35683],{"class":51,"line":17912},[49,35684,35685],{"class":55},"    # 验证集推理实现：\n",[49,35687,35688],{"class":51,"line":17926},[49,35689,35690],{"class":55},"    # 加载数据加载的更详细一些\n",[49,35692,35693,35695,35697,35699,35701,35703,35705],{"class":51,"line":17946},[49,35694,32485],{"class":66},[49,35696,1448],{"class":109},[49,35698,32492],{"class":1505},[49,35700,2959],{"class":109},[49,35702,32497],{"class":66},[49,35704,2956],{"class":109},[49,35706,35367],{"class":1505},[49,35708,35709,35711,35713],{"class":51,"line":17952},[49,35710,32537],{"class":66},[49,35712,1448],{"class":109},[49,35714,33537],{"class":66},[49,35716,35717],{"class":51,"line":17963},[49,35718,35719],{"class":55},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[49,35721,35722],{"class":51,"line":17986},[49,35723,35724],{"class":55},"    # 顺序不可改变\n",[49,35726,35727,35730,35732,35734,35737,35739,35742,35744,35747,35749,35752,35754,35757,35759,35762,35764,35767,35769,35772,35774,35777,35779,35782],{"class":51,"line":18008},[49,35728,35729],{"class":66},"    classes",[49,35731,1448],{"class":109},[49,35733,2280],{"class":66},[49,35735,35736],{"class":1505},"'T-shirt\u002Ftop'",[49,35738,1770],{"class":66},[49,35740,35741],{"class":1505},"'Trouser'",[49,35743,1770],{"class":66},[49,35745,35746],{"class":1505},"'Pullover'",[49,35748,1770],{"class":66},[49,35750,35751],{"class":1505},"'Dress'",[49,35753,1770],{"class":66},[49,35755,35756],{"class":1505},"'Coat'",[49,35758,1770],{"class":66},[49,35760,35761],{"class":1505},"'Sandal'",[49,35763,1770],{"class":66},[49,35765,35766],{"class":1505},"'Shirt'",[49,35768,1770],{"class":66},[49,35770,35771],{"class":1505},"'Sneaker'",[49,35773,1770],{"class":66},[49,35775,35776],{"class":1505},"'Bag'",[49,35778,1770],{"class":66},[49,35780,35781],{"class":1505},"'Ankle boot'",[49,35783,34494],{"class":66},[49,35785,35786,35788],{"class":51,"line":18013},[49,35787,35426],{"class":109},[49,35789,34132],{"class":66},[49,35791,35792],{"class":51,"line":18019},[49,35793,35794],{"class":55},"        # 将数据和标签都放到设备当中\n",[49,35796,35797,35799,35802,35804],{"class":51,"line":18033},[49,35798,4657],{"class":109},[49,35800,35801],{"class":66}," b_x,b_y ",[49,35803,27292],{"class":109},[49,35805,35445],{"class":66},[49,35807,35808,35810,35812],{"class":51,"line":18046},[49,35809,33858],{"class":66},[49,35811,1448],{"class":109},[49,35813,33863],{"class":66},[49,35815,35816,35818,35820],{"class":51,"line":18051},[49,35817,33873],{"class":66},[49,35819,1448],{"class":109},[49,35821,33878],{"class":66},[49,35823,35824],{"class":51,"line":18065},[49,35825,3654],{"emptyLinePlaceholder":1330},[49,35827,35828],{"class":51,"line":18070},[49,35829,35830],{"class":55},"            # 设置模型为验证模式\n",[49,35832,35833],{"class":51,"line":18076},[49,35834,34123],{"class":66},[49,35836,35837],{"class":51,"line":18081},[49,35838,35839],{"class":55},"            # 模型推理结果\n",[49,35841,35842,35844,35846],{"class":51,"line":18095},[49,35843,33908],{"class":66},[49,35845,1448],{"class":109},[49,35847,33913],{"class":66},[49,35849,35850],{"class":51,"line":18100},[49,35851,35852],{"class":55},"            # 获取最大下标，最大下标就是类别号\n",[49,35854,35855,35857,35859,35861,35863,35865,35867],{"class":51,"line":18105},[49,35856,33925],{"class":66},[49,35858,1448],{"class":109},[49,35860,33930],{"class":66},[49,35862,33933],{"class":6468},[49,35864,1448],{"class":109},[49,35866,159],{"class":73},[49,35868,1409],{"class":66},[49,35870,35871],{"class":51,"line":18119},[49,35872,35873],{"class":55},"            # 取出张量中的数值\n",[49,35875,35876,35879,35881],{"class":51,"line":18131},[49,35877,35878],{"class":66},"            result",[49,35880,1448],{"class":109},[49,35882,35883],{"class":66},"pre_lab.item()\n",[49,35885,35886,35889,35891],{"class":51,"line":18136},[49,35887,35888],{"class":66},"            label",[49,35890,1448],{"class":109},[49,35892,35893],{"class":66},"b_y.item()\n",[49,35895,35896,35899,35901,35904,35907,35910,35912,35915],{"class":51,"line":18149},[49,35897,35898],{"class":73},"            print",[49,35900,1403],{"class":66},[49,35902,35903],{"class":1505},"\"预测值：\"",[49,35905,35906],{"class":66},",classes[result],",[49,35908,35909],{"class":1505},"\"------\"",[49,35911,1770],{"class":66},[49,35913,35914],{"class":1505},"\"真实值：\"",[49,35916,35917],{"class":66},",classes[label])\n",[19,35919,35920],{},"（2）AlexNet",[591,35922,35923],{},[26,35924,35925],{},"神经网络构建",[39,35927,35929],{"className":31626,"code":35928,"language":31628,"meta":44,"style":44},"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",[46,35930,35931,35937,35947,35957,35969,35973,35990,35998,36013,36025,36067,36094,36137,36163,36207,36250,36293,36320,36324,36334,36339,36367,36386,36405,36409,36414,36422,36437,36447,36461,36471,36486,36501,36516,36527,36531,36536,36546,36561,36566,36580,36595,36607,36612,36623,36628,36634,36639,36651,36671,36676,36685],{"__ignoreMap":44},[49,35932,35933,35935],{"class":51,"line":52},[49,35934,31640],{"class":109},[49,35936,31643],{"class":66},[49,35938,35939,35941,35943,35945],{"class":51,"line":59},[49,35940,31985],{"class":109},[49,35942,31988],{"class":66},[49,35944,31640],{"class":109},[49,35946,31993],{"class":66},[49,35948,35949,35951,35953,35955],{"class":51,"line":70},[49,35950,31985],{"class":109},[49,35952,32005],{"class":66},[49,35954,31640],{"class":109},[49,35956,32010],{"class":66},[49,35958,35959,35961,35964,35966],{"class":51,"line":86},[49,35960,31640],{"class":109},[49,35962,35963],{"class":66}," torch.nn.functional ",[49,35965,32631],{"class":109},[49,35967,35968],{"class":66}," F\n",[49,35970,35971],{"class":51,"line":98},[49,35972,3654],{"emptyLinePlaceholder":1330},[49,35974,35975,35977,35980,35982,35984,35986,35988],{"class":51,"line":121},[49,35976,15945],{"class":109},[49,35978,35979],{"class":62}," AlexNet",[49,35981,1403],{"class":66},[49,35983,32026],{"class":62},[49,35985,1949],{"class":66},[49,35987,32031],{"class":62},[49,35989,32034],{"class":66},[49,35991,35992,35994,35996],{"class":51,"line":134},[49,35993,32049],{"class":109},[49,35995,32052],{"class":73},[49,35997,32055],{"class":66},[49,35999,36000,36002,36005,36007,36009,36011],{"class":51,"line":1085},[49,36001,32065],{"class":73},[49,36003,36004],{"class":66},"(AlexNet,",[49,36006,32071],{"class":73},[49,36008,32074],{"class":66},[49,36010,32077],{"class":73},[49,36012,3230],{"class":66},[49,36014,36015,36017,36020,36022],{"class":51,"line":2574},[49,36016,32093],{"class":73},[49,36018,36019],{"class":66},".ReLu",[49,36021,1448],{"class":109},[49,36023,36024],{"class":66},"nn.ReLU()\n",[49,36026,36027,36029,36031,36033,36035,36037,36039,36041,36043,36045,36047,36049,36051,36053,36055,36057,36059,36061,36063,36065],{"class":51,"line":2586},[49,36028,32093],{"class":73},[49,36030,32096],{"class":66},[49,36032,1448],{"class":109},[49,36034,32101],{"class":66},[49,36036,32104],{"class":6468},[49,36038,1448],{"class":109},[49,36040,159],{"class":73},[49,36042,1770],{"class":66},[49,36044,32113],{"class":6468},[49,36046,1448],{"class":109},[49,36048,1602],{"class":73},[49,36050,1770],{"class":66},[49,36052,32122],{"class":6468},[49,36054,1448],{"class":109},[49,36056,1863],{"class":73},[49,36058,1770],{"class":66},[49,36060,32177],{"class":6468},[49,36062,1448],{"class":109},[49,36064,1685],{"class":73},[49,36066,1409],{"class":66},[49,36068,36069,36071,36073,36075,36078,36080,36082,36084,36086,36088,36090,36092],{"class":51,"line":2867},[49,36070,32093],{"class":73},[49,36072,32161],{"class":66},[49,36074,1448],{"class":109},[49,36076,36077],{"class":66},"nn.MaxPool2d(",[49,36079,32122],{"class":6468},[49,36081,1448],{"class":109},[49,36083,1472],{"class":73},[49,36085,1770],{"class":66},[49,36087,32177],{"class":6468},[49,36089,1448],{"class":109},[49,36091,1478],{"class":73},[49,36093,1409],{"class":66},[49,36095,36096,36098,36100,36102,36104,36106,36108,36110,36112,36114,36116,36119,36121,36123,36125,36127,36129,36131,36133,36135],{"class":51,"line":2872},[49,36097,32093],{"class":73},[49,36099,32190],{"class":66},[49,36101,1448],{"class":109},[49,36103,32101],{"class":66},[49,36105,32104],{"class":6468},[49,36107,1448],{"class":109},[49,36109,1602],{"class":73},[49,36111,1770],{"class":66},[49,36113,32113],{"class":6468},[49,36115,1448],{"class":109},[49,36117,36118],{"class":73},"256",[49,36120,1770],{"class":66},[49,36122,32122],{"class":6468},[49,36124,1448],{"class":109},[49,36126,1711],{"class":73},[49,36128,1770],{"class":66},[49,36130,32131],{"class":6468},[49,36132,1448],{"class":109},[49,36134,1478],{"class":73},[49,36136,1409],{"class":66},[49,36138,36139,36141,36143,36145,36147,36149,36151,36153,36155,36157,36159,36161],{"class":51,"line":2878},[49,36140,32093],{"class":73},[49,36142,32225],{"class":66},[49,36144,1448],{"class":109},[49,36146,36077],{"class":66},[49,36148,32122],{"class":6468},[49,36150,1448],{"class":109},[49,36152,1472],{"class":73},[49,36154,1770],{"class":66},[49,36156,32177],{"class":6468},[49,36158,1448],{"class":109},[49,36160,1478],{"class":73},[49,36162,1409],{"class":66},[49,36164,36165,36167,36170,36172,36174,36176,36178,36180,36182,36184,36186,36189,36191,36193,36195,36197,36199,36201,36203,36205],{"class":51,"line":2883},[49,36166,32093],{"class":73},[49,36168,36169],{"class":66},".c5",[49,36171,1448],{"class":109},[49,36173,32101],{"class":66},[49,36175,32104],{"class":6468},[49,36177,1448],{"class":109},[49,36179,36118],{"class":73},[49,36181,1770],{"class":66},[49,36183,32113],{"class":6468},[49,36185,1448],{"class":109},[49,36187,36188],{"class":73},"384",[49,36190,1770],{"class":66},[49,36192,32122],{"class":6468},[49,36194,1448],{"class":109},[49,36196,1472],{"class":73},[49,36198,1770],{"class":66},[49,36200,32131],{"class":6468},[49,36202,1448],{"class":109},[49,36204,159],{"class":73},[49,36206,1409],{"class":66},[49,36208,36209,36211,36214,36216,36218,36220,36222,36224,36226,36228,36230,36232,36234,36236,36238,36240,36242,36244,36246,36248],{"class":51,"line":2897},[49,36210,32093],{"class":73},[49,36212,36213],{"class":66},".c6",[49,36215,1448],{"class":109},[49,36217,32101],{"class":66},[49,36219,32104],{"class":6468},[49,36221,1448],{"class":109},[49,36223,36188],{"class":73},[49,36225,1770],{"class":66},[49,36227,32113],{"class":6468},[49,36229,1448],{"class":109},[49,36231,36188],{"class":73},[49,36233,1770],{"class":66},[49,36235,32122],{"class":6468},[49,36237,1448],{"class":109},[49,36239,1472],{"class":73},[49,36241,1770],{"class":66},[49,36243,32131],{"class":6468},[49,36245,1448],{"class":109},[49,36247,159],{"class":73},[49,36249,1409],{"class":66},[49,36251,36252,36254,36257,36259,36261,36263,36265,36267,36269,36271,36273,36275,36277,36279,36281,36283,36285,36287,36289,36291],{"class":51,"line":2902},[49,36253,32093],{"class":73},[49,36255,36256],{"class":66},".c7",[49,36258,1448],{"class":109},[49,36260,32101],{"class":66},[49,36262,32104],{"class":6468},[49,36264,1448],{"class":109},[49,36266,36188],{"class":73},[49,36268,1770],{"class":66},[49,36270,32113],{"class":6468},[49,36272,1448],{"class":109},[49,36274,36118],{"class":73},[49,36276,1770],{"class":66},[49,36278,32122],{"class":6468},[49,36280,1448],{"class":109},[49,36282,1472],{"class":73},[49,36284,1770],{"class":66},[49,36286,32131],{"class":6468},[49,36288,1448],{"class":109},[49,36290,159],{"class":73},[49,36292,1409],{"class":66},[49,36294,36295,36297,36300,36302,36304,36306,36308,36310,36312,36314,36316,36318],{"class":51,"line":2908},[49,36296,32093],{"class":73},[49,36298,36299],{"class":66},".s8",[49,36301,1448],{"class":109},[49,36303,36077],{"class":66},[49,36305,32122],{"class":6468},[49,36307,1448],{"class":109},[49,36309,1472],{"class":73},[49,36311,1770],{"class":66},[49,36313,32177],{"class":6468},[49,36315,1448],{"class":109},[49,36317,1478],{"class":73},[49,36319,1409],{"class":66},[49,36321,36322],{"class":51,"line":2929},[49,36323,32250],{"class":55},[49,36325,36326,36328,36330,36332],{"class":51,"line":2934},[49,36327,32093],{"class":73},[49,36329,32257],{"class":66},[49,36331,1448],{"class":109},[49,36333,32262],{"class":66},[49,36335,36336],{"class":51,"line":2948},[49,36337,36338],{"class":55},"       # 定义全连接层\n",[49,36340,36341,36343,36346,36348,36350,36352,36354,36356,36358,36360,36362,36365],{"class":51,"line":2953},[49,36342,32093],{"class":73},[49,36344,36345],{"class":66},".f1",[49,36347,1448],{"class":109},[49,36349,32279],{"class":66},[49,36351,1736],{"class":73},[49,36353,1846],{"class":109},[49,36355,1736],{"class":73},[49,36357,1846],{"class":109},[49,36359,36118],{"class":73},[49,36361,1770],{"class":66},[49,36363,36364],{"class":73},"4096",[49,36366,1409],{"class":66},[49,36368,36369,36371,36374,36376,36378,36380,36382,36384],{"class":51,"line":2982},[49,36370,32093],{"class":73},[49,36372,36373],{"class":66},".f2",[49,36375,1448],{"class":109},[49,36377,32279],{"class":66},[49,36379,36364],{"class":73},[49,36381,1770],{"class":66},[49,36383,36364],{"class":73},[49,36385,1409],{"class":66},[49,36387,36388,36390,36393,36395,36397,36399,36401,36403],{"class":51,"line":2987},[49,36389,32093],{"class":73},[49,36391,36392],{"class":66},".f3",[49,36394,1448],{"class":109},[49,36396,32279],{"class":66},[49,36398,36364],{"class":73},[49,36400,1770],{"class":66},[49,36402,106],{"class":73},[49,36404,1409],{"class":66},[49,36406,36407],{"class":51,"line":3004},[49,36408,3654],{"emptyLinePlaceholder":1330},[49,36410,36411],{"class":51,"line":3009},[49,36412,36413],{"class":55},"    # 定义前向传播\n",[49,36415,36416,36418,36420],{"class":51,"line":3014},[49,36417,32049],{"class":109},[49,36419,32341],{"class":62},[49,36421,32344],{"class":66},[49,36423,36424,36426,36428,36430,36433,36435],{"class":51,"line":3019},[49,36425,32349],{"class":66},[49,36427,1448],{"class":109},[49,36429,32071],{"class":73},[49,36431,36432],{"class":66},".ReLu(",[49,36434,32071],{"class":73},[49,36436,32361],{"class":66},[49,36438,36439,36441,36443,36445],{"class":51,"line":3033},[49,36440,32349],{"class":66},[49,36442,1448],{"class":109},[49,36444,32071],{"class":73},[49,36446,32372],{"class":66},[49,36448,36449,36451,36453,36455,36457,36459],{"class":51,"line":3038},[49,36450,32349],{"class":66},[49,36452,1448],{"class":109},[49,36454,32071],{"class":73},[49,36456,36432],{"class":66},[49,36458,32071],{"class":73},[49,36460,32387],{"class":66},[49,36462,36463,36465,36467,36469],{"class":51,"line":3831},[49,36464,32349],{"class":66},[49,36466,1448],{"class":109},[49,36468,32071],{"class":73},[49,36470,32398],{"class":66},[49,36472,36473,36475,36477,36479,36481,36483],{"class":51,"line":3845},[49,36474,32349],{"class":66},[49,36476,1448],{"class":109},[49,36478,32071],{"class":73},[49,36480,36432],{"class":66},[49,36482,32071],{"class":73},[49,36484,36485],{"class":66},".c5(x))\n",[49,36487,36488,36490,36492,36494,36496,36498],{"class":51,"line":3853},[49,36489,32349],{"class":66},[49,36491,1448],{"class":109},[49,36493,32071],{"class":73},[49,36495,36432],{"class":66},[49,36497,32071],{"class":73},[49,36499,36500],{"class":66},".c6(x))\n",[49,36502,36503,36505,36507,36509,36511,36513],{"class":51,"line":3858},[49,36504,32349],{"class":66},[49,36506,1448],{"class":109},[49,36508,32071],{"class":73},[49,36510,36432],{"class":66},[49,36512,32071],{"class":73},[49,36514,36515],{"class":66},".c7(x))\n",[49,36517,36518,36520,36522,36524],{"class":51,"line":3864},[49,36519,32349],{"class":66},[49,36521,1448],{"class":109},[49,36523,32071],{"class":73},[49,36525,36526],{"class":66},".s8(x)\n",[49,36528,36529],{"class":51,"line":3870},[49,36530,3654],{"emptyLinePlaceholder":1330},[49,36532,36533],{"class":51,"line":3875},[49,36534,36535],{"class":55},"        # 展平加线性全连接层\n",[49,36537,36538,36540,36542,36544],{"class":51,"line":9200},[49,36539,32349],{"class":66},[49,36541,1448],{"class":109},[49,36543,32071],{"class":73},[49,36545,32409],{"class":66},[49,36547,36548,36550,36552,36554,36556,36558],{"class":51,"line":9224},[49,36549,32349],{"class":66},[49,36551,1448],{"class":109},[49,36553,32071],{"class":73},[49,36555,36432],{"class":66},[49,36557,32071],{"class":73},[49,36559,36560],{"class":66},".f1(x))\n",[49,36562,36563],{"class":51,"line":9229},[49,36564,36565],{"class":55},"        # 还需要dropout对神经元随机进行失活\n",[49,36567,36568,36570,36572,36575,36578],{"class":51,"line":9235},[49,36569,32349],{"class":66},[49,36571,1448],{"class":109},[49,36573,36574],{"class":66},"F.dropout(x,",[49,36576,36577],{"class":73},"0.5",[49,36579,1409],{"class":66},[49,36581,36582,36584,36586,36588,36590,36592],{"class":51,"line":9262},[49,36583,32349],{"class":66},[49,36585,1448],{"class":109},[49,36587,32071],{"class":73},[49,36589,36432],{"class":66},[49,36591,32071],{"class":73},[49,36593,36594],{"class":66},".f2(x))\n",[49,36596,36597,36599,36601,36603,36605],{"class":51,"line":9267},[49,36598,32349],{"class":66},[49,36600,1448],{"class":109},[49,36602,36574],{"class":66},[49,36604,36577],{"class":73},[49,36606,1409],{"class":66},[49,36608,36609],{"class":51,"line":9273},[49,36610,36611],{"class":55},"        # 直接输出\n",[49,36613,36614,36616,36618,36620],{"class":51,"line":9285},[49,36615,32349],{"class":66},[49,36617,1448],{"class":109},[49,36619,32071],{"class":73},[49,36621,36622],{"class":66},".f3(x)\n",[49,36624,36625],{"class":51,"line":9297},[49,36626,36627],{"class":55},"        # 前向传播输出\n",[49,36629,36630,36632],{"class":51,"line":9309},[49,36631,16003],{"class":109},[49,36633,32457],{"class":66},[49,36635,36636],{"class":51,"line":10968},[49,36637,36638],{"class":55},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[49,36640,36641,36643,36645,36647,36649],{"class":51,"line":10993},[49,36642,2787],{"class":109},[49,36644,32468],{"class":73},[49,36646,4203],{"class":109},[49,36648,32473],{"class":1505},[49,36650,4993],{"class":66},[49,36652,36653,36655,36657,36659,36661,36663,36665,36667,36669],{"class":51,"line":11016},[49,36654,32485],{"class":66},[49,36656,1448],{"class":109},[49,36658,31699],{"class":66},[49,36660,32492],{"class":1505},[49,36662,2959],{"class":109},[49,36664,32497],{"class":66},[49,36666,2956],{"class":109},[49,36668,31724],{"class":1505},[49,36670,1409],{"class":66},[49,36672,36673],{"class":51,"line":11040},[49,36674,36675],{"class":55},"    # 模型实例化，然后将实例化的模型放到设备中\n",[49,36677,36678,36680,36682],{"class":51,"line":11045},[49,36679,32537],{"class":66},[49,36681,1448],{"class":109},[49,36683,36684],{"class":66},"AlexNet().to(device)\n",[49,36686,36687,36689,36691,36693,36695,36698,36700,36702],{"class":51,"line":11050},[49,36688,32547],{"class":73},[49,36690,32550],{"class":66},[49,36692,159],{"class":73},[49,36694,1770],{"class":66},[49,36696,36697],{"class":73},"227",[49,36699,1770],{"class":66},[49,36701,36697],{"class":73},[49,36703,32563],{"class":66},[591,36705,36706],{"start":59},[26,36707,32576],{},[39,36709,36711],{"className":31626,"code":36710,"language":31628,"meta":44,"style":44},"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",[46,36712,36713,36719,36725,36735,36741,36751,36761,36771,36781,36791,36795,36806,36816,36820,36824,36828,36836,36848,36858,36874,36884,36916,36930,36940,36950,36954,36964,36978,36988,36998,37008,37014,37018,37022,37026,37030,37034,37042,37062,37066,37070,37074,37078,37082,37098,37102,37106,37114,37118,37122,37130,37134,37138,37142,37150,37154,37158,37162,37166,37174,37178,37186,37190,37198,37202,37210,37214,37222,37226,37230,37238,37242,37246,37250,37262,37286,37300,37304,37308,37312,37320,37324,37332,37336,37344,37348,37356,37360,37368,37372,37380,37384,37396,37400,37408,37412,37420,37424,37428,37432,37436,37444,37448,37464,37468,37476,37480,37484,37488,37492,37496,37500,37504,37520,37524,37536,37540,37552,37556,37568,37572,37580,37584,37592,37596,37600,37605,37611,37615,37624,37628,37645,37649,37658,37662,37680,37693,37698,37711,37715,37719,37727,37731,37735,37743,37747,37755,37759,37767,37771,37775,37817,37859,37863,37867,37883,37887,37903,37907,37911,37919,37923,37927,37939,37977,37982,37987,37996,38000,38014,38024,38030,38036,38042,38048,38052,38056,38062,38066,38070,38078,38082,38100,38104,38108,38112,38128,38132,38136,38140,38144,38148,38168,38188,38192,38196,38200,38208,38216,38220,38236,38256,38276,38280,38284,38292,38300,38304,38308,38312,38324,38328,38338,38346,38363],{"__ignoreMap":44},[49,36714,36715,36717],{"class":51,"line":52},[49,36716,31640],{"class":109},[49,36718,33070],{"class":66},[49,36720,36721,36723],{"class":51,"line":59},[49,36722,31640],{"class":109},[49,36724,33077],{"class":66},[49,36726,36727,36729,36731,36733],{"class":51,"line":70},[49,36728,31640],{"class":109},[49,36730,33088],{"class":66},[49,36732,32631],{"class":109},[49,36734,33093],{"class":66},[49,36736,36737,36739],{"class":51,"line":86},[49,36738,31640],{"class":109},[49,36740,31643],{"class":66},[49,36742,36743,36745,36747,36749],{"class":51,"line":98},[49,36744,31985],{"class":109},[49,36746,32663],{"class":66},[49,36748,31640],{"class":109},[49,36750,33110],{"class":66},[49,36752,36753,36755,36757,36759],{"class":51,"line":121},[49,36754,31985],{"class":109},[49,36756,32616],{"class":66},[49,36758,31640],{"class":109},[49,36760,32621],{"class":66},[49,36762,36763,36765,36767,36769],{"class":51,"line":134},[49,36764,31985],{"class":109},[49,36766,32646],{"class":66},[49,36768,31640],{"class":109},[49,36770,32651],{"class":66},[49,36772,36773,36775,36777,36779],{"class":51,"line":1085},[49,36774,31640],{"class":109},[49,36776,32663],{"class":66},[49,36778,32631],{"class":109},[49,36780,32668],{"class":66},[49,36782,36783,36785,36787,36789],{"class":51,"line":2574},[49,36784,31640],{"class":109},[49,36786,32680],{"class":66},[49,36788,32631],{"class":109},[49,36790,32685],{"class":66},[49,36792,36793],{"class":51,"line":2586},[49,36794,33155],{"class":55},[49,36796,36797,36799,36801,36803],{"class":51,"line":2867},[49,36798,31985],{"class":109},[49,36800,33162],{"class":66},[49,36802,31640],{"class":109},[49,36804,36805],{"class":66}," AlexNet\n",[49,36807,36808,36810,36812,36814],{"class":51,"line":2872},[49,36809,31985],{"class":109},[49,36811,31988],{"class":66},[49,36813,31640],{"class":109},[49,36815,31993],{"class":66},[49,36817,36818],{"class":51,"line":2878},[49,36819,3654],{"emptyLinePlaceholder":1330},[49,36821,36822],{"class":51,"line":2883},[49,36823,3654],{"emptyLinePlaceholder":1330},[49,36825,36826],{"class":51,"line":2897},[49,36827,33190],{"class":55},[49,36829,36830,36832,36834],{"class":51,"line":2902},[49,36831,33195],{"class":109},[49,36833,33198],{"class":62},[49,36835,33201],{"class":66},[49,36837,36838,36840,36842,36844,36846],{"class":51,"line":2908},[49,36839,33206],{"class":66},[49,36841,1448],{"class":109},[49,36843,32703],{"class":66},[49,36845,32711],{"class":1505},[49,36847,32714],{"class":66},[49,36849,36850,36852,36854,36856],{"class":51,"line":2929},[49,36851,33219],{"class":6468},[49,36853,1448],{"class":109},[49,36855,32724],{"class":73},[49,36857,32714],{"class":66},[49,36859,36860,36862,36864,36866,36868,36870,36872],{"class":51,"line":2934},[49,36861,33230],{"class":6468},[49,36863,1448],{"class":109},[49,36865,32741],{"class":66},[49,36867,32744],{"class":6468},[49,36869,1448],{"class":109},[49,36871,36697],{"class":73},[49,36873,32752],{"class":66},[49,36875,36876,36878,36880,36882],{"class":51,"line":2948},[49,36877,33247],{"class":6468},[49,36879,1448],{"class":109},[49,36881,32724],{"class":73},[49,36883,1409],{"class":66},[49,36885,36886,36888,36890,36892,36894,36896,36898,36900,36902,36904,36906,36908,36910,36912,36914],{"class":51,"line":2953},[49,36887,33258],{"class":66},[49,36889,1448],{"class":109},[49,36891,33263],{"class":66},[49,36893,33266],{"class":73},[49,36895,1403],{"class":66},[49,36897,33271],{"class":73},[49,36899,1846],{"class":109},[49,36901,8610],{"class":73},[49,36903,33278],{"class":66},[49,36905,33266],{"class":73},[49,36907,1403],{"class":66},[49,36909,33285],{"class":73},[49,36911,1846],{"class":109},[49,36913,8610],{"class":73},[49,36915,33292],{"class":66},[49,36917,36918,36920,36922,36924,36926,36928],{"class":51,"line":2982},[49,36919,33297],{"class":66},[49,36921,1448],{"class":109},[49,36923,33302],{"class":66},[49,36925,32785],{"class":6468},[49,36927,1448],{"class":109},[49,36929,32790],{"class":66},[49,36931,36932,36934,36936,36938],{"class":51,"line":2987},[49,36933,33313],{"class":6468},[49,36935,1448],{"class":109},[49,36937,33318],{"class":73},[49,36939,32714],{"class":66},[49,36941,36942,36944,36946,36948],{"class":51,"line":3004},[49,36943,33325],{"class":6468},[49,36945,1448],{"class":109},[49,36947,32724],{"class":73},[49,36949,32714],{"class":66},[49,36951,36952],{"class":51,"line":3009},[49,36953,33336],{"class":55},[49,36955,36956,36958,36960,36962],{"class":51,"line":3014},[49,36957,33341],{"class":6468},[49,36959,1448],{"class":109},[49,36961,1787],{"class":73},[49,36963,1409],{"class":66},[49,36965,36966,36968,36970,36972,36974,36976],{"class":51,"line":3019},[49,36967,33352],{"class":66},[49,36969,1448],{"class":109},[49,36971,32782],{"class":66},[49,36973,32785],{"class":6468},[49,36975,1448],{"class":109},[49,36977,33363],{"class":66},[49,36979,36980,36982,36984,36986],{"class":51,"line":3033},[49,36981,33368],{"class":6468},[49,36983,1448],{"class":109},[49,36985,33318],{"class":73},[49,36987,32714],{"class":66},[49,36989,36990,36992,36994,36996],{"class":51,"line":3038},[49,36991,33379],{"class":6468},[49,36993,1448],{"class":109},[49,36995,32724],{"class":73},[49,36997,32714],{"class":66},[49,36999,37000,37002,37004,37006],{"class":51,"line":3831},[49,37001,33390],{"class":6468},[49,37003,1448],{"class":109},[49,37005,1787],{"class":73},[49,37007,1409],{"class":66},[49,37009,37010,37012],{"class":51,"line":3845},[49,37011,5344],{"class":109},[49,37013,33403],{"class":66},[49,37015,37016],{"class":51,"line":3853},[49,37017,3654],{"emptyLinePlaceholder":1330},[49,37019,37020],{"class":51,"line":3858},[49,37021,33412],{"class":55},[49,37023,37024],{"class":51,"line":3864},[49,37025,33417],{"class":55},[49,37027,37028],{"class":51,"line":3870},[49,37029,3654],{"emptyLinePlaceholder":1330},[49,37031,37032],{"class":51,"line":3875},[49,37033,33426],{"class":55},[49,37035,37036,37038,37040],{"class":51,"line":9200},[49,37037,33195],{"class":109},[49,37039,33433],{"class":62},[49,37041,33436],{"class":66},[49,37043,37044,37046,37048,37050,37052,37054,37056,37058,37060],{"class":51,"line":9224},[49,37045,32485],{"class":66},[49,37047,1448],{"class":109},[49,37049,31699],{"class":66},[49,37051,32492],{"class":1505},[49,37053,2959],{"class":109},[49,37055,32497],{"class":66},[49,37057,2956],{"class":109},[49,37059,33455],{"class":1505},[49,37061,1409],{"class":66},[49,37063,37064],{"class":51,"line":9229},[49,37065,3654],{"emptyLinePlaceholder":1330},[49,37067,37068],{"class":51,"line":9235},[49,37069,3654],{"emptyLinePlaceholder":1330},[49,37071,37072],{"class":51,"line":9262},[49,37073,33470],{"class":55},[49,37075,37076],{"class":51,"line":9267},[49,37077,33475],{"class":55},[49,37079,37080],{"class":51,"line":9273},[49,37081,33480],{"class":55},[49,37083,37084,37086,37088,37090,37092,37094,37096],{"class":51,"line":9285},[49,37085,33485],{"class":66},[49,37087,1448],{"class":109},[49,37089,33490],{"class":66},[49,37091,33493],{"class":6468},[49,37093,1448],{"class":109},[49,37095,33498],{"class":73},[49,37097,1409],{"class":66},[49,37099,37100],{"class":51,"line":9297},[49,37101,3654],{"emptyLinePlaceholder":1330},[49,37103,37104],{"class":51,"line":9309},[49,37105,33509],{"class":55},[49,37107,37108,37110,37112],{"class":51,"line":10968},[49,37109,33514],{"class":66},[49,37111,1448],{"class":109},[49,37113,33519],{"class":66},[49,37115,37116],{"class":51,"line":10993},[49,37117,3654],{"emptyLinePlaceholder":1330},[49,37119,37120],{"class":51,"line":11016},[49,37121,33528],{"class":55},[49,37123,37124,37126,37128],{"class":51,"line":11040},[49,37125,32537],{"class":66},[49,37127,1448],{"class":109},[49,37129,33537],{"class":66},[49,37131,37132],{"class":51,"line":11045},[49,37133,33542],{"class":55},[49,37135,37136],{"class":51,"line":11050},[49,37137,33547],{"class":55},[49,37139,37140],{"class":51,"line":11055},[49,37141,33552],{"class":55},[49,37143,37144,37146,37148],{"class":51,"line":11064},[49,37145,33557],{"class":66},[49,37147,1448],{"class":109},[49,37149,33562],{"class":66},[49,37151,37152],{"class":51,"line":11069},[49,37153,3654],{"emptyLinePlaceholder":1330},[49,37155,37156],{"class":51,"line":11075},[49,37157,3654],{"emptyLinePlaceholder":1330},[49,37159,37160],{"class":51,"line":11096},[49,37161,33575],{"class":55},[49,37163,37164],{"class":51,"line":11102},[49,37165,33580],{"class":55},[49,37167,37168,37170,37172],{"class":51,"line":11116},[49,37169,33585],{"class":66},[49,37171,1448],{"class":109},[49,37173,33590],{"class":73},[49,37175,37176],{"class":51,"line":11122},[49,37177,33595],{"class":55},[49,37179,37180,37182,37184],{"class":51,"line":11149},[49,37181,33600],{"class":66},[49,37183,1448],{"class":109},[49,37185,33605],{"class":66},[49,37187,37188],{"class":51,"line":11158},[49,37189,33610],{"class":55},[49,37191,37192,37194,37196],{"class":51,"line":11164},[49,37193,33615],{"class":66},[49,37195,1448],{"class":109},[49,37197,33605],{"class":66},[49,37199,37200],{"class":51,"line":11172},[49,37201,33624],{"class":55},[49,37203,37204,37206,37208],{"class":51,"line":11177},[49,37205,33629],{"class":66},[49,37207,1448],{"class":109},[49,37209,33605],{"class":66},[49,37211,37212],{"class":51,"line":17854},[49,37213,33638],{"class":55},[49,37215,37216,37218,37220],{"class":51,"line":17860},[49,37217,33643],{"class":66},[49,37219,1448],{"class":109},[49,37221,33605],{"class":66},[49,37223,37224],{"class":51,"line":17883},[49,37225,3654],{"emptyLinePlaceholder":1330},[49,37227,37228],{"class":51,"line":17889},[49,37229,33656],{"class":55},[49,37231,37232,37234,37236],{"class":51,"line":17912},[49,37233,33661],{"class":66},[49,37235,1448],{"class":109},[49,37237,33666],{"class":66},[49,37239,37240],{"class":51,"line":17926},[49,37241,3654],{"emptyLinePlaceholder":1330},[49,37243,37244],{"class":51,"line":17946},[49,37245,3654],{"emptyLinePlaceholder":1330},[49,37247,37248],{"class":51,"line":17952},[49,37249,33679],{"class":55},[49,37251,37252,37254,37256,37258,37260],{"class":51,"line":17963},[49,37253,4455],{"class":109},[49,37255,33686],{"class":66},[49,37257,27292],{"class":109},[49,37259,33691],{"class":73},[49,37261,33694],{"class":66},[49,37263,37264,37266,37268,37270,37272,37274,37276,37278,37280,37282,37284],{"class":51,"line":17986},[49,37265,33699],{"class":73},[49,37267,1403],{"class":66},[49,37269,33704],{"class":1505},[49,37271,33707],{"class":73},[49,37273,1975],{"class":1505},[49,37275,33707],{"class":73},[49,37277,1643],{"class":1505},[49,37279,33716],{"class":66},[49,37281,1923],{"class":109},[49,37283,159],{"class":73},[49,37285,31745],{"class":66},[49,37287,37288,37290,37292,37294,37296,37298],{"class":51,"line":18008},[49,37289,33699],{"class":73},[49,37291,1403],{"class":66},[49,37293,33731],{"class":1505},[49,37295,1846],{"class":109},[49,37297,106],{"class":73},[49,37299,1409],{"class":66},[49,37301,37302],{"class":51,"line":18013},[49,37303,3654],{"emptyLinePlaceholder":1330},[49,37305,37306],{"class":51,"line":18019},[49,37307,33746],{"class":55},[49,37309,37310],{"class":51,"line":18033},[49,37311,33751],{"class":55},[49,37313,37314,37316,37318],{"class":51,"line":18046},[49,37315,33756],{"class":66},[49,37317,1448],{"class":109},[49,37319,33590],{"class":73},[49,37321,37322],{"class":51,"line":18051},[49,37323,33765],{"class":55},[49,37325,37326,37328,37330],{"class":51,"line":18065},[49,37327,33770],{"class":66},[49,37329,1448],{"class":109},[49,37331,4339],{"class":73},[49,37333,37334],{"class":51,"line":18070},[49,37335,33779],{"class":55},[49,37337,37338,37340,37342],{"class":51,"line":18076},[49,37339,33784],{"class":66},[49,37341,1448],{"class":109},[49,37343,33590],{"class":73},[49,37345,37346],{"class":51,"line":18081},[49,37347,33793],{"class":55},[49,37349,37350,37352,37354],{"class":51,"line":18095},[49,37351,33798],{"class":66},[49,37353,1448],{"class":109},[49,37355,4339],{"class":73},[49,37357,37358],{"class":51,"line":18100},[49,37359,33807],{"class":55},[49,37361,37362,37364,37366],{"class":51,"line":18105},[49,37363,33812],{"class":66},[49,37365,1448],{"class":109},[49,37367,4339],{"class":73},[49,37369,37370],{"class":51,"line":18119},[49,37371,33821],{"class":55},[49,37373,37374,37376,37378],{"class":51,"line":18131},[49,37375,33826],{"class":66},[49,37377,1448],{"class":109},[49,37379,4339],{"class":73},[49,37381,37382],{"class":51,"line":18136},[49,37383,33835],{"class":55},[49,37385,37386,37388,37390,37392,37394],{"class":51,"line":18149},[49,37387,4657],{"class":109},[49,37389,32849],{"class":66},[49,37391,27292],{"class":109},[49,37393,32854],{"class":73},[49,37395,33848],{"class":66},[49,37397,37398],{"class":51,"line":18154},[49,37399,33853],{"class":55},[49,37401,37402,37404,37406],{"class":51,"line":18159},[49,37403,33858],{"class":66},[49,37405,1448],{"class":109},[49,37407,33863],{"class":66},[49,37409,37410],{"class":51,"line":18164},[49,37411,33868],{"class":55},[49,37413,37414,37416,37418],{"class":51,"line":18177},[49,37415,33873],{"class":66},[49,37417,1448],{"class":109},[49,37419,33878],{"class":66},[49,37421,37422],{"class":51,"line":18182},[49,37423,33884],{"class":55},[49,37425,37426],{"class":51,"line":33881},[49,37427,33890],{"class":66},[49,37429,37430],{"class":51,"line":33887},[49,37431,33896],{"class":55},[49,37433,37434],{"class":51,"line":33893},[49,37435,33902],{"class":55},[49,37437,37438,37440,37442],{"class":51,"line":33899},[49,37439,33908],{"class":66},[49,37441,1448],{"class":109},[49,37443,33913],{"class":66},[49,37445,37446],{"class":51,"line":33905},[49,37447,33919],{"class":55},[49,37449,37450,37452,37454,37456,37458,37460,37462],{"class":51,"line":33916},[49,37451,33925],{"class":66},[49,37453,1448],{"class":109},[49,37455,33930],{"class":66},[49,37457,33933],{"class":6468},[49,37459,1448],{"class":109},[49,37461,159],{"class":73},[49,37463,1409],{"class":66},[49,37465,37466],{"class":51,"line":33922},[49,37467,33945],{"class":55},[49,37469,37470,37472,37474],{"class":51,"line":33942},[49,37471,33951],{"class":66},[49,37473,1448],{"class":109},[49,37475,33956],{"class":66},[49,37477,37478],{"class":51,"line":33948},[49,37479,33962],{"class":55},[49,37481,37482],{"class":51,"line":33959},[49,37483,33968],{"class":66},[49,37485,37486],{"class":51,"line":33965},[49,37487,33974],{"class":55},[49,37489,37490],{"class":51,"line":33971},[49,37491,33980],{"class":66},[49,37493,37494],{"class":51,"line":33977},[49,37495,33986],{"class":55},[49,37497,37498],{"class":51,"line":33983},[49,37499,33992],{"class":66},[49,37501,37502],{"class":51,"line":33989},[49,37503,33998],{"class":55},[49,37505,37506,37508,37510,37512,37514,37516,37518],{"class":51,"line":33995},[49,37507,34004],{"class":66},[49,37509,10729],{"class":109},[49,37511,34009],{"class":66},[49,37513,1846],{"class":109},[49,37515,34014],{"class":66},[49,37517,80],{"class":73},[49,37519,1409],{"class":66},[49,37521,37522],{"class":51,"line":34001},[49,37523,34024],{"class":55},[49,37525,37526,37528,37530,37532,37534],{"class":51,"line":34021},[49,37527,34030],{"class":66},[49,37529,10729],{"class":109},[49,37531,34035],{"class":66},[49,37533,4203],{"class":109},[49,37535,34040],{"class":66},[49,37537,37538],{"class":51,"line":34027},[49,37539,34046],{"class":55},[49,37541,37542,37544,37546,37548,37550],{"class":51,"line":34043},[49,37543,34052],{"class":66},[49,37545,10729],{"class":109},[49,37547,34014],{"class":66},[49,37549,80],{"class":73},[49,37551,1409],{"class":66},[49,37553,37554],{"class":51,"line":34049},[49,37555,34066],{"class":55},[49,37557,37558,37560,37562,37564,37566],{"class":51,"line":34063},[49,37559,4657],{"class":109},[49,37561,34074],{"class":66},[49,37563,27292],{"class":109},[49,37565,32854],{"class":73},[49,37567,34081],{"class":66},[49,37569,37570],{"class":51,"line":34069},[49,37571,34087],{"class":55},[49,37573,37574,37576,37578],{"class":51,"line":34084},[49,37575,33858],{"class":66},[49,37577,1448],{"class":109},[49,37579,33863],{"class":66},[49,37581,37582],{"class":51,"line":34090},[49,37583,34102],{"class":55},[49,37585,37586,37588,37590],{"class":51,"line":34099},[49,37587,33873],{"class":66},[49,37589,1448],{"class":109},[49,37591,33878],{"class":66},[49,37593,37594],{"class":51,"line":34105},[49,37595,34117],{"class":55},[49,37597,37598],{"class":51,"line":34114},[49,37599,34123],{"class":66},[49,37601,37602],{"class":51,"line":34120},[49,37603,37604],{"class":55},"            # 验证时不计算梯度以节省内存\u002F计算\n",[49,37606,37607,37609],{"class":51,"line":34126},[49,37608,34129],{"class":109},[49,37610,34132],{"class":66},[49,37612,37613],{"class":51,"line":34135},[49,37614,34138],{"class":55},[49,37616,37617,37620,37622],{"class":51,"line":34141},[49,37618,37619],{"class":66},"                output",[49,37621,1448],{"class":109},[49,37623,33913],{"class":66},[49,37625,37626],{"class":51,"line":34152},[49,37627,34155],{"class":55},[49,37629,37630,37633,37635,37637,37639,37641,37643],{"class":51,"line":34158},[49,37631,37632],{"class":66},"                pre_lab",[49,37634,1448],{"class":109},[49,37636,33930],{"class":66},[49,37638,33933],{"class":6468},[49,37640,1448],{"class":109},[49,37642,159],{"class":73},[49,37644,1409],{"class":66},[49,37646,37647],{"class":51,"line":34177},[49,37648,34180],{"class":55},[49,37650,37651,37654,37656],{"class":51,"line":34183},[49,37652,37653],{"class":66},"                val_batch_loss",[49,37655,1448],{"class":109},[49,37657,33956],{"class":66},[49,37659,37660],{"class":51,"line":34194},[49,37661,34197],{"class":55},[49,37663,37664,37667,37669,37672,37674,37676,37678],{"class":51,"line":34200},[49,37665,37666],{"class":66},"                val_loss",[49,37668,10729],{"class":109},[49,37670,37671],{"class":66},"val_batch_loss.item()",[49,37673,1846],{"class":109},[49,37675,34014],{"class":66},[49,37677,80],{"class":73},[49,37679,1409],{"class":66},[49,37681,37682,37685,37687,37689,37691],{"class":51,"line":34220},[49,37683,37684],{"class":66},"                val_corrects",[49,37686,10729],{"class":109},[49,37688,34035],{"class":66},[49,37690,4203],{"class":109},[49,37692,34040],{"class":66},[49,37694,37695],{"class":51,"line":34236},[49,37696,37697],{"class":55},"            # 当前用于验证的样本数量\n",[49,37699,37700,37703,37705,37707,37709],{"class":51,"line":34242},[49,37701,37702],{"class":66},"            val_num",[49,37704,10729],{"class":109},[49,37706,34014],{"class":66},[49,37708,80],{"class":73},[49,37710,1409],{"class":66},[49,37712,37713],{"class":51,"line":34256},[49,37714,34259],{"class":55},[49,37716,37717],{"class":51,"line":34262},[49,37718,34265],{"class":55},[49,37720,37721,37723,37725],{"class":51,"line":34268},[49,37722,34271],{"class":66},[49,37724,1975],{"class":109},[49,37726,34276],{"class":66},[49,37728,37729],{"class":51,"line":34279},[49,37730,34282],{"class":55},[49,37732,37733],{"class":51,"line":34285},[49,37734,34288],{"class":55},[49,37736,37737,37739,37741],{"class":51,"line":34291},[49,37738,34294],{"class":66},[49,37740,1975],{"class":109},[49,37742,34276],{"class":66},[49,37744,37745],{"class":51,"line":34301},[49,37746,34304],{"class":55},[49,37748,37749,37751,37753],{"class":51,"line":34307},[49,37750,34310],{"class":66},[49,37752,1975],{"class":109},[49,37754,34315],{"class":66},[49,37756,37757],{"class":51,"line":34318},[49,37758,34321],{"class":55},[49,37760,37761,37763,37765],{"class":51,"line":34324},[49,37762,34327],{"class":66},[49,37764,1975],{"class":109},[49,37766,34315],{"class":66},[49,37768,37769],{"class":51,"line":34334},[49,37770,3654],{"emptyLinePlaceholder":1330},[49,37772,37773],{"class":51,"line":34339},[49,37774,34342],{"class":55},[49,37776,37777,37779,37781,37783,37785,37787,37789,37791,37793,37795,37797,37799,37801,37803,37805,37807,37809,37811,37813,37815],{"class":51,"line":34345},[49,37778,33699],{"class":73},[49,37780,1403],{"class":66},[49,37782,4846],{"class":1505},[49,37784,33707],{"class":73},[49,37786,34356],{"class":1505},[49,37788,2286],{"class":73},[49,37790,34361],{"class":109},[49,37792,620],{"class":73},[49,37794,34366],{"class":1505},[49,37796,2286],{"class":73},[49,37798,34361],{"class":109},[49,37800,620],{"class":73},[49,37802,4846],{"class":1505},[49,37804,34377],{"class":66},[49,37806,1923],{"class":109},[49,37808,159],{"class":73},[49,37810,34384],{"class":66},[49,37812,1923],{"class":109},[49,37814,159],{"class":73},[49,37816,34391],{"class":66},[49,37818,37819,37821,37823,37825,37827,37829,37831,37833,37835,37837,37839,37841,37843,37845,37847,37849,37851,37853,37855,37857],{"class":51,"line":34394},[49,37820,33699],{"class":73},[49,37822,1403],{"class":66},[49,37824,4846],{"class":1505},[49,37826,33707],{"class":73},[49,37828,34405],{"class":1505},[49,37830,2286],{"class":73},[49,37832,34361],{"class":109},[49,37834,620],{"class":73},[49,37836,34414],{"class":1505},[49,37838,2286],{"class":73},[49,37840,34361],{"class":109},[49,37842,620],{"class":73},[49,37844,4846],{"class":1505},[49,37846,34425],{"class":66},[49,37848,1923],{"class":109},[49,37850,159],{"class":73},[49,37852,34432],{"class":66},[49,37854,1923],{"class":109},[49,37856,159],{"class":73},[49,37858,34391],{"class":66},[49,37860,37861],{"class":51,"line":34441},[49,37862,3654],{"emptyLinePlaceholder":1330},[49,37864,37865],{"class":51,"line":34446},[49,37866,34449],{"class":55},[49,37868,37869,37871,37873,37875,37877,37879,37881],{"class":51,"line":34452},[49,37870,3751],{"class":109},[49,37872,34457],{"class":66},[49,37874,1923],{"class":109},[49,37876,159],{"class":73},[49,37878,2330],{"class":66},[49,37880,2349],{"class":109},[49,37882,34468],{"class":66},[49,37884,37885],{"class":51,"line":34471},[49,37886,34474],{"class":55},[49,37888,37889,37891,37893,37895,37897,37899,37901],{"class":51,"line":34477},[49,37890,34480],{"class":66},[49,37892,1442],{"class":73},[49,37894,1448],{"class":109},[49,37896,34487],{"class":66},[49,37898,1923],{"class":109},[49,37900,159],{"class":73},[49,37902,34494],{"class":66},[49,37904,37905],{"class":51,"line":34497},[49,37906,34500],{"class":55},[49,37908,37909],{"class":51,"line":34503},[49,37910,34506],{"class":55},[49,37912,37913,37915,37917],{"class":51,"line":34509},[49,37914,34512],{"class":66},[49,37916,1448],{"class":109},[49,37918,33562],{"class":66},[49,37920,37921],{"class":51,"line":34519},[49,37922,3654],{"emptyLinePlaceholder":1330},[49,37924,37925],{"class":51,"line":34524},[49,37926,34527],{"class":55},[49,37928,37929,37931,37933,37935,37937],{"class":51,"line":34530},[49,37930,34533],{"class":66},[49,37932,1448],{"class":109},[49,37934,34538],{"class":66},[49,37936,1923],{"class":109},[49,37938,34543],{"class":66},[49,37940,37941,37943,37945,37947,37949,37951,37953,37955,37957,37959,37961,37963,37965,37967,37969,37971,37973,37975],{"class":51,"line":34546},[49,37942,33699],{"class":73},[49,37944,1403],{"class":66},[49,37946,34553],{"class":1505},[49,37948,2286],{"class":73},[49,37950,34558],{"class":109},[49,37952,620],{"class":73},[49,37954,1935],{"class":1505},[49,37956,2286],{"class":73},[49,37958,34558],{"class":109},[49,37960,620],{"class":73},[49,37962,34571],{"class":1505},[49,37964,34574],{"class":66},[49,37966,34577],{"class":109},[49,37968,2297],{"class":73},[49,37970,34582],{"class":66},[49,37972,1720],{"class":109},[49,37974,2297],{"class":73},[49,37976,31745],{"class":66},[49,37978,37979],{"class":51,"line":34591},[49,37980,37981],{"class":55},"    # 选择最优参数并保存\n",[49,37983,37984],{"class":51,"line":34597},[49,37985,37986],{"class":55},"    # 保存最佳模型权重字典\n",[49,37988,37989,37992,37994],{"class":51,"line":34603},[49,37990,37991],{"class":66},"    torch.save(best_model_wts,",[49,37993,34615],{"class":1505},[49,37995,1409],{"class":66},[49,37997,37998],{"class":51,"line":34609},[49,37999,34635],{"class":55},[49,38001,38002,38004,38006,38008,38010,38012],{"class":51,"line":34620},[49,38003,34641],{"class":66},[49,38005,1448],{"class":109},[49,38007,34646],{"class":66},[49,38009,34649],{"class":6468},[49,38011,1448],{"class":109},[49,38013,2802],{"class":66},[49,38015,38016,38018,38020,38022],{"class":51,"line":34626},[49,38017,34659],{"class":1505},[49,38019,2249],{"class":66},[49,38021,34664],{"class":73},[49,38023,34667],{"class":66},[49,38025,38026,38028],{"class":51,"line":34632},[49,38027,34673],{"class":1505},[49,38029,34676],{"class":66},[49,38031,38032,38034],{"class":51,"line":34638},[49,38033,34682],{"class":1505},[49,38035,34685],{"class":66},[49,38037,38038,38040],{"class":51,"line":34656},[49,38039,34691],{"class":1505},[49,38041,34694],{"class":66},[49,38043,38044,38046],{"class":51,"line":34670},[49,38045,34700],{"class":1505},[49,38047,34703],{"class":66},[49,38049,38050],{"class":51,"line":34679},[49,38051,34709],{"class":66},[49,38053,38054],{"class":51,"line":34688},[49,38055,34715],{"class":55},[49,38057,38058,38060],{"class":51,"line":34697},[49,38059,5344],{"class":109},[49,38061,34723],{"class":66},[49,38063,38064],{"class":51,"line":34706},[49,38065,3654],{"emptyLinePlaceholder":1330},[49,38067,38068],{"class":51,"line":34712},[49,38069,34734],{"class":55},[49,38071,38072,38074,38076],{"class":51,"line":34718},[49,38073,33195],{"class":109},[49,38075,34742],{"class":62},[49,38077,34745],{"class":66},[49,38079,38080],{"class":51,"line":34726},[49,38081,34751],{"class":55},[49,38083,38084,38086,38088,38090,38092,38094,38096,38098],{"class":51,"line":34731},[49,38085,34757],{"class":66},[49,38087,32941],{"class":6468},[49,38089,1448],{"class":109},[49,38091,1403],{"class":66},[49,38093,1889],{"class":73},[49,38095,1770],{"class":66},[49,38097,1685],{"class":73},[49,38099,31745],{"class":66},[49,38101,38102],{"class":51,"line":34737},[49,38103,34777],{"class":55},[49,38105,38106],{"class":51,"line":34748},[49,38107,34783],{"class":55},[49,38109,38110],{"class":51,"line":34754},[49,38111,34789],{"class":55},[49,38113,38114,38116,38118,38120,38122,38124,38126],{"class":51,"line":34774},[49,38115,32975],{"class":66},[49,38117,159],{"class":73},[49,38119,1770],{"class":66},[49,38121,1478],{"class":73},[49,38123,1770],{"class":66},[49,38125,159],{"class":73},[49,38127,1409],{"class":66},[49,38129,38130],{"class":51,"line":34780},[49,38131,34812],{"class":55},[49,38133,38134],{"class":51,"line":34786},[49,38135,34818],{"class":55},[49,38137,38138],{"class":51,"line":34792},[49,38139,34824],{"class":55},[49,38141,38142],{"class":51,"line":34809},[49,38143,34830],{"class":55},[49,38145,38146],{"class":51,"line":34815},[49,38147,34836],{"class":55},[49,38149,38150,38152,38154,38156,38158,38160,38162,38164,38166],{"class":51,"line":34821},[49,38151,34842],{"class":66},[49,38153,34845],{"class":1505},[49,38155,34848],{"class":66},[49,38157,34851],{"class":1505},[49,38159,1770],{"class":66},[49,38161,34856],{"class":6468},[49,38163,1448],{"class":109},[49,38165,34861],{"class":1505},[49,38167,1409],{"class":66},[49,38169,38170,38172,38174,38176,38178,38180,38182,38184,38186],{"class":51,"line":34827},[49,38171,34842],{"class":66},[49,38173,34845],{"class":1505},[49,38175,34873],{"class":66},[49,38177,34876],{"class":1505},[49,38179,1770],{"class":66},[49,38181,34856],{"class":6468},[49,38183,1448],{"class":109},[49,38185,34885],{"class":1505},[49,38187,1409],{"class":66},[49,38189,38190],{"class":51,"line":34833},[49,38191,34893],{"class":55},[49,38193,38194],{"class":51,"line":34839},[49,38195,34899],{"class":66},[49,38197,38198],{"class":51,"line":34866},[49,38199,34905],{"class":55},[49,38201,38202,38204,38206],{"class":51,"line":34890},[49,38203,34911],{"class":66},[49,38205,34914],{"class":1505},[49,38207,1409],{"class":66},[49,38209,38210,38212,38214],{"class":51,"line":34896},[49,38211,34922],{"class":66},[49,38213,34925],{"class":1505},[49,38215,1409],{"class":66},[49,38217,38218],{"class":51,"line":34902},[49,38219,34933],{"class":55},[49,38221,38222,38224,38226,38228,38230,38232,38234],{"class":51,"line":34908},[49,38223,32975],{"class":66},[49,38225,159],{"class":73},[49,38227,1770],{"class":66},[49,38229,1478],{"class":73},[49,38231,1770],{"class":66},[49,38233,1478],{"class":73},[49,38235,1409],{"class":66},[49,38237,38238,38240,38242,38244,38246,38248,38250,38252,38254],{"class":51,"line":34919},[49,38239,34842],{"class":66},[49,38241,34845],{"class":1505},[49,38243,34960],{"class":66},[49,38245,34851],{"class":1505},[49,38247,1770],{"class":66},[49,38249,34856],{"class":6468},[49,38251,1448],{"class":109},[49,38253,34971],{"class":1505},[49,38255,1409],{"class":66},[49,38257,38258,38260,38262,38264,38266,38268,38270,38272,38274],{"class":51,"line":34930},[49,38259,34842],{"class":66},[49,38261,34845],{"class":1505},[49,38263,34983],{"class":66},[49,38265,34876],{"class":1505},[49,38267,1770],{"class":66},[49,38269,34856],{"class":6468},[49,38271,1448],{"class":109},[49,38273,34994],{"class":1505},[49,38275,1409],{"class":66},[49,38277,38278],{"class":51,"line":34936},[49,38279,35002],{"class":55},[49,38281,38282],{"class":51,"line":34953},[49,38283,34899],{"class":66},[49,38285,38286,38288,38290],{"class":51,"line":34976},[49,38287,34911],{"class":66},[49,38289,34845],{"class":1505},[49,38291,1409],{"class":66},[49,38293,38294,38296,38298],{"class":51,"line":34999},[49,38295,34922],{"class":66},[49,38297,35024],{"class":1505},[49,38299,1409],{"class":66},[49,38301,38302],{"class":51,"line":35005},[49,38303,35032],{"class":66},[49,38305,38306],{"class":51,"line":35010},[49,38307,3654],{"emptyLinePlaceholder":1330},[49,38309,38310],{"class":51,"line":35019},[49,38311,35043],{"class":55},[49,38313,38314,38316,38318,38320,38322],{"class":51,"line":35029},[49,38315,2787],{"class":109},[49,38317,32468],{"class":73},[49,38319,4203],{"class":109},[49,38321,32473],{"class":1505},[49,38323,4993],{"class":66},[49,38325,38326],{"class":51,"line":35035},[49,38327,35062],{"class":55},[49,38329,38330,38333,38335],{"class":51,"line":35040},[49,38331,38332],{"class":66},"    AlexNet",[49,38334,1448],{"class":109},[49,38336,38337],{"class":66},"AlexNet()\n",[49,38339,38340,38342,38344],{"class":51,"line":35046},[49,38341,35079],{"class":66},[49,38343,1448],{"class":109},[49,38345,35084],{"class":66},[49,38347,38348,38350,38352,38355,38357,38359,38361],{"class":51,"line":35059},[49,38349,34641],{"class":66},[49,38351,1448],{"class":109},[49,38353,38354],{"class":66},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[49,38356,35097],{"class":6468},[49,38358,1448],{"class":109},[49,38360,875],{"class":73},[49,38362,1409],{"class":66},[49,38364,38365],{"class":51,"line":35065},[49,38366,35109],{"class":66},[591,38368,38369],{"start":70},[26,38370,35122],{},[39,38372,38374],{"className":31626,"code":38373,"language":31628,"meta":44,"style":44},"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",[46,38375,38376,38382,38392,38402,38412,38416,38426,38436,38447,38451,38455,38459,38467,38483,38493,38509,38519,38533,38537,38547,38557,38567,38573,38577,38581,38589,38593,38609,38617,38621,38625,38633,38641,38645,38649,38653,38657,38663,38667,38677,38685,38693,38697,38701,38705,38713,38717,38733,38737,38741,38745,38757,38761,38773,38777,38781,38793,38797,38807,38811,38815,38827,38831,38839,38843,38847,38855,38859,38867,38871,38875,38879,38883,38887,38903,38911,38915,38919,38967,38973,38977,38987,38995,39003,39007,39011,39015,39019,39027,39031,39047,39051,39059,39067],{"__ignoreMap":44},[49,38377,38378,38380],{"class":51,"line":52},[49,38379,31640],{"class":109},[49,38381,31643],{"class":66},[49,38383,38384,38386,38388,38390],{"class":51,"line":59},[49,38385,31640],{"class":109},[49,38387,32663],{"class":66},[49,38389,32631],{"class":109},[49,38391,32668],{"class":66},[49,38393,38394,38396,38398,38400],{"class":51,"line":70},[49,38395,31985],{"class":109},[49,38397,35150],{"class":66},[49,38399,31640],{"class":109},[49,38401,35155],{"class":66},[49,38403,38404,38406,38408,38410],{"class":51,"line":86},[49,38405,31985],{"class":109},[49,38407,32646],{"class":66},[49,38409,31640],{"class":109},[49,38411,32651],{"class":66},[49,38413,38414],{"class":51,"line":98},[49,38415,35170],{"class":55},[49,38417,38418,38420,38422,38424],{"class":51,"line":121},[49,38419,31985],{"class":109},[49,38421,32616],{"class":66},[49,38423,31640],{"class":109},[49,38425,32621],{"class":66},[49,38427,38428,38430,38432,38434],{"class":51,"line":134},[49,38429,31985],{"class":109},[49,38431,33162],{"class":66},[49,38433,31640],{"class":109},[49,38435,36805],{"class":66},[49,38437,38438,38440,38443,38445],{"class":51,"line":1085},[49,38439,31985],{"class":109},[49,38441,38442],{"class":66}," 练习.AlexNet.model ",[49,38444,31640],{"class":109},[49,38446,36805],{"class":66},[49,38448,38449],{"class":51,"line":2574},[49,38450,3654],{"emptyLinePlaceholder":1330},[49,38452,38453],{"class":51,"line":2586},[49,38454,3654],{"emptyLinePlaceholder":1330},[49,38456,38457],{"class":51,"line":2867},[49,38458,35199],{"class":55},[49,38460,38461,38463,38465],{"class":51,"line":2872},[49,38462,33195],{"class":109},[49,38464,35206],{"class":62},[49,38466,33201],{"class":66},[49,38468,38469,38471,38473,38475,38477,38479,38481],{"class":51,"line":2878},[49,38470,35213],{"class":66},[49,38472,1448],{"class":109},[49,38474,32703],{"class":66},[49,38476,32706],{"class":6468},[49,38478,1448],{"class":109},[49,38480,32711],{"class":1505},[49,38482,32714],{"class":66},[49,38484,38485,38487,38489,38491],{"class":51,"line":2883},[49,38486,35230],{"class":6468},[49,38488,1448],{"class":109},[49,38490,35235],{"class":73},[49,38492,32714],{"class":66},[49,38494,38495,38497,38499,38501,38503,38505,38507],{"class":51,"line":2897},[49,38496,35242],{"class":6468},[49,38498,1448],{"class":109},[49,38500,32741],{"class":66},[49,38502,32744],{"class":6468},[49,38504,1448],{"class":109},[49,38506,36697],{"class":73},[49,38508,32752],{"class":66},[49,38510,38511,38513,38515,38517],{"class":51,"line":2902},[49,38512,35259],{"class":6468},[49,38514,1448],{"class":109},[49,38516,32724],{"class":73},[49,38518,1409],{"class":66},[49,38520,38521,38523,38525,38527,38529,38531],{"class":51,"line":2908},[49,38522,35270],{"class":66},[49,38524,1448],{"class":109},[49,38526,32782],{"class":66},[49,38528,32785],{"class":6468},[49,38530,1448],{"class":109},[49,38532,35281],{"class":66},[49,38534,38535],{"class":51,"line":2929},[49,38536,35286],{"class":55},[49,38538,38539,38541,38543,38545],{"class":51,"line":2934},[49,38540,35291],{"class":6468},[49,38542,1448],{"class":109},[49,38544,159],{"class":73},[49,38546,32714],{"class":66},[49,38548,38549,38551,38553,38555],{"class":51,"line":2948},[49,38550,35302],{"class":6468},[49,38552,1448],{"class":109},[49,38554,32724],{"class":73},[49,38556,32714],{"class":66},[49,38558,38559,38561,38563,38565],{"class":51,"line":2953},[49,38560,35313],{"class":6468},[49,38562,1448],{"class":109},[49,38564,80],{"class":73},[49,38566,1409],{"class":66},[49,38568,38569,38571],{"class":51,"line":2982},[49,38570,5344],{"class":109},[49,38572,35326],{"class":66},[49,38574,38575],{"class":51,"line":2987},[49,38576,3654],{"emptyLinePlaceholder":1330},[49,38578,38579],{"class":51,"line":3004},[49,38580,35335],{"class":55},[49,38582,38583,38585,38587],{"class":51,"line":3009},[49,38584,33195],{"class":109},[49,38586,35342],{"class":62},[49,38588,35345],{"class":66},[49,38590,38591],{"class":51,"line":3014},[49,38592,35350],{"class":55},[49,38594,38595,38597,38599,38601,38603,38605,38607],{"class":51,"line":3019},[49,38596,32485],{"class":66},[49,38598,1448],{"class":109},[49,38600,32492],{"class":1505},[49,38602,2959],{"class":109},[49,38604,32497],{"class":66},[49,38606,2956],{"class":109},[49,38608,35367],{"class":1505},[49,38610,38611,38613,38615],{"class":51,"line":3033},[49,38612,32537],{"class":66},[49,38614,1448],{"class":109},[49,38616,33537],{"class":66},[49,38618,38619],{"class":51,"line":3038},[49,38620,3654],{"emptyLinePlaceholder":1330},[49,38622,38623],{"class":51,"line":3831},[49,38624,35384],{"class":55},[49,38626,38627,38629,38631],{"class":51,"line":3845},[49,38628,35389],{"class":66},[49,38630,1448],{"class":109},[49,38632,33590],{"class":73},[49,38634,38635,38637,38639],{"class":51,"line":3853},[49,38636,35398],{"class":66},[49,38638,1448],{"class":109},[49,38640,4339],{"class":73},[49,38642,38643],{"class":51,"line":3858},[49,38644,3654],{"emptyLinePlaceholder":1330},[49,38646,38647],{"class":51,"line":3864},[49,38648,35411],{"class":55},[49,38650,38651],{"class":51,"line":3870},[49,38652,35416],{"class":55},[49,38654,38655],{"class":51,"line":3875},[49,38656,35421],{"class":55},[49,38658,38659,38661],{"class":51,"line":9200},[49,38660,35426],{"class":109},[49,38662,34132],{"class":66},[49,38664,38665],{"class":51,"line":9224},[49,38666,35433],{"class":55},[49,38668,38669,38671,38673,38675],{"class":51,"line":9229},[49,38670,4657],{"class":109},[49,38672,35440],{"class":66},[49,38674,27292],{"class":109},[49,38676,35445],{"class":66},[49,38678,38679,38681,38683],{"class":51,"line":9235},[49,38680,35450],{"class":66},[49,38682,1448],{"class":109},[49,38684,35455],{"class":66},[49,38686,38687,38689,38691],{"class":51,"line":9262},[49,38688,35460],{"class":66},[49,38690,1448],{"class":109},[49,38692,35465],{"class":66},[49,38694,38695],{"class":51,"line":9267},[49,38696,35470],{"class":55},[49,38698,38699],{"class":51,"line":9273},[49,38700,34123],{"class":66},[49,38702,38703],{"class":51,"line":9285},[49,38704,35479],{"class":55},[49,38706,38707,38709,38711],{"class":51,"line":9297},[49,38708,33908],{"class":66},[49,38710,1448],{"class":109},[49,38712,35488],{"class":66},[49,38714,38715],{"class":51,"line":9309},[49,38716,35493],{"class":55},[49,38718,38719,38721,38723,38725,38727,38729,38731],{"class":51,"line":10968},[49,38720,33925],{"class":66},[49,38722,1448],{"class":109},[49,38724,33930],{"class":66},[49,38726,33933],{"class":6468},[49,38728,1448],{"class":109},[49,38730,159],{"class":73},[49,38732,1409],{"class":66},[49,38734,38735],{"class":51,"line":10993},[49,38736,35514],{"class":55},[49,38738,38739],{"class":51,"line":11016},[49,38740,35519],{"class":55},[49,38742,38743],{"class":51,"line":11040},[49,38744,35524],{"class":55},[49,38746,38747,38749,38751,38753,38755],{"class":51,"line":11045},[49,38748,35529],{"class":66},[49,38750,10729],{"class":109},[49,38752,34035],{"class":66},[49,38754,4203],{"class":109},[49,38756,35538],{"class":66},[49,38758,38759],{"class":51,"line":11050},[49,38760,35543],{"class":55},[49,38762,38763,38765,38767,38769,38771],{"class":51,"line":11055},[49,38764,35548],{"class":66},[49,38766,10729],{"class":109},[49,38768,35553],{"class":66},[49,38770,80],{"class":73},[49,38772,1409],{"class":66},[49,38774,38775],{"class":51,"line":11064},[49,38776,3654],{"emptyLinePlaceholder":1330},[49,38778,38779],{"class":51,"line":11069},[49,38780,35566],{"class":55},[49,38782,38783,38785,38787,38789,38791],{"class":51,"line":11075},[49,38784,35571],{"class":66},[49,38786,1448],{"class":109},[49,38788,35576],{"class":66},[49,38790,1975],{"class":109},[49,38792,35581],{"class":66},[49,38794,38795],{"class":51,"line":11096},[49,38796,35586],{"class":55},[49,38798,38799,38801,38803,38805],{"class":51,"line":11102},[49,38800,33699],{"class":73},[49,38802,1403],{"class":66},[49,38804,35595],{"class":1505},[49,38806,35598],{"class":66},[49,38808,38809],{"class":51,"line":11116},[49,38810,3654],{"emptyLinePlaceholder":1330},[49,38812,38813],{"class":51,"line":11122},[49,38814,35607],{"class":55},[49,38816,38817,38819,38821,38823,38825],{"class":51,"line":11149},[49,38818,2787],{"class":109},[49,38820,32468],{"class":73},[49,38822,4203],{"class":109},[49,38824,32473],{"class":1505},[49,38826,4993],{"class":66},[49,38828,38829],{"class":51,"line":11158},[49,38830,35624],{"class":55},[49,38832,38833,38835,38837],{"class":51,"line":11164},[49,38834,32537],{"class":66},[49,38836,1448],{"class":109},[49,38838,38337],{"class":66},[49,38840,38841],{"class":51,"line":11172},[49,38842,35637],{"class":55},[49,38844,38845],{"class":51,"line":11177},[49,38846,35642],{"class":55},[49,38848,38849,38851,38853],{"class":51,"line":17854},[49,38850,35647],{"class":66},[49,38852,35650],{"class":1505},[49,38854,31745],{"class":66},[49,38856,38857],{"class":51,"line":17860},[49,38858,35657],{"class":55},[49,38860,38861,38863,38865],{"class":51,"line":17883},[49,38862,35270],{"class":66},[49,38864,1448],{"class":109},[49,38866,35666],{"class":66},[49,38868,38869],{"class":51,"line":17889},[49,38870,35671],{"class":55},[49,38872,38873],{"class":51,"line":17912},[49,38874,35676],{"class":66},[49,38876,38877],{"class":51,"line":17926},[49,38878,3654],{"emptyLinePlaceholder":1330},[49,38880,38881],{"class":51,"line":17946},[49,38882,35685],{"class":55},[49,38884,38885],{"class":51,"line":17952},[49,38886,35690],{"class":55},[49,38888,38889,38891,38893,38895,38897,38899,38901],{"class":51,"line":17963},[49,38890,32485],{"class":66},[49,38892,1448],{"class":109},[49,38894,32492],{"class":1505},[49,38896,2959],{"class":109},[49,38898,32497],{"class":66},[49,38900,2956],{"class":109},[49,38902,35367],{"class":1505},[49,38904,38905,38907,38909],{"class":51,"line":17986},[49,38906,32537],{"class":66},[49,38908,1448],{"class":109},[49,38910,33537],{"class":66},[49,38912,38913],{"class":51,"line":18008},[49,38914,35719],{"class":55},[49,38916,38917],{"class":51,"line":18013},[49,38918,35724],{"class":55},[49,38920,38921,38923,38925,38927,38929,38931,38933,38935,38937,38939,38941,38943,38945,38947,38949,38951,38953,38955,38957,38959,38961,38963,38965],{"class":51,"line":18019},[49,38922,35729],{"class":66},[49,38924,1448],{"class":109},[49,38926,2280],{"class":66},[49,38928,35736],{"class":1505},[49,38930,1770],{"class":66},[49,38932,35741],{"class":1505},[49,38934,1770],{"class":66},[49,38936,35746],{"class":1505},[49,38938,1770],{"class":66},[49,38940,35751],{"class":1505},[49,38942,1770],{"class":66},[49,38944,35756],{"class":1505},[49,38946,1770],{"class":66},[49,38948,35761],{"class":1505},[49,38950,1770],{"class":66},[49,38952,35766],{"class":1505},[49,38954,1770],{"class":66},[49,38956,35771],{"class":1505},[49,38958,1770],{"class":66},[49,38960,35776],{"class":1505},[49,38962,1770],{"class":66},[49,38964,35781],{"class":1505},[49,38966,34494],{"class":66},[49,38968,38969,38971],{"class":51,"line":18033},[49,38970,35426],{"class":109},[49,38972,34132],{"class":66},[49,38974,38975],{"class":51,"line":18046},[49,38976,35794],{"class":55},[49,38978,38979,38981,38983,38985],{"class":51,"line":18051},[49,38980,4657],{"class":109},[49,38982,35801],{"class":66},[49,38984,27292],{"class":109},[49,38986,35445],{"class":66},[49,38988,38989,38991,38993],{"class":51,"line":18065},[49,38990,33858],{"class":66},[49,38992,1448],{"class":109},[49,38994,33863],{"class":66},[49,38996,38997,38999,39001],{"class":51,"line":18070},[49,38998,33873],{"class":66},[49,39000,1448],{"class":109},[49,39002,33878],{"class":66},[49,39004,39005],{"class":51,"line":18076},[49,39006,3654],{"emptyLinePlaceholder":1330},[49,39008,39009],{"class":51,"line":18081},[49,39010,35830],{"class":55},[49,39012,39013],{"class":51,"line":18095},[49,39014,34123],{"class":66},[49,39016,39017],{"class":51,"line":18100},[49,39018,35839],{"class":55},[49,39020,39021,39023,39025],{"class":51,"line":18105},[49,39022,33908],{"class":66},[49,39024,1448],{"class":109},[49,39026,33913],{"class":66},[49,39028,39029],{"class":51,"line":18119},[49,39030,35852],{"class":55},[49,39032,39033,39035,39037,39039,39041,39043,39045],{"class":51,"line":18131},[49,39034,33925],{"class":66},[49,39036,1448],{"class":109},[49,39038,33930],{"class":66},[49,39040,33933],{"class":6468},[49,39042,1448],{"class":109},[49,39044,159],{"class":73},[49,39046,1409],{"class":66},[49,39048,39049],{"class":51,"line":18136},[49,39050,35873],{"class":55},[49,39052,39053,39055,39057],{"class":51,"line":18149},[49,39054,35878],{"class":66},[49,39056,1448],{"class":109},[49,39058,35883],{"class":66},[49,39060,39061,39063,39065],{"class":51,"line":18154},[49,39062,35888],{"class":66},[49,39064,1448],{"class":109},[49,39066,35893],{"class":66},[49,39068,39069,39071,39073,39075,39077,39079,39081,39083],{"class":51,"line":18159},[49,39070,35898],{"class":73},[49,39072,1403],{"class":66},[49,39074,35903],{"class":1505},[49,39076,35906],{"class":66},[49,39078,35909],{"class":1505},[49,39080,1770],{"class":66},[49,39082,35914],{"class":1505},[49,39084,35917],{"class":66},[183,39086,39088],{"id":39087},"_22vgg","2.2.VGG",[525,39090,39092],{"id":39091},"_221原理","2.2.1.原理",[19,39094,39095],{},[174,39096],{"alt":44,"src":39097},"\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,39099,39100],{},[174,39101],{"alt":44,"src":39102},"\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,39104,39105],{},[174,39106],{"alt":44,"src":39107},"\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,39109,39110],{},"参数详细描述：",[19,39112,39113],{},[174,39114],{"alt":44,"src":39115},"\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,39117,39118],{},[174,39119],{"alt":44,"src":39120},"\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,39122,39123],{},[174,39124],{"alt":44,"src":39125},"\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,39127,39128],{},[174,39129],{"alt":44,"src":39130},"\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,39132,39133],{},[174,39134],{"alt":44,"src":39135},"\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",[525,39137,39139],{"id":39138},"_222代码实现","2.2.2.代码实现",[591,39141,39142],{},[26,39143,39144],{},"网络搭建",[39,39146,39148],{"className":31626,"code":39147,"language":31628,"meta":44,"style":44},"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",[46,39149,39150,39156,39168,39178,39188,39192,39209,39217,39236,39241,39246,39258,39296,39301,39337,39341,39370,39375,39380,39391,39427,39431,39467,39471,39499,39503,39508,39519,39555,39559,39595,39599,39635,39639,39667,39671,39676,39687,39724,39728,39764,39768,39804,39808,39836,39840,39845,39856,39892,39896,39932,39936,39972,39976,40004,40008,40013,40024,40029,40034,40039,40060,40064,40076,40080,40092,40096,40100,40105,40110,40125,40130,40140,40145,40160,40165,40184,40189,40198,40203,40213,40218,40223,40237,40242,40256,40264,40268,40272,40280,40291,40302,40313,40324,40335,40346,40352,40356,40361,40374,40394,40400,40409],{"__ignoreMap":44},[49,39151,39152,39154],{"class":51,"line":52},[49,39153,31640],{"class":109},[49,39155,31643],{"class":66},[49,39157,39158,39160,39163,39165],{"class":51,"line":59},[49,39159,31985],{"class":109},[49,39161,39162],{"class":66}," sympy.core.sympify ",[49,39164,31640],{"class":109},[49,39166,39167],{"class":66}," kernS\n",[49,39169,39170,39172,39174,39176],{"class":51,"line":70},[49,39171,31985],{"class":109},[49,39173,31988],{"class":66},[49,39175,31640],{"class":109},[49,39177,31993],{"class":66},[49,39179,39180,39182,39184,39186],{"class":51,"line":86},[49,39181,31985],{"class":109},[49,39183,32005],{"class":66},[49,39185,31640],{"class":109},[49,39187,32010],{"class":66},[49,39189,39190],{"class":51,"line":98},[49,39191,3654],{"emptyLinePlaceholder":1330},[49,39193,39194,39196,39199,39201,39203,39205,39207],{"class":51,"line":121},[49,39195,15945],{"class":109},[49,39197,39198],{"class":62}," VGG16",[49,39200,1403],{"class":66},[49,39202,32026],{"class":62},[49,39204,1949],{"class":66},[49,39206,32031],{"class":62},[49,39208,32034],{"class":66},[49,39210,39211,39213,39215],{"class":51,"line":134},[49,39212,32049],{"class":109},[49,39214,32052],{"class":73},[49,39216,32055],{"class":66},[49,39218,39219,39221,39223,39226,39228,39230,39232,39234],{"class":51,"line":1085},[49,39220,32065],{"class":73},[49,39222,1403],{"class":66},[49,39224,39225],{"class":73},"VGG16",[49,39227,13687],{"class":66},[49,39229,32071],{"class":73},[49,39231,32074],{"class":66},[49,39233,32077],{"class":73},[49,39235,3230],{"class":66},[49,39237,39238],{"class":51,"line":2574},[49,39239,39240],{"class":55},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[49,39242,39243],{"class":51,"line":2586},[49,39244,39245],{"class":55},"        # 这里用的是灰度图\n",[49,39247,39248,39250,39253,39255],{"class":51,"line":2867},[49,39249,32093],{"class":73},[49,39251,39252],{"class":66},".block1",[49,39254,1448],{"class":109},[49,39256,39257],{"class":66},"nn.Sequential(\n",[49,39259,39260,39263,39265,39267,39269,39271,39273,39275,39277,39279,39281,39283,39285,39287,39289,39291,39293],{"class":51,"line":2872},[49,39261,39262],{"class":66},"            nn.Conv2d(",[49,39264,32104],{"class":6468},[49,39266,1448],{"class":109},[49,39268,159],{"class":73},[49,39270,1770],{"class":66},[49,39272,32113],{"class":6468},[49,39274,1448],{"class":109},[49,39276,1596],{"class":73},[49,39278,1770],{"class":66},[49,39280,32122],{"class":6468},[49,39282,1448],{"class":109},[49,39284,1472],{"class":73},[49,39286,1770],{"class":66},[49,39288,32131],{"class":6468},[49,39290,1448],{"class":109},[49,39292,159],{"class":73},[49,39294,39295],{"class":66},"),\n",[49,39297,39298],{"class":51,"line":2878},[49,39299,39300],{"class":66},"            nn.ReLU(),\n",[49,39302,39303,39305,39307,39309,39311,39313,39315,39317,39319,39321,39323,39325,39327,39329,39331,39333,39335],{"class":51,"line":2883},[49,39304,39262],{"class":66},[49,39306,32104],{"class":6468},[49,39308,1448],{"class":109},[49,39310,1596],{"class":73},[49,39312,1770],{"class":66},[49,39314,32113],{"class":6468},[49,39316,1448],{"class":109},[49,39318,1596],{"class":73},[49,39320,1770],{"class":66},[49,39322,32122],{"class":6468},[49,39324,1448],{"class":109},[49,39326,1472],{"class":73},[49,39328,1770],{"class":66},[49,39330,32131],{"class":6468},[49,39332,1448],{"class":109},[49,39334,159],{"class":73},[49,39336,39295],{"class":66},[49,39338,39339],{"class":51,"line":2897},[49,39340,39300],{"class":66},[49,39342,39343,39346,39348,39350,39352,39354,39356,39358,39360,39362,39364,39366,39368],{"class":51,"line":2902},[49,39344,39345],{"class":66},"            nn.MaxPool2d(",[49,39347,32122],{"class":6468},[49,39349,1448],{"class":109},[49,39351,1478],{"class":73},[49,39353,1770],{"class":66},[49,39355,32177],{"class":6468},[49,39357,1448],{"class":109},[49,39359,1478],{"class":73},[49,39361,1770],{"class":66},[49,39363,32131],{"class":6468},[49,39365,1448],{"class":109},[49,39367,80],{"class":73},[49,39369,1409],{"class":66},[49,39371,39372],{"class":51,"line":2908},[49,39373,39374],{"class":66},"        )\n",[49,39376,39377],{"class":51,"line":2929},[49,39378,39379],{"class":55},"        # 第二层\n",[49,39381,39382,39384,39387,39389],{"class":51,"line":2934},[49,39383,32093],{"class":73},[49,39385,39386],{"class":66},".block2",[49,39388,1448],{"class":109},[49,39390,39257],{"class":66},[49,39392,39393,39395,39397,39399,39401,39403,39405,39407,39409,39411,39413,39415,39417,39419,39421,39423,39425],{"class":51,"line":2948},[49,39394,39262],{"class":66},[49,39396,32104],{"class":6468},[49,39398,1448],{"class":109},[49,39400,1596],{"class":73},[49,39402,1770],{"class":66},[49,39404,32113],{"class":6468},[49,39406,1448],{"class":109},[49,39408,33318],{"class":73},[49,39410,1770],{"class":66},[49,39412,32122],{"class":6468},[49,39414,1448],{"class":109},[49,39416,1472],{"class":73},[49,39418,1770],{"class":66},[49,39420,32131],{"class":6468},[49,39422,1448],{"class":109},[49,39424,159],{"class":73},[49,39426,39295],{"class":66},[49,39428,39429],{"class":51,"line":2953},[49,39430,39300],{"class":66},[49,39432,39433,39435,39437,39439,39441,39443,39445,39447,39449,39451,39453,39455,39457,39459,39461,39463,39465],{"class":51,"line":2982},[49,39434,39262],{"class":66},[49,39436,32104],{"class":6468},[49,39438,1448],{"class":109},[49,39440,33318],{"class":73},[49,39442,1770],{"class":66},[49,39444,32113],{"class":6468},[49,39446,1448],{"class":109},[49,39448,33318],{"class":73},[49,39450,1770],{"class":66},[49,39452,32122],{"class":6468},[49,39454,1448],{"class":109},[49,39456,1472],{"class":73},[49,39458,1770],{"class":66},[49,39460,32131],{"class":6468},[49,39462,1448],{"class":109},[49,39464,159],{"class":73},[49,39466,39295],{"class":66},[49,39468,39469],{"class":51,"line":2987},[49,39470,39300],{"class":66},[49,39472,39473,39475,39477,39479,39481,39483,39485,39487,39489,39491,39493,39495,39497],{"class":51,"line":3004},[49,39474,39345],{"class":66},[49,39476,32122],{"class":6468},[49,39478,1448],{"class":109},[49,39480,1478],{"class":73},[49,39482,1770],{"class":66},[49,39484,32177],{"class":6468},[49,39486,1448],{"class":109},[49,39488,1478],{"class":73},[49,39490,1770],{"class":66},[49,39492,32131],{"class":6468},[49,39494,1448],{"class":109},[49,39496,80],{"class":73},[49,39498,1409],{"class":66},[49,39500,39501],{"class":51,"line":3009},[49,39502,39374],{"class":66},[49,39504,39505],{"class":51,"line":3014},[49,39506,39507],{"class":55},"        # 第三层\n",[49,39509,39510,39512,39515,39517],{"class":51,"line":3019},[49,39511,32093],{"class":73},[49,39513,39514],{"class":66},".block3",[49,39516,1448],{"class":109},[49,39518,39257],{"class":66},[49,39520,39521,39523,39525,39527,39529,39531,39533,39535,39537,39539,39541,39543,39545,39547,39549,39551,39553],{"class":51,"line":3033},[49,39522,39262],{"class":66},[49,39524,32104],{"class":6468},[49,39526,1448],{"class":109},[49,39528,33318],{"class":73},[49,39530,1770],{"class":66},[49,39532,32113],{"class":6468},[49,39534,1448],{"class":109},[49,39536,36118],{"class":73},[49,39538,1770],{"class":66},[49,39540,32122],{"class":6468},[49,39542,1448],{"class":109},[49,39544,1472],{"class":73},[49,39546,1770],{"class":66},[49,39548,32131],{"class":6468},[49,39550,1448],{"class":109},[49,39552,159],{"class":73},[49,39554,39295],{"class":66},[49,39556,39557],{"class":51,"line":3038},[49,39558,39300],{"class":66},[49,39560,39561,39563,39565,39567,39569,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593],{"class":51,"line":3831},[49,39562,39262],{"class":66},[49,39564,32104],{"class":6468},[49,39566,1448],{"class":109},[49,39568,36118],{"class":73},[49,39570,1770],{"class":66},[49,39572,32113],{"class":6468},[49,39574,1448],{"class":109},[49,39576,36118],{"class":73},[49,39578,1770],{"class":66},[49,39580,32122],{"class":6468},[49,39582,1448],{"class":109},[49,39584,1472],{"class":73},[49,39586,1770],{"class":66},[49,39588,32131],{"class":6468},[49,39590,1448],{"class":109},[49,39592,159],{"class":73},[49,39594,39295],{"class":66},[49,39596,39597],{"class":51,"line":3845},[49,39598,39300],{"class":66},[49,39600,39601,39603,39605,39607,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633],{"class":51,"line":3853},[49,39602,39262],{"class":66},[49,39604,32104],{"class":6468},[49,39606,1448],{"class":109},[49,39608,36118],{"class":73},[49,39610,1770],{"class":66},[49,39612,32113],{"class":6468},[49,39614,1448],{"class":109},[49,39616,36118],{"class":73},[49,39618,1770],{"class":66},[49,39620,32122],{"class":6468},[49,39622,1448],{"class":109},[49,39624,1472],{"class":73},[49,39626,1770],{"class":66},[49,39628,32131],{"class":6468},[49,39630,1448],{"class":109},[49,39632,159],{"class":73},[49,39634,39295],{"class":66},[49,39636,39637],{"class":51,"line":3858},[49,39638,39300],{"class":66},[49,39640,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665],{"class":51,"line":3864},[49,39642,39345],{"class":66},[49,39644,32122],{"class":6468},[49,39646,1448],{"class":109},[49,39648,1478],{"class":73},[49,39650,1770],{"class":66},[49,39652,32177],{"class":6468},[49,39654,1448],{"class":109},[49,39656,1478],{"class":73},[49,39658,1770],{"class":66},[49,39660,32131],{"class":6468},[49,39662,1448],{"class":109},[49,39664,80],{"class":73},[49,39666,1409],{"class":66},[49,39668,39669],{"class":51,"line":3870},[49,39670,39374],{"class":66},[49,39672,39673],{"class":51,"line":3875},[49,39674,39675],{"class":55},"        # 第四层\n",[49,39677,39678,39680,39683,39685],{"class":51,"line":9200},[49,39679,32093],{"class":73},[49,39681,39682],{"class":66},".block4",[49,39684,1448],{"class":109},[49,39686,39257],{"class":66},[49,39688,39689,39691,39693,39695,39697,39699,39701,39703,39706,39708,39710,39712,39714,39716,39718,39720,39722],{"class":51,"line":9224},[49,39690,39262],{"class":66},[49,39692,32104],{"class":6468},[49,39694,1448],{"class":109},[49,39696,36118],{"class":73},[49,39698,1770],{"class":66},[49,39700,32113],{"class":6468},[49,39702,1448],{"class":109},[49,39704,39705],{"class":73},"512",[49,39707,1770],{"class":66},[49,39709,32122],{"class":6468},[49,39711,1448],{"class":109},[49,39713,1472],{"class":73},[49,39715,1770],{"class":66},[49,39717,32131],{"class":6468},[49,39719,1448],{"class":109},[49,39721,159],{"class":73},[49,39723,39295],{"class":66},[49,39725,39726],{"class":51,"line":9229},[49,39727,39300],{"class":66},[49,39729,39730,39732,39734,39736,39738,39740,39742,39744,39746,39748,39750,39752,39754,39756,39758,39760,39762],{"class":51,"line":9235},[49,39731,39262],{"class":66},[49,39733,32104],{"class":6468},[49,39735,1448],{"class":109},[49,39737,39705],{"class":73},[49,39739,1770],{"class":66},[49,39741,32113],{"class":6468},[49,39743,1448],{"class":109},[49,39745,39705],{"class":73},[49,39747,1770],{"class":66},[49,39749,32122],{"class":6468},[49,39751,1448],{"class":109},[49,39753,1472],{"class":73},[49,39755,1770],{"class":66},[49,39757,32131],{"class":6468},[49,39759,1448],{"class":109},[49,39761,159],{"class":73},[49,39763,39295],{"class":66},[49,39765,39766],{"class":51,"line":9262},[49,39767,39300],{"class":66},[49,39769,39770,39772,39774,39776,39778,39780,39782,39784,39786,39788,39790,39792,39794,39796,39798,39800,39802],{"class":51,"line":9267},[49,39771,39262],{"class":66},[49,39773,32104],{"class":6468},[49,39775,1448],{"class":109},[49,39777,39705],{"class":73},[49,39779,1770],{"class":66},[49,39781,32113],{"class":6468},[49,39783,1448],{"class":109},[49,39785,39705],{"class":73},[49,39787,1770],{"class":66},[49,39789,32122],{"class":6468},[49,39791,1448],{"class":109},[49,39793,1472],{"class":73},[49,39795,1770],{"class":66},[49,39797,32131],{"class":6468},[49,39799,1448],{"class":109},[49,39801,159],{"class":73},[49,39803,39295],{"class":66},[49,39805,39806],{"class":51,"line":9273},[49,39807,39300],{"class":66},[49,39809,39810,39812,39814,39816,39818,39820,39822,39824,39826,39828,39830,39832,39834],{"class":51,"line":9285},[49,39811,39345],{"class":66},[49,39813,32122],{"class":6468},[49,39815,1448],{"class":109},[49,39817,1478],{"class":73},[49,39819,1770],{"class":66},[49,39821,32177],{"class":6468},[49,39823,1448],{"class":109},[49,39825,1478],{"class":73},[49,39827,1770],{"class":66},[49,39829,32131],{"class":6468},[49,39831,1448],{"class":109},[49,39833,80],{"class":73},[49,39835,1409],{"class":66},[49,39837,39838],{"class":51,"line":9297},[49,39839,39374],{"class":66},[49,39841,39842],{"class":51,"line":9309},[49,39843,39844],{"class":55},"        # 第五层\n",[49,39846,39847,39849,39852,39854],{"class":51,"line":10968},[49,39848,32093],{"class":73},[49,39850,39851],{"class":66},".block5",[49,39853,1448],{"class":109},[49,39855,39257],{"class":66},[49,39857,39858,39860,39862,39864,39866,39868,39870,39872,39874,39876,39878,39880,39882,39884,39886,39888,39890],{"class":51,"line":10993},[49,39859,39262],{"class":66},[49,39861,32104],{"class":6468},[49,39863,1448],{"class":109},[49,39865,39705],{"class":73},[49,39867,1770],{"class":66},[49,39869,32113],{"class":6468},[49,39871,1448],{"class":109},[49,39873,39705],{"class":73},[49,39875,1770],{"class":66},[49,39877,32122],{"class":6468},[49,39879,1448],{"class":109},[49,39881,1472],{"class":73},[49,39883,1770],{"class":66},[49,39885,32131],{"class":6468},[49,39887,1448],{"class":109},[49,39889,159],{"class":73},[49,39891,39295],{"class":66},[49,39893,39894],{"class":51,"line":11016},[49,39895,39300],{"class":66},[49,39897,39898,39900,39902,39904,39906,39908,39910,39912,39914,39916,39918,39920,39922,39924,39926,39928,39930],{"class":51,"line":11040},[49,39899,39262],{"class":66},[49,39901,32104],{"class":6468},[49,39903,1448],{"class":109},[49,39905,39705],{"class":73},[49,39907,1770],{"class":66},[49,39909,32113],{"class":6468},[49,39911,1448],{"class":109},[49,39913,39705],{"class":73},[49,39915,1770],{"class":66},[49,39917,32122],{"class":6468},[49,39919,1448],{"class":109},[49,39921,1472],{"class":73},[49,39923,1770],{"class":66},[49,39925,32131],{"class":6468},[49,39927,1448],{"class":109},[49,39929,159],{"class":73},[49,39931,39295],{"class":66},[49,39933,39934],{"class":51,"line":11045},[49,39935,39300],{"class":66},[49,39937,39938,39940,39942,39944,39946,39948,39950,39952,39954,39956,39958,39960,39962,39964,39966,39968,39970],{"class":51,"line":11050},[49,39939,39262],{"class":66},[49,39941,32104],{"class":6468},[49,39943,1448],{"class":109},[49,39945,39705],{"class":73},[49,39947,1770],{"class":66},[49,39949,32113],{"class":6468},[49,39951,1448],{"class":109},[49,39953,39705],{"class":73},[49,39955,1770],{"class":66},[49,39957,32122],{"class":6468},[49,39959,1448],{"class":109},[49,39961,1472],{"class":73},[49,39963,1770],{"class":66},[49,39965,32131],{"class":6468},[49,39967,1448],{"class":109},[49,39969,159],{"class":73},[49,39971,39295],{"class":66},[49,39973,39974],{"class":51,"line":11055},[49,39975,39300],{"class":66},[49,39977,39978,39980,39982,39984,39986,39988,39990,39992,39994,39996,39998,40000,40002],{"class":51,"line":11064},[49,39979,39345],{"class":66},[49,39981,32122],{"class":6468},[49,39983,1448],{"class":109},[49,39985,1478],{"class":73},[49,39987,1770],{"class":66},[49,39989,32177],{"class":6468},[49,39991,1448],{"class":109},[49,39993,1478],{"class":73},[49,39995,1770],{"class":66},[49,39997,32131],{"class":6468},[49,39999,1448],{"class":109},[49,40001,80],{"class":73},[49,40003,1409],{"class":66},[49,40005,40006],{"class":51,"line":11069},[49,40007,39374],{"class":66},[49,40009,40010],{"class":51,"line":11075},[49,40011,40012],{"class":55},"        # 全连接层\n",[49,40014,40015,40017,40020,40022],{"class":51,"line":11096},[49,40016,32093],{"class":73},[49,40018,40019],{"class":66},".block6",[49,40021,1448],{"class":109},[49,40023,39257],{"class":66},[49,40025,40026],{"class":51,"line":11102},[49,40027,40028],{"class":55},"            # 平展操作\n",[49,40030,40031],{"class":51,"line":11116},[49,40032,40033],{"class":55},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[49,40035,40036],{"class":51,"line":11122},[49,40037,40038],{"class":66},"            nn.Flatten(),\n",[49,40040,40041,40044,40046,40048,40050,40052,40054,40056,40058],{"class":51,"line":11149},[49,40042,40043],{"class":66},"            nn.Linear(",[49,40045,1761],{"class":73},[49,40047,1846],{"class":109},[49,40049,1761],{"class":73},[49,40051,1846],{"class":109},[49,40053,39705],{"class":73},[49,40055,1770],{"class":66},[49,40057,36118],{"class":73},[49,40059,39295],{"class":66},[49,40061,40062],{"class":51,"line":11158},[49,40063,39300],{"class":66},[49,40065,40066,40068,40070,40072,40074],{"class":51,"line":11164},[49,40067,40043],{"class":66},[49,40069,36118],{"class":73},[49,40071,1770],{"class":66},[49,40073,33318],{"class":73},[49,40075,39295],{"class":66},[49,40077,40078],{"class":51,"line":11172},[49,40079,39300],{"class":66},[49,40081,40082,40084,40086,40088,40090],{"class":51,"line":11177},[49,40083,40043],{"class":66},[49,40085,33318],{"class":73},[49,40087,1770],{"class":66},[49,40089,106],{"class":73},[49,40091,1409],{"class":66},[49,40093,40094],{"class":51,"line":17854},[49,40095,39374],{"class":66},[49,40097,40098],{"class":51,"line":17860},[49,40099,3654],{"emptyLinePlaceholder":1330},[49,40101,40102],{"class":51,"line":17883},[49,40103,40104],{"class":55},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[49,40106,40107],{"class":51,"line":17889},[49,40108,40109],{"class":55},"        # 循环遍历模型\n",[49,40111,40112,40114,40117,40119,40122],{"class":51,"line":17912},[49,40113,4657],{"class":109},[49,40115,40116],{"class":66}," m ",[49,40118,27292],{"class":109},[49,40120,40121],{"class":73}," self",[49,40123,40124],{"class":66},".modules():\n",[49,40126,40127],{"class":51,"line":17926},[49,40128,40129],{"class":55},"            # print(m)\n",[49,40131,40132,40134,40137],{"class":51,"line":17946},[49,40133,5896],{"class":109},[49,40135,40136],{"class":73}," isinstance",[49,40138,40139],{"class":66},"(m,nn.Conv2d):\n",[49,40141,40142],{"class":51,"line":17952},[49,40143,40144],{"class":55},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[49,40146,40147,40150,40153,40155,40158],{"class":51,"line":17963},[49,40148,40149],{"class":66},"                nn.init.kaiming_normal_(m.weight,",[49,40151,40152],{"class":6468},"nonlinearity",[49,40154,1448],{"class":109},[49,40156,40157],{"class":1505},"'relu'",[49,40159,1409],{"class":66},[49,40161,40162],{"class":51,"line":17986},[49,40163,40164],{"class":55},"                # 判断b参数是否存在\n",[49,40166,40167,40170,40173,40176,40179,40182],{"class":51,"line":18008},[49,40168,40169],{"class":109},"                if",[49,40171,40172],{"class":66}," m.bias ",[49,40174,40175],{"class":109},"is",[49,40177,40178],{"class":109}," not",[49,40180,40181],{"class":73}," None",[49,40183,4993],{"class":66},[49,40185,40186],{"class":51,"line":18013},[49,40187,40188],{"class":55},"                    # 如果参数不存在的化初始化b=0\n",[49,40190,40191,40194,40196],{"class":51,"line":18019},[49,40192,40193],{"class":66},"                    nn.init.constant_(m.bias,",[49,40195,80],{"class":73},[49,40197,1409],{"class":66},[49,40199,40200],{"class":51,"line":18033},[49,40201,40202],{"class":55},"            # 全连接层初始化\n",[49,40204,40205,40208,40210],{"class":51,"line":18046},[49,40206,40207],{"class":109},"            elif",[49,40209,40136],{"class":73},[49,40211,40212],{"class":66},"(m,nn.Linear):\n",[49,40214,40215],{"class":51,"line":18051},[49,40216,40217],{"class":55},"                # 这个初始化方法是利用的是正太分布的方式\n",[49,40219,40220],{"class":51,"line":18065},[49,40221,40222],{"class":55},"                # 均值为0，方差为0.01\n",[49,40224,40225,40228,40230,40232,40235],{"class":51,"line":18070},[49,40226,40227],{"class":66},"                nn.init.normal_(m.weight,",[49,40229,80],{"class":73},[49,40231,1770],{"class":66},[49,40233,40234],{"class":73},"0.01",[49,40236,1409],{"class":66},[49,40238,40239],{"class":51,"line":18076},[49,40240,40241],{"class":55},"                # 初始化b参数\n",[49,40243,40244,40246,40248,40250,40252,40254],{"class":51,"line":18081},[49,40245,40169],{"class":109},[49,40247,40172],{"class":66},[49,40249,40175],{"class":109},[49,40251,40178],{"class":109},[49,40253,40181],{"class":73},[49,40255,4993],{"class":66},[49,40257,40258,40260,40262],{"class":51,"line":18095},[49,40259,40193],{"class":66},[49,40261,80],{"class":73},[49,40263,1409],{"class":66},[49,40265,40266],{"class":51,"line":18100},[49,40267,3654],{"emptyLinePlaceholder":1330},[49,40269,40270],{"class":51,"line":18105},[49,40271,36413],{"class":55},[49,40273,40274,40276,40278],{"class":51,"line":18119},[49,40275,32049],{"class":109},[49,40277,32341],{"class":62},[49,40279,32344],{"class":66},[49,40281,40282,40284,40286,40288],{"class":51,"line":18131},[49,40283,32349],{"class":66},[49,40285,1448],{"class":109},[49,40287,32071],{"class":73},[49,40289,40290],{"class":66},".block1(x)\n",[49,40292,40293,40295,40297,40299],{"class":51,"line":18136},[49,40294,32349],{"class":66},[49,40296,1448],{"class":109},[49,40298,32071],{"class":73},[49,40300,40301],{"class":66},".block2(x)\n",[49,40303,40304,40306,40308,40310],{"class":51,"line":18149},[49,40305,32349],{"class":66},[49,40307,1448],{"class":109},[49,40309,32071],{"class":73},[49,40311,40312],{"class":66},".block3(x)\n",[49,40314,40315,40317,40319,40321],{"class":51,"line":18154},[49,40316,32349],{"class":66},[49,40318,1448],{"class":109},[49,40320,32071],{"class":73},[49,40322,40323],{"class":66},".block4(x)\n",[49,40325,40326,40328,40330,40332],{"class":51,"line":18159},[49,40327,32349],{"class":66},[49,40329,1448],{"class":109},[49,40331,32071],{"class":73},[49,40333,40334],{"class":66},".block5(x)\n",[49,40336,40337,40339,40341,40343],{"class":51,"line":18164},[49,40338,32349],{"class":66},[49,40340,1448],{"class":109},[49,40342,32071],{"class":73},[49,40344,40345],{"class":66},".block6(x)\n",[49,40347,40348,40350],{"class":51,"line":18177},[49,40349,16003],{"class":109},[49,40351,32457],{"class":66},[49,40353,40354],{"class":51,"line":18182},[49,40355,3654],{"emptyLinePlaceholder":1330},[49,40357,40358],{"class":51,"line":33881},[49,40359,40360],{"class":55},"# 验证模型\n",[49,40362,40363,40365,40367,40369,40372],{"class":51,"line":33887},[49,40364,2787],{"class":109},[49,40366,32468],{"class":73},[49,40368,4203],{"class":109},[49,40370,40371],{"class":1505},"'__main__'",[49,40373,4993],{"class":66},[49,40375,40376,40378,40380,40382,40384,40386,40388,40390,40392],{"class":51,"line":33893},[49,40377,32485],{"class":66},[49,40379,1448],{"class":109},[49,40381,31699],{"class":66},[49,40383,32492],{"class":1505},[49,40385,2959],{"class":109},[49,40387,32497],{"class":66},[49,40389,2956],{"class":109},[49,40391,31724],{"class":1505},[49,40393,1409],{"class":66},[49,40395,40396,40398],{"class":51,"line":33899},[49,40397,32547],{"class":73},[49,40399,31733],{"class":66},[49,40401,40402,40404,40406],{"class":51,"line":33905},[49,40403,32537],{"class":66},[49,40405,1448],{"class":109},[49,40407,40408],{"class":66},"VGG16().to(device)\n",[49,40410,40411,40413,40415,40417,40419,40421,40423,40425],{"class":51,"line":33916},[49,40412,32547],{"class":73},[49,40414,32550],{"class":66},[49,40416,159],{"class":73},[49,40418,1770],{"class":66},[49,40420,32749],{"class":73},[49,40422,1770],{"class":66},[49,40424,32749],{"class":73},[49,40426,32563],{"class":66},[591,40428,40429],{"start":59},[26,40430,40431],{},"训练代码",[19,40433,40434],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40436,40437],{},"解决方式:",[19,40439,40440],{},"①权重初始化",[39,40442,40444],{"className":31626,"code":40443,"language":31628,"meta":44,"style":44},"# 权重初始化,保证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",[46,40445,40446,40451,40456,40468,40473,40481,40486,40499,40504,40518,40523,40532,40537,40546,40551,40556,40569,40574,40588],{"__ignoreMap":44},[49,40447,40448],{"class":51,"line":52},[49,40449,40450],{"class":55},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[49,40452,40453],{"class":51,"line":59},[49,40454,40455],{"class":55},"# 循环遍历模型\n",[49,40457,40458,40460,40462,40464,40466],{"class":51,"line":70},[49,40459,4279],{"class":109},[49,40461,40116],{"class":66},[49,40463,27292],{"class":109},[49,40465,40121],{"class":73},[49,40467,40124],{"class":66},[49,40469,40470],{"class":51,"line":86},[49,40471,40472],{"class":55},"    # print(m)\n",[49,40474,40475,40477,40479],{"class":51,"line":98},[49,40476,4355],{"class":109},[49,40478,40136],{"class":73},[49,40480,40139],{"class":66},[49,40482,40483],{"class":51,"line":121},[49,40484,40485],{"class":55},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[49,40487,40488,40491,40493,40495,40497],{"class":51,"line":134},[49,40489,40490],{"class":66},"        nn.init.kaiming_normal_(m.weight,",[49,40492,40152],{"class":6468},[49,40494,1448],{"class":109},[49,40496,40157],{"class":1505},[49,40498,1409],{"class":66},[49,40500,40501],{"class":51,"line":1085},[49,40502,40503],{"class":55},"        # 判断b参数是否存在\n",[49,40505,40506,40508,40510,40512,40514,40516],{"class":51,"line":2574},[49,40507,3751],{"class":109},[49,40509,40172],{"class":66},[49,40511,40175],{"class":109},[49,40513,40178],{"class":109},[49,40515,40181],{"class":73},[49,40517,4993],{"class":66},[49,40519,40520],{"class":51,"line":2586},[49,40521,40522],{"class":55},"            # 如果参数不存在的化初始化b=0\n",[49,40524,40525,40528,40530],{"class":51,"line":2867},[49,40526,40527],{"class":66},"            nn.init.constant_(m.bias,",[49,40529,80],{"class":73},[49,40531,1409],{"class":66},[49,40533,40534],{"class":51,"line":2872},[49,40535,40536],{"class":55},"    # 全连接层初始化\n",[49,40538,40539,40542,40544],{"class":51,"line":2878},[49,40540,40541],{"class":109},"    elif",[49,40543,40136],{"class":73},[49,40545,40212],{"class":66},[49,40547,40548],{"class":51,"line":2883},[49,40549,40550],{"class":55},"        # 这个初始化方法是利用的是正太分布的方式\n",[49,40552,40553],{"class":51,"line":2897},[49,40554,40555],{"class":55},"        # 均值为0，方差为0.01\n",[49,40557,40558,40561,40563,40565,40567],{"class":51,"line":2902},[49,40559,40560],{"class":66},"        nn.init.normal_(m.weight,",[49,40562,80],{"class":73},[49,40564,1770],{"class":66},[49,40566,40234],{"class":73},[49,40568,1409],{"class":66},[49,40570,40571],{"class":51,"line":2908},[49,40572,40573],{"class":55},"        # 初始化b参数\n",[49,40575,40576,40578,40580,40582,40584,40586],{"class":51,"line":2929},[49,40577,3751],{"class":109},[49,40579,40172],{"class":66},[49,40581,40175],{"class":109},[49,40583,40178],{"class":109},[49,40585,40181],{"class":73},[49,40587,4993],{"class":66},[49,40589,40590,40592,40594],{"class":51,"line":2934},[49,40591,40527],{"class":66},[49,40593,80],{"class":73},[49,40595,1409],{"class":66},[19,40597,40598],{},"②尽可能地增加批次",[19,40600,40601],{},"训练完整代码：",[39,40603,40604],{"className":31626,"code":39147,"language":31628,"meta":44,"style":44},[46,40605,40606,40612,40622,40632,40642,40646,40662,40670,40688,40692,40696,40706,40742,40746,40782,40786,40814,40818,40822,40832,40868,40872,40908,40912,40940,40944,40948,40958,40994,40998,41034,41038,41074,41078,41106,41110,41114,41124,41160,41164,41200,41204,41240,41244,41272,41276,41280,41290,41326,41330,41366,41370,41406,41410,41438,41442,41446,41456,41460,41464,41468,41488,41492,41504,41508,41520,41524,41528,41532,41536,41548,41552,41560,41564,41576,41580,41594,41598,41606,41610,41618,41622,41626,41638,41642,41656,41664,41668,41672,41680,41690,41700,41710,41720,41730,41740,41746,41750,41754,41766,41786,41792,41800],{"__ignoreMap":44},[49,40607,40608,40610],{"class":51,"line":52},[49,40609,31640],{"class":109},[49,40611,31643],{"class":66},[49,40613,40614,40616,40618,40620],{"class":51,"line":59},[49,40615,31985],{"class":109},[49,40617,39162],{"class":66},[49,40619,31640],{"class":109},[49,40621,39167],{"class":66},[49,40623,40624,40626,40628,40630],{"class":51,"line":70},[49,40625,31985],{"class":109},[49,40627,31988],{"class":66},[49,40629,31640],{"class":109},[49,40631,31993],{"class":66},[49,40633,40634,40636,40638,40640],{"class":51,"line":86},[49,40635,31985],{"class":109},[49,40637,32005],{"class":66},[49,40639,31640],{"class":109},[49,40641,32010],{"class":66},[49,40643,40644],{"class":51,"line":98},[49,40645,3654],{"emptyLinePlaceholder":1330},[49,40647,40648,40650,40652,40654,40656,40658,40660],{"class":51,"line":121},[49,40649,15945],{"class":109},[49,40651,39198],{"class":62},[49,40653,1403],{"class":66},[49,40655,32026],{"class":62},[49,40657,1949],{"class":66},[49,40659,32031],{"class":62},[49,40661,32034],{"class":66},[49,40663,40664,40666,40668],{"class":51,"line":134},[49,40665,32049],{"class":109},[49,40667,32052],{"class":73},[49,40669,32055],{"class":66},[49,40671,40672,40674,40676,40678,40680,40682,40684,40686],{"class":51,"line":1085},[49,40673,32065],{"class":73},[49,40675,1403],{"class":66},[49,40677,39225],{"class":73},[49,40679,13687],{"class":66},[49,40681,32071],{"class":73},[49,40683,32074],{"class":66},[49,40685,32077],{"class":73},[49,40687,3230],{"class":66},[49,40689,40690],{"class":51,"line":2574},[49,40691,39240],{"class":55},[49,40693,40694],{"class":51,"line":2586},[49,40695,39245],{"class":55},[49,40697,40698,40700,40702,40704],{"class":51,"line":2867},[49,40699,32093],{"class":73},[49,40701,39252],{"class":66},[49,40703,1448],{"class":109},[49,40705,39257],{"class":66},[49,40707,40708,40710,40712,40714,40716,40718,40720,40722,40724,40726,40728,40730,40732,40734,40736,40738,40740],{"class":51,"line":2872},[49,40709,39262],{"class":66},[49,40711,32104],{"class":6468},[49,40713,1448],{"class":109},[49,40715,159],{"class":73},[49,40717,1770],{"class":66},[49,40719,32113],{"class":6468},[49,40721,1448],{"class":109},[49,40723,1596],{"class":73},[49,40725,1770],{"class":66},[49,40727,32122],{"class":6468},[49,40729,1448],{"class":109},[49,40731,1472],{"class":73},[49,40733,1770],{"class":66},[49,40735,32131],{"class":6468},[49,40737,1448],{"class":109},[49,40739,159],{"class":73},[49,40741,39295],{"class":66},[49,40743,40744],{"class":51,"line":2878},[49,40745,39300],{"class":66},[49,40747,40748,40750,40752,40754,40756,40758,40760,40762,40764,40766,40768,40770,40772,40774,40776,40778,40780],{"class":51,"line":2883},[49,40749,39262],{"class":66},[49,40751,32104],{"class":6468},[49,40753,1448],{"class":109},[49,40755,1596],{"class":73},[49,40757,1770],{"class":66},[49,40759,32113],{"class":6468},[49,40761,1448],{"class":109},[49,40763,1596],{"class":73},[49,40765,1770],{"class":66},[49,40767,32122],{"class":6468},[49,40769,1448],{"class":109},[49,40771,1472],{"class":73},[49,40773,1770],{"class":66},[49,40775,32131],{"class":6468},[49,40777,1448],{"class":109},[49,40779,159],{"class":73},[49,40781,39295],{"class":66},[49,40783,40784],{"class":51,"line":2897},[49,40785,39300],{"class":66},[49,40787,40788,40790,40792,40794,40796,40798,40800,40802,40804,40806,40808,40810,40812],{"class":51,"line":2902},[49,40789,39345],{"class":66},[49,40791,32122],{"class":6468},[49,40793,1448],{"class":109},[49,40795,1478],{"class":73},[49,40797,1770],{"class":66},[49,40799,32177],{"class":6468},[49,40801,1448],{"class":109},[49,40803,1478],{"class":73},[49,40805,1770],{"class":66},[49,40807,32131],{"class":6468},[49,40809,1448],{"class":109},[49,40811,80],{"class":73},[49,40813,1409],{"class":66},[49,40815,40816],{"class":51,"line":2908},[49,40817,39374],{"class":66},[49,40819,40820],{"class":51,"line":2929},[49,40821,39379],{"class":55},[49,40823,40824,40826,40828,40830],{"class":51,"line":2934},[49,40825,32093],{"class":73},[49,40827,39386],{"class":66},[49,40829,1448],{"class":109},[49,40831,39257],{"class":66},[49,40833,40834,40836,40838,40840,40842,40844,40846,40848,40850,40852,40854,40856,40858,40860,40862,40864,40866],{"class":51,"line":2948},[49,40835,39262],{"class":66},[49,40837,32104],{"class":6468},[49,40839,1448],{"class":109},[49,40841,1596],{"class":73},[49,40843,1770],{"class":66},[49,40845,32113],{"class":6468},[49,40847,1448],{"class":109},[49,40849,33318],{"class":73},[49,40851,1770],{"class":66},[49,40853,32122],{"class":6468},[49,40855,1448],{"class":109},[49,40857,1472],{"class":73},[49,40859,1770],{"class":66},[49,40861,32131],{"class":6468},[49,40863,1448],{"class":109},[49,40865,159],{"class":73},[49,40867,39295],{"class":66},[49,40869,40870],{"class":51,"line":2953},[49,40871,39300],{"class":66},[49,40873,40874,40876,40878,40880,40882,40884,40886,40888,40890,40892,40894,40896,40898,40900,40902,40904,40906],{"class":51,"line":2982},[49,40875,39262],{"class":66},[49,40877,32104],{"class":6468},[49,40879,1448],{"class":109},[49,40881,33318],{"class":73},[49,40883,1770],{"class":66},[49,40885,32113],{"class":6468},[49,40887,1448],{"class":109},[49,40889,33318],{"class":73},[49,40891,1770],{"class":66},[49,40893,32122],{"class":6468},[49,40895,1448],{"class":109},[49,40897,1472],{"class":73},[49,40899,1770],{"class":66},[49,40901,32131],{"class":6468},[49,40903,1448],{"class":109},[49,40905,159],{"class":73},[49,40907,39295],{"class":66},[49,40909,40910],{"class":51,"line":2987},[49,40911,39300],{"class":66},[49,40913,40914,40916,40918,40920,40922,40924,40926,40928,40930,40932,40934,40936,40938],{"class":51,"line":3004},[49,40915,39345],{"class":66},[49,40917,32122],{"class":6468},[49,40919,1448],{"class":109},[49,40921,1478],{"class":73},[49,40923,1770],{"class":66},[49,40925,32177],{"class":6468},[49,40927,1448],{"class":109},[49,40929,1478],{"class":73},[49,40931,1770],{"class":66},[49,40933,32131],{"class":6468},[49,40935,1448],{"class":109},[49,40937,80],{"class":73},[49,40939,1409],{"class":66},[49,40941,40942],{"class":51,"line":3009},[49,40943,39374],{"class":66},[49,40945,40946],{"class":51,"line":3014},[49,40947,39507],{"class":55},[49,40949,40950,40952,40954,40956],{"class":51,"line":3019},[49,40951,32093],{"class":73},[49,40953,39514],{"class":66},[49,40955,1448],{"class":109},[49,40957,39257],{"class":66},[49,40959,40960,40962,40964,40966,40968,40970,40972,40974,40976,40978,40980,40982,40984,40986,40988,40990,40992],{"class":51,"line":3033},[49,40961,39262],{"class":66},[49,40963,32104],{"class":6468},[49,40965,1448],{"class":109},[49,40967,33318],{"class":73},[49,40969,1770],{"class":66},[49,40971,32113],{"class":6468},[49,40973,1448],{"class":109},[49,40975,36118],{"class":73},[49,40977,1770],{"class":66},[49,40979,32122],{"class":6468},[49,40981,1448],{"class":109},[49,40983,1472],{"class":73},[49,40985,1770],{"class":66},[49,40987,32131],{"class":6468},[49,40989,1448],{"class":109},[49,40991,159],{"class":73},[49,40993,39295],{"class":66},[49,40995,40996],{"class":51,"line":3038},[49,40997,39300],{"class":66},[49,40999,41000,41002,41004,41006,41008,41010,41012,41014,41016,41018,41020,41022,41024,41026,41028,41030,41032],{"class":51,"line":3831},[49,41001,39262],{"class":66},[49,41003,32104],{"class":6468},[49,41005,1448],{"class":109},[49,41007,36118],{"class":73},[49,41009,1770],{"class":66},[49,41011,32113],{"class":6468},[49,41013,1448],{"class":109},[49,41015,36118],{"class":73},[49,41017,1770],{"class":66},[49,41019,32122],{"class":6468},[49,41021,1448],{"class":109},[49,41023,1472],{"class":73},[49,41025,1770],{"class":66},[49,41027,32131],{"class":6468},[49,41029,1448],{"class":109},[49,41031,159],{"class":73},[49,41033,39295],{"class":66},[49,41035,41036],{"class":51,"line":3845},[49,41037,39300],{"class":66},[49,41039,41040,41042,41044,41046,41048,41050,41052,41054,41056,41058,41060,41062,41064,41066,41068,41070,41072],{"class":51,"line":3853},[49,41041,39262],{"class":66},[49,41043,32104],{"class":6468},[49,41045,1448],{"class":109},[49,41047,36118],{"class":73},[49,41049,1770],{"class":66},[49,41051,32113],{"class":6468},[49,41053,1448],{"class":109},[49,41055,36118],{"class":73},[49,41057,1770],{"class":66},[49,41059,32122],{"class":6468},[49,41061,1448],{"class":109},[49,41063,1472],{"class":73},[49,41065,1770],{"class":66},[49,41067,32131],{"class":6468},[49,41069,1448],{"class":109},[49,41071,159],{"class":73},[49,41073,39295],{"class":66},[49,41075,41076],{"class":51,"line":3858},[49,41077,39300],{"class":66},[49,41079,41080,41082,41084,41086,41088,41090,41092,41094,41096,41098,41100,41102,41104],{"class":51,"line":3864},[49,41081,39345],{"class":66},[49,41083,32122],{"class":6468},[49,41085,1448],{"class":109},[49,41087,1478],{"class":73},[49,41089,1770],{"class":66},[49,41091,32177],{"class":6468},[49,41093,1448],{"class":109},[49,41095,1478],{"class":73},[49,41097,1770],{"class":66},[49,41099,32131],{"class":6468},[49,41101,1448],{"class":109},[49,41103,80],{"class":73},[49,41105,1409],{"class":66},[49,41107,41108],{"class":51,"line":3870},[49,41109,39374],{"class":66},[49,41111,41112],{"class":51,"line":3875},[49,41113,39675],{"class":55},[49,41115,41116,41118,41120,41122],{"class":51,"line":9200},[49,41117,32093],{"class":73},[49,41119,39682],{"class":66},[49,41121,1448],{"class":109},[49,41123,39257],{"class":66},[49,41125,41126,41128,41130,41132,41134,41136,41138,41140,41142,41144,41146,41148,41150,41152,41154,41156,41158],{"class":51,"line":9224},[49,41127,39262],{"class":66},[49,41129,32104],{"class":6468},[49,41131,1448],{"class":109},[49,41133,36118],{"class":73},[49,41135,1770],{"class":66},[49,41137,32113],{"class":6468},[49,41139,1448],{"class":109},[49,41141,39705],{"class":73},[49,41143,1770],{"class":66},[49,41145,32122],{"class":6468},[49,41147,1448],{"class":109},[49,41149,1472],{"class":73},[49,41151,1770],{"class":66},[49,41153,32131],{"class":6468},[49,41155,1448],{"class":109},[49,41157,159],{"class":73},[49,41159,39295],{"class":66},[49,41161,41162],{"class":51,"line":9229},[49,41163,39300],{"class":66},[49,41165,41166,41168,41170,41172,41174,41176,41178,41180,41182,41184,41186,41188,41190,41192,41194,41196,41198],{"class":51,"line":9235},[49,41167,39262],{"class":66},[49,41169,32104],{"class":6468},[49,41171,1448],{"class":109},[49,41173,39705],{"class":73},[49,41175,1770],{"class":66},[49,41177,32113],{"class":6468},[49,41179,1448],{"class":109},[49,41181,39705],{"class":73},[49,41183,1770],{"class":66},[49,41185,32122],{"class":6468},[49,41187,1448],{"class":109},[49,41189,1472],{"class":73},[49,41191,1770],{"class":66},[49,41193,32131],{"class":6468},[49,41195,1448],{"class":109},[49,41197,159],{"class":73},[49,41199,39295],{"class":66},[49,41201,41202],{"class":51,"line":9262},[49,41203,39300],{"class":66},[49,41205,41206,41208,41210,41212,41214,41216,41218,41220,41222,41224,41226,41228,41230,41232,41234,41236,41238],{"class":51,"line":9267},[49,41207,39262],{"class":66},[49,41209,32104],{"class":6468},[49,41211,1448],{"class":109},[49,41213,39705],{"class":73},[49,41215,1770],{"class":66},[49,41217,32113],{"class":6468},[49,41219,1448],{"class":109},[49,41221,39705],{"class":73},[49,41223,1770],{"class":66},[49,41225,32122],{"class":6468},[49,41227,1448],{"class":109},[49,41229,1472],{"class":73},[49,41231,1770],{"class":66},[49,41233,32131],{"class":6468},[49,41235,1448],{"class":109},[49,41237,159],{"class":73},[49,41239,39295],{"class":66},[49,41241,41242],{"class":51,"line":9273},[49,41243,39300],{"class":66},[49,41245,41246,41248,41250,41252,41254,41256,41258,41260,41262,41264,41266,41268,41270],{"class":51,"line":9285},[49,41247,39345],{"class":66},[49,41249,32122],{"class":6468},[49,41251,1448],{"class":109},[49,41253,1478],{"class":73},[49,41255,1770],{"class":66},[49,41257,32177],{"class":6468},[49,41259,1448],{"class":109},[49,41261,1478],{"class":73},[49,41263,1770],{"class":66},[49,41265,32131],{"class":6468},[49,41267,1448],{"class":109},[49,41269,80],{"class":73},[49,41271,1409],{"class":66},[49,41273,41274],{"class":51,"line":9297},[49,41275,39374],{"class":66},[49,41277,41278],{"class":51,"line":9309},[49,41279,39844],{"class":55},[49,41281,41282,41284,41286,41288],{"class":51,"line":10968},[49,41283,32093],{"class":73},[49,41285,39851],{"class":66},[49,41287,1448],{"class":109},[49,41289,39257],{"class":66},[49,41291,41292,41294,41296,41298,41300,41302,41304,41306,41308,41310,41312,41314,41316,41318,41320,41322,41324],{"class":51,"line":10993},[49,41293,39262],{"class":66},[49,41295,32104],{"class":6468},[49,41297,1448],{"class":109},[49,41299,39705],{"class":73},[49,41301,1770],{"class":66},[49,41303,32113],{"class":6468},[49,41305,1448],{"class":109},[49,41307,39705],{"class":73},[49,41309,1770],{"class":66},[49,41311,32122],{"class":6468},[49,41313,1448],{"class":109},[49,41315,1472],{"class":73},[49,41317,1770],{"class":66},[49,41319,32131],{"class":6468},[49,41321,1448],{"class":109},[49,41323,159],{"class":73},[49,41325,39295],{"class":66},[49,41327,41328],{"class":51,"line":11016},[49,41329,39300],{"class":66},[49,41331,41332,41334,41336,41338,41340,41342,41344,41346,41348,41350,41352,41354,41356,41358,41360,41362,41364],{"class":51,"line":11040},[49,41333,39262],{"class":66},[49,41335,32104],{"class":6468},[49,41337,1448],{"class":109},[49,41339,39705],{"class":73},[49,41341,1770],{"class":66},[49,41343,32113],{"class":6468},[49,41345,1448],{"class":109},[49,41347,39705],{"class":73},[49,41349,1770],{"class":66},[49,41351,32122],{"class":6468},[49,41353,1448],{"class":109},[49,41355,1472],{"class":73},[49,41357,1770],{"class":66},[49,41359,32131],{"class":6468},[49,41361,1448],{"class":109},[49,41363,159],{"class":73},[49,41365,39295],{"class":66},[49,41367,41368],{"class":51,"line":11045},[49,41369,39300],{"class":66},[49,41371,41372,41374,41376,41378,41380,41382,41384,41386,41388,41390,41392,41394,41396,41398,41400,41402,41404],{"class":51,"line":11050},[49,41373,39262],{"class":66},[49,41375,32104],{"class":6468},[49,41377,1448],{"class":109},[49,41379,39705],{"class":73},[49,41381,1770],{"class":66},[49,41383,32113],{"class":6468},[49,41385,1448],{"class":109},[49,41387,39705],{"class":73},[49,41389,1770],{"class":66},[49,41391,32122],{"class":6468},[49,41393,1448],{"class":109},[49,41395,1472],{"class":73},[49,41397,1770],{"class":66},[49,41399,32131],{"class":6468},[49,41401,1448],{"class":109},[49,41403,159],{"class":73},[49,41405,39295],{"class":66},[49,41407,41408],{"class":51,"line":11055},[49,41409,39300],{"class":66},[49,41411,41412,41414,41416,41418,41420,41422,41424,41426,41428,41430,41432,41434,41436],{"class":51,"line":11064},[49,41413,39345],{"class":66},[49,41415,32122],{"class":6468},[49,41417,1448],{"class":109},[49,41419,1478],{"class":73},[49,41421,1770],{"class":66},[49,41423,32177],{"class":6468},[49,41425,1448],{"class":109},[49,41427,1478],{"class":73},[49,41429,1770],{"class":66},[49,41431,32131],{"class":6468},[49,41433,1448],{"class":109},[49,41435,80],{"class":73},[49,41437,1409],{"class":66},[49,41439,41440],{"class":51,"line":11069},[49,41441,39374],{"class":66},[49,41443,41444],{"class":51,"line":11075},[49,41445,40012],{"class":55},[49,41447,41448,41450,41452,41454],{"class":51,"line":11096},[49,41449,32093],{"class":73},[49,41451,40019],{"class":66},[49,41453,1448],{"class":109},[49,41455,39257],{"class":66},[49,41457,41458],{"class":51,"line":11102},[49,41459,40028],{"class":55},[49,41461,41462],{"class":51,"line":11116},[49,41463,40033],{"class":55},[49,41465,41466],{"class":51,"line":11122},[49,41467,40038],{"class":66},[49,41469,41470,41472,41474,41476,41478,41480,41482,41484,41486],{"class":51,"line":11149},[49,41471,40043],{"class":66},[49,41473,1761],{"class":73},[49,41475,1846],{"class":109},[49,41477,1761],{"class":73},[49,41479,1846],{"class":109},[49,41481,39705],{"class":73},[49,41483,1770],{"class":66},[49,41485,36118],{"class":73},[49,41487,39295],{"class":66},[49,41489,41490],{"class":51,"line":11158},[49,41491,39300],{"class":66},[49,41493,41494,41496,41498,41500,41502],{"class":51,"line":11164},[49,41495,40043],{"class":66},[49,41497,36118],{"class":73},[49,41499,1770],{"class":66},[49,41501,33318],{"class":73},[49,41503,39295],{"class":66},[49,41505,41506],{"class":51,"line":11172},[49,41507,39300],{"class":66},[49,41509,41510,41512,41514,41516,41518],{"class":51,"line":11177},[49,41511,40043],{"class":66},[49,41513,33318],{"class":73},[49,41515,1770],{"class":66},[49,41517,106],{"class":73},[49,41519,1409],{"class":66},[49,41521,41522],{"class":51,"line":17854},[49,41523,39374],{"class":66},[49,41525,41526],{"class":51,"line":17860},[49,41527,3654],{"emptyLinePlaceholder":1330},[49,41529,41530],{"class":51,"line":17883},[49,41531,40104],{"class":55},[49,41533,41534],{"class":51,"line":17889},[49,41535,40109],{"class":55},[49,41537,41538,41540,41542,41544,41546],{"class":51,"line":17912},[49,41539,4657],{"class":109},[49,41541,40116],{"class":66},[49,41543,27292],{"class":109},[49,41545,40121],{"class":73},[49,41547,40124],{"class":66},[49,41549,41550],{"class":51,"line":17926},[49,41551,40129],{"class":55},[49,41553,41554,41556,41558],{"class":51,"line":17946},[49,41555,5896],{"class":109},[49,41557,40136],{"class":73},[49,41559,40139],{"class":66},[49,41561,41562],{"class":51,"line":17952},[49,41563,40144],{"class":55},[49,41565,41566,41568,41570,41572,41574],{"class":51,"line":17963},[49,41567,40149],{"class":66},[49,41569,40152],{"class":6468},[49,41571,1448],{"class":109},[49,41573,40157],{"class":1505},[49,41575,1409],{"class":66},[49,41577,41578],{"class":51,"line":17986},[49,41579,40164],{"class":55},[49,41581,41582,41584,41586,41588,41590,41592],{"class":51,"line":18008},[49,41583,40169],{"class":109},[49,41585,40172],{"class":66},[49,41587,40175],{"class":109},[49,41589,40178],{"class":109},[49,41591,40181],{"class":73},[49,41593,4993],{"class":66},[49,41595,41596],{"class":51,"line":18013},[49,41597,40188],{"class":55},[49,41599,41600,41602,41604],{"class":51,"line":18019},[49,41601,40193],{"class":66},[49,41603,80],{"class":73},[49,41605,1409],{"class":66},[49,41607,41608],{"class":51,"line":18033},[49,41609,40202],{"class":55},[49,41611,41612,41614,41616],{"class":51,"line":18046},[49,41613,40207],{"class":109},[49,41615,40136],{"class":73},[49,41617,40212],{"class":66},[49,41619,41620],{"class":51,"line":18051},[49,41621,40217],{"class":55},[49,41623,41624],{"class":51,"line":18065},[49,41625,40222],{"class":55},[49,41627,41628,41630,41632,41634,41636],{"class":51,"line":18070},[49,41629,40227],{"class":66},[49,41631,80],{"class":73},[49,41633,1770],{"class":66},[49,41635,40234],{"class":73},[49,41637,1409],{"class":66},[49,41639,41640],{"class":51,"line":18076},[49,41641,40241],{"class":55},[49,41643,41644,41646,41648,41650,41652,41654],{"class":51,"line":18081},[49,41645,40169],{"class":109},[49,41647,40172],{"class":66},[49,41649,40175],{"class":109},[49,41651,40178],{"class":109},[49,41653,40181],{"class":73},[49,41655,4993],{"class":66},[49,41657,41658,41660,41662],{"class":51,"line":18095},[49,41659,40193],{"class":66},[49,41661,80],{"class":73},[49,41663,1409],{"class":66},[49,41665,41666],{"class":51,"line":18100},[49,41667,3654],{"emptyLinePlaceholder":1330},[49,41669,41670],{"class":51,"line":18105},[49,41671,36413],{"class":55},[49,41673,41674,41676,41678],{"class":51,"line":18119},[49,41675,32049],{"class":109},[49,41677,32341],{"class":62},[49,41679,32344],{"class":66},[49,41681,41682,41684,41686,41688],{"class":51,"line":18131},[49,41683,32349],{"class":66},[49,41685,1448],{"class":109},[49,41687,32071],{"class":73},[49,41689,40290],{"class":66},[49,41691,41692,41694,41696,41698],{"class":51,"line":18136},[49,41693,32349],{"class":66},[49,41695,1448],{"class":109},[49,41697,32071],{"class":73},[49,41699,40301],{"class":66},[49,41701,41702,41704,41706,41708],{"class":51,"line":18149},[49,41703,32349],{"class":66},[49,41705,1448],{"class":109},[49,41707,32071],{"class":73},[49,41709,40312],{"class":66},[49,41711,41712,41714,41716,41718],{"class":51,"line":18154},[49,41713,32349],{"class":66},[49,41715,1448],{"class":109},[49,41717,32071],{"class":73},[49,41719,40323],{"class":66},[49,41721,41722,41724,41726,41728],{"class":51,"line":18159},[49,41723,32349],{"class":66},[49,41725,1448],{"class":109},[49,41727,32071],{"class":73},[49,41729,40334],{"class":66},[49,41731,41732,41734,41736,41738],{"class":51,"line":18164},[49,41733,32349],{"class":66},[49,41735,1448],{"class":109},[49,41737,32071],{"class":73},[49,41739,40345],{"class":66},[49,41741,41742,41744],{"class":51,"line":18177},[49,41743,16003],{"class":109},[49,41745,32457],{"class":66},[49,41747,41748],{"class":51,"line":18182},[49,41749,3654],{"emptyLinePlaceholder":1330},[49,41751,41752],{"class":51,"line":33881},[49,41753,40360],{"class":55},[49,41755,41756,41758,41760,41762,41764],{"class":51,"line":33887},[49,41757,2787],{"class":109},[49,41759,32468],{"class":73},[49,41761,4203],{"class":109},[49,41763,40371],{"class":1505},[49,41765,4993],{"class":66},[49,41767,41768,41770,41772,41774,41776,41778,41780,41782,41784],{"class":51,"line":33893},[49,41769,32485],{"class":66},[49,41771,1448],{"class":109},[49,41773,31699],{"class":66},[49,41775,32492],{"class":1505},[49,41777,2959],{"class":109},[49,41779,32497],{"class":66},[49,41781,2956],{"class":109},[49,41783,31724],{"class":1505},[49,41785,1409],{"class":66},[49,41787,41788,41790],{"class":51,"line":33899},[49,41789,32547],{"class":73},[49,41791,31733],{"class":66},[49,41793,41794,41796,41798],{"class":51,"line":33905},[49,41795,32537],{"class":66},[49,41797,1448],{"class":109},[49,41799,40408],{"class":66},[49,41801,41802,41804,41806,41808,41810,41812,41814,41816],{"class":51,"line":33916},[49,41803,32547],{"class":73},[49,41805,32550],{"class":66},[49,41807,159],{"class":73},[49,41809,1770],{"class":66},[49,41811,32749],{"class":73},[49,41813,1770],{"class":66},[49,41815,32749],{"class":73},[49,41817,32563],{"class":66},[591,41819,41820],{"start":70},[26,41821,41822],{},"测试代码",[39,41824,41826],{"className":31626,"code":41825,"language":31628,"meta":44,"style":44},"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",[46,41827,41828,41834,41844,41854,41858,41868,41879,41883,41887,41891,41899,41915,41925,41941,41951,41965,41969,41979,41989,41999,42005,42009,42013,42021,42025,42041,42049,42053,42057,42065,42073,42077,42081,42085,42089,42095,42099,42109,42117,42125,42129,42133,42137,42145,42149,42165,42169,42173,42177,42189,42193,42205,42209,42213,42225,42229,42239,42243,42247,42259,42263,42272,42276,42280,42288,42292,42300,42304,42308,42312,42316,42320,42336,42344,42348,42352,42400,42406,42410,42420,42428,42436,42440,42444,42448,42452,42460,42464,42480,42484,42492,42500],{"__ignoreMap":44},[49,41829,41830,41832],{"class":51,"line":52},[49,41831,31640],{"class":109},[49,41833,31643],{"class":66},[49,41835,41836,41838,41840,41842],{"class":51,"line":59},[49,41837,31640],{"class":109},[49,41839,32663],{"class":66},[49,41841,32631],{"class":109},[49,41843,32668],{"class":66},[49,41845,41846,41848,41850,41852],{"class":51,"line":70},[49,41847,31985],{"class":109},[49,41849,32646],{"class":66},[49,41851,31640],{"class":109},[49,41853,32651],{"class":66},[49,41855,41856],{"class":51,"line":86},[49,41857,35170],{"class":55},[49,41859,41860,41862,41864,41866],{"class":51,"line":98},[49,41861,31985],{"class":109},[49,41863,32616],{"class":66},[49,41865,31640],{"class":109},[49,41867,32621],{"class":66},[49,41869,41870,41872,41874,41876],{"class":51,"line":121},[49,41871,31985],{"class":109},[49,41873,33162],{"class":66},[49,41875,31640],{"class":109},[49,41877,41878],{"class":73}," VGG16\n",[49,41880,41881],{"class":51,"line":134},[49,41882,3654],{"emptyLinePlaceholder":1330},[49,41884,41885],{"class":51,"line":1085},[49,41886,3654],{"emptyLinePlaceholder":1330},[49,41888,41889],{"class":51,"line":2574},[49,41890,35199],{"class":55},[49,41892,41893,41895,41897],{"class":51,"line":2586},[49,41894,33195],{"class":109},[49,41896,35206],{"class":62},[49,41898,33201],{"class":66},[49,41900,41901,41903,41905,41907,41909,41911,41913],{"class":51,"line":2867},[49,41902,35213],{"class":66},[49,41904,1448],{"class":109},[49,41906,32703],{"class":66},[49,41908,32706],{"class":6468},[49,41910,1448],{"class":109},[49,41912,32711],{"class":1505},[49,41914,32714],{"class":66},[49,41916,41917,41919,41921,41923],{"class":51,"line":2872},[49,41918,35230],{"class":6468},[49,41920,1448],{"class":109},[49,41922,35235],{"class":73},[49,41924,32714],{"class":66},[49,41926,41927,41929,41931,41933,41935,41937,41939],{"class":51,"line":2878},[49,41928,35242],{"class":6468},[49,41930,1448],{"class":109},[49,41932,32741],{"class":66},[49,41934,32744],{"class":6468},[49,41936,1448],{"class":109},[49,41938,32749],{"class":73},[49,41940,32752],{"class":66},[49,41942,41943,41945,41947,41949],{"class":51,"line":2883},[49,41944,35259],{"class":6468},[49,41946,1448],{"class":109},[49,41948,32724],{"class":73},[49,41950,1409],{"class":66},[49,41952,41953,41955,41957,41959,41961,41963],{"class":51,"line":2897},[49,41954,35270],{"class":66},[49,41956,1448],{"class":109},[49,41958,32782],{"class":66},[49,41960,32785],{"class":6468},[49,41962,1448],{"class":109},[49,41964,35281],{"class":66},[49,41966,41967],{"class":51,"line":2902},[49,41968,35286],{"class":55},[49,41970,41971,41973,41975,41977],{"class":51,"line":2908},[49,41972,35291],{"class":6468},[49,41974,1448],{"class":109},[49,41976,159],{"class":73},[49,41978,32714],{"class":66},[49,41980,41981,41983,41985,41987],{"class":51,"line":2929},[49,41982,35302],{"class":6468},[49,41984,1448],{"class":109},[49,41986,32724],{"class":73},[49,41988,32714],{"class":66},[49,41990,41991,41993,41995,41997],{"class":51,"line":2934},[49,41992,35313],{"class":6468},[49,41994,1448],{"class":109},[49,41996,80],{"class":73},[49,41998,1409],{"class":66},[49,42000,42001,42003],{"class":51,"line":2948},[49,42002,5344],{"class":109},[49,42004,35326],{"class":66},[49,42006,42007],{"class":51,"line":2953},[49,42008,3654],{"emptyLinePlaceholder":1330},[49,42010,42011],{"class":51,"line":2982},[49,42012,35335],{"class":55},[49,42014,42015,42017,42019],{"class":51,"line":2987},[49,42016,33195],{"class":109},[49,42018,35342],{"class":62},[49,42020,35345],{"class":66},[49,42022,42023],{"class":51,"line":3004},[49,42024,35350],{"class":55},[49,42026,42027,42029,42031,42033,42035,42037,42039],{"class":51,"line":3009},[49,42028,32485],{"class":66},[49,42030,1448],{"class":109},[49,42032,32492],{"class":1505},[49,42034,2959],{"class":109},[49,42036,32497],{"class":66},[49,42038,2956],{"class":109},[49,42040,35367],{"class":1505},[49,42042,42043,42045,42047],{"class":51,"line":3014},[49,42044,32537],{"class":66},[49,42046,1448],{"class":109},[49,42048,33537],{"class":66},[49,42050,42051],{"class":51,"line":3019},[49,42052,3654],{"emptyLinePlaceholder":1330},[49,42054,42055],{"class":51,"line":3033},[49,42056,35384],{"class":55},[49,42058,42059,42061,42063],{"class":51,"line":3038},[49,42060,35389],{"class":66},[49,42062,1448],{"class":109},[49,42064,33590],{"class":73},[49,42066,42067,42069,42071],{"class":51,"line":3831},[49,42068,35398],{"class":66},[49,42070,1448],{"class":109},[49,42072,4339],{"class":73},[49,42074,42075],{"class":51,"line":3845},[49,42076,3654],{"emptyLinePlaceholder":1330},[49,42078,42079],{"class":51,"line":3853},[49,42080,35411],{"class":55},[49,42082,42083],{"class":51,"line":3858},[49,42084,35416],{"class":55},[49,42086,42087],{"class":51,"line":3864},[49,42088,35421],{"class":55},[49,42090,42091,42093],{"class":51,"line":3870},[49,42092,35426],{"class":109},[49,42094,34132],{"class":66},[49,42096,42097],{"class":51,"line":3875},[49,42098,35433],{"class":55},[49,42100,42101,42103,42105,42107],{"class":51,"line":9200},[49,42102,4657],{"class":109},[49,42104,35440],{"class":66},[49,42106,27292],{"class":109},[49,42108,35445],{"class":66},[49,42110,42111,42113,42115],{"class":51,"line":9224},[49,42112,35450],{"class":66},[49,42114,1448],{"class":109},[49,42116,35455],{"class":66},[49,42118,42119,42121,42123],{"class":51,"line":9229},[49,42120,35460],{"class":66},[49,42122,1448],{"class":109},[49,42124,35465],{"class":66},[49,42126,42127],{"class":51,"line":9235},[49,42128,35470],{"class":55},[49,42130,42131],{"class":51,"line":9262},[49,42132,34123],{"class":66},[49,42134,42135],{"class":51,"line":9267},[49,42136,35479],{"class":55},[49,42138,42139,42141,42143],{"class":51,"line":9273},[49,42140,33908],{"class":66},[49,42142,1448],{"class":109},[49,42144,35488],{"class":66},[49,42146,42147],{"class":51,"line":9285},[49,42148,35493],{"class":55},[49,42150,42151,42153,42155,42157,42159,42161,42163],{"class":51,"line":9297},[49,42152,33925],{"class":66},[49,42154,1448],{"class":109},[49,42156,33930],{"class":66},[49,42158,33933],{"class":6468},[49,42160,1448],{"class":109},[49,42162,159],{"class":73},[49,42164,1409],{"class":66},[49,42166,42167],{"class":51,"line":9309},[49,42168,35514],{"class":55},[49,42170,42171],{"class":51,"line":10968},[49,42172,35519],{"class":55},[49,42174,42175],{"class":51,"line":10993},[49,42176,35524],{"class":55},[49,42178,42179,42181,42183,42185,42187],{"class":51,"line":11016},[49,42180,35529],{"class":66},[49,42182,10729],{"class":109},[49,42184,34035],{"class":66},[49,42186,4203],{"class":109},[49,42188,35538],{"class":66},[49,42190,42191],{"class":51,"line":11040},[49,42192,35543],{"class":55},[49,42194,42195,42197,42199,42201,42203],{"class":51,"line":11045},[49,42196,35548],{"class":66},[49,42198,10729],{"class":109},[49,42200,35553],{"class":66},[49,42202,80],{"class":73},[49,42204,1409],{"class":66},[49,42206,42207],{"class":51,"line":11050},[49,42208,3654],{"emptyLinePlaceholder":1330},[49,42210,42211],{"class":51,"line":11055},[49,42212,35566],{"class":55},[49,42214,42215,42217,42219,42221,42223],{"class":51,"line":11064},[49,42216,35571],{"class":66},[49,42218,1448],{"class":109},[49,42220,35576],{"class":66},[49,42222,1975],{"class":109},[49,42224,35581],{"class":66},[49,42226,42227],{"class":51,"line":11069},[49,42228,35586],{"class":55},[49,42230,42231,42233,42235,42237],{"class":51,"line":11075},[49,42232,33699],{"class":73},[49,42234,1403],{"class":66},[49,42236,35595],{"class":1505},[49,42238,35598],{"class":66},[49,42240,42241],{"class":51,"line":11096},[49,42242,3654],{"emptyLinePlaceholder":1330},[49,42244,42245],{"class":51,"line":11102},[49,42246,35607],{"class":55},[49,42248,42249,42251,42253,42255,42257],{"class":51,"line":11116},[49,42250,2787],{"class":109},[49,42252,32468],{"class":73},[49,42254,4203],{"class":109},[49,42256,32473],{"class":1505},[49,42258,4993],{"class":66},[49,42260,42261],{"class":51,"line":11122},[49,42262,35624],{"class":55},[49,42264,42265,42267,42269],{"class":51,"line":11149},[49,42266,32537],{"class":66},[49,42268,1448],{"class":109},[49,42270,42271],{"class":66},"VGG16()\n",[49,42273,42274],{"class":51,"line":11158},[49,42275,35637],{"class":55},[49,42277,42278],{"class":51,"line":11164},[49,42279,35642],{"class":55},[49,42281,42282,42284,42286],{"class":51,"line":11172},[49,42283,35647],{"class":66},[49,42285,35650],{"class":1505},[49,42287,31745],{"class":66},[49,42289,42290],{"class":51,"line":11177},[49,42291,35657],{"class":55},[49,42293,42294,42296,42298],{"class":51,"line":17854},[49,42295,35270],{"class":66},[49,42297,1448],{"class":109},[49,42299,35666],{"class":66},[49,42301,42302],{"class":51,"line":17860},[49,42303,35671],{"class":55},[49,42305,42306],{"class":51,"line":17883},[49,42307,35676],{"class":66},[49,42309,42310],{"class":51,"line":17889},[49,42311,3654],{"emptyLinePlaceholder":1330},[49,42313,42314],{"class":51,"line":17912},[49,42315,35685],{"class":55},[49,42317,42318],{"class":51,"line":17926},[49,42319,35690],{"class":55},[49,42321,42322,42324,42326,42328,42330,42332,42334],{"class":51,"line":17946},[49,42323,32485],{"class":66},[49,42325,1448],{"class":109},[49,42327,32492],{"class":1505},[49,42329,2959],{"class":109},[49,42331,32497],{"class":66},[49,42333,2956],{"class":109},[49,42335,35367],{"class":1505},[49,42337,42338,42340,42342],{"class":51,"line":17952},[49,42339,32537],{"class":66},[49,42341,1448],{"class":109},[49,42343,33537],{"class":66},[49,42345,42346],{"class":51,"line":17963},[49,42347,35719],{"class":55},[49,42349,42350],{"class":51,"line":17986},[49,42351,35724],{"class":55},[49,42353,42354,42356,42358,42360,42362,42364,42366,42368,42370,42372,42374,42376,42378,42380,42382,42384,42386,42388,42390,42392,42394,42396,42398],{"class":51,"line":18008},[49,42355,35729],{"class":66},[49,42357,1448],{"class":109},[49,42359,2280],{"class":66},[49,42361,35736],{"class":1505},[49,42363,1770],{"class":66},[49,42365,35741],{"class":1505},[49,42367,1770],{"class":66},[49,42369,35746],{"class":1505},[49,42371,1770],{"class":66},[49,42373,35751],{"class":1505},[49,42375,1770],{"class":66},[49,42377,35756],{"class":1505},[49,42379,1770],{"class":66},[49,42381,35761],{"class":1505},[49,42383,1770],{"class":66},[49,42385,35766],{"class":1505},[49,42387,1770],{"class":66},[49,42389,35771],{"class":1505},[49,42391,1770],{"class":66},[49,42393,35776],{"class":1505},[49,42395,1770],{"class":66},[49,42397,35781],{"class":1505},[49,42399,34494],{"class":66},[49,42401,42402,42404],{"class":51,"line":18013},[49,42403,35426],{"class":109},[49,42405,34132],{"class":66},[49,42407,42408],{"class":51,"line":18019},[49,42409,35794],{"class":55},[49,42411,42412,42414,42416,42418],{"class":51,"line":18033},[49,42413,4657],{"class":109},[49,42415,35801],{"class":66},[49,42417,27292],{"class":109},[49,42419,35445],{"class":66},[49,42421,42422,42424,42426],{"class":51,"line":18046},[49,42423,33858],{"class":66},[49,42425,1448],{"class":109},[49,42427,33863],{"class":66},[49,42429,42430,42432,42434],{"class":51,"line":18051},[49,42431,33873],{"class":66},[49,42433,1448],{"class":109},[49,42435,33878],{"class":66},[49,42437,42438],{"class":51,"line":18065},[49,42439,3654],{"emptyLinePlaceholder":1330},[49,42441,42442],{"class":51,"line":18070},[49,42443,35830],{"class":55},[49,42445,42446],{"class":51,"line":18076},[49,42447,34123],{"class":66},[49,42449,42450],{"class":51,"line":18081},[49,42451,35839],{"class":55},[49,42453,42454,42456,42458],{"class":51,"line":18095},[49,42455,33908],{"class":66},[49,42457,1448],{"class":109},[49,42459,33913],{"class":66},[49,42461,42462],{"class":51,"line":18100},[49,42463,35852],{"class":55},[49,42465,42466,42468,42470,42472,42474,42476,42478],{"class":51,"line":18105},[49,42467,33925],{"class":66},[49,42469,1448],{"class":109},[49,42471,33930],{"class":66},[49,42473,33933],{"class":6468},[49,42475,1448],{"class":109},[49,42477,159],{"class":73},[49,42479,1409],{"class":66},[49,42481,42482],{"class":51,"line":18119},[49,42483,35873],{"class":55},[49,42485,42486,42488,42490],{"class":51,"line":18131},[49,42487,35878],{"class":66},[49,42489,1448],{"class":109},[49,42491,35883],{"class":66},[49,42493,42494,42496,42498],{"class":51,"line":18136},[49,42495,35888],{"class":66},[49,42497,1448],{"class":109},[49,42499,35893],{"class":66},[49,42501,42502,42504,42506,42508,42510,42512,42514,42516],{"class":51,"line":18149},[49,42503,35898],{"class":73},[49,42505,1403],{"class":66},[49,42507,35903],{"class":1505},[49,42509,35906],{"class":66},[49,42511,35909],{"class":1505},[49,42513,1770],{"class":66},[49,42515,35914],{"class":1505},[49,42517,35917],{"class":66},[183,42519,42521],{"id":42520},"_23googlenet","2.3.GoogLeNet",[525,42523,42525],{"id":42524},"_231原理","2.3.1.原理",[591,42527,42528],{},[26,42529,42530],{},"网络结构",[19,42532,42533],{},[174,42534],{"alt":44,"src":42535},"\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,42537,42538],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,42540,42541],{},[174,42542],{"alt":44,"src":42543},"\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,42545,42546],{},[174,42547],{"alt":44,"src":42548},"\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,42550,42551],{},[174,42552],{"alt":44,"src":42553},"\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",[591,42555,42556],{"start":59},[26,42557,42558],{},"1x1卷积的优点",[19,42560,42561],{},[174,42562],{"alt":44,"src":42563},"\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",[591,42565,42566],{"start":70},[26,42567,42568],{},"全局平均池化层优点",[19,42570,42571],{},[174,42572],{"alt":44,"src":42573},"\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,42575,42576],{},[174,42577],{"alt":44,"src":42578},"\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",[591,42580,42581],{"start":86},[26,42582,42583],{},"参数详细描述",[19,42585,42586],{},[174,42587],{"alt":44,"src":42588},"\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,42590,42591],{},[174,42592],{"alt":44,"src":42593},"\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,42595,42596],{},[174,42597],{"alt":44,"src":42598},"\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,42600,42601],{},[174,42602],{"alt":44,"src":42603},"\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,42605,42606],{},[174,42607],{"alt":44,"src":42608},"\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,42610,42611],{},[174,42612],{"alt":44,"src":42613},"\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,42615,42616],{},[174,42617],{"alt":44,"src":42618},"\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,42620,42621],{},[174,42622],{"alt":44,"src":42623},"\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,42625,42626],{},[174,42627],{"alt":44,"src":42628},"\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,42630,42631],{},[174,42632],{"alt":44,"src":42633},"\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,42635,42636],{},[174,42637],{"alt":44,"src":42638},"\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,42640,42641],{},[174,42642],{"alt":44,"src":42643},"\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,42645,42646],{},[174,42647],{"alt":44,"src":42648},"\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,42650,42651],{},[174,42652],{"alt":44,"src":42653},"\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,42655,42656],{},[174,42657],{"alt":44,"src":42658},"\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,42660,42661],{},[174,42662],{"alt":44,"src":42663},"\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,42665,42666],{},[174,42667],{"alt":44,"src":42668},"\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,42670,42671],{},[174,42672],{"alt":44,"src":42673},"\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,42675,42676],{},[174,42677],{"alt":44,"src":42678},"\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,42680,42681],{},[174,42682],{"alt":44,"src":42683},"\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,42685,42686],{},[174,42687],{"alt":44,"src":42688},"\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",[525,42690,42692],{"id":42691},"_232代码实现","2.3.2.代码实现",[591,42694,42695],{},[26,42696,31959],{},[19,42698,42699],{},"根据原理一步一步搭建即可",[39,42701,42703],{"className":31626,"code":42702,"language":31628,"meta":44,"style":44},"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",[46,42704,42705,42711,42721,42731,42735,42752,42761,42776,42786,42791,42824,42829,42866,42913,42918,42954,43001,43006,43011,43046,43078,43082,43090,43106,43130,43155,43176,43181,43196,43200,43204,43209,43226,43231,43240,43255,43266,43310,43314,43342,43346,43357,43385,43389,43426,43430,43458,43462,43473,43509,43541,43569,43573,43584,43618,43650,43682,43715,43749,43777,43781,43792,43825,43857,43871,43875,43888,43892,43897,43909,43917,43939,43944,43949,43954,43959,43964,43969,43983,43991,44000,44013,44028,44037,44041,44049,44060,44071,44082,44093,44104,44110,44114,44119,44131,44151,44160],{"__ignoreMap":44},[49,42706,42707,42709],{"class":51,"line":52},[49,42708,31640],{"class":109},[49,42710,31643],{"class":66},[49,42712,42713,42715,42717,42719],{"class":51,"line":59},[49,42714,31985],{"class":109},[49,42716,31988],{"class":66},[49,42718,31640],{"class":109},[49,42720,31993],{"class":66},[49,42722,42723,42725,42727,42729],{"class":51,"line":70},[49,42724,31985],{"class":109},[49,42726,32005],{"class":66},[49,42728,31640],{"class":109},[49,42730,32010],{"class":66},[49,42732,42733],{"class":51,"line":86},[49,42734,3654],{"emptyLinePlaceholder":1330},[49,42736,42737,42739,42742,42744,42746,42748,42750],{"class":51,"line":98},[49,42738,15945],{"class":109},[49,42740,42741],{"class":62}," Inception",[49,42743,1403],{"class":66},[49,42745,32026],{"class":62},[49,42747,1949],{"class":66},[49,42749,32031],{"class":62},[49,42751,32034],{"class":66},[49,42753,42754,42756,42758],{"class":51,"line":121},[49,42755,32049],{"class":109},[49,42757,32052],{"class":73},[49,42759,42760],{"class":66},"(self,in_channels,c1,c2,c3,c4):\n",[49,42762,42763,42765,42768,42770,42772,42774],{"class":51,"line":134},[49,42764,32065],{"class":73},[49,42766,42767],{"class":66},"(Inception,",[49,42769,32071],{"class":73},[49,42771,32074],{"class":66},[49,42773,32077],{"class":73},[49,42775,3230],{"class":66},[49,42777,42778,42780,42782,42784],{"class":51,"line":1085},[49,42779,32093],{"class":73},[49,42781,36019],{"class":66},[49,42783,1448],{"class":109},[49,42785,36024],{"class":66},[49,42787,42788],{"class":51,"line":2574},[49,42789,42790],{"class":55},"        # 路线1：定义1*1卷积\n",[49,42792,42793,42795,42798,42800,42802,42804,42806,42809,42811,42813,42816,42818,42820,42822],{"class":51,"line":2586},[49,42794,32093],{"class":73},[49,42796,42797],{"class":66},".p1_1",[49,42799,1448],{"class":109},[49,42801,32101],{"class":66},[49,42803,32104],{"class":6468},[49,42805,1448],{"class":109},[49,42807,42808],{"class":66},"in_channels,",[49,42810,32113],{"class":6468},[49,42812,1448],{"class":109},[49,42814,42815],{"class":66},"c1,",[49,42817,32122],{"class":6468},[49,42819,1448],{"class":109},[49,42821,159],{"class":73},[49,42823,1409],{"class":66},[49,42825,42826],{"class":51,"line":2867},[49,42827,42828],{"class":55},"        # 路线2：定义1*1卷积和3*3\n",[49,42830,42831,42833,42836,42838,42840,42842,42844,42846,42848,42850,42853,42855,42858,42860,42862,42864],{"class":51,"line":2872},[49,42832,32093],{"class":73},[49,42834,42835],{"class":66},".p2_1",[49,42837,1448],{"class":109},[49,42839,32101],{"class":66},[49,42841,32104],{"class":6468},[49,42843,1448],{"class":109},[49,42845,42808],{"class":66},[49,42847,32113],{"class":6468},[49,42849,1448],{"class":109},[49,42851,42852],{"class":66},"c2[",[49,42854,80],{"class":73},[49,42856,42857],{"class":66},"],",[49,42859,32122],{"class":6468},[49,42861,1448],{"class":109},[49,42863,159],{"class":73},[49,42865,1409],{"class":66},[49,42867,42868,42870,42873,42875,42877,42879,42881,42883,42885,42887,42889,42891,42893,42895,42897,42899,42901,42903,42905,42907,42909,42911],{"class":51,"line":2878},[49,42869,32093],{"class":73},[49,42871,42872],{"class":66},".p2_2",[49,42874,1448],{"class":109},[49,42876,32101],{"class":66},[49,42878,32104],{"class":6468},[49,42880,1448],{"class":109},[49,42882,42852],{"class":66},[49,42884,80],{"class":73},[49,42886,42857],{"class":66},[49,42888,32113],{"class":6468},[49,42890,1448],{"class":109},[49,42892,42852],{"class":66},[49,42894,159],{"class":73},[49,42896,42857],{"class":66},[49,42898,32122],{"class":6468},[49,42900,1448],{"class":109},[49,42902,1472],{"class":73},[49,42904,1770],{"class":66},[49,42906,32131],{"class":6468},[49,42908,1448],{"class":109},[49,42910,159],{"class":73},[49,42912,1409],{"class":66},[49,42914,42915],{"class":51,"line":2883},[49,42916,42917],{"class":55},"        # 路线3：定义1*1卷积和5*5\n",[49,42919,42920,42922,42925,42927,42929,42931,42933,42935,42937,42939,42942,42944,42946,42948,42950,42952],{"class":51,"line":2897},[49,42921,32093],{"class":73},[49,42923,42924],{"class":66},".p3_1",[49,42926,1448],{"class":109},[49,42928,32101],{"class":66},[49,42930,32104],{"class":6468},[49,42932,1448],{"class":109},[49,42934,42808],{"class":66},[49,42936,32113],{"class":6468},[49,42938,1448],{"class":109},[49,42940,42941],{"class":66},"c3[",[49,42943,80],{"class":73},[49,42945,42857],{"class":66},[49,42947,32122],{"class":6468},[49,42949,1448],{"class":109},[49,42951,159],{"class":73},[49,42953,1409],{"class":66},[49,42955,42956,42958,42961,42963,42965,42967,42969,42971,42973,42975,42977,42979,42981,42983,42985,42987,42989,42991,42993,42995,42997,42999],{"class":51,"line":2902},[49,42957,32093],{"class":73},[49,42959,42960],{"class":66},".p3_2",[49,42962,1448],{"class":109},[49,42964,32101],{"class":66},[49,42966,32104],{"class":6468},[49,42968,1448],{"class":109},[49,42970,42941],{"class":66},[49,42972,80],{"class":73},[49,42974,42857],{"class":66},[49,42976,32113],{"class":6468},[49,42978,1448],{"class":109},[49,42980,42941],{"class":66},[49,42982,159],{"class":73},[49,42984,42857],{"class":66},[49,42986,32122],{"class":6468},[49,42988,1448],{"class":109},[49,42990,1711],{"class":73},[49,42992,1770],{"class":66},[49,42994,32131],{"class":6468},[49,42996,1448],{"class":109},[49,42998,1478],{"class":73},[49,43000,1409],{"class":66},[49,43002,43003],{"class":51,"line":2908},[49,43004,43005],{"class":55},"        # 路线4：定义3*3最大池化和1*1卷积\n",[49,43007,43008],{"class":51,"line":2929},[49,43009,43010],{"class":55},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[49,43012,43013,43015,43018,43020,43022,43024,43026,43028,43030,43032,43034,43036,43038,43040,43042,43044],{"class":51,"line":2934},[49,43014,32093],{"class":73},[49,43016,43017],{"class":66},".p4_1",[49,43019,1448],{"class":109},[49,43021,36077],{"class":66},[49,43023,32122],{"class":6468},[49,43025,1448],{"class":109},[49,43027,1472],{"class":73},[49,43029,1770],{"class":66},[49,43031,32177],{"class":6468},[49,43033,1448],{"class":109},[49,43035,159],{"class":73},[49,43037,1770],{"class":66},[49,43039,32131],{"class":6468},[49,43041,1448],{"class":109},[49,43043,159],{"class":73},[49,43045,1409],{"class":66},[49,43047,43048,43050,43053,43055,43057,43059,43061,43063,43065,43067,43070,43072,43074,43076],{"class":51,"line":2948},[49,43049,32093],{"class":73},[49,43051,43052],{"class":66},".p4_2",[49,43054,1448],{"class":109},[49,43056,32101],{"class":66},[49,43058,32104],{"class":6468},[49,43060,1448],{"class":109},[49,43062,42808],{"class":66},[49,43064,32113],{"class":6468},[49,43066,1448],{"class":109},[49,43068,43069],{"class":66},"c4,",[49,43071,32122],{"class":6468},[49,43073,1448],{"class":109},[49,43075,159],{"class":73},[49,43077,1409],{"class":66},[49,43079,43080],{"class":51,"line":2953},[49,43081,3654],{"emptyLinePlaceholder":1330},[49,43083,43084,43086,43088],{"class":51,"line":2982},[49,43085,32049],{"class":109},[49,43087,32341],{"class":62},[49,43089,32344],{"class":66},[49,43091,43092,43095,43097,43099,43101,43103],{"class":51,"line":2987},[49,43093,43094],{"class":66},"        p1",[49,43096,1448],{"class":109},[49,43098,32071],{"class":73},[49,43100,36432],{"class":66},[49,43102,32071],{"class":73},[49,43104,43105],{"class":66},".p1_1(x))\n",[49,43107,43108,43110,43112,43114,43116,43118,43121,43123,43125,43127],{"class":51,"line":3004},[49,43109,8337],{"class":66},[49,43111,1448],{"class":109},[49,43113,32071],{"class":73},[49,43115,36432],{"class":66},[49,43117,32071],{"class":73},[49,43119,43120],{"class":66},".p2_2(",[49,43122,32071],{"class":73},[49,43124,36432],{"class":66},[49,43126,32071],{"class":73},[49,43128,43129],{"class":66},".p2_1(x))))\n",[49,43131,43132,43135,43137,43139,43141,43143,43146,43148,43150,43152],{"class":51,"line":3009},[49,43133,43134],{"class":66},"        p3",[49,43136,1448],{"class":109},[49,43138,32071],{"class":73},[49,43140,36432],{"class":66},[49,43142,32071],{"class":73},[49,43144,43145],{"class":66},".p3_2(",[49,43147,32071],{"class":73},[49,43149,36432],{"class":66},[49,43151,32071],{"class":73},[49,43153,43154],{"class":66},".p3_1(x))))\n",[49,43156,43157,43160,43162,43164,43166,43168,43171,43173],{"class":51,"line":3014},[49,43158,43159],{"class":66},"        p4",[49,43161,1448],{"class":109},[49,43163,32071],{"class":73},[49,43165,36432],{"class":66},[49,43167,32071],{"class":73},[49,43169,43170],{"class":66},".p4_2(",[49,43172,32071],{"class":73},[49,43174,43175],{"class":66},".p4_1(x)))\n",[49,43177,43178],{"class":51,"line":3019},[49,43179,43180],{"class":55},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[49,43182,43183,43185,43188,43190,43192,43194],{"class":51,"line":3033},[49,43184,16003],{"class":109},[49,43186,43187],{"class":66}," torch.cat((p1,p2,p3,p4),",[49,43189,33933],{"class":6468},[49,43191,1448],{"class":109},[49,43193,159],{"class":73},[49,43195,1409],{"class":66},[49,43197,43198],{"class":51,"line":3038},[49,43199,3654],{"emptyLinePlaceholder":1330},[49,43201,43202],{"class":51,"line":3831},[49,43203,3654],{"emptyLinePlaceholder":1330},[49,43205,43206],{"class":51,"line":3845},[49,43207,43208],{"class":55},"# 搭建GoogLeNet网络\n",[49,43210,43211,43213,43216,43218,43220,43222,43224],{"class":51,"line":3853},[49,43212,15945],{"class":109},[49,43214,43215],{"class":62}," GoogLeNet",[49,43217,1403],{"class":66},[49,43219,32026],{"class":62},[49,43221,1949],{"class":66},[49,43223,32031],{"class":62},[49,43225,32034],{"class":66},[49,43227,43228],{"class":51,"line":3858},[49,43229,43230],{"class":55},"    # 必须把Inception导入到里边\n",[49,43232,43233,43235,43237],{"class":51,"line":3864},[49,43234,32049],{"class":109},[49,43236,32052],{"class":73},[49,43238,43239],{"class":66},"(self,Inception):\n",[49,43241,43242,43244,43247,43249,43251,43253],{"class":51,"line":3870},[49,43243,32065],{"class":73},[49,43245,43246],{"class":66},"(GoogLeNet,",[49,43248,32071],{"class":73},[49,43250,32074],{"class":66},[49,43252,32077],{"class":73},[49,43254,3230],{"class":66},[49,43256,43257,43259,43262,43264],{"class":51,"line":3875},[49,43258,32093],{"class":73},[49,43260,43261],{"class":66},".b1",[49,43263,1448],{"class":109},[49,43265,39257],{"class":66},[49,43267,43268,43270,43272,43274,43276,43278,43280,43282,43284,43286,43288,43290,43292,43294,43296,43298,43300,43302,43304,43306,43308],{"class":51,"line":9200},[49,43269,39262],{"class":66},[49,43271,32104],{"class":6468},[49,43273,1448],{"class":109},[49,43275,159],{"class":73},[49,43277,1770],{"class":66},[49,43279,32113],{"class":6468},[49,43281,1448],{"class":109},[49,43283,1596],{"class":73},[49,43285,1770],{"class":66},[49,43287,32122],{"class":6468},[49,43289,1448],{"class":109},[49,43291,1761],{"class":73},[49,43293,1770],{"class":66},[49,43295,32177],{"class":6468},[49,43297,1448],{"class":109},[49,43299,1478],{"class":73},[49,43301,1770],{"class":66},[49,43303,32131],{"class":6468},[49,43305,1448],{"class":109},[49,43307,1472],{"class":73},[49,43309,39295],{"class":66},[49,43311,43312],{"class":51,"line":9224},[49,43313,39300],{"class":66},[49,43315,43316,43318,43320,43322,43324,43326,43328,43330,43332,43334,43336,43338,43340],{"class":51,"line":9229},[49,43317,39345],{"class":66},[49,43319,32122],{"class":6468},[49,43321,1448],{"class":109},[49,43323,1472],{"class":73},[49,43325,1770],{"class":66},[49,43327,32177],{"class":6468},[49,43329,1448],{"class":109},[49,43331,1478],{"class":73},[49,43333,1770],{"class":66},[49,43335,32131],{"class":6468},[49,43337,1448],{"class":109},[49,43339,159],{"class":73},[49,43341,1409],{"class":66},[49,43343,43344],{"class":51,"line":9235},[49,43345,39374],{"class":66},[49,43347,43348,43350,43353,43355],{"class":51,"line":9262},[49,43349,32093],{"class":73},[49,43351,43352],{"class":66},".b2",[49,43354,1448],{"class":109},[49,43356,39257],{"class":66},[49,43358,43359,43361,43363,43365,43367,43369,43371,43373,43375,43377,43379,43381,43383],{"class":51,"line":9267},[49,43360,39262],{"class":66},[49,43362,32104],{"class":6468},[49,43364,1448],{"class":109},[49,43366,1596],{"class":73},[49,43368,1770],{"class":66},[49,43370,32113],{"class":6468},[49,43372,1448],{"class":109},[49,43374,1596],{"class":73},[49,43376,1770],{"class":66},[49,43378,32122],{"class":6468},[49,43380,1448],{"class":109},[49,43382,159],{"class":73},[49,43384,39295],{"class":66},[49,43386,43387],{"class":51,"line":9273},[49,43388,39300],{"class":66},[49,43390,43391,43393,43395,43397,43399,43401,43403,43405,43408,43410,43412,43414,43416,43418,43420,43422,43424],{"class":51,"line":9285},[49,43392,39262],{"class":66},[49,43394,32104],{"class":6468},[49,43396,1448],{"class":109},[49,43398,1596],{"class":73},[49,43400,1770],{"class":66},[49,43402,32113],{"class":6468},[49,43404,1448],{"class":109},[49,43406,43407],{"class":73},"192",[49,43409,1770],{"class":66},[49,43411,32122],{"class":6468},[49,43413,1448],{"class":109},[49,43415,1472],{"class":73},[49,43417,1770],{"class":66},[49,43419,32131],{"class":6468},[49,43421,1448],{"class":109},[49,43423,159],{"class":73},[49,43425,39295],{"class":66},[49,43427,43428],{"class":51,"line":9297},[49,43429,39300],{"class":66},[49,43431,43432,43434,43436,43438,43440,43442,43444,43446,43448,43450,43452,43454,43456],{"class":51,"line":9309},[49,43433,39345],{"class":66},[49,43435,32122],{"class":6468},[49,43437,1448],{"class":109},[49,43439,1472],{"class":73},[49,43441,1770],{"class":66},[49,43443,32177],{"class":6468},[49,43445,1448],{"class":109},[49,43447,1478],{"class":73},[49,43449,1770],{"class":66},[49,43451,32131],{"class":6468},[49,43453,1448],{"class":109},[49,43455,159],{"class":73},[49,43457,1409],{"class":66},[49,43459,43460],{"class":51,"line":10968},[49,43461,39374],{"class":66},[49,43463,43464,43466,43469,43471],{"class":51,"line":10993},[49,43465,32093],{"class":73},[49,43467,43468],{"class":66},".b3",[49,43470,1448],{"class":109},[49,43472,39257],{"class":66},[49,43474,43475,43478,43480,43482,43484,43487,43489,43491,43493,43496,43498,43500,43502,43505,43507],{"class":51,"line":11016},[49,43476,43477],{"class":66},"            Inception(",[49,43479,43407],{"class":73},[49,43481,1770],{"class":66},[49,43483,1596],{"class":73},[49,43485,43486],{"class":66},",(",[49,43488,1602],{"class":73},[49,43490,1770],{"class":66},[49,43492,33318],{"class":73},[49,43494,43495],{"class":66},"),(",[49,43497,1992],{"class":73},[49,43499,1770],{"class":66},[49,43501,1590],{"class":73},[49,43503,43504],{"class":66},"),",[49,43506,1590],{"class":73},[49,43508,39295],{"class":66},[49,43510,43511,43513,43515,43517,43519,43521,43523,43525,43527,43529,43531,43533,43535,43537,43539],{"class":51,"line":11040},[49,43512,43477],{"class":66},[49,43514,36118],{"class":73},[49,43516,1770],{"class":66},[49,43518,33318],{"class":73},[49,43520,43486],{"class":66},[49,43522,33318],{"class":73},[49,43524,1770],{"class":66},[49,43526,43407],{"class":73},[49,43528,43495],{"class":66},[49,43530,1590],{"class":73},[49,43532,1770],{"class":66},[49,43534,1602],{"class":73},[49,43536,43504],{"class":66},[49,43538,1596],{"class":73},[49,43540,39295],{"class":66},[49,43542,43543,43545,43547,43549,43551,43553,43555,43557,43559,43561,43563,43565,43567],{"class":51,"line":11045},[49,43544,39345],{"class":66},[49,43546,32122],{"class":6468},[49,43548,1448],{"class":109},[49,43550,1472],{"class":73},[49,43552,1770],{"class":66},[49,43554,32177],{"class":6468},[49,43556,1448],{"class":109},[49,43558,1478],{"class":73},[49,43560,1770],{"class":66},[49,43562,32131],{"class":6468},[49,43564,1448],{"class":109},[49,43566,159],{"class":73},[49,43568,1409],{"class":66},[49,43570,43571],{"class":51,"line":11050},[49,43572,39374],{"class":66},[49,43574,43575,43577,43580,43582],{"class":51,"line":11055},[49,43576,32093],{"class":73},[49,43578,43579],{"class":66},".b4",[49,43581,1448],{"class":109},[49,43583,39257],{"class":66},[49,43585,43586,43588,43591,43593,43595,43597,43599,43601,43604,43606,43608,43610,43612,43614,43616],{"class":51,"line":11064},[49,43587,43477],{"class":66},[49,43589,43590],{"class":73},"480",[49,43592,1770],{"class":66},[49,43594,43407],{"class":73},[49,43596,43486],{"class":66},[49,43598,1602],{"class":73},[49,43600,1770],{"class":66},[49,43602,43603],{"class":73},"208",[49,43605,43495],{"class":66},[49,43607,1992],{"class":73},[49,43609,1770],{"class":66},[49,43611,1998],{"class":73},[49,43613,43504],{"class":66},[49,43615,1596],{"class":73},[49,43617,39295],{"class":66},[49,43619,43620,43622,43624,43626,43628,43630,43632,43634,43636,43638,43640,43642,43644,43646,43648],{"class":51,"line":11069},[49,43621,43477],{"class":66},[49,43623,39705],{"class":73},[49,43625,1770],{"class":66},[49,43627,22298],{"class":73},[49,43629,43486],{"class":66},[49,43631,2009],{"class":73},[49,43633,1770],{"class":66},[49,43635,32749],{"class":73},[49,43637,43495],{"class":66},[49,43639,2190],{"class":73},[49,43641,1770],{"class":66},[49,43643,1596],{"class":73},[49,43645,43504],{"class":66},[49,43647,1596],{"class":73},[49,43649,39295],{"class":66},[49,43651,43652,43654,43656,43658,43660,43662,43664,43666,43668,43670,43672,43674,43676,43678,43680],{"class":51,"line":11075},[49,43653,43477],{"class":66},[49,43655,39705],{"class":73},[49,43657,1770],{"class":66},[49,43659,33318],{"class":73},[49,43661,43486],{"class":66},[49,43663,33318],{"class":73},[49,43665,1770],{"class":66},[49,43667,36118],{"class":73},[49,43669,43495],{"class":66},[49,43671,2190],{"class":73},[49,43673,1770],{"class":66},[49,43675,1596],{"class":73},[49,43677,43504],{"class":66},[49,43679,1596],{"class":73},[49,43681,39295],{"class":66},[49,43683,43684,43686,43688,43690,43692,43694,43696,43698,43701,43703,43705,43707,43709,43711,43713],{"class":51,"line":11096},[49,43685,43477],{"class":66},[49,43687,39705],{"class":73},[49,43689,1770],{"class":66},[49,43691,2009],{"class":73},[49,43693,43486],{"class":66},[49,43695,33318],{"class":73},[49,43697,1770],{"class":66},[49,43699,43700],{"class":73},"288",[49,43702,43495],{"class":66},[49,43704,1590],{"class":73},[49,43706,1770],{"class":66},[49,43708,1596],{"class":73},[49,43710,43504],{"class":66},[49,43712,1596],{"class":73},[49,43714,39295],{"class":66},[49,43716,43717,43719,43722,43724,43726,43728,43730,43732,43735,43737,43739,43741,43743,43745,43747],{"class":51,"line":11102},[49,43718,43477],{"class":66},[49,43720,43721],{"class":73},"528",[49,43723,1770],{"class":66},[49,43725,36118],{"class":73},[49,43727,43486],{"class":66},[49,43729,22298],{"class":73},[49,43731,1770],{"class":66},[49,43733,43734],{"class":73},"320",[49,43736,43495],{"class":66},[49,43738,1590],{"class":73},[49,43740,1770],{"class":66},[49,43742,33318],{"class":73},[49,43744,43504],{"class":66},[49,43746,33318],{"class":73},[49,43748,39295],{"class":66},[49,43750,43751,43753,43755,43757,43759,43761,43763,43765,43767,43769,43771,43773,43775],{"class":51,"line":11116},[49,43752,39345],{"class":66},[49,43754,32122],{"class":6468},[49,43756,1448],{"class":109},[49,43758,1472],{"class":73},[49,43760,1770],{"class":66},[49,43762,32177],{"class":6468},[49,43764,1448],{"class":109},[49,43766,1478],{"class":73},[49,43768,1770],{"class":66},[49,43770,32131],{"class":6468},[49,43772,1448],{"class":109},[49,43774,159],{"class":73},[49,43776,1409],{"class":66},[49,43778,43779],{"class":51,"line":11122},[49,43780,39374],{"class":66},[49,43782,43783,43785,43788,43790],{"class":51,"line":11149},[49,43784,32093],{"class":73},[49,43786,43787],{"class":66},".b5",[49,43789,1448],{"class":109},[49,43791,39257],{"class":66},[49,43793,43794,43796,43799,43801,43803,43805,43807,43809,43811,43813,43815,43817,43819,43821,43823],{"class":51,"line":11158},[49,43795,43477],{"class":66},[49,43797,43798],{"class":73},"832",[49,43800,1770],{"class":66},[49,43802,36118],{"class":73},[49,43804,43486],{"class":66},[49,43806,22298],{"class":73},[49,43808,1770],{"class":66},[49,43810,43734],{"class":73},[49,43812,43495],{"class":66},[49,43814,1590],{"class":73},[49,43816,1770],{"class":66},[49,43818,33318],{"class":73},[49,43820,43504],{"class":66},[49,43822,33318],{"class":73},[49,43824,39295],{"class":66},[49,43826,43827,43829,43831,43833,43835,43837,43839,43841,43843,43845,43847,43849,43851,43853,43855],{"class":51,"line":11164},[49,43828,43477],{"class":66},[49,43830,43798],{"class":73},[49,43832,1770],{"class":66},[49,43834,36188],{"class":73},[49,43836,43486],{"class":66},[49,43838,43407],{"class":73},[49,43840,1770],{"class":66},[49,43842,36188],{"class":73},[49,43844,43495],{"class":66},[49,43846,1998],{"class":73},[49,43848,1770],{"class":66},[49,43850,33318],{"class":73},[49,43852,43504],{"class":66},[49,43854,33318],{"class":73},[49,43856,39295],{"class":66},[49,43858,43859,43862,43864,43866,43868],{"class":51,"line":11172},[49,43860,43861],{"class":66},"            nn.AdaptiveAvgPool2d((",[49,43863,159],{"class":73},[49,43865,1770],{"class":66},[49,43867,159],{"class":73},[49,43869,43870],{"class":66},")),\n",[49,43872,43873],{"class":51,"line":11177},[49,43874,40038],{"class":66},[49,43876,43877,43879,43882,43884,43886],{"class":51,"line":17854},[49,43878,40043],{"class":66},[49,43880,43881],{"class":73},"1024",[49,43883,1770],{"class":66},[49,43885,106],{"class":73},[49,43887,1409],{"class":66},[49,43889,43890],{"class":51,"line":17860},[49,43891,39374],{"class":66},[49,43893,43894],{"class":51,"line":17883},[49,43895,43896],{"class":55},"        # 对模型参数初始化\n",[49,43898,43899,43901,43903,43905,43907],{"class":51,"line":17889},[49,43900,4657],{"class":109},[49,43902,40116],{"class":66},[49,43904,27292],{"class":109},[49,43906,40121],{"class":73},[49,43908,40124],{"class":66},[49,43910,43911,43913,43915],{"class":51,"line":17912},[49,43912,5896],{"class":109},[49,43914,40136],{"class":73},[49,43916,40139],{"class":66},[49,43918,43919,43921,43924,43926,43929,43931,43933,43935,43937],{"class":51,"line":17926},[49,43920,40149],{"class":66},[49,43922,43923],{"class":6468},"mode",[49,43925,1448],{"class":109},[49,43927,43928],{"class":1505},"'fan_out'",[49,43930,1770],{"class":66},[49,43932,40152],{"class":6468},[49,43934,1448],{"class":109},[49,43936,40157],{"class":1505},[49,43938,1409],{"class":66},[49,43940,43941],{"class":51,"line":17946},[49,43942,43943],{"class":55},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[49,43945,43946],{"class":51,"line":17952},[49,43947,43948],{"class":55},"                # ② mode = 'fan_out'决定使用的fan值：\n",[49,43950,43951],{"class":51,"line":17963},[49,43952,43953],{"class":55},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[49,43955,43956],{"class":51,"line":17986},[49,43957,43958],{"class":55},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[49,43960,43961],{"class":51,"line":18008},[49,43962,43963],{"class":55},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[49,43965,43966],{"class":51,"line":18013},[49,43967,43968],{"class":55},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[49,43970,43971,43973,43975,43977,43979,43981],{"class":51,"line":18019},[49,43972,40169],{"class":109},[49,43974,40172],{"class":66},[49,43976,40175],{"class":109},[49,43978,40178],{"class":109},[49,43980,40181],{"class":73},[49,43982,4993],{"class":66},[49,43984,43985,43987,43989],{"class":51,"line":18033},[49,43986,40193],{"class":66},[49,43988,80],{"class":73},[49,43990,1409],{"class":66},[49,43992,43993,43996,43998],{"class":51,"line":18046},[49,43994,43995],{"class":109},"                elif",[49,43997,40136],{"class":73},[49,43999,40212],{"class":66},[49,44001,44002,44005,44007,44009,44011],{"class":51,"line":18051},[49,44003,44004],{"class":66},"                    nn.init.normal_(m.weight,",[49,44006,80],{"class":73},[49,44008,1770],{"class":66},[49,44010,40234],{"class":73},[49,44012,1409],{"class":66},[49,44014,44015,44018,44020,44022,44024,44026],{"class":51,"line":18065},[49,44016,44017],{"class":109},"                    if",[49,44019,40172],{"class":66},[49,44021,40175],{"class":109},[49,44023,40178],{"class":109},[49,44025,40181],{"class":73},[49,44027,4993],{"class":66},[49,44029,44030,44033,44035],{"class":51,"line":18070},[49,44031,44032],{"class":66},"                        nn.init.constant_(m.bias,",[49,44034,80],{"class":73},[49,44036,1409],{"class":66},[49,44038,44039],{"class":51,"line":18076},[49,44040,36413],{"class":55},[49,44042,44043,44045,44047],{"class":51,"line":18081},[49,44044,32049],{"class":109},[49,44046,32341],{"class":62},[49,44048,32344],{"class":66},[49,44050,44051,44053,44055,44057],{"class":51,"line":18095},[49,44052,32349],{"class":66},[49,44054,1448],{"class":109},[49,44056,32071],{"class":73},[49,44058,44059],{"class":66},".b1(x)\n",[49,44061,44062,44064,44066,44068],{"class":51,"line":18100},[49,44063,32349],{"class":66},[49,44065,1448],{"class":109},[49,44067,32071],{"class":73},[49,44069,44070],{"class":66},".b2(x)\n",[49,44072,44073,44075,44077,44079],{"class":51,"line":18105},[49,44074,32349],{"class":66},[49,44076,1448],{"class":109},[49,44078,32071],{"class":73},[49,44080,44081],{"class":66},".b3(x)\n",[49,44083,44084,44086,44088,44090],{"class":51,"line":18119},[49,44085,32349],{"class":66},[49,44087,1448],{"class":109},[49,44089,32071],{"class":73},[49,44091,44092],{"class":66},".b4(x)\n",[49,44094,44095,44097,44099,44101],{"class":51,"line":18131},[49,44096,32349],{"class":66},[49,44098,1448],{"class":109},[49,44100,32071],{"class":73},[49,44102,44103],{"class":66},".b5(x)\n",[49,44105,44106,44108],{"class":51,"line":18136},[49,44107,16003],{"class":109},[49,44109,32457],{"class":66},[49,44111,44112],{"class":51,"line":18149},[49,44113,3654],{"emptyLinePlaceholder":1330},[49,44115,44116],{"class":51,"line":18154},[49,44117,44118],{"class":55},"# 模型展示\n",[49,44120,44121,44123,44125,44127,44129],{"class":51,"line":18159},[49,44122,2787],{"class":109},[49,44124,32468],{"class":73},[49,44126,4203],{"class":109},[49,44128,32473],{"class":1505},[49,44130,4993],{"class":66},[49,44132,44133,44135,44137,44139,44141,44143,44145,44147,44149],{"class":51,"line":18164},[49,44134,32485],{"class":66},[49,44136,1448],{"class":109},[49,44138,31699],{"class":66},[49,44140,32492],{"class":1505},[49,44142,2959],{"class":109},[49,44144,32497],{"class":66},[49,44146,2956],{"class":109},[49,44148,31724],{"class":1505},[49,44150,1409],{"class":66},[49,44152,44153,44155,44157],{"class":51,"line":18177},[49,44154,32537],{"class":66},[49,44156,1448],{"class":109},[49,44158,44159],{"class":66},"GoogLeNet(Inception).to(device)\n",[49,44161,44162,44164,44166,44168,44170,44172,44174,44176],{"class":51,"line":18182},[49,44163,32547],{"class":73},[49,44165,32550],{"class":66},[49,44167,159],{"class":73},[49,44169,1770],{"class":66},[49,44171,32749],{"class":73},[49,44173,1770],{"class":66},[49,44175,32749],{"class":73},[49,44177,32563],{"class":66},[591,44179,44180],{"start":59},[26,44181,40431],{},[39,44183,44185],{"className":31626,"code":44184,"language":31628,"meta":44,"style":44},"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",[46,44186,44187,44193,44199,44209,44215,44225,44235,44245,44255,44265,44269,44280,44290,44294,44298,44302,44310,44322,44332,44348,44358,44390,44404,44414,44424,44428,44438,44452,44462,44472,44482,44488,44492,44496,44500,44504,44508,44516,44536,44540,44544,44548,44552,44556,44572,44576,44580,44588,44592,44596,44604,44608,44612,44616,44624,44628,44632,44636,44640,44648,44652,44660,44664,44672,44676,44684,44688,44696,44700,44704,44712,44716,44720,44724,44736,44760,44774,44778,44782,44786,44794,44798,44806,44810,44818,44822,44830,44834,44842,44846,44854,44858,44870,44874,44882,44886,44894,44898,44902,44906,44910,44918,44922,44938,44942,44950,44954,44958,44962,44966,44970,44974,44978,44994,44998,45010,45014,45026,45030,45042,45046,45054,45058,45066,45070,45074,45078,45084,45088,45096,45100,45116,45120,45128,45132,45148,45160,45164,45176,45180,45184,45192,45196,45200,45208,45212,45220,45224,45232,45236,45240,45282,45324,45328,45332,45348,45352,45368,45372,45376,45384,45388,45392,45404,45442,45446,45450,45458,45462,45476,45486,45492,45498,45504,45510,45514,45518,45524,45528,45532,45540,45544,45562,45566,45570,45574,45590,45594,45598,45602,45606,45610,45630,45650,45654,45658,45662,45670,45678,45682,45698,45718,45738,45742,45746,45754,45762,45766,45770,45774,45786,45790,45800,45808,45825],{"__ignoreMap":44},[49,44188,44189,44191],{"class":51,"line":52},[49,44190,31640],{"class":109},[49,44192,33070],{"class":66},[49,44194,44195,44197],{"class":51,"line":59},[49,44196,31640],{"class":109},[49,44198,33077],{"class":66},[49,44200,44201,44203,44205,44207],{"class":51,"line":70},[49,44202,31640],{"class":109},[49,44204,33088],{"class":66},[49,44206,32631],{"class":109},[49,44208,33093],{"class":66},[49,44210,44211,44213],{"class":51,"line":86},[49,44212,31640],{"class":109},[49,44214,31643],{"class":66},[49,44216,44217,44219,44221,44223],{"class":51,"line":98},[49,44218,31985],{"class":109},[49,44220,32663],{"class":66},[49,44222,31640],{"class":109},[49,44224,33110],{"class":66},[49,44226,44227,44229,44231,44233],{"class":51,"line":121},[49,44228,31985],{"class":109},[49,44230,32616],{"class":66},[49,44232,31640],{"class":109},[49,44234,32621],{"class":66},[49,44236,44237,44239,44241,44243],{"class":51,"line":134},[49,44238,31985],{"class":109},[49,44240,32646],{"class":66},[49,44242,31640],{"class":109},[49,44244,32651],{"class":66},[49,44246,44247,44249,44251,44253],{"class":51,"line":1085},[49,44248,31640],{"class":109},[49,44250,32663],{"class":66},[49,44252,32631],{"class":109},[49,44254,32668],{"class":66},[49,44256,44257,44259,44261,44263],{"class":51,"line":2574},[49,44258,31640],{"class":109},[49,44260,32680],{"class":66},[49,44262,32631],{"class":109},[49,44264,32685],{"class":66},[49,44266,44267],{"class":51,"line":2586},[49,44268,33155],{"class":55},[49,44270,44271,44273,44275,44277],{"class":51,"line":2867},[49,44272,31985],{"class":109},[49,44274,33162],{"class":66},[49,44276,31640],{"class":109},[49,44278,44279],{"class":66}," GoogLeNet, Inception\n",[49,44281,44282,44284,44286,44288],{"class":51,"line":2872},[49,44283,31985],{"class":109},[49,44285,31988],{"class":66},[49,44287,31640],{"class":109},[49,44289,31993],{"class":66},[49,44291,44292],{"class":51,"line":2878},[49,44293,3654],{"emptyLinePlaceholder":1330},[49,44295,44296],{"class":51,"line":2883},[49,44297,3654],{"emptyLinePlaceholder":1330},[49,44299,44300],{"class":51,"line":2897},[49,44301,33190],{"class":55},[49,44303,44304,44306,44308],{"class":51,"line":2902},[49,44305,33195],{"class":109},[49,44307,33198],{"class":62},[49,44309,33201],{"class":66},[49,44311,44312,44314,44316,44318,44320],{"class":51,"line":2908},[49,44313,33206],{"class":66},[49,44315,1448],{"class":109},[49,44317,32703],{"class":66},[49,44319,32711],{"class":1505},[49,44321,32714],{"class":66},[49,44323,44324,44326,44328,44330],{"class":51,"line":2929},[49,44325,33219],{"class":6468},[49,44327,1448],{"class":109},[49,44329,32724],{"class":73},[49,44331,32714],{"class":66},[49,44333,44334,44336,44338,44340,44342,44344,44346],{"class":51,"line":2934},[49,44335,33230],{"class":6468},[49,44337,1448],{"class":109},[49,44339,32741],{"class":66},[49,44341,32744],{"class":6468},[49,44343,1448],{"class":109},[49,44345,36697],{"class":73},[49,44347,32752],{"class":66},[49,44349,44350,44352,44354,44356],{"class":51,"line":2948},[49,44351,33247],{"class":6468},[49,44353,1448],{"class":109},[49,44355,32724],{"class":73},[49,44357,1409],{"class":66},[49,44359,44360,44362,44364,44366,44368,44370,44372,44374,44376,44378,44380,44382,44384,44386,44388],{"class":51,"line":2953},[49,44361,33258],{"class":66},[49,44363,1448],{"class":109},[49,44365,33263],{"class":66},[49,44367,33266],{"class":73},[49,44369,1403],{"class":66},[49,44371,33271],{"class":73},[49,44373,1846],{"class":109},[49,44375,8610],{"class":73},[49,44377,33278],{"class":66},[49,44379,33266],{"class":73},[49,44381,1403],{"class":66},[49,44383,33285],{"class":73},[49,44385,1846],{"class":109},[49,44387,8610],{"class":73},[49,44389,33292],{"class":66},[49,44391,44392,44394,44396,44398,44400,44402],{"class":51,"line":2982},[49,44393,33297],{"class":66},[49,44395,1448],{"class":109},[49,44397,33302],{"class":66},[49,44399,32785],{"class":6468},[49,44401,1448],{"class":109},[49,44403,32790],{"class":66},[49,44405,44406,44408,44410,44412],{"class":51,"line":2987},[49,44407,33313],{"class":6468},[49,44409,1448],{"class":109},[49,44411,1590],{"class":73},[49,44413,32714],{"class":66},[49,44415,44416,44418,44420,44422],{"class":51,"line":3004},[49,44417,33325],{"class":6468},[49,44419,1448],{"class":109},[49,44421,32724],{"class":73},[49,44423,32714],{"class":66},[49,44425,44426],{"class":51,"line":3009},[49,44427,33336],{"class":55},[49,44429,44430,44432,44434,44436],{"class":51,"line":3014},[49,44431,33341],{"class":6468},[49,44433,1448],{"class":109},[49,44435,1787],{"class":73},[49,44437,1409],{"class":66},[49,44439,44440,44442,44444,44446,44448,44450],{"class":51,"line":3019},[49,44441,33352],{"class":66},[49,44443,1448],{"class":109},[49,44445,32782],{"class":66},[49,44447,32785],{"class":6468},[49,44449,1448],{"class":109},[49,44451,33363],{"class":66},[49,44453,44454,44456,44458,44460],{"class":51,"line":3033},[49,44455,33368],{"class":6468},[49,44457,1448],{"class":109},[49,44459,1590],{"class":73},[49,44461,32714],{"class":66},[49,44463,44464,44466,44468,44470],{"class":51,"line":3038},[49,44465,33379],{"class":6468},[49,44467,1448],{"class":109},[49,44469,32724],{"class":73},[49,44471,32714],{"class":66},[49,44473,44474,44476,44478,44480],{"class":51,"line":3831},[49,44475,33390],{"class":6468},[49,44477,1448],{"class":109},[49,44479,1787],{"class":73},[49,44481,1409],{"class":66},[49,44483,44484,44486],{"class":51,"line":3845},[49,44485,5344],{"class":109},[49,44487,33403],{"class":66},[49,44489,44490],{"class":51,"line":3853},[49,44491,3654],{"emptyLinePlaceholder":1330},[49,44493,44494],{"class":51,"line":3858},[49,44495,33412],{"class":55},[49,44497,44498],{"class":51,"line":3864},[49,44499,33417],{"class":55},[49,44501,44502],{"class":51,"line":3870},[49,44503,3654],{"emptyLinePlaceholder":1330},[49,44505,44506],{"class":51,"line":3875},[49,44507,33426],{"class":55},[49,44509,44510,44512,44514],{"class":51,"line":9200},[49,44511,33195],{"class":109},[49,44513,33433],{"class":62},[49,44515,33436],{"class":66},[49,44517,44518,44520,44522,44524,44526,44528,44530,44532,44534],{"class":51,"line":9224},[49,44519,32485],{"class":66},[49,44521,1448],{"class":109},[49,44523,31699],{"class":66},[49,44525,32492],{"class":1505},[49,44527,2959],{"class":109},[49,44529,32497],{"class":66},[49,44531,2956],{"class":109},[49,44533,33455],{"class":1505},[49,44535,1409],{"class":66},[49,44537,44538],{"class":51,"line":9229},[49,44539,3654],{"emptyLinePlaceholder":1330},[49,44541,44542],{"class":51,"line":9235},[49,44543,3654],{"emptyLinePlaceholder":1330},[49,44545,44546],{"class":51,"line":9262},[49,44547,33470],{"class":55},[49,44549,44550],{"class":51,"line":9267},[49,44551,33475],{"class":55},[49,44553,44554],{"class":51,"line":9273},[49,44555,33480],{"class":55},[49,44557,44558,44560,44562,44564,44566,44568,44570],{"class":51,"line":9285},[49,44559,33485],{"class":66},[49,44561,1448],{"class":109},[49,44563,33490],{"class":66},[49,44565,33493],{"class":6468},[49,44567,1448],{"class":109},[49,44569,33498],{"class":73},[49,44571,1409],{"class":66},[49,44573,44574],{"class":51,"line":9297},[49,44575,3654],{"emptyLinePlaceholder":1330},[49,44577,44578],{"class":51,"line":9309},[49,44579,33509],{"class":55},[49,44581,44582,44584,44586],{"class":51,"line":10968},[49,44583,33514],{"class":66},[49,44585,1448],{"class":109},[49,44587,33519],{"class":66},[49,44589,44590],{"class":51,"line":10993},[49,44591,3654],{"emptyLinePlaceholder":1330},[49,44593,44594],{"class":51,"line":11016},[49,44595,33528],{"class":55},[49,44597,44598,44600,44602],{"class":51,"line":11040},[49,44599,32537],{"class":66},[49,44601,1448],{"class":109},[49,44603,33537],{"class":66},[49,44605,44606],{"class":51,"line":11045},[49,44607,33542],{"class":55},[49,44609,44610],{"class":51,"line":11050},[49,44611,33547],{"class":55},[49,44613,44614],{"class":51,"line":11055},[49,44615,33552],{"class":55},[49,44617,44618,44620,44622],{"class":51,"line":11064},[49,44619,33557],{"class":66},[49,44621,1448],{"class":109},[49,44623,33562],{"class":66},[49,44625,44626],{"class":51,"line":11069},[49,44627,3654],{"emptyLinePlaceholder":1330},[49,44629,44630],{"class":51,"line":11075},[49,44631,3654],{"emptyLinePlaceholder":1330},[49,44633,44634],{"class":51,"line":11096},[49,44635,33575],{"class":55},[49,44637,44638],{"class":51,"line":11102},[49,44639,33580],{"class":55},[49,44641,44642,44644,44646],{"class":51,"line":11116},[49,44643,33585],{"class":66},[49,44645,1448],{"class":109},[49,44647,33590],{"class":73},[49,44649,44650],{"class":51,"line":11122},[49,44651,33595],{"class":55},[49,44653,44654,44656,44658],{"class":51,"line":11149},[49,44655,33600],{"class":66},[49,44657,1448],{"class":109},[49,44659,33605],{"class":66},[49,44661,44662],{"class":51,"line":11158},[49,44663,33610],{"class":55},[49,44665,44666,44668,44670],{"class":51,"line":11164},[49,44667,33615],{"class":66},[49,44669,1448],{"class":109},[49,44671,33605],{"class":66},[49,44673,44674],{"class":51,"line":11172},[49,44675,33624],{"class":55},[49,44677,44678,44680,44682],{"class":51,"line":11177},[49,44679,33629],{"class":66},[49,44681,1448],{"class":109},[49,44683,33605],{"class":66},[49,44685,44686],{"class":51,"line":17854},[49,44687,33638],{"class":55},[49,44689,44690,44692,44694],{"class":51,"line":17860},[49,44691,33643],{"class":66},[49,44693,1448],{"class":109},[49,44695,33605],{"class":66},[49,44697,44698],{"class":51,"line":17883},[49,44699,3654],{"emptyLinePlaceholder":1330},[49,44701,44702],{"class":51,"line":17889},[49,44703,33656],{"class":55},[49,44705,44706,44708,44710],{"class":51,"line":17912},[49,44707,33661],{"class":66},[49,44709,1448],{"class":109},[49,44711,33666],{"class":66},[49,44713,44714],{"class":51,"line":17926},[49,44715,3654],{"emptyLinePlaceholder":1330},[49,44717,44718],{"class":51,"line":17946},[49,44719,3654],{"emptyLinePlaceholder":1330},[49,44721,44722],{"class":51,"line":17952},[49,44723,33679],{"class":55},[49,44725,44726,44728,44730,44732,44734],{"class":51,"line":17963},[49,44727,4455],{"class":109},[49,44729,33686],{"class":66},[49,44731,27292],{"class":109},[49,44733,33691],{"class":73},[49,44735,33694],{"class":66},[49,44737,44738,44740,44742,44744,44746,44748,44750,44752,44754,44756,44758],{"class":51,"line":17986},[49,44739,33699],{"class":73},[49,44741,1403],{"class":66},[49,44743,33704],{"class":1505},[49,44745,33707],{"class":73},[49,44747,1975],{"class":1505},[49,44749,33707],{"class":73},[49,44751,1643],{"class":1505},[49,44753,33716],{"class":66},[49,44755,1923],{"class":109},[49,44757,159],{"class":73},[49,44759,31745],{"class":66},[49,44761,44762,44764,44766,44768,44770,44772],{"class":51,"line":18008},[49,44763,33699],{"class":73},[49,44765,1403],{"class":66},[49,44767,33731],{"class":1505},[49,44769,1846],{"class":109},[49,44771,106],{"class":73},[49,44773,1409],{"class":66},[49,44775,44776],{"class":51,"line":18013},[49,44777,3654],{"emptyLinePlaceholder":1330},[49,44779,44780],{"class":51,"line":18019},[49,44781,33746],{"class":55},[49,44783,44784],{"class":51,"line":18033},[49,44785,33751],{"class":55},[49,44787,44788,44790,44792],{"class":51,"line":18046},[49,44789,33756],{"class":66},[49,44791,1448],{"class":109},[49,44793,33590],{"class":73},[49,44795,44796],{"class":51,"line":18051},[49,44797,33765],{"class":55},[49,44799,44800,44802,44804],{"class":51,"line":18065},[49,44801,33770],{"class":66},[49,44803,1448],{"class":109},[49,44805,4339],{"class":73},[49,44807,44808],{"class":51,"line":18070},[49,44809,33779],{"class":55},[49,44811,44812,44814,44816],{"class":51,"line":18076},[49,44813,33784],{"class":66},[49,44815,1448],{"class":109},[49,44817,33590],{"class":73},[49,44819,44820],{"class":51,"line":18081},[49,44821,33793],{"class":55},[49,44823,44824,44826,44828],{"class":51,"line":18095},[49,44825,33798],{"class":66},[49,44827,1448],{"class":109},[49,44829,4339],{"class":73},[49,44831,44832],{"class":51,"line":18100},[49,44833,33807],{"class":55},[49,44835,44836,44838,44840],{"class":51,"line":18105},[49,44837,33812],{"class":66},[49,44839,1448],{"class":109},[49,44841,4339],{"class":73},[49,44843,44844],{"class":51,"line":18119},[49,44845,33821],{"class":55},[49,44847,44848,44850,44852],{"class":51,"line":18131},[49,44849,33826],{"class":66},[49,44851,1448],{"class":109},[49,44853,4339],{"class":73},[49,44855,44856],{"class":51,"line":18136},[49,44857,33835],{"class":55},[49,44859,44860,44862,44864,44866,44868],{"class":51,"line":18149},[49,44861,4657],{"class":109},[49,44863,32849],{"class":66},[49,44865,27292],{"class":109},[49,44867,32854],{"class":73},[49,44869,33848],{"class":66},[49,44871,44872],{"class":51,"line":18154},[49,44873,33853],{"class":55},[49,44875,44876,44878,44880],{"class":51,"line":18159},[49,44877,33858],{"class":66},[49,44879,1448],{"class":109},[49,44881,33863],{"class":66},[49,44883,44884],{"class":51,"line":18164},[49,44885,33868],{"class":55},[49,44887,44888,44890,44892],{"class":51,"line":18177},[49,44889,33873],{"class":66},[49,44891,1448],{"class":109},[49,44893,33878],{"class":66},[49,44895,44896],{"class":51,"line":18182},[49,44897,33884],{"class":55},[49,44899,44900],{"class":51,"line":33881},[49,44901,33890],{"class":66},[49,44903,44904],{"class":51,"line":33887},[49,44905,33896],{"class":55},[49,44907,44908],{"class":51,"line":33893},[49,44909,33902],{"class":55},[49,44911,44912,44914,44916],{"class":51,"line":33899},[49,44913,33908],{"class":66},[49,44915,1448],{"class":109},[49,44917,33913],{"class":66},[49,44919,44920],{"class":51,"line":33905},[49,44921,33919],{"class":55},[49,44923,44924,44926,44928,44930,44932,44934,44936],{"class":51,"line":33916},[49,44925,33925],{"class":66},[49,44927,1448],{"class":109},[49,44929,33930],{"class":66},[49,44931,33933],{"class":6468},[49,44933,1448],{"class":109},[49,44935,159],{"class":73},[49,44937,1409],{"class":66},[49,44939,44940],{"class":51,"line":33922},[49,44941,33945],{"class":55},[49,44943,44944,44946,44948],{"class":51,"line":33942},[49,44945,33951],{"class":66},[49,44947,1448],{"class":109},[49,44949,33956],{"class":66},[49,44951,44952],{"class":51,"line":33948},[49,44953,33962],{"class":55},[49,44955,44956],{"class":51,"line":33959},[49,44957,33968],{"class":66},[49,44959,44960],{"class":51,"line":33965},[49,44961,33974],{"class":55},[49,44963,44964],{"class":51,"line":33971},[49,44965,33980],{"class":66},[49,44967,44968],{"class":51,"line":33977},[49,44969,33986],{"class":55},[49,44971,44972],{"class":51,"line":33983},[49,44973,33992],{"class":66},[49,44975,44976],{"class":51,"line":33989},[49,44977,33998],{"class":55},[49,44979,44980,44982,44984,44986,44988,44990,44992],{"class":51,"line":33995},[49,44981,34004],{"class":66},[49,44983,10729],{"class":109},[49,44985,34009],{"class":66},[49,44987,1846],{"class":109},[49,44989,34014],{"class":66},[49,44991,80],{"class":73},[49,44993,1409],{"class":66},[49,44995,44996],{"class":51,"line":34001},[49,44997,34024],{"class":55},[49,44999,45000,45002,45004,45006,45008],{"class":51,"line":34021},[49,45001,34030],{"class":66},[49,45003,10729],{"class":109},[49,45005,34035],{"class":66},[49,45007,4203],{"class":109},[49,45009,34040],{"class":66},[49,45011,45012],{"class":51,"line":34027},[49,45013,34046],{"class":55},[49,45015,45016,45018,45020,45022,45024],{"class":51,"line":34043},[49,45017,34052],{"class":66},[49,45019,10729],{"class":109},[49,45021,34014],{"class":66},[49,45023,80],{"class":73},[49,45025,1409],{"class":66},[49,45027,45028],{"class":51,"line":34049},[49,45029,34066],{"class":55},[49,45031,45032,45034,45036,45038,45040],{"class":51,"line":34063},[49,45033,4657],{"class":109},[49,45035,34074],{"class":66},[49,45037,27292],{"class":109},[49,45039,32854],{"class":73},[49,45041,34081],{"class":66},[49,45043,45044],{"class":51,"line":34069},[49,45045,34087],{"class":55},[49,45047,45048,45050,45052],{"class":51,"line":34084},[49,45049,33858],{"class":66},[49,45051,1448],{"class":109},[49,45053,33863],{"class":66},[49,45055,45056],{"class":51,"line":34090},[49,45057,34102],{"class":55},[49,45059,45060,45062,45064],{"class":51,"line":34099},[49,45061,33873],{"class":66},[49,45063,1448],{"class":109},[49,45065,33878],{"class":66},[49,45067,45068],{"class":51,"line":34105},[49,45069,34117],{"class":55},[49,45071,45072],{"class":51,"line":34114},[49,45073,34123],{"class":66},[49,45075,45076],{"class":51,"line":34120},[49,45077,37604],{"class":55},[49,45079,45080,45082],{"class":51,"line":34126},[49,45081,34129],{"class":109},[49,45083,34132],{"class":66},[49,45085,45086],{"class":51,"line":34135},[49,45087,34138],{"class":55},[49,45089,45090,45092,45094],{"class":51,"line":34141},[49,45091,37619],{"class":66},[49,45093,1448],{"class":109},[49,45095,33913],{"class":66},[49,45097,45098],{"class":51,"line":34152},[49,45099,34155],{"class":55},[49,45101,45102,45104,45106,45108,45110,45112,45114],{"class":51,"line":34158},[49,45103,37632],{"class":66},[49,45105,1448],{"class":109},[49,45107,33930],{"class":66},[49,45109,33933],{"class":6468},[49,45111,1448],{"class":109},[49,45113,159],{"class":73},[49,45115,1409],{"class":66},[49,45117,45118],{"class":51,"line":34177},[49,45119,34180],{"class":55},[49,45121,45122,45124,45126],{"class":51,"line":34183},[49,45123,37653],{"class":66},[49,45125,1448],{"class":109},[49,45127,33956],{"class":66},[49,45129,45130],{"class":51,"line":34194},[49,45131,34197],{"class":55},[49,45133,45134,45136,45138,45140,45142,45144,45146],{"class":51,"line":34200},[49,45135,37666],{"class":66},[49,45137,10729],{"class":109},[49,45139,37671],{"class":66},[49,45141,1846],{"class":109},[49,45143,34014],{"class":66},[49,45145,80],{"class":73},[49,45147,1409],{"class":66},[49,45149,45150,45152,45154,45156,45158],{"class":51,"line":34220},[49,45151,37684],{"class":66},[49,45153,10729],{"class":109},[49,45155,34035],{"class":66},[49,45157,4203],{"class":109},[49,45159,34040],{"class":66},[49,45161,45162],{"class":51,"line":34236},[49,45163,37697],{"class":55},[49,45165,45166,45168,45170,45172,45174],{"class":51,"line":34242},[49,45167,37702],{"class":66},[49,45169,10729],{"class":109},[49,45171,34014],{"class":66},[49,45173,80],{"class":73},[49,45175,1409],{"class":66},[49,45177,45178],{"class":51,"line":34256},[49,45179,34259],{"class":55},[49,45181,45182],{"class":51,"line":34262},[49,45183,34265],{"class":55},[49,45185,45186,45188,45190],{"class":51,"line":34268},[49,45187,34271],{"class":66},[49,45189,1975],{"class":109},[49,45191,34276],{"class":66},[49,45193,45194],{"class":51,"line":34279},[49,45195,34282],{"class":55},[49,45197,45198],{"class":51,"line":34285},[49,45199,34288],{"class":55},[49,45201,45202,45204,45206],{"class":51,"line":34291},[49,45203,34294],{"class":66},[49,45205,1975],{"class":109},[49,45207,34276],{"class":66},[49,45209,45210],{"class":51,"line":34301},[49,45211,34304],{"class":55},[49,45213,45214,45216,45218],{"class":51,"line":34307},[49,45215,34310],{"class":66},[49,45217,1975],{"class":109},[49,45219,34315],{"class":66},[49,45221,45222],{"class":51,"line":34318},[49,45223,34321],{"class":55},[49,45225,45226,45228,45230],{"class":51,"line":34324},[49,45227,34327],{"class":66},[49,45229,1975],{"class":109},[49,45231,34315],{"class":66},[49,45233,45234],{"class":51,"line":34334},[49,45235,3654],{"emptyLinePlaceholder":1330},[49,45237,45238],{"class":51,"line":34339},[49,45239,34342],{"class":55},[49,45241,45242,45244,45246,45248,45250,45252,45254,45256,45258,45260,45262,45264,45266,45268,45270,45272,45274,45276,45278,45280],{"class":51,"line":34345},[49,45243,33699],{"class":73},[49,45245,1403],{"class":66},[49,45247,4846],{"class":1505},[49,45249,33707],{"class":73},[49,45251,34356],{"class":1505},[49,45253,2286],{"class":73},[49,45255,34361],{"class":109},[49,45257,620],{"class":73},[49,45259,34366],{"class":1505},[49,45261,2286],{"class":73},[49,45263,34361],{"class":109},[49,45265,620],{"class":73},[49,45267,4846],{"class":1505},[49,45269,34377],{"class":66},[49,45271,1923],{"class":109},[49,45273,159],{"class":73},[49,45275,34384],{"class":66},[49,45277,1923],{"class":109},[49,45279,159],{"class":73},[49,45281,34391],{"class":66},[49,45283,45284,45286,45288,45290,45292,45294,45296,45298,45300,45302,45304,45306,45308,45310,45312,45314,45316,45318,45320,45322],{"class":51,"line":34394},[49,45285,33699],{"class":73},[49,45287,1403],{"class":66},[49,45289,4846],{"class":1505},[49,45291,33707],{"class":73},[49,45293,34405],{"class":1505},[49,45295,2286],{"class":73},[49,45297,34361],{"class":109},[49,45299,620],{"class":73},[49,45301,34414],{"class":1505},[49,45303,2286],{"class":73},[49,45305,34361],{"class":109},[49,45307,620],{"class":73},[49,45309,4846],{"class":1505},[49,45311,34425],{"class":66},[49,45313,1923],{"class":109},[49,45315,159],{"class":73},[49,45317,34432],{"class":66},[49,45319,1923],{"class":109},[49,45321,159],{"class":73},[49,45323,34391],{"class":66},[49,45325,45326],{"class":51,"line":34441},[49,45327,3654],{"emptyLinePlaceholder":1330},[49,45329,45330],{"class":51,"line":34446},[49,45331,34449],{"class":55},[49,45333,45334,45336,45338,45340,45342,45344,45346],{"class":51,"line":34452},[49,45335,3751],{"class":109},[49,45337,34457],{"class":66},[49,45339,1923],{"class":109},[49,45341,159],{"class":73},[49,45343,2330],{"class":66},[49,45345,2349],{"class":109},[49,45347,34468],{"class":66},[49,45349,45350],{"class":51,"line":34471},[49,45351,34474],{"class":55},[49,45353,45354,45356,45358,45360,45362,45364,45366],{"class":51,"line":34477},[49,45355,34480],{"class":66},[49,45357,1442],{"class":73},[49,45359,1448],{"class":109},[49,45361,34487],{"class":66},[49,45363,1923],{"class":109},[49,45365,159],{"class":73},[49,45367,34494],{"class":66},[49,45369,45370],{"class":51,"line":34497},[49,45371,34500],{"class":55},[49,45373,45374],{"class":51,"line":34503},[49,45375,34506],{"class":55},[49,45377,45378,45380,45382],{"class":51,"line":34509},[49,45379,34512],{"class":66},[49,45381,1448],{"class":109},[49,45383,33562],{"class":66},[49,45385,45386],{"class":51,"line":34519},[49,45387,3654],{"emptyLinePlaceholder":1330},[49,45389,45390],{"class":51,"line":34524},[49,45391,34527],{"class":55},[49,45393,45394,45396,45398,45400,45402],{"class":51,"line":34530},[49,45395,34533],{"class":66},[49,45397,1448],{"class":109},[49,45399,34538],{"class":66},[49,45401,1923],{"class":109},[49,45403,34543],{"class":66},[49,45405,45406,45408,45410,45412,45414,45416,45418,45420,45422,45424,45426,45428,45430,45432,45434,45436,45438,45440],{"class":51,"line":34546},[49,45407,33699],{"class":73},[49,45409,1403],{"class":66},[49,45411,34553],{"class":1505},[49,45413,2286],{"class":73},[49,45415,34558],{"class":109},[49,45417,620],{"class":73},[49,45419,1935],{"class":1505},[49,45421,2286],{"class":73},[49,45423,34558],{"class":109},[49,45425,620],{"class":73},[49,45427,34571],{"class":1505},[49,45429,34574],{"class":66},[49,45431,34577],{"class":109},[49,45433,2297],{"class":73},[49,45435,34582],{"class":66},[49,45437,1720],{"class":109},[49,45439,2297],{"class":73},[49,45441,31745],{"class":66},[49,45443,45444],{"class":51,"line":34591},[49,45445,37981],{"class":55},[49,45447,45448],{"class":51,"line":34597},[49,45449,37986],{"class":55},[49,45451,45452,45454,45456],{"class":51,"line":34603},[49,45453,37991],{"class":66},[49,45455,34615],{"class":1505},[49,45457,1409],{"class":66},[49,45459,45460],{"class":51,"line":34609},[49,45461,34635],{"class":55},[49,45463,45464,45466,45468,45470,45472,45474],{"class":51,"line":34620},[49,45465,34641],{"class":66},[49,45467,1448],{"class":109},[49,45469,34646],{"class":66},[49,45471,34649],{"class":6468},[49,45473,1448],{"class":109},[49,45475,2802],{"class":66},[49,45477,45478,45480,45482,45484],{"class":51,"line":34626},[49,45479,34659],{"class":1505},[49,45481,2249],{"class":66},[49,45483,34664],{"class":73},[49,45485,34667],{"class":66},[49,45487,45488,45490],{"class":51,"line":34632},[49,45489,34673],{"class":1505},[49,45491,34676],{"class":66},[49,45493,45494,45496],{"class":51,"line":34638},[49,45495,34682],{"class":1505},[49,45497,34685],{"class":66},[49,45499,45500,45502],{"class":51,"line":34656},[49,45501,34691],{"class":1505},[49,45503,34694],{"class":66},[49,45505,45506,45508],{"class":51,"line":34670},[49,45507,34700],{"class":1505},[49,45509,34703],{"class":66},[49,45511,45512],{"class":51,"line":34679},[49,45513,34709],{"class":66},[49,45515,45516],{"class":51,"line":34688},[49,45517,34715],{"class":55},[49,45519,45520,45522],{"class":51,"line":34697},[49,45521,5344],{"class":109},[49,45523,34723],{"class":66},[49,45525,45526],{"class":51,"line":34706},[49,45527,3654],{"emptyLinePlaceholder":1330},[49,45529,45530],{"class":51,"line":34712},[49,45531,34734],{"class":55},[49,45533,45534,45536,45538],{"class":51,"line":34718},[49,45535,33195],{"class":109},[49,45537,34742],{"class":62},[49,45539,34745],{"class":66},[49,45541,45542],{"class":51,"line":34726},[49,45543,34751],{"class":55},[49,45545,45546,45548,45550,45552,45554,45556,45558,45560],{"class":51,"line":34731},[49,45547,34757],{"class":66},[49,45549,32941],{"class":6468},[49,45551,1448],{"class":109},[49,45553,1403],{"class":66},[49,45555,1889],{"class":73},[49,45557,1770],{"class":66},[49,45559,1685],{"class":73},[49,45561,31745],{"class":66},[49,45563,45564],{"class":51,"line":34737},[49,45565,34777],{"class":55},[49,45567,45568],{"class":51,"line":34748},[49,45569,34783],{"class":55},[49,45571,45572],{"class":51,"line":34754},[49,45573,34789],{"class":55},[49,45575,45576,45578,45580,45582,45584,45586,45588],{"class":51,"line":34774},[49,45577,32975],{"class":66},[49,45579,159],{"class":73},[49,45581,1770],{"class":66},[49,45583,1478],{"class":73},[49,45585,1770],{"class":66},[49,45587,159],{"class":73},[49,45589,1409],{"class":66},[49,45591,45592],{"class":51,"line":34780},[49,45593,34812],{"class":55},[49,45595,45596],{"class":51,"line":34786},[49,45597,34818],{"class":55},[49,45599,45600],{"class":51,"line":34792},[49,45601,34824],{"class":55},[49,45603,45604],{"class":51,"line":34809},[49,45605,34830],{"class":55},[49,45607,45608],{"class":51,"line":34815},[49,45609,34836],{"class":55},[49,45611,45612,45614,45616,45618,45620,45622,45624,45626,45628],{"class":51,"line":34821},[49,45613,34842],{"class":66},[49,45615,34845],{"class":1505},[49,45617,34848],{"class":66},[49,45619,34851],{"class":1505},[49,45621,1770],{"class":66},[49,45623,34856],{"class":6468},[49,45625,1448],{"class":109},[49,45627,34861],{"class":1505},[49,45629,1409],{"class":66},[49,45631,45632,45634,45636,45638,45640,45642,45644,45646,45648],{"class":51,"line":34827},[49,45633,34842],{"class":66},[49,45635,34845],{"class":1505},[49,45637,34873],{"class":66},[49,45639,34876],{"class":1505},[49,45641,1770],{"class":66},[49,45643,34856],{"class":6468},[49,45645,1448],{"class":109},[49,45647,34885],{"class":1505},[49,45649,1409],{"class":66},[49,45651,45652],{"class":51,"line":34833},[49,45653,34893],{"class":55},[49,45655,45656],{"class":51,"line":34839},[49,45657,34899],{"class":66},[49,45659,45660],{"class":51,"line":34866},[49,45661,34905],{"class":55},[49,45663,45664,45666,45668],{"class":51,"line":34890},[49,45665,34911],{"class":66},[49,45667,34914],{"class":1505},[49,45669,1409],{"class":66},[49,45671,45672,45674,45676],{"class":51,"line":34896},[49,45673,34922],{"class":66},[49,45675,34925],{"class":1505},[49,45677,1409],{"class":66},[49,45679,45680],{"class":51,"line":34902},[49,45681,34933],{"class":55},[49,45683,45684,45686,45688,45690,45692,45694,45696],{"class":51,"line":34908},[49,45685,32975],{"class":66},[49,45687,159],{"class":73},[49,45689,1770],{"class":66},[49,45691,1478],{"class":73},[49,45693,1770],{"class":66},[49,45695,1478],{"class":73},[49,45697,1409],{"class":66},[49,45699,45700,45702,45704,45706,45708,45710,45712,45714,45716],{"class":51,"line":34919},[49,45701,34842],{"class":66},[49,45703,34845],{"class":1505},[49,45705,34960],{"class":66},[49,45707,34851],{"class":1505},[49,45709,1770],{"class":66},[49,45711,34856],{"class":6468},[49,45713,1448],{"class":109},[49,45715,34971],{"class":1505},[49,45717,1409],{"class":66},[49,45719,45720,45722,45724,45726,45728,45730,45732,45734,45736],{"class":51,"line":34930},[49,45721,34842],{"class":66},[49,45723,34845],{"class":1505},[49,45725,34983],{"class":66},[49,45727,34876],{"class":1505},[49,45729,1770],{"class":66},[49,45731,34856],{"class":6468},[49,45733,1448],{"class":109},[49,45735,34994],{"class":1505},[49,45737,1409],{"class":66},[49,45739,45740],{"class":51,"line":34936},[49,45741,35002],{"class":55},[49,45743,45744],{"class":51,"line":34953},[49,45745,34899],{"class":66},[49,45747,45748,45750,45752],{"class":51,"line":34976},[49,45749,34911],{"class":66},[49,45751,34845],{"class":1505},[49,45753,1409],{"class":66},[49,45755,45756,45758,45760],{"class":51,"line":34999},[49,45757,34922],{"class":66},[49,45759,35024],{"class":1505},[49,45761,1409],{"class":66},[49,45763,45764],{"class":51,"line":35005},[49,45765,35032],{"class":66},[49,45767,45768],{"class":51,"line":35010},[49,45769,3654],{"emptyLinePlaceholder":1330},[49,45771,45772],{"class":51,"line":35019},[49,45773,35043],{"class":55},[49,45775,45776,45778,45780,45782,45784],{"class":51,"line":35029},[49,45777,2787],{"class":109},[49,45779,32468],{"class":73},[49,45781,4203],{"class":109},[49,45783,32473],{"class":1505},[49,45785,4993],{"class":66},[49,45787,45788],{"class":51,"line":35035},[49,45789,35062],{"class":55},[49,45791,45792,45795,45797],{"class":51,"line":35040},[49,45793,45794],{"class":66},"    GoogLeNet",[49,45796,1448],{"class":109},[49,45798,45799],{"class":66},"GoogLeNet(Inception)\n",[49,45801,45802,45804,45806],{"class":51,"line":35046},[49,45803,35079],{"class":66},[49,45805,1448],{"class":109},[49,45807,35084],{"class":66},[49,45809,45810,45812,45814,45817,45819,45821,45823],{"class":51,"line":35059},[49,45811,34641],{"class":66},[49,45813,1448],{"class":109},[49,45815,45816],{"class":66},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[49,45818,35097],{"class":6468},[49,45820,1448],{"class":109},[49,45822,2340],{"class":73},[49,45824,1409],{"class":66},[49,45826,45827],{"class":51,"line":35065},[49,45828,35109],{"class":66},[591,45830,45831],{"start":70},[26,45832,41822],{},[39,45834,45836],{"className":31626,"code":45835,"language":31628,"meta":44,"style":44},"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",[46,45837,45838,45844,45854,45864,45868,45878,45889,45893,45897,45901,45909,45925,45935,45951,45961,45975,45979,45989,45999,46009,46015,46019,46023,46031,46035,46051,46059,46063,46067,46075,46083,46087,46091,46095,46099,46105,46109,46119,46127,46135,46139,46143,46147,46155,46159,46175,46179,46183,46187,46199,46203,46215,46219,46223,46235,46239,46249,46253,46257,46269,46273,46281,46285,46289,46297,46301,46309,46313,46317,46321,46325,46329,46345,46353,46357,46361,46409,46415,46419,46429,46437,46445,46449,46453,46457,46461,46469,46473,46489,46493,46501,46509],{"__ignoreMap":44},[49,45839,45840,45842],{"class":51,"line":52},[49,45841,31640],{"class":109},[49,45843,31643],{"class":66},[49,45845,45846,45848,45850,45852],{"class":51,"line":59},[49,45847,31640],{"class":109},[49,45849,32663],{"class":66},[49,45851,32631],{"class":109},[49,45853,32668],{"class":66},[49,45855,45856,45858,45860,45862],{"class":51,"line":70},[49,45857,31985],{"class":109},[49,45859,32646],{"class":66},[49,45861,31640],{"class":109},[49,45863,32651],{"class":66},[49,45865,45866],{"class":51,"line":86},[49,45867,35170],{"class":55},[49,45869,45870,45872,45874,45876],{"class":51,"line":98},[49,45871,31985],{"class":109},[49,45873,32616],{"class":66},[49,45875,31640],{"class":109},[49,45877,32621],{"class":66},[49,45879,45880,45882,45884,45886],{"class":51,"line":121},[49,45881,31985],{"class":109},[49,45883,33162],{"class":66},[49,45885,31640],{"class":109},[49,45887,45888],{"class":66}," GoogLeNet,Inception\n",[49,45890,45891],{"class":51,"line":134},[49,45892,3654],{"emptyLinePlaceholder":1330},[49,45894,45895],{"class":51,"line":1085},[49,45896,3654],{"emptyLinePlaceholder":1330},[49,45898,45899],{"class":51,"line":2574},[49,45900,35199],{"class":55},[49,45902,45903,45905,45907],{"class":51,"line":2586},[49,45904,33195],{"class":109},[49,45906,35206],{"class":62},[49,45908,33201],{"class":66},[49,45910,45911,45913,45915,45917,45919,45921,45923],{"class":51,"line":2867},[49,45912,35213],{"class":66},[49,45914,1448],{"class":109},[49,45916,32703],{"class":66},[49,45918,32706],{"class":6468},[49,45920,1448],{"class":109},[49,45922,32711],{"class":1505},[49,45924,32714],{"class":66},[49,45926,45927,45929,45931,45933],{"class":51,"line":2872},[49,45928,35230],{"class":6468},[49,45930,1448],{"class":109},[49,45932,35235],{"class":73},[49,45934,32714],{"class":66},[49,45936,45937,45939,45941,45943,45945,45947,45949],{"class":51,"line":2878},[49,45938,35242],{"class":6468},[49,45940,1448],{"class":109},[49,45942,32741],{"class":66},[49,45944,32744],{"class":6468},[49,45946,1448],{"class":109},[49,45948,36697],{"class":73},[49,45950,32752],{"class":66},[49,45952,45953,45955,45957,45959],{"class":51,"line":2883},[49,45954,35259],{"class":6468},[49,45956,1448],{"class":109},[49,45958,32724],{"class":73},[49,45960,1409],{"class":66},[49,45962,45963,45965,45967,45969,45971,45973],{"class":51,"line":2897},[49,45964,35270],{"class":66},[49,45966,1448],{"class":109},[49,45968,32782],{"class":66},[49,45970,32785],{"class":6468},[49,45972,1448],{"class":109},[49,45974,35281],{"class":66},[49,45976,45977],{"class":51,"line":2902},[49,45978,35286],{"class":55},[49,45980,45981,45983,45985,45987],{"class":51,"line":2908},[49,45982,35291],{"class":6468},[49,45984,1448],{"class":109},[49,45986,159],{"class":73},[49,45988,32714],{"class":66},[49,45990,45991,45993,45995,45997],{"class":51,"line":2929},[49,45992,35302],{"class":6468},[49,45994,1448],{"class":109},[49,45996,32724],{"class":73},[49,45998,32714],{"class":66},[49,46000,46001,46003,46005,46007],{"class":51,"line":2934},[49,46002,35313],{"class":6468},[49,46004,1448],{"class":109},[49,46006,80],{"class":73},[49,46008,1409],{"class":66},[49,46010,46011,46013],{"class":51,"line":2948},[49,46012,5344],{"class":109},[49,46014,35326],{"class":66},[49,46016,46017],{"class":51,"line":2953},[49,46018,3654],{"emptyLinePlaceholder":1330},[49,46020,46021],{"class":51,"line":2982},[49,46022,35335],{"class":55},[49,46024,46025,46027,46029],{"class":51,"line":2987},[49,46026,33195],{"class":109},[49,46028,35342],{"class":62},[49,46030,35345],{"class":66},[49,46032,46033],{"class":51,"line":3004},[49,46034,35350],{"class":55},[49,46036,46037,46039,46041,46043,46045,46047,46049],{"class":51,"line":3009},[49,46038,32485],{"class":66},[49,46040,1448],{"class":109},[49,46042,32492],{"class":1505},[49,46044,2959],{"class":109},[49,46046,32497],{"class":66},[49,46048,2956],{"class":109},[49,46050,35367],{"class":1505},[49,46052,46053,46055,46057],{"class":51,"line":3014},[49,46054,32537],{"class":66},[49,46056,1448],{"class":109},[49,46058,33537],{"class":66},[49,46060,46061],{"class":51,"line":3019},[49,46062,3654],{"emptyLinePlaceholder":1330},[49,46064,46065],{"class":51,"line":3033},[49,46066,35384],{"class":55},[49,46068,46069,46071,46073],{"class":51,"line":3038},[49,46070,35389],{"class":66},[49,46072,1448],{"class":109},[49,46074,33590],{"class":73},[49,46076,46077,46079,46081],{"class":51,"line":3831},[49,46078,35398],{"class":66},[49,46080,1448],{"class":109},[49,46082,4339],{"class":73},[49,46084,46085],{"class":51,"line":3845},[49,46086,3654],{"emptyLinePlaceholder":1330},[49,46088,46089],{"class":51,"line":3853},[49,46090,35411],{"class":55},[49,46092,46093],{"class":51,"line":3858},[49,46094,35416],{"class":55},[49,46096,46097],{"class":51,"line":3864},[49,46098,35421],{"class":55},[49,46100,46101,46103],{"class":51,"line":3870},[49,46102,35426],{"class":109},[49,46104,34132],{"class":66},[49,46106,46107],{"class":51,"line":3875},[49,46108,35433],{"class":55},[49,46110,46111,46113,46115,46117],{"class":51,"line":9200},[49,46112,4657],{"class":109},[49,46114,35440],{"class":66},[49,46116,27292],{"class":109},[49,46118,35445],{"class":66},[49,46120,46121,46123,46125],{"class":51,"line":9224},[49,46122,35450],{"class":66},[49,46124,1448],{"class":109},[49,46126,35455],{"class":66},[49,46128,46129,46131,46133],{"class":51,"line":9229},[49,46130,35460],{"class":66},[49,46132,1448],{"class":109},[49,46134,35465],{"class":66},[49,46136,46137],{"class":51,"line":9235},[49,46138,35470],{"class":55},[49,46140,46141],{"class":51,"line":9262},[49,46142,34123],{"class":66},[49,46144,46145],{"class":51,"line":9267},[49,46146,35479],{"class":55},[49,46148,46149,46151,46153],{"class":51,"line":9273},[49,46150,33908],{"class":66},[49,46152,1448],{"class":109},[49,46154,35488],{"class":66},[49,46156,46157],{"class":51,"line":9285},[49,46158,35493],{"class":55},[49,46160,46161,46163,46165,46167,46169,46171,46173],{"class":51,"line":9297},[49,46162,33925],{"class":66},[49,46164,1448],{"class":109},[49,46166,33930],{"class":66},[49,46168,33933],{"class":6468},[49,46170,1448],{"class":109},[49,46172,159],{"class":73},[49,46174,1409],{"class":66},[49,46176,46177],{"class":51,"line":9309},[49,46178,35514],{"class":55},[49,46180,46181],{"class":51,"line":10968},[49,46182,35519],{"class":55},[49,46184,46185],{"class":51,"line":10993},[49,46186,35524],{"class":55},[49,46188,46189,46191,46193,46195,46197],{"class":51,"line":11016},[49,46190,35529],{"class":66},[49,46192,10729],{"class":109},[49,46194,34035],{"class":66},[49,46196,4203],{"class":109},[49,46198,35538],{"class":66},[49,46200,46201],{"class":51,"line":11040},[49,46202,35543],{"class":55},[49,46204,46205,46207,46209,46211,46213],{"class":51,"line":11045},[49,46206,35548],{"class":66},[49,46208,10729],{"class":109},[49,46210,35553],{"class":66},[49,46212,80],{"class":73},[49,46214,1409],{"class":66},[49,46216,46217],{"class":51,"line":11050},[49,46218,3654],{"emptyLinePlaceholder":1330},[49,46220,46221],{"class":51,"line":11055},[49,46222,35566],{"class":55},[49,46224,46225,46227,46229,46231,46233],{"class":51,"line":11064},[49,46226,35571],{"class":66},[49,46228,1448],{"class":109},[49,46230,35576],{"class":66},[49,46232,1975],{"class":109},[49,46234,35581],{"class":66},[49,46236,46237],{"class":51,"line":11069},[49,46238,35586],{"class":55},[49,46240,46241,46243,46245,46247],{"class":51,"line":11075},[49,46242,33699],{"class":73},[49,46244,1403],{"class":66},[49,46246,35595],{"class":1505},[49,46248,35598],{"class":66},[49,46250,46251],{"class":51,"line":11096},[49,46252,3654],{"emptyLinePlaceholder":1330},[49,46254,46255],{"class":51,"line":11102},[49,46256,35607],{"class":55},[49,46258,46259,46261,46263,46265,46267],{"class":51,"line":11116},[49,46260,2787],{"class":109},[49,46262,32468],{"class":73},[49,46264,4203],{"class":109},[49,46266,32473],{"class":1505},[49,46268,4993],{"class":66},[49,46270,46271],{"class":51,"line":11122},[49,46272,35624],{"class":55},[49,46274,46275,46277,46279],{"class":51,"line":11149},[49,46276,32537],{"class":66},[49,46278,1448],{"class":109},[49,46280,45799],{"class":66},[49,46282,46283],{"class":51,"line":11158},[49,46284,35637],{"class":55},[49,46286,46287],{"class":51,"line":11164},[49,46288,35642],{"class":55},[49,46290,46291,46293,46295],{"class":51,"line":11172},[49,46292,35647],{"class":66},[49,46294,35650],{"class":1505},[49,46296,31745],{"class":66},[49,46298,46299],{"class":51,"line":11177},[49,46300,35657],{"class":55},[49,46302,46303,46305,46307],{"class":51,"line":17854},[49,46304,35270],{"class":66},[49,46306,1448],{"class":109},[49,46308,35666],{"class":66},[49,46310,46311],{"class":51,"line":17860},[49,46312,35671],{"class":55},[49,46314,46315],{"class":51,"line":17883},[49,46316,35676],{"class":66},[49,46318,46319],{"class":51,"line":17889},[49,46320,3654],{"emptyLinePlaceholder":1330},[49,46322,46323],{"class":51,"line":17912},[49,46324,35685],{"class":55},[49,46326,46327],{"class":51,"line":17926},[49,46328,35690],{"class":55},[49,46330,46331,46333,46335,46337,46339,46341,46343],{"class":51,"line":17946},[49,46332,32485],{"class":66},[49,46334,1448],{"class":109},[49,46336,32492],{"class":1505},[49,46338,2959],{"class":109},[49,46340,32497],{"class":66},[49,46342,2956],{"class":109},[49,46344,35367],{"class":1505},[49,46346,46347,46349,46351],{"class":51,"line":17952},[49,46348,32537],{"class":66},[49,46350,1448],{"class":109},[49,46352,33537],{"class":66},[49,46354,46355],{"class":51,"line":17963},[49,46356,35719],{"class":55},[49,46358,46359],{"class":51,"line":17986},[49,46360,35724],{"class":55},[49,46362,46363,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391,46393,46395,46397,46399,46401,46403,46405,46407],{"class":51,"line":18008},[49,46364,35729],{"class":66},[49,46366,1448],{"class":109},[49,46368,2280],{"class":66},[49,46370,35736],{"class":1505},[49,46372,1770],{"class":66},[49,46374,35741],{"class":1505},[49,46376,1770],{"class":66},[49,46378,35746],{"class":1505},[49,46380,1770],{"class":66},[49,46382,35751],{"class":1505},[49,46384,1770],{"class":66},[49,46386,35756],{"class":1505},[49,46388,1770],{"class":66},[49,46390,35761],{"class":1505},[49,46392,1770],{"class":66},[49,46394,35766],{"class":1505},[49,46396,1770],{"class":66},[49,46398,35771],{"class":1505},[49,46400,1770],{"class":66},[49,46402,35776],{"class":1505},[49,46404,1770],{"class":66},[49,46406,35781],{"class":1505},[49,46408,34494],{"class":66},[49,46410,46411,46413],{"class":51,"line":18013},[49,46412,35426],{"class":109},[49,46414,34132],{"class":66},[49,46416,46417],{"class":51,"line":18019},[49,46418,35794],{"class":55},[49,46420,46421,46423,46425,46427],{"class":51,"line":18033},[49,46422,4657],{"class":109},[49,46424,35801],{"class":66},[49,46426,27292],{"class":109},[49,46428,35445],{"class":66},[49,46430,46431,46433,46435],{"class":51,"line":18046},[49,46432,33858],{"class":66},[49,46434,1448],{"class":109},[49,46436,33863],{"class":66},[49,46438,46439,46441,46443],{"class":51,"line":18051},[49,46440,33873],{"class":66},[49,46442,1448],{"class":109},[49,46444,33878],{"class":66},[49,46446,46447],{"class":51,"line":18065},[49,46448,3654],{"emptyLinePlaceholder":1330},[49,46450,46451],{"class":51,"line":18070},[49,46452,35830],{"class":55},[49,46454,46455],{"class":51,"line":18076},[49,46456,34123],{"class":66},[49,46458,46459],{"class":51,"line":18081},[49,46460,35839],{"class":55},[49,46462,46463,46465,46467],{"class":51,"line":18095},[49,46464,33908],{"class":66},[49,46466,1448],{"class":109},[49,46468,33913],{"class":66},[49,46470,46471],{"class":51,"line":18100},[49,46472,35852],{"class":55},[49,46474,46475,46477,46479,46481,46483,46485,46487],{"class":51,"line":18105},[49,46476,33925],{"class":66},[49,46478,1448],{"class":109},[49,46480,33930],{"class":66},[49,46482,33933],{"class":6468},[49,46484,1448],{"class":109},[49,46486,159],{"class":73},[49,46488,1409],{"class":66},[49,46490,46491],{"class":51,"line":18119},[49,46492,35873],{"class":55},[49,46494,46495,46497,46499],{"class":51,"line":18131},[49,46496,35878],{"class":66},[49,46498,1448],{"class":109},[49,46500,35883],{"class":66},[49,46502,46503,46505,46507],{"class":51,"line":18136},[49,46504,35888],{"class":66},[49,46506,1448],{"class":109},[49,46508,35893],{"class":66},[49,46510,46511,46513,46515,46517,46519,46521,46523,46525],{"class":51,"line":18149},[49,46512,35898],{"class":73},[49,46514,1403],{"class":66},[49,46516,35903],{"class":1505},[49,46518,35906],{"class":66},[49,46520,35909],{"class":1505},[49,46522,1770],{"class":66},[49,46524,35914],{"class":1505},[49,46526,35917],{"class":66},[183,46528,46530],{"id":46529},"_24训练自己的数据集","2.4.训练自己的数据集",[19,46532,46533],{},"猫狗分类任务",[19,46535,46536],{},"划分数据集和验证集",[39,46538,46540],{"className":31626,"code":46539,"language":31628,"meta":44,"style":44},"# 创建脚本，用于划分数据集和验证集\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",[46,46541,46542,46547,46554,46559,46570,46577,46581,46591,46605,46614,46618,46623,46633,46653,46657,46662,46672,46683,46696,46700,46705,46714,46724,46735,46739,46744,46754,46758,46763,46768,46773,46778,46783,46787,46797,46824,46837,46849,46876,46881,46886,46900,46905,46917,46932,46947,46955,46959,46964,46970,46982,46995,47000,47005,47010,47060,47066,47070],{"__ignoreMap":44},[49,46543,46544],{"class":51,"line":52},[49,46545,46546],{"class":55},"# 创建脚本，用于划分数据集和验证集\n",[49,46548,46549,46551],{"class":51,"line":59},[49,46550,31640],{"class":109},[49,46552,46553],{"class":66}," os\n",[49,46555,46556],{"class":51,"line":70},[49,46557,46558],{"class":55},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[49,46560,46561,46563,46566,46568],{"class":51,"line":86},[49,46562,31985],{"class":109},[49,46564,46565],{"class":66}," shutil ",[49,46567,31640],{"class":109},[49,46569,33070],{"class":66},[49,46571,46572,46574],{"class":51,"line":98},[49,46573,31640],{"class":109},[49,46575,46576],{"class":66}," random\n",[49,46578,46579],{"class":51,"line":121},[49,46580,3654],{"emptyLinePlaceholder":1330},[49,46582,46583,46585,46588],{"class":51,"line":134},[49,46584,33195],{"class":109},[49,46586,46587],{"class":62}," mkfile",[49,46589,46590],{"class":66},"(file):\n",[49,46592,46593,46595,46597,46600,46603],{"class":51,"line":1085},[49,46594,4355],{"class":109},[49,46596,40178],{"class":109},[49,46598,46599],{"class":66}," os.path.exists(",[49,46601,46602],{"class":6468},"file",[49,46604,32034],{"class":66},[49,46606,46607,46610,46612],{"class":51,"line":2574},[49,46608,46609],{"class":66},"        os.makedirs(",[49,46611,46602],{"class":6468},[49,46613,1409],{"class":66},[49,46615,46616],{"class":51,"line":2586},[49,46617,3654],{"emptyLinePlaceholder":1330},[49,46619,46620],{"class":51,"line":2867},[49,46621,46622],{"class":55},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[49,46624,46625,46628,46630],{"class":51,"line":2872},[49,46626,46627],{"class":66},"file_path",[49,46629,1448],{"class":109},[49,46631,46632],{"class":1505},"'data_cat_dog'\n",[49,46634,46635,46638,46640,46643,46645,46648,46650],{"class":51,"line":2878},[49,46636,46637],{"class":66},"flower_class",[49,46639,1448],{"class":109},[49,46641,46642],{"class":66},"[cla ",[49,46644,4279],{"class":109},[49,46646,46647],{"class":66}," cla ",[49,46649,27292],{"class":109},[49,46651,46652],{"class":66}," os.listdir(file_path)]\n",[49,46654,46655],{"class":51,"line":2883},[49,46656,3654],{"emptyLinePlaceholder":1330},[49,46658,46659],{"class":51,"line":2897},[49,46660,46661],{"class":55},"# 创建训练集train文件夹\n",[49,46663,46664,46667,46670],{"class":51,"line":2902},[49,46665,46666],{"class":66},"mkfile(",[49,46668,46669],{"class":1505},"'data\u002Ftrain'",[49,46671,1409],{"class":66},[49,46673,46674,46676,46678,46680],{"class":51,"line":2908},[49,46675,4279],{"class":109},[49,46677,46647],{"class":66},[49,46679,27292],{"class":109},[49,46681,46682],{"class":66}," flower_class:\n",[49,46684,46685,46688,46691,46693],{"class":51,"line":2929},[49,46686,46687],{"class":66},"    mkfile(",[49,46689,46690],{"class":1505},"'data\u002Ftrain\u002F'",[49,46692,1872],{"class":109},[49,46694,46695],{"class":66},"cla)\n",[49,46697,46698],{"class":51,"line":2934},[49,46699,3654],{"emptyLinePlaceholder":1330},[49,46701,46702],{"class":51,"line":2948},[49,46703,46704],{"class":55},"# 创建验证集val文件夹\n",[49,46706,46707,46709,46712],{"class":51,"line":2953},[49,46708,46666],{"class":66},[49,46710,46711],{"class":1505},"'data\u002Ftest'",[49,46713,1409],{"class":66},[49,46715,46716,46718,46720,46722],{"class":51,"line":2982},[49,46717,4279],{"class":109},[49,46719,46647],{"class":66},[49,46721,27292],{"class":109},[49,46723,46682],{"class":66},[49,46725,46726,46728,46731,46733],{"class":51,"line":2987},[49,46727,46687],{"class":66},[49,46729,46730],{"class":1505},"'data\u002Ftest\u002F'",[49,46732,1872],{"class":109},[49,46734,46695],{"class":66},[49,46736,46737],{"class":51,"line":3004},[49,46738,3654],{"emptyLinePlaceholder":1330},[49,46740,46741],{"class":51,"line":3009},[49,46742,46743],{"class":55},"# 划分比例，训练集：测试集=9：1\n",[49,46745,46746,46749,46751],{"class":51,"line":3014},[49,46747,46748],{"class":66},"split_rate",[49,46750,1448],{"class":109},[49,46752,46753],{"class":73},"0.1\n",[49,46755,46756],{"class":51,"line":3019},[49,46757,3654],{"emptyLinePlaceholder":1330},[49,46759,46760],{"class":51,"line":3033},[49,46761,46762],{"class":55},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[49,46764,46765],{"class":51,"line":3038},[49,46766,46767],{"class":55},"# cla_path：当前类别的原始图片路径\n",[49,46769,46770],{"class":51,"line":3831},[49,46771,46772],{"class":55},"# images：当前类别下所有图片的文件名列表\n",[49,46774,46775],{"class":51,"line":3845},[49,46776,46777],{"class":55},"# num：该类别图片总数\n",[49,46779,46780],{"class":51,"line":3853},[49,46781,46782],{"class":55},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[49,46784,46785],{"class":51,"line":3858},[49,46786,3654],{"emptyLinePlaceholder":1330},[49,46788,46789,46791,46793,46795],{"class":51,"line":3864},[49,46790,4279],{"class":109},[49,46792,46647],{"class":66},[49,46794,27292],{"class":109},[49,46796,46682],{"class":66},[49,46798,46799,46802,46804,46807,46809,46812,46815,46817,46819,46821],{"class":51,"line":3870},[49,46800,46801],{"class":66},"    cla_path ",[49,46803,1448],{"class":109},[49,46805,46806],{"class":66}," file_path ",[49,46808,1872],{"class":109},[49,46810,46811],{"class":1505}," '\u002F'",[49,46813,46814],{"class":109}," +",[49,46816,46647],{"class":66},[49,46818,1872],{"class":109},[49,46820,46811],{"class":1505},[49,46822,46823],{"class":55},"  # 某一类别的子目录\n",[49,46825,46826,46829,46831,46834],{"class":51,"line":3875},[49,46827,46828],{"class":66},"    images ",[49,46830,1448],{"class":109},[49,46832,46833],{"class":66}," os.listdir(cla_path)  ",[49,46835,46836],{"class":55},"# iamges 列表存储了该目录下所有图像的名称\n",[49,46838,46839,46842,46844,46846],{"class":51,"line":9200},[49,46840,46841],{"class":66},"    num ",[49,46843,1448],{"class":109},[49,46845,8583],{"class":73},[49,46847,46848],{"class":66},"(images)\n",[49,46850,46851,46854,46856,46859,46861,46863,46865,46868,46870,46873],{"class":51,"line":9224},[49,46852,46853],{"class":66},"    eval_index ",[49,46855,1448],{"class":109},[49,46857,46858],{"class":66}," random.sample(images, ",[49,46860,1884],{"class":6468},[49,46862,1448],{"class":109},[49,46864,1406],{"class":73},[49,46866,46867],{"class":66},"(num ",[49,46869,1846],{"class":109},[49,46871,46872],{"class":66}," split_rate))  ",[49,46874,46875],{"class":55},"# 从images列表中随机抽取 k 个图像名称\n",[49,46877,46878],{"class":51,"line":9229},[49,46879,46880],{"class":55},"    # 遍历该类别下的所有图片\n",[49,46882,46883],{"class":51,"line":9235},[49,46884,46885],{"class":55},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[49,46887,46888,46890,46893,46895,46897],{"class":51,"line":9262},[49,46889,4455],{"class":109},[49,46891,46892],{"class":66}," index, image ",[49,46894,27292],{"class":109},[49,46896,32854],{"class":73},[49,46898,46899],{"class":66},"(images):\n",[49,46901,46902],{"class":51,"line":9267},[49,46903,46904],{"class":55},"        # eval_index 中保存验证集val的图像名称\n",[49,46906,46907,46909,46912,46914],{"class":51,"line":9273},[49,46908,3751],{"class":109},[49,46910,46911],{"class":66}," image ",[49,46913,27292],{"class":109},[49,46915,46916],{"class":66}," eval_index:\n",[49,46918,46919,46922,46924,46927,46929],{"class":51,"line":9285},[49,46920,46921],{"class":66},"            image_path ",[49,46923,1448],{"class":109},[49,46925,46926],{"class":66}," cla_path ",[49,46928,1872],{"class":109},[49,46930,46931],{"class":66}," image\n",[49,46933,46934,46937,46939,46942,46944],{"class":51,"line":9297},[49,46935,46936],{"class":66},"            new_path ",[49,46938,1448],{"class":109},[49,46940,46941],{"class":1505}," 'data\u002Ftest\u002F'",[49,46943,46814],{"class":109},[49,46945,46946],{"class":66}," cla\n",[49,46948,46949,46952],{"class":51,"line":9309},[49,46950,46951],{"class":66},"            copy(image_path, new_path)  ",[49,46953,46954],{"class":55},"# 将选中的图像复制到新路径\n",[49,46956,46957],{"class":51,"line":10968},[49,46958,3654],{"emptyLinePlaceholder":1330},[49,46960,46961],{"class":51,"line":10993},[49,46962,46963],{"class":55},"        # 其余的图像保存在训练集train中\n",[49,46965,46966,46968],{"class":51,"line":11016},[49,46967,3788],{"class":109},[49,46969,4993],{"class":66},[49,46971,46972,46974,46976,46978,46980],{"class":51,"line":11040},[49,46973,46921],{"class":66},[49,46975,1448],{"class":109},[49,46977,46926],{"class":66},[49,46979,1872],{"class":109},[49,46981,46931],{"class":66},[49,46983,46984,46986,46988,46991,46993],{"class":51,"line":11045},[49,46985,46936],{"class":66},[49,46987,1448],{"class":109},[49,46989,46990],{"class":1505}," 'data\u002Ftrain\u002F'",[49,46992,46814],{"class":109},[49,46994,46946],{"class":66},[49,46996,46997],{"class":51,"line":11050},[49,46998,46999],{"class":66},"            copy(image_path, new_path)\n",[49,47001,47002],{"class":51,"line":11055},[49,47003,47004],{"class":55},"            # 打印进度条信息\n",[49,47006,47007],{"class":51,"line":11064},[49,47008,47009],{"class":55},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[49,47011,47012,47014,47016,47018,47021,47023,47025,47028,47030,47032,47034,47037,47040,47042,47044,47047,47050,47052,47054,47057],{"class":51,"line":11069},[49,47013,33699],{"class":73},[49,47015,1403],{"class":66},[49,47017,1643],{"class":1505},[49,47019,47020],{"class":73},"\\r",[49,47022,2280],{"class":1505},[49,47024,33707],{"class":73},[49,47026,47027],{"class":1505},"] processing [",[49,47029,33707],{"class":73},[49,47031,1975],{"class":1505},[49,47033,33707],{"class":73},[49,47035,47036],{"class":1505},"]\"",[49,47038,47039],{"class":66},".format(cla, index ",[49,47041,1872],{"class":109},[49,47043,26367],{"class":73},[49,47045,47046],{"class":66},", num), ",[49,47048,47049],{"class":6468},"end",[49,47051,1448],{"class":109},[49,47053,8904],{"class":1505},[49,47055,47056],{"class":66},")  ",[49,47058,47059],{"class":55},"# processing bar\n",[49,47061,47062,47064],{"class":51,"line":11075},[49,47063,32547],{"class":73},[49,47065,3230],{"class":66},[49,47067,47068],{"class":51,"line":11096},[49,47069,3654],{"emptyLinePlaceholder":1330},[49,47071,47072,47074,47076,47079],{"class":51,"line":11102},[49,47073,31663],{"class":73},[49,47075,1403],{"class":66},[49,47077,47078],{"class":1505},"\"processing done!\"",[49,47080,1409],{"class":66},[19,47082,47083],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[525,47085,47087],{"id":47086},"_242模型代码","2.4.2.模型代码",[19,47089,47090],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[39,47092,47094],{"className":31626,"code":47093,"language":31628,"meta":44,"style":44},"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",[46,47095,47096,47102,47112,47122,47126,47142,47150,47164,47174,47178,47208,47212,47246,47292,47296,47330,47376,47380,47384,47418,47448,47452,47460,47474,47496,47518,47536,47540,47554,47558,47562,47578,47582,47590,47604,47614,47658,47662,47690,47694,47704,47732,47736,47772,47776,47804,47808,47818,47850,47882,47910,47914,47924,47956,47988,48020,48052,48084,48112,48116,48126,48158,48190,48202,48206,48218,48222,48226,48238,48246,48266,48270,48274,48278,48282,48286,48290,48304,48312,48320,48332,48346,48354,48358,48366,48376,48386,48396,48406,48416,48422,48426,48430,48442,48462,48470],{"__ignoreMap":44},[49,47097,47098,47100],{"class":51,"line":52},[49,47099,31640],{"class":109},[49,47101,31643],{"class":66},[49,47103,47104,47106,47108,47110],{"class":51,"line":59},[49,47105,31985],{"class":109},[49,47107,31988],{"class":66},[49,47109,31640],{"class":109},[49,47111,31993],{"class":66},[49,47113,47114,47116,47118,47120],{"class":51,"line":70},[49,47115,31985],{"class":109},[49,47117,32005],{"class":66},[49,47119,31640],{"class":109},[49,47121,32010],{"class":66},[49,47123,47124],{"class":51,"line":86},[49,47125,3654],{"emptyLinePlaceholder":1330},[49,47127,47128,47130,47132,47134,47136,47138,47140],{"class":51,"line":98},[49,47129,15945],{"class":109},[49,47131,42741],{"class":62},[49,47133,1403],{"class":66},[49,47135,32026],{"class":62},[49,47137,1949],{"class":66},[49,47139,32031],{"class":62},[49,47141,32034],{"class":66},[49,47143,47144,47146,47148],{"class":51,"line":121},[49,47145,32049],{"class":109},[49,47147,32052],{"class":73},[49,47149,42760],{"class":66},[49,47151,47152,47154,47156,47158,47160,47162],{"class":51,"line":134},[49,47153,32065],{"class":73},[49,47155,42767],{"class":66},[49,47157,32071],{"class":73},[49,47159,32074],{"class":66},[49,47161,32077],{"class":73},[49,47163,3230],{"class":66},[49,47165,47166,47168,47170,47172],{"class":51,"line":1085},[49,47167,32093],{"class":73},[49,47169,36019],{"class":66},[49,47171,1448],{"class":109},[49,47173,36024],{"class":66},[49,47175,47176],{"class":51,"line":2574},[49,47177,42790],{"class":55},[49,47179,47180,47182,47184,47186,47188,47190,47192,47194,47196,47198,47200,47202,47204,47206],{"class":51,"line":2586},[49,47181,32093],{"class":73},[49,47183,42797],{"class":66},[49,47185,1448],{"class":109},[49,47187,32101],{"class":66},[49,47189,32104],{"class":6468},[49,47191,1448],{"class":109},[49,47193,42808],{"class":66},[49,47195,32113],{"class":6468},[49,47197,1448],{"class":109},[49,47199,42815],{"class":66},[49,47201,32122],{"class":6468},[49,47203,1448],{"class":109},[49,47205,159],{"class":73},[49,47207,1409],{"class":66},[49,47209,47210],{"class":51,"line":2867},[49,47211,42828],{"class":55},[49,47213,47214,47216,47218,47220,47222,47224,47226,47228,47230,47232,47234,47236,47238,47240,47242,47244],{"class":51,"line":2872},[49,47215,32093],{"class":73},[49,47217,42835],{"class":66},[49,47219,1448],{"class":109},[49,47221,32101],{"class":66},[49,47223,32104],{"class":6468},[49,47225,1448],{"class":109},[49,47227,42808],{"class":66},[49,47229,32113],{"class":6468},[49,47231,1448],{"class":109},[49,47233,42852],{"class":66},[49,47235,80],{"class":73},[49,47237,42857],{"class":66},[49,47239,32122],{"class":6468},[49,47241,1448],{"class":109},[49,47243,159],{"class":73},[49,47245,1409],{"class":66},[49,47247,47248,47250,47252,47254,47256,47258,47260,47262,47264,47266,47268,47270,47272,47274,47276,47278,47280,47282,47284,47286,47288,47290],{"class":51,"line":2878},[49,47249,32093],{"class":73},[49,47251,42872],{"class":66},[49,47253,1448],{"class":109},[49,47255,32101],{"class":66},[49,47257,32104],{"class":6468},[49,47259,1448],{"class":109},[49,47261,42852],{"class":66},[49,47263,80],{"class":73},[49,47265,42857],{"class":66},[49,47267,32113],{"class":6468},[49,47269,1448],{"class":109},[49,47271,42852],{"class":66},[49,47273,159],{"class":73},[49,47275,42857],{"class":66},[49,47277,32122],{"class":6468},[49,47279,1448],{"class":109},[49,47281,1472],{"class":73},[49,47283,1770],{"class":66},[49,47285,32131],{"class":6468},[49,47287,1448],{"class":109},[49,47289,159],{"class":73},[49,47291,1409],{"class":66},[49,47293,47294],{"class":51,"line":2883},[49,47295,42917],{"class":55},[49,47297,47298,47300,47302,47304,47306,47308,47310,47312,47314,47316,47318,47320,47322,47324,47326,47328],{"class":51,"line":2897},[49,47299,32093],{"class":73},[49,47301,42924],{"class":66},[49,47303,1448],{"class":109},[49,47305,32101],{"class":66},[49,47307,32104],{"class":6468},[49,47309,1448],{"class":109},[49,47311,42808],{"class":66},[49,47313,32113],{"class":6468},[49,47315,1448],{"class":109},[49,47317,42941],{"class":66},[49,47319,80],{"class":73},[49,47321,42857],{"class":66},[49,47323,32122],{"class":6468},[49,47325,1448],{"class":109},[49,47327,159],{"class":73},[49,47329,1409],{"class":66},[49,47331,47332,47334,47336,47338,47340,47342,47344,47346,47348,47350,47352,47354,47356,47358,47360,47362,47364,47366,47368,47370,47372,47374],{"class":51,"line":2902},[49,47333,32093],{"class":73},[49,47335,42960],{"class":66},[49,47337,1448],{"class":109},[49,47339,32101],{"class":66},[49,47341,32104],{"class":6468},[49,47343,1448],{"class":109},[49,47345,42941],{"class":66},[49,47347,80],{"class":73},[49,47349,42857],{"class":66},[49,47351,32113],{"class":6468},[49,47353,1448],{"class":109},[49,47355,42941],{"class":66},[49,47357,159],{"class":73},[49,47359,42857],{"class":66},[49,47361,32122],{"class":6468},[49,47363,1448],{"class":109},[49,47365,1711],{"class":73},[49,47367,1770],{"class":66},[49,47369,32131],{"class":6468},[49,47371,1448],{"class":109},[49,47373,1478],{"class":73},[49,47375,1409],{"class":66},[49,47377,47378],{"class":51,"line":2908},[49,47379,43005],{"class":55},[49,47381,47382],{"class":51,"line":2929},[49,47383,43010],{"class":55},[49,47385,47386,47388,47390,47392,47394,47396,47398,47400,47402,47404,47406,47408,47410,47412,47414,47416],{"class":51,"line":2934},[49,47387,32093],{"class":73},[49,47389,43017],{"class":66},[49,47391,1448],{"class":109},[49,47393,36077],{"class":66},[49,47395,32122],{"class":6468},[49,47397,1448],{"class":109},[49,47399,1472],{"class":73},[49,47401,1770],{"class":66},[49,47403,32177],{"class":6468},[49,47405,1448],{"class":109},[49,47407,159],{"class":73},[49,47409,1770],{"class":66},[49,47411,32131],{"class":6468},[49,47413,1448],{"class":109},[49,47415,159],{"class":73},[49,47417,1409],{"class":66},[49,47419,47420,47422,47424,47426,47428,47430,47432,47434,47436,47438,47440,47442,47444,47446],{"class":51,"line":2948},[49,47421,32093],{"class":73},[49,47423,43052],{"class":66},[49,47425,1448],{"class":109},[49,47427,32101],{"class":66},[49,47429,32104],{"class":6468},[49,47431,1448],{"class":109},[49,47433,42808],{"class":66},[49,47435,32113],{"class":6468},[49,47437,1448],{"class":109},[49,47439,43069],{"class":66},[49,47441,32122],{"class":6468},[49,47443,1448],{"class":109},[49,47445,159],{"class":73},[49,47447,1409],{"class":66},[49,47449,47450],{"class":51,"line":2953},[49,47451,3654],{"emptyLinePlaceholder":1330},[49,47453,47454,47456,47458],{"class":51,"line":2982},[49,47455,32049],{"class":109},[49,47457,32341],{"class":62},[49,47459,32344],{"class":66},[49,47461,47462,47464,47466,47468,47470,47472],{"class":51,"line":2987},[49,47463,43094],{"class":66},[49,47465,1448],{"class":109},[49,47467,32071],{"class":73},[49,47469,36432],{"class":66},[49,47471,32071],{"class":73},[49,47473,43105],{"class":66},[49,47475,47476,47478,47480,47482,47484,47486,47488,47490,47492,47494],{"class":51,"line":3004},[49,47477,8337],{"class":66},[49,47479,1448],{"class":109},[49,47481,32071],{"class":73},[49,47483,36432],{"class":66},[49,47485,32071],{"class":73},[49,47487,43120],{"class":66},[49,47489,32071],{"class":73},[49,47491,36432],{"class":66},[49,47493,32071],{"class":73},[49,47495,43129],{"class":66},[49,47497,47498,47500,47502,47504,47506,47508,47510,47512,47514,47516],{"class":51,"line":3009},[49,47499,43134],{"class":66},[49,47501,1448],{"class":109},[49,47503,32071],{"class":73},[49,47505,36432],{"class":66},[49,47507,32071],{"class":73},[49,47509,43145],{"class":66},[49,47511,32071],{"class":73},[49,47513,36432],{"class":66},[49,47515,32071],{"class":73},[49,47517,43154],{"class":66},[49,47519,47520,47522,47524,47526,47528,47530,47532,47534],{"class":51,"line":3014},[49,47521,43159],{"class":66},[49,47523,1448],{"class":109},[49,47525,32071],{"class":73},[49,47527,36432],{"class":66},[49,47529,32071],{"class":73},[49,47531,43170],{"class":66},[49,47533,32071],{"class":73},[49,47535,43175],{"class":66},[49,47537,47538],{"class":51,"line":3019},[49,47539,43180],{"class":55},[49,47541,47542,47544,47546,47548,47550,47552],{"class":51,"line":3033},[49,47543,16003],{"class":109},[49,47545,43187],{"class":66},[49,47547,33933],{"class":6468},[49,47549,1448],{"class":109},[49,47551,159],{"class":73},[49,47553,1409],{"class":66},[49,47555,47556],{"class":51,"line":3038},[49,47557,3654],{"emptyLinePlaceholder":1330},[49,47559,47560],{"class":51,"line":3831},[49,47561,43208],{"class":55},[49,47563,47564,47566,47568,47570,47572,47574,47576],{"class":51,"line":3845},[49,47565,15945],{"class":109},[49,47567,43215],{"class":62},[49,47569,1403],{"class":66},[49,47571,32026],{"class":62},[49,47573,1949],{"class":66},[49,47575,32031],{"class":62},[49,47577,32034],{"class":66},[49,47579,47580],{"class":51,"line":3853},[49,47581,43230],{"class":55},[49,47583,47584,47586,47588],{"class":51,"line":3858},[49,47585,32049],{"class":109},[49,47587,32052],{"class":73},[49,47589,43239],{"class":66},[49,47591,47592,47594,47596,47598,47600,47602],{"class":51,"line":3864},[49,47593,32065],{"class":73},[49,47595,43246],{"class":66},[49,47597,32071],{"class":73},[49,47599,32074],{"class":66},[49,47601,32077],{"class":73},[49,47603,3230],{"class":66},[49,47605,47606,47608,47610,47612],{"class":51,"line":3870},[49,47607,32093],{"class":73},[49,47609,43261],{"class":66},[49,47611,1448],{"class":109},[49,47613,39257],{"class":66},[49,47615,47616,47618,47620,47622,47624,47626,47628,47630,47632,47634,47636,47638,47640,47642,47644,47646,47648,47650,47652,47654,47656],{"class":51,"line":3875},[49,47617,39262],{"class":66},[49,47619,32104],{"class":6468},[49,47621,1448],{"class":109},[49,47623,1472],{"class":73},[49,47625,1770],{"class":66},[49,47627,32113],{"class":6468},[49,47629,1448],{"class":109},[49,47631,1596],{"class":73},[49,47633,1770],{"class":66},[49,47635,32122],{"class":6468},[49,47637,1448],{"class":109},[49,47639,1761],{"class":73},[49,47641,1770],{"class":66},[49,47643,32177],{"class":6468},[49,47645,1448],{"class":109},[49,47647,1478],{"class":73},[49,47649,1770],{"class":66},[49,47651,32131],{"class":6468},[49,47653,1448],{"class":109},[49,47655,1472],{"class":73},[49,47657,39295],{"class":66},[49,47659,47660],{"class":51,"line":9200},[49,47661,39300],{"class":66},[49,47663,47664,47666,47668,47670,47672,47674,47676,47678,47680,47682,47684,47686,47688],{"class":51,"line":9224},[49,47665,39345],{"class":66},[49,47667,32122],{"class":6468},[49,47669,1448],{"class":109},[49,47671,1472],{"class":73},[49,47673,1770],{"class":66},[49,47675,32177],{"class":6468},[49,47677,1448],{"class":109},[49,47679,1478],{"class":73},[49,47681,1770],{"class":66},[49,47683,32131],{"class":6468},[49,47685,1448],{"class":109},[49,47687,159],{"class":73},[49,47689,1409],{"class":66},[49,47691,47692],{"class":51,"line":9229},[49,47693,39374],{"class":66},[49,47695,47696,47698,47700,47702],{"class":51,"line":9235},[49,47697,32093],{"class":73},[49,47699,43352],{"class":66},[49,47701,1448],{"class":109},[49,47703,39257],{"class":66},[49,47705,47706,47708,47710,47712,47714,47716,47718,47720,47722,47724,47726,47728,47730],{"class":51,"line":9262},[49,47707,39262],{"class":66},[49,47709,32104],{"class":6468},[49,47711,1448],{"class":109},[49,47713,1596],{"class":73},[49,47715,1770],{"class":66},[49,47717,32113],{"class":6468},[49,47719,1448],{"class":109},[49,47721,1596],{"class":73},[49,47723,1770],{"class":66},[49,47725,32122],{"class":6468},[49,47727,1448],{"class":109},[49,47729,159],{"class":73},[49,47731,39295],{"class":66},[49,47733,47734],{"class":51,"line":9267},[49,47735,39300],{"class":66},[49,47737,47738,47740,47742,47744,47746,47748,47750,47752,47754,47756,47758,47760,47762,47764,47766,47768,47770],{"class":51,"line":9273},[49,47739,39262],{"class":66},[49,47741,32104],{"class":6468},[49,47743,1448],{"class":109},[49,47745,1596],{"class":73},[49,47747,1770],{"class":66},[49,47749,32113],{"class":6468},[49,47751,1448],{"class":109},[49,47753,43407],{"class":73},[49,47755,1770],{"class":66},[49,47757,32122],{"class":6468},[49,47759,1448],{"class":109},[49,47761,1472],{"class":73},[49,47763,1770],{"class":66},[49,47765,32131],{"class":6468},[49,47767,1448],{"class":109},[49,47769,159],{"class":73},[49,47771,39295],{"class":66},[49,47773,47774],{"class":51,"line":9285},[49,47775,39300],{"class":66},[49,47777,47778,47780,47782,47784,47786,47788,47790,47792,47794,47796,47798,47800,47802],{"class":51,"line":9297},[49,47779,39345],{"class":66},[49,47781,32122],{"class":6468},[49,47783,1448],{"class":109},[49,47785,1472],{"class":73},[49,47787,1770],{"class":66},[49,47789,32177],{"class":6468},[49,47791,1448],{"class":109},[49,47793,1478],{"class":73},[49,47795,1770],{"class":66},[49,47797,32131],{"class":6468},[49,47799,1448],{"class":109},[49,47801,159],{"class":73},[49,47803,1409],{"class":66},[49,47805,47806],{"class":51,"line":9309},[49,47807,39374],{"class":66},[49,47809,47810,47812,47814,47816],{"class":51,"line":10968},[49,47811,32093],{"class":73},[49,47813,43468],{"class":66},[49,47815,1448],{"class":109},[49,47817,39257],{"class":66},[49,47819,47820,47822,47824,47826,47828,47830,47832,47834,47836,47838,47840,47842,47844,47846,47848],{"class":51,"line":10993},[49,47821,43477],{"class":66},[49,47823,43407],{"class":73},[49,47825,1770],{"class":66},[49,47827,1596],{"class":73},[49,47829,43486],{"class":66},[49,47831,1602],{"class":73},[49,47833,1770],{"class":66},[49,47835,33318],{"class":73},[49,47837,43495],{"class":66},[49,47839,1992],{"class":73},[49,47841,1770],{"class":66},[49,47843,1590],{"class":73},[49,47845,43504],{"class":66},[49,47847,1590],{"class":73},[49,47849,39295],{"class":66},[49,47851,47852,47854,47856,47858,47860,47862,47864,47866,47868,47870,47872,47874,47876,47878,47880],{"class":51,"line":11016},[49,47853,43477],{"class":66},[49,47855,36118],{"class":73},[49,47857,1770],{"class":66},[49,47859,33318],{"class":73},[49,47861,43486],{"class":66},[49,47863,33318],{"class":73},[49,47865,1770],{"class":66},[49,47867,43407],{"class":73},[49,47869,43495],{"class":66},[49,47871,1590],{"class":73},[49,47873,1770],{"class":66},[49,47875,1602],{"class":73},[49,47877,43504],{"class":66},[49,47879,1596],{"class":73},[49,47881,39295],{"class":66},[49,47883,47884,47886,47888,47890,47892,47894,47896,47898,47900,47902,47904,47906,47908],{"class":51,"line":11040},[49,47885,39345],{"class":66},[49,47887,32122],{"class":6468},[49,47889,1448],{"class":109},[49,47891,1472],{"class":73},[49,47893,1770],{"class":66},[49,47895,32177],{"class":6468},[49,47897,1448],{"class":109},[49,47899,1478],{"class":73},[49,47901,1770],{"class":66},[49,47903,32131],{"class":6468},[49,47905,1448],{"class":109},[49,47907,159],{"class":73},[49,47909,1409],{"class":66},[49,47911,47912],{"class":51,"line":11045},[49,47913,39374],{"class":66},[49,47915,47916,47918,47920,47922],{"class":51,"line":11050},[49,47917,32093],{"class":73},[49,47919,43579],{"class":66},[49,47921,1448],{"class":109},[49,47923,39257],{"class":66},[49,47925,47926,47928,47930,47932,47934,47936,47938,47940,47942,47944,47946,47948,47950,47952,47954],{"class":51,"line":11055},[49,47927,43477],{"class":66},[49,47929,43590],{"class":73},[49,47931,1770],{"class":66},[49,47933,43407],{"class":73},[49,47935,43486],{"class":66},[49,47937,1602],{"class":73},[49,47939,1770],{"class":66},[49,47941,43603],{"class":73},[49,47943,43495],{"class":66},[49,47945,1992],{"class":73},[49,47947,1770],{"class":66},[49,47949,1998],{"class":73},[49,47951,43504],{"class":66},[49,47953,1596],{"class":73},[49,47955,39295],{"class":66},[49,47957,47958,47960,47962,47964,47966,47968,47970,47972,47974,47976,47978,47980,47982,47984,47986],{"class":51,"line":11064},[49,47959,43477],{"class":66},[49,47961,39705],{"class":73},[49,47963,1770],{"class":66},[49,47965,22298],{"class":73},[49,47967,43486],{"class":66},[49,47969,2009],{"class":73},[49,47971,1770],{"class":66},[49,47973,32749],{"class":73},[49,47975,43495],{"class":66},[49,47977,2190],{"class":73},[49,47979,1770],{"class":66},[49,47981,1596],{"class":73},[49,47983,43504],{"class":66},[49,47985,1596],{"class":73},[49,47987,39295],{"class":66},[49,47989,47990,47992,47994,47996,47998,48000,48002,48004,48006,48008,48010,48012,48014,48016,48018],{"class":51,"line":11069},[49,47991,43477],{"class":66},[49,47993,39705],{"class":73},[49,47995,1770],{"class":66},[49,47997,33318],{"class":73},[49,47999,43486],{"class":66},[49,48001,33318],{"class":73},[49,48003,1770],{"class":66},[49,48005,36118],{"class":73},[49,48007,43495],{"class":66},[49,48009,2190],{"class":73},[49,48011,1770],{"class":66},[49,48013,1596],{"class":73},[49,48015,43504],{"class":66},[49,48017,1596],{"class":73},[49,48019,39295],{"class":66},[49,48021,48022,48024,48026,48028,48030,48032,48034,48036,48038,48040,48042,48044,48046,48048,48050],{"class":51,"line":11075},[49,48023,43477],{"class":66},[49,48025,39705],{"class":73},[49,48027,1770],{"class":66},[49,48029,2009],{"class":73},[49,48031,43486],{"class":66},[49,48033,33318],{"class":73},[49,48035,1770],{"class":66},[49,48037,43700],{"class":73},[49,48039,43495],{"class":66},[49,48041,1590],{"class":73},[49,48043,1770],{"class":66},[49,48045,1596],{"class":73},[49,48047,43504],{"class":66},[49,48049,1596],{"class":73},[49,48051,39295],{"class":66},[49,48053,48054,48056,48058,48060,48062,48064,48066,48068,48070,48072,48074,48076,48078,48080,48082],{"class":51,"line":11096},[49,48055,43477],{"class":66},[49,48057,43721],{"class":73},[49,48059,1770],{"class":66},[49,48061,36118],{"class":73},[49,48063,43486],{"class":66},[49,48065,22298],{"class":73},[49,48067,1770],{"class":66},[49,48069,43734],{"class":73},[49,48071,43495],{"class":66},[49,48073,1590],{"class":73},[49,48075,1770],{"class":66},[49,48077,33318],{"class":73},[49,48079,43504],{"class":66},[49,48081,33318],{"class":73},[49,48083,39295],{"class":66},[49,48085,48086,48088,48090,48092,48094,48096,48098,48100,48102,48104,48106,48108,48110],{"class":51,"line":11102},[49,48087,39345],{"class":66},[49,48089,32122],{"class":6468},[49,48091,1448],{"class":109},[49,48093,1472],{"class":73},[49,48095,1770],{"class":66},[49,48097,32177],{"class":6468},[49,48099,1448],{"class":109},[49,48101,1478],{"class":73},[49,48103,1770],{"class":66},[49,48105,32131],{"class":6468},[49,48107,1448],{"class":109},[49,48109,159],{"class":73},[49,48111,1409],{"class":66},[49,48113,48114],{"class":51,"line":11116},[49,48115,39374],{"class":66},[49,48117,48118,48120,48122,48124],{"class":51,"line":11122},[49,48119,32093],{"class":73},[49,48121,43787],{"class":66},[49,48123,1448],{"class":109},[49,48125,39257],{"class":66},[49,48127,48128,48130,48132,48134,48136,48138,48140,48142,48144,48146,48148,48150,48152,48154,48156],{"class":51,"line":11149},[49,48129,43477],{"class":66},[49,48131,43798],{"class":73},[49,48133,1770],{"class":66},[49,48135,36118],{"class":73},[49,48137,43486],{"class":66},[49,48139,22298],{"class":73},[49,48141,1770],{"class":66},[49,48143,43734],{"class":73},[49,48145,43495],{"class":66},[49,48147,1590],{"class":73},[49,48149,1770],{"class":66},[49,48151,33318],{"class":73},[49,48153,43504],{"class":66},[49,48155,33318],{"class":73},[49,48157,39295],{"class":66},[49,48159,48160,48162,48164,48166,48168,48170,48172,48174,48176,48178,48180,48182,48184,48186,48188],{"class":51,"line":11158},[49,48161,43477],{"class":66},[49,48163,43798],{"class":73},[49,48165,1770],{"class":66},[49,48167,36188],{"class":73},[49,48169,43486],{"class":66},[49,48171,43407],{"class":73},[49,48173,1770],{"class":66},[49,48175,36188],{"class":73},[49,48177,43495],{"class":66},[49,48179,1998],{"class":73},[49,48181,1770],{"class":66},[49,48183,33318],{"class":73},[49,48185,43504],{"class":66},[49,48187,33318],{"class":73},[49,48189,39295],{"class":66},[49,48191,48192,48194,48196,48198,48200],{"class":51,"line":11164},[49,48193,43861],{"class":66},[49,48195,159],{"class":73},[49,48197,1770],{"class":66},[49,48199,159],{"class":73},[49,48201,43870],{"class":66},[49,48203,48204],{"class":51,"line":11172},[49,48205,40038],{"class":66},[49,48207,48208,48210,48212,48214,48216],{"class":51,"line":11177},[49,48209,40043],{"class":66},[49,48211,43881],{"class":73},[49,48213,1770],{"class":66},[49,48215,1478],{"class":73},[49,48217,1409],{"class":66},[49,48219,48220],{"class":51,"line":17854},[49,48221,39374],{"class":66},[49,48223,48224],{"class":51,"line":17860},[49,48225,43896],{"class":55},[49,48227,48228,48230,48232,48234,48236],{"class":51,"line":17883},[49,48229,4657],{"class":109},[49,48231,40116],{"class":66},[49,48233,27292],{"class":109},[49,48235,40121],{"class":73},[49,48237,40124],{"class":66},[49,48239,48240,48242,48244],{"class":51,"line":17889},[49,48241,5896],{"class":109},[49,48243,40136],{"class":73},[49,48245,40139],{"class":66},[49,48247,48248,48250,48252,48254,48256,48258,48260,48262,48264],{"class":51,"line":17912},[49,48249,40149],{"class":66},[49,48251,43923],{"class":6468},[49,48253,1448],{"class":109},[49,48255,43928],{"class":1505},[49,48257,1770],{"class":66},[49,48259,40152],{"class":6468},[49,48261,1448],{"class":109},[49,48263,40157],{"class":1505},[49,48265,1409],{"class":66},[49,48267,48268],{"class":51,"line":17926},[49,48269,43943],{"class":55},[49,48271,48272],{"class":51,"line":17946},[49,48273,43948],{"class":55},[49,48275,48276],{"class":51,"line":17952},[49,48277,43953],{"class":55},[49,48279,48280],{"class":51,"line":17963},[49,48281,43958],{"class":55},[49,48283,48284],{"class":51,"line":17986},[49,48285,43963],{"class":55},[49,48287,48288],{"class":51,"line":18008},[49,48289,43968],{"class":55},[49,48291,48292,48294,48296,48298,48300,48302],{"class":51,"line":18013},[49,48293,40169],{"class":109},[49,48295,40172],{"class":66},[49,48297,40175],{"class":109},[49,48299,40178],{"class":109},[49,48301,40181],{"class":73},[49,48303,4993],{"class":66},[49,48305,48306,48308,48310],{"class":51,"line":18019},[49,48307,40193],{"class":66},[49,48309,80],{"class":73},[49,48311,1409],{"class":66},[49,48313,48314,48316,48318],{"class":51,"line":18033},[49,48315,43995],{"class":109},[49,48317,40136],{"class":73},[49,48319,40212],{"class":66},[49,48321,48322,48324,48326,48328,48330],{"class":51,"line":18046},[49,48323,44004],{"class":66},[49,48325,80],{"class":73},[49,48327,1770],{"class":66},[49,48329,40234],{"class":73},[49,48331,1409],{"class":66},[49,48333,48334,48336,48338,48340,48342,48344],{"class":51,"line":18051},[49,48335,44017],{"class":109},[49,48337,40172],{"class":66},[49,48339,40175],{"class":109},[49,48341,40178],{"class":109},[49,48343,40181],{"class":73},[49,48345,4993],{"class":66},[49,48347,48348,48350,48352],{"class":51,"line":18065},[49,48349,44032],{"class":66},[49,48351,80],{"class":73},[49,48353,1409],{"class":66},[49,48355,48356],{"class":51,"line":18070},[49,48357,36413],{"class":55},[49,48359,48360,48362,48364],{"class":51,"line":18076},[49,48361,32049],{"class":109},[49,48363,32341],{"class":62},[49,48365,32344],{"class":66},[49,48367,48368,48370,48372,48374],{"class":51,"line":18081},[49,48369,32349],{"class":66},[49,48371,1448],{"class":109},[49,48373,32071],{"class":73},[49,48375,44059],{"class":66},[49,48377,48378,48380,48382,48384],{"class":51,"line":18095},[49,48379,32349],{"class":66},[49,48381,1448],{"class":109},[49,48383,32071],{"class":73},[49,48385,44070],{"class":66},[49,48387,48388,48390,48392,48394],{"class":51,"line":18100},[49,48389,32349],{"class":66},[49,48391,1448],{"class":109},[49,48393,32071],{"class":73},[49,48395,44081],{"class":66},[49,48397,48398,48400,48402,48404],{"class":51,"line":18105},[49,48399,32349],{"class":66},[49,48401,1448],{"class":109},[49,48403,32071],{"class":73},[49,48405,44092],{"class":66},[49,48407,48408,48410,48412,48414],{"class":51,"line":18119},[49,48409,32349],{"class":66},[49,48411,1448],{"class":109},[49,48413,32071],{"class":73},[49,48415,44103],{"class":66},[49,48417,48418,48420],{"class":51,"line":18131},[49,48419,16003],{"class":109},[49,48421,32457],{"class":66},[49,48423,48424],{"class":51,"line":18136},[49,48425,3654],{"emptyLinePlaceholder":1330},[49,48427,48428],{"class":51,"line":18149},[49,48429,44118],{"class":55},[49,48431,48432,48434,48436,48438,48440],{"class":51,"line":18154},[49,48433,2787],{"class":109},[49,48435,32468],{"class":73},[49,48437,4203],{"class":109},[49,48439,32473],{"class":1505},[49,48441,4993],{"class":66},[49,48443,48444,48446,48448,48450,48452,48454,48456,48458,48460],{"class":51,"line":18159},[49,48445,32485],{"class":66},[49,48447,1448],{"class":109},[49,48449,31699],{"class":66},[49,48451,32492],{"class":1505},[49,48453,2959],{"class":109},[49,48455,32497],{"class":66},[49,48457,2956],{"class":109},[49,48459,31724],{"class":1505},[49,48461,1409],{"class":66},[49,48463,48464,48466,48468],{"class":51,"line":18164},[49,48465,32537],{"class":66},[49,48467,1448],{"class":109},[49,48469,44159],{"class":66},[49,48471,48472,48474,48476,48478,48480,48482,48484,48486],{"class":51,"line":18177},[49,48473,32547],{"class":73},[49,48475,32550],{"class":66},[49,48477,159],{"class":73},[49,48479,1770],{"class":66},[49,48481,32749],{"class":73},[49,48483,1770],{"class":66},[49,48485,32749],{"class":73},[49,48487,32563],{"class":66},[525,48489,48491],{"id":48490},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,48493,48494],{},"计算图片的均值与方差，用于训练中归一化处理操作",[39,48496,48498],{"className":31626,"code":48497,"language":31628,"meta":44,"style":44},"# 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",[46,48499,48500,48505,48518,48523,48529,48534,48544,48548,48553,48563,48567,48572,48582,48599,48603,48608,48620,48632,48663,48672,48682,48692,48696,48701,48716,48720,48725,48730,48735,48745,48750,48775,48779,48784,48799,48803,48816,48820,48825,48830,48835,48840,48845,48855,48865,48888,48896,48904,48912,48916,48928,48932,48937,48941,48945,48952,48972,48996,49003,49017,49022,49027,49031,49045,49049,49061],{"__ignoreMap":44},[49,48501,48502],{"class":51,"line":52},[49,48503,48504],{"class":55},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[49,48506,48507,48509,48512,48515],{"class":51,"line":59},[49,48508,31985],{"class":109},[49,48510,48511],{"class":73}," PIL",[49,48513,48514],{"class":109}," import",[49,48516,48517],{"class":66}," Image\n",[49,48519,48520],{"class":51,"line":70},[49,48521,48522],{"class":55},"# os 用来处理文件夹和文件路径\n",[49,48524,48525,48527],{"class":51,"line":86},[49,48526,31640],{"class":109},[49,48528,46553],{"class":66},[49,48530,48531],{"class":51,"line":98},[49,48532,48533],{"class":55},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[49,48535,48536,48538,48540,48542],{"class":51,"line":121},[49,48537,31640],{"class":109},[49,48539,32628],{"class":66},[49,48541,32631],{"class":109},[49,48543,32634],{"class":66},[49,48545,48546],{"class":51,"line":134},[49,48547,3654],{"emptyLinePlaceholder":1330},[49,48549,48550],{"class":51,"line":1085},[49,48551,48552],{"class":55},"# 文件夹路径，包含所有图片文件\n",[49,48554,48555,48558,48560],{"class":51,"line":2574},[49,48556,48557],{"class":66},"folder_path ",[49,48559,1448],{"class":109},[49,48561,48562],{"class":1505}," 'data_cat_dog'\n",[49,48564,48565],{"class":51,"line":2586},[49,48566,3654],{"emptyLinePlaceholder":1330},[49,48568,48569],{"class":51,"line":2867},[49,48570,48571],{"class":55},"# 初始化累积变量\n",[49,48573,48574,48577,48579],{"class":51,"line":2872},[49,48575,48576],{"class":66},"total_pixels ",[49,48578,1448],{"class":109},[49,48580,48581],{"class":73}," 0\n",[49,48583,48584,48587,48589,48592,48594,48596],{"class":51,"line":2878},[49,48585,48586],{"class":66},"sum_normalized_pixel_values ",[49,48588,1448],{"class":109},[49,48590,48591],{"class":66}," np.zeros(",[49,48593,1472],{"class":73},[49,48595,47056],{"class":66},[49,48597,48598],{"class":55},"# 如果是RGB图像，需要三个通道的均值和方差\n",[49,48600,48601],{"class":51,"line":2883},[49,48602,3654],{"emptyLinePlaceholder":1330},[49,48604,48605],{"class":51,"line":2897},[49,48606,48607],{"class":55},"# 遍历文件夹中的图片文件\n",[49,48609,48610,48612,48615,48617],{"class":51,"line":2902},[49,48611,4279],{"class":109},[49,48613,48614],{"class":66}," root, dirs, files ",[49,48616,27292],{"class":109},[49,48618,48619],{"class":66}," os.walk(folder_path):\n",[49,48621,48622,48624,48627,48629],{"class":51,"line":2908},[49,48623,4455],{"class":109},[49,48625,48626],{"class":66}," filename ",[49,48628,27292],{"class":109},[49,48630,48631],{"class":66}," files:\n",[49,48633,48634,48636,48639,48642,48644,48647,48649,48652,48654,48657,48660],{"class":51,"line":2929},[49,48635,3751],{"class":109},[49,48637,48638],{"class":66}," filename.endswith((",[49,48640,48641],{"class":1505},"'.jpg'",[49,48643,13687],{"class":66},[49,48645,48646],{"class":1505},"'.jpeg'",[49,48648,13687],{"class":66},[49,48650,48651],{"class":1505},"'.png'",[49,48653,13687],{"class":66},[49,48655,48656],{"class":1505},"'.bmp'",[49,48658,48659],{"class":66},")):  ",[49,48661,48662],{"class":55},"# 可根据实际情况添加其他格式\n",[49,48664,48665,48667,48669],{"class":51,"line":2934},[49,48666,46921],{"class":66},[49,48668,1448],{"class":109},[49,48670,48671],{"class":66}," os.path.join(root, filename)\n",[49,48673,48674,48677,48679],{"class":51,"line":2948},[49,48675,48676],{"class":66},"            image ",[49,48678,1448],{"class":109},[49,48680,48681],{"class":66}," Image.open(image_path)\n",[49,48683,48684,48687,48689],{"class":51,"line":2953},[49,48685,48686],{"class":66},"            image_array ",[49,48688,1448],{"class":109},[49,48690,48691],{"class":66}," np.array(image)\n",[49,48693,48694],{"class":51,"line":2982},[49,48695,3654],{"emptyLinePlaceholder":1330},[49,48697,48698],{"class":51,"line":2987},[49,48699,48700],{"class":55},"            # 归一化像素值到0-1之间\n",[49,48702,48703,48706,48708,48711,48713],{"class":51,"line":3004},[49,48704,48705],{"class":66},"            normalized_image_array ",[49,48707,1448],{"class":109},[49,48709,48710],{"class":66}," image_array ",[49,48712,1975],{"class":109},[49,48714,48715],{"class":73}," 255.0\n",[49,48717,48718],{"class":51,"line":3009},[49,48719,3654],{"emptyLinePlaceholder":1330},[49,48721,48722],{"class":51,"line":3014},[49,48723,48724],{"class":55},"            # print(image_path)\n",[49,48726,48727],{"class":51,"line":3019},[49,48728,48729],{"class":55},"            # print(normalized_image_array.shape)\n",[49,48731,48732],{"class":51,"line":3033},[49,48733,48734],{"class":55},"            # 累积归一化后的像素值和像素数量\n",[49,48736,48737,48740,48742],{"class":51,"line":3038},[49,48738,48739],{"class":66},"            total_pixels ",[49,48741,10729],{"class":109},[49,48743,48744],{"class":66}," normalized_image_array.size\n",[49,48746,48747],{"class":51,"line":3831},[49,48748,48749],{"class":55},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[49,48751,48752,48755,48757,48760,48763,48765,48767,48769,48771,48773],{"class":51,"line":3845},[49,48753,48754],{"class":66},"            sum_normalized_pixel_values ",[49,48756,10729],{"class":109},[49,48758,48759],{"class":66}," np.sum(normalized_image_array, ",[49,48761,48762],{"class":6468},"axis",[49,48764,1448],{"class":109},[49,48766,1403],{"class":66},[49,48768,80],{"class":73},[49,48770,13687],{"class":66},[49,48772,159],{"class":73},[49,48774,31745],{"class":66},[49,48776,48777],{"class":51,"line":3853},[49,48778,3654],{"emptyLinePlaceholder":1330},[49,48780,48781],{"class":51,"line":3858},[49,48782,48783],{"class":55},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[49,48785,48786,48789,48791,48794,48796],{"class":51,"line":3864},[49,48787,48788],{"class":66},"mean ",[49,48790,1448],{"class":109},[49,48792,48793],{"class":66}," sum_normalized_pixel_values ",[49,48795,1975],{"class":109},[49,48797,48798],{"class":66}," total_pixels\n",[49,48800,48801],{"class":51,"line":3870},[49,48802,3654],{"emptyLinePlaceholder":1330},[49,48804,48805,48808,48810,48812,48814],{"class":51,"line":3875},[49,48806,48807],{"class":66},"sum_squared_diff ",[49,48809,1448],{"class":109},[49,48811,48591],{"class":66},[49,48813,1472],{"class":73},[49,48815,1409],{"class":66},[49,48817,48818],{"class":51,"line":9200},[49,48819,3654],{"emptyLinePlaceholder":1330},[49,48821,48822],{"class":51,"line":9224},[49,48823,48824],{"class":55},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[49,48826,48827],{"class":51,"line":9229},[49,48828,48829],{"class":55},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[49,48831,48832],{"class":51,"line":9235},[49,48833,48834],{"class":55},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[49,48836,48837],{"class":51,"line":9262},[49,48838,48839],{"class":55},"# Image.open(image_path)：打开图片\n",[49,48841,48842],{"class":51,"line":9267},[49,48843,48844],{"class":55},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[49,48846,48847,48849,48851,48853],{"class":51,"line":9273},[49,48848,4279],{"class":109},[49,48850,48614],{"class":66},[49,48852,27292],{"class":109},[49,48854,48619],{"class":66},[49,48856,48857,48859,48861,48863],{"class":51,"line":9285},[49,48858,4455],{"class":109},[49,48860,48626],{"class":66},[49,48862,27292],{"class":109},[49,48864,48631],{"class":66},[49,48866,48867,48869,48871,48873,48875,48877,48879,48881,48883,48885],{"class":51,"line":9297},[49,48868,3751],{"class":109},[49,48870,48638],{"class":66},[49,48872,48641],{"class":1505},[49,48874,13687],{"class":66},[49,48876,48646],{"class":1505},[49,48878,13687],{"class":66},[49,48880,48651],{"class":1505},[49,48882,13687],{"class":66},[49,48884,48656],{"class":1505},[49,48886,48887],{"class":66},")):\n",[49,48889,48890,48892,48894],{"class":51,"line":9309},[49,48891,46921],{"class":66},[49,48893,1448],{"class":109},[49,48895,48671],{"class":66},[49,48897,48898,48900,48902],{"class":51,"line":10968},[49,48899,48676],{"class":66},[49,48901,1448],{"class":109},[49,48903,48681],{"class":66},[49,48905,48906,48908,48910],{"class":51,"line":10993},[49,48907,48686],{"class":66},[49,48909,1448],{"class":109},[49,48911,48691],{"class":66},[49,48913,48914],{"class":51,"line":11016},[49,48915,48700],{"class":55},[49,48917,48918,48920,48922,48924,48926],{"class":51,"line":11040},[49,48919,48705],{"class":66},[49,48921,1448],{"class":109},[49,48923,48710],{"class":66},[49,48925,1975],{"class":109},[49,48927,48715],{"class":73},[49,48929,48930],{"class":51,"line":11045},[49,48931,48729],{"class":55},[49,48933,48934],{"class":51,"line":11050},[49,48935,48936],{"class":55},"            # print(mean.shape)\n",[49,48938,48939],{"class":51,"line":11055},[49,48940,48724],{"class":55},[49,48942,48943],{"class":51,"line":11064},[49,48944,3654],{"emptyLinePlaceholder":1330},[49,48946,48947,48950],{"class":51,"line":11069},[49,48948,48949],{"class":109},"            try",[49,48951,4993],{"class":66},[49,48953,48954,48957,48959,48962,48964,48967,48969],{"class":51,"line":11075},[49,48955,48956],{"class":66},"                diff ",[49,48958,1448],{"class":109},[49,48960,48961],{"class":66}," (normalized_image_array ",[49,48963,1923],{"class":109},[49,48965,48966],{"class":66}," mean) ",[49,48968,11913],{"class":109},[49,48970,48971],{"class":73}," 2\n",[49,48973,48974,48977,48979,48982,48984,48986,48988,48990,48992,48994],{"class":51,"line":11096},[49,48975,48976],{"class":66},"                sum_squared_diff ",[49,48978,10729],{"class":109},[49,48980,48981],{"class":66}," np.sum(diff, ",[49,48983,48762],{"class":6468},[49,48985,1448],{"class":109},[49,48987,1403],{"class":66},[49,48989,80],{"class":73},[49,48991,13687],{"class":66},[49,48993,159],{"class":73},[49,48995,31745],{"class":66},[49,48997,48998,49001],{"class":51,"line":11102},[49,48999,49000],{"class":109},"            except",[49,49002,4993],{"class":66},[49,49004,49005,49008,49010,49012,49015],{"class":51,"line":11116},[49,49006,49007],{"class":73},"                print",[49,49009,1403],{"class":66},[49,49011,1454],{"class":109},[49,49013,49014],{"class":1505},"\"捕获到自定义异常\"",[49,49016,1409],{"class":66},[49,49018,49019],{"class":51,"line":11122},[49,49020,49021],{"class":55},"            # diff = (normalized_image_array - mean) ** 2\n",[49,49023,49024],{"class":51,"line":11149},[49,49025,49026],{"class":55},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[49,49028,49029],{"class":51,"line":11158},[49,49030,3654],{"emptyLinePlaceholder":1330},[49,49032,49033,49036,49038,49041,49043],{"class":51,"line":11164},[49,49034,49035],{"class":66},"variance ",[49,49037,1448],{"class":109},[49,49039,49040],{"class":66}," sum_squared_diff ",[49,49042,1975],{"class":109},[49,49044,48798],{"class":66},[49,49046,49047],{"class":51,"line":11172},[49,49048,3654],{"emptyLinePlaceholder":1330},[49,49050,49051,49053,49055,49058],{"class":51,"line":11177},[49,49052,31663],{"class":73},[49,49054,1403],{"class":66},[49,49056,49057],{"class":1505},"\"Mean:\"",[49,49059,49060],{"class":66},", mean)\n",[49,49062,49063,49065,49067,49070],{"class":51,"line":17854},[49,49064,31663],{"class":73},[49,49066,1403],{"class":66},[49,49068,49069],{"class":1505},"\"Variance:\"",[49,49071,49072],{"class":66},", variance)\n",[39,49074,49076],{"className":31626,"code":49075,"language":31628,"meta":44,"style":44},"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",[46,49077,49078,49084,49090,49100,49106,49116,49130,49140,49150,49160,49164,49174,49184,49188,49192,49200,49205,49210,49229,49233,49238,49243,49248,49253,49294,49299,49309,49314,49327,49332,49337,49342,49347,49352,49356,49361,49366,49388,49392,49424,49438,49448,49458,49462,49472,49486,49496,49506,49516,49522,49526,49530,49534,49538,49542,49550,49570,49574,49578,49582,49586,49602,49606,49610,49618,49622,49626,49634,49638,49642,49646,49654,49658,49662,49666,49674,49678,49686,49690,49698,49702,49710,49714,49722,49726,49730,49738,49742,49746,49758,49782,49796,49800,49804,49808,49816,49820,49828,49832,49840,49844,49852,49856,49864,49868,49876,49880,49892,49896,49904,49908,49916,49920,49924,49928,49932,49940,49944,49960,49964,49972,49976,49980,49984,49988,49992,49996,50000,50016,50020,50032,50036,50048,50052,50064,50068,50076,50080,50088,50092,50096,50100,50106,50110,50118,50122,50138,50142,50150,50154,50170,50182,50186,50198,50202,50206,50214,50218,50222,50230,50234,50242,50246,50254,50258,50262,50304,50346,50350,50354,50370,50374,50390,50394,50398,50406,50410,50414,50426,50464,50468,50472,50480,50484,50498,50508,50514,50520,50526,50532,50536,50540,50546,50550,50554,50562,50566,50584,50588,50592,50596,50612,50616,50620,50624,50628,50632,50652,50672,50676,50680,50684,50692,50700,50704,50720,50740,50760,50764,50769,50778,50787,50792,50797,50802,50815,50820,50829,50838,50855],{"__ignoreMap":44},[49,49079,49080,49082],{"class":51,"line":52},[49,49081,31640],{"class":109},[49,49083,33070],{"class":66},[49,49085,49086,49088],{"class":51,"line":59},[49,49087,31640],{"class":109},[49,49089,33077],{"class":66},[49,49091,49092,49094,49096,49098],{"class":51,"line":70},[49,49093,31640],{"class":109},[49,49095,33088],{"class":66},[49,49097,32631],{"class":109},[49,49099,33093],{"class":66},[49,49101,49102,49104],{"class":51,"line":86},[49,49103,31640],{"class":109},[49,49105,31643],{"class":66},[49,49107,49108,49110,49112,49114],{"class":51,"line":98},[49,49109,31985],{"class":109},[49,49111,32663],{"class":66},[49,49113,31640],{"class":109},[49,49115,33110],{"class":66},[49,49117,49118,49120,49122,49124,49127],{"class":51,"line":121},[49,49119,31985],{"class":109},[49,49121,32616],{"class":66},[49,49123,31640],{"class":109},[49,49125,49126],{"class":66}," ImageFolder ",[49,49128,49129],{"class":55},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[49,49131,49132,49134,49136,49138],{"class":51,"line":134},[49,49133,31985],{"class":109},[49,49135,32646],{"class":66},[49,49137,31640],{"class":109},[49,49139,32651],{"class":66},[49,49141,49142,49144,49146,49148],{"class":51,"line":1085},[49,49143,31640],{"class":109},[49,49145,32663],{"class":66},[49,49147,32631],{"class":109},[49,49149,32668],{"class":66},[49,49151,49152,49154,49156,49158],{"class":51,"line":2574},[49,49153,31640],{"class":109},[49,49155,32680],{"class":66},[49,49157,32631],{"class":109},[49,49159,32685],{"class":66},[49,49161,49162],{"class":51,"line":2586},[49,49163,33155],{"class":55},[49,49165,49166,49168,49170,49172],{"class":51,"line":2867},[49,49167,31985],{"class":109},[49,49169,33162],{"class":66},[49,49171,31640],{"class":109},[49,49173,44279],{"class":66},[49,49175,49176,49178,49180,49182],{"class":51,"line":2872},[49,49177,31985],{"class":109},[49,49179,31988],{"class":66},[49,49181,31640],{"class":109},[49,49183,31993],{"class":66},[49,49185,49186],{"class":51,"line":2878},[49,49187,3654],{"emptyLinePlaceholder":1330},[49,49189,49190],{"class":51,"line":2883},[49,49191,33190],{"class":55},[49,49193,49194,49196,49198],{"class":51,"line":2897},[49,49195,33195],{"class":109},[49,49197,33198],{"class":62},[49,49199,33201],{"class":66},[49,49201,49202],{"class":51,"line":2902},[49,49203,49204],{"class":55},"    # 导入自己的数据集，并进行数据处理\n",[49,49206,49207],{"class":51,"line":2908},[49,49208,49209],{"class":55},"    # 定义数据集的路径\n",[49,49211,49212,49215,49217,49219,49221,49223,49227],{"class":51,"line":2929},[49,49213,49214],{"class":73},"    ROOT_PATH",[49,49216,1448],{"class":109},[49,49218,2061],{"class":109},[49,49220,1643],{"class":1505},[49,49222,1949],{"class":73},[49,49224,49226],{"class":49225},"sA_wV","\u002Fdata\u002Ftrain",[49,49228,26382],{"class":1505},[49,49230,49231],{"class":51,"line":2934},[49,49232,3654],{"emptyLinePlaceholder":1330},[49,49234,49235],{"class":51,"line":2948},[49,49236,49237],{"class":55},"    # 定义归一化方法\n",[49,49239,49240],{"class":51,"line":2953},[49,49241,49242],{"class":55},"    # 这里需要先计算一下数据集的均值和方差\n",[49,49244,49245],{"class":51,"line":2982},[49,49246,49247],{"class":55},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[49,49249,49250],{"class":51,"line":2987},[49,49251,49252],{"class":55},"    # 第一个参数是均值，第二个参数是方差\n",[49,49254,49255,49258,49260,49263,49266,49268,49271,49273,49276,49279,49282,49284,49287,49289,49292],{"class":51,"line":3004},[49,49256,49257],{"class":66},"    normalize",[49,49259,1448],{"class":109},[49,49261,49262],{"class":66},"transforms.Normalize([",[49,49264,49265],{"class":73},"0.162",[49,49267,1770],{"class":66},[49,49269,49270],{"class":73},"0.151",[49,49272,1770],{"class":66},[49,49274,49275],{"class":73},"0.138",[49,49277,49278],{"class":66},"],[",[49,49280,49281],{"class":73},"0.058",[49,49283,1770],{"class":66},[49,49285,49286],{"class":73},"0.052",[49,49288,1770],{"class":66},[49,49290,49291],{"class":73},"0.048",[49,49293,5911],{"class":66},[49,49295,49296],{"class":51,"line":3009},[49,49297,49298],{"class":55},"    # 定义数据集处理方法变量\n",[49,49300,49301,49304,49306],{"class":51,"line":3014},[49,49302,49303],{"class":66},"    train_transform",[49,49305,1448],{"class":109},[49,49307,49308],{"class":66},"transforms.Compose([\n",[49,49310,49311],{"class":51,"line":3019},[49,49312,49313],{"class":55},"        # 调整图像大小为224*224\n",[49,49315,49316,49319,49321,49323,49325],{"class":51,"line":3033},[49,49317,49318],{"class":66},"        transforms.Resize((",[49,49320,32749],{"class":73},[49,49322,1770],{"class":66},[49,49324,32749],{"class":73},[49,49326,43870],{"class":66},[49,49328,49329],{"class":51,"line":3038},[49,49330,49331],{"class":55},"        # 将图像转换为张量\n",[49,49333,49334],{"class":51,"line":3831},[49,49335,49336],{"class":66},"        transforms.ToTensor(),\n",[49,49338,49339],{"class":51,"line":3845},[49,49340,49341],{"class":66},"        normalize])\n",[49,49343,49344],{"class":51,"line":3853},[49,49345,49346],{"class":55},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[49,49348,49349],{"class":51,"line":3858},[49,49350,49351],{"class":55},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[49,49353,49354],{"class":51,"line":3864},[49,49355,3654],{"emptyLinePlaceholder":1330},[49,49357,49358],{"class":51,"line":3870},[49,49359,49360],{"class":55},"    # 加载数据集\n",[49,49362,49363],{"class":51,"line":3875},[49,49364,49365],{"class":55},"    # 传入数据集路径与处理方法\n",[49,49367,49368,49370,49372,49375,49378,49380,49383,49385],{"class":51,"line":9200},[49,49369,33206],{"class":66},[49,49371,1448],{"class":109},[49,49373,49374],{"class":66},"ImageFolder(",[49,49376,49377],{"class":73},"ROOT_PATH",[49,49379,1770],{"class":66},[49,49381,49382],{"class":6468},"transform",[49,49384,1448],{"class":109},[49,49386,49387],{"class":66},"train_transform)\n",[49,49389,49390],{"class":51,"line":9224},[49,49391,3654],{"emptyLinePlaceholder":1330},[49,49393,49394,49396,49398,49400,49402,49404,49406,49408,49410,49412,49414,49416,49418,49420,49422],{"class":51,"line":9229},[49,49395,33258],{"class":66},[49,49397,1448],{"class":109},[49,49399,33263],{"class":66},[49,49401,33266],{"class":73},[49,49403,1403],{"class":66},[49,49405,33271],{"class":73},[49,49407,1846],{"class":109},[49,49409,8610],{"class":73},[49,49411,33278],{"class":66},[49,49413,33266],{"class":73},[49,49415,1403],{"class":66},[49,49417,33285],{"class":73},[49,49419,1846],{"class":109},[49,49421,8610],{"class":73},[49,49423,33292],{"class":66},[49,49425,49426,49428,49430,49432,49434,49436],{"class":51,"line":9235},[49,49427,33297],{"class":66},[49,49429,1448],{"class":109},[49,49431,33302],{"class":66},[49,49433,32785],{"class":6468},[49,49435,1448],{"class":109},[49,49437,32790],{"class":66},[49,49439,49440,49442,49444,49446],{"class":51,"line":9262},[49,49441,33313],{"class":6468},[49,49443,1448],{"class":109},[49,49445,1590],{"class":73},[49,49447,32714],{"class":66},[49,49449,49450,49452,49454,49456],{"class":51,"line":9267},[49,49451,33325],{"class":6468},[49,49453,1448],{"class":109},[49,49455,32724],{"class":73},[49,49457,32714],{"class":66},[49,49459,49460],{"class":51,"line":9273},[49,49461,33336],{"class":55},[49,49463,49464,49466,49468,49470],{"class":51,"line":9285},[49,49465,33341],{"class":6468},[49,49467,1448],{"class":109},[49,49469,1787],{"class":73},[49,49471,1409],{"class":66},[49,49473,49474,49476,49478,49480,49482,49484],{"class":51,"line":9297},[49,49475,33352],{"class":66},[49,49477,1448],{"class":109},[49,49479,32782],{"class":66},[49,49481,32785],{"class":6468},[49,49483,1448],{"class":109},[49,49485,33363],{"class":66},[49,49487,49488,49490,49492,49494],{"class":51,"line":9309},[49,49489,33368],{"class":6468},[49,49491,1448],{"class":109},[49,49493,1590],{"class":73},[49,49495,32714],{"class":66},[49,49497,49498,49500,49502,49504],{"class":51,"line":10968},[49,49499,33379],{"class":6468},[49,49501,1448],{"class":109},[49,49503,32724],{"class":73},[49,49505,32714],{"class":66},[49,49507,49508,49510,49512,49514],{"class":51,"line":10993},[49,49509,33390],{"class":6468},[49,49511,1448],{"class":109},[49,49513,1787],{"class":73},[49,49515,1409],{"class":66},[49,49517,49518,49520],{"class":51,"line":11016},[49,49519,5344],{"class":109},[49,49521,33403],{"class":66},[49,49523,49524],{"class":51,"line":11040},[49,49525,3654],{"emptyLinePlaceholder":1330},[49,49527,49528],{"class":51,"line":11045},[49,49529,33412],{"class":55},[49,49531,49532],{"class":51,"line":11050},[49,49533,33417],{"class":55},[49,49535,49536],{"class":51,"line":11055},[49,49537,3654],{"emptyLinePlaceholder":1330},[49,49539,49540],{"class":51,"line":11064},[49,49541,33426],{"class":55},[49,49543,49544,49546,49548],{"class":51,"line":11069},[49,49545,33195],{"class":109},[49,49547,33433],{"class":62},[49,49549,33436],{"class":66},[49,49551,49552,49554,49556,49558,49560,49562,49564,49566,49568],{"class":51,"line":11075},[49,49553,32485],{"class":66},[49,49555,1448],{"class":109},[49,49557,31699],{"class":66},[49,49559,32492],{"class":1505},[49,49561,2959],{"class":109},[49,49563,32497],{"class":66},[49,49565,2956],{"class":109},[49,49567,33455],{"class":1505},[49,49569,1409],{"class":66},[49,49571,49572],{"class":51,"line":11096},[49,49573,3654],{"emptyLinePlaceholder":1330},[49,49575,49576],{"class":51,"line":11102},[49,49577,33470],{"class":55},[49,49579,49580],{"class":51,"line":11116},[49,49581,33475],{"class":55},[49,49583,49584],{"class":51,"line":11122},[49,49585,33480],{"class":55},[49,49587,49588,49590,49592,49594,49596,49598,49600],{"class":51,"line":11149},[49,49589,33485],{"class":66},[49,49591,1448],{"class":109},[49,49593,33490],{"class":66},[49,49595,33493],{"class":6468},[49,49597,1448],{"class":109},[49,49599,33498],{"class":73},[49,49601,1409],{"class":66},[49,49603,49604],{"class":51,"line":11158},[49,49605,3654],{"emptyLinePlaceholder":1330},[49,49607,49608],{"class":51,"line":11164},[49,49609,33509],{"class":55},[49,49611,49612,49614,49616],{"class":51,"line":11172},[49,49613,33514],{"class":66},[49,49615,1448],{"class":109},[49,49617,33519],{"class":66},[49,49619,49620],{"class":51,"line":11177},[49,49621,3654],{"emptyLinePlaceholder":1330},[49,49623,49624],{"class":51,"line":17854},[49,49625,33528],{"class":55},[49,49627,49628,49630,49632],{"class":51,"line":17860},[49,49629,32537],{"class":66},[49,49631,1448],{"class":109},[49,49633,33537],{"class":66},[49,49635,49636],{"class":51,"line":17883},[49,49637,33542],{"class":55},[49,49639,49640],{"class":51,"line":17889},[49,49641,33547],{"class":55},[49,49643,49644],{"class":51,"line":17912},[49,49645,33552],{"class":55},[49,49647,49648,49650,49652],{"class":51,"line":17926},[49,49649,33557],{"class":66},[49,49651,1448],{"class":109},[49,49653,33562],{"class":66},[49,49655,49656],{"class":51,"line":17946},[49,49657,3654],{"emptyLinePlaceholder":1330},[49,49659,49660],{"class":51,"line":17952},[49,49661,33575],{"class":55},[49,49663,49664],{"class":51,"line":17963},[49,49665,33580],{"class":55},[49,49667,49668,49670,49672],{"class":51,"line":17986},[49,49669,33585],{"class":66},[49,49671,1448],{"class":109},[49,49673,33590],{"class":73},[49,49675,49676],{"class":51,"line":18008},[49,49677,33595],{"class":55},[49,49679,49680,49682,49684],{"class":51,"line":18013},[49,49681,33600],{"class":66},[49,49683,1448],{"class":109},[49,49685,33605],{"class":66},[49,49687,49688],{"class":51,"line":18019},[49,49689,33610],{"class":55},[49,49691,49692,49694,49696],{"class":51,"line":18033},[49,49693,33615],{"class":66},[49,49695,1448],{"class":109},[49,49697,33605],{"class":66},[49,49699,49700],{"class":51,"line":18046},[49,49701,33624],{"class":55},[49,49703,49704,49706,49708],{"class":51,"line":18051},[49,49705,33629],{"class":66},[49,49707,1448],{"class":109},[49,49709,33605],{"class":66},[49,49711,49712],{"class":51,"line":18065},[49,49713,33638],{"class":55},[49,49715,49716,49718,49720],{"class":51,"line":18070},[49,49717,33643],{"class":66},[49,49719,1448],{"class":109},[49,49721,33605],{"class":66},[49,49723,49724],{"class":51,"line":18076},[49,49725,3654],{"emptyLinePlaceholder":1330},[49,49727,49728],{"class":51,"line":18081},[49,49729,33656],{"class":55},[49,49731,49732,49734,49736],{"class":51,"line":18095},[49,49733,33661],{"class":66},[49,49735,1448],{"class":109},[49,49737,33666],{"class":66},[49,49739,49740],{"class":51,"line":18100},[49,49741,3654],{"emptyLinePlaceholder":1330},[49,49743,49744],{"class":51,"line":18105},[49,49745,33679],{"class":55},[49,49747,49748,49750,49752,49754,49756],{"class":51,"line":18119},[49,49749,4455],{"class":109},[49,49751,33686],{"class":66},[49,49753,27292],{"class":109},[49,49755,33691],{"class":73},[49,49757,33694],{"class":66},[49,49759,49760,49762,49764,49766,49768,49770,49772,49774,49776,49778,49780],{"class":51,"line":18131},[49,49761,33699],{"class":73},[49,49763,1403],{"class":66},[49,49765,33704],{"class":1505},[49,49767,33707],{"class":73},[49,49769,1975],{"class":1505},[49,49771,33707],{"class":73},[49,49773,1643],{"class":1505},[49,49775,33716],{"class":66},[49,49777,1923],{"class":109},[49,49779,159],{"class":73},[49,49781,31745],{"class":66},[49,49783,49784,49786,49788,49790,49792,49794],{"class":51,"line":18136},[49,49785,33699],{"class":73},[49,49787,1403],{"class":66},[49,49789,33731],{"class":1505},[49,49791,1846],{"class":109},[49,49793,106],{"class":73},[49,49795,1409],{"class":66},[49,49797,49798],{"class":51,"line":18149},[49,49799,3654],{"emptyLinePlaceholder":1330},[49,49801,49802],{"class":51,"line":18154},[49,49803,33746],{"class":55},[49,49805,49806],{"class":51,"line":18159},[49,49807,33751],{"class":55},[49,49809,49810,49812,49814],{"class":51,"line":18164},[49,49811,33756],{"class":66},[49,49813,1448],{"class":109},[49,49815,33590],{"class":73},[49,49817,49818],{"class":51,"line":18177},[49,49819,33765],{"class":55},[49,49821,49822,49824,49826],{"class":51,"line":18182},[49,49823,33770],{"class":66},[49,49825,1448],{"class":109},[49,49827,4339],{"class":73},[49,49829,49830],{"class":51,"line":33881},[49,49831,33779],{"class":55},[49,49833,49834,49836,49838],{"class":51,"line":33887},[49,49835,33784],{"class":66},[49,49837,1448],{"class":109},[49,49839,33590],{"class":73},[49,49841,49842],{"class":51,"line":33893},[49,49843,33793],{"class":55},[49,49845,49846,49848,49850],{"class":51,"line":33899},[49,49847,33798],{"class":66},[49,49849,1448],{"class":109},[49,49851,4339],{"class":73},[49,49853,49854],{"class":51,"line":33905},[49,49855,33807],{"class":55},[49,49857,49858,49860,49862],{"class":51,"line":33916},[49,49859,33812],{"class":66},[49,49861,1448],{"class":109},[49,49863,4339],{"class":73},[49,49865,49866],{"class":51,"line":33922},[49,49867,33821],{"class":55},[49,49869,49870,49872,49874],{"class":51,"line":33942},[49,49871,33826],{"class":66},[49,49873,1448],{"class":109},[49,49875,4339],{"class":73},[49,49877,49878],{"class":51,"line":33948},[49,49879,33835],{"class":55},[49,49881,49882,49884,49886,49888,49890],{"class":51,"line":33959},[49,49883,4657],{"class":109},[49,49885,32849],{"class":66},[49,49887,27292],{"class":109},[49,49889,32854],{"class":73},[49,49891,33848],{"class":66},[49,49893,49894],{"class":51,"line":33965},[49,49895,33853],{"class":55},[49,49897,49898,49900,49902],{"class":51,"line":33971},[49,49899,33858],{"class":66},[49,49901,1448],{"class":109},[49,49903,33863],{"class":66},[49,49905,49906],{"class":51,"line":33977},[49,49907,33868],{"class":55},[49,49909,49910,49912,49914],{"class":51,"line":33983},[49,49911,33873],{"class":66},[49,49913,1448],{"class":109},[49,49915,33878],{"class":66},[49,49917,49918],{"class":51,"line":33989},[49,49919,33884],{"class":55},[49,49921,49922],{"class":51,"line":33995},[49,49923,33890],{"class":66},[49,49925,49926],{"class":51,"line":34001},[49,49927,33896],{"class":55},[49,49929,49930],{"class":51,"line":34021},[49,49931,33902],{"class":55},[49,49933,49934,49936,49938],{"class":51,"line":34027},[49,49935,33908],{"class":66},[49,49937,1448],{"class":109},[49,49939,33913],{"class":66},[49,49941,49942],{"class":51,"line":34043},[49,49943,33919],{"class":55},[49,49945,49946,49948,49950,49952,49954,49956,49958],{"class":51,"line":34049},[49,49947,33925],{"class":66},[49,49949,1448],{"class":109},[49,49951,33930],{"class":66},[49,49953,33933],{"class":6468},[49,49955,1448],{"class":109},[49,49957,159],{"class":73},[49,49959,1409],{"class":66},[49,49961,49962],{"class":51,"line":34063},[49,49963,33945],{"class":55},[49,49965,49966,49968,49970],{"class":51,"line":34069},[49,49967,33951],{"class":66},[49,49969,1448],{"class":109},[49,49971,33956],{"class":66},[49,49973,49974],{"class":51,"line":34084},[49,49975,33962],{"class":55},[49,49977,49978],{"class":51,"line":34090},[49,49979,33968],{"class":66},[49,49981,49982],{"class":51,"line":34099},[49,49983,33974],{"class":55},[49,49985,49986],{"class":51,"line":34105},[49,49987,33980],{"class":66},[49,49989,49990],{"class":51,"line":34114},[49,49991,33986],{"class":55},[49,49993,49994],{"class":51,"line":34120},[49,49995,33992],{"class":66},[49,49997,49998],{"class":51,"line":34126},[49,49999,33998],{"class":55},[49,50001,50002,50004,50006,50008,50010,50012,50014],{"class":51,"line":34135},[49,50003,34004],{"class":66},[49,50005,10729],{"class":109},[49,50007,34009],{"class":66},[49,50009,1846],{"class":109},[49,50011,34014],{"class":66},[49,50013,80],{"class":73},[49,50015,1409],{"class":66},[49,50017,50018],{"class":51,"line":34141},[49,50019,34024],{"class":55},[49,50021,50022,50024,50026,50028,50030],{"class":51,"line":34152},[49,50023,34030],{"class":66},[49,50025,10729],{"class":109},[49,50027,34035],{"class":66},[49,50029,4203],{"class":109},[49,50031,34040],{"class":66},[49,50033,50034],{"class":51,"line":34158},[49,50035,34046],{"class":55},[49,50037,50038,50040,50042,50044,50046],{"class":51,"line":34177},[49,50039,34052],{"class":66},[49,50041,10729],{"class":109},[49,50043,34014],{"class":66},[49,50045,80],{"class":73},[49,50047,1409],{"class":66},[49,50049,50050],{"class":51,"line":34183},[49,50051,34066],{"class":55},[49,50053,50054,50056,50058,50060,50062],{"class":51,"line":34194},[49,50055,4657],{"class":109},[49,50057,34074],{"class":66},[49,50059,27292],{"class":109},[49,50061,32854],{"class":73},[49,50063,34081],{"class":66},[49,50065,50066],{"class":51,"line":34200},[49,50067,34087],{"class":55},[49,50069,50070,50072,50074],{"class":51,"line":34220},[49,50071,33858],{"class":66},[49,50073,1448],{"class":109},[49,50075,33863],{"class":66},[49,50077,50078],{"class":51,"line":34236},[49,50079,34102],{"class":55},[49,50081,50082,50084,50086],{"class":51,"line":34242},[49,50083,33873],{"class":66},[49,50085,1448],{"class":109},[49,50087,33878],{"class":66},[49,50089,50090],{"class":51,"line":34256},[49,50091,34117],{"class":55},[49,50093,50094],{"class":51,"line":34262},[49,50095,34123],{"class":66},[49,50097,50098],{"class":51,"line":34268},[49,50099,37604],{"class":55},[49,50101,50102,50104],{"class":51,"line":34279},[49,50103,34129],{"class":109},[49,50105,34132],{"class":66},[49,50107,50108],{"class":51,"line":34285},[49,50109,34138],{"class":55},[49,50111,50112,50114,50116],{"class":51,"line":34291},[49,50113,37619],{"class":66},[49,50115,1448],{"class":109},[49,50117,33913],{"class":66},[49,50119,50120],{"class":51,"line":34301},[49,50121,34155],{"class":55},[49,50123,50124,50126,50128,50130,50132,50134,50136],{"class":51,"line":34307},[49,50125,37632],{"class":66},[49,50127,1448],{"class":109},[49,50129,33930],{"class":66},[49,50131,33933],{"class":6468},[49,50133,1448],{"class":109},[49,50135,159],{"class":73},[49,50137,1409],{"class":66},[49,50139,50140],{"class":51,"line":34318},[49,50141,34180],{"class":55},[49,50143,50144,50146,50148],{"class":51,"line":34324},[49,50145,37653],{"class":66},[49,50147,1448],{"class":109},[49,50149,33956],{"class":66},[49,50151,50152],{"class":51,"line":34334},[49,50153,34197],{"class":55},[49,50155,50156,50158,50160,50162,50164,50166,50168],{"class":51,"line":34339},[49,50157,37666],{"class":66},[49,50159,10729],{"class":109},[49,50161,37671],{"class":66},[49,50163,1846],{"class":109},[49,50165,34014],{"class":66},[49,50167,80],{"class":73},[49,50169,1409],{"class":66},[49,50171,50172,50174,50176,50178,50180],{"class":51,"line":34345},[49,50173,37684],{"class":66},[49,50175,10729],{"class":109},[49,50177,34035],{"class":66},[49,50179,4203],{"class":109},[49,50181,34040],{"class":66},[49,50183,50184],{"class":51,"line":34394},[49,50185,37697],{"class":55},[49,50187,50188,50190,50192,50194,50196],{"class":51,"line":34441},[49,50189,37702],{"class":66},[49,50191,10729],{"class":109},[49,50193,34014],{"class":66},[49,50195,80],{"class":73},[49,50197,1409],{"class":66},[49,50199,50200],{"class":51,"line":34446},[49,50201,34259],{"class":55},[49,50203,50204],{"class":51,"line":34452},[49,50205,34265],{"class":55},[49,50207,50208,50210,50212],{"class":51,"line":34471},[49,50209,34271],{"class":66},[49,50211,1975],{"class":109},[49,50213,34276],{"class":66},[49,50215,50216],{"class":51,"line":34477},[49,50217,34282],{"class":55},[49,50219,50220],{"class":51,"line":34497},[49,50221,34288],{"class":55},[49,50223,50224,50226,50228],{"class":51,"line":34503},[49,50225,34294],{"class":66},[49,50227,1975],{"class":109},[49,50229,34276],{"class":66},[49,50231,50232],{"class":51,"line":34509},[49,50233,34304],{"class":55},[49,50235,50236,50238,50240],{"class":51,"line":34519},[49,50237,34310],{"class":66},[49,50239,1975],{"class":109},[49,50241,34315],{"class":66},[49,50243,50244],{"class":51,"line":34524},[49,50245,34321],{"class":55},[49,50247,50248,50250,50252],{"class":51,"line":34530},[49,50249,34327],{"class":66},[49,50251,1975],{"class":109},[49,50253,34315],{"class":66},[49,50255,50256],{"class":51,"line":34546},[49,50257,3654],{"emptyLinePlaceholder":1330},[49,50259,50260],{"class":51,"line":34591},[49,50261,34342],{"class":55},[49,50263,50264,50266,50268,50270,50272,50274,50276,50278,50280,50282,50284,50286,50288,50290,50292,50294,50296,50298,50300,50302],{"class":51,"line":34597},[49,50265,33699],{"class":73},[49,50267,1403],{"class":66},[49,50269,4846],{"class":1505},[49,50271,33707],{"class":73},[49,50273,34356],{"class":1505},[49,50275,2286],{"class":73},[49,50277,34361],{"class":109},[49,50279,620],{"class":73},[49,50281,34366],{"class":1505},[49,50283,2286],{"class":73},[49,50285,34361],{"class":109},[49,50287,620],{"class":73},[49,50289,4846],{"class":1505},[49,50291,34377],{"class":66},[49,50293,1923],{"class":109},[49,50295,159],{"class":73},[49,50297,34384],{"class":66},[49,50299,1923],{"class":109},[49,50301,159],{"class":73},[49,50303,34391],{"class":66},[49,50305,50306,50308,50310,50312,50314,50316,50318,50320,50322,50324,50326,50328,50330,50332,50334,50336,50338,50340,50342,50344],{"class":51,"line":34603},[49,50307,33699],{"class":73},[49,50309,1403],{"class":66},[49,50311,4846],{"class":1505},[49,50313,33707],{"class":73},[49,50315,34405],{"class":1505},[49,50317,2286],{"class":73},[49,50319,34361],{"class":109},[49,50321,620],{"class":73},[49,50323,34414],{"class":1505},[49,50325,2286],{"class":73},[49,50327,34361],{"class":109},[49,50329,620],{"class":73},[49,50331,4846],{"class":1505},[49,50333,34425],{"class":66},[49,50335,1923],{"class":109},[49,50337,159],{"class":73},[49,50339,34432],{"class":66},[49,50341,1923],{"class":109},[49,50343,159],{"class":73},[49,50345,34391],{"class":66},[49,50347,50348],{"class":51,"line":34609},[49,50349,3654],{"emptyLinePlaceholder":1330},[49,50351,50352],{"class":51,"line":34620},[49,50353,34449],{"class":55},[49,50355,50356,50358,50360,50362,50364,50366,50368],{"class":51,"line":34626},[49,50357,3751],{"class":109},[49,50359,34457],{"class":66},[49,50361,1923],{"class":109},[49,50363,159],{"class":73},[49,50365,2330],{"class":66},[49,50367,2349],{"class":109},[49,50369,34468],{"class":66},[49,50371,50372],{"class":51,"line":34632},[49,50373,34474],{"class":55},[49,50375,50376,50378,50380,50382,50384,50386,50388],{"class":51,"line":34638},[49,50377,34480],{"class":66},[49,50379,1442],{"class":73},[49,50381,1448],{"class":109},[49,50383,34487],{"class":66},[49,50385,1923],{"class":109},[49,50387,159],{"class":73},[49,50389,34494],{"class":66},[49,50391,50392],{"class":51,"line":34656},[49,50393,34500],{"class":55},[49,50395,50396],{"class":51,"line":34670},[49,50397,34506],{"class":55},[49,50399,50400,50402,50404],{"class":51,"line":34679},[49,50401,34512],{"class":66},[49,50403,1448],{"class":109},[49,50405,33562],{"class":66},[49,50407,50408],{"class":51,"line":34688},[49,50409,3654],{"emptyLinePlaceholder":1330},[49,50411,50412],{"class":51,"line":34697},[49,50413,34527],{"class":55},[49,50415,50416,50418,50420,50422,50424],{"class":51,"line":34706},[49,50417,34533],{"class":66},[49,50419,1448],{"class":109},[49,50421,34538],{"class":66},[49,50423,1923],{"class":109},[49,50425,34543],{"class":66},[49,50427,50428,50430,50432,50434,50436,50438,50440,50442,50444,50446,50448,50450,50452,50454,50456,50458,50460,50462],{"class":51,"line":34712},[49,50429,33699],{"class":73},[49,50431,1403],{"class":66},[49,50433,34553],{"class":1505},[49,50435,2286],{"class":73},[49,50437,34558],{"class":109},[49,50439,620],{"class":73},[49,50441,1935],{"class":1505},[49,50443,2286],{"class":73},[49,50445,34558],{"class":109},[49,50447,620],{"class":73},[49,50449,34571],{"class":1505},[49,50451,34574],{"class":66},[49,50453,34577],{"class":109},[49,50455,2297],{"class":73},[49,50457,34582],{"class":66},[49,50459,1720],{"class":109},[49,50461,2297],{"class":73},[49,50463,31745],{"class":66},[49,50465,50466],{"class":51,"line":34718},[49,50467,37981],{"class":55},[49,50469,50470],{"class":51,"line":34726},[49,50471,37986],{"class":55},[49,50473,50474,50476,50478],{"class":51,"line":34731},[49,50475,37991],{"class":66},[49,50477,34615],{"class":1505},[49,50479,1409],{"class":66},[49,50481,50482],{"class":51,"line":34737},[49,50483,34635],{"class":55},[49,50485,50486,50488,50490,50492,50494,50496],{"class":51,"line":34748},[49,50487,34641],{"class":66},[49,50489,1448],{"class":109},[49,50491,34646],{"class":66},[49,50493,34649],{"class":6468},[49,50495,1448],{"class":109},[49,50497,2802],{"class":66},[49,50499,50500,50502,50504,50506],{"class":51,"line":34754},[49,50501,34659],{"class":1505},[49,50503,2249],{"class":66},[49,50505,34664],{"class":73},[49,50507,34667],{"class":66},[49,50509,50510,50512],{"class":51,"line":34774},[49,50511,34673],{"class":1505},[49,50513,34676],{"class":66},[49,50515,50516,50518],{"class":51,"line":34780},[49,50517,34682],{"class":1505},[49,50519,34685],{"class":66},[49,50521,50522,50524],{"class":51,"line":34786},[49,50523,34691],{"class":1505},[49,50525,34694],{"class":66},[49,50527,50528,50530],{"class":51,"line":34792},[49,50529,34700],{"class":1505},[49,50531,34703],{"class":66},[49,50533,50534],{"class":51,"line":34809},[49,50535,34709],{"class":66},[49,50537,50538],{"class":51,"line":34815},[49,50539,34715],{"class":55},[49,50541,50542,50544],{"class":51,"line":34821},[49,50543,5344],{"class":109},[49,50545,34723],{"class":66},[49,50547,50548],{"class":51,"line":34827},[49,50549,3654],{"emptyLinePlaceholder":1330},[49,50551,50552],{"class":51,"line":34833},[49,50553,34734],{"class":55},[49,50555,50556,50558,50560],{"class":51,"line":34839},[49,50557,33195],{"class":109},[49,50559,34742],{"class":62},[49,50561,34745],{"class":66},[49,50563,50564],{"class":51,"line":34866},[49,50565,34751],{"class":55},[49,50567,50568,50570,50572,50574,50576,50578,50580,50582],{"class":51,"line":34890},[49,50569,34757],{"class":66},[49,50571,32941],{"class":6468},[49,50573,1448],{"class":109},[49,50575,1403],{"class":66},[49,50577,1889],{"class":73},[49,50579,1770],{"class":66},[49,50581,1685],{"class":73},[49,50583,31745],{"class":66},[49,50585,50586],{"class":51,"line":34896},[49,50587,34777],{"class":55},[49,50589,50590],{"class":51,"line":34902},[49,50591,34783],{"class":55},[49,50593,50594],{"class":51,"line":34908},[49,50595,34789],{"class":55},[49,50597,50598,50600,50602,50604,50606,50608,50610],{"class":51,"line":34919},[49,50599,32975],{"class":66},[49,50601,159],{"class":73},[49,50603,1770],{"class":66},[49,50605,1478],{"class":73},[49,50607,1770],{"class":66},[49,50609,159],{"class":73},[49,50611,1409],{"class":66},[49,50613,50614],{"class":51,"line":34930},[49,50615,34812],{"class":55},[49,50617,50618],{"class":51,"line":34936},[49,50619,34818],{"class":55},[49,50621,50622],{"class":51,"line":34953},[49,50623,34824],{"class":55},[49,50625,50626],{"class":51,"line":34976},[49,50627,34830],{"class":55},[49,50629,50630],{"class":51,"line":34999},[49,50631,34836],{"class":55},[49,50633,50634,50636,50638,50640,50642,50644,50646,50648,50650],{"class":51,"line":35005},[49,50635,34842],{"class":66},[49,50637,34845],{"class":1505},[49,50639,34848],{"class":66},[49,50641,34851],{"class":1505},[49,50643,1770],{"class":66},[49,50645,34856],{"class":6468},[49,50647,1448],{"class":109},[49,50649,34861],{"class":1505},[49,50651,1409],{"class":66},[49,50653,50654,50656,50658,50660,50662,50664,50666,50668,50670],{"class":51,"line":35010},[49,50655,34842],{"class":66},[49,50657,34845],{"class":1505},[49,50659,34873],{"class":66},[49,50661,34876],{"class":1505},[49,50663,1770],{"class":66},[49,50665,34856],{"class":6468},[49,50667,1448],{"class":109},[49,50669,34885],{"class":1505},[49,50671,1409],{"class":66},[49,50673,50674],{"class":51,"line":35019},[49,50675,34893],{"class":55},[49,50677,50678],{"class":51,"line":35029},[49,50679,34899],{"class":66},[49,50681,50682],{"class":51,"line":35035},[49,50683,34905],{"class":55},[49,50685,50686,50688,50690],{"class":51,"line":35040},[49,50687,34911],{"class":66},[49,50689,34914],{"class":1505},[49,50691,1409],{"class":66},[49,50693,50694,50696,50698],{"class":51,"line":35046},[49,50695,34922],{"class":66},[49,50697,34925],{"class":1505},[49,50699,1409],{"class":66},[49,50701,50702],{"class":51,"line":35059},[49,50703,34933],{"class":55},[49,50705,50706,50708,50710,50712,50714,50716,50718],{"class":51,"line":35065},[49,50707,32975],{"class":66},[49,50709,159],{"class":73},[49,50711,1770],{"class":66},[49,50713,1478],{"class":73},[49,50715,1770],{"class":66},[49,50717,1478],{"class":73},[49,50719,1409],{"class":66},[49,50721,50722,50724,50726,50728,50730,50732,50734,50736,50738],{"class":51,"line":35076},[49,50723,34842],{"class":66},[49,50725,34845],{"class":1505},[49,50727,34960],{"class":66},[49,50729,34851],{"class":1505},[49,50731,1770],{"class":66},[49,50733,34856],{"class":6468},[49,50735,1448],{"class":109},[49,50737,34971],{"class":1505},[49,50739,1409],{"class":66},[49,50741,50742,50744,50746,50748,50750,50752,50754,50756,50758],{"class":51,"line":35087},[49,50743,34842],{"class":66},[49,50745,34845],{"class":1505},[49,50747,34983],{"class":66},[49,50749,34876],{"class":1505},[49,50751,1770],{"class":66},[49,50753,34856],{"class":6468},[49,50755,1448],{"class":109},[49,50757,34994],{"class":1505},[49,50759,1409],{"class":66},[49,50761,50762],{"class":51,"line":35106},[49,50763,35002],{"class":55},[49,50765,50767],{"class":51,"line":50766},219,[49,50768,34899],{"class":66},[49,50770,50772,50774,50776],{"class":51,"line":50771},220,[49,50773,34911],{"class":66},[49,50775,34845],{"class":1505},[49,50777,1409],{"class":66},[49,50779,50781,50783,50785],{"class":51,"line":50780},221,[49,50782,34922],{"class":66},[49,50784,35024],{"class":1505},[49,50786,1409],{"class":66},[49,50788,50790],{"class":51,"line":50789},222,[49,50791,35032],{"class":66},[49,50793,50795],{"class":51,"line":50794},223,[49,50796,3654],{"emptyLinePlaceholder":1330},[49,50798,50800],{"class":51,"line":50799},224,[49,50801,35043],{"class":55},[49,50803,50805,50807,50809,50811,50813],{"class":51,"line":50804},225,[49,50806,2787],{"class":109},[49,50808,32468],{"class":73},[49,50810,4203],{"class":109},[49,50812,32473],{"class":1505},[49,50814,4993],{"class":66},[49,50816,50818],{"class":51,"line":50817},226,[49,50819,35062],{"class":55},[49,50821,50823,50825,50827],{"class":51,"line":50822},227,[49,50824,45794],{"class":66},[49,50826,1448],{"class":109},[49,50828,45799],{"class":66},[49,50830,50832,50834,50836],{"class":51,"line":50831},228,[49,50833,35079],{"class":66},[49,50835,1448],{"class":109},[49,50837,35084],{"class":66},[49,50839,50841,50843,50845,50847,50849,50851,50853],{"class":51,"line":50840},229,[49,50842,34641],{"class":66},[49,50844,1448],{"class":109},[49,50846,45816],{"class":66},[49,50848,35097],{"class":6468},[49,50850,1448],{"class":109},[49,50852,2297],{"class":73},[49,50854,1409],{"class":66},[49,50856,50858],{"class":51,"line":50857},230,[49,50859,35109],{"class":66},[525,50861,50863],{"id":50862},"_242测试代码","2.4.2.测试代码",[19,50865,50866],{},"使用测试集进行测试与推理",[39,50868,50870],{"className":31626,"code":50869,"language":31628,"meta":44,"style":44},"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",[46,50871,50872,50878,50888,50898,50909,50919,50923,50927,50935,50940,50944,50961,50965,50969,50973,50977,50981,51013,51017,51025,51029,51041,51045,51049,51053,51057,51061,51065,51069,51073,51091,51105,51109,51119,51129,51139,51145,51149,51153,51161,51165,51181,51189,51193,51197,51205,51213,51217,51221,51225,51229,51235,51239,51249,51257,51265,51269,51273,51277,51285,51289,51305,51309,51313,51317,51329,51333,51345,51349,51353,51365,51369,51379,51383,51387,51399,51403,51411,51415,51419,51427,51431,51439,51443,51447,51451,51455,51459,51475,51483,51487,51491,51509,51515,51519,51529,51537,51545,51549,51553,51557,51561,51569,51573,51589,51593,51601,51609],{"__ignoreMap":44},[49,50873,50874,50876],{"class":51,"line":52},[49,50875,31640],{"class":109},[49,50877,31643],{"class":66},[49,50879,50880,50882,50884,50886],{"class":51,"line":59},[49,50881,31640],{"class":109},[49,50883,32663],{"class":66},[49,50885,32631],{"class":109},[49,50887,32668],{"class":66},[49,50889,50890,50892,50894,50896],{"class":51,"line":70},[49,50891,31985],{"class":109},[49,50893,32646],{"class":66},[49,50895,31640],{"class":109},[49,50897,32651],{"class":66},[49,50899,50900,50902,50904,50906],{"class":51,"line":86},[49,50901,31985],{"class":109},[49,50903,32616],{"class":66},[49,50905,31640],{"class":109},[49,50907,50908],{"class":66}," ImageFolder\n",[49,50910,50911,50913,50915,50917],{"class":51,"line":98},[49,50912,31985],{"class":109},[49,50914,33162],{"class":66},[49,50916,31640],{"class":109},[49,50918,45888],{"class":66},[49,50920,50921],{"class":51,"line":121},[49,50922,3654],{"emptyLinePlaceholder":1330},[49,50924,50925],{"class":51,"line":134},[49,50926,35199],{"class":55},[49,50928,50929,50931,50933],{"class":51,"line":1085},[49,50930,33195],{"class":109},[49,50932,35206],{"class":62},[49,50934,33201],{"class":66},[49,50936,50937],{"class":51,"line":2574},[49,50938,50939],{"class":55},"   # 导入自己的数据集，并进行数据处理\n",[49,50941,50942],{"class":51,"line":2586},[49,50943,49209],{"class":55},[49,50945,50946,50948,50950,50952,50954,50956,50959],{"class":51,"line":2867},[49,50947,49214],{"class":73},[49,50949,1448],{"class":109},[49,50951,2061],{"class":109},[49,50953,1643],{"class":1505},[49,50955,1949],{"class":73},[49,50957,50958],{"class":49225},"\u002Fdata\u002Ftest",[49,50960,26382],{"class":1505},[49,50962,50963],{"class":51,"line":2872},[49,50964,3654],{"emptyLinePlaceholder":1330},[49,50966,50967],{"class":51,"line":2878},[49,50968,49237],{"class":55},[49,50970,50971],{"class":51,"line":2883},[49,50972,49242],{"class":55},[49,50974,50975],{"class":51,"line":2897},[49,50976,49247],{"class":55},[49,50978,50979],{"class":51,"line":2902},[49,50980,49252],{"class":55},[49,50982,50983,50985,50987,50989,50991,50993,50995,50997,50999,51001,51003,51005,51007,51009,51011],{"class":51,"line":2908},[49,50984,49257],{"class":66},[49,50986,1448],{"class":109},[49,50988,49262],{"class":66},[49,50990,49265],{"class":73},[49,50992,1770],{"class":66},[49,50994,49270],{"class":73},[49,50996,1770],{"class":66},[49,50998,49275],{"class":73},[49,51000,49278],{"class":66},[49,51002,49281],{"class":73},[49,51004,1770],{"class":66},[49,51006,49286],{"class":73},[49,51008,1770],{"class":66},[49,51010,49291],{"class":73},[49,51012,5911],{"class":66},[49,51014,51015],{"class":51,"line":2929},[49,51016,49298],{"class":55},[49,51018,51019,51021,51023],{"class":51,"line":2934},[49,51020,49303],{"class":66},[49,51022,1448],{"class":109},[49,51024,49308],{"class":66},[49,51026,51027],{"class":51,"line":2948},[49,51028,49313],{"class":55},[49,51030,51031,51033,51035,51037,51039],{"class":51,"line":2953},[49,51032,49318],{"class":66},[49,51034,32749],{"class":73},[49,51036,1770],{"class":66},[49,51038,32749],{"class":73},[49,51040,43870],{"class":66},[49,51042,51043],{"class":51,"line":2982},[49,51044,49331],{"class":55},[49,51046,51047],{"class":51,"line":2987},[49,51048,49336],{"class":66},[49,51050,51051],{"class":51,"line":3004},[49,51052,49341],{"class":66},[49,51054,51055],{"class":51,"line":3009},[49,51056,49346],{"class":55},[49,51058,51059],{"class":51,"line":3014},[49,51060,49351],{"class":55},[49,51062,51063],{"class":51,"line":3019},[49,51064,3654],{"emptyLinePlaceholder":1330},[49,51066,51067],{"class":51,"line":3033},[49,51068,49360],{"class":55},[49,51070,51071],{"class":51,"line":3038},[49,51072,49365],{"class":55},[49,51074,51075,51077,51079,51081,51083,51085,51087,51089],{"class":51,"line":3831},[49,51076,35213],{"class":66},[49,51078,1448],{"class":109},[49,51080,49374],{"class":66},[49,51082,49377],{"class":73},[49,51084,1770],{"class":66},[49,51086,49382],{"class":6468},[49,51088,1448],{"class":109},[49,51090,49387],{"class":66},[49,51092,51093,51095,51097,51099,51101,51103],{"class":51,"line":3845},[49,51094,35270],{"class":66},[49,51096,1448],{"class":109},[49,51098,32782],{"class":66},[49,51100,32785],{"class":6468},[49,51102,1448],{"class":109},[49,51104,35281],{"class":66},[49,51106,51107],{"class":51,"line":3853},[49,51108,35286],{"class":55},[49,51110,51111,51113,51115,51117],{"class":51,"line":3858},[49,51112,35291],{"class":6468},[49,51114,1448],{"class":109},[49,51116,159],{"class":73},[49,51118,32714],{"class":66},[49,51120,51121,51123,51125,51127],{"class":51,"line":3864},[49,51122,35302],{"class":6468},[49,51124,1448],{"class":109},[49,51126,32724],{"class":73},[49,51128,32714],{"class":66},[49,51130,51131,51133,51135,51137],{"class":51,"line":3870},[49,51132,35313],{"class":6468},[49,51134,1448],{"class":109},[49,51136,80],{"class":73},[49,51138,1409],{"class":66},[49,51140,51141,51143],{"class":51,"line":3875},[49,51142,5344],{"class":109},[49,51144,35326],{"class":66},[49,51146,51147],{"class":51,"line":9200},[49,51148,3654],{"emptyLinePlaceholder":1330},[49,51150,51151],{"class":51,"line":9224},[49,51152,35335],{"class":55},[49,51154,51155,51157,51159],{"class":51,"line":9229},[49,51156,33195],{"class":109},[49,51158,35342],{"class":62},[49,51160,35345],{"class":66},[49,51162,51163],{"class":51,"line":9235},[49,51164,35350],{"class":55},[49,51166,51167,51169,51171,51173,51175,51177,51179],{"class":51,"line":9262},[49,51168,32485],{"class":66},[49,51170,1448],{"class":109},[49,51172,32492],{"class":1505},[49,51174,2959],{"class":109},[49,51176,32497],{"class":66},[49,51178,2956],{"class":109},[49,51180,35367],{"class":1505},[49,51182,51183,51185,51187],{"class":51,"line":9267},[49,51184,32537],{"class":66},[49,51186,1448],{"class":109},[49,51188,33537],{"class":66},[49,51190,51191],{"class":51,"line":9273},[49,51192,3654],{"emptyLinePlaceholder":1330},[49,51194,51195],{"class":51,"line":9285},[49,51196,35384],{"class":55},[49,51198,51199,51201,51203],{"class":51,"line":9297},[49,51200,35389],{"class":66},[49,51202,1448],{"class":109},[49,51204,33590],{"class":73},[49,51206,51207,51209,51211],{"class":51,"line":9309},[49,51208,35398],{"class":66},[49,51210,1448],{"class":109},[49,51212,4339],{"class":73},[49,51214,51215],{"class":51,"line":10968},[49,51216,3654],{"emptyLinePlaceholder":1330},[49,51218,51219],{"class":51,"line":10993},[49,51220,35411],{"class":55},[49,51222,51223],{"class":51,"line":11016},[49,51224,35416],{"class":55},[49,51226,51227],{"class":51,"line":11040},[49,51228,35421],{"class":55},[49,51230,51231,51233],{"class":51,"line":11045},[49,51232,35426],{"class":109},[49,51234,34132],{"class":66},[49,51236,51237],{"class":51,"line":11050},[49,51238,35433],{"class":55},[49,51240,51241,51243,51245,51247],{"class":51,"line":11055},[49,51242,4657],{"class":109},[49,51244,35440],{"class":66},[49,51246,27292],{"class":109},[49,51248,35445],{"class":66},[49,51250,51251,51253,51255],{"class":51,"line":11064},[49,51252,35450],{"class":66},[49,51254,1448],{"class":109},[49,51256,35455],{"class":66},[49,51258,51259,51261,51263],{"class":51,"line":11069},[49,51260,35460],{"class":66},[49,51262,1448],{"class":109},[49,51264,35465],{"class":66},[49,51266,51267],{"class":51,"line":11075},[49,51268,35470],{"class":55},[49,51270,51271],{"class":51,"line":11096},[49,51272,34123],{"class":66},[49,51274,51275],{"class":51,"line":11102},[49,51276,35479],{"class":55},[49,51278,51279,51281,51283],{"class":51,"line":11116},[49,51280,33908],{"class":66},[49,51282,1448],{"class":109},[49,51284,35488],{"class":66},[49,51286,51287],{"class":51,"line":11122},[49,51288,35493],{"class":55},[49,51290,51291,51293,51295,51297,51299,51301,51303],{"class":51,"line":11149},[49,51292,33925],{"class":66},[49,51294,1448],{"class":109},[49,51296,33930],{"class":66},[49,51298,33933],{"class":6468},[49,51300,1448],{"class":109},[49,51302,159],{"class":73},[49,51304,1409],{"class":66},[49,51306,51307],{"class":51,"line":11158},[49,51308,35514],{"class":55},[49,51310,51311],{"class":51,"line":11164},[49,51312,35519],{"class":55},[49,51314,51315],{"class":51,"line":11172},[49,51316,35524],{"class":55},[49,51318,51319,51321,51323,51325,51327],{"class":51,"line":11177},[49,51320,35529],{"class":66},[49,51322,10729],{"class":109},[49,51324,34035],{"class":66},[49,51326,4203],{"class":109},[49,51328,35538],{"class":66},[49,51330,51331],{"class":51,"line":17854},[49,51332,35543],{"class":55},[49,51334,51335,51337,51339,51341,51343],{"class":51,"line":17860},[49,51336,35548],{"class":66},[49,51338,10729],{"class":109},[49,51340,35553],{"class":66},[49,51342,80],{"class":73},[49,51344,1409],{"class":66},[49,51346,51347],{"class":51,"line":17883},[49,51348,3654],{"emptyLinePlaceholder":1330},[49,51350,51351],{"class":51,"line":17889},[49,51352,35566],{"class":55},[49,51354,51355,51357,51359,51361,51363],{"class":51,"line":17912},[49,51356,35571],{"class":66},[49,51358,1448],{"class":109},[49,51360,35576],{"class":66},[49,51362,1975],{"class":109},[49,51364,35581],{"class":66},[49,51366,51367],{"class":51,"line":17926},[49,51368,35586],{"class":55},[49,51370,51371,51373,51375,51377],{"class":51,"line":17946},[49,51372,33699],{"class":73},[49,51374,1403],{"class":66},[49,51376,35595],{"class":1505},[49,51378,35598],{"class":66},[49,51380,51381],{"class":51,"line":17952},[49,51382,3654],{"emptyLinePlaceholder":1330},[49,51384,51385],{"class":51,"line":17963},[49,51386,35607],{"class":55},[49,51388,51389,51391,51393,51395,51397],{"class":51,"line":17986},[49,51390,2787],{"class":109},[49,51392,32468],{"class":73},[49,51394,4203],{"class":109},[49,51396,32473],{"class":1505},[49,51398,4993],{"class":66},[49,51400,51401],{"class":51,"line":18008},[49,51402,35624],{"class":55},[49,51404,51405,51407,51409],{"class":51,"line":18013},[49,51406,32537],{"class":66},[49,51408,1448],{"class":109},[49,51410,45799],{"class":66},[49,51412,51413],{"class":51,"line":18019},[49,51414,35637],{"class":55},[49,51416,51417],{"class":51,"line":18033},[49,51418,35642],{"class":55},[49,51420,51421,51423,51425],{"class":51,"line":18046},[49,51422,35647],{"class":66},[49,51424,35650],{"class":1505},[49,51426,31745],{"class":66},[49,51428,51429],{"class":51,"line":18051},[49,51430,35657],{"class":55},[49,51432,51433,51435,51437],{"class":51,"line":18065},[49,51434,35270],{"class":66},[49,51436,1448],{"class":109},[49,51438,35666],{"class":66},[49,51440,51441],{"class":51,"line":18070},[49,51442,35671],{"class":55},[49,51444,51445],{"class":51,"line":18076},[49,51446,35676],{"class":66},[49,51448,51449],{"class":51,"line":18081},[49,51450,3654],{"emptyLinePlaceholder":1330},[49,51452,51453],{"class":51,"line":18095},[49,51454,35685],{"class":55},[49,51456,51457],{"class":51,"line":18100},[49,51458,35690],{"class":55},[49,51460,51461,51463,51465,51467,51469,51471,51473],{"class":51,"line":18105},[49,51462,32485],{"class":66},[49,51464,1448],{"class":109},[49,51466,32492],{"class":1505},[49,51468,2959],{"class":109},[49,51470,32497],{"class":66},[49,51472,2956],{"class":109},[49,51474,35367],{"class":1505},[49,51476,51477,51479,51481],{"class":51,"line":18119},[49,51478,32537],{"class":66},[49,51480,1448],{"class":109},[49,51482,33537],{"class":66},[49,51484,51485],{"class":51,"line":18131},[49,51486,35719],{"class":55},[49,51488,51489],{"class":51,"line":18136},[49,51490,35724],{"class":55},[49,51492,51493,51495,51497,51499,51502,51504,51507],{"class":51,"line":18149},[49,51494,35729],{"class":66},[49,51496,1448],{"class":109},[49,51498,2280],{"class":66},[49,51500,51501],{"class":1505},"'猫'",[49,51503,1770],{"class":66},[49,51505,51506],{"class":1505},"'狗'",[49,51508,34494],{"class":66},[49,51510,51511,51513],{"class":51,"line":18154},[49,51512,35426],{"class":109},[49,51514,34132],{"class":66},[49,51516,51517],{"class":51,"line":18159},[49,51518,35794],{"class":55},[49,51520,51521,51523,51525,51527],{"class":51,"line":18164},[49,51522,4657],{"class":109},[49,51524,35801],{"class":66},[49,51526,27292],{"class":109},[49,51528,35445],{"class":66},[49,51530,51531,51533,51535],{"class":51,"line":18177},[49,51532,33858],{"class":66},[49,51534,1448],{"class":109},[49,51536,33863],{"class":66},[49,51538,51539,51541,51543],{"class":51,"line":18182},[49,51540,33873],{"class":66},[49,51542,1448],{"class":109},[49,51544,33878],{"class":66},[49,51546,51547],{"class":51,"line":33881},[49,51548,3654],{"emptyLinePlaceholder":1330},[49,51550,51551],{"class":51,"line":33887},[49,51552,35830],{"class":55},[49,51554,51555],{"class":51,"line":33893},[49,51556,34123],{"class":66},[49,51558,51559],{"class":51,"line":33899},[49,51560,35839],{"class":55},[49,51562,51563,51565,51567],{"class":51,"line":33905},[49,51564,33908],{"class":66},[49,51566,1448],{"class":109},[49,51568,33913],{"class":66},[49,51570,51571],{"class":51,"line":33916},[49,51572,35852],{"class":55},[49,51574,51575,51577,51579,51581,51583,51585,51587],{"class":51,"line":33922},[49,51576,33925],{"class":66},[49,51578,1448],{"class":109},[49,51580,33930],{"class":66},[49,51582,33933],{"class":6468},[49,51584,1448],{"class":109},[49,51586,159],{"class":73},[49,51588,1409],{"class":66},[49,51590,51591],{"class":51,"line":33942},[49,51592,35873],{"class":55},[49,51594,51595,51597,51599],{"class":51,"line":33948},[49,51596,35878],{"class":66},[49,51598,1448],{"class":109},[49,51600,35883],{"class":66},[49,51602,51603,51605,51607],{"class":51,"line":33959},[49,51604,35888],{"class":66},[49,51606,1448],{"class":109},[49,51608,35893],{"class":66},[49,51610,51611,51613,51615,51617,51619,51621,51623,51625],{"class":51,"line":33965},[49,51612,35898],{"class":73},[49,51614,1403],{"class":66},[49,51616,35903],{"class":1505},[49,51618,35906],{"class":66},[49,51620,35909],{"class":1505},[49,51622,1770],{"class":66},[49,51624,35914],{"class":1505},[49,51626,35917],{"class":66},[1305,51628,51629],{},"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":44,"searchDepth":59,"depth":59,"links":51631},[51632,51633,51634,51635],{"id":31839,"depth":70,"text":31840},{"id":39087,"depth":70,"text":39088},{"id":42520,"depth":70,"text":42521},{"id":46529,"depth":70,"text":46530},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31831,"description":1327},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51642,"title":51643,"body":51644,"description":1327,"extension":1328,"meta":51651,"navigation":1330,"path":51652,"seo":51653,"stem":51654,"__hash__":51655},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51645,"toc":51649},[51646],[10,51647,51643],{"id":51648},"_3yolo模型学习",{"title":44,"searchDepth":59,"depth":59,"links":51650},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51643,"description":1327},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51657,"title":51658,"body":51659,"description":51666,"extension":1328,"meta":51667,"navigation":1330,"path":51669,"seo":51670,"stem":51671,"__hash__":51672},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51660,"toc":51664},[51661],[19,51662,51663],{},"yolo模型还未补充",{"title":44,"searchDepth":59,"depth":59,"links":51665},[],"深度学习学习",{"category":51668},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51658,"description":51666},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51674,"title":51675,"body":51676,"description":1327,"extension":1328,"meta":51701,"navigation":1330,"path":51702,"seo":51703,"stem":51704,"__hash__":51705},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51677,"toc":51699},[51678,51681,51684,51689,51696],[10,51679,51675],{"id":51680},"_1工具",[19,51682,51683],{},"提示错误插件：有问题会提前报错",[19,51685,51686],{},[174,51687],{"alt":44,"src":51688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,51690,51691],{},[1630,51692,51695],{"href":51693,"rel":51694},"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",[25113],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,51697,51698],{},"alt键加上下箭头可以实现语句的移动",{"title":44,"searchDepth":59,"depth":59,"links":51700},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51675,"description":1327},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51707,"title":51708,"body":51709,"description":1327,"extension":1328,"meta":54567,"navigation":1330,"path":54568,"seo":54569,"stem":54570,"__hash__":54571},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51710,"toc":54518},[51711,51714,51718,51722,51727,51730,51735,51739,51746,51751,51758,51763,51770,51775,51779,51784,51787,51791,51796,51800,51805,51808,51811,51814,51817,51820,51823,51826,51829,51834,51839,51844,51848,51851,51854,51858,51863,51866,51874,51879,51896,51904,51909,51914,51919,51924,51929,51932,51937,51942,51946,51955,51960,51965,51969,51974,51977,51981,51986,51994,51999,52004,52007,52012,52017,52022,52025,52028,52031,52036,52041,52044,52049,52052,52057,52060,52063,52066,52071,52074,52077,52092,52097,52102,52107,52110,52113,52116,52130,52133,52138,52143,52146,52149,52152,52155,52158,52161,52164,52168,52172,52177,52181,52184,52189,52194,52197,52202,52205,52209,52214,52217,52220,52223,52226,52229,52232,52235,52238,52241,52245,52250,52255,52260,52263,52266,52270,52275,52278,52282,52285,52288,52293,52296,52299,52303,52307,52310,52315,52320,52323,52352,52357,52362,52367,52372,52376,52381,52385,52390,52393,52397,52401,52406,52410,52415,52420,52424,52429,52432,52434,52437,52442,52446,52451,52455,52459,52464,52469,52474,52479,52483,52488,52493,52498,52501,52504,52509,52512,52517,52522,52527,52532,52536,53337,53341,53684,53689,53692,53695,53698,53701,53704,53707,53710,53713,53715,53718,53720,53723,53727,53732,53735,53738,53741,53745,53750,53755,53775,53778,53782,53787,53792,53809,53813,53842,53846,53868,53870,53909,53917,53923,53927,53930,53933,53938,53943,53946,53949,53952,53957,53962,53965,53968,53971,53974,53977,53980,53983,53986,53989,53992,53995,53997,54000,54003,54006,54009,54012,54015,54018,54021,54025,54030,54033,54038,54041,54044,54047,54050,54053,54056,54059,54061,54064,54067,54070,54073,54076,54079,54083,54086,54095,54098,54103,54106,54111,54114,54117,54120,54123,54126,54129,54132,54136,54140,54143,54146,54151,54156,54161,54165,54170,54175,54178,54181,54184,54187,54190,54195,54198,54203,54205,54210,54213,54217,54222,54225,54228,54233,54237,54240,54245,54248,54251,54280,54285,54288,54291,54294,54297,54300,54304,54307,54393,54397,54400,54405,54410,54417,54420,54423,54426,54429,54432,54437,54442,54445,54448,54451,54454,54457,54460,54463,54466,54469,54471,54474,54478,54483,54488,54493,54496,54501,54506,54509,54512,54515],[10,51712,51708],{"id":51713},"_2基础语法",[14,51715,51717],{"id":51716},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[183,51719,51721],{"id":51720},"_211-js组成","2.1.1 js组成",[591,51723,51724],{},[26,51725,51726],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,51728,51729],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[591,51731,51732],{"start":59},[26,51733,51734],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[183,51736,51738],{"id":51737},"_212-js书写位置","2.1.2 js书写位置",[591,51740,51741],{},[26,51742,51743],{},[485,51744,51745],{},"内部 JavaScript",[19,51747,51748],{},[174,51749],{"alt":44,"src":51750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[591,51752,51753],{"start":59},[26,51754,51755],{},[485,51756,51757],{},"外部 JavaScript",[19,51759,51760],{},[174,51761],{"alt":44,"src":51762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[591,51764,51765],{"start":70},[26,51766,51767],{},[485,51768,51769],{},"内联 JavaScript",[19,51771,51772],{},[174,51773],{"alt":44,"src":51774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[183,51776,51778],{"id":51777},"_213-javascript注释","2.1.3 JavaScript注释",[19,51780,51781],{},[174,51782],{"alt":44,"src":51783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51785,51786],{},"alt+shift+a一定要记住！",[183,51788,51790],{"id":51789},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51792,51793],{},[174,51794],{"alt":44,"src":51795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[183,51797,51799],{"id":51798},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[591,51801,51802],{},[26,51803,51804],{},"输出语法：",[19,51806,51807],{},"①document.write('要出的内容')",[19,51809,51810],{},"向body内输出内容；",[19,51812,51813],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51815,51816],{},"②alert('要出的内容')",[19,51818,51819],{},"页面弹出警告对话框",[19,51821,51822],{},"③console.log('控制台打印')",[19,51824,51825],{},"控制台输出语法，程序员调试使用",[19,51827,51828],{},"输入log就行，自动生成：",[19,51830,51831],{},[174,51832],{"alt":44,"src":51833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[591,51835,51836],{"start":59},[26,51837,51838],{},"输入语法：",[19,51840,51841],{},[174,51842],{"alt":44,"src":51843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[183,51845,51847],{"id":51846},"_2116-字面量","21.1.6 字面量",[19,51849,51850],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51852,51853],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51855,51857],{"id":51856},"_22-变量","2.2 变量",[591,51859,51860],{},[26,51861,51862],{},"变量声明",[19,51864,51865],{},"let 变量名",[23,51867,51868,51871],{},[26,51869,51870],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[26,51872,51873],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[591,51875,51876],{"start":59},[26,51877,51878],{},"变量赋值",[39,51880,51884],{"className":51881,"code":51882,"language":51883,"meta":44,"style":44},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[46,51885,51886,51891],{"__ignoreMap":44},[49,51887,51888],{"class":51,"line":52},[49,51889,51890],{"class":66},"let age\n",[49,51892,51893],{"class":51,"line":59},[49,51894,51895],{"class":66},"age=18\n",[591,51897,51898,51901],{"start":70},[26,51899,51900],{},"连这些（变量的初始化）：let age=18",[26,51902,51903],{},"更新变量",[19,51905,51906],{},[174,51907],{"alt":44,"src":51908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[591,51910,51911],{"start":98},[26,51912,51913],{},"声明多个变量",[19,51915,51916],{},[174,51917],{"alt":44,"src":51918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[591,51920,51921],{"start":121},[26,51922,51923],{},"变量命名规则与规范",[19,51925,51926],{},[174,51927],{"alt":44,"src":51928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,51930,51931],{},"遵守小驼峰！",[591,51933,51934],{"start":134},[26,51935,51936],{},"变量拓展-let和var的区别",[19,51938,51939],{},[174,51940],{"alt":44,"src":51941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51943,51945],{"id":51944},"_23-数组","2.3 数组",[39,51947,51949],{"className":51881,"code":51948,"language":51883,"meta":44,"style":44},"let arr = []\n",[46,51950,51951],{"__ignoreMap":44},[49,51952,51953],{"class":51,"line":52},[49,51954,51948],{"class":66},[19,51956,51957],{},[174,51958],{"alt":44,"src":51959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,51961,51962],{},[174,51963],{"alt":44,"src":51964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51966,51968],{"id":51967},"_24-常量","2.4 常量",[19,51970,51971],{},[174,51972],{"alt":44,"src":51973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51975,51976],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51978,51980],{"id":51979},"_25-数据类型","2.5 数据类型",[19,51982,51983],{},[174,51984],{"alt":44,"src":51985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[591,51987,51988,51991],{},[26,51989,51990],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[26,51992,51993],{},"算数运算符：",[19,51995,51996],{},[174,51997],{"alt":44,"src":51998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[591,52000,52001],{"start":70},[26,52002,52003],{},"数字类型（Number）",[19,52005,52006],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52008,52009],{},[174,52010],{"alt":44,"src":52011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[591,52013,52014],{"start":86},[26,52015,52016],{},"字符串类型（string）",[19,52018,52019],{},[174,52020],{"alt":44,"src":52021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52023,52024],{},"反引号也是可以使用的",[19,52026,52027],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52029,52030],{},"例如：document.write(\"我今年\"+age+\"岁\")",[591,52032,52033],{"start":98},[26,52034,52035],{},"模板字符串",[19,52037,52038],{},[174,52039],{"alt":44,"src":52040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52042,52043],{},"类似于python的字符串格式化",[591,52045,52046],{"start":121},[26,52047,52048],{},"布尔类型",[19,52050,52051],{},"true 和 false",[591,52053,52054],{"start":134},[26,52055,52056],{},"未定义类型（underfined）",[19,52058,52059],{},"表示没有赋值",[19,52061,52062],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52064,52065],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[591,52067,52068],{"start":1085},[26,52069,52070],{},"null（空类型）",[19,52072,52073],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52075,52076],{},"赋值了，但是内容为空",[39,52078,52080],{"className":51881,"code":52079,"language":51883,"meta":44,"style":44},"typeof null\n输出的是'object'，是一个对象数据类型\n",[46,52081,52082,52087],{"__ignoreMap":44},[49,52083,52084],{"class":51,"line":52},[49,52085,52086],{"class":66},"typeof null\n",[49,52088,52089],{"class":51,"line":59},[49,52090,52091],{"class":66},"输出的是'object'，是一个对象数据类型\n",[591,52093,52094],{"start":2574},[26,52095,52096],{},"控制台检测数据类型",[19,52098,52099],{},[174,52100],{"alt":44,"src":52101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[591,52103,52104],{"start":2586},[26,52105,52106],{},"类型转换",[19,52108,52109],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52111,52112],{},"转换方式：隐式转换和显示转换",[19,52114,52115],{},"①隐式转换",[23,52117,52118,52121,52124,52127],{},[26,52119,52120],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[26,52122,52123],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[26,52125,52126],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[26,52128,52129],{},"任何数据和字符串相加结果都是字符串",[19,52131,52132],{},"②显示转换",[19,52134,52135],{},[174,52136],{"alt":44,"src":52137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52139,52140],{},[174,52141],{"alt":44,"src":52142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52144,52145],{},"在输入的时候要用好隐式转换，简单写起来",[19,52147,52148],{},"let num = +prompt(’请输入数字：‘)",[19,52150,52151],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52153,52154],{},"console.log(parseInt('12.333px'))",[19,52156,52157],{},"输出为：12",[19,52159,52160],{},"console.log(parseInt('a'a'a12.333px'))",[19,52162,52163],{},"输出：NaN",[14,52165,52167],{"id":52166},"_26-运算符","2.6 运算符",[183,52169,52171],{"id":52170},"_261-赋值运算符","2.6.1 赋值运算符",[19,52173,52174],{},[174,52175],{"alt":44,"src":52176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[183,52178,52180],{"id":52179},"_262-一元运算符","2.6.2 一元运算符",[19,52182,52183],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52185,52186],{},[174,52187],{"alt":44,"src":52188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52190,52191],{},[174,52192],{"alt":44,"src":52193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52195,52196],{},"两者的区别：",[19,52198,52199],{},[174,52200],{"alt":44,"src":52201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52203,52204],{},"前置先自加；后置后加，代码执行完之后再加",[183,52206,52208],{"id":52207},"_263-比较运算符","2.6.3 比较运算符",[19,52210,52211],{},[174,52212],{"alt":44,"src":52213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52215,52216],{},"比较运算符也有隐式转换",[19,52218,52219],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52221,52222],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52224,52225],{},"要使用三等，开发的时候",[19,52227,52228],{},"NaN不等于任何人，包括它自己",[19,52230,52231],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52233,52234],{},"7\u002F10=0.7",[19,52236,52237],{},"最后：0.5+0.2=0.7",[19,52239,52240],{},"字符串比较，比较的是字符对应的ASCII码",[183,52242,52244],{"id":52243},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52246,52247],{},[174,52248],{"alt":44,"src":52249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52251,52252],{},[174,52253],{"alt":44,"src":52254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52256,52257],{},[174,52258],{"alt":44,"src":52259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52261,52262],{},"上述题目选D",[19,52264,52265],{},"与真2假1；或真1假2",[183,52267,52269],{"id":52268},"_265-运算符优先级","2.6.5 运算符优先级",[19,52271,52272],{},[174,52273],{"alt":44,"src":52274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52276,52277],{},"先算逻辑与，后算逻辑或",[14,52279,52281],{"id":52280},"_27-语句","2.7 语句",[19,52283,52284],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52286,52287],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52289,52290],{},[174,52291],{"alt":44,"src":52292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52294,52295],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52297,52298],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[183,52300,52302],{"id":52301},"_271-分支语句","2.7.1 分支语句",[525,52304,52306],{"id":52305},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52308,52309],{},"if语句单行简单的话，可以不写{}，写在一行就行",[591,52311,52312],{},[26,52313,52314],{},"单分支语句",[19,52316,52317],{},[174,52318],{"alt":44,"src":52319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52321,52322],{},"除了0，所有数字都为真",[39,52324,52326],{"className":51881,"code":52325,"language":51883,"meta":44,"style":44},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[46,52327,52328,52333,52338,52343,52347],{"__ignoreMap":44},[49,52329,52330],{"class":51,"line":52},[49,52331,52332],{"class":66},"if（0) {\n",[49,52334,52335],{"class":51,"line":59},[49,52336,52337],{"class":66},"    let a=1\n",[49,52339,52340],{"class":51,"line":70},[49,52341,52342],{"class":66},"    alert(typeof a)\n",[49,52344,52345],{"class":51,"line":86},[49,52346,137],{"class":66},[49,52348,52349],{"class":51,"line":98},[49,52350,52351],{"class":66},"不输出，括号为假\n",[591,52353,52354],{"start":59},[26,52355,52356],{},"双分支语句",[19,52358,52359],{},[174,52360],{"alt":44,"src":52361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[591,52363,52364],{"start":70},[26,52365,52366],{},"多分支语句",[19,52368,52369],{},[174,52370],{"alt":44,"src":52371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[525,52373,52375],{"id":52374},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52377,52378],{},[174,52379],{"alt":44,"src":52380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[525,52382,52384],{"id":52383},"_2713-switch语句","2.7.1.3 switch语句",[19,52386,52387],{},[174,52388],{"alt":44,"src":52389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52391,52392],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[183,52394,52396],{"id":52395},"_272-循环语句","2.7.2 循环语句",[525,52398,52400],{"id":52399},"_2721-断点演示","2.7.2.1 断点演示",[19,52402,52403],{},[174,52404],{"alt":44,"src":52405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[525,52407,52409],{"id":52408},"_2722-while循环","2.7.2.2 while循环",[19,52411,52412],{},[174,52413],{"alt":44,"src":52414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52416,52417],{},[174,52418],{"alt":44,"src":52419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[525,52421,52423],{"id":52422},"_2723-for循环","2.7.2.3 for循环",[19,52425,52426],{},[174,52427],{"alt":44,"src":52428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52430,52431],{},"for(;;) {",[19,52433,620],{},[19,52435,52436],{},"表示无限循环",[19,52438,52439],{},[174,52440],{"alt":44,"src":52441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[525,52443,52445],{"id":52444},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52447,52448],{},[174,52449],{"alt":44,"src":52450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52452,52454],{"id":52453},"_28-数组","2.8 数组",[183,52456,52458],{"id":52457},"_281-基础认识","2.8.1 基础认识",[19,52460,52461],{},[174,52462],{"alt":44,"src":52463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,52465,52466],{},[174,52467],{"alt":44,"src":52468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,52470,52471],{},[174,52472],{"alt":44,"src":52473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,52475,52476],{},[174,52477],{"alt":44,"src":52478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[183,52480,52482],{"id":52481},"_282-操作数组","2.8.2 操作数组",[19,52484,52485],{},[174,52486],{"alt":44,"src":52487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[591,52489,52490],{},[26,52491,52492],{},"添加元素",[19,52494,52495],{},[174,52496],{"alt":44,"src":52497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,52499,52500],{},"console.log(arr.push('green'))",[19,52502,52503],{},"输出结果：为新数组的长度",[19,52505,52506],{},[174,52507],{"alt":44,"src":52508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,52510,52511],{},"push用的非常多，一定要记住",[591,52513,52514],{},[26,52515,52516],{},"删除元素",[19,52518,52519],{},[174,52520],{"alt":44,"src":52521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,52523,52524],{},[174,52525],{"alt":44,"src":52526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,52528,52529],{},[174,52530],{"alt":44,"src":52531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[183,52533,52535],{"id":52534},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[39,52537,52539],{"className":51881,"code":52538,"language":51883,"meta":44,"style":44},"\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",[46,52540,52541,52555,52571,52575,52584,52602,52626,52648,52662,52670,52677,52688,52699,52703,52707,52714,52726,52740,52753,52771,52788,52802,52814,52826,52838,52842,52846,52856,52866,52878,52890,52902,52913,52917,52921,52933,52937,52951,52955,52959,52970,52984,52996,53010,53014,53023,53032,53036,53045,53049,53058,53063,53068,53081,53109,53114,53119,53144,53149,53153,53158,53163,53178,53182,53187,53217,53229,53245,53261,53275,53280,53287,53291,53296,53309,53317,53325,53329],{"__ignoreMap":44},[49,52542,52543,52546,52549,52552],{"class":51,"line":52},[49,52544,52545],{"class":66},"\u003C!",[49,52547,52548],{"class":147},"DOCTYPE",[49,52550,52551],{"class":62}," html",[49,52553,52554],{"class":66},">\n",[49,52556,52557,52559,52561,52564,52566,52569],{"class":51,"line":59},[49,52558,2300],{"class":66},[49,52560,51883],{"class":147},[49,52562,52563],{"class":62}," lang",[49,52565,1448],{"class":66},[49,52567,52568],{"class":1505},"\"en\"",[49,52570,52554],{"class":66},[49,52572,52573],{"class":51,"line":70},[49,52574,3654],{"emptyLinePlaceholder":1330},[49,52576,52577,52579,52582],{"class":51,"line":86},[49,52578,2300],{"class":66},[49,52580,52581],{"class":147},"head",[49,52583,52554],{"class":66},[49,52585,52586,52589,52592,52595,52597,52600],{"class":51,"line":98},[49,52587,52588],{"class":66},"    \u003C",[49,52590,52591],{"class":147},"meta",[49,52593,52594],{"class":62}," charset",[49,52596,1448],{"class":66},[49,52598,52599],{"class":1505},"\"UTF-8\"",[49,52601,52554],{"class":66},[49,52603,52604,52606,52608,52611,52613,52616,52619,52621,52624],{"class":51,"line":121},[49,52605,52588],{"class":66},[49,52607,52591],{"class":147},[49,52609,52610],{"class":62}," http-equiv",[49,52612,1448],{"class":66},[49,52614,52615],{"class":1505},"\"X-UA-Compatible\"",[49,52617,52618],{"class":62}," content",[49,52620,1448],{"class":66},[49,52622,52623],{"class":1505},"\"IE=edge\"",[49,52625,52554],{"class":66},[49,52627,52628,52630,52632,52634,52636,52639,52641,52643,52646],{"class":51,"line":134},[49,52629,52588],{"class":66},[49,52631,52591],{"class":147},[49,52633,16171],{"class":62},[49,52635,1448],{"class":66},[49,52637,52638],{"class":1505},"\"viewport\"",[49,52640,52618],{"class":62},[49,52642,1448],{"class":66},[49,52644,52645],{"class":1505},"\"width=device-width, initial-scale=1.0\"",[49,52647,52554],{"class":66},[49,52649,52650,52652,52655,52658,52660],{"class":51,"line":1085},[49,52651,52588],{"class":66},[49,52653,52654],{"class":147},"title",[49,52656,52657],{"class":66},">Document\u003C\u002F",[49,52659,52654],{"class":147},[49,52661,52554],{"class":66},[49,52663,52664,52666,52668],{"class":51,"line":2574},[49,52665,52588],{"class":66},[49,52667,1305],{"class":147},[49,52669,52554],{"class":66},[49,52671,52672,52675],{"class":51,"line":2586},[49,52673,52674],{"class":147},"        *",[49,52676,67],{"class":66},[49,52678,52679,52682,52684,52686],{"class":51,"line":2867},[49,52680,52681],{"class":73},"            margin",[49,52683,77],{"class":66},[49,52685,80],{"class":73},[49,52687,83],{"class":66},[49,52689,52690,52693,52695,52697],{"class":51,"line":2872},[49,52691,52692],{"class":73},"            padding",[49,52694,77],{"class":66},[49,52696,80],{"class":73},[49,52698,83],{"class":66},[49,52700,52701],{"class":51,"line":2878},[49,52702,3783],{"class":66},[49,52704,52705],{"class":51,"line":2883},[49,52706,3654],{"emptyLinePlaceholder":1330},[49,52708,52709,52712],{"class":51,"line":2897},[49,52710,52711],{"class":62},"        .box",[49,52713,67],{"class":66},[49,52715,52716,52719,52721,52724],{"class":51,"line":2902},[49,52717,52718],{"class":73},"            display",[49,52720,77],{"class":66},[49,52722,52723],{"class":73},"flex",[49,52725,83],{"class":66},[49,52727,52728,52731,52733,52736,52738],{"class":51,"line":2908},[49,52729,52730],{"class":73},"            width",[49,52732,77],{"class":66},[49,52734,52735],{"class":73},"700",[49,52737,110],{"class":109},[49,52739,83],{"class":66},[49,52741,52742,52745,52747,52749,52751],{"class":51,"line":2929},[49,52743,52744],{"class":73},"            height",[49,52746,77],{"class":66},[49,52748,5227],{"class":73},[49,52750,110],{"class":109},[49,52752,83],{"class":66},[49,52754,52755,52758,52760,52762,52764,52766,52769],{"class":51,"line":2934},[49,52756,52757],{"class":73},"            border-left",[49,52759,77],{"class":66},[49,52761,159],{"class":73},[49,52763,110],{"class":109},[49,52765,113],{"class":73},[49,52767,52768],{"class":73}," pink",[49,52770,83],{"class":66},[49,52772,52773,52776,52778,52780,52782,52784,52786],{"class":51,"line":2948},[49,52774,52775],{"class":73},"            border-bottom",[49,52777,77],{"class":66},[49,52779,159],{"class":73},[49,52781,110],{"class":109},[49,52783,113],{"class":73},[49,52785,52768],{"class":73},[49,52787,83],{"class":66},[49,52789,52790,52792,52794,52796,52798,52800],{"class":51,"line":2953},[49,52791,52681],{"class":73},[49,52793,77],{"class":66},[49,52795,2047],{"class":73},[49,52797,110],{"class":109},[49,52799,1077],{"class":73},[49,52801,83],{"class":66},[49,52803,52804,52807,52809,52812],{"class":51,"line":2982},[49,52805,52806],{"class":73},"            justify-content",[49,52808,77],{"class":66},[49,52810,52811],{"class":73},"space-around",[49,52813,83],{"class":66},[49,52815,52816,52819,52821,52824],{"class":51,"line":2987},[49,52817,52818],{"class":73},"            align-items",[49,52820,77],{"class":66},[49,52822,52823],{"class":73},"flex-end",[49,52825,83],{"class":66},[49,52827,52828,52831,52833,52836],{"class":51,"line":3004},[49,52829,52830],{"class":73},"            text-align",[49,52832,77],{"class":66},[49,52834,52835],{"class":73},"center",[49,52837,83],{"class":66},[49,52839,52840],{"class":51,"line":3009},[49,52841,3783],{"class":66},[49,52843,52844],{"class":51,"line":3014},[49,52845,3654],{"emptyLinePlaceholder":1330},[49,52847,52848,52850,52852,52854],{"class":51,"line":3019},[49,52849,52711],{"class":62},[49,52851,2349],{"class":109},[49,52853,148],{"class":147},[49,52855,67],{"class":66},[49,52857,52858,52860,52862,52864],{"class":51,"line":3033},[49,52859,52718],{"class":73},[49,52861,77],{"class":66},[49,52863,52723],{"class":73},[49,52865,83],{"class":66},[49,52867,52868,52870,52872,52874,52876],{"class":51,"line":3038},[49,52869,52730],{"class":73},[49,52871,77],{"class":66},[49,52873,2047],{"class":73},[49,52875,110],{"class":109},[49,52877,83],{"class":66},[49,52879,52880,52883,52885,52888],{"class":51,"line":3831},[49,52881,52882],{"class":73},"            background-color",[49,52884,77],{"class":66},[49,52886,52887],{"class":73},"pink",[49,52889,83],{"class":66},[49,52891,52892,52895,52897,52900],{"class":51,"line":3845},[49,52893,52894],{"class":73},"            flex-direction",[49,52896,77],{"class":66},[49,52898,52899],{"class":73},"column",[49,52901,83],{"class":66},[49,52903,52904,52906,52908,52911],{"class":51,"line":3853},[49,52905,52806],{"class":73},[49,52907,77],{"class":66},[49,52909,52910],{"class":73},"space-between",[49,52912,83],{"class":66},[49,52914,52915],{"class":51,"line":3858},[49,52916,3783],{"class":66},[49,52918,52919],{"class":51,"line":3864},[49,52920,3654],{"emptyLinePlaceholder":1330},[49,52922,52923,52925,52928,52931],{"class":51,"line":3870},[49,52924,52711],{"class":62},[49,52926,52927],{"class":147}," div",[49,52929,52930],{"class":147}," span",[49,52932,67],{"class":66},[49,52934,52935],{"class":51,"line":3875},[49,52936,3654],{"emptyLinePlaceholder":1330},[49,52938,52939,52942,52944,52947,52949],{"class":51,"line":9200},[49,52940,52941],{"class":73},"            margin-top",[49,52943,77],{"class":66},[49,52945,52946],{"class":73},"-20",[49,52948,110],{"class":109},[49,52950,83],{"class":66},[49,52952,52953],{"class":51,"line":9224},[49,52954,3783],{"class":66},[49,52956,52957],{"class":51,"line":9229},[49,52958,3654],{"emptyLinePlaceholder":1330},[49,52960,52961,52963,52965,52968],{"class":51,"line":9235},[49,52962,52711],{"class":62},[49,52964,52927],{"class":147},[49,52966,52967],{"class":147}," h4",[49,52969,67],{"class":66},[49,52971,52972,52975,52977,52980,52982],{"class":51,"line":9262},[49,52973,52974],{"class":73},"            margin-bottom",[49,52976,77],{"class":66},[49,52978,52979],{"class":73},"-35",[49,52981,110],{"class":109},[49,52983,83],{"class":66},[49,52985,52986,52988,52990,52992,52994],{"class":51,"line":9267},[49,52987,52730],{"class":73},[49,52989,77],{"class":66},[49,52991,1748],{"class":73},[49,52993,110],{"class":109},[49,52995,83],{"class":66},[49,52997,52998,53001,53003,53006,53008],{"class":51,"line":9273},[49,52999,53000],{"class":73},"            margin-left",[49,53002,77],{"class":66},[49,53004,53005],{"class":73},"-10",[49,53007,110],{"class":109},[49,53009,83],{"class":66},[49,53011,53012],{"class":51,"line":9285},[49,53013,3783],{"class":66},[49,53015,53016,53019,53021],{"class":51,"line":9297},[49,53017,53018],{"class":66},"    \u003C\u002F",[49,53020,1305],{"class":147},[49,53022,52554],{"class":66},[49,53024,53025,53028,53030],{"class":51,"line":9309},[49,53026,53027],{"class":66},"\u003C\u002F",[49,53029,52581],{"class":147},[49,53031,52554],{"class":66},[49,53033,53034],{"class":51,"line":10968},[49,53035,3654],{"emptyLinePlaceholder":1330},[49,53037,53038,53040,53043],{"class":51,"line":10993},[49,53039,2300],{"class":66},[49,53041,53042],{"class":147},"body",[49,53044,52554],{"class":66},[49,53046,53047],{"class":51,"line":11016},[49,53048,3654],{"emptyLinePlaceholder":1330},[49,53050,53051,53053,53056],{"class":51,"line":11040},[49,53052,52588],{"class":66},[49,53054,53055],{"class":147},"script",[49,53057,52554],{"class":66},[49,53059,53060],{"class":51,"line":11045},[49,53061,53062],{"class":55},"        \u002F\u002F 1. 四次弹框效果\n",[49,53064,53065],{"class":51,"line":11050},[49,53066,53067],{"class":55},"        \u002F\u002F 声明一个新的数组\n",[49,53069,53070,53073,53076,53078],{"class":51,"line":11055},[49,53071,53072],{"class":109},"        let",[49,53074,53075],{"class":66}," arr ",[49,53077,1448],{"class":109},[49,53079,53080],{"class":66}," []\n",[49,53082,53083,53085,53087,53090,53092,53094,53096,53098,53100,53103,53105,53107],{"class":51,"line":11064},[49,53084,4657],{"class":109},[49,53086,2913],{"class":66},[49,53088,53089],{"class":109},"let",[49,53091,10690],{"class":66},[49,53093,1448],{"class":109},[49,53095,26367],{"class":73},[49,53097,10697],{"class":66},[49,53099,2843],{"class":109},[49,53101,53102],{"class":73}," 4",[49,53104,4468],{"class":66},[49,53106,3546],{"class":109},[49,53108,13694],{"class":66},[49,53110,53111],{"class":51,"line":11069},[49,53112,53113],{"class":55},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[49,53115,53116],{"class":51,"line":11075},[49,53117,53118],{"class":55},"            \u002F\u002F arr.push(num)\n",[49,53120,53121,53124,53127,53129,53132,53134,53137,53139,53142],{"class":51,"line":11096},[49,53122,53123],{"class":66},"            arr.",[49,53125,53126],{"class":62},"push",[49,53128,1403],{"class":66},[49,53130,53131],{"class":62},"prompt",[49,53133,1403],{"class":66},[49,53135,53136],{"class":1505},"`请输入第${",[49,53138,1833],{"class":66},[49,53140,53141],{"class":1505},"}季度的数据:`",[49,53143,31745],{"class":66},[49,53145,53146],{"class":51,"line":11102},[49,53147,53148],{"class":55},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[49,53150,53151],{"class":51,"line":11116},[49,53152,3783],{"class":66},[49,53154,53155],{"class":51,"line":11122},[49,53156,53157],{"class":55},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[49,53159,53160],{"class":51,"line":11149},[49,53161,53162],{"class":55},"        \u002F\u002F 盒子开头\n",[49,53164,53165,53168,53171,53173,53176],{"class":51,"line":11158},[49,53166,53167],{"class":66},"        document.",[49,53169,53170],{"class":62},"write",[49,53172,1403],{"class":66},[49,53174,53175],{"class":1505},"` \u003Cdiv class=\"box\">`",[49,53177,1409],{"class":66},[49,53179,53180],{"class":51,"line":11164},[49,53181,3654],{"emptyLinePlaceholder":1330},[49,53183,53184],{"class":51,"line":11172},[49,53185,53186],{"class":55},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[49,53188,53189,53191,53193,53195,53197,53199,53201,53203,53205,53208,53211,53213,53215],{"class":51,"line":11177},[49,53190,4657],{"class":109},[49,53192,2913],{"class":66},[49,53194,53089],{"class":109},[49,53196,10690],{"class":66},[49,53198,1448],{"class":109},[49,53200,5347],{"class":73},[49,53202,10697],{"class":66},[49,53204,2300],{"class":109},[49,53206,53207],{"class":66}," arr.",[49,53209,53210],{"class":73},"length",[49,53212,4468],{"class":66},[49,53214,3546],{"class":109},[49,53216,13694],{"class":66},[49,53218,53219,53222,53224,53226],{"class":51,"line":17854},[49,53220,53221],{"class":66},"            document.",[49,53223,53170],{"class":62},[49,53225,1403],{"class":66},[49,53227,53228],{"class":1505},"`\n",[49,53230,53231,53234,53236,53238,53240,53242],{"class":51,"line":17860},[49,53232,53233],{"class":1505},"              \u003Cdiv style=\"height: ${",[49,53235,5134],{"class":66},[49,53237,2280],{"class":1505},[49,53239,1833],{"class":66},[49,53241,2330],{"class":1505},[49,53243,53244],{"class":1505},"}px;\">\n",[49,53246,53247,53250,53252,53254,53256,53258],{"class":51,"line":17883},[49,53248,53249],{"class":1505},"                \u003Cspan>${",[49,53251,5134],{"class":66},[49,53253,2280],{"class":1505},[49,53255,1833],{"class":66},[49,53257,2330],{"class":1505},[49,53259,53260],{"class":1505},"}\u003C\u002Fspan>\n",[49,53262,53263,53266,53268,53270,53272],{"class":51,"line":17889},[49,53264,53265],{"class":1505},"                \u003Ch4>第${",[49,53267,1833],{"class":66},[49,53269,46814],{"class":109},[49,53271,26367],{"class":73},[49,53273,53274],{"class":1505},"}季度\u003C\u002Fh4>\n",[49,53276,53277],{"class":51,"line":17912},[49,53278,53279],{"class":1505},"              \u003C\u002Fdiv>          \n",[49,53281,53282,53285],{"class":51,"line":17926},[49,53283,53284],{"class":1505},"            `",[49,53286,1409],{"class":66},[49,53288,53289],{"class":51,"line":17946},[49,53290,3783],{"class":66},[49,53292,53293],{"class":51,"line":17952},[49,53294,53295],{"class":55},"        \u002F\u002F 盒子结尾\n",[49,53297,53298,53300,53302,53304,53307],{"class":51,"line":17963},[49,53299,53167],{"class":66},[49,53301,53170],{"class":62},[49,53303,1403],{"class":66},[49,53305,53306],{"class":1505},"` \u003C\u002Fdiv>`",[49,53308,1409],{"class":66},[49,53310,53311,53313,53315],{"class":51,"line":17986},[49,53312,53018],{"class":66},[49,53314,53055],{"class":147},[49,53316,52554],{"class":66},[49,53318,53319,53321,53323],{"class":51,"line":18008},[49,53320,53027],{"class":66},[49,53322,53042],{"class":147},[49,53324,52554],{"class":66},[49,53326,53327],{"class":51,"line":18013},[49,53328,3654],{"emptyLinePlaceholder":1330},[49,53330,53331,53333,53335],{"class":51,"line":18019},[49,53332,53027],{"class":66},[49,53334,51883],{"class":147},[49,53336,52554],{"class":66},[183,53338,53340],{"id":53339},"_284-冒泡排序","2.8.4 冒泡排序",[39,53342,53344],{"className":51881,"code":53343,"language":51883,"meta":44,"style":44},"\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",[46,53345,53346,53356,53370,53374,53382,53397,53417,53429,53437,53441,53449,53457,53489,53522,53559,53564,53583,53588,53601,53616,53632,53636,53641,53645,53655,53664,53672,53676],{"__ignoreMap":44},[49,53347,53348,53350,53352,53354],{"class":51,"line":52},[49,53349,52545],{"class":66},[49,53351,52548],{"class":147},[49,53353,52551],{"class":62},[49,53355,52554],{"class":66},[49,53357,53358,53360,53362,53364,53366,53368],{"class":51,"line":59},[49,53359,2300],{"class":66},[49,53361,51883],{"class":147},[49,53363,52563],{"class":62},[49,53365,1448],{"class":66},[49,53367,52568],{"class":1505},[49,53369,52554],{"class":66},[49,53371,53372],{"class":51,"line":70},[49,53373,3654],{"emptyLinePlaceholder":1330},[49,53375,53376,53378,53380],{"class":51,"line":86},[49,53377,2300],{"class":66},[49,53379,52581],{"class":147},[49,53381,52554],{"class":66},[49,53383,53384,53387,53389,53391,53393,53395],{"class":51,"line":98},[49,53385,53386],{"class":66},"  \u003C",[49,53388,52591],{"class":147},[49,53390,52594],{"class":62},[49,53392,1448],{"class":66},[49,53394,52599],{"class":1505},[49,53396,52554],{"class":66},[49,53398,53399,53401,53403,53405,53407,53409,53411,53413,53415],{"class":51,"line":121},[49,53400,53386],{"class":66},[49,53402,52591],{"class":147},[49,53404,16171],{"class":62},[49,53406,1448],{"class":66},[49,53408,52638],{"class":1505},[49,53410,52618],{"class":62},[49,53412,1448],{"class":66},[49,53414,52645],{"class":1505},[49,53416,52554],{"class":66},[49,53418,53419,53421,53423,53425,53427],{"class":51,"line":134},[49,53420,53386],{"class":66},[49,53422,52654],{"class":147},[49,53424,52657],{"class":66},[49,53426,52654],{"class":147},[49,53428,52554],{"class":66},[49,53430,53431,53433,53435],{"class":51,"line":1085},[49,53432,53027],{"class":66},[49,53434,52581],{"class":147},[49,53436,52554],{"class":66},[49,53438,53439],{"class":51,"line":2574},[49,53440,3654],{"emptyLinePlaceholder":1330},[49,53442,53443,53445,53447],{"class":51,"line":2586},[49,53444,2300],{"class":66},[49,53446,53042],{"class":147},[49,53448,52554],{"class":66},[49,53450,53451,53453,53455],{"class":51,"line":2867},[49,53452,53386],{"class":66},[49,53454,53055],{"class":147},[49,53456,52554],{"class":66},[49,53458,53459,53462,53464,53466,53469,53471,53473,53475,53477,53479,53481,53483,53485,53487],{"class":51,"line":2872},[49,53460,53461],{"class":109},"    let",[49,53463,53075],{"class":66},[49,53465,1448],{"class":109},[49,53467,53468],{"class":66}," [",[49,53470,1711],{"class":73},[49,53472,13687],{"class":66},[49,53474,1685],{"class":73},[49,53476,13687],{"class":66},[49,53478,1472],{"class":73},[49,53480,13687],{"class":66},[49,53482,1478],{"class":73},[49,53484,13687],{"class":66},[49,53486,159],{"class":73},[49,53488,34494],{"class":66},[49,53490,53491,53493,53495,53497,53499,53501,53503,53505,53507,53509,53511,53514,53516,53518,53520],{"class":51,"line":2878},[49,53492,4455],{"class":109},[49,53494,2913],{"class":66},[49,53496,53089],{"class":109},[49,53498,10690],{"class":66},[49,53500,1448],{"class":109},[49,53502,5347],{"class":73},[49,53504,10697],{"class":66},[49,53506,2300],{"class":109},[49,53508,53207],{"class":66},[49,53510,53210],{"class":73},[49,53512,53513],{"class":109}," -",[49,53515,26367],{"class":73},[49,53517,4468],{"class":66},[49,53519,3546],{"class":109},[49,53521,13694],{"class":66},[49,53523,53524,53527,53529,53531,53533,53535,53537,53539,53541,53543,53545,53547,53549,53551,53553,53555,53557],{"class":51,"line":2883},[49,53525,53526],{"class":109},"      for",[49,53528,2913],{"class":66},[49,53530,53089],{"class":109},[49,53532,10752],{"class":66},[49,53534,1448],{"class":109},[49,53536,5347],{"class":73},[49,53538,10759],{"class":66},[49,53540,2300],{"class":109},[49,53542,53207],{"class":66},[49,53544,53210],{"class":73},[49,53546,53513],{"class":109},[49,53548,10690],{"class":66},[49,53550,1923],{"class":109},[49,53552,26367],{"class":73},[49,53554,10766],{"class":66},[49,53556,3546],{"class":109},[49,53558,13694],{"class":66},[49,53560,53561],{"class":51,"line":2897},[49,53562,53563],{"class":55},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[49,53565,53566,53568,53571,53573,53576,53578,53580],{"class":51,"line":2902},[49,53567,3751],{"class":109},[49,53569,53570],{"class":66}," (arr[j] ",[49,53572,2349],{"class":109},[49,53574,53575],{"class":66}," arr[j ",[49,53577,1872],{"class":109},[49,53579,26367],{"class":73},[49,53581,53582],{"class":66},"]) {\n",[49,53584,53585],{"class":51,"line":2908},[49,53586,53587],{"class":55},"          \u002F\u002F 交换两个变量\n",[49,53589,53590,53593,53596,53598],{"class":51,"line":2929},[49,53591,53592],{"class":109},"          let",[49,53594,53595],{"class":66}," tmp ",[49,53597,1448],{"class":109},[49,53599,53600],{"class":66}," arr[j]\n",[49,53602,53603,53606,53608,53610,53612,53614],{"class":51,"line":2934},[49,53604,53605],{"class":66},"          arr[j] ",[49,53607,1448],{"class":109},[49,53609,53575],{"class":66},[49,53611,1872],{"class":109},[49,53613,26367],{"class":73},[49,53615,34494],{"class":66},[49,53617,53618,53621,53623,53625,53627,53629],{"class":51,"line":2948},[49,53619,53620],{"class":66},"          arr[j ",[49,53622,1872],{"class":109},[49,53624,26367],{"class":73},[49,53626,5697],{"class":66},[49,53628,1448],{"class":109},[49,53630,53631],{"class":66}," tmp\n",[49,53633,53634],{"class":51,"line":2953},[49,53635,3783],{"class":66},[49,53637,53638],{"class":51,"line":2982},[49,53639,53640],{"class":66},"      }\n",[49,53642,53643],{"class":51,"line":2987},[49,53644,3441],{"class":66},[49,53646,53647,53650,53652],{"class":51,"line":3004},[49,53648,53649],{"class":66},"    document.",[49,53651,53170],{"class":62},[49,53653,53654],{"class":66},"(arr)\n",[49,53656,53657,53660,53662],{"class":51,"line":3009},[49,53658,53659],{"class":66},"  \u003C\u002F",[49,53661,53055],{"class":147},[49,53663,52554],{"class":66},[49,53665,53666,53668,53670],{"class":51,"line":3014},[49,53667,53027],{"class":66},[49,53669,53042],{"class":147},[49,53671,52554],{"class":66},[49,53673,53674],{"class":51,"line":3019},[49,53675,3654],{"emptyLinePlaceholder":1330},[49,53677,53678,53680,53682],{"class":51,"line":3033},[49,53679,53027],{"class":66},[49,53681,51883],{"class":147},[49,53683,52554],{"class":66},[19,53685,53686],{},[174,53687],{"alt":44,"src":53688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,53690,53691],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,53693,53694],{},"let arr = [4, 2, 5, 1, 3]",[19,53696,53697],{},"\u002F\u002F 1.升序排列写法",[19,53699,53700],{},"arr.sort(function (a, b) {",[19,53702,53703],{},"return a - b",[19,53705,53706],{},"})",[19,53708,53709],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,53711,53712],{},"\u002F\u002F 降序排列写法",[19,53714,53700],{},[19,53716,53717],{},"return b - a",[19,53719,53706],{},[19,53721,53722],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53724,53726],{"id":53725},"_29-函数","2.9 函数",[19,53728,53729],{},[174,53730],{"alt":44,"src":53731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,53733,53734],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,53736,53737],{},"函数的声明用function",[19,53739,53740],{},"函数里边可以嵌套函数",[183,53742,53744],{"id":53743},"_291-函数传参","2.9.1 函数传参",[19,53746,53747],{},[174,53748],{"alt":44,"src":53749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,53751,53752],{},[174,53753],{"alt":44,"src":53754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[23,53756,53757,53760,53763,53766,53769,53772],{},[26,53758,53759],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[26,53761,53762],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[26,53764,53765],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[26,53767,53768],{},"开发中尽量保持形参和实参个数一致",[26,53770,53771],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[26,53773,53774],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53776,53777],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[183,53779,53781],{"id":53780},"_292-函数的返回值","2.9.2 函数的返回值",[19,53783,53784],{},[174,53785],{"alt":44,"src":53786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53788,53789],{},[174,53790],{"alt":44,"src":53791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[23,53793,53794,53797,53800,53803,53806],{},[26,53795,53796],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[26,53798,53799],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[26,53801,53802],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[26,53804,53805],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[26,53807,53808],{},"断点调试:进入函数内部看执行过程F11",[183,53810,53812],{"id":53811},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[39,53814,53816],{"className":51881,"code":53815,"language":51883,"meta":44,"style":44},"    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",[46,53817,53818,53823,53828,53832,53837],{"__ignoreMap":44},[49,53819,53820],{"class":51,"line":52},[49,53821,53822],{"class":66},"    function fn(a, b) {\n",[49,53824,53825],{"class":51,"line":59},[49,53826,53827],{"class":66},"      console.log(a + b);\n",[49,53829,53830],{"class":51,"line":70},[49,53831,3441],{"class":66},[49,53833,53834],{"class":51,"line":86},[49,53835,53836],{"class":66},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[49,53838,53839],{"class":51,"line":98},[49,53840,53841],{"class":66},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[183,53843,53845],{"id":53844},"_294-作用域","2.9.4 作用域",[23,53847,53848,53854,53859,53862,53865],{},[26,53849,53850,53851],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[485,53852,53853],{},"作用域",[26,53855,53856],{},[485,53857,53858],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[26,53860,53861],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[26,53863,53864],{},"函数内部可以直接所使用全局变量",[26,53866,53867],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53869,551],{},[39,53871,53873],{"className":51881,"code":53872,"language":51883,"meta":44,"style":44},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[46,53874,53875,53880,53885,53889,53894,53899,53904],{"__ignoreMap":44},[49,53876,53877],{"class":51,"line":52},[49,53878,53879],{"class":66},"    function fun() {\n",[49,53881,53882],{"class":51,"line":59},[49,53883,53884],{"class":66},"      num = 10\n",[49,53886,53887],{"class":51,"line":70},[49,53888,3441],{"class":66},[49,53890,53891],{"class":51,"line":86},[49,53892,53893],{"class":66},"    fun()\n",[49,53895,53896],{"class":51,"line":98},[49,53897,53898],{"class":66},"    console.log(num)\n",[49,53900,53901],{"class":51,"line":121},[49,53902,53903],{"class":66},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[49,53905,53906],{"class":51,"line":134},[49,53907,53908],{"class":66},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[23,53910,53911,53914],{},[26,53912,53913],{},"函数内部的形参可以看做是局部变量",[26,53915,53916],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,53918,53919,53920],{},"变量访问原则： ",[485,53921,53922],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[183,53924,53926],{"id":53925},"_295-匿名函数","2.9.5 匿名函数",[19,53928,53929],{},"函数可以分为具名函数和匿名函数",[19,53931,53932],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[591,53934,53935],{},[26,53936,53937],{},"函数表达式",[19,53939,53940],{},[174,53941],{"alt":44,"src":53942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,53944,53945],{},"里边也可以写参数",[19,53947,53948],{},"具名函数调用位置可以随意调整；",[19,53950,53951],{},"匿名函数函数表达式形式只能在声明后才可以使用",[591,53953,53954],{"start":59},[26,53955,53956],{},"立即执行函数",[19,53958,53959],{},[174,53960],{"alt":44,"src":53961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,53963,53964],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,53966,53967],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53969,53970],{},"(function () {})();",[19,53972,53973],{},"不要落下最后的;",[19,53975,53976],{},"立即执行函数必须要加;",[19,53978,53979],{},"分号写前写后都没问题",[19,53981,53982],{},"写前：",[19,53984,53985],{},"(function() {})()",[19,53987,53988],{},";(function () {})();",[19,53990,53991],{},"写后:",[19,53993,53994],{},"(function() {})();",[19,53996,53970],{},[19,53998,53999],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54001,54002],{},"还有一种写法：",[19,54004,54005],{},"(function(){}());",[19,54007,54008],{},"或者:",[19,54010,54011],{},"!function(){}();",[19,54013,54014],{},"立即执行函数有时候也是可以加名字的：",[19,54016,54017],{},"(function flexible(window,document) {}(window,document));",[19,54019,54020],{},"省一些调用方法",[183,54022,54024],{"id":54023},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54026,54027],{},[174,54028],{"alt":44,"src":54029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54031,54032],{},"这样就不用非得给x,y初始化了",[19,54034,54035],{},[174,54036],{"alt":44,"src":54037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54039,54040],{},"代码执行时先看左边",[19,54042,54043],{},"例如：console.log(false && 3+5)",[19,54045,54046],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54048,54049],{},"&&都是真时，就返回最后一个真值",[19,54051,54052],{},"console.log(11 && 22)",[19,54054,54055],{},"输出22",[19,54057,54058],{},"逻辑与：遇真则真",[19,54060,551],{},[19,54062,54063],{},"let age=1",[19,54065,54066],{},"console.log(11 || age++)",[19,54068,54069],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54071,54072],{},"console.log(11 || 22)",[19,54074,54075],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54077,54078],{},"||如果都是假的话，就取最后一个假的值了",[183,54080,54082],{"id":54081},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54084,54085],{},"显示转换：",[19,54087,54088,54091,54092],{},[485,54089,54090],{},"记忆","： ",[485,54093,54094],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54096,54097],{},"空字符串为假，其他字符串全为真",[19,54099,54100],{},[174,54101],{"alt":44,"src":54102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54104,54105],{},"隐式转换：",[19,54107,54108],{},[174,54109],{"alt":44,"src":54110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54112,54113],{},"隐式转换:",[19,54115,54116],{},"null+3=3",[19,54118,54119],{},"undefined+3=NaN",[19,54121,54122],{},"null==undefined 输出true,他两个都当0看",[19,54124,54125],{},"null===undefined 输出false",[19,54127,54128],{},"undefined做任何操作都是NaN",[19,54130,54131],{},"NaN不等于NaN，NaN表示计算错误",[14,54133,54135],{"id":54134},"_210-对象","2.10 对象",[183,54137,54139],{"id":54138},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54141,54142],{},"对象也是一种数据类型，里边的数据是无序的",[19,54144,54145],{},"对象由属性和方法组成",[19,54147,54148],{},[174,54149],{"alt":44,"src":54150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54152,54153],{},[174,54154],{"alt":44,"src":54155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54157,54158],{},[174,54159],{"alt":44,"src":54160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[183,54162,54164],{"id":54163},"_2102-对象属性","2.10.2 对象属性",[19,54166,54167],{},[174,54168],{"alt":44,"src":54169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[591,54171,54172],{},[26,54173,54174],{},"查询对象",[19,54176,54177],{},"对象名.属性 goods.uname",[19,54179,54180],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54182,54183],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54185,54186],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54188,54189],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[591,54191,54192],{"start":59},[26,54193,54194],{},"重新赋值",[19,54196,54197],{},"对象名.属性=新值",[591,54199,54200],{"start":70},[26,54201,54202],{},"增加新数据",[19,54204,54197],{},[591,54206,54207],{"start":86},[26,54208,54209],{},"删除对象中的属性",[19,54211,54212],{},"delete 对象名.属性",[183,54214,54216],{"id":54215},"_2103-对象方法","2.10.3 对象方法",[19,54218,54219],{},[174,54220],{"alt":44,"src":54221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54223,54224],{},"后边跟的是匿名函数",[19,54226,54227],{},"对象外面的叫函数；对象内部的叫方法",[19,54229,54230],{},[174,54231],{"alt":44,"src":54232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[183,54234,54236],{"id":54235},"_2104-遍历对象","2.10.4 遍历对象",[19,54238,54239],{},"理解为加括号的python字典遍历",[19,54241,54242],{},[174,54243],{"alt":44,"src":54244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54246,54247],{},"k是字符串类型",[19,54249,54250],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[39,54252,54254],{"className":51881,"code":54253,"language":51883,"meta":44,"style":44},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[46,54255,54256,54261,54266,54271,54276],{"__ignoreMap":44},[49,54257,54258],{"class":51,"line":52},[49,54259,54260],{"class":66},"   let arr = [1, 2, 3]\n",[49,54262,54263],{"class":51,"line":59},[49,54264,54265],{"class":66},"    for (let k in arr) {\n",[49,54267,54268],{"class":51,"line":70},[49,54269,54270],{"class":66},"      console.log(k)\n",[49,54272,54273],{"class":51,"line":86},[49,54274,54275],{"class":66},"      console.log(arr[k])\n",[49,54277,54278],{"class":51,"line":98},[49,54279,3441],{"class":66},[19,54281,54282],{},[174,54283],{"alt":44,"src":54284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54286,54287],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54289,54290],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54292,54293],{},"for in 得到的k是属性名",[53055,54295,54296],{},"\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,54298,54299],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[183,54301,54303],{"id":54302},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54305,54306],{},"数组中放对象信息",[39,54308,54312],{"className":54309,"code":54310,"language":54311,"meta":44,"style":44},"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",[46,54313,54314,54322,54327,54332,54337,54342,54347,54352,54357,54362,54367,54372,54377,54381,54385],{"__ignoreMap":44},[49,54315,54316,54318,54320],{"class":51,"line":52},[49,54317,2300],{"class":66},[49,54319,53055],{"class":147},[49,54321,52554],{"class":66},[49,54323,54324],{"class":51,"line":59},[49,54325,54326],{"class":66},"    let students = [\n",[49,54328,54329],{"class":51,"line":70},[49,54330,54331],{"class":66},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[49,54333,54334],{"class":51,"line":86},[49,54335,54336],{"class":66},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[49,54338,54339],{"class":51,"line":98},[49,54340,54341],{"class":66},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[49,54343,54344],{"class":51,"line":121},[49,54345,54346],{"class":66},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[49,54348,54349],{"class":51,"line":134},[49,54350,54351],{"class":66},"    ]\n",[49,54353,54354],{"class":51,"line":1085},[49,54355,54356],{"class":66},"    for (let i = 0; i \u003C students.length; i++) {\n",[49,54358,54359],{"class":51,"line":2574},[49,54360,54361],{"class":66},"      for (let k in students[i]) {\n",[49,54363,54364],{"class":51,"line":2586},[49,54365,54366],{"class":66},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[49,54368,54369],{"class":51,"line":2867},[49,54370,54371],{"class":66},"        \u002F\u002F输出每个人的名字：\n",[49,54373,54374],{"class":51,"line":2872},[49,54375,54376],{"class":66},"        \u002F\u002Fconsole.log(students[i].name)\n",[49,54378,54379],{"class":51,"line":2878},[49,54380,53640],{"class":66},[49,54382,54383],{"class":51,"line":2883},[49,54384,3441],{"class":66},[49,54386,54387,54389,54391],{"class":51,"line":2897},[49,54388,53659],{"class":66},[49,54390,53055],{"class":147},[49,54392,52554],{"class":66},[183,54394,54396],{"id":54395},"_2106-内置对象","2.10.6 内置对象",[19,54398,54399],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[591,54401,54402],{},[26,54403,54404],{},"数学对象Math",[19,54406,54407],{},[174,54408],{"alt":44,"src":54409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54411,54412],{},[1630,54413,54416],{"href":54414,"rel":54415},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25113],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54418,54419],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54421,54422],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54424,54425],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54427,54428],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54430,54431],{},"null属于对象数据类型",[591,54433,54434],{"start":59},[26,54435,54436],{},"生成任意范围随机数",[19,54438,54439],{},[174,54440],{"alt":44,"src":54441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54443,54444],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54446,54447],{},"乘以几就取不到几",[19,54449,54450],{},"取数组中的随机元素：",[19,54452,54453],{},"let arr = ['red', 'green', 'blue']",[19,54455,54456],{},"let random = Math.floor(Math.random() * arr.length)",[19,54458,54459],{},"console.log(arr[random])",[19,54461,54462],{},"这个函数得到的是全闭区间",[19,54464,54465],{},"function getRandom(N, M) {",[19,54467,54468],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,54470,620],{},[19,54472,54473],{},"console.log(getRandom(4, 8))",[183,54475,54477],{"id":54476},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,54479,54480],{},[174,54481],{"alt":44,"src":54482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,54484,54485],{},[174,54486],{"alt":44,"src":54487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,54489,54490],{},[174,54491],{"alt":44,"src":54492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,54494,54495],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,54497,54498],{},[174,54499],{"alt":44,"src":54500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,54502,54503],{},[174,54504],{"alt":44,"src":54505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,54507,54508],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,54510,54511],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,54513,54514],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1305,54516,54517],{},"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":44,"searchDepth":59,"depth":59,"links":54519},[54520,54528,54529,54530,54531,54532,54539,54543,54549,54558],{"id":51716,"depth":59,"text":51717,"children":54521},[54522,54523,54524,54525,54526,54527],{"id":51720,"depth":70,"text":51721},{"id":51737,"depth":70,"text":51738},{"id":51777,"depth":70,"text":51778},{"id":51789,"depth":70,"text":51790},{"id":51798,"depth":70,"text":51799},{"id":51846,"depth":70,"text":51847},{"id":51856,"depth":59,"text":51857},{"id":51944,"depth":59,"text":51945},{"id":51967,"depth":59,"text":51968},{"id":51979,"depth":59,"text":51980},{"id":52166,"depth":59,"text":52167,"children":54533},[54534,54535,54536,54537,54538],{"id":52170,"depth":70,"text":52171},{"id":52179,"depth":70,"text":52180},{"id":52207,"depth":70,"text":52208},{"id":52243,"depth":70,"text":52244},{"id":52268,"depth":70,"text":52269},{"id":52280,"depth":59,"text":52281,"children":54540},[54541,54542],{"id":52301,"depth":70,"text":52302},{"id":52395,"depth":70,"text":52396},{"id":52453,"depth":59,"text":52454,"children":54544},[54545,54546,54547,54548],{"id":52457,"depth":70,"text":52458},{"id":52481,"depth":70,"text":52482},{"id":52534,"depth":70,"text":52535},{"id":53339,"depth":70,"text":53340},{"id":53725,"depth":59,"text":53726,"children":54550},[54551,54552,54553,54554,54555,54556,54557],{"id":53743,"depth":70,"text":53744},{"id":53780,"depth":70,"text":53781},{"id":53811,"depth":70,"text":53812},{"id":53844,"depth":70,"text":53845},{"id":53925,"depth":70,"text":53926},{"id":54023,"depth":70,"text":54024},{"id":54081,"depth":70,"text":54082},{"id":54134,"depth":59,"text":54135,"children":54559},[54560,54561,54562,54563,54564,54565,54566],{"id":54138,"depth":70,"text":54139},{"id":54163,"depth":70,"text":54164},{"id":54215,"depth":70,"text":54216},{"id":54235,"depth":70,"text":54236},{"id":54302,"depth":70,"text":54303},{"id":54395,"depth":70,"text":54396},{"id":54476,"depth":70,"text":54477},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51708,"description":1327},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54573,"title":54574,"body":54575,"description":1327,"extension":1328,"meta":77902,"navigation":1330,"path":77903,"seo":77904,"stem":77905,"__hash__":77906},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54576,"toc":77842},[54577,54580,54583,54586,54591,54594,54597,54600,54604,54608,54614,54619,54627,54634,54637,54641,54646,54651,54656,54659,54662,54673,54676,54680,54683,54686,54691,54696,54701,54704,54707,54799,54802,54807,54810,54815,54818,54821,54826,54829,54834,54838,54841,54855,54859,54864,54867,54870,54874,54879,54882,54886,54890,54895,54899,54904,54907,54910,54913,54916,54919,54922,54927,54932,54960,54963,54966,54969,54974,54977,54980,54983,54986,54990,55019,55023,55028,55033,55036,55039,55042,55047,55161,55166,55171,55332,55337,55340,55344,55349,55354,55357,55360,55363,55366,55369,55372,55375,55378,55381,55384,55387,55390,55393,55396,55398,55401,55404,55407,55412,55416,55813,55816,55822,55826,55831,57111,57116,57119,57122,57125,57130,58326,58330,58336,58341,58344,58349,58354,58358,58362,58367,58370,58375,58378,58381,58385,59293,59296,59300,59521,59524,59527,59530,59756,59759,59983,59986,59990,59995,59998,60001,60229,60232,60265,60268,60272,60277,60281,60284,60287,60290,60293,60296,60299,60302,60307,61587,61591,61594,62686,62690,62693,62696,62699,62702,62706,62709,62712,62714,62722,64201,64205,64208,64211,64214,64423,64426,64430,64434,64439,64444,64447,64450,64455,64459,64464,64467,64576,64580,64585,64590,64593,64596,64600,64605,64610,64615,64618,64621,64632,64635,64640,64645,64648,64651,64724,64728,64733,64736,64738,64749,64753,64758,66083,66086,66089,66092,66094,66097,66100,66103,66106,66109,66112,66115,66118,66121,66124,66127,66130,66132,66134,66137,66141,67235,67238,67241,67257,67271,67274,67279,67285,67290,67294,67298,67303,67307,67312,67754,67759,67762,67766,67771,67774,67777,67781,67786,67790,67795,67800,67804,67809,67814,67817,67822,67827,67831,67836,67841,67945,67948,67952,67957,68323,68326,68329,68332,68335,68338,68341,68344,68347,69643,69647,69652,69657,69660,69663,69666,69669,69671,69676,69681,69684,69688,69693,69698,69703,69706,69709,69712,69715,69718,69723,69726,69730,69735,69740,69744,69749,69752,69757,69760,69763,69766,69769,69772,69777,69780,69783,69786,69789,69793,69798,69801,69805,69810,69813,69816,69820,69849,69852,69856,69860,69865,69869,69874,69877,69880,69883,69886,69889,69892,69895,69898,69901,69904,69907,69910,69913,69916,69920,69925,69930,69933,69937,69941,69946,69949,69953,69956,69959,69964,69969,69974,69979,69984,69987,69990,69995,70000,70004,70009,70012,70017,70020,70023,70026,70029,70034,70037,70046,70050,70055,70058,70061,70065,70068,70073,70077,70080,70086,70092,70096,70122,70125,71686,71689,72180,72183,72188,72193,72198,72202,72207,72212,72217,72221,72226,72229,72232,72235,72238,72242,72245,72250,72253,72258,72262,72267,72270,72275,72280,72285,72288,72291,72296,72301,72304,72307,72311,72314,72319,72322,72327,72330,72335,72340,72345,72348,72353,72418,72421,72432,72436,72441,72613,72617,72622,72625,72628,72631,72635,72646,72650,72653,72658,72663,72666,72669,72672,72675,72678,72680,72683,72686,72689,72694,72697,72702,72705,72709,72712,72715,72729,72733,72736,72791,72796,72799,72802,72807,72810,72814,72819,72949,72953,72958,72963,73044,73049,73053,73056,73061,73066,73072,73075,73078,73081,73085,73090,73093,73104,73108,73125,76171,76175,76178,76181,76184,76205,76209,76212,76220,76223,76228,76231,76234,76239,76244,76248,76269,76273,76278,76281,76284,76287,76290,76294,76299,76302,76306,76311,76314,76319,76322,76327,76330,76335,77538,77542,77547,77550,77555,77839],[10,54578,54574],{"id":54579},"_3web-apis",[19,54581,54582],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,54584,54585],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,54587,54588],{},[174,54589],{"alt":44,"src":54590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,54592,54593],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,54595,54596],{},"建议数组和对象使用 const 来声明",[19,54598,54599],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54601,54603],{"id":54602},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[183,54605,54607],{"id":54606},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,54609,54610,54613],{},[46,54611,54612],{},"document"," = HTML 文件解析后的对象化表示；",[19,54615,54616,54618],{},[46,54617,54612],{}," ≠ HTML 文件本身",[19,54620,54621,54626],{},[485,54622,54623],{},[46,54624,54625],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,54628,54629,54633],{},[485,54630,54631],{},[46,54632,54612],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,54635,54636],{},"document实际上为window.document的简写",[183,54638,54640],{"id":54639},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,54642,54643],{},[174,54644],{"alt":44,"src":54645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,54647,54648],{},[174,54649],{"alt":44,"src":54650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,54652,54653],{},[174,54654],{"alt":44,"src":54655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,54657,54658],{},"console.dir()",[19,54660,54661],{},"dir用来打印对象",[23,54663,54664,54667,54670],{},[26,54665,54666],{},"任何一个标签，都是一个对象",[26,54668,54669],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[26,54671,54672],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,54674,54675],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[183,54677,54679],{"id":54678},"_312-获取dom对象","3.1.2 获取DoM对象",[19,54681,54682],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,54684,54685],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,54687,54688],{},[485,54689,54690],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[591,54692,54693],{},[26,54694,54695],{},"利用CSS选择器来获取标签元素",[19,54697,54698],{},[174,54699],{"alt":44,"src":54700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,54702,54703],{},"里边的选择器必须必须加引号！！！",[19,54705,54706],{},"只选择第一个元素",[39,54708,54710],{"className":54309,"code":54709,"language":54311,"meta":44,"style":44},"\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",[46,54711,54712,54720,54741,54760,54768,54773,54778,54783,54791],{"__ignoreMap":44},[49,54713,54714,54716,54718],{"class":51,"line":52},[49,54715,2300],{"class":66},[49,54717,53042],{"class":147},[49,54719,52554],{"class":66},[49,54721,54722,54724,54726,54729,54731,54734,54737,54739],{"class":51,"line":59},[49,54723,53386],{"class":66},[49,54725,148],{"class":147},[49,54727,54728],{"class":62}," class",[49,54730,1448],{"class":66},[49,54732,54733],{"class":1505},"\"box\"",[49,54735,54736],{"class":66},">123\u003C\u002F",[49,54738,148],{"class":147},[49,54740,52554],{"class":66},[49,54742,54743,54745,54747,54749,54751,54753,54756,54758],{"class":51,"line":70},[49,54744,53386],{"class":66},[49,54746,148],{"class":147},[49,54748,54728],{"class":62},[49,54750,1448],{"class":66},[49,54752,54733],{"class":1505},[49,54754,54755],{"class":66},">456\u003C\u002F",[49,54757,148],{"class":147},[49,54759,52554],{"class":66},[49,54761,54762,54764,54766],{"class":51,"line":86},[49,54763,53386],{"class":66},[49,54765,53055],{"class":147},[49,54767,52554],{"class":66},[49,54769,54770],{"class":51,"line":98},[49,54771,54772],{"class":66},"    \u002F\u002F 1.获取匹配的第一个元素\n",[49,54774,54775],{"class":51,"line":121},[49,54776,54777],{"class":66},"    const box = document.querySelector('div')\n",[49,54779,54780],{"class":51,"line":134},[49,54781,54782],{"class":66},"    console.dir(box)\n",[49,54784,54785,54787,54789],{"class":51,"line":1085},[49,54786,53659],{"class":66},[49,54788,53055],{"class":147},[49,54790,52554],{"class":66},[49,54792,54793,54795,54797],{"class":51,"line":2574},[49,54794,53027],{"class":66},[49,54796,53042],{"class":147},[49,54798,52554],{"class":66},[19,54800,54801],{},"只选123，不选456",[19,54803,54804],{},[174,54805],{"alt":44,"src":54806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54808,54809],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54811,54812],{},[174,54813],{"alt":44,"src":54814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54816,54817],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54819,54820],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[591,54822,54823],{"start":59},[26,54824,54825],{},"其他方法来获取标签元素",[19,54827,54828],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54830,54831],{},[174,54832],{"alt":44,"src":54833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[183,54835,54837],{"id":54836},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54839,54840],{},"设置修改DOM元素内容有两种方式：",[23,54842,54843,54846,54849,54852],{},[26,54844,54845],{},"元素.innerText=''",[26,54847,54848],{},"元素.innerHTML=''",[26,54850,54851],{},"不写字符串输出数字也是可以的",[26,54853,54854],{},"元素.innerHtml=1",[525,54856,54858],{"id":54857},"_3131-innertext","3.1.3.1 innerText",[19,54860,54861],{},[174,54862],{"alt":44,"src":54863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54865,54866],{},"思路：实现了修改盒子中的内容！",[19,54868,54869],{},"它只显示纯文本，不解析标签",[525,54871,54873],{"id":54872},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54875,54876],{},[174,54877],{"alt":44,"src":54878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54880,54881],{},"相比于innerText，他的强大之处在于可以解析标签",[183,54883,54885],{"id":54884},"_314-操作元素属性","3.1.4 操作元素属性",[525,54887,54889],{"id":54888},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54891,54892],{},[174,54893],{"alt":44,"src":54894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[525,54896,54898],{"id":54897},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54900,54901],{},[174,54902],{"alt":44,"src":54903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54905,54906],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54908,54909],{},"div.style.backgroundColor = 'hotpink'",[19,54911,54912],{},"如果按照css的写法，-表示减，就会出错",[19,54914,54915],{},"body元素不需要再获取，直接用就行！！！！！！",[19,54917,54918],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,54920,54921],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,54923,54924],{},[174,54925],{"alt":44,"src":54926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,54928,54929],{},[174,54930],{"alt":44,"src":54931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[591,54933,54934,54937,54940,54943,54946,54949],{},[26,54935,54936],{},"className这个方式就是修改很多样式的时候来使用的！",[26,54938,54939],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[26,54941,54942],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[26,54944,54945],{},"className为属性名，如果还用class的话就导致与关键字冲突",[26,54947,54948],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[26,54950,54951,54952,54957],{},"解析标签的时候就变为了",[148,54953],{"className":54954},[54955,54956],"nav","box",[54958,54959],"br",{},[19,54961,54962],{},"例子：",[148,54964],{"className":54965},[54955],[53055,54967,54968],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54970,54971],{},[174,54972],{"alt":44,"src":54973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54975,54976],{},"追加和删除类名用classList",[19,54978,54979],{},"常用于类似于开关的操作",[19,54981,54982],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54984,54985],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[525,54987,54989],{"id":54988},"_3143-牢记点","3.1.4.3 牢记点",[591,54991,54992,54995,54998,55001,55004,55007,55010,55013,55016],{},[26,54993,54994],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[26,54996,54997],{},"使用style属性操作css时不要忘记引号",[26,54999,55000],{},"使用className或者classList时也不要忘记引号",[26,55002,55003],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[26,55005,55006],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[26,55008,55009],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[26,55011,55012],{},"若： let arr=['1','2',3] arr[0]=1",[26,55014,55015],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[26,55017,55018],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[183,55020,55022],{"id":55021},"_315-操作表单元素","3.1.5 操作表单元素",[591,55024,55025],{},[26,55026,55027],{},"天生的属性",[19,55029,55030],{},[174,55031],{"alt":44,"src":55032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55034,55035],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55037,55038],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55040,55041],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55043,55044],{},[174,55045],{"alt":44,"src":55046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[39,55048,55050],{"className":51881,"code":55049,"language":51883,"meta":44,"style":44},"在复选框中如果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",[46,55051,55052,55057,55088,55093,55098,55103,55108,55112,55117,55122,55139,55151,55156],{"__ignoreMap":44},[49,55053,55054],{"class":51,"line":52},[49,55055,55056],{"class":66},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[49,55058,55059,55061,55063,55066,55068,55071,55073,55075,55077,55079,55081,55083,55086],{"class":51,"line":59},[49,55060,2300],{"class":66},[49,55062,448],{"class":147},[49,55064,55065],{"class":62}," type",[49,55067,1448],{"class":66},[49,55069,55070],{"class":1505},"\"checkbox\"",[49,55072,16171],{"class":62},[49,55074,1448],{"class":66},[49,55076,8904],{"class":1505},[49,55078,16210],{"class":62},[49,55080,1448],{"class":66},[49,55082,8904],{"class":1505},[49,55084,55085],{"class":62}," checked",[49,55087,52554],{"class":66},[49,55089,55090],{"class":51,"line":70},[49,55091,55092],{"class":66},"不选的话：\n",[49,55094,55095],{"class":51,"line":86},[49,55096,55097],{"class":66},"const input = document.querySelector('input')\n",[49,55099,55100],{"class":51,"line":98},[49,55101,55102],{"class":66},"input.checked=false\n",[49,55104,55105],{"class":51,"line":121},[49,55106,55107],{"class":66},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[49,55109,55110],{"class":51,"line":134},[49,55111,3654],{"emptyLinePlaceholder":1330},[49,55113,55114],{"class":51,"line":1085},[49,55115,55116],{"class":66},"禁用按钮：\n",[49,55118,55119],{"class":51,"line":2574},[49,55120,55121],{"class":66},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[49,55123,55124,55126,55129,55132,55135,55137],{"class":51,"line":2586},[49,55125,2300],{"class":66},[49,55127,55128],{"class":147},"button",[49,55130,55131],{"class":62}," disabled",[49,55133,55134],{"class":66},">点击\u003C\u002F",[49,55136,55128],{"class":147},[49,55138,52554],{"class":66},[49,55140,55141,55143,55145,55147,55149],{"class":51,"line":2867},[49,55142,2300],{"class":66},[49,55144,55128],{"class":147},[49,55146,55134],{"class":66},[49,55148,55128],{"class":147},[49,55150,52554],{"class":66},[49,55152,55153],{"class":51,"line":2872},[49,55154,55155],{"class":66},"const bt = document.querySelector('button')\n",[49,55157,55158],{"class":51,"line":2878},[49,55159,55160],{"class":66},"bt.disabled = false\n",[591,55162,55163],{"start":59},[26,55164,55165],{},"自定义属性",[19,55167,55168],{},[174,55169],{"alt":44,"src":55170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[39,55172,55174],{"className":54309,"code":55173,"language":54311,"meta":44,"style":44},"\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",[46,55175,55176,55184,55212,55231,55250,55269,55288,55296,55301,55306,55311,55316,55324],{"__ignoreMap":44},[49,55177,55178,55180,55182],{"class":51,"line":52},[49,55179,2300],{"class":66},[49,55181,53042],{"class":147},[49,55183,52554],{"class":66},[49,55185,55186,55188,55190,55193,55195,55197,55200,55202,55205,55208,55210],{"class":51,"line":59},[49,55187,53386],{"class":66},[49,55189,148],{"class":147},[49,55191,55192],{"class":62}," data-id",[49,55194,1448],{"class":66},[49,55196,4932],{"class":1505},[49,55198,55199],{"class":62}," data-spm",[49,55201,1448],{"class":66},[49,55203,55204],{"class":1505},"\"我不知道\"",[49,55206,55207],{"class":66},">1\u003C\u002F",[49,55209,148],{"class":147},[49,55211,52554],{"class":66},[49,55213,55214,55216,55218,55220,55222,55224,55227,55229],{"class":51,"line":70},[49,55215,53386],{"class":66},[49,55217,148],{"class":147},[49,55219,55192],{"class":62},[49,55221,1448],{"class":66},[49,55223,4955],{"class":1505},[49,55225,55226],{"class":66},">2\u003C\u002F",[49,55228,148],{"class":147},[49,55230,52554],{"class":66},[49,55232,55233,55235,55237,55239,55241,55243,55246,55248],{"class":51,"line":86},[49,55234,53386],{"class":66},[49,55236,148],{"class":147},[49,55238,55192],{"class":62},[49,55240,1448],{"class":66},[49,55242,4968],{"class":1505},[49,55244,55245],{"class":66},">3\u003C\u002F",[49,55247,148],{"class":147},[49,55249,52554],{"class":66},[49,55251,55252,55254,55256,55258,55260,55262,55265,55267],{"class":51,"line":98},[49,55253,53386],{"class":66},[49,55255,148],{"class":147},[49,55257,55192],{"class":62},[49,55259,1448],{"class":66},[49,55261,4981],{"class":1505},[49,55263,55264],{"class":66},">4\u003C\u002F",[49,55266,148],{"class":147},[49,55268,52554],{"class":66},[49,55270,55271,55273,55275,55277,55279,55281,55284,55286],{"class":51,"line":121},[49,55272,53386],{"class":66},[49,55274,148],{"class":147},[49,55276,55192],{"class":62},[49,55278,1448],{"class":66},[49,55280,5002],{"class":1505},[49,55282,55283],{"class":66},">5\u003C\u002F",[49,55285,148],{"class":147},[49,55287,52554],{"class":66},[49,55289,55290,55292,55294],{"class":51,"line":134},[49,55291,53386],{"class":66},[49,55293,53055],{"class":147},[49,55295,52554],{"class":66},[49,55297,55298],{"class":51,"line":1085},[49,55299,55300],{"class":66},"    const one = document.querySelector('div')\n",[49,55302,55303],{"class":51,"line":2574},[49,55304,55305],{"class":66},"    console.log(one.dataset)\n",[49,55307,55308],{"class":51,"line":2586},[49,55309,55310],{"class":66},"    console.log(one.dataset.id)\n",[49,55312,55313],{"class":51,"line":2867},[49,55314,55315],{"class":66},"    console.log(one.dataset.spm)\n",[49,55317,55318,55320,55322],{"class":51,"line":2872},[49,55319,53659],{"class":66},[49,55321,53055],{"class":147},[49,55323,52554],{"class":66},[49,55325,55326,55328,55330],{"class":51,"line":2878},[49,55327,53027],{"class":66},[49,55329,53042],{"class":147},[49,55331,52554],{"class":66},[19,55333,55334],{},[174,55335],{"alt":44,"src":55336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55338,55339],{},"document.querySelector选择的是第一个对象（元素）",[183,55341,55343],{"id":55342},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55345,55346],{},[174,55347],{"alt":44,"src":55348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55350,55351],{},[174,55352],{"alt":44,"src":55353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55355,55356],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53055,55358,55359],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55361,55362],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53055,55364,55365],{},"\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,55367,55368],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55370,55371],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55373,55374],{},"单位为毫秒！！！",[19,55376,55377],{},"可以搭配匿名函数来用！！！",[19,55379,55380],{},"setInterval(function () {",[19,55382,55383],{},"alert('两秒执行一次')",[19,55385,55386],{},"}, 2000)",[19,55388,55389],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55391,55392],{},"function fn() {",[19,55394,55395],{},"document.write(1)",[19,55397,620],{},[19,55399,55400],{},"setInterval(fn, 1000)",[19,55402,55403],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55405,55406],{},"setInterval('fn()', 1000)",[19,55408,55409],{},[174,55410],{"alt":44,"src":55411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[525,55413,55415],{"id":55414},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[39,55417,55419],{"className":51881,"code":55418,"language":51883,"meta":44,"style":44},"\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",[46,55420,55421,55431,55445,55449,55457,55471,55491,55503,55511,55515,55523,55560,55565,55570,55575,55583,55591,55613,55621,55626,55648,55653,55658,55669,55674,55694,55702,55717,55732,55743,55748,55758,55768,55772,55781,55785,55793,55801,55805],{"__ignoreMap":44},[49,55422,55423,55425,55427,55429],{"class":51,"line":52},[49,55424,52545],{"class":66},[49,55426,52548],{"class":147},[49,55428,52551],{"class":62},[49,55430,52554],{"class":66},[49,55432,55433,55435,55437,55439,55441,55443],{"class":51,"line":59},[49,55434,2300],{"class":66},[49,55436,51883],{"class":147},[49,55438,52563],{"class":62},[49,55440,1448],{"class":66},[49,55442,52568],{"class":1505},[49,55444,52554],{"class":66},[49,55446,55447],{"class":51,"line":70},[49,55448,3654],{"emptyLinePlaceholder":1330},[49,55450,55451,55453,55455],{"class":51,"line":86},[49,55452,2300],{"class":66},[49,55454,52581],{"class":147},[49,55456,52554],{"class":66},[49,55458,55459,55461,55463,55465,55467,55469],{"class":51,"line":98},[49,55460,53386],{"class":66},[49,55462,52591],{"class":147},[49,55464,52594],{"class":62},[49,55466,1448],{"class":66},[49,55468,52599],{"class":1505},[49,55470,52554],{"class":66},[49,55472,55473,55475,55477,55479,55481,55483,55485,55487,55489],{"class":51,"line":121},[49,55474,53386],{"class":66},[49,55476,52591],{"class":147},[49,55478,16171],{"class":62},[49,55480,1448],{"class":66},[49,55482,52638],{"class":1505},[49,55484,52618],{"class":62},[49,55486,1448],{"class":66},[49,55488,52645],{"class":1505},[49,55490,52554],{"class":66},[49,55492,55493,55495,55497,55499,55501],{"class":51,"line":134},[49,55494,53386],{"class":66},[49,55496,52654],{"class":147},[49,55498,52657],{"class":66},[49,55500,52654],{"class":147},[49,55502,52554],{"class":66},[49,55504,55505,55507,55509],{"class":51,"line":1085},[49,55506,53027],{"class":66},[49,55508,52581],{"class":147},[49,55510,52554],{"class":66},[49,55512,55513],{"class":51,"line":2574},[49,55514,3654],{"emptyLinePlaceholder":1330},[49,55516,55517,55519,55521],{"class":51,"line":2586},[49,55518,2300],{"class":66},[49,55520,53042],{"class":147},[49,55522,52554],{"class":66},[49,55524,55525,55527,55530,55532,55534,55536,55538,55540,55542,55545,55547,55550,55553,55555,55558],{"class":51,"line":2867},[49,55526,53386],{"class":66},[49,55528,55529],{"class":147},"textarea",[49,55531,16171],{"class":62},[49,55533,1448],{"class":66},[49,55535,8904],{"class":1505},[49,55537,16210],{"class":62},[49,55539,1448],{"class":66},[49,55541,8904],{"class":1505},[49,55543,55544],{"class":62}," cols",[49,55546,1448],{"class":66},[49,55548,55549],{"class":1505},"\"30\"",[49,55551,55552],{"class":62}," rows",[49,55554,1448],{"class":66},[49,55556,55557],{"class":1505},"\"10\"",[49,55559,52554],{"class":66},[49,55561,55562],{"class":51,"line":2872},[49,55563,55564],{"class":66},"        用户注册协议\n",[49,55566,55567],{"class":51,"line":2878},[49,55568,55569],{"class":66},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[49,55571,55572],{"class":51,"line":2883},[49,55573,55574],{"class":66},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[49,55576,55577,55579,55581],{"class":51,"line":2897},[49,55578,53018],{"class":66},[49,55580,55529],{"class":147},[49,55582,52554],{"class":66},[49,55584,55585,55587,55589],{"class":51,"line":2902},[49,55586,53386],{"class":66},[49,55588,54958],{"class":147},[49,55590,52554],{"class":66},[49,55592,55593,55595,55597,55599,55601,55604,55606,55609,55611],{"class":51,"line":2908},[49,55594,53386],{"class":66},[49,55596,55128],{"class":147},[49,55598,54728],{"class":62},[49,55600,1448],{"class":66},[49,55602,55603],{"class":1505},"\"btn\"",[49,55605,55131],{"class":62},[49,55607,55608],{"class":66},">我已经阅读用户协议(5)\u003C\u002F",[49,55610,55128],{"class":147},[49,55612,52554],{"class":66},[49,55614,55615,55617,55619],{"class":51,"line":2929},[49,55616,53386],{"class":66},[49,55618,53055],{"class":147},[49,55620,52554],{"class":66},[49,55622,55623],{"class":51,"line":2934},[49,55624,55625],{"class":55},"    \u002F\u002F 1. 获取元素\n",[49,55627,55628,55630,55633,55635,55638,55641,55643,55646],{"class":51,"line":2948},[49,55629,12473],{"class":109},[49,55631,55632],{"class":73}," btn",[49,55634,14816],{"class":109},[49,55636,55637],{"class":66}," document.",[49,55639,55640],{"class":62},"querySelector",[49,55642,1403],{"class":66},[49,55644,55645],{"class":1505},"'.btn'",[49,55647,1409],{"class":66},[49,55649,55650],{"class":51,"line":2953},[49,55651,55652],{"class":55},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[49,55654,55655],{"class":51,"line":2982},[49,55656,55657],{"class":55},"    \u002F\u002F 2. 倒计时\n",[49,55659,55660,55662,55664,55666],{"class":51,"line":2987},[49,55661,53461],{"class":109},[49,55663,10690],{"class":66},[49,55665,1448],{"class":109},[49,55667,55668],{"class":73}," 5\n",[49,55670,55671],{"class":51,"line":3004},[49,55672,55673],{"class":55},"    \u002F\u002F 2.1 开启定时器\n",[49,55675,55676,55678,55681,55683,55686,55688,55691],{"class":51,"line":3009},[49,55677,53461],{"class":109},[49,55679,55680],{"class":66}," n ",[49,55682,1448],{"class":109},[49,55684,55685],{"class":62}," setInterval",[49,55687,1403],{"class":66},[49,55689,55690],{"class":109},"function",[49,55692,55693],{"class":66}," () {\n",[49,55695,55696,55699],{"class":51,"line":3014},[49,55697,55698],{"class":66},"      i",[49,55700,55701],{"class":109},"--\n",[49,55703,55704,55707,55709,55712,55714],{"class":51,"line":3019},[49,55705,55706],{"class":66},"      btn.innerHTML ",[49,55708,1448],{"class":109},[49,55710,55711],{"class":1505}," `我已经阅读用户协议(${",[49,55713,1833],{"class":66},[49,55715,55716],{"class":1505},"})`\n",[49,55718,55719,55722,55725,55728,55730],{"class":51,"line":3033},[49,55720,55721],{"class":109},"      if",[49,55723,55724],{"class":66}," (i ",[49,55726,55727],{"class":109},"===",[49,55729,5347],{"class":73},[49,55731,13694],{"class":66},[49,55733,55734,55737,55740],{"class":51,"line":3038},[49,55735,55736],{"class":62},"        clearInterval",[49,55738,55739],{"class":66},"(n)  ",[49,55741,55742],{"class":55},"\u002F\u002F 关闭定时器\n",[49,55744,55745],{"class":51,"line":3831},[49,55746,55747],{"class":55},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[49,55749,55750,55753,55755],{"class":51,"line":3845},[49,55751,55752],{"class":66},"        btn.disabled ",[49,55754,1448],{"class":109},[49,55756,55757],{"class":73}," false\n",[49,55759,55760,55763,55765],{"class":51,"line":3853},[49,55761,55762],{"class":66},"        btn.innerHTML ",[49,55764,1448],{"class":109},[49,55766,55767],{"class":1505}," '同意'\n",[49,55769,55770],{"class":51,"line":3858},[49,55771,53640],{"class":66},[49,55773,55774,55777,55779],{"class":51,"line":3864},[49,55775,55776],{"class":66},"    }, ",[49,55778,7662],{"class":73},[49,55780,1409],{"class":66},[49,55782,55783],{"class":51,"line":3870},[49,55784,3654],{"emptyLinePlaceholder":1330},[49,55786,55787,55789,55791],{"class":51,"line":3875},[49,55788,53659],{"class":66},[49,55790,53055],{"class":147},[49,55792,52554],{"class":66},[49,55794,55795,55797,55799],{"class":51,"line":9200},[49,55796,53027],{"class":66},[49,55798,53042],{"class":147},[49,55800,52554],{"class":66},[49,55802,55803],{"class":51,"line":9224},[49,55804,3654],{"emptyLinePlaceholder":1330},[49,55806,55807,55809,55811],{"class":51,"line":9229},[49,55808,53027],{"class":66},[49,55810,51883],{"class":147},[49,55812,52554],{"class":66},[19,55814,55815],{},"不要一直想着用死循环,避免死循环",[19,55817,55818,55821],{},[46,55819,55820],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[525,55823,55825],{"id":55824},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[591,55827,55828],{},[26,55829,55830],{},"法1",[39,55832,55834],{"className":51881,"code":55833,"language":51883,"meta":44,"style":44},"\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",[46,55835,55836,55846,55860,55864,55872,55886,55906,55918,55926,55932,55943,55954,55958,55962,55969,55980,55984,55988,55995,56006,56020,56033,56047,56051,56055,56062,56073,56084,56095,56107,56119,56131,56135,56139,56147,56157,56170,56182,56195,56199,56203,56210,56220,56232,56244,56255,56266,56276,56288,56300,56304,56308,56317,56329,56341,56369,56382,56386,56390,56397,56408,56412,56420,56428,56432,56440,56454,56469,56493,56501,56516,56529,56537,56558,56570,56582,56594,56606,56618,56630,56642,56651,56659,56667,56675,56687,56710,56729,56748,56767,56786,56805,56824,56844,56848,56868,56887,56907,56928,56939,56956,56966,56976,56986,56991,56996,57001,57006,57031,57044,57048,57071,57075,57083,57091,57099,57103],{"__ignoreMap":44},[49,55837,55838,55840,55842,55844],{"class":51,"line":52},[49,55839,52545],{"class":66},[49,55841,52548],{"class":147},[49,55843,52551],{"class":62},[49,55845,52554],{"class":66},[49,55847,55848,55850,55852,55854,55856,55858],{"class":51,"line":59},[49,55849,2300],{"class":66},[49,55851,51883],{"class":147},[49,55853,52563],{"class":62},[49,55855,1448],{"class":66},[49,55857,52568],{"class":1505},[49,55859,52554],{"class":66},[49,55861,55862],{"class":51,"line":70},[49,55863,3654],{"emptyLinePlaceholder":1330},[49,55865,55866,55868,55870],{"class":51,"line":86},[49,55867,2300],{"class":66},[49,55869,52581],{"class":147},[49,55871,52554],{"class":66},[49,55873,55874,55876,55878,55880,55882,55884],{"class":51,"line":98},[49,55875,53386],{"class":66},[49,55877,52591],{"class":147},[49,55879,52594],{"class":62},[49,55881,1448],{"class":66},[49,55883,52599],{"class":1505},[49,55885,52554],{"class":66},[49,55887,55888,55890,55892,55894,55896,55898,55900,55902,55904],{"class":51,"line":121},[49,55889,53386],{"class":66},[49,55891,52591],{"class":147},[49,55893,16171],{"class":62},[49,55895,1448],{"class":66},[49,55897,52638],{"class":1505},[49,55899,52618],{"class":62},[49,55901,1448],{"class":66},[49,55903,52645],{"class":1505},[49,55905,52554],{"class":66},[49,55907,55908,55910,55912,55914,55916],{"class":51,"line":134},[49,55909,53386],{"class":66},[49,55911,52654],{"class":147},[49,55913,52657],{"class":66},[49,55915,52654],{"class":147},[49,55917,52554],{"class":66},[49,55919,55920,55922,55924],{"class":51,"line":1085},[49,55921,53386],{"class":66},[49,55923,1305],{"class":147},[49,55925,52554],{"class":66},[49,55927,55928,55930],{"class":51,"line":2574},[49,55929,7655],{"class":147},[49,55931,67],{"class":66},[49,55933,55934,55937,55939,55941],{"class":51,"line":2586},[49,55935,55936],{"class":73},"      padding",[49,55938,77],{"class":66},[49,55940,80],{"class":73},[49,55942,83],{"class":66},[49,55944,55945,55948,55950,55952],{"class":51,"line":2867},[49,55946,55947],{"class":73},"      margin",[49,55949,77],{"class":66},[49,55951,80],{"class":73},[49,55953,83],{"class":66},[49,55955,55956],{"class":51,"line":2872},[49,55957,3441],{"class":66},[49,55959,55960],{"class":51,"line":2878},[49,55961,3654],{"emptyLinePlaceholder":1330},[49,55963,55964,55967],{"class":51,"line":2883},[49,55965,55966],{"class":147},"    li",[49,55968,67],{"class":66},[49,55970,55971,55974,55976,55978],{"class":51,"line":2897},[49,55972,55973],{"class":73},"      list-style",[49,55975,77],{"class":66},[49,55977,460],{"class":73},[49,55979,83],{"class":66},[49,55981,55982],{"class":51,"line":2902},[49,55983,3441],{"class":66},[49,55985,55986],{"class":51,"line":2908},[49,55987,3654],{"emptyLinePlaceholder":1330},[49,55989,55990,55993],{"class":51,"line":2929},[49,55991,55992],{"class":62},"    .box",[49,55994,67],{"class":66},[49,55996,55997,56000,56002,56004],{"class":51,"line":2934},[49,55998,55999],{"class":73},"      position",[49,56001,77],{"class":66},[49,56003,850],{"class":73},[49,56005,83],{"class":66},[49,56007,56008,56011,56013,56016,56018],{"class":51,"line":2948},[49,56009,56010],{"class":73},"      width",[49,56012,77],{"class":66},[49,56014,56015],{"class":73},"976",[49,56017,110],{"class":109},[49,56019,83],{"class":66},[49,56021,56022,56025,56027,56029,56031],{"class":51,"line":2953},[49,56023,56024],{"class":73},"      height",[49,56026,77],{"class":66},[49,56028,2795],{"class":73},[49,56030,110],{"class":109},[49,56032,83],{"class":66},[49,56034,56035,56037,56039,56041,56043,56045],{"class":51,"line":2982},[49,56036,55947],{"class":73},[49,56038,77],{"class":66},[49,56040,1703],{"class":73},[49,56042,110],{"class":109},[49,56044,1077],{"class":73},[49,56046,83],{"class":66},[49,56048,56049],{"class":51,"line":2987},[49,56050,3441],{"class":66},[49,56052,56053],{"class":51,"line":3004},[49,56054,3654],{"emptyLinePlaceholder":1330},[49,56056,56057,56060],{"class":51,"line":3009},[49,56058,56059],{"class":62},"    .slider-footer",[49,56061,67],{"class":66},[49,56063,56064,56066,56068,56071],{"class":51,"line":3014},[49,56065,55999],{"class":73},[49,56067,77],{"class":66},[49,56069,56070],{"class":73},"absolute",[49,56072,83],{"class":66},[49,56074,56075,56078,56080,56082],{"class":51,"line":3019},[49,56076,56077],{"class":73},"      left",[49,56079,77],{"class":66},[49,56081,80],{"class":73},[49,56083,83],{"class":66},[49,56085,56086,56089,56091,56093],{"class":51,"line":3033},[49,56087,56088],{"class":73},"      bottom",[49,56090,77],{"class":66},[49,56092,80],{"class":73},[49,56094,83],{"class":66},[49,56096,56097,56099,56101,56103,56105],{"class":51,"line":3038},[49,56098,56010],{"class":73},[49,56100,77],{"class":66},[49,56102,1703],{"class":73},[49,56104,1720],{"class":109},[49,56106,83],{"class":66},[49,56108,56109,56111,56113,56115,56117],{"class":51,"line":3831},[49,56110,56024],{"class":73},[49,56112,77],{"class":66},[49,56114,1966],{"class":73},[49,56116,1720],{"class":109},[49,56118,83],{"class":66},[49,56120,56121,56124,56126,56129],{"class":51,"line":3845},[49,56122,56123],{"class":73},"      background-color",[49,56125,77],{"class":66},[49,56127,56128],{"class":73},"skyblue",[49,56130,83],{"class":66},[49,56132,56133],{"class":51,"line":3853},[49,56134,3441],{"class":66},[49,56136,56137],{"class":51,"line":3858},[49,56138,3654],{"emptyLinePlaceholder":1330},[49,56140,56141,56143,56145],{"class":51,"line":3864},[49,56142,56059],{"class":62},[49,56144,8077],{"class":147},[49,56146,67],{"class":66},[49,56148,56149,56151,56153,56155],{"class":51,"line":3870},[49,56150,55999],{"class":73},[49,56152,77],{"class":66},[49,56154,56070],{"class":73},[49,56156,83],{"class":66},[49,56158,56159,56162,56164,56166,56168],{"class":51,"line":3875},[49,56160,56161],{"class":73},"      font-size",[49,56163,77],{"class":66},[49,56165,2291],{"class":73},[49,56167,110],{"class":109},[49,56169,83],{"class":66},[49,56171,56172,56174,56176,56178,56180],{"class":51,"line":9200},[49,56173,56077],{"class":73},[49,56175,77],{"class":66},[49,56177,875],{"class":73},[49,56179,110],{"class":109},[49,56181,83],{"class":66},[49,56183,56184,56187,56189,56191,56193],{"class":51,"line":9224},[49,56185,56186],{"class":73},"      top",[49,56188,77],{"class":66},[49,56190,1711],{"class":73},[49,56192,110],{"class":109},[49,56194,83],{"class":66},[49,56196,56197],{"class":51,"line":9229},[49,56198,3441],{"class":66},[49,56200,56201],{"class":51,"line":9235},[49,56202,3654],{"emptyLinePlaceholder":1330},[49,56204,56205,56208],{"class":51,"line":9262},[49,56206,56207],{"class":147},"    ul",[49,56209,67],{"class":66},[49,56211,56212,56214,56216,56218],{"class":51,"line":9267},[49,56213,55999],{"class":73},[49,56215,77],{"class":66},[49,56217,56070],{"class":73},[49,56219,83],{"class":66},[49,56221,56222,56224,56226,56228,56230],{"class":51,"line":9273},[49,56223,56186],{"class":73},[49,56225,77],{"class":66},[49,56227,2171],{"class":73},[49,56229,110],{"class":109},[49,56231,83],{"class":66},[49,56233,56234,56236,56238,56240,56242],{"class":51,"line":9285},[49,56235,56077],{"class":73},[49,56237,77],{"class":66},[49,56239,875],{"class":73},[49,56241,110],{"class":109},[49,56243,83],{"class":66},[49,56245,56246,56249,56251,56253],{"class":51,"line":9297},[49,56247,56248],{"class":73},"      display",[49,56250,77],{"class":66},[49,56252,52723],{"class":73},[49,56254,83],{"class":66},[49,56256,56257,56260,56262,56264],{"class":51,"line":9309},[49,56258,56259],{"class":73},"      justify-content",[49,56261,77],{"class":66},[49,56263,52910],{"class":73},[49,56265,83],{"class":66},[49,56267,56268,56270,56272,56274],{"class":51,"line":10968},[49,56269,55999],{"class":73},[49,56271,77],{"class":66},[49,56273,56070],{"class":73},[49,56275,83],{"class":66},[49,56277,56278,56280,56282,56284,56286],{"class":51,"line":10993},[49,56279,56010],{"class":73},[49,56281,77],{"class":66},[49,56283,5246],{"class":73},[49,56285,110],{"class":109},[49,56287,83],{"class":66},[49,56289,56290,56292,56294,56296,56298],{"class":51,"line":11016},[49,56291,56024],{"class":73},[49,56293,77],{"class":66},[49,56295,875],{"class":73},[49,56297,110],{"class":109},[49,56299,83],{"class":66},[49,56301,56302],{"class":51,"line":11040},[49,56303,3441],{"class":66},[49,56305,56306],{"class":51,"line":11045},[49,56307,3654],{"emptyLinePlaceholder":1330},[49,56309,56310,56312,56315],{"class":51,"line":11050},[49,56311,56207],{"class":147},[49,56313,56314],{"class":147}," li",[49,56316,67],{"class":66},[49,56318,56319,56321,56323,56325,56327],{"class":51,"line":11055},[49,56320,56010],{"class":73},[49,56322,77],{"class":66},[49,56324,875],{"class":73},[49,56326,110],{"class":109},[49,56328,83],{"class":66},[49,56330,56331,56333,56335,56337,56339],{"class":51,"line":11064},[49,56332,56024],{"class":73},[49,56334,77],{"class":66},[49,56336,875],{"class":73},[49,56338,110],{"class":109},[49,56340,83],{"class":66},[49,56342,56343,56345,56347,56350,56352,56354,56356,56358,56360,56362,56364,56367],{"class":51,"line":11069},[49,56344,56123],{"class":73},[49,56346,77],{"class":66},[49,56348,56349],{"class":73},"rgba",[49,56351,1403],{"class":66},[49,56353,80],{"class":73},[49,56355,13687],{"class":66},[49,56357,80],{"class":73},[49,56359,13687],{"class":66},[49,56361,80],{"class":73},[49,56363,13687],{"class":66},[49,56365,56366],{"class":73},".4",[49,56368,3973],{"class":66},[49,56370,56371,56374,56376,56378,56380],{"class":51,"line":11075},[49,56372,56373],{"class":73},"      border-radius",[49,56375,77],{"class":66},[49,56377,106],{"class":73},[49,56379,110],{"class":109},[49,56381,83],{"class":66},[49,56383,56384],{"class":51,"line":11096},[49,56385,3441],{"class":66},[49,56387,56388],{"class":51,"line":11102},[49,56389,3654],{"emptyLinePlaceholder":1330},[49,56391,56392,56395],{"class":51,"line":11116},[49,56393,56394],{"class":62},"    .activate",[49,56396,67],{"class":66},[49,56398,56399,56401,56403,56406],{"class":51,"line":11122},[49,56400,56123],{"class":73},[49,56402,77],{"class":66},[49,56404,56405],{"class":73},"#f7f7f7",[49,56407,83],{"class":66},[49,56409,56410],{"class":51,"line":11149},[49,56411,3441],{"class":66},[49,56413,56414,56416,56418],{"class":51,"line":11158},[49,56415,53659],{"class":66},[49,56417,1305],{"class":147},[49,56419,52554],{"class":66},[49,56421,56422,56424,56426],{"class":51,"line":11164},[49,56423,53027],{"class":66},[49,56425,52581],{"class":147},[49,56427,52554],{"class":66},[49,56429,56430],{"class":51,"line":11172},[49,56431,3654],{"emptyLinePlaceholder":1330},[49,56433,56434,56436,56438],{"class":51,"line":11177},[49,56435,2300],{"class":66},[49,56437,53042],{"class":147},[49,56439,52554],{"class":66},[49,56441,56442,56444,56446,56448,56450,56452],{"class":51,"line":17854},[49,56443,53386],{"class":66},[49,56445,148],{"class":147},[49,56447,54728],{"class":62},[49,56449,1448],{"class":66},[49,56451,54733],{"class":1505},[49,56453,52554],{"class":66},[49,56455,56456,56458,56460,56462,56464,56467],{"class":51,"line":17860},[49,56457,52588],{"class":66},[49,56459,148],{"class":147},[49,56461,54728],{"class":62},[49,56463,1448],{"class":66},[49,56465,56466],{"class":1505},"\"slider-wrapper\"",[49,56468,52554],{"class":66},[49,56470,56471,56474,56476,56479,56481,56484,56487,56489,56491],{"class":51,"line":17883},[49,56472,56473],{"class":66},"      \u003C",[49,56475,174],{"class":147},[49,56477,56478],{"class":62}," src",[49,56480,1448],{"class":66},[49,56482,56483],{"class":1505},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[49,56485,56486],{"class":62}," alt",[49,56488,1448],{"class":66},[49,56490,8904],{"class":1505},[49,56492,52554],{"class":66},[49,56494,56495,56497,56499],{"class":51,"line":17889},[49,56496,53018],{"class":66},[49,56498,148],{"class":147},[49,56500,52554],{"class":66},[49,56502,56503,56505,56507,56509,56511,56514],{"class":51,"line":17912},[49,56504,52588],{"class":66},[49,56506,148],{"class":147},[49,56508,54728],{"class":62},[49,56510,1448],{"class":66},[49,56512,56513],{"class":1505},"\"slider-footer\"",[49,56515,52554],{"class":66},[49,56517,56518,56520,56522,56525,56527],{"class":51,"line":17926},[49,56519,56473],{"class":66},[49,56521,19],{"class":147},[49,56523,56524],{"class":66},">对人类来说会不会太超前了?\u003C\u002F",[49,56526,19],{"class":147},[49,56528,52554],{"class":66},[49,56530,56531,56533,56535],{"class":51,"line":17946},[49,56532,56473],{"class":66},[49,56534,23],{"class":147},[49,56536,52554],{"class":66},[49,56538,56539,56542,56544,56546,56548,56551,56554,56556],{"class":51,"line":17952},[49,56540,56541],{"class":66},"        \u003C",[49,56543,26],{"class":147},[49,56545,54728],{"class":62},[49,56547,1448],{"class":66},[49,56549,56550],{"class":1505},"\"activate\"",[49,56552,56553],{"class":66},">\u003C\u002F",[49,56555,26],{"class":147},[49,56557,52554],{"class":66},[49,56559,56560,56562,56564,56566,56568],{"class":51,"line":17963},[49,56561,56541],{"class":66},[49,56563,26],{"class":147},[49,56565,56553],{"class":66},[49,56567,26],{"class":147},[49,56569,52554],{"class":66},[49,56571,56572,56574,56576,56578,56580],{"class":51,"line":17986},[49,56573,56541],{"class":66},[49,56575,26],{"class":147},[49,56577,56553],{"class":66},[49,56579,26],{"class":147},[49,56581,52554],{"class":66},[49,56583,56584,56586,56588,56590,56592],{"class":51,"line":18008},[49,56585,56541],{"class":66},[49,56587,26],{"class":147},[49,56589,56553],{"class":66},[49,56591,26],{"class":147},[49,56593,52554],{"class":66},[49,56595,56596,56598,56600,56602,56604],{"class":51,"line":18013},[49,56597,56541],{"class":66},[49,56599,26],{"class":147},[49,56601,56553],{"class":66},[49,56603,26],{"class":147},[49,56605,52554],{"class":66},[49,56607,56608,56610,56612,56614,56616],{"class":51,"line":18019},[49,56609,56541],{"class":66},[49,56611,26],{"class":147},[49,56613,56553],{"class":66},[49,56615,26],{"class":147},[49,56617,52554],{"class":66},[49,56619,56620,56622,56624,56626,56628],{"class":51,"line":18033},[49,56621,56541],{"class":66},[49,56623,26],{"class":147},[49,56625,56553],{"class":66},[49,56627,26],{"class":147},[49,56629,52554],{"class":66},[49,56631,56632,56634,56636,56638,56640],{"class":51,"line":18046},[49,56633,56541],{"class":66},[49,56635,26],{"class":147},[49,56637,56553],{"class":66},[49,56639,26],{"class":147},[49,56641,52554],{"class":66},[49,56643,56644,56647,56649],{"class":51,"line":18051},[49,56645,56646],{"class":66},"      \u003C\u002F",[49,56648,23],{"class":147},[49,56650,52554],{"class":66},[49,56652,56653,56655,56657],{"class":51,"line":18065},[49,56654,53018],{"class":66},[49,56656,148],{"class":147},[49,56658,52554],{"class":66},[49,56660,56661,56663,56665],{"class":51,"line":18070},[49,56662,53659],{"class":66},[49,56664,148],{"class":147},[49,56666,52554],{"class":66},[49,56668,56669,56671,56673],{"class":51,"line":18076},[49,56670,53386],{"class":66},[49,56672,53055],{"class":147},[49,56674,52554],{"class":66},[49,56676,56677,56679,56682,56684],{"class":51,"line":18081},[49,56678,12473],{"class":109},[49,56680,56681],{"class":73}," arrImage",[49,56683,14816],{"class":109},[49,56685,56686],{"class":66}," [\n",[49,56688,56689,56692,56695,56698,56701,56704,56707],{"class":51,"line":18095},[49,56690,56691],{"class":66},"      { url: ",[49,56693,56694],{"class":1505},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[49,56696,56697],{"class":66},", title: ",[49,56699,56700],{"class":1505},"'对人类来说会不会太超前了?'",[49,56702,56703],{"class":66},", color: ",[49,56705,56706],{"class":1505},"'rgba(100,67,68)'",[49,56708,56709],{"class":66}," },\n",[49,56711,56712,56714,56717,56719,56722,56724,56727],{"class":51,"line":18100},[49,56713,56691],{"class":66},[49,56715,56716],{"class":1505},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[49,56718,56697],{"class":66},[49,56720,56721],{"class":1505},"'开启剑与雪的黑暗传说!'",[49,56723,56703],{"class":66},[49,56725,56726],{"class":1505},"'rgba(43,35,26)'",[49,56728,56709],{"class":66},[49,56730,56731,56733,56736,56738,56741,56743,56746],{"class":51,"line":18105},[49,56732,56691],{"class":66},[49,56734,56735],{"class":1505},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[49,56737,56697],{"class":66},[49,56739,56740],{"class":1505},"'真正的jo厨出现了!'",[49,56742,56703],{"class":66},[49,56744,56745],{"class":1505},"'rgba(36,31,33)'",[49,56747,56709],{"class":66},[49,56749,56750,56752,56755,56757,56760,56762,56765],{"class":51,"line":18119},[49,56751,56691],{"class":66},[49,56753,56754],{"class":1505},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[49,56756,56697],{"class":66},[49,56758,56759],{"class":1505},"'李玉刚:让世界通过b站看到东方大国文化'",[49,56761,56703],{"class":66},[49,56763,56764],{"class":1505},"'rgba(139,98,66)'",[49,56766,56709],{"class":66},[49,56768,56769,56771,56774,56776,56779,56781,56784],{"class":51,"line":18131},[49,56770,56691],{"class":66},[49,56772,56773],{"class":1505},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[49,56775,56697],{"class":66},[49,56777,56778],{"class":1505},"'快来分享你的寒假日常吧'",[49,56780,56703],{"class":66},[49,56782,56783],{"class":1505},"'rgba(67,90,92)'",[49,56785,56709],{"class":66},[49,56787,56788,56790,56793,56795,56798,56800,56803],{"class":51,"line":18136},[49,56789,56691],{"class":66},[49,56791,56792],{"class":1505},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[49,56794,56697],{"class":66},[49,56796,56797],{"class":1505},"'哔哩哔哩小年YEAR'",[49,56799,56703],{"class":66},[49,56801,56802],{"class":1505},"'rgba(166,131,143)'",[49,56804,56709],{"class":66},[49,56806,56807,56809,56812,56814,56817,56819,56822],{"class":51,"line":18149},[49,56808,56691],{"class":66},[49,56810,56811],{"class":1505},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[49,56813,56697],{"class":66},[49,56815,56816],{"class":1505},"'一站式解决你的电脑配置问题'",[49,56818,56703],{"class":66},[49,56820,56821],{"class":1505},"'rgba(53,29,25)'",[49,56823,56709],{"class":66},[49,56825,56826,56828,56831,56833,56836,56838,56841],{"class":51,"line":18154},[49,56827,56691],{"class":66},[49,56829,56830],{"class":1505},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[49,56832,56697],{"class":66},[49,56834,56835],{"class":1505},"'谁不想和小猫咪贴贴呢?'",[49,56837,56703],{"class":66},[49,56839,56840],{"class":1505},"'rgba(99,72,114)'",[49,56842,56843],{"class":66}," }\n",[49,56845,56846],{"class":51,"line":18159},[49,56847,54351],{"class":66},[49,56849,56850,56852,56855,56857,56859,56861,56863,56866],{"class":51,"line":18164},[49,56851,12473],{"class":109},[49,56853,56854],{"class":73}," img",[49,56856,14816],{"class":109},[49,56858,55637],{"class":66},[49,56860,55640],{"class":62},[49,56862,1403],{"class":66},[49,56864,56865],{"class":1505},"'.slider-wrapper img'",[49,56867,1409],{"class":66},[49,56869,56870,56872,56874,56876,56878,56880,56882,56885],{"class":51,"line":18177},[49,56871,12473],{"class":109},[49,56873,8077],{"class":73},[49,56875,14816],{"class":109},[49,56877,55637],{"class":66},[49,56879,55640],{"class":62},[49,56881,1403],{"class":66},[49,56883,56884],{"class":1505},"'.slider-footer p'",[49,56886,1409],{"class":66},[49,56888,56889,56891,56894,56896,56898,56900,56902,56905],{"class":51,"line":18182},[49,56890,12473],{"class":109},[49,56892,56893],{"class":73}," color",[49,56895,14816],{"class":109},[49,56897,55637],{"class":66},[49,56899,55640],{"class":62},[49,56901,1403],{"class":66},[49,56903,56904],{"class":1505},"'.slider-footer'",[49,56906,1409],{"class":66},[49,56908,56909,56911,56914,56916,56918,56921,56923,56926],{"class":51,"line":33881},[49,56910,12473],{"class":109},[49,56912,56913],{"class":73}," lis",[49,56915,14816],{"class":109},[49,56917,55637],{"class":66},[49,56919,56920],{"class":62},"querySelectorAll",[49,56922,1403],{"class":66},[49,56924,56925],{"class":1505},"'.slider-footer ul li'",[49,56927,1409],{"class":66},[49,56929,56930,56932,56934,56936],{"class":51,"line":33887},[49,56931,53461],{"class":109},[49,56933,10690],{"class":66},[49,56935,1448],{"class":109},[49,56937,56938],{"class":73}," 1\n",[49,56940,56941,56943,56946,56948,56950,56952,56954],{"class":51,"line":33893},[49,56942,53461],{"class":109},[49,56944,56945],{"class":66}," timer ",[49,56947,1448],{"class":109},[49,56949,55685],{"class":62},[49,56951,1403],{"class":66},[49,56953,55690],{"class":109},[49,56955,55693],{"class":66},[49,56957,56958,56961,56963],{"class":51,"line":33899},[49,56959,56960],{"class":66},"      img.src ",[49,56962,1448],{"class":109},[49,56964,56965],{"class":66}," arrImage[i].url\n",[49,56967,56968,56971,56973],{"class":51,"line":33905},[49,56969,56970],{"class":66},"      p.innerHTML ",[49,56972,1448],{"class":109},[49,56974,56975],{"class":66}," arrImage[i].title\n",[49,56977,56978,56981,56983],{"class":51,"line":33916},[49,56979,56980],{"class":66},"      color.style.backgroundColor ",[49,56982,1448],{"class":109},[49,56984,56985],{"class":66}," arrImage[i].color\n",[49,56987,56988],{"class":51,"line":33922},[49,56989,56990],{"class":55},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[49,56992,56993],{"class":51,"line":33942},[49,56994,56995],{"class":55},"      \u002F\u002F li.classList.add('activate')\n",[49,56997,56998],{"class":51,"line":33948},[49,56999,57000],{"class":55},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[49,57002,57003],{"class":51,"line":33959},[49,57004,57005],{"class":55},"      \u002F\u002F lis[i].classList.remove('activate')\n",[49,57007,57008,57011,57013,57015,57018,57021,57024,57026,57029],{"class":51,"line":33965},[49,57009,57010],{"class":66},"      document.",[49,57012,55640],{"class":62},[49,57014,1403],{"class":66},[49,57016,57017],{"class":1505},"'.activate'",[49,57019,57020],{"class":66},")?.classList.",[49,57022,57023],{"class":62},"toggle",[49,57025,1403],{"class":66},[49,57027,57028],{"class":1505},"'activate'",[49,57030,1409],{"class":66},[49,57032,57033,57036,57038,57040,57042],{"class":51,"line":33971},[49,57034,57035],{"class":66},"      lis[i].classList.",[49,57037,6586],{"class":62},[49,57039,1403],{"class":66},[49,57041,57028],{"class":1505},[49,57043,1409],{"class":66},[49,57045,57046],{"class":51,"line":33977},[49,57047,3654],{"emptyLinePlaceholder":1330},[49,57049,57050,57053,57055,57057,57059,57061,57063,57065,57068],{"class":51,"line":33983},[49,57051,57052],{"class":66},"      i ",[49,57054,1448],{"class":109},[49,57056,55724],{"class":66},[49,57058,1872],{"class":109},[49,57060,26367],{"class":73},[49,57062,14966],{"class":66},[49,57064,1720],{"class":109},[49,57066,57067],{"class":66}," arrImage.",[49,57069,57070],{"class":73},"length\n",[49,57072,57073],{"class":51,"line":33989},[49,57074,3654],{"emptyLinePlaceholder":1330},[49,57076,57077,57079,57081],{"class":51,"line":33995},[49,57078,55776],{"class":66},[49,57080,7662],{"class":73},[49,57082,1409],{"class":66},[49,57084,57085,57087,57089],{"class":51,"line":34001},[49,57086,53659],{"class":66},[49,57088,53055],{"class":147},[49,57090,52554],{"class":66},[49,57092,57093,57095,57097],{"class":51,"line":34021},[49,57094,53027],{"class":66},[49,57096,53042],{"class":147},[49,57098,52554],{"class":66},[49,57100,57101],{"class":51,"line":34027},[49,57102,3654],{"emptyLinePlaceholder":1330},[49,57104,57105,57107,57109],{"class":51,"line":34043},[49,57106,53027],{"class":66},[49,57108,51883],{"class":147},[49,57110,52554],{"class":66},[19,57112,57113],{},[174,57114],{"alt":44,"src":57115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57117,57118],{},"?.就是短路保护,确保输出正常进行",[19,57120,57121],{},"不要忘记取余%,有时候可以用",[19,57123,57124],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[591,57126,57127],{"start":59},[26,57128,57129],{},"法2",[39,57131,57133],{"className":51881,"code":57132,"language":51883,"meta":44,"style":44},"\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",[46,57134,57135,57145,57159,57163,57171,57185,57205,57217,57225,57231,57241,57251,57255,57259,57265,57275,57279,57283,57289,57299,57311,57323,57337,57341,57345,57351,57361,57371,57381,57393,57405,57415,57419,57423,57431,57441,57453,57465,57477,57481,57485,57491,57501,57513,57525,57535,57545,57555,57567,57579,57583,57587,57595,57607,57619,57645,57657,57661,57665,57671,57681,57685,57693,57701,57705,57713,57727,57741,57761,57769,57783,57795,57803,57821,57833,57845,57857,57869,57881,57893,57905,57913,57921,57929,57937,57948,57964,57980,57996,58012,58028,58044,58060,58076,58080,58085,58103,58121,58131,58136,58141,58152,58158,58173,58182,58186,58191,58200,58205,58214,58219,58224,58229,58252,58282,58286,58294,58298,58306,58314,58318],{"__ignoreMap":44},[49,57136,57137,57139,57141,57143],{"class":51,"line":52},[49,57138,52545],{"class":66},[49,57140,52548],{"class":147},[49,57142,52551],{"class":62},[49,57144,52554],{"class":66},[49,57146,57147,57149,57151,57153,57155,57157],{"class":51,"line":59},[49,57148,2300],{"class":66},[49,57150,51883],{"class":147},[49,57152,52563],{"class":62},[49,57154,1448],{"class":66},[49,57156,52568],{"class":1505},[49,57158,52554],{"class":66},[49,57160,57161],{"class":51,"line":70},[49,57162,3654],{"emptyLinePlaceholder":1330},[49,57164,57165,57167,57169],{"class":51,"line":86},[49,57166,2300],{"class":66},[49,57168,52581],{"class":147},[49,57170,52554],{"class":66},[49,57172,57173,57175,57177,57179,57181,57183],{"class":51,"line":98},[49,57174,53386],{"class":66},[49,57176,52591],{"class":147},[49,57178,52594],{"class":62},[49,57180,1448],{"class":66},[49,57182,52599],{"class":1505},[49,57184,52554],{"class":66},[49,57186,57187,57189,57191,57193,57195,57197,57199,57201,57203],{"class":51,"line":121},[49,57188,53386],{"class":66},[49,57190,52591],{"class":147},[49,57192,16171],{"class":62},[49,57194,1448],{"class":66},[49,57196,52638],{"class":1505},[49,57198,52618],{"class":62},[49,57200,1448],{"class":66},[49,57202,52645],{"class":1505},[49,57204,52554],{"class":66},[49,57206,57207,57209,57211,57213,57215],{"class":51,"line":134},[49,57208,53386],{"class":66},[49,57210,52654],{"class":147},[49,57212,52657],{"class":66},[49,57214,52654],{"class":147},[49,57216,52554],{"class":66},[49,57218,57219,57221,57223],{"class":51,"line":1085},[49,57220,53386],{"class":66},[49,57222,1305],{"class":147},[49,57224,52554],{"class":66},[49,57226,57227,57229],{"class":51,"line":2574},[49,57228,7655],{"class":147},[49,57230,67],{"class":66},[49,57232,57233,57235,57237,57239],{"class":51,"line":2586},[49,57234,55936],{"class":73},[49,57236,77],{"class":66},[49,57238,80],{"class":73},[49,57240,83],{"class":66},[49,57242,57243,57245,57247,57249],{"class":51,"line":2867},[49,57244,55947],{"class":73},[49,57246,77],{"class":66},[49,57248,80],{"class":73},[49,57250,83],{"class":66},[49,57252,57253],{"class":51,"line":2872},[49,57254,3441],{"class":66},[49,57256,57257],{"class":51,"line":2878},[49,57258,3654],{"emptyLinePlaceholder":1330},[49,57260,57261,57263],{"class":51,"line":2883},[49,57262,55966],{"class":147},[49,57264,67],{"class":66},[49,57266,57267,57269,57271,57273],{"class":51,"line":2897},[49,57268,55973],{"class":73},[49,57270,77],{"class":66},[49,57272,460],{"class":73},[49,57274,83],{"class":66},[49,57276,57277],{"class":51,"line":2902},[49,57278,3441],{"class":66},[49,57280,57281],{"class":51,"line":2908},[49,57282,3654],{"emptyLinePlaceholder":1330},[49,57284,57285,57287],{"class":51,"line":2929},[49,57286,55992],{"class":62},[49,57288,67],{"class":66},[49,57290,57291,57293,57295,57297],{"class":51,"line":2934},[49,57292,55999],{"class":73},[49,57294,77],{"class":66},[49,57296,850],{"class":73},[49,57298,83],{"class":66},[49,57300,57301,57303,57305,57307,57309],{"class":51,"line":2948},[49,57302,56010],{"class":73},[49,57304,77],{"class":66},[49,57306,56015],{"class":73},[49,57308,110],{"class":109},[49,57310,83],{"class":66},[49,57312,57313,57315,57317,57319,57321],{"class":51,"line":2953},[49,57314,56024],{"class":73},[49,57316,77],{"class":66},[49,57318,2795],{"class":73},[49,57320,110],{"class":109},[49,57322,83],{"class":66},[49,57324,57325,57327,57329,57331,57333,57335],{"class":51,"line":2982},[49,57326,55947],{"class":73},[49,57328,77],{"class":66},[49,57330,1703],{"class":73},[49,57332,110],{"class":109},[49,57334,1077],{"class":73},[49,57336,83],{"class":66},[49,57338,57339],{"class":51,"line":2987},[49,57340,3441],{"class":66},[49,57342,57343],{"class":51,"line":3004},[49,57344,3654],{"emptyLinePlaceholder":1330},[49,57346,57347,57349],{"class":51,"line":3009},[49,57348,56059],{"class":62},[49,57350,67],{"class":66},[49,57352,57353,57355,57357,57359],{"class":51,"line":3014},[49,57354,55999],{"class":73},[49,57356,77],{"class":66},[49,57358,56070],{"class":73},[49,57360,83],{"class":66},[49,57362,57363,57365,57367,57369],{"class":51,"line":3019},[49,57364,56077],{"class":73},[49,57366,77],{"class":66},[49,57368,80],{"class":73},[49,57370,83],{"class":66},[49,57372,57373,57375,57377,57379],{"class":51,"line":3033},[49,57374,56088],{"class":73},[49,57376,77],{"class":66},[49,57378,80],{"class":73},[49,57380,83],{"class":66},[49,57382,57383,57385,57387,57389,57391],{"class":51,"line":3038},[49,57384,56010],{"class":73},[49,57386,77],{"class":66},[49,57388,1703],{"class":73},[49,57390,1720],{"class":109},[49,57392,83],{"class":66},[49,57394,57395,57397,57399,57401,57403],{"class":51,"line":3831},[49,57396,56024],{"class":73},[49,57398,77],{"class":66},[49,57400,1966],{"class":73},[49,57402,1720],{"class":109},[49,57404,83],{"class":66},[49,57406,57407,57409,57411,57413],{"class":51,"line":3845},[49,57408,56123],{"class":73},[49,57410,77],{"class":66},[49,57412,56128],{"class":73},[49,57414,83],{"class":66},[49,57416,57417],{"class":51,"line":3853},[49,57418,3441],{"class":66},[49,57420,57421],{"class":51,"line":3858},[49,57422,3654],{"emptyLinePlaceholder":1330},[49,57424,57425,57427,57429],{"class":51,"line":3864},[49,57426,56059],{"class":62},[49,57428,8077],{"class":147},[49,57430,67],{"class":66},[49,57432,57433,57435,57437,57439],{"class":51,"line":3870},[49,57434,55999],{"class":73},[49,57436,77],{"class":66},[49,57438,56070],{"class":73},[49,57440,83],{"class":66},[49,57442,57443,57445,57447,57449,57451],{"class":51,"line":3875},[49,57444,56161],{"class":73},[49,57446,77],{"class":66},[49,57448,2291],{"class":73},[49,57450,110],{"class":109},[49,57452,83],{"class":66},[49,57454,57455,57457,57459,57461,57463],{"class":51,"line":9200},[49,57456,56077],{"class":73},[49,57458,77],{"class":66},[49,57460,875],{"class":73},[49,57462,110],{"class":109},[49,57464,83],{"class":66},[49,57466,57467,57469,57471,57473,57475],{"class":51,"line":9224},[49,57468,56186],{"class":73},[49,57470,77],{"class":66},[49,57472,1711],{"class":73},[49,57474,110],{"class":109},[49,57476,83],{"class":66},[49,57478,57479],{"class":51,"line":9229},[49,57480,3441],{"class":66},[49,57482,57483],{"class":51,"line":9235},[49,57484,3654],{"emptyLinePlaceholder":1330},[49,57486,57487,57489],{"class":51,"line":9262},[49,57488,56207],{"class":147},[49,57490,67],{"class":66},[49,57492,57493,57495,57497,57499],{"class":51,"line":9267},[49,57494,55999],{"class":73},[49,57496,77],{"class":66},[49,57498,56070],{"class":73},[49,57500,83],{"class":66},[49,57502,57503,57505,57507,57509,57511],{"class":51,"line":9273},[49,57504,56186],{"class":73},[49,57506,77],{"class":66},[49,57508,2171],{"class":73},[49,57510,110],{"class":109},[49,57512,83],{"class":66},[49,57514,57515,57517,57519,57521,57523],{"class":51,"line":9285},[49,57516,56077],{"class":73},[49,57518,77],{"class":66},[49,57520,875],{"class":73},[49,57522,110],{"class":109},[49,57524,83],{"class":66},[49,57526,57527,57529,57531,57533],{"class":51,"line":9297},[49,57528,56248],{"class":73},[49,57530,77],{"class":66},[49,57532,52723],{"class":73},[49,57534,83],{"class":66},[49,57536,57537,57539,57541,57543],{"class":51,"line":9309},[49,57538,56259],{"class":73},[49,57540,77],{"class":66},[49,57542,52910],{"class":73},[49,57544,83],{"class":66},[49,57546,57547,57549,57551,57553],{"class":51,"line":10968},[49,57548,55999],{"class":73},[49,57550,77],{"class":66},[49,57552,56070],{"class":73},[49,57554,83],{"class":66},[49,57556,57557,57559,57561,57563,57565],{"class":51,"line":10993},[49,57558,56010],{"class":73},[49,57560,77],{"class":66},[49,57562,5246],{"class":73},[49,57564,110],{"class":109},[49,57566,83],{"class":66},[49,57568,57569,57571,57573,57575,57577],{"class":51,"line":11016},[49,57570,56024],{"class":73},[49,57572,77],{"class":66},[49,57574,875],{"class":73},[49,57576,110],{"class":109},[49,57578,83],{"class":66},[49,57580,57581],{"class":51,"line":11040},[49,57582,3441],{"class":66},[49,57584,57585],{"class":51,"line":11045},[49,57586,3654],{"emptyLinePlaceholder":1330},[49,57588,57589,57591,57593],{"class":51,"line":11050},[49,57590,56207],{"class":147},[49,57592,56314],{"class":147},[49,57594,67],{"class":66},[49,57596,57597,57599,57601,57603,57605],{"class":51,"line":11055},[49,57598,56010],{"class":73},[49,57600,77],{"class":66},[49,57602,875],{"class":73},[49,57604,110],{"class":109},[49,57606,83],{"class":66},[49,57608,57609,57611,57613,57615,57617],{"class":51,"line":11064},[49,57610,56024],{"class":73},[49,57612,77],{"class":66},[49,57614,875],{"class":73},[49,57616,110],{"class":109},[49,57618,83],{"class":66},[49,57620,57621,57623,57625,57627,57629,57631,57633,57635,57637,57639,57641,57643],{"class":51,"line":11069},[49,57622,56123],{"class":73},[49,57624,77],{"class":66},[49,57626,56349],{"class":73},[49,57628,1403],{"class":66},[49,57630,80],{"class":73},[49,57632,13687],{"class":66},[49,57634,80],{"class":73},[49,57636,13687],{"class":66},[49,57638,80],{"class":73},[49,57640,13687],{"class":66},[49,57642,56366],{"class":73},[49,57644,3973],{"class":66},[49,57646,57647,57649,57651,57653,57655],{"class":51,"line":11075},[49,57648,56373],{"class":73},[49,57650,77],{"class":66},[49,57652,106],{"class":73},[49,57654,110],{"class":109},[49,57656,83],{"class":66},[49,57658,57659],{"class":51,"line":11096},[49,57660,3441],{"class":66},[49,57662,57663],{"class":51,"line":11102},[49,57664,3654],{"emptyLinePlaceholder":1330},[49,57666,57667,57669],{"class":51,"line":11116},[49,57668,56394],{"class":62},[49,57670,67],{"class":66},[49,57672,57673,57675,57677,57679],{"class":51,"line":11122},[49,57674,56123],{"class":73},[49,57676,77],{"class":66},[49,57678,56405],{"class":73},[49,57680,83],{"class":66},[49,57682,57683],{"class":51,"line":11149},[49,57684,3441],{"class":66},[49,57686,57687,57689,57691],{"class":51,"line":11158},[49,57688,53659],{"class":66},[49,57690,1305],{"class":147},[49,57692,52554],{"class":66},[49,57694,57695,57697,57699],{"class":51,"line":11164},[49,57696,53027],{"class":66},[49,57698,52581],{"class":147},[49,57700,52554],{"class":66},[49,57702,57703],{"class":51,"line":11172},[49,57704,3654],{"emptyLinePlaceholder":1330},[49,57706,57707,57709,57711],{"class":51,"line":11177},[49,57708,2300],{"class":66},[49,57710,53042],{"class":147},[49,57712,52554],{"class":66},[49,57714,57715,57717,57719,57721,57723,57725],{"class":51,"line":17854},[49,57716,53386],{"class":66},[49,57718,148],{"class":147},[49,57720,54728],{"class":62},[49,57722,1448],{"class":66},[49,57724,54733],{"class":1505},[49,57726,52554],{"class":66},[49,57728,57729,57731,57733,57735,57737,57739],{"class":51,"line":17860},[49,57730,52588],{"class":66},[49,57732,148],{"class":147},[49,57734,54728],{"class":62},[49,57736,1448],{"class":66},[49,57738,56466],{"class":1505},[49,57740,52554],{"class":66},[49,57742,57743,57745,57747,57749,57751,57753,57755,57757,57759],{"class":51,"line":17883},[49,57744,56473],{"class":66},[49,57746,174],{"class":147},[49,57748,56478],{"class":62},[49,57750,1448],{"class":66},[49,57752,56483],{"class":1505},[49,57754,56486],{"class":62},[49,57756,1448],{"class":66},[49,57758,8904],{"class":1505},[49,57760,52554],{"class":66},[49,57762,57763,57765,57767],{"class":51,"line":17889},[49,57764,53018],{"class":66},[49,57766,148],{"class":147},[49,57768,52554],{"class":66},[49,57770,57771,57773,57775,57777,57779,57781],{"class":51,"line":17912},[49,57772,52588],{"class":66},[49,57774,148],{"class":147},[49,57776,54728],{"class":62},[49,57778,1448],{"class":66},[49,57780,56513],{"class":1505},[49,57782,52554],{"class":66},[49,57784,57785,57787,57789,57791,57793],{"class":51,"line":17926},[49,57786,56473],{"class":66},[49,57788,19],{"class":147},[49,57790,56524],{"class":66},[49,57792,19],{"class":147},[49,57794,52554],{"class":66},[49,57796,57797,57799,57801],{"class":51,"line":17946},[49,57798,56473],{"class":66},[49,57800,23],{"class":147},[49,57802,52554],{"class":66},[49,57804,57805,57807,57809,57811,57813,57815,57817,57819],{"class":51,"line":17952},[49,57806,56541],{"class":66},[49,57808,26],{"class":147},[49,57810,54728],{"class":62},[49,57812,1448],{"class":66},[49,57814,56550],{"class":1505},[49,57816,56553],{"class":66},[49,57818,26],{"class":147},[49,57820,52554],{"class":66},[49,57822,57823,57825,57827,57829,57831],{"class":51,"line":17963},[49,57824,56541],{"class":66},[49,57826,26],{"class":147},[49,57828,56553],{"class":66},[49,57830,26],{"class":147},[49,57832,52554],{"class":66},[49,57834,57835,57837,57839,57841,57843],{"class":51,"line":17986},[49,57836,56541],{"class":66},[49,57838,26],{"class":147},[49,57840,56553],{"class":66},[49,57842,26],{"class":147},[49,57844,52554],{"class":66},[49,57846,57847,57849,57851,57853,57855],{"class":51,"line":18008},[49,57848,56541],{"class":66},[49,57850,26],{"class":147},[49,57852,56553],{"class":66},[49,57854,26],{"class":147},[49,57856,52554],{"class":66},[49,57858,57859,57861,57863,57865,57867],{"class":51,"line":18013},[49,57860,56541],{"class":66},[49,57862,26],{"class":147},[49,57864,56553],{"class":66},[49,57866,26],{"class":147},[49,57868,52554],{"class":66},[49,57870,57871,57873,57875,57877,57879],{"class":51,"line":18019},[49,57872,56541],{"class":66},[49,57874,26],{"class":147},[49,57876,56553],{"class":66},[49,57878,26],{"class":147},[49,57880,52554],{"class":66},[49,57882,57883,57885,57887,57889,57891],{"class":51,"line":18033},[49,57884,56541],{"class":66},[49,57886,26],{"class":147},[49,57888,56553],{"class":66},[49,57890,26],{"class":147},[49,57892,52554],{"class":66},[49,57894,57895,57897,57899,57901,57903],{"class":51,"line":18046},[49,57896,56541],{"class":66},[49,57898,26],{"class":147},[49,57900,56553],{"class":66},[49,57902,26],{"class":147},[49,57904,52554],{"class":66},[49,57906,57907,57909,57911],{"class":51,"line":18051},[49,57908,56646],{"class":66},[49,57910,23],{"class":147},[49,57912,52554],{"class":66},[49,57914,57915,57917,57919],{"class":51,"line":18065},[49,57916,53018],{"class":66},[49,57918,148],{"class":147},[49,57920,52554],{"class":66},[49,57922,57923,57925,57927],{"class":51,"line":18070},[49,57924,53659],{"class":66},[49,57926,148],{"class":147},[49,57928,52554],{"class":66},[49,57930,57931,57933,57935],{"class":51,"line":18076},[49,57932,53386],{"class":66},[49,57934,53055],{"class":147},[49,57936,52554],{"class":66},[49,57938,57939,57941,57944,57946],{"class":51,"line":18081},[49,57940,12473],{"class":109},[49,57942,57943],{"class":73}," sliderData",[49,57945,14816],{"class":109},[49,57947,56686],{"class":66},[49,57949,57950,57952,57954,57956,57958,57960,57962],{"class":51,"line":18095},[49,57951,56691],{"class":66},[49,57953,56694],{"class":1505},[49,57955,56697],{"class":66},[49,57957,56700],{"class":1505},[49,57959,56703],{"class":66},[49,57961,56706],{"class":1505},[49,57963,56709],{"class":66},[49,57965,57966,57968,57970,57972,57974,57976,57978],{"class":51,"line":18100},[49,57967,56691],{"class":66},[49,57969,56716],{"class":1505},[49,57971,56697],{"class":66},[49,57973,56721],{"class":1505},[49,57975,56703],{"class":66},[49,57977,56726],{"class":1505},[49,57979,56709],{"class":66},[49,57981,57982,57984,57986,57988,57990,57992,57994],{"class":51,"line":18105},[49,57983,56691],{"class":66},[49,57985,56735],{"class":1505},[49,57987,56697],{"class":66},[49,57989,56740],{"class":1505},[49,57991,56703],{"class":66},[49,57993,56745],{"class":1505},[49,57995,56709],{"class":66},[49,57997,57998,58000,58002,58004,58006,58008,58010],{"class":51,"line":18119},[49,57999,56691],{"class":66},[49,58001,56754],{"class":1505},[49,58003,56697],{"class":66},[49,58005,56759],{"class":1505},[49,58007,56703],{"class":66},[49,58009,56764],{"class":1505},[49,58011,56709],{"class":66},[49,58013,58014,58016,58018,58020,58022,58024,58026],{"class":51,"line":18131},[49,58015,56691],{"class":66},[49,58017,56773],{"class":1505},[49,58019,56697],{"class":66},[49,58021,56778],{"class":1505},[49,58023,56703],{"class":66},[49,58025,56783],{"class":1505},[49,58027,56709],{"class":66},[49,58029,58030,58032,58034,58036,58038,58040,58042],{"class":51,"line":18136},[49,58031,56691],{"class":66},[49,58033,56792],{"class":1505},[49,58035,56697],{"class":66},[49,58037,56797],{"class":1505},[49,58039,56703],{"class":66},[49,58041,56802],{"class":1505},[49,58043,56709],{"class":66},[49,58045,58046,58048,58050,58052,58054,58056,58058],{"class":51,"line":18149},[49,58047,56691],{"class":66},[49,58049,56811],{"class":1505},[49,58051,56697],{"class":66},[49,58053,56816],{"class":1505},[49,58055,56703],{"class":66},[49,58057,56821],{"class":1505},[49,58059,56709],{"class":66},[49,58061,58062,58064,58066,58068,58070,58072,58074],{"class":51,"line":18154},[49,58063,56691],{"class":66},[49,58065,56830],{"class":1505},[49,58067,56697],{"class":66},[49,58069,56835],{"class":1505},[49,58071,56703],{"class":66},[49,58073,56840],{"class":1505},[49,58075,56843],{"class":66},[49,58077,58078],{"class":51,"line":18159},[49,58079,54351],{"class":66},[49,58081,58082],{"class":51,"line":18164},[49,58083,58084],{"class":55},"    \u002F\u002F 1.获取元素\n",[49,58086,58087,58089,58091,58093,58095,58097,58099,58101],{"class":51,"line":18177},[49,58088,12473],{"class":109},[49,58090,56854],{"class":73},[49,58092,14816],{"class":109},[49,58094,55637],{"class":66},[49,58096,55640],{"class":62},[49,58098,1403],{"class":66},[49,58100,56865],{"class":1505},[49,58102,1409],{"class":66},[49,58104,58105,58107,58109,58111,58113,58115,58117,58119],{"class":51,"line":18182},[49,58106,12473],{"class":109},[49,58108,8077],{"class":73},[49,58110,14816],{"class":109},[49,58112,55637],{"class":66},[49,58114,55640],{"class":62},[49,58116,1403],{"class":66},[49,58118,56884],{"class":1505},[49,58120,1409],{"class":66},[49,58122,58123,58125,58127,58129],{"class":51,"line":33881},[49,58124,53461],{"class":109},[49,58126,10690],{"class":66},[49,58128,1448],{"class":109},[49,58130,48581],{"class":73},[49,58132,58133],{"class":51,"line":33887},[49,58134,58135],{"class":55},"    \u002F\u002F 2.开启定时器\n",[49,58137,58138],{"class":51,"line":33893},[49,58139,58140],{"class":55},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[49,58142,58143,58146,58148,58150],{"class":51,"line":33899},[49,58144,58145],{"class":62},"    setInterval",[49,58147,1403],{"class":66},[49,58149,55690],{"class":109},[49,58151,55693],{"class":66},[49,58153,58154,58156],{"class":51,"line":33905},[49,58155,55698],{"class":66},[49,58157,3956],{"class":109},[49,58159,58160,58162,58164,58166,58169,58171],{"class":51,"line":33916},[49,58161,55721],{"class":109},[49,58163,55724],{"class":66},[49,58165,2965],{"class":109},[49,58167,58168],{"class":66}," sliderData.",[49,58170,53210],{"class":73},[49,58172,13694],{"class":66},[49,58174,58175,58178,58180],{"class":51,"line":33922},[49,58176,58177],{"class":66},"        i ",[49,58179,1448],{"class":109},[49,58181,48581],{"class":73},[49,58183,58184],{"class":51,"line":33942},[49,58185,53640],{"class":66},[49,58187,58188],{"class":51,"line":33948},[49,58189,58190],{"class":55},"      \u002F\u002F 更换图片路径\n",[49,58192,58193,58195,58197],{"class":51,"line":33959},[49,58194,56960],{"class":66},[49,58196,1448],{"class":109},[49,58198,58199],{"class":66}," sliderData[i].url\n",[49,58201,58202],{"class":51,"line":33965},[49,58203,58204],{"class":55},"      \u002F\u002F 把文字写到p里面\n",[49,58206,58207,58209,58211],{"class":51,"line":33971},[49,58208,56970],{"class":66},[49,58210,1448],{"class":109},[49,58212,58213],{"class":66}," sliderData[i].title\n",[49,58215,58216],{"class":51,"line":33977},[49,58217,58218],{"class":55},"      \u002F\u002F 小圆点\n",[49,58220,58221],{"class":51,"line":33983},[49,58222,58223],{"class":55},"      \u002F\u002F 先删除以前的active\n",[49,58225,58226],{"class":51,"line":33989},[49,58227,58228],{"class":55},"      \u002F\u002F 只让当前li添加active\n",[49,58230,58231,58233,58235,58237,58240,58243,58246,58248,58250],{"class":51,"line":33995},[49,58232,57010],{"class":66},[49,58234,55640],{"class":62},[49,58236,1403],{"class":66},[49,58238,58239],{"class":1505},"'.slider-footer .activate'",[49,58241,58242],{"class":66},").classList.",[49,58244,58245],{"class":62},"remove",[49,58247,1403],{"class":66},[49,58249,57028],{"class":1505},[49,58251,1409],{"class":66},[49,58253,58254,58256,58258,58260,58263,58265,58267,58269,58272,58274,58276,58278,58280],{"class":51,"line":34001},[49,58255,57010],{"class":66},[49,58257,55640],{"class":62},[49,58259,1403],{"class":66},[49,58261,58262],{"class":1505},"`.slider-footer ul li:nth-child(${",[49,58264,1833],{"class":66},[49,58266,46814],{"class":109},[49,58268,26367],{"class":73},[49,58270,58271],{"class":1505},"})`",[49,58273,58242],{"class":66},[49,58275,6586],{"class":62},[49,58277,1403],{"class":66},[49,58279,57028],{"class":1505},[49,58281,1409],{"class":66},[49,58283,58284],{"class":51,"line":34021},[49,58285,3654],{"emptyLinePlaceholder":1330},[49,58287,58288,58290,58292],{"class":51,"line":34027},[49,58289,55776],{"class":66},[49,58291,7662],{"class":73},[49,58293,1409],{"class":66},[49,58295,58296],{"class":51,"line":34043},[49,58297,3654],{"emptyLinePlaceholder":1330},[49,58299,58300,58302,58304],{"class":51,"line":34049},[49,58301,53659],{"class":66},[49,58303,53055],{"class":147},[49,58305,52554],{"class":66},[49,58307,58308,58310,58312],{"class":51,"line":34063},[49,58309,53027],{"class":66},[49,58311,53042],{"class":147},[49,58313,52554],{"class":66},[49,58315,58316],{"class":51,"line":34069},[49,58317,3654],{"emptyLinePlaceholder":1330},[49,58319,58320,58322,58324],{"class":51,"line":34084},[49,58321,53027],{"class":66},[49,58323,51883],{"class":147},[49,58325,52554],{"class":66},[183,58327,58329],{"id":58328},"_317-重要知识点","3.1.7 重要知识点",[19,58331,58332,58333],{},"浏览器在渲染文本时， ",[485,58334,58335],{},"没有空格或换行符就没有“断行点”",[19,58337,58338],{},[174,58339],{"alt":44,"src":58340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58342,58343],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58345,58346],{},[174,58347],{"alt":44,"src":58348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58350,58351],{},[174,58352],{"alt":44,"src":58353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58355,58357],{"id":58356},"_32-dom事件基础","3.2 DOM事件基础",[183,58359,58361],{"id":58360},"_321-事件监听","3.2.1 事件监听",[19,58363,58364],{},[174,58365],{"alt":44,"src":58366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58368,58369],{},"事件监听有响应的发生",[19,58371,58372],{},[174,58373],{"alt":44,"src":58374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58376,58377],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58379,58380],{},"对于有名函数,要执行的函数名后边不要加()",[183,58382,58384],{"id":58383},"_322-随机点名案例","3.2.2 随机点名案例",[39,58386,58388],{"className":51881,"code":58387,"language":51883,"meta":44,"style":44},"\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",[46,58389,58390,58400,58414,58418,58426,58440,58460,58472,58480,58486,58496,58506,58510,58514,58521,58532,58536,58540,58546,58558,58572,58582,58594,58607,58611,58615,58622,58626,58639,58651,58663,58667,58671,58675,58682,58692,58696,58700,58709,58721,58733,58748,58752,58760,58768,58772,58780,58793,58807,58820,58840,58848,58863,58883,58903,58911,58915,58923,58928,58964,58984,58989,59008,59013,59024,59029,59040,59045,59064,59079,59084,59110,59120,59129,59134,59150,59155,59160,59165,59180,59184,59188,59193,59212,59229,59237,59242,59257,59261,59265,59273,59281,59285],{"__ignoreMap":44},[49,58391,58392,58394,58396,58398],{"class":51,"line":52},[49,58393,52545],{"class":66},[49,58395,52548],{"class":147},[49,58397,52551],{"class":62},[49,58399,52554],{"class":66},[49,58401,58402,58404,58406,58408,58410,58412],{"class":51,"line":59},[49,58403,2300],{"class":66},[49,58405,51883],{"class":147},[49,58407,52563],{"class":62},[49,58409,1448],{"class":66},[49,58411,52568],{"class":1505},[49,58413,52554],{"class":66},[49,58415,58416],{"class":51,"line":70},[49,58417,3654],{"emptyLinePlaceholder":1330},[49,58419,58420,58422,58424],{"class":51,"line":86},[49,58421,2300],{"class":66},[49,58423,52581],{"class":147},[49,58425,52554],{"class":66},[49,58427,58428,58430,58432,58434,58436,58438],{"class":51,"line":98},[49,58429,53386],{"class":66},[49,58431,52591],{"class":147},[49,58433,52594],{"class":62},[49,58435,1448],{"class":66},[49,58437,52599],{"class":1505},[49,58439,52554],{"class":66},[49,58441,58442,58444,58446,58448,58450,58452,58454,58456,58458],{"class":51,"line":121},[49,58443,53386],{"class":66},[49,58445,52591],{"class":147},[49,58447,16171],{"class":62},[49,58449,1448],{"class":66},[49,58451,52638],{"class":1505},[49,58453,52618],{"class":62},[49,58455,1448],{"class":66},[49,58457,52645],{"class":1505},[49,58459,52554],{"class":66},[49,58461,58462,58464,58466,58468,58470],{"class":51,"line":134},[49,58463,53386],{"class":66},[49,58465,52654],{"class":147},[49,58467,52657],{"class":66},[49,58469,52654],{"class":147},[49,58471,52554],{"class":66},[49,58473,58474,58476,58478],{"class":51,"line":1085},[49,58475,53386],{"class":66},[49,58477,1305],{"class":147},[49,58479,52554],{"class":66},[49,58481,58482,58484],{"class":51,"line":2574},[49,58483,7655],{"class":147},[49,58485,67],{"class":66},[49,58487,58488,58490,58492,58494],{"class":51,"line":2586},[49,58489,55947],{"class":73},[49,58491,77],{"class":66},[49,58493,80],{"class":73},[49,58495,83],{"class":66},[49,58497,58498,58500,58502,58504],{"class":51,"line":2867},[49,58499,55936],{"class":73},[49,58501,77],{"class":66},[49,58503,80],{"class":73},[49,58505,83],{"class":66},[49,58507,58508],{"class":51,"line":2872},[49,58509,3441],{"class":66},[49,58511,58512],{"class":51,"line":2878},[49,58513,3654],{"emptyLinePlaceholder":1330},[49,58515,58516,58519],{"class":51,"line":2883},[49,58517,58518],{"class":147},"    h2",[49,58520,67],{"class":66},[49,58522,58523,58526,58528,58530],{"class":51,"line":2897},[49,58524,58525],{"class":73},"      text-align",[49,58527,77],{"class":66},[49,58529,52835],{"class":73},[49,58531,83],{"class":66},[49,58533,58534],{"class":51,"line":2902},[49,58535,3441],{"class":66},[49,58537,58538],{"class":51,"line":2908},[49,58539,3654],{"emptyLinePlaceholder":1330},[49,58541,58542,58544],{"class":51,"line":2929},[49,58543,55992],{"class":62},[49,58545,67],{"class":66},[49,58547,58548,58550,58552,58554,58556],{"class":51,"line":2934},[49,58549,56010],{"class":73},[49,58551,77],{"class":66},[49,58553,2795],{"class":73},[49,58555,110],{"class":109},[49,58557,83],{"class":66},[49,58559,58560,58562,58564,58566,58568,58570],{"class":51,"line":2948},[49,58561,55947],{"class":73},[49,58563,77],{"class":66},[49,58565,2047],{"class":73},[49,58567,110],{"class":109},[49,58569,1077],{"class":73},[49,58571,83],{"class":66},[49,58573,58574,58576,58578,58580],{"class":51,"line":2953},[49,58575,56248],{"class":73},[49,58577,77],{"class":66},[49,58579,52723],{"class":73},[49,58581,83],{"class":66},[49,58583,58584,58586,58588,58590,58592],{"class":51,"line":2982},[49,58585,56161],{"class":73},[49,58587,77],{"class":66},[49,58589,2215],{"class":73},[49,58591,110],{"class":109},[49,58593,83],{"class":66},[49,58595,58596,58599,58601,58603,58605],{"class":51,"line":2987},[49,58597,58598],{"class":73},"      line-height",[49,58600,77],{"class":66},[49,58602,1793],{"class":73},[49,58604,110],{"class":109},[49,58606,83],{"class":66},[49,58608,58609],{"class":51,"line":3004},[49,58610,3441],{"class":66},[49,58612,58613],{"class":51,"line":3009},[49,58614,3654],{"emptyLinePlaceholder":1330},[49,58616,58617,58620],{"class":51,"line":3014},[49,58618,58619],{"class":62},"    .qs",[49,58621,67],{"class":66},[49,58623,58624],{"class":51,"line":3019},[49,58625,3654],{"emptyLinePlaceholder":1330},[49,58627,58628,58630,58632,58635,58637],{"class":51,"line":3033},[49,58629,56010],{"class":73},[49,58631,77],{"class":66},[49,58633,58634],{"class":73},"450",[49,58636,110],{"class":109},[49,58638,83],{"class":66},[49,58640,58641,58643,58645,58647,58649],{"class":51,"line":3038},[49,58642,56024],{"class":73},[49,58644,77],{"class":66},[49,58646,1793],{"class":73},[49,58648,110],{"class":109},[49,58650,83],{"class":66},[49,58652,58653,58656,58658,58661],{"class":51,"line":3831},[49,58654,58655],{"class":73},"      color",[49,58657,77],{"class":66},[49,58659,58660],{"class":73},"red",[49,58662,83],{"class":66},[49,58664,58665],{"class":51,"line":3845},[49,58666,3654],{"emptyLinePlaceholder":1330},[49,58668,58669],{"class":51,"line":3853},[49,58670,3441],{"class":66},[49,58672,58673],{"class":51,"line":3858},[49,58674,3654],{"emptyLinePlaceholder":1330},[49,58676,58677,58680],{"class":51,"line":3864},[49,58678,58679],{"class":62},"    .btns",[49,58681,67],{"class":66},[49,58683,58684,58686,58688,58690],{"class":51,"line":3870},[49,58685,58525],{"class":73},[49,58687,77],{"class":66},[49,58689,52835],{"class":73},[49,58691,83],{"class":66},[49,58693,58694],{"class":51,"line":3875},[49,58695,3441],{"class":66},[49,58697,58698],{"class":51,"line":9200},[49,58699,3654],{"emptyLinePlaceholder":1330},[49,58701,58702,58704,58707],{"class":51,"line":9224},[49,58703,58679],{"class":62},[49,58705,58706],{"class":147}," button",[49,58708,67],{"class":66},[49,58710,58711,58713,58715,58717,58719],{"class":51,"line":9229},[49,58712,56010],{"class":73},[49,58714,77],{"class":66},[49,58716,2207],{"class":73},[49,58718,110],{"class":109},[49,58720,83],{"class":66},[49,58722,58723,58725,58727,58729,58731],{"class":51,"line":9235},[49,58724,56024],{"class":73},[49,58726,77],{"class":66},[49,58728,1665],{"class":73},[49,58730,110],{"class":109},[49,58732,83],{"class":66},[49,58734,58735,58737,58739,58741,58744,58746],{"class":51,"line":9262},[49,58736,55947],{"class":73},[49,58738,77],{"class":66},[49,58740,80],{"class":73},[49,58742,58743],{"class":73}," 50",[49,58745,110],{"class":109},[49,58747,83],{"class":66},[49,58749,58750],{"class":51,"line":9267},[49,58751,3441],{"class":66},[49,58753,58754,58756,58758],{"class":51,"line":9273},[49,58755,53659],{"class":66},[49,58757,1305],{"class":147},[49,58759,52554],{"class":66},[49,58761,58762,58764,58766],{"class":51,"line":9285},[49,58763,53027],{"class":66},[49,58765,52581],{"class":147},[49,58767,52554],{"class":66},[49,58769,58770],{"class":51,"line":9297},[49,58771,3654],{"emptyLinePlaceholder":1330},[49,58773,58774,58776,58778],{"class":51,"line":9309},[49,58775,2300],{"class":66},[49,58777,53042],{"class":147},[49,58779,52554],{"class":66},[49,58781,58782,58784,58786,58789,58791],{"class":51,"line":10968},[49,58783,53386],{"class":66},[49,58785,14],{"class":147},[49,58787,58788],{"class":66},">随机点名\u003C\u002F",[49,58790,14],{"class":147},[49,58792,52554],{"class":66},[49,58794,58795,58797,58799,58801,58803,58805],{"class":51,"line":10993},[49,58796,53386],{"class":66},[49,58798,148],{"class":147},[49,58800,54728],{"class":62},[49,58802,1448],{"class":66},[49,58804,54733],{"class":1505},[49,58806,52554],{"class":66},[49,58808,58809,58811,58813,58816,58818],{"class":51,"line":11016},[49,58810,52588],{"class":66},[49,58812,49],{"class":147},[49,58814,58815],{"class":66},">名字是：\u003C\u002F",[49,58817,49],{"class":147},[49,58819,52554],{"class":66},[49,58821,58822,58824,58826,58828,58830,58833,58836,58838],{"class":51,"line":11040},[49,58823,52588],{"class":66},[49,58825,148],{"class":147},[49,58827,54728],{"class":62},[49,58829,1448],{"class":66},[49,58831,58832],{"class":1505},"\"qs\"",[49,58834,58835],{"class":66},">这里显示姓名\u003C\u002F",[49,58837,148],{"class":147},[49,58839,52554],{"class":66},[49,58841,58842,58844,58846],{"class":51,"line":11045},[49,58843,53659],{"class":66},[49,58845,148],{"class":147},[49,58847,52554],{"class":66},[49,58849,58850,58852,58854,58856,58858,58861],{"class":51,"line":11050},[49,58851,53386],{"class":66},[49,58853,148],{"class":147},[49,58855,54728],{"class":62},[49,58857,1448],{"class":66},[49,58859,58860],{"class":1505},"\"btns\"",[49,58862,52554],{"class":66},[49,58864,58865,58867,58869,58871,58873,58876,58879,58881],{"class":51,"line":11055},[49,58866,52588],{"class":66},[49,58868,55128],{"class":147},[49,58870,54728],{"class":62},[49,58872,1448],{"class":66},[49,58874,58875],{"class":1505},"\"start\"",[49,58877,58878],{"class":66},">开始\u003C\u002F",[49,58880,55128],{"class":147},[49,58882,52554],{"class":66},[49,58884,58885,58887,58889,58891,58893,58896,58899,58901],{"class":51,"line":11064},[49,58886,52588],{"class":66},[49,58888,55128],{"class":147},[49,58890,54728],{"class":62},[49,58892,1448],{"class":66},[49,58894,58895],{"class":1505},"\"end\"",[49,58897,58898],{"class":66},">结束\u003C\u002F",[49,58900,55128],{"class":147},[49,58902,52554],{"class":66},[49,58904,58905,58907,58909],{"class":51,"line":11069},[49,58906,53659],{"class":66},[49,58908,148],{"class":147},[49,58910,52554],{"class":66},[49,58912,58913],{"class":51,"line":11075},[49,58914,3654],{"emptyLinePlaceholder":1330},[49,58916,58917,58919,58921],{"class":51,"line":11096},[49,58918,53386],{"class":66},[49,58920,53055],{"class":147},[49,58922,52554],{"class":66},[49,58924,58925],{"class":51,"line":11102},[49,58926,58927],{"class":55},"    \u002F\u002F 数据数组\n",[49,58929,58930,58932,58935,58937,58939,58942,58944,58947,58949,58952,58954,58957,58959,58962],{"class":51,"line":11116},[49,58931,12473],{"class":109},[49,58933,58934],{"class":73}," arr",[49,58936,14816],{"class":109},[49,58938,53468],{"class":66},[49,58940,58941],{"class":1505},"'马超'",[49,58943,13687],{"class":66},[49,58945,58946],{"class":1505},"'黄忠'",[49,58948,13687],{"class":66},[49,58950,58951],{"class":1505},"'赵云'",[49,58953,13687],{"class":66},[49,58955,58956],{"class":1505},"'关羽'",[49,58958,13687],{"class":66},[49,58960,58961],{"class":1505},"'张飞'",[49,58963,34494],{"class":66},[49,58965,58966,58968,58971,58973,58975,58977,58979,58982],{"class":51,"line":11122},[49,58967,12473],{"class":109},[49,58969,58970],{"class":73}," qs",[49,58972,14816],{"class":109},[49,58974,55637],{"class":66},[49,58976,55640],{"class":62},[49,58978,1403],{"class":66},[49,58980,58981],{"class":1505},"'.qs'",[49,58983,1409],{"class":66},[49,58985,58986],{"class":51,"line":11149},[49,58987,58988],{"class":55},"    \u002F\u002F 1.业务1.开始按钮模块\n",[49,58990,58991,58993,58995,58997,58999,59001,59003,59006],{"class":51,"line":11158},[49,58992,12473],{"class":109},[49,58994,5438],{"class":73},[49,58996,14816],{"class":109},[49,58998,55637],{"class":66},[49,59000,55640],{"class":62},[49,59002,1403],{"class":66},[49,59004,59005],{"class":1505},"'.start'",[49,59007,1409],{"class":66},[49,59009,59010],{"class":51,"line":11164},[49,59011,59012],{"class":55},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[49,59014,59015,59017,59020,59022],{"class":51,"line":11172},[49,59016,53461],{"class":109},[49,59018,59019],{"class":66}," timerId ",[49,59021,1448],{"class":109},[49,59023,48581],{"class":73},[49,59025,59026],{"class":51,"line":11177},[49,59027,59028],{"class":55},"    \u002F\u002F 随机号要全局变量\n",[49,59030,59031,59033,59036,59038],{"class":51,"line":17854},[49,59032,53461],{"class":109},[49,59034,59035],{"class":66}," random ",[49,59037,1448],{"class":109},[49,59039,48581],{"class":73},[49,59041,59042],{"class":51,"line":17860},[49,59043,59044],{"class":55},"    \u002F\u002F 1.1 添加点击事件\n",[49,59046,59047,59050,59053,59055,59058,59060,59062],{"class":51,"line":17883},[49,59048,59049],{"class":66},"    start.",[49,59051,59052],{"class":62},"addEventListener",[49,59054,1403],{"class":66},[49,59056,59057],{"class":1505},"'click'",[49,59059,13687],{"class":66},[49,59061,55690],{"class":109},[49,59063,55693],{"class":66},[49,59065,59066,59069,59071,59073,59075,59077],{"class":51,"line":17889},[49,59067,59068],{"class":66},"      timerId ",[49,59070,1448],{"class":109},[49,59072,55685],{"class":62},[49,59074,1403],{"class":66},[49,59076,55690],{"class":109},[49,59078,55693],{"class":66},[49,59080,59081],{"class":51,"line":17912},[49,59082,59083],{"class":55},"        \u002F\u002F 随机数\n",[49,59085,59086,59089,59091,59094,59097,59100,59102,59104,59106,59108],{"class":51,"line":17926},[49,59087,59088],{"class":66},"        random ",[49,59090,1448],{"class":109},[49,59092,59093],{"class":62}," parseInt",[49,59095,59096],{"class":66},"(Math.",[49,59098,59099],{"class":62},"random",[49,59101,14302],{"class":66},[49,59103,1846],{"class":109},[49,59105,53207],{"class":66},[49,59107,53210],{"class":73},[49,59109,1409],{"class":66},[49,59111,59112,59115,59117],{"class":51,"line":17946},[49,59113,59114],{"class":66},"        qs.innerHTML ",[49,59116,1448],{"class":109},[49,59118,59119],{"class":66}," arr[random]\n",[49,59121,59122,59125,59127],{"class":51,"line":17952},[49,59123,59124],{"class":66},"      }, ",[49,59126,1665],{"class":73},[49,59128,1409],{"class":66},[49,59130,59131],{"class":51,"line":17963},[49,59132,59133],{"class":55},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[49,59135,59136,59138,59141,59143,59146,59148],{"class":51,"line":17986},[49,59137,55721],{"class":109},[49,59139,59140],{"class":66}," (arr.",[49,59142,53210],{"class":73},[49,59144,59145],{"class":109}," ===",[49,59147,26367],{"class":73},[49,59149,13694],{"class":66},[49,59151,59152],{"class":51,"line":18008},[49,59153,59154],{"class":55},"        \u002F\u002F start.disabled = true\n",[49,59156,59157],{"class":51,"line":18013},[49,59158,59159],{"class":55},"        \u002F\u002F end.disabled = true\n",[49,59161,59162],{"class":51,"line":18019},[49,59163,59164],{"class":55},"        \u002F\u002F 可以合起来写\n",[49,59166,59167,59170,59172,59175,59177],{"class":51,"line":18033},[49,59168,59169],{"class":66},"        start.disabled ",[49,59171,1448],{"class":109},[49,59173,59174],{"class":66}," end.disabled ",[49,59176,1448],{"class":109},[49,59178,59179],{"class":73}," true\n",[49,59181,59182],{"class":51,"line":18046},[49,59183,53640],{"class":66},[49,59185,59186],{"class":51,"line":18051},[49,59187,34709],{"class":66},[49,59189,59190],{"class":51,"line":18065},[49,59191,59192],{"class":55},"    \u002F\u002F 1.2 关闭按钮模块\n",[49,59194,59195,59197,59199,59201,59203,59205,59207,59210],{"class":51,"line":18070},[49,59196,12473],{"class":109},[49,59198,5454],{"class":73},[49,59200,14816],{"class":109},[49,59202,55637],{"class":66},[49,59204,55640],{"class":62},[49,59206,1403],{"class":66},[49,59208,59209],{"class":1505},"'.end'",[49,59211,1409],{"class":66},[49,59213,59214,59217,59219,59221,59223,59225,59227],{"class":51,"line":18076},[49,59215,59216],{"class":66},"    end.",[49,59218,59052],{"class":62},[49,59220,1403],{"class":66},[49,59222,59057],{"class":1505},[49,59224,13687],{"class":66},[49,59226,55690],{"class":109},[49,59228,55693],{"class":66},[49,59230,59231,59234],{"class":51,"line":18081},[49,59232,59233],{"class":62},"      clearInterval",[49,59235,59236],{"class":66},"(timerId)\n",[49,59238,59239],{"class":51,"line":18095},[49,59240,59241],{"class":55},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[49,59243,59244,59247,59250,59253,59255],{"class":51,"line":18100},[49,59245,59246],{"class":66},"      arr.",[49,59248,59249],{"class":62},"splice",[49,59251,59252],{"class":66},"(random, ",[49,59254,159],{"class":73},[49,59256,1409],{"class":66},[49,59258,59259],{"class":51,"line":18105},[49,59260,34709],{"class":66},[49,59262,59263],{"class":51,"line":18119},[49,59264,3654],{"emptyLinePlaceholder":1330},[49,59266,59267,59269,59271],{"class":51,"line":18131},[49,59268,53659],{"class":66},[49,59270,53055],{"class":147},[49,59272,52554],{"class":66},[49,59274,59275,59277,59279],{"class":51,"line":18136},[49,59276,53027],{"class":66},[49,59278,53042],{"class":147},[49,59280,52554],{"class":66},[49,59282,59283],{"class":51,"line":18149},[49,59284,3654],{"emptyLinePlaceholder":1330},[49,59286,59287,59289,59291],{"class":51,"line":18154},[49,59288,53027],{"class":66},[49,59290,51883],{"class":147},[49,59292,52554],{"class":66},[19,59294,59295],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[183,59297,59299],{"id":59298},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[39,59301,59303],{"className":51881,"code":59302,"language":51883,"meta":44,"style":44},"\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",[46,59304,59305,59315,59329,59333,59341,59355,59375,59387,59395,59399,59407,59419,59427,59446,59463,59479,59489,59493,59501,59509,59513],{"__ignoreMap":44},[49,59306,59307,59309,59311,59313],{"class":51,"line":52},[49,59308,52545],{"class":66},[49,59310,52548],{"class":147},[49,59312,52551],{"class":62},[49,59314,52554],{"class":66},[49,59316,59317,59319,59321,59323,59325,59327],{"class":51,"line":59},[49,59318,2300],{"class":66},[49,59320,51883],{"class":147},[49,59322,52563],{"class":62},[49,59324,1448],{"class":66},[49,59326,52568],{"class":1505},[49,59328,52554],{"class":66},[49,59330,59331],{"class":51,"line":70},[49,59332,3654],{"emptyLinePlaceholder":1330},[49,59334,59335,59337,59339],{"class":51,"line":86},[49,59336,2300],{"class":66},[49,59338,52581],{"class":147},[49,59340,52554],{"class":66},[49,59342,59343,59345,59347,59349,59351,59353],{"class":51,"line":98},[49,59344,53386],{"class":66},[49,59346,52591],{"class":147},[49,59348,52594],{"class":62},[49,59350,1448],{"class":66},[49,59352,52599],{"class":1505},[49,59354,52554],{"class":66},[49,59356,59357,59359,59361,59363,59365,59367,59369,59371,59373],{"class":51,"line":121},[49,59358,53386],{"class":66},[49,59360,52591],{"class":147},[49,59362,16171],{"class":62},[49,59364,1448],{"class":66},[49,59366,52638],{"class":1505},[49,59368,52618],{"class":62},[49,59370,1448],{"class":66},[49,59372,52645],{"class":1505},[49,59374,52554],{"class":66},[49,59376,59377,59379,59381,59383,59385],{"class":51,"line":134},[49,59378,53386],{"class":66},[49,59380,52654],{"class":147},[49,59382,52657],{"class":66},[49,59384,52654],{"class":147},[49,59386,52554],{"class":66},[49,59388,59389,59391,59393],{"class":51,"line":1085},[49,59390,53027],{"class":66},[49,59392,52581],{"class":147},[49,59394,52554],{"class":66},[49,59396,59397],{"class":51,"line":2574},[49,59398,3654],{"emptyLinePlaceholder":1330},[49,59400,59401,59403,59405],{"class":51,"line":2586},[49,59402,2300],{"class":66},[49,59404,53042],{"class":147},[49,59406,52554],{"class":66},[49,59408,59409,59411,59413,59415,59417],{"class":51,"line":2867},[49,59410,53386],{"class":66},[49,59412,55128],{"class":147},[49,59414,55134],{"class":66},[49,59416,55128],{"class":147},[49,59418,52554],{"class":66},[49,59420,59421,59423,59425],{"class":51,"line":2872},[49,59422,53386],{"class":66},[49,59424,53055],{"class":147},[49,59426,52554],{"class":66},[49,59428,59429,59431,59433,59435,59437,59439,59441,59444],{"class":51,"line":2878},[49,59430,12473],{"class":109},[49,59432,55632],{"class":73},[49,59434,14816],{"class":109},[49,59436,55637],{"class":66},[49,59438,55640],{"class":62},[49,59440,1403],{"class":66},[49,59442,59443],{"class":1505},"'button'",[49,59445,1409],{"class":66},[49,59447,59448,59451,59453,59455,59457,59459,59461],{"class":51,"line":2883},[49,59449,59450],{"class":66},"    btn.",[49,59452,59052],{"class":62},[49,59454,1403],{"class":66},[49,59456,59057],{"class":1505},[49,59458,13687],{"class":66},[49,59460,55690],{"class":109},[49,59462,55693],{"class":66},[49,59464,59465,59468,59470,59472,59475,59477],{"class":51,"line":2897},[49,59466,59467],{"class":109},"      const",[49,59469,3494],{"class":73},[49,59471,14816],{"class":109},[49,59473,59474],{"class":66}," Math.",[49,59476,59099],{"class":62},[49,59478,3230],{"class":66},[49,59480,59481,59484,59487],{"class":51,"line":2902},[49,59482,59483],{"class":66},"      console.",[49,59485,59486],{"class":62},"log",[49,59488,1416],{"class":66},[49,59490,59491],{"class":51,"line":2908},[49,59492,34709],{"class":66},[49,59494,59495,59497,59499],{"class":51,"line":2929},[49,59496,53659],{"class":66},[49,59498,53055],{"class":147},[49,59500,52554],{"class":66},[49,59502,59503,59505,59507],{"class":51,"line":2934},[49,59504,53027],{"class":66},[49,59506,53042],{"class":147},[49,59508,52554],{"class":66},[49,59510,59511],{"class":51,"line":2948},[49,59512,3654],{"emptyLinePlaceholder":1330},[49,59514,59515,59517,59519],{"class":51,"line":2953},[49,59516,53027],{"class":66},[49,59518,51883],{"class":147},[49,59520,52554],{"class":66},[19,59522,59523],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,59525,59526],{},"常量不可以重新赋值",[19,59528,59529],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[39,59531,59533],{"className":51881,"code":59532,"language":51883,"meta":44,"style":44},"\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",[46,59534,59535,59545,59559,59563,59571,59585,59605,59617,59625,59629,59637,59649,59657,59668,59686,59702,59716,59724,59728,59736,59744,59748],{"__ignoreMap":44},[49,59536,59537,59539,59541,59543],{"class":51,"line":52},[49,59538,52545],{"class":66},[49,59540,52548],{"class":147},[49,59542,52551],{"class":62},[49,59544,52554],{"class":66},[49,59546,59547,59549,59551,59553,59555,59557],{"class":51,"line":59},[49,59548,2300],{"class":66},[49,59550,51883],{"class":147},[49,59552,52563],{"class":62},[49,59554,1448],{"class":66},[49,59556,52568],{"class":1505},[49,59558,52554],{"class":66},[49,59560,59561],{"class":51,"line":70},[49,59562,3654],{"emptyLinePlaceholder":1330},[49,59564,59565,59567,59569],{"class":51,"line":86},[49,59566,2300],{"class":66},[49,59568,52581],{"class":147},[49,59570,52554],{"class":66},[49,59572,59573,59575,59577,59579,59581,59583],{"class":51,"line":98},[49,59574,53386],{"class":66},[49,59576,52591],{"class":147},[49,59578,52594],{"class":62},[49,59580,1448],{"class":66},[49,59582,52599],{"class":1505},[49,59584,52554],{"class":66},[49,59586,59587,59589,59591,59593,59595,59597,59599,59601,59603],{"class":51,"line":121},[49,59588,53386],{"class":66},[49,59590,52591],{"class":147},[49,59592,16171],{"class":62},[49,59594,1448],{"class":66},[49,59596,52638],{"class":1505},[49,59598,52618],{"class":62},[49,59600,1448],{"class":66},[49,59602,52645],{"class":1505},[49,59604,52554],{"class":66},[49,59606,59607,59609,59611,59613,59615],{"class":51,"line":134},[49,59608,53386],{"class":66},[49,59610,52654],{"class":147},[49,59612,52657],{"class":66},[49,59614,52654],{"class":147},[49,59616,52554],{"class":66},[49,59618,59619,59621,59623],{"class":51,"line":1085},[49,59620,53027],{"class":66},[49,59622,52581],{"class":147},[49,59624,52554],{"class":66},[49,59626,59627],{"class":51,"line":2574},[49,59628,3654],{"emptyLinePlaceholder":1330},[49,59630,59631,59633,59635],{"class":51,"line":2586},[49,59632,2300],{"class":66},[49,59634,53042],{"class":147},[49,59636,52554],{"class":66},[49,59638,59639,59641,59643,59645,59647],{"class":51,"line":2867},[49,59640,53386],{"class":66},[49,59642,55128],{"class":147},[49,59644,55134],{"class":66},[49,59646,55128],{"class":147},[49,59648,52554],{"class":66},[49,59650,59651,59653,59655],{"class":51,"line":2872},[49,59652,53386],{"class":66},[49,59654,53055],{"class":147},[49,59656,52554],{"class":66},[49,59658,59659,59661,59663,59665],{"class":51,"line":2878},[49,59660,12473],{"class":109},[49,59662,3494],{"class":73},[49,59664,14816],{"class":109},[49,59666,59667],{"class":73}," 10\n",[49,59669,59670,59672,59674,59676,59678,59680,59682,59684],{"class":51,"line":2883},[49,59671,12473],{"class":109},[49,59673,55632],{"class":73},[49,59675,14816],{"class":109},[49,59677,55637],{"class":66},[49,59679,55640],{"class":62},[49,59681,1403],{"class":66},[49,59683,59443],{"class":1505},[49,59685,1409],{"class":66},[49,59687,59688,59690,59692,59694,59696,59698,59700],{"class":51,"line":2897},[49,59689,59450],{"class":66},[49,59691,59052],{"class":62},[49,59693,1403],{"class":66},[49,59695,59057],{"class":1505},[49,59697,13687],{"class":66},[49,59699,55690],{"class":109},[49,59701,55693],{"class":66},[49,59703,59704,59706,59708,59710,59712,59714],{"class":51,"line":2902},[49,59705,59467],{"class":109},[49,59707,3494],{"class":73},[49,59709,14816],{"class":109},[49,59711,59474],{"class":66},[49,59713,59099],{"class":62},[49,59715,3230],{"class":66},[49,59717,59718,59720,59722],{"class":51,"line":2908},[49,59719,59483],{"class":66},[49,59721,59486],{"class":62},[49,59723,1416],{"class":66},[49,59725,59726],{"class":51,"line":2929},[49,59727,34709],{"class":66},[49,59729,59730,59732,59734],{"class":51,"line":2934},[49,59731,53659],{"class":66},[49,59733,53055],{"class":147},[49,59735,52554],{"class":66},[49,59737,59738,59740,59742],{"class":51,"line":2948},[49,59739,53027],{"class":66},[49,59741,53042],{"class":147},[49,59743,52554],{"class":66},[49,59745,59746],{"class":51,"line":2953},[49,59747,3654],{"emptyLinePlaceholder":1330},[49,59749,59750,59752,59754],{"class":51,"line":2982},[49,59751,53027],{"class":66},[49,59753,51883],{"class":147},[49,59755,52554],{"class":66},[19,59757,59758],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[39,59760,59762],{"className":51881,"code":59761,"language":51883,"meta":44,"style":44},"\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",[46,59763,59764,59774,59788,59792,59800,59814,59834,59846,59854,59858,59866,59878,59886,59896,59914,59930,59943,59951,59955,59963,59971,59975],{"__ignoreMap":44},[49,59765,59766,59768,59770,59772],{"class":51,"line":52},[49,59767,52545],{"class":66},[49,59769,52548],{"class":147},[49,59771,52551],{"class":62},[49,59773,52554],{"class":66},[49,59775,59776,59778,59780,59782,59784,59786],{"class":51,"line":59},[49,59777,2300],{"class":66},[49,59779,51883],{"class":147},[49,59781,52563],{"class":62},[49,59783,1448],{"class":66},[49,59785,52568],{"class":1505},[49,59787,52554],{"class":66},[49,59789,59790],{"class":51,"line":70},[49,59791,3654],{"emptyLinePlaceholder":1330},[49,59793,59794,59796,59798],{"class":51,"line":86},[49,59795,2300],{"class":66},[49,59797,52581],{"class":147},[49,59799,52554],{"class":66},[49,59801,59802,59804,59806,59808,59810,59812],{"class":51,"line":98},[49,59803,53386],{"class":66},[49,59805,52591],{"class":147},[49,59807,52594],{"class":62},[49,59809,1448],{"class":66},[49,59811,52599],{"class":1505},[49,59813,52554],{"class":66},[49,59815,59816,59818,59820,59822,59824,59826,59828,59830,59832],{"class":51,"line":121},[49,59817,53386],{"class":66},[49,59819,52591],{"class":147},[49,59821,16171],{"class":62},[49,59823,1448],{"class":66},[49,59825,52638],{"class":1505},[49,59827,52618],{"class":62},[49,59829,1448],{"class":66},[49,59831,52645],{"class":1505},[49,59833,52554],{"class":66},[49,59835,59836,59838,59840,59842,59844],{"class":51,"line":134},[49,59837,53386],{"class":66},[49,59839,52654],{"class":147},[49,59841,52657],{"class":66},[49,59843,52654],{"class":147},[49,59845,52554],{"class":66},[49,59847,59848,59850,59852],{"class":51,"line":1085},[49,59849,53027],{"class":66},[49,59851,52581],{"class":147},[49,59853,52554],{"class":66},[49,59855,59856],{"class":51,"line":2574},[49,59857,3654],{"emptyLinePlaceholder":1330},[49,59859,59860,59862,59864],{"class":51,"line":2586},[49,59861,2300],{"class":66},[49,59863,53042],{"class":147},[49,59865,52554],{"class":66},[49,59867,59868,59870,59872,59874,59876],{"class":51,"line":2867},[49,59869,53386],{"class":66},[49,59871,55128],{"class":147},[49,59873,55134],{"class":66},[49,59875,55128],{"class":147},[49,59877,52554],{"class":66},[49,59879,59880,59882,59884],{"class":51,"line":2872},[49,59881,53386],{"class":66},[49,59883,53055],{"class":147},[49,59885,52554],{"class":66},[49,59887,59888,59890,59892,59894],{"class":51,"line":2878},[49,59889,12473],{"class":109},[49,59891,3494],{"class":73},[49,59893,14816],{"class":109},[49,59895,59667],{"class":73},[49,59897,59898,59900,59902,59904,59906,59908,59910,59912],{"class":51,"line":2883},[49,59899,12473],{"class":109},[49,59901,55632],{"class":73},[49,59903,14816],{"class":109},[49,59905,55637],{"class":66},[49,59907,55640],{"class":62},[49,59909,1403],{"class":66},[49,59911,59443],{"class":1505},[49,59913,1409],{"class":66},[49,59915,59916,59918,59920,59922,59924,59926,59928],{"class":51,"line":2897},[49,59917,59450],{"class":66},[49,59919,59052],{"class":62},[49,59921,1403],{"class":66},[49,59923,59057],{"class":1505},[49,59925,13687],{"class":66},[49,59927,55690],{"class":109},[49,59929,55693],{"class":66},[49,59931,59932,59935,59937,59939,59941],{"class":51,"line":2902},[49,59933,59934],{"class":66},"      num ",[49,59936,1448],{"class":109},[49,59938,59474],{"class":66},[49,59940,59099],{"class":62},[49,59942,3230],{"class":66},[49,59944,59945,59947,59949],{"class":51,"line":2908},[49,59946,59483],{"class":66},[49,59948,59486],{"class":62},[49,59950,1416],{"class":66},[49,59952,59953],{"class":51,"line":2929},[49,59954,34709],{"class":66},[49,59956,59957,59959,59961],{"class":51,"line":2934},[49,59958,53659],{"class":66},[49,59960,53055],{"class":147},[49,59962,52554],{"class":66},[49,59964,59965,59967,59969],{"class":51,"line":2948},[49,59966,53027],{"class":66},[49,59968,53042],{"class":147},[49,59970,52554],{"class":66},[49,59972,59973],{"class":51,"line":2953},[49,59974,3654],{"emptyLinePlaceholder":1330},[49,59976,59977,59979,59981],{"class":51,"line":2982},[49,59978,53027],{"class":66},[49,59980,51883],{"class":147},[49,59982,52554],{"class":66},[19,59984,59985],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[183,59987,59989],{"id":59988},"_324-事件监听版本","3.2.4 事件监听版本",[19,59991,59992],{},[174,59993],{"alt":44,"src":59994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59996,59997],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59999,60000],{},"这种方式会覆盖前边的事件监听:",[39,60002,60004],{"className":51881,"code":60003,"language":51883,"meta":44,"style":44},"\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",[46,60005,60006,60016,60030,60034,60042,60056,60076,60088,60096,60100,60108,60120,60128,60146,60160,60171,60175,60187,60197,60201,60209,60217,60221],{"__ignoreMap":44},[49,60007,60008,60010,60012,60014],{"class":51,"line":52},[49,60009,52545],{"class":66},[49,60011,52548],{"class":147},[49,60013,52551],{"class":62},[49,60015,52554],{"class":66},[49,60017,60018,60020,60022,60024,60026,60028],{"class":51,"line":59},[49,60019,2300],{"class":66},[49,60021,51883],{"class":147},[49,60023,52563],{"class":62},[49,60025,1448],{"class":66},[49,60027,52568],{"class":1505},[49,60029,52554],{"class":66},[49,60031,60032],{"class":51,"line":70},[49,60033,3654],{"emptyLinePlaceholder":1330},[49,60035,60036,60038,60040],{"class":51,"line":86},[49,60037,2300],{"class":66},[49,60039,52581],{"class":147},[49,60041,52554],{"class":66},[49,60043,60044,60046,60048,60050,60052,60054],{"class":51,"line":98},[49,60045,53386],{"class":66},[49,60047,52591],{"class":147},[49,60049,52594],{"class":62},[49,60051,1448],{"class":66},[49,60053,52599],{"class":1505},[49,60055,52554],{"class":66},[49,60057,60058,60060,60062,60064,60066,60068,60070,60072,60074],{"class":51,"line":121},[49,60059,53386],{"class":66},[49,60061,52591],{"class":147},[49,60063,16171],{"class":62},[49,60065,1448],{"class":66},[49,60067,52638],{"class":1505},[49,60069,52618],{"class":62},[49,60071,1448],{"class":66},[49,60073,52645],{"class":1505},[49,60075,52554],{"class":66},[49,60077,60078,60080,60082,60084,60086],{"class":51,"line":134},[49,60079,53386],{"class":66},[49,60081,52654],{"class":147},[49,60083,52657],{"class":66},[49,60085,52654],{"class":147},[49,60087,52554],{"class":66},[49,60089,60090,60092,60094],{"class":51,"line":1085},[49,60091,53027],{"class":66},[49,60093,52581],{"class":147},[49,60095,52554],{"class":66},[49,60097,60098],{"class":51,"line":2574},[49,60099,3654],{"emptyLinePlaceholder":1330},[49,60101,60102,60104,60106],{"class":51,"line":2586},[49,60103,2300],{"class":66},[49,60105,53042],{"class":147},[49,60107,52554],{"class":66},[49,60109,60110,60112,60114,60116,60118],{"class":51,"line":2867},[49,60111,53386],{"class":66},[49,60113,55128],{"class":147},[49,60115,55134],{"class":66},[49,60117,55128],{"class":147},[49,60119,52554],{"class":66},[49,60121,60122,60124,60126],{"class":51,"line":2872},[49,60123,53386],{"class":66},[49,60125,53055],{"class":147},[49,60127,52554],{"class":66},[49,60129,60130,60132,60134,60136,60138,60140,60142,60144],{"class":51,"line":2878},[49,60131,12473],{"class":109},[49,60133,55632],{"class":73},[49,60135,14816],{"class":109},[49,60137,55637],{"class":66},[49,60139,55640],{"class":62},[49,60141,1403],{"class":66},[49,60143,59443],{"class":1505},[49,60145,1409],{"class":66},[49,60147,60148,60150,60153,60155,60158],{"class":51,"line":2883},[49,60149,59450],{"class":66},[49,60151,60152],{"class":62},"onclick",[49,60154,14816],{"class":109},[49,60156,60157],{"class":109}," function",[49,60159,55693],{"class":66},[49,60161,60162,60165,60167,60169],{"class":51,"line":2897},[49,60163,60164],{"class":62},"      alert",[49,60166,1403],{"class":66},[49,60168,1863],{"class":73},[49,60170,1409],{"class":66},[49,60172,60173],{"class":51,"line":2902},[49,60174,3441],{"class":66},[49,60176,60177,60179,60181,60183,60185],{"class":51,"line":2908},[49,60178,59450],{"class":66},[49,60180,60152],{"class":62},[49,60182,14816],{"class":109},[49,60184,60157],{"class":109},[49,60186,55693],{"class":66},[49,60188,60189,60191,60193,60195],{"class":51,"line":2929},[49,60190,60164],{"class":62},[49,60192,1403],{"class":66},[49,60194,2140],{"class":73},[49,60196,1409],{"class":66},[49,60198,60199],{"class":51,"line":2934},[49,60200,3441],{"class":66},[49,60202,60203,60205,60207],{"class":51,"line":2948},[49,60204,53659],{"class":66},[49,60206,53055],{"class":147},[49,60208,52554],{"class":66},[49,60210,60211,60213,60215],{"class":51,"line":2953},[49,60212,53027],{"class":66},[49,60214,53042],{"class":147},[49,60216,52554],{"class":66},[49,60218,60219],{"class":51,"line":2982},[49,60220,3654],{"emptyLinePlaceholder":1330},[49,60222,60223,60225,60227],{"class":51,"line":2987},[49,60224,53027],{"class":66},[49,60226,51883],{"class":147},[49,60228,52554],{"class":66},[19,60230,60231],{},"只要点击就输出结果为22,前边11被覆盖了",[39,60233,60235],{"className":51881,"code":60234,"language":51883,"meta":44,"style":44},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[46,60236,60237,60242,60247,60251,60256,60261],{"__ignoreMap":44},[49,60238,60239],{"class":51,"line":52},[49,60240,60241],{"class":66},"  btn.addEventListener('click', function () {\n",[49,60243,60244],{"class":51,"line":59},[49,60245,60246],{"class":66},"      alert(11)\n",[49,60248,60249],{"class":51,"line":70},[49,60250,34709],{"class":66},[49,60252,60253],{"class":51,"line":86},[49,60254,60255],{"class":66},"    btn.addEventListener('click', function () {\n",[49,60257,60258],{"class":51,"line":98},[49,60259,60260],{"class":66},"      alert(22)\n",[49,60262,60263],{"class":51,"line":121},[49,60264,34709],{"class":66},[19,60266,60267],{},"点击第一次输出11,第二次点击为22",[183,60269,60271],{"id":60270},"_325-事件类型","3.2.5 事件类型",[19,60273,60274],{},[174,60275],{"alt":44,"src":60276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[525,60278,60280],{"id":60279},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60282,60283],{},"补充知识:",[19,60285,60286],{},"轮播图自动播放模块,可以使用",[19,60288,60289],{},"let timerId = setInterval(function () {",[19,60291,60292],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60294,60295],{},"用js方法模拟进行点击事件,click必须加()",[19,60297,60298],{},"next.click()",[19,60300,60301],{},"}, 1000)",[19,60303,60304],{},[174,60305],{"alt":44,"src":60306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[39,60308,60310],{"className":54309,"code":60309,"language":54311,"meta":44,"style":44},"\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",[46,60311,60312,60316,60326,60340,60344,60352,60367,60387,60407,60420,60428,60433,60438,60442,60446,60451,60456,60461,60466,60470,60474,60479,60484,60489,60493,60497,60502,60506,60511,60516,60520,60524,60529,60534,60539,60544,60549,60553,60557,60562,60567,60572,60577,60582,60586,60590,60595,60600,60605,60610,60615,60620,60625,60630,60635,60640,60644,60648,60653,60658,60662,60666,60671,60676,60680,60685,60690,60694,60698,60703,60707,60712,60717,60721,60726,60730,60734,60739,60744,60749,60754,60759,60764,60769,60773,60777,60781,60786,60791,60796,60801,60805,60813,60821,60825,60833,60848,60862,60883,60891,60905,60918,60933,60952,60964,60976,60988,61000,61012,61024,61036,61044,61059,61083,61107,61115,61123,61131,61139,61144,61149,61154,61159,61164,61169,61174,61179,61184,61189,61193,61198,61203,61208,61213,61218,61223,61228,61233,61238,61242,61247,61252,61257,61262,61267,61272,61277,61282,61287,61292,61297,61302,61306,61310,61315,61320,61325,61329,61334,61339,61344,61349,61354,61358,61363,61367,61371,61375,61379,61383,61387,61392,61397,61402,61407,61412,61417,61422,61427,61432,61436,61440,61445,61450,61455,61460,61465,61469,61474,61479,61484,61489,61494,61499,61503,61507,61512,61516,61521,61525,61530,61535,61540,61545,61550,61555,61559,61567,61575,61579],{"__ignoreMap":44},[49,60313,60314],{"class":51,"line":52},[49,60315,3654],{"emptyLinePlaceholder":1330},[49,60317,60318,60320,60322,60324],{"class":51,"line":59},[49,60319,52545],{"class":66},[49,60321,52548],{"class":109},[49,60323,52551],{"class":73},[49,60325,52554],{"class":66},[49,60327,60328,60330,60332,60334,60336,60338],{"class":51,"line":70},[49,60329,2300],{"class":66},[49,60331,51883],{"class":147},[49,60333,52563],{"class":62},[49,60335,1448],{"class":66},[49,60337,52568],{"class":1505},[49,60339,52554],{"class":66},[49,60341,60342],{"class":51,"line":86},[49,60343,3654],{"emptyLinePlaceholder":1330},[49,60345,60346,60348,60350],{"class":51,"line":98},[49,60347,2300],{"class":66},[49,60349,52581],{"class":147},[49,60351,52554],{"class":66},[49,60353,60354,60356,60358,60360,60362,60364],{"class":51,"line":121},[49,60355,53386],{"class":66},[49,60357,52591],{"class":147},[49,60359,52594],{"class":62},[49,60361,1448],{"class":66},[49,60363,52599],{"class":1505},[49,60365,60366],{"class":66}," \u002F>\n",[49,60368,60369,60371,60373,60375,60377,60379,60381,60383,60385],{"class":51,"line":134},[49,60370,53386],{"class":66},[49,60372,52591],{"class":147},[49,60374,52610],{"class":62},[49,60376,1448],{"class":66},[49,60378,52615],{"class":1505},[49,60380,52618],{"class":62},[49,60382,1448],{"class":66},[49,60384,52623],{"class":1505},[49,60386,60366],{"class":66},[49,60388,60389,60391,60393,60395,60397,60399,60401,60403,60405],{"class":51,"line":1085},[49,60390,53386],{"class":66},[49,60392,52591],{"class":147},[49,60394,16171],{"class":62},[49,60396,1448],{"class":66},[49,60398,52638],{"class":1505},[49,60400,52618],{"class":62},[49,60402,1448],{"class":66},[49,60404,52645],{"class":1505},[49,60406,60366],{"class":66},[49,60408,60409,60411,60413,60416,60418],{"class":51,"line":2574},[49,60410,53386],{"class":66},[49,60412,52654],{"class":147},[49,60414,60415],{"class":66},">轮播图点击切换\u003C\u002F",[49,60417,52654],{"class":147},[49,60419,52554],{"class":66},[49,60421,60422,60424,60426],{"class":51,"line":2586},[49,60423,53386],{"class":66},[49,60425,1305],{"class":147},[49,60427,52554],{"class":66},[49,60429,60430],{"class":51,"line":2867},[49,60431,60432],{"class":66},"    * {\n",[49,60434,60435],{"class":51,"line":2872},[49,60436,60437],{"class":66},"      box-sizing: border-box;\n",[49,60439,60440],{"class":51,"line":2878},[49,60441,3441],{"class":66},[49,60443,60444],{"class":51,"line":2883},[49,60445,3654],{"emptyLinePlaceholder":1330},[49,60447,60448],{"class":51,"line":2897},[49,60449,60450],{"class":66},"    .slider {\n",[49,60452,60453],{"class":51,"line":2902},[49,60454,60455],{"class":66},"      width: 560px;\n",[49,60457,60458],{"class":51,"line":2908},[49,60459,60460],{"class":66},"      height: 400px;\n",[49,60462,60463],{"class":51,"line":2929},[49,60464,60465],{"class":66},"      overflow: hidden;\n",[49,60467,60468],{"class":51,"line":2934},[49,60469,3441],{"class":66},[49,60471,60472],{"class":51,"line":2948},[49,60473,3654],{"emptyLinePlaceholder":1330},[49,60475,60476],{"class":51,"line":2953},[49,60477,60478],{"class":66},"    .slider-wrapper {\n",[49,60480,60481],{"class":51,"line":2982},[49,60482,60483],{"class":66},"      width: 100%;\n",[49,60485,60486],{"class":51,"line":2987},[49,60487,60488],{"class":66},"      height: 320px;\n",[49,60490,60491],{"class":51,"line":3004},[49,60492,3441],{"class":66},[49,60494,60495],{"class":51,"line":3009},[49,60496,3654],{"emptyLinePlaceholder":1330},[49,60498,60499],{"class":51,"line":3014},[49,60500,60501],{"class":66},"    .slider-wrapper img {\n",[49,60503,60504],{"class":51,"line":3019},[49,60505,60483],{"class":66},[49,60507,60508],{"class":51,"line":3033},[49,60509,60510],{"class":66},"      height: 100%;\n",[49,60512,60513],{"class":51,"line":3038},[49,60514,60515],{"class":66},"      display: block;\n",[49,60517,60518],{"class":51,"line":3831},[49,60519,3441],{"class":66},[49,60521,60522],{"class":51,"line":3845},[49,60523,3654],{"emptyLinePlaceholder":1330},[49,60525,60526],{"class":51,"line":3853},[49,60527,60528],{"class":66},"    .slider-footer {\n",[49,60530,60531],{"class":51,"line":3858},[49,60532,60533],{"class":66},"      height: 80px;\n",[49,60535,60536],{"class":51,"line":3864},[49,60537,60538],{"class":66},"      background-color: rgb(100, 67, 68);\n",[49,60540,60541],{"class":51,"line":3870},[49,60542,60543],{"class":66},"      padding: 12px 12px 0 12px;\n",[49,60545,60546],{"class":51,"line":3875},[49,60547,60548],{"class":66},"      position: relative;\n",[49,60550,60551],{"class":51,"line":9200},[49,60552,3441],{"class":66},[49,60554,60555],{"class":51,"line":9224},[49,60556,3654],{"emptyLinePlaceholder":1330},[49,60558,60559],{"class":51,"line":9229},[49,60560,60561],{"class":66},"    .slider-footer .toggle {\n",[49,60563,60564],{"class":51,"line":9235},[49,60565,60566],{"class":66},"      position: absolute;\n",[49,60568,60569],{"class":51,"line":9262},[49,60570,60571],{"class":66},"      right: 0;\n",[49,60573,60574],{"class":51,"line":9267},[49,60575,60576],{"class":66},"      top: 12px;\n",[49,60578,60579],{"class":51,"line":9273},[49,60580,60581],{"class":66},"      display: flex;\n",[49,60583,60584],{"class":51,"line":9285},[49,60585,3441],{"class":66},[49,60587,60588],{"class":51,"line":9297},[49,60589,3654],{"emptyLinePlaceholder":1330},[49,60591,60592],{"class":51,"line":9309},[49,60593,60594],{"class":66},"    .slider-footer .toggle button {\n",[49,60596,60597],{"class":51,"line":10968},[49,60598,60599],{"class":66},"      margin-right: 12px;\n",[49,60601,60602],{"class":51,"line":10993},[49,60603,60604],{"class":66},"      width: 28px;\n",[49,60606,60607],{"class":51,"line":11016},[49,60608,60609],{"class":66},"      height: 28px;\n",[49,60611,60612],{"class":51,"line":11040},[49,60613,60614],{"class":66},"      appearance: none;\n",[49,60616,60617],{"class":51,"line":11045},[49,60618,60619],{"class":66},"      border: none;\n",[49,60621,60622],{"class":51,"line":11050},[49,60623,60624],{"class":66},"      background: rgba(255, 255, 255, 0.1);\n",[49,60626,60627],{"class":51,"line":11055},[49,60628,60629],{"class":66},"      color: #fff;\n",[49,60631,60632],{"class":51,"line":11064},[49,60633,60634],{"class":66},"      border-radius: 4px;\n",[49,60636,60637],{"class":51,"line":11069},[49,60638,60639],{"class":66},"      cursor: pointer;\n",[49,60641,60642],{"class":51,"line":11075},[49,60643,3441],{"class":66},[49,60645,60646],{"class":51,"line":11096},[49,60647,3654],{"emptyLinePlaceholder":1330},[49,60649,60650],{"class":51,"line":11102},[49,60651,60652],{"class":66},"    .slider-footer .toggle button:hover {\n",[49,60654,60655],{"class":51,"line":11116},[49,60656,60657],{"class":66},"      background: rgba(255, 255, 255, 0.2);\n",[49,60659,60660],{"class":51,"line":11122},[49,60661,3441],{"class":66},[49,60663,60664],{"class":51,"line":11149},[49,60665,3654],{"emptyLinePlaceholder":1330},[49,60667,60668],{"class":51,"line":11158},[49,60669,60670],{"class":66},"    .slider-footer p {\n",[49,60672,60673],{"class":51,"line":11164},[49,60674,60675],{"class":66},"      margin: 0;\n",[49,60677,60678],{"class":51,"line":11172},[49,60679,60629],{"class":66},[49,60681,60682],{"class":51,"line":11177},[49,60683,60684],{"class":66},"      font-size: 18px;\n",[49,60686,60687],{"class":51,"line":17854},[49,60688,60689],{"class":66},"      margin-bottom: 10px;\n",[49,60691,60692],{"class":51,"line":17860},[49,60693,3441],{"class":66},[49,60695,60696],{"class":51,"line":17883},[49,60697,3654],{"emptyLinePlaceholder":1330},[49,60699,60700],{"class":51,"line":17889},[49,60701,60702],{"class":66},"    .slider-indicator {\n",[49,60704,60705],{"class":51,"line":17912},[49,60706,60675],{"class":66},[49,60708,60709],{"class":51,"line":17926},[49,60710,60711],{"class":66},"      padding: 0;\n",[49,60713,60714],{"class":51,"line":17946},[49,60715,60716],{"class":66},"      list-style: none;\n",[49,60718,60719],{"class":51,"line":17952},[49,60720,60581],{"class":66},[49,60722,60723],{"class":51,"line":17963},[49,60724,60725],{"class":66},"      align-items: center;\n",[49,60727,60728],{"class":51,"line":17986},[49,60729,3441],{"class":66},[49,60731,60732],{"class":51,"line":18008},[49,60733,3654],{"emptyLinePlaceholder":1330},[49,60735,60736],{"class":51,"line":18013},[49,60737,60738],{"class":66},"    .slider-indicator li {\n",[49,60740,60741],{"class":51,"line":18019},[49,60742,60743],{"class":66},"      width: 8px;\n",[49,60745,60746],{"class":51,"line":18033},[49,60747,60748],{"class":66},"      height: 8px;\n",[49,60750,60751],{"class":51,"line":18046},[49,60752,60753],{"class":66},"      margin: 4px;\n",[49,60755,60756],{"class":51,"line":18051},[49,60757,60758],{"class":66},"      border-radius: 50%;\n",[49,60760,60761],{"class":51,"line":18065},[49,60762,60763],{"class":66},"      background: #fff;\n",[49,60765,60766],{"class":51,"line":18070},[49,60767,60768],{"class":66},"      opacity: 0.4;\n",[49,60770,60771],{"class":51,"line":18076},[49,60772,60639],{"class":66},[49,60774,60775],{"class":51,"line":18081},[49,60776,3441],{"class":66},[49,60778,60779],{"class":51,"line":18095},[49,60780,3654],{"emptyLinePlaceholder":1330},[49,60782,60783],{"class":51,"line":18100},[49,60784,60785],{"class":66},"    .slider-indicator li.active {\n",[49,60787,60788],{"class":51,"line":18105},[49,60789,60790],{"class":66},"      width: 12px;\n",[49,60792,60793],{"class":51,"line":18119},[49,60794,60795],{"class":66},"      height: 12px;\n",[49,60797,60798],{"class":51,"line":18131},[49,60799,60800],{"class":66},"      opacity: 1;\n",[49,60802,60803],{"class":51,"line":18136},[49,60804,3441],{"class":66},[49,60806,60807,60809,60811],{"class":51,"line":18149},[49,60808,53659],{"class":66},[49,60810,1305],{"class":147},[49,60812,52554],{"class":66},[49,60814,60815,60817,60819],{"class":51,"line":18154},[49,60816,53027],{"class":66},[49,60818,52581],{"class":147},[49,60820,52554],{"class":66},[49,60822,60823],{"class":51,"line":18159},[49,60824,3654],{"emptyLinePlaceholder":1330},[49,60826,60827,60829,60831],{"class":51,"line":18164},[49,60828,2300],{"class":66},[49,60830,53042],{"class":147},[49,60832,52554],{"class":66},[49,60834,60835,60837,60839,60841,60843,60846],{"class":51,"line":18177},[49,60836,53386],{"class":66},[49,60838,148],{"class":147},[49,60840,54728],{"class":62},[49,60842,1448],{"class":66},[49,60844,60845],{"class":1505},"\"slider\"",[49,60847,52554],{"class":66},[49,60849,60850,60852,60854,60856,60858,60860],{"class":51,"line":18182},[49,60851,52588],{"class":66},[49,60853,148],{"class":147},[49,60855,54728],{"class":62},[49,60857,1448],{"class":66},[49,60859,56466],{"class":1505},[49,60861,52554],{"class":66},[49,60863,60864,60866,60868,60870,60872,60875,60877,60879,60881],{"class":51,"line":33881},[49,60865,56473],{"class":66},[49,60867,174],{"class":147},[49,60869,56478],{"class":62},[49,60871,1448],{"class":66},[49,60873,60874],{"class":1505},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[49,60876,56486],{"class":62},[49,60878,1448],{"class":66},[49,60880,8904],{"class":1505},[49,60882,60366],{"class":66},[49,60884,60885,60887,60889],{"class":51,"line":33887},[49,60886,53018],{"class":66},[49,60888,148],{"class":147},[49,60890,52554],{"class":66},[49,60892,60893,60895,60897,60899,60901,60903],{"class":51,"line":33893},[49,60894,52588],{"class":66},[49,60896,148],{"class":147},[49,60898,54728],{"class":62},[49,60900,1448],{"class":66},[49,60902,56513],{"class":1505},[49,60904,52554],{"class":66},[49,60906,60907,60909,60911,60914,60916],{"class":51,"line":33899},[49,60908,56473],{"class":66},[49,60910,19],{"class":147},[49,60912,60913],{"class":66},">对人类来说会不会太超前了？\u003C\u002F",[49,60915,19],{"class":147},[49,60917,52554],{"class":66},[49,60919,60920,60922,60924,60926,60928,60931],{"class":51,"line":33905},[49,60921,56473],{"class":66},[49,60923,23],{"class":147},[49,60925,54728],{"class":62},[49,60927,1448],{"class":66},[49,60929,60930],{"class":1505},"\"slider-indicator\"",[49,60932,52554],{"class":66},[49,60934,60935,60937,60939,60941,60943,60946,60948,60950],{"class":51,"line":33916},[49,60936,56541],{"class":66},[49,60938,26],{"class":147},[49,60940,54728],{"class":62},[49,60942,1448],{"class":66},[49,60944,60945],{"class":1505},"\"active\"",[49,60947,56553],{"class":66},[49,60949,26],{"class":147},[49,60951,52554],{"class":66},[49,60953,60954,60956,60958,60960,60962],{"class":51,"line":33922},[49,60955,56541],{"class":66},[49,60957,26],{"class":147},[49,60959,56553],{"class":66},[49,60961,26],{"class":147},[49,60963,52554],{"class":66},[49,60965,60966,60968,60970,60972,60974],{"class":51,"line":33942},[49,60967,56541],{"class":66},[49,60969,26],{"class":147},[49,60971,56553],{"class":66},[49,60973,26],{"class":147},[49,60975,52554],{"class":66},[49,60977,60978,60980,60982,60984,60986],{"class":51,"line":33948},[49,60979,56541],{"class":66},[49,60981,26],{"class":147},[49,60983,56553],{"class":66},[49,60985,26],{"class":147},[49,60987,52554],{"class":66},[49,60989,60990,60992,60994,60996,60998],{"class":51,"line":33959},[49,60991,56541],{"class":66},[49,60993,26],{"class":147},[49,60995,56553],{"class":66},[49,60997,26],{"class":147},[49,60999,52554],{"class":66},[49,61001,61002,61004,61006,61008,61010],{"class":51,"line":33965},[49,61003,56541],{"class":66},[49,61005,26],{"class":147},[49,61007,56553],{"class":66},[49,61009,26],{"class":147},[49,61011,52554],{"class":66},[49,61013,61014,61016,61018,61020,61022],{"class":51,"line":33971},[49,61015,56541],{"class":66},[49,61017,26],{"class":147},[49,61019,56553],{"class":66},[49,61021,26],{"class":147},[49,61023,52554],{"class":66},[49,61025,61026,61028,61030,61032,61034],{"class":51,"line":33977},[49,61027,56541],{"class":66},[49,61029,26],{"class":147},[49,61031,56553],{"class":66},[49,61033,26],{"class":147},[49,61035,52554],{"class":66},[49,61037,61038,61040,61042],{"class":51,"line":33983},[49,61039,56646],{"class":66},[49,61041,23],{"class":147},[49,61043,52554],{"class":66},[49,61045,61046,61048,61050,61052,61054,61057],{"class":51,"line":33989},[49,61047,56473],{"class":66},[49,61049,148],{"class":147},[49,61051,54728],{"class":62},[49,61053,1448],{"class":66},[49,61055,61056],{"class":1505},"\"toggle\"",[49,61058,52554],{"class":66},[49,61060,61061,61063,61065,61067,61069,61072,61074,61077,61079,61081],{"class":51,"line":33995},[49,61062,56541],{"class":66},[49,61064,55128],{"class":147},[49,61066,54728],{"class":62},[49,61068,1448],{"class":66},[49,61070,61071],{"class":1505},"\"prev\"",[49,61073,2349],{"class":66},[49,61075,61076],{"class":73},"&lt;",[49,61078,53027],{"class":66},[49,61080,55128],{"class":147},[49,61082,52554],{"class":66},[49,61084,61085,61087,61089,61091,61093,61096,61098,61101,61103,61105],{"class":51,"line":34001},[49,61086,56541],{"class":66},[49,61088,55128],{"class":147},[49,61090,54728],{"class":62},[49,61092,1448],{"class":66},[49,61094,61095],{"class":1505},"\"next\"",[49,61097,2349],{"class":66},[49,61099,61100],{"class":73},"&gt;",[49,61102,53027],{"class":66},[49,61104,55128],{"class":147},[49,61106,52554],{"class":66},[49,61108,61109,61111,61113],{"class":51,"line":34021},[49,61110,56646],{"class":66},[49,61112,148],{"class":147},[49,61114,52554],{"class":66},[49,61116,61117,61119,61121],{"class":51,"line":34027},[49,61118,53018],{"class":66},[49,61120,148],{"class":147},[49,61122,52554],{"class":66},[49,61124,61125,61127,61129],{"class":51,"line":34043},[49,61126,53659],{"class":66},[49,61128,148],{"class":147},[49,61130,52554],{"class":66},[49,61132,61133,61135,61137],{"class":51,"line":34049},[49,61134,53386],{"class":66},[49,61136,53055],{"class":147},[49,61138,52554],{"class":66},[49,61140,61141],{"class":51,"line":34063},[49,61142,61143],{"class":66},"    \u002F\u002F 1. 初始数据\n",[49,61145,61146],{"class":51,"line":34069},[49,61147,61148],{"class":66},"    const data = [\n",[49,61150,61151],{"class":51,"line":34084},[49,61152,61153],{"class":66},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[49,61155,61156],{"class":51,"line":34090},[49,61157,61158],{"class":66},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[49,61160,61161],{"class":51,"line":34099},[49,61162,61163],{"class":66},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[49,61165,61166],{"class":51,"line":34105},[49,61167,61168],{"class":66},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[49,61170,61171],{"class":51,"line":34114},[49,61172,61173],{"class":66},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[49,61175,61176],{"class":51,"line":34120},[49,61177,61178],{"class":66},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[49,61180,61181],{"class":51,"line":34126},[49,61182,61183],{"class":66},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[49,61185,61186],{"class":51,"line":34135},[49,61187,61188],{"class":66},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[49,61190,61191],{"class":51,"line":34141},[49,61192,54351],{"class":66},[49,61194,61195],{"class":51,"line":34152},[49,61196,61197],{"class":66},"    \u002F\u002F 获取元素\n",[49,61199,61200],{"class":51,"line":34158},[49,61201,61202],{"class":66},"    const img = document.querySelector('.slider-wrapper img')\n",[49,61204,61205],{"class":51,"line":34177},[49,61206,61207],{"class":66},"    const p = document.querySelector('.slider-footer p')\n",[49,61209,61210],{"class":51,"line":34183},[49,61211,61212],{"class":66},"    const footer = document.querySelector('.slider-footer')\n",[49,61214,61215],{"class":51,"line":34194},[49,61216,61217],{"class":66},"    \u002F\u002F 1. 右按钮业务\n",[49,61219,61220],{"class":51,"line":34200},[49,61221,61222],{"class":66},"    \u002F\u002F 1.1 获取右侧按钮 \n",[49,61224,61225],{"class":51,"line":34220},[49,61226,61227],{"class":66},"    const next = document.querySelector('.next')\n",[49,61229,61230],{"class":51,"line":34236},[49,61231,61232],{"class":66},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[49,61234,61235],{"class":51,"line":34242},[49,61236,61237],{"class":66},"    \u002F\u002F 1.2 注册点击事件\n",[49,61239,61240],{"class":51,"line":34256},[49,61241,3654],{"emptyLinePlaceholder":1330},[49,61243,61244],{"class":51,"line":34262},[49,61245,61246],{"class":66},"    next.addEventListener('click', function () {\n",[49,61248,61249],{"class":51,"line":34268},[49,61250,61251],{"class":66},"      \u002F\u002F console.log(11)\n",[49,61253,61254],{"class":51,"line":34279},[49,61255,61256],{"class":66},"      i++\n",[49,61258,61259],{"class":51,"line":34285},[49,61260,61261],{"class":66},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[49,61263,61264],{"class":51,"line":34291},[49,61265,61266],{"class":66},"      \u002F\u002F if (i >= 8) {\n",[49,61268,61269],{"class":51,"line":34301},[49,61270,61271],{"class":66},"      \u002F\u002F   i = 0\n",[49,61273,61274],{"class":51,"line":34307},[49,61275,61276],{"class":66},"      \u002F\u002F }\n",[49,61278,61279],{"class":51,"line":34318},[49,61280,61281],{"class":66},"      i = i >= data.length ? 0 : i\n",[49,61283,61284],{"class":51,"line":34324},[49,61285,61286],{"class":66},"      \u002F\u002F 1.3 得到对应的对象\n",[49,61288,61289],{"class":51,"line":34334},[49,61290,61291],{"class":66},"      \u002F\u002F console.log(data[i])\n",[49,61293,61294],{"class":51,"line":34339},[49,61295,61296],{"class":66},"      \u002F\u002F 调用函数\n",[49,61298,61299],{"class":51,"line":34345},[49,61300,61301],{"class":66},"      toggle()\n",[49,61303,61304],{"class":51,"line":34394},[49,61305,34709],{"class":66},[49,61307,61308],{"class":51,"line":34441},[49,61309,3654],{"emptyLinePlaceholder":1330},[49,61311,61312],{"class":51,"line":34446},[49,61313,61314],{"class":66},"    \u002F\u002F 2. 左侧按钮业务\n",[49,61316,61317],{"class":51,"line":34452},[49,61318,61319],{"class":66},"    \u002F\u002F 2.1 获取左侧按钮 \n",[49,61321,61322],{"class":51,"line":34471},[49,61323,61324],{"class":66},"    const prev = document.querySelector('.prev')\n",[49,61326,61327],{"class":51,"line":34477},[49,61328,61237],{"class":66},[49,61330,61331],{"class":51,"line":34497},[49,61332,61333],{"class":66},"    prev.addEventListener('click', function () {\n",[49,61335,61336],{"class":51,"line":34503},[49,61337,61338],{"class":66},"      i--\n",[49,61340,61341],{"class":51,"line":34509},[49,61342,61343],{"class":66},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[49,61345,61346],{"class":51,"line":34519},[49,61347,61348],{"class":66},"      \u002F\u002F if (i \u003C 0) {\n",[49,61350,61351],{"class":51,"line":34524},[49,61352,61353],{"class":66},"      \u002F\u002F   i = 7\n",[49,61355,61356],{"class":51,"line":34530},[49,61357,61276],{"class":66},[49,61359,61360],{"class":51,"line":34546},[49,61361,61362],{"class":66},"      i = i \u003C 0 ? data.length - 1 : i\n",[49,61364,61365],{"class":51,"line":34591},[49,61366,61286],{"class":66},[49,61368,61369],{"class":51,"line":34597},[49,61370,61291],{"class":66},[49,61372,61373],{"class":51,"line":34603},[49,61374,61296],{"class":66},[49,61376,61377],{"class":51,"line":34609},[49,61378,61301],{"class":66},[49,61380,61381],{"class":51,"line":34620},[49,61382,34709],{"class":66},[49,61384,61385],{"class":51,"line":34626},[49,61386,3654],{"emptyLinePlaceholder":1330},[49,61388,61389],{"class":51,"line":34632},[49,61390,61391],{"class":66},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[49,61393,61394],{"class":51,"line":34638},[49,61395,61396],{"class":66},"    function toggle() {\n",[49,61398,61399],{"class":51,"line":34656},[49,61400,61401],{"class":66},"      \u002F\u002F 1.4 渲染对应的数据\n",[49,61403,61404],{"class":51,"line":34670},[49,61405,61406],{"class":66},"      img.src = data[i].url\n",[49,61408,61409],{"class":51,"line":34679},[49,61410,61411],{"class":66},"      p.innerHTML = data[i].title\n",[49,61413,61414],{"class":51,"line":34688},[49,61415,61416],{"class":66},"      footer.style.backgroundColor = data[i].color\n",[49,61418,61419],{"class":51,"line":34697},[49,61420,61421],{"class":66},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[49,61423,61424],{"class":51,"line":34706},[49,61425,61426],{"class":66},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[49,61428,61429],{"class":51,"line":34712},[49,61430,61431],{"class":66},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[49,61433,61434],{"class":51,"line":34718},[49,61435,3441],{"class":66},[49,61437,61438],{"class":51,"line":34726},[49,61439,3654],{"emptyLinePlaceholder":1330},[49,61441,61442],{"class":51,"line":34731},[49,61443,61444],{"class":66},"    \u002F\u002F 3. 自动播放模块\n",[49,61446,61447],{"class":51,"line":34737},[49,61448,61449],{"class":66},"    let timerId = setInterval(function () {\n",[49,61451,61452],{"class":51,"line":34748},[49,61453,61454],{"class":66},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[49,61456,61457],{"class":51,"line":34754},[49,61458,61459],{"class":66},"      next.click()\n",[49,61461,61462],{"class":51,"line":34774},[49,61463,61464],{"class":66},"    }, 1000)\n",[49,61466,61467],{"class":51,"line":34780},[49,61468,3654],{"emptyLinePlaceholder":1330},[49,61470,61471],{"class":51,"line":34786},[49,61472,61473],{"class":66},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[49,61475,61476],{"class":51,"line":34792},[49,61477,61478],{"class":66},"    const slider = document.querySelector('.slider')\n",[49,61480,61481],{"class":51,"line":34809},[49,61482,61483],{"class":66},"    \u002F\u002F 注册事件\n",[49,61485,61486],{"class":51,"line":34815},[49,61487,61488],{"class":66},"    slider.addEventListener('mouseenter', function () {\n",[49,61490,61491],{"class":51,"line":34821},[49,61492,61493],{"class":66},"      \u002F\u002F 停止定时器\n",[49,61495,61496],{"class":51,"line":34827},[49,61497,61498],{"class":66},"      clearInterval(timerId)\n",[49,61500,61501],{"class":51,"line":34833},[49,61502,34709],{"class":66},[49,61504,61505],{"class":51,"line":34839},[49,61506,3654],{"emptyLinePlaceholder":1330},[49,61508,61509],{"class":51,"line":34866},[49,61510,61511],{"class":66},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[49,61513,61514],{"class":51,"line":34890},[49,61515,61483],{"class":66},[49,61517,61518],{"class":51,"line":34896},[49,61519,61520],{"class":66},"    slider.addEventListener('mouseleave', function () {\n",[49,61522,61523],{"class":51,"line":34902},[49,61524,61493],{"class":66},[49,61526,61527],{"class":51,"line":34908},[49,61528,61529],{"class":66},"      if (timerId) clearInterval(timerId)\n",[49,61531,61532],{"class":51,"line":34919},[49,61533,61534],{"class":66},"      \u002F\u002F 开启定时器\n",[49,61536,61537],{"class":51,"line":34930},[49,61538,61539],{"class":66},"      timerId = setInterval(function () {\n",[49,61541,61542],{"class":51,"line":34936},[49,61543,61544],{"class":66},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[49,61546,61547],{"class":51,"line":34953},[49,61548,61549],{"class":66},"        next.click()\n",[49,61551,61552],{"class":51,"line":34976},[49,61553,61554],{"class":66},"      }, 1000)\n",[49,61556,61557],{"class":51,"line":34999},[49,61558,34709],{"class":66},[49,61560,61561,61563,61565],{"class":51,"line":35005},[49,61562,53659],{"class":66},[49,61564,53055],{"class":147},[49,61566,52554],{"class":66},[49,61568,61569,61571,61573],{"class":51,"line":35010},[49,61570,53027],{"class":66},[49,61572,53042],{"class":147},[49,61574,52554],{"class":66},[49,61576,61577],{"class":51,"line":35019},[49,61578,3654],{"emptyLinePlaceholder":1330},[49,61580,61581,61583,61585],{"class":51,"line":35029},[49,61582,53027],{"class":66},[49,61584,51883],{"class":147},[49,61586,52554],{"class":66},[525,61588,61590],{"id":61589},"_3252-焦点事件","3.2.5.2 焦点事件",[19,61592,61593],{},"小米搜索框案例：",[39,61595,61597],{"className":51881,"code":61596,"language":51883,"meta":44,"style":44},"\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",[46,61598,61599,61609,61623,61627,61635,61649,61669,61689,61701,61709,61715,61725,61735,61747,61751,61755,61762,61766,61777,61781,61785,61792,61803,61816,61830,61834,61838,61847,61859,61871,61885,61898,61911,61929,61940,61944,61948,61957,61974,61978,61982,61989,61999,62009,62020,62033,62045,62061,62072,62084,62088,62092,62100,62110,62127,62139,62151,62162,62166,62170,62181,62192,62196,62204,62208,62216,62220,62228,62243,62266,62281,62312,62339,62366,62393,62420,62447,62474,62483,62491,62499,62504,62524,62544,62549,62554,62572,62577,62587,62592,62606,62611,62616,62633,62642,62654,62658,62666,62674,62678],{"__ignoreMap":44},[49,61600,61601,61603,61605,61607],{"class":51,"line":52},[49,61602,52545],{"class":66},[49,61604,52548],{"class":147},[49,61606,52551],{"class":62},[49,61608,52554],{"class":66},[49,61610,61611,61613,61615,61617,61619,61621],{"class":51,"line":59},[49,61612,2300],{"class":66},[49,61614,51883],{"class":147},[49,61616,52563],{"class":62},[49,61618,1448],{"class":66},[49,61620,52568],{"class":1505},[49,61622,52554],{"class":66},[49,61624,61625],{"class":51,"line":70},[49,61626,3654],{"emptyLinePlaceholder":1330},[49,61628,61629,61631,61633],{"class":51,"line":86},[49,61630,2300],{"class":66},[49,61632,52581],{"class":147},[49,61634,52554],{"class":66},[49,61636,61637,61639,61641,61643,61645,61647],{"class":51,"line":98},[49,61638,52588],{"class":66},[49,61640,52591],{"class":147},[49,61642,52594],{"class":62},[49,61644,1448],{"class":66},[49,61646,52599],{"class":1505},[49,61648,52554],{"class":66},[49,61650,61651,61653,61655,61657,61659,61661,61663,61665,61667],{"class":51,"line":121},[49,61652,52588],{"class":66},[49,61654,52591],{"class":147},[49,61656,52610],{"class":62},[49,61658,1448],{"class":66},[49,61660,52615],{"class":1505},[49,61662,52618],{"class":62},[49,61664,1448],{"class":66},[49,61666,52623],{"class":1505},[49,61668,52554],{"class":66},[49,61670,61671,61673,61675,61677,61679,61681,61683,61685,61687],{"class":51,"line":134},[49,61672,52588],{"class":66},[49,61674,52591],{"class":147},[49,61676,16171],{"class":62},[49,61678,1448],{"class":66},[49,61680,52638],{"class":1505},[49,61682,52618],{"class":62},[49,61684,1448],{"class":66},[49,61686,52645],{"class":1505},[49,61688,52554],{"class":66},[49,61690,61691,61693,61695,61697,61699],{"class":51,"line":1085},[49,61692,52588],{"class":66},[49,61694,52654],{"class":147},[49,61696,52657],{"class":66},[49,61698,52654],{"class":147},[49,61700,52554],{"class":66},[49,61702,61703,61705,61707],{"class":51,"line":2574},[49,61704,52588],{"class":66},[49,61706,1305],{"class":147},[49,61708,52554],{"class":66},[49,61710,61711,61713],{"class":51,"line":2586},[49,61712,52674],{"class":147},[49,61714,67],{"class":66},[49,61716,61717,61719,61721,61723],{"class":51,"line":2867},[49,61718,52681],{"class":73},[49,61720,77],{"class":66},[49,61722,80],{"class":73},[49,61724,83],{"class":66},[49,61726,61727,61729,61731,61733],{"class":51,"line":2872},[49,61728,52692],{"class":73},[49,61730,77],{"class":66},[49,61732,80],{"class":73},[49,61734,83],{"class":66},[49,61736,61737,61740,61742,61745],{"class":51,"line":2878},[49,61738,61739],{"class":73},"            box-sizing",[49,61741,77],{"class":66},[49,61743,61744],{"class":73},"border-box",[49,61746,83],{"class":66},[49,61748,61749],{"class":51,"line":2883},[49,61750,3783],{"class":66},[49,61752,61753],{"class":51,"line":2897},[49,61754,3654],{"emptyLinePlaceholder":1330},[49,61756,61757,61760],{"class":51,"line":2902},[49,61758,61759],{"class":147},"        ul",[49,61761,67],{"class":66},[49,61763,61764],{"class":51,"line":2908},[49,61765,3654],{"emptyLinePlaceholder":1330},[49,61767,61768,61771,61773,61775],{"class":51,"line":2929},[49,61769,61770],{"class":73},"            list-style",[49,61772,77],{"class":66},[49,61774,460],{"class":73},[49,61776,83],{"class":66},[49,61778,61779],{"class":51,"line":2934},[49,61780,3783],{"class":66},[49,61782,61783],{"class":51,"line":2948},[49,61784,3654],{"emptyLinePlaceholder":1330},[49,61786,61787,61790],{"class":51,"line":2953},[49,61788,61789],{"class":62},"        .mi",[49,61791,67],{"class":66},[49,61793,61794,61797,61799,61801],{"class":51,"line":2982},[49,61795,61796],{"class":73},"            position",[49,61798,77],{"class":66},[49,61800,850],{"class":73},[49,61802,83],{"class":66},[49,61804,61805,61807,61809,61812,61814],{"class":51,"line":2987},[49,61806,52730],{"class":73},[49,61808,77],{"class":66},[49,61810,61811],{"class":73},"223",[49,61813,110],{"class":109},[49,61815,83],{"class":66},[49,61817,61818,61820,61822,61824,61826,61828],{"class":51,"line":3004},[49,61819,52681],{"class":73},[49,61821,77],{"class":66},[49,61823,1703],{"class":73},[49,61825,110],{"class":109},[49,61827,1077],{"class":73},[49,61829,83],{"class":66},[49,61831,61832],{"class":51,"line":3009},[49,61833,3783],{"class":66},[49,61835,61836],{"class":51,"line":3014},[49,61837,3654],{"emptyLinePlaceholder":1330},[49,61839,61840,61842,61845],{"class":51,"line":3019},[49,61841,61789],{"class":62},[49,61843,61844],{"class":147}," input",[49,61846,67],{"class":66},[49,61848,61849,61851,61853,61855,61857],{"class":51,"line":3033},[49,61850,52730],{"class":73},[49,61852,77],{"class":66},[49,61854,61811],{"class":73},[49,61856,110],{"class":109},[49,61858,83],{"class":66},[49,61860,61861,61863,61865,61867,61869],{"class":51,"line":3038},[49,61862,52744],{"class":73},[49,61864,77],{"class":66},[49,61866,1998],{"class":73},[49,61868,110],{"class":109},[49,61870,83],{"class":66},[49,61872,61873,61875,61877,61879,61881,61883],{"class":51,"line":3831},[49,61874,52692],{"class":73},[49,61876,77],{"class":66},[49,61878,80],{"class":73},[49,61880,3292],{"class":73},[49,61882,110],{"class":109},[49,61884,83],{"class":66},[49,61886,61887,61890,61892,61894,61896],{"class":51,"line":3845},[49,61888,61889],{"class":73},"            font-size",[49,61891,77],{"class":66},[49,61893,1940],{"class":73},[49,61895,110],{"class":109},[49,61897,83],{"class":66},[49,61899,61900,61903,61905,61907,61909],{"class":51,"line":3853},[49,61901,61902],{"class":73},"            line-height",[49,61904,77],{"class":66},[49,61906,1998],{"class":73},[49,61908,110],{"class":109},[49,61910,83],{"class":66},[49,61912,61913,61916,61918,61920,61922,61924,61927],{"class":51,"line":3858},[49,61914,61915],{"class":73},"            border",[49,61917,77],{"class":66},[49,61919,159],{"class":73},[49,61921,110],{"class":109},[49,61923,113],{"class":73},[49,61925,61926],{"class":73}," #e0e0e0",[49,61928,83],{"class":66},[49,61930,61931,61934,61936,61938],{"class":51,"line":3864},[49,61932,61933],{"class":73},"            outline",[49,61935,77],{"class":66},[49,61937,460],{"class":73},[49,61939,83],{"class":66},[49,61941,61942],{"class":51,"line":3870},[49,61943,3783],{"class":66},[49,61945,61946],{"class":51,"line":3875},[49,61947,3654],{"emptyLinePlaceholder":1330},[49,61949,61950,61952,61955],{"class":51,"line":9200},[49,61951,61789],{"class":62},[49,61953,61954],{"class":62}," .search",[49,61956,67],{"class":66},[49,61958,61959,61961,61963,61965,61967,61969,61972],{"class":51,"line":9224},[49,61960,61915],{"class":73},[49,61962,77],{"class":66},[49,61964,159],{"class":73},[49,61966,110],{"class":109},[49,61968,113],{"class":73},[49,61970,61971],{"class":73}," #ff6700",[49,61973,83],{"class":66},[49,61975,61976],{"class":51,"line":9229},[49,61977,3783],{"class":66},[49,61979,61980],{"class":51,"line":9235},[49,61981,3654],{"emptyLinePlaceholder":1330},[49,61983,61984,61987],{"class":51,"line":9262},[49,61985,61986],{"class":62},"        .result-list",[49,61988,67],{"class":66},[49,61990,61991,61993,61995,61997],{"class":51,"line":9267},[49,61992,52718],{"class":73},[49,61994,77],{"class":66},[49,61996,460],{"class":73},[49,61998,83],{"class":66},[49,62000,62001,62003,62005,62007],{"class":51,"line":9273},[49,62002,61796],{"class":73},[49,62004,77],{"class":66},[49,62006,56070],{"class":73},[49,62008,83],{"class":66},[49,62010,62011,62014,62016,62018],{"class":51,"line":9285},[49,62012,62013],{"class":73},"            left",[49,62015,77],{"class":66},[49,62017,80],{"class":73},[49,62019,83],{"class":66},[49,62021,62022,62025,62027,62029,62031],{"class":51,"line":9297},[49,62023,62024],{"class":73},"            top",[49,62026,77],{"class":66},[49,62028,1998],{"class":73},[49,62030,110],{"class":109},[49,62032,83],{"class":66},[49,62034,62035,62037,62039,62041,62043],{"class":51,"line":9309},[49,62036,52730],{"class":73},[49,62038,77],{"class":66},[49,62040,61811],{"class":73},[49,62042,110],{"class":109},[49,62044,83],{"class":66},[49,62046,62047,62049,62051,62053,62055,62057,62059],{"class":51,"line":10968},[49,62048,61915],{"class":73},[49,62050,77],{"class":66},[49,62052,159],{"class":73},[49,62054,110],{"class":109},[49,62056,113],{"class":73},[49,62058,61971],{"class":73},[49,62060,83],{"class":66},[49,62062,62063,62066,62068,62070],{"class":51,"line":10993},[49,62064,62065],{"class":73},"            border-top",[49,62067,77],{"class":66},[49,62069,80],{"class":73},[49,62071,83],{"class":66},[49,62073,62074,62077,62079,62082],{"class":51,"line":11016},[49,62075,62076],{"class":73},"            background",[49,62078,77],{"class":66},[49,62080,62081],{"class":73},"#fff",[49,62083,83],{"class":66},[49,62085,62086],{"class":51,"line":11040},[49,62087,3783],{"class":66},[49,62089,62090],{"class":51,"line":11045},[49,62091,3654],{"emptyLinePlaceholder":1330},[49,62093,62094,62096,62098],{"class":51,"line":11050},[49,62095,61986],{"class":62},[49,62097,2655],{"class":147},[49,62099,67],{"class":66},[49,62101,62102,62104,62106,62108],{"class":51,"line":11055},[49,62103,52718],{"class":73},[49,62105,77],{"class":66},[49,62107,674],{"class":73},[49,62109,83],{"class":66},[49,62111,62112,62114,62116,62118,62120,62123,62125],{"class":51,"line":11064},[49,62113,52692],{"class":73},[49,62115,77],{"class":66},[49,62117,1736],{"class":73},[49,62119,110],{"class":109},[49,62121,62122],{"class":73}," 15",[49,62124,110],{"class":109},[49,62126,83],{"class":66},[49,62128,62129,62131,62133,62135,62137],{"class":51,"line":11069},[49,62130,61889],{"class":73},[49,62132,77],{"class":66},[49,62134,1889],{"class":73},[49,62136,110],{"class":109},[49,62138,83],{"class":66},[49,62140,62141,62144,62146,62149],{"class":51,"line":11075},[49,62142,62143],{"class":73},"            color",[49,62145,77],{"class":66},[49,62147,62148],{"class":73},"#424242",[49,62150,83],{"class":66},[49,62152,62153,62156,62158,62160],{"class":51,"line":11096},[49,62154,62155],{"class":73},"            text-decoration",[49,62157,77],{"class":66},[49,62159,460],{"class":73},[49,62161,83],{"class":66},[49,62163,62164],{"class":51,"line":11102},[49,62165,3783],{"class":66},[49,62167,62168],{"class":51,"line":11116},[49,62169,3654],{"emptyLinePlaceholder":1330},[49,62171,62172,62174,62176,62179],{"class":51,"line":11122},[49,62173,61986],{"class":62},[49,62175,2655],{"class":147},[49,62177,62178],{"class":62},":hover",[49,62180,67],{"class":66},[49,62182,62183,62185,62187,62190],{"class":51,"line":11149},[49,62184,52882],{"class":73},[49,62186,77],{"class":66},[49,62188,62189],{"class":73},"#eee",[49,62191,83],{"class":66},[49,62193,62194],{"class":51,"line":11158},[49,62195,3783],{"class":66},[49,62197,62198,62200,62202],{"class":51,"line":11164},[49,62199,53018],{"class":66},[49,62201,1305],{"class":147},[49,62203,52554],{"class":66},[49,62205,62206],{"class":51,"line":11172},[49,62207,3654],{"emptyLinePlaceholder":1330},[49,62209,62210,62212,62214],{"class":51,"line":11177},[49,62211,53027],{"class":66},[49,62213,52581],{"class":147},[49,62215,52554],{"class":66},[49,62217,62218],{"class":51,"line":17854},[49,62219,3654],{"emptyLinePlaceholder":1330},[49,62221,62222,62224,62226],{"class":51,"line":17860},[49,62223,2300],{"class":66},[49,62225,53042],{"class":147},[49,62227,52554],{"class":66},[49,62229,62230,62232,62234,62236,62238,62241],{"class":51,"line":17883},[49,62231,52588],{"class":66},[49,62233,148],{"class":147},[49,62235,54728],{"class":62},[49,62237,1448],{"class":66},[49,62239,62240],{"class":1505},"\"mi\"",[49,62242,52554],{"class":66},[49,62244,62245,62247,62249,62251,62253,62256,62259,62261,62264],{"class":51,"line":17889},[49,62246,56541],{"class":66},[49,62248,448],{"class":147},[49,62250,55065],{"class":62},[49,62252,1448],{"class":66},[49,62254,62255],{"class":1505},"\"search\"",[49,62257,62258],{"class":62}," placeholder",[49,62260,1448],{"class":66},[49,62262,62263],{"class":1505},"\"小米笔记本\"",[49,62265,52554],{"class":66},[49,62267,62268,62270,62272,62274,62276,62279],{"class":51,"line":17912},[49,62269,56541],{"class":66},[49,62271,23],{"class":147},[49,62273,54728],{"class":62},[49,62275,1448],{"class":66},[49,62277,62278],{"class":1505},"\"result-list\"",[49,62280,52554],{"class":66},[49,62282,62283,62286,62288,62291,62293,62296,62298,62301,62304,62306,62308,62310],{"class":51,"line":17926},[49,62284,62285],{"class":66},"            \u003C",[49,62287,26],{"class":147},[49,62289,62290],{"class":66},">\u003C",[49,62292,1630],{"class":147},[49,62294,62295],{"class":62}," href",[49,62297,1448],{"class":66},[49,62299,62300],{"class":1505},"\"#\"",[49,62302,62303],{"class":66},">全部商品\u003C\u002F",[49,62305,1630],{"class":147},[49,62307,56553],{"class":66},[49,62309,26],{"class":147},[49,62311,52554],{"class":66},[49,62313,62314,62316,62318,62320,62322,62324,62326,62328,62331,62333,62335,62337],{"class":51,"line":17946},[49,62315,62285],{"class":66},[49,62317,26],{"class":147},[49,62319,62290],{"class":66},[49,62321,1630],{"class":147},[49,62323,62295],{"class":62},[49,62325,1448],{"class":66},[49,62327,62300],{"class":1505},[49,62329,62330],{"class":66},">小米11\u003C\u002F",[49,62332,1630],{"class":147},[49,62334,56553],{"class":66},[49,62336,26],{"class":147},[49,62338,52554],{"class":66},[49,62340,62341,62343,62345,62347,62349,62351,62353,62355,62358,62360,62362,62364],{"class":51,"line":17952},[49,62342,62285],{"class":66},[49,62344,26],{"class":147},[49,62346,62290],{"class":66},[49,62348,1630],{"class":147},[49,62350,62295],{"class":62},[49,62352,1448],{"class":66},[49,62354,62300],{"class":1505},[49,62356,62357],{"class":66},">小米10S\u003C\u002F",[49,62359,1630],{"class":147},[49,62361,56553],{"class":66},[49,62363,26],{"class":147},[49,62365,52554],{"class":66},[49,62367,62368,62370,62372,62374,62376,62378,62380,62382,62385,62387,62389,62391],{"class":51,"line":17963},[49,62369,62285],{"class":66},[49,62371,26],{"class":147},[49,62373,62290],{"class":66},[49,62375,1630],{"class":147},[49,62377,62295],{"class":62},[49,62379,1448],{"class":66},[49,62381,62300],{"class":1505},[49,62383,62384],{"class":66},">小米笔记本\u003C\u002F",[49,62386,1630],{"class":147},[49,62388,56553],{"class":66},[49,62390,26],{"class":147},[49,62392,52554],{"class":66},[49,62394,62395,62397,62399,62401,62403,62405,62407,62409,62412,62414,62416,62418],{"class":51,"line":17986},[49,62396,62285],{"class":66},[49,62398,26],{"class":147},[49,62400,62290],{"class":66},[49,62402,1630],{"class":147},[49,62404,62295],{"class":62},[49,62406,1448],{"class":66},[49,62408,62300],{"class":1505},[49,62410,62411],{"class":66},">小米手机\u003C\u002F",[49,62413,1630],{"class":147},[49,62415,56553],{"class":66},[49,62417,26],{"class":147},[49,62419,52554],{"class":66},[49,62421,62422,62424,62426,62428,62430,62432,62434,62436,62439,62441,62443,62445],{"class":51,"line":18008},[49,62423,62285],{"class":66},[49,62425,26],{"class":147},[49,62427,62290],{"class":66},[49,62429,1630],{"class":147},[49,62431,62295],{"class":62},[49,62433,1448],{"class":66},[49,62435,62300],{"class":1505},[49,62437,62438],{"class":66},">黑鲨4\u003C\u002F",[49,62440,1630],{"class":147},[49,62442,56553],{"class":66},[49,62444,26],{"class":147},[49,62446,52554],{"class":66},[49,62448,62449,62451,62453,62455,62457,62459,62461,62463,62466,62468,62470,62472],{"class":51,"line":18013},[49,62450,62285],{"class":66},[49,62452,26],{"class":147},[49,62454,62290],{"class":66},[49,62456,1630],{"class":147},[49,62458,62295],{"class":62},[49,62460,1448],{"class":66},[49,62462,62300],{"class":1505},[49,62464,62465],{"class":66},">空调\u003C\u002F",[49,62467,1630],{"class":147},[49,62469,56553],{"class":66},[49,62471,26],{"class":147},[49,62473,52554],{"class":66},[49,62475,62476,62479,62481],{"class":51,"line":18019},[49,62477,62478],{"class":66},"        \u003C\u002F",[49,62480,23],{"class":147},[49,62482,52554],{"class":66},[49,62484,62485,62487,62489],{"class":51,"line":18033},[49,62486,53018],{"class":66},[49,62488,148],{"class":147},[49,62490,52554],{"class":66},[49,62492,62493,62495,62497],{"class":51,"line":18046},[49,62494,52588],{"class":66},[49,62496,53055],{"class":147},[49,62498,52554],{"class":66},[49,62500,62501],{"class":51,"line":18051},[49,62502,62503],{"class":55},"        \u002F\u002F 1. 获取元素\n",[49,62505,62506,62509,62511,62513,62515,62517,62519,62522],{"class":51,"line":18065},[49,62507,62508],{"class":109},"        const",[49,62510,61844],{"class":73},[49,62512,14816],{"class":109},[49,62514,55637],{"class":66},[49,62516,55640],{"class":62},[49,62518,1403],{"class":66},[49,62520,62521],{"class":1505},"'[type=search]'",[49,62523,1409],{"class":66},[49,62525,62526,62528,62531,62533,62535,62537,62539,62542],{"class":51,"line":18070},[49,62527,62508],{"class":109},[49,62529,62530],{"class":73}," ul",[49,62532,14816],{"class":109},[49,62534,55637],{"class":66},[49,62536,55640],{"class":62},[49,62538,1403],{"class":66},[49,62540,62541],{"class":1505},"'.result-list'",[49,62543,1409],{"class":66},[49,62545,62546],{"class":51,"line":18076},[49,62547,62548],{"class":55},"        \u002F\u002F console.log(input)\n",[49,62550,62551],{"class":51,"line":18081},[49,62552,62553],{"class":55},"        \u002F\u002F 2. 监听事件 获得焦点\n",[49,62555,62556,62559,62561,62563,62566,62568,62570],{"class":51,"line":18095},[49,62557,62558],{"class":66},"        input.",[49,62560,59052],{"class":62},[49,62562,1403],{"class":66},[49,62564,62565],{"class":1505},"'focus'",[49,62567,13687],{"class":66},[49,62569,55690],{"class":109},[49,62571,55693],{"class":66},[49,62573,62574],{"class":51,"line":18100},[49,62575,62576],{"class":55},"            \u002F\u002F ul显示\n",[49,62578,62579,62582,62584],{"class":51,"line":18105},[49,62580,62581],{"class":66},"            ul.style.display ",[49,62583,1448],{"class":109},[49,62585,62586],{"class":1505}," 'block'\n",[49,62588,62589],{"class":51,"line":18119},[49,62590,62591],{"class":55},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[49,62593,62594,62597,62599,62601,62604],{"class":51,"line":18131},[49,62595,62596],{"class":66},"            input.classList.",[49,62598,6586],{"class":62},[49,62600,1403],{"class":66},[49,62602,62603],{"class":1505},"'search'",[49,62605,1409],{"class":66},[49,62607,62608],{"class":51,"line":18136},[49,62609,62610],{"class":66},"        })\n",[49,62612,62613],{"class":51,"line":18149},[49,62614,62615],{"class":55},"        \u002F\u002F 3. 监听事件 失去焦点\n",[49,62617,62618,62620,62622,62624,62627,62629,62631],{"class":51,"line":18154},[49,62619,62558],{"class":66},[49,62621,59052],{"class":62},[49,62623,1403],{"class":66},[49,62625,62626],{"class":1505},"'blur'",[49,62628,13687],{"class":66},[49,62630,55690],{"class":109},[49,62632,55693],{"class":66},[49,62634,62635,62637,62639],{"class":51,"line":18159},[49,62636,62581],{"class":66},[49,62638,1448],{"class":109},[49,62640,62641],{"class":1505}," 'none'\n",[49,62643,62644,62646,62648,62650,62652],{"class":51,"line":18164},[49,62645,62596],{"class":66},[49,62647,58245],{"class":62},[49,62649,1403],{"class":66},[49,62651,62603],{"class":1505},[49,62653,1409],{"class":66},[49,62655,62656],{"class":51,"line":18177},[49,62657,62610],{"class":66},[49,62659,62660,62662,62664],{"class":51,"line":18182},[49,62661,53018],{"class":66},[49,62663,53055],{"class":147},[49,62665,52554],{"class":66},[49,62667,62668,62670,62672],{"class":51,"line":33881},[49,62669,53027],{"class":66},[49,62671,53042],{"class":147},[49,62673,52554],{"class":66},[49,62675,62676],{"class":51,"line":33887},[49,62677,3654],{"emptyLinePlaceholder":1330},[49,62679,62680,62682,62684],{"class":51,"line":33893},[49,62681,53027],{"class":66},[49,62683,51883],{"class":147},[49,62685,52554],{"class":66},[525,62687,62689],{"id":62688},"_3253-键盘事件","3.2.5.3 键盘事件",[19,62691,62692],{},"评论字数统计案例",[19,62694,62695],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,62697,62698],{},"牢记focus伪类选择器",[52591,62700],{"charSet":62701},"UTF-8",[52591,62703],{"name":62704,"content":62705},"viewport","width=device-width, initial-scale=1.0",[52654,62707,62708],{},"Document",[1305,62710,62711],{},"\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",[448,62713],{"type":267},[23,62715,62716,62719],{},[26,62717,62718],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[26,62720,62721],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[39,62723,62725],{"className":51881,"code":62724,"language":51883,"meta":44,"style":44},"\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",[46,62726,62727,62737,62751,62755,62763,62777,62797,62817,62830,62838,62845,62858,62872,62882,62892,62896,62900,62907,62919,62931,62943,62955,62984,62997,63001,63005,63014,63025,63037,63048,63059,63071,63082,63094,63110,63122,63126,63130,63141,63152,63162,63174,63178,63182,63190,63201,63211,63222,63234,63247,63259,63270,63274,63278,63287,63299,63310,63323,63334,63348,63352,63356,63363,63375,63387,63397,63401,63405,63414,63426,63436,63440,63444,63455,63465,63484,63497,63501,63505,63515,63525,63529,63533,63544,63555,63567,63579,63583,63587,63598,63608,63622,63626,63630,63641,63651,63663,63667,63675,63683,63687,63695,63710,63729,63769,63782,63790,63804,63824,63832,63847,63870,63888,63903,63923,63943,63963,63971,63979,63987,63995,64015,64035,64040,64057,64066,64070,64075,64091,64099,64103,64108,64125,64130,64155,64159,64163,64168,64173,64181,64189,64193],{"__ignoreMap":44},[49,62728,62729,62731,62733,62735],{"class":51,"line":52},[49,62730,52545],{"class":66},[49,62732,52548],{"class":147},[49,62734,52551],{"class":62},[49,62736,52554],{"class":66},[49,62738,62739,62741,62743,62745,62747,62749],{"class":51,"line":59},[49,62740,2300],{"class":66},[49,62742,51883],{"class":147},[49,62744,52563],{"class":62},[49,62746,1448],{"class":66},[49,62748,52568],{"class":1505},[49,62750,52554],{"class":66},[49,62752,62753],{"class":51,"line":70},[49,62754,3654],{"emptyLinePlaceholder":1330},[49,62756,62757,62759,62761],{"class":51,"line":86},[49,62758,2300],{"class":66},[49,62760,52581],{"class":147},[49,62762,52554],{"class":66},[49,62764,62765,62767,62769,62771,62773,62775],{"class":51,"line":98},[49,62766,53386],{"class":66},[49,62768,52591],{"class":147},[49,62770,52594],{"class":62},[49,62772,1448],{"class":66},[49,62774,52599],{"class":1505},[49,62776,52554],{"class":66},[49,62778,62779,62781,62783,62785,62787,62789,62791,62793,62795],{"class":51,"line":121},[49,62780,53386],{"class":66},[49,62782,52591],{"class":147},[49,62784,52610],{"class":62},[49,62786,1448],{"class":66},[49,62788,52615],{"class":1505},[49,62790,52618],{"class":62},[49,62792,1448],{"class":66},[49,62794,52623],{"class":1505},[49,62796,52554],{"class":66},[49,62798,62799,62801,62803,62805,62807,62809,62811,62813,62815],{"class":51,"line":134},[49,62800,53386],{"class":66},[49,62802,52591],{"class":147},[49,62804,16171],{"class":62},[49,62806,1448],{"class":66},[49,62808,52638],{"class":1505},[49,62810,52618],{"class":62},[49,62812,1448],{"class":66},[49,62814,52645],{"class":1505},[49,62816,52554],{"class":66},[49,62818,62819,62821,62823,62826,62828],{"class":51,"line":1085},[49,62820,53386],{"class":66},[49,62822,52654],{"class":147},[49,62824,62825],{"class":66},">评论回车发布\u003C\u002F",[49,62827,52654],{"class":147},[49,62829,52554],{"class":66},[49,62831,62832,62834,62836],{"class":51,"line":2574},[49,62833,53386],{"class":66},[49,62835,1305],{"class":147},[49,62837,52554],{"class":66},[49,62839,62840,62843],{"class":51,"line":2586},[49,62841,62842],{"class":62},"    .wrapper",[49,62844,67],{"class":66},[49,62846,62847,62850,62852,62854,62856],{"class":51,"line":2867},[49,62848,62849],{"class":73},"      min-width",[49,62851,77],{"class":66},[49,62853,5241],{"class":73},[49,62855,110],{"class":109},[49,62857,83],{"class":66},[49,62859,62860,62863,62865,62868,62870],{"class":51,"line":2872},[49,62861,62862],{"class":73},"      max-width",[49,62864,77],{"class":66},[49,62866,62867],{"class":73},"800",[49,62869,110],{"class":109},[49,62871,83],{"class":66},[49,62873,62874,62876,62878,62880],{"class":51,"line":2878},[49,62875,56248],{"class":73},[49,62877,77],{"class":66},[49,62879,52723],{"class":73},[49,62881,83],{"class":66},[49,62883,62884,62886,62888,62890],{"class":51,"line":2883},[49,62885,56259],{"class":73},[49,62887,77],{"class":66},[49,62889,52823],{"class":73},[49,62891,83],{"class":66},[49,62893,62894],{"class":51,"line":2897},[49,62895,3441],{"class":66},[49,62897,62898],{"class":51,"line":2902},[49,62899,3654],{"emptyLinePlaceholder":1330},[49,62901,62902,62905],{"class":51,"line":2908},[49,62903,62904],{"class":62},"    .avatar",[49,62906,67],{"class":66},[49,62908,62909,62911,62913,62915,62917],{"class":51,"line":2929},[49,62910,56010],{"class":73},[49,62912,77],{"class":66},[49,62914,1998],{"class":73},[49,62916,110],{"class":109},[49,62918,83],{"class":66},[49,62920,62921,62923,62925,62927,62929],{"class":51,"line":2934},[49,62922,56024],{"class":73},[49,62924,77],{"class":66},[49,62926,1998],{"class":73},[49,62928,110],{"class":109},[49,62930,83],{"class":66},[49,62932,62933,62935,62937,62939,62941],{"class":51,"line":2948},[49,62934,56373],{"class":73},[49,62936,77],{"class":66},[49,62938,2047],{"class":73},[49,62940,1720],{"class":109},[49,62942,83],{"class":66},[49,62944,62945,62948,62950,62953],{"class":51,"line":2953},[49,62946,62947],{"class":73},"      overflow",[49,62949,77],{"class":66},[49,62951,62952],{"class":73},"hidden",[49,62954,83],{"class":66},[49,62956,62957,62960,62962,62965,62967,62970,62972,62975,62977,62979,62982],{"class":51,"line":2982},[49,62958,62959],{"class":73},"      background",[49,62961,77],{"class":66},[49,62963,62964],{"class":73},"url",[49,62966,1403],{"class":66},[49,62968,62969],{"class":6468},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[49,62971,14966],{"class":66},[49,62973,62974],{"class":73},"no-repeat",[49,62976,18394],{"class":73},[49,62978,26227],{"class":66},[49,62980,62981],{"class":73},"cover",[49,62983,83],{"class":66},[49,62985,62986,62989,62991,62993,62995],{"class":51,"line":2987},[49,62987,62988],{"class":73},"      margin-right",[49,62990,77],{"class":66},[49,62992,875],{"class":73},[49,62994,110],{"class":109},[49,62996,83],{"class":66},[49,62998,62999],{"class":51,"line":3004},[49,63000,3441],{"class":66},[49,63002,63003],{"class":51,"line":3009},[49,63004,3654],{"emptyLinePlaceholder":1330},[49,63006,63007,63009,63012],{"class":51,"line":3014},[49,63008,62842],{"class":62},[49,63010,63011],{"class":147}," textarea",[49,63013,67],{"class":66},[49,63015,63016,63019,63021,63023],{"class":51,"line":3019},[49,63017,63018],{"class":73},"      outline",[49,63020,77],{"class":66},[49,63022,460],{"class":73},[49,63024,83],{"class":66},[49,63026,63027,63030,63032,63035],{"class":51,"line":3033},[49,63028,63029],{"class":73},"      border-color",[49,63031,77],{"class":66},[49,63033,63034],{"class":73},"transparent",[49,63036,83],{"class":66},[49,63038,63039,63042,63044,63046],{"class":51,"line":3038},[49,63040,63041],{"class":73},"      resize",[49,63043,77],{"class":66},[49,63045,460],{"class":73},[49,63047,83],{"class":66},[49,63049,63050,63052,63054,63057],{"class":51,"line":3831},[49,63051,62959],{"class":73},[49,63053,77],{"class":66},[49,63055,63056],{"class":73},"#f5f5f5",[49,63058,83],{"class":66},[49,63060,63061,63063,63065,63067,63069],{"class":51,"line":3845},[49,63062,56373],{"class":73},[49,63064,77],{"class":66},[49,63066,1685],{"class":73},[49,63068,110],{"class":109},[49,63070,83],{"class":66},[49,63072,63073,63076,63078,63080],{"class":51,"line":3853},[49,63074,63075],{"class":73},"      flex",[49,63077,77],{"class":66},[49,63079,159],{"class":73},[49,63081,83],{"class":66},[49,63083,63084,63086,63088,63090,63092],{"class":51,"line":3858},[49,63085,55936],{"class":73},[49,63087,77],{"class":66},[49,63089,106],{"class":73},[49,63091,110],{"class":109},[49,63093,83],{"class":66},[49,63095,63096,63099,63101,63103,63106,63108],{"class":51,"line":3864},[49,63097,63098],{"class":73},"      transition",[49,63100,77],{"class":66},[49,63102,29369],{"class":73},[49,63104,63105],{"class":73}," 0.5",[49,63107,2086],{"class":109},[49,63109,83],{"class":66},[49,63111,63112,63114,63116,63118,63120],{"class":51,"line":3870},[49,63113,56024],{"class":73},[49,63115,77],{"class":66},[49,63117,2340],{"class":73},[49,63119,110],{"class":109},[49,63121,83],{"class":66},[49,63123,63124],{"class":51,"line":3875},[49,63125,3441],{"class":66},[49,63127,63128],{"class":51,"line":9200},[49,63129,3654],{"emptyLinePlaceholder":1330},[49,63131,63132,63134,63136,63139],{"class":51,"line":9224},[49,63133,62842],{"class":62},[49,63135,63011],{"class":147},[49,63137,63138],{"class":62},":focus",[49,63140,67],{"class":66},[49,63142,63143,63145,63147,63150],{"class":51,"line":9229},[49,63144,63029],{"class":73},[49,63146,77],{"class":66},[49,63148,63149],{"class":73},"#e4e4e4",[49,63151,83],{"class":66},[49,63153,63154,63156,63158,63160],{"class":51,"line":9235},[49,63155,62959],{"class":73},[49,63157,77],{"class":66},[49,63159,62081],{"class":73},[49,63161,83],{"class":66},[49,63163,63164,63166,63168,63170,63172],{"class":51,"line":9262},[49,63165,56024],{"class":73},[49,63167,77],{"class":66},[49,63169,2047],{"class":73},[49,63171,110],{"class":109},[49,63173,83],{"class":66},[49,63175,63176],{"class":51,"line":9267},[49,63177,3441],{"class":66},[49,63179,63180],{"class":51,"line":9273},[49,63181,3654],{"emptyLinePlaceholder":1330},[49,63183,63184,63186,63188],{"class":51,"line":9285},[49,63185,62842],{"class":62},[49,63187,58706],{"class":147},[49,63189,67],{"class":66},[49,63191,63192,63194,63196,63199],{"class":51,"line":9297},[49,63193,62959],{"class":73},[49,63195,77],{"class":66},[49,63197,63198],{"class":73},"#00aeec",[49,63200,83],{"class":66},[49,63202,63203,63205,63207,63209],{"class":51,"line":9309},[49,63204,58655],{"class":73},[49,63206,77],{"class":66},[49,63208,62081],{"class":73},[49,63210,83],{"class":66},[49,63212,63213,63216,63218,63220],{"class":51,"line":10968},[49,63214,63215],{"class":73},"      border",[49,63217,77],{"class":66},[49,63219,460],{"class":73},[49,63221,83],{"class":66},[49,63223,63224,63226,63228,63230,63232],{"class":51,"line":10993},[49,63225,56373],{"class":73},[49,63227,77],{"class":66},[49,63229,1685],{"class":73},[49,63231,110],{"class":109},[49,63233,83],{"class":66},[49,63235,63236,63239,63241,63243,63245],{"class":51,"line":11016},[49,63237,63238],{"class":73},"      margin-left",[49,63240,77],{"class":66},[49,63242,106],{"class":73},[49,63244,110],{"class":109},[49,63246,83],{"class":66},[49,63248,63249,63251,63253,63255,63257],{"class":51,"line":11040},[49,63250,56010],{"class":73},[49,63252,77],{"class":66},[49,63254,1748],{"class":73},[49,63256,110],{"class":109},[49,63258,83],{"class":66},[49,63260,63261,63264,63266,63268],{"class":51,"line":11045},[49,63262,63263],{"class":73},"      cursor",[49,63265,77],{"class":66},[49,63267,211],{"class":73},[49,63269,83],{"class":66},[49,63271,63272],{"class":51,"line":11050},[49,63273,3441],{"class":66},[49,63275,63276],{"class":51,"line":11055},[49,63277,3654],{"emptyLinePlaceholder":1330},[49,63279,63280,63282,63285],{"class":51,"line":11064},[49,63281,62842],{"class":62},[49,63283,63284],{"class":62}," .total",[49,63286,67],{"class":66},[49,63288,63289,63291,63293,63295,63297],{"class":51,"line":11069},[49,63290,62988],{"class":73},[49,63292,77],{"class":66},[49,63294,2003],{"class":73},[49,63296,110],{"class":109},[49,63298,83],{"class":66},[49,63300,63301,63303,63305,63308],{"class":51,"line":11075},[49,63302,58655],{"class":73},[49,63304,77],{"class":66},[49,63306,63307],{"class":73},"#999",[49,63309,83],{"class":66},[49,63311,63312,63315,63317,63319,63321],{"class":51,"line":11096},[49,63313,63314],{"class":73},"      margin-top",[49,63316,77],{"class":66},[49,63318,1711],{"class":73},[49,63320,110],{"class":109},[49,63322,83],{"class":66},[49,63324,63325,63328,63330,63332],{"class":51,"line":11102},[49,63326,63327],{"class":73},"      opacity",[49,63329,77],{"class":66},[49,63331,80],{"class":73},[49,63333,83],{"class":66},[49,63335,63336,63338,63340,63342,63344,63346],{"class":51,"line":11116},[49,63337,63098],{"class":73},[49,63339,77],{"class":66},[49,63341,29369],{"class":73},[49,63343,63105],{"class":73},[49,63345,2086],{"class":109},[49,63347,83],{"class":66},[49,63349,63350],{"class":51,"line":11122},[49,63351,3441],{"class":66},[49,63353,63354],{"class":51,"line":11149},[49,63355,3654],{"emptyLinePlaceholder":1330},[49,63357,63358,63361],{"class":51,"line":11158},[49,63359,63360],{"class":62},"    .list",[49,63362,67],{"class":66},[49,63364,63365,63367,63369,63371,63373],{"class":51,"line":11164},[49,63366,62849],{"class":73},[49,63368,77],{"class":66},[49,63370,5241],{"class":73},[49,63372,110],{"class":109},[49,63374,83],{"class":66},[49,63376,63377,63379,63381,63383,63385],{"class":51,"line":11172},[49,63378,62862],{"class":73},[49,63380,77],{"class":66},[49,63382,62867],{"class":73},[49,63384,110],{"class":109},[49,63386,83],{"class":66},[49,63388,63389,63391,63393,63395],{"class":51,"line":11177},[49,63390,56248],{"class":73},[49,63392,77],{"class":66},[49,63394,52723],{"class":73},[49,63396,83],{"class":66},[49,63398,63399],{"class":51,"line":17854},[49,63400,3441],{"class":66},[49,63402,63403],{"class":51,"line":17860},[49,63404,3654],{"emptyLinePlaceholder":1330},[49,63406,63407,63409,63412],{"class":51,"line":17883},[49,63408,63360],{"class":62},[49,63410,63411],{"class":62}," .item",[49,63413,67],{"class":66},[49,63415,63416,63418,63420,63422,63424],{"class":51,"line":17889},[49,63417,56010],{"class":73},[49,63419,77],{"class":66},[49,63421,1703],{"class":73},[49,63423,1720],{"class":109},[49,63425,83],{"class":66},[49,63427,63428,63430,63432,63434],{"class":51,"line":17912},[49,63429,56248],{"class":73},[49,63431,77],{"class":66},[49,63433,52723],{"class":73},[49,63435,83],{"class":66},[49,63437,63438],{"class":51,"line":17926},[49,63439,3441],{"class":66},[49,63441,63442],{"class":51,"line":17946},[49,63443,3654],{"emptyLinePlaceholder":1330},[49,63445,63446,63448,63450,63453],{"class":51,"line":17952},[49,63447,63360],{"class":62},[49,63449,63411],{"class":62},[49,63451,63452],{"class":62}," .info",[49,63454,67],{"class":66},[49,63456,63457,63459,63461,63463],{"class":51,"line":17963},[49,63458,63075],{"class":73},[49,63460,77],{"class":66},[49,63462,159],{"class":73},[49,63464,83],{"class":66},[49,63466,63467,63470,63472,63474,63476,63479,63482],{"class":51,"line":17986},[49,63468,63469],{"class":73},"      border-bottom",[49,63471,77],{"class":66},[49,63473,159],{"class":73},[49,63475,110],{"class":109},[49,63477,63478],{"class":73}," dashed",[49,63480,63481],{"class":73}," #e4e4e4",[49,63483,83],{"class":66},[49,63485,63486,63489,63491,63493,63495],{"class":51,"line":18008},[49,63487,63488],{"class":73},"      padding-bottom",[49,63490,77],{"class":66},[49,63492,106],{"class":73},[49,63494,110],{"class":109},[49,63496,83],{"class":66},[49,63498,63499],{"class":51,"line":18013},[49,63500,3441],{"class":66},[49,63502,63503],{"class":51,"line":18019},[49,63504,3654],{"emptyLinePlaceholder":1330},[49,63506,63507,63509,63511,63513],{"class":51,"line":18033},[49,63508,63360],{"class":62},[49,63510,63411],{"class":62},[49,63512,8077],{"class":147},[49,63514,67],{"class":66},[49,63516,63517,63519,63521,63523],{"class":51,"line":18046},[49,63518,55947],{"class":73},[49,63520,77],{"class":66},[49,63522,80],{"class":73},[49,63524,83],{"class":66},[49,63526,63527],{"class":51,"line":18051},[49,63528,3441],{"class":66},[49,63530,63531],{"class":51,"line":18065},[49,63532,3654],{"emptyLinePlaceholder":1330},[49,63534,63535,63537,63539,63542],{"class":51,"line":18070},[49,63536,63360],{"class":62},[49,63538,63411],{"class":62},[49,63540,63541],{"class":62}," .name",[49,63543,67],{"class":66},[49,63545,63546,63548,63550,63553],{"class":51,"line":18076},[49,63547,58655],{"class":73},[49,63549,77],{"class":66},[49,63551,63552],{"class":73},"#FB7299",[49,63554,83],{"class":66},[49,63556,63557,63559,63561,63563,63565],{"class":51,"line":18081},[49,63558,56161],{"class":73},[49,63560,77],{"class":66},[49,63562,1940],{"class":73},[49,63564,110],{"class":109},[49,63566,83],{"class":66},[49,63568,63569,63572,63574,63577],{"class":51,"line":18095},[49,63570,63571],{"class":73},"      font-weight",[49,63573,77],{"class":66},[49,63575,63576],{"class":73},"bold",[49,63578,83],{"class":66},[49,63580,63581],{"class":51,"line":18100},[49,63582,3441],{"class":66},[49,63584,63585],{"class":51,"line":18105},[49,63586,3654],{"emptyLinePlaceholder":1330},[49,63588,63589,63591,63593,63596],{"class":51,"line":18119},[49,63590,63360],{"class":62},[49,63592,63411],{"class":62},[49,63594,63595],{"class":62}," .text",[49,63597,67],{"class":66},[49,63599,63600,63602,63604,63606],{"class":51,"line":18131},[49,63601,58655],{"class":73},[49,63603,77],{"class":66},[49,63605,129],{"class":73},[49,63607,83],{"class":66},[49,63609,63610,63612,63614,63616,63618,63620],{"class":51,"line":18136},[49,63611,55936],{"class":73},[49,63613,77],{"class":66},[49,63615,106],{"class":73},[49,63617,110],{"class":109},[49,63619,5347],{"class":73},[49,63621,83],{"class":66},[49,63623,63624],{"class":51,"line":18149},[49,63625,3441],{"class":66},[49,63627,63628],{"class":51,"line":18154},[49,63629,3654],{"emptyLinePlaceholder":1330},[49,63631,63632,63634,63636,63639],{"class":51,"line":18159},[49,63633,63360],{"class":62},[49,63635,63411],{"class":62},[49,63637,63638],{"class":62}," .time",[49,63640,67],{"class":66},[49,63642,63643,63645,63647,63649],{"class":51,"line":18164},[49,63644,58655],{"class":73},[49,63646,77],{"class":66},[49,63648,63307],{"class":73},[49,63650,83],{"class":66},[49,63652,63653,63655,63657,63659,63661],{"class":51,"line":18177},[49,63654,56161],{"class":73},[49,63656,77],{"class":66},[49,63658,1889],{"class":73},[49,63660,110],{"class":109},[49,63662,83],{"class":66},[49,63664,63665],{"class":51,"line":18182},[49,63666,3441],{"class":66},[49,63668,63669,63671,63673],{"class":51,"line":33881},[49,63670,53659],{"class":66},[49,63672,1305],{"class":147},[49,63674,52554],{"class":66},[49,63676,63677,63679,63681],{"class":51,"line":33887},[49,63678,53027],{"class":66},[49,63680,52581],{"class":147},[49,63682,52554],{"class":66},[49,63684,63685],{"class":51,"line":33893},[49,63686,3654],{"emptyLinePlaceholder":1330},[49,63688,63689,63691,63693],{"class":51,"line":33899},[49,63690,2300],{"class":66},[49,63692,53042],{"class":147},[49,63694,52554],{"class":66},[49,63696,63697,63699,63701,63703,63705,63708],{"class":51,"line":33905},[49,63698,53386],{"class":66},[49,63700,148],{"class":147},[49,63702,54728],{"class":62},[49,63704,1448],{"class":66},[49,63706,63707],{"class":1505},"\"wrapper\"",[49,63709,52554],{"class":66},[49,63711,63712,63714,63716,63718,63720,63723,63725,63727],{"class":51,"line":33916},[49,63713,52588],{"class":66},[49,63715,1833],{"class":147},[49,63717,54728],{"class":62},[49,63719,1448],{"class":66},[49,63721,63722],{"class":1505},"\"avatar\"",[49,63724,56553],{"class":66},[49,63726,1833],{"class":147},[49,63728,52554],{"class":66},[49,63730,63731,63733,63735,63737,63739,63742,63744,63746,63749,63751,63753,63755,63758,63760,63763,63765,63767],{"class":51,"line":33922},[49,63732,52588],{"class":66},[49,63734,55529],{"class":147},[49,63736,16210],{"class":62},[49,63738,1448],{"class":66},[49,63740,63741],{"class":1505},"\"tx\"",[49,63743,62258],{"class":62},[49,63745,1448],{"class":66},[49,63747,63748],{"class":1505},"\"发一条友善的评论\"",[49,63750,55552],{"class":62},[49,63752,1448],{"class":66},[49,63754,4955],{"class":1505},[49,63756,63757],{"class":62}," maxlength",[49,63759,1448],{"class":66},[49,63761,63762],{"class":1505},"\"200\"",[49,63764,56553],{"class":66},[49,63766,55529],{"class":147},[49,63768,52554],{"class":66},[49,63770,63771,63773,63775,63778,63780],{"class":51,"line":33942},[49,63772,52588],{"class":66},[49,63774,55128],{"class":147},[49,63776,63777],{"class":66},">发布\u003C\u002F",[49,63779,55128],{"class":147},[49,63781,52554],{"class":66},[49,63783,63784,63786,63788],{"class":51,"line":33948},[49,63785,53659],{"class":66},[49,63787,148],{"class":147},[49,63789,52554],{"class":66},[49,63791,63792,63794,63796,63798,63800,63802],{"class":51,"line":33959},[49,63793,53386],{"class":66},[49,63795,148],{"class":147},[49,63797,54728],{"class":62},[49,63799,1448],{"class":66},[49,63801,63707],{"class":1505},[49,63803,52554],{"class":66},[49,63805,63806,63808,63810,63812,63814,63817,63820,63822],{"class":51,"line":33965},[49,63807,52588],{"class":66},[49,63809,49],{"class":147},[49,63811,54728],{"class":62},[49,63813,1448],{"class":66},[49,63815,63816],{"class":1505},"\"total\"",[49,63818,63819],{"class":66},">0\u002F200字\u003C\u002F",[49,63821,49],{"class":147},[49,63823,52554],{"class":66},[49,63825,63826,63828,63830],{"class":51,"line":33971},[49,63827,53659],{"class":66},[49,63829,148],{"class":147},[49,63831,52554],{"class":66},[49,63833,63834,63836,63838,63840,63842,63845],{"class":51,"line":33977},[49,63835,53386],{"class":66},[49,63837,148],{"class":147},[49,63839,54728],{"class":62},[49,63841,1448],{"class":66},[49,63843,63844],{"class":1505},"\"list\"",[49,63846,52554],{"class":66},[49,63848,63849,63851,63853,63855,63857,63860,63863,63865,63868],{"class":51,"line":33983},[49,63850,52588],{"class":66},[49,63852,148],{"class":147},[49,63854,54728],{"class":62},[49,63856,1448],{"class":66},[49,63858,63859],{"class":1505},"\"item\"",[49,63861,63862],{"class":62}," style",[49,63864,1448],{"class":66},[49,63866,63867],{"class":1505},"\"display: none;\"",[49,63869,52554],{"class":66},[49,63871,63872,63874,63876,63878,63880,63882,63884,63886],{"class":51,"line":33989},[49,63873,56473],{"class":66},[49,63875,1833],{"class":147},[49,63877,54728],{"class":62},[49,63879,1448],{"class":66},[49,63881,63722],{"class":1505},[49,63883,56553],{"class":66},[49,63885,1833],{"class":147},[49,63887,52554],{"class":66},[49,63889,63890,63892,63894,63896,63898,63901],{"class":51,"line":33995},[49,63891,56473],{"class":66},[49,63893,148],{"class":147},[49,63895,54728],{"class":62},[49,63897,1448],{"class":66},[49,63899,63900],{"class":1505},"\"info\"",[49,63902,52554],{"class":66},[49,63904,63905,63907,63909,63911,63913,63916,63919,63921],{"class":51,"line":34001},[49,63906,56541],{"class":66},[49,63908,19],{"class":147},[49,63910,54728],{"class":62},[49,63912,1448],{"class":66},[49,63914,63915],{"class":1505},"\"name\"",[49,63917,63918],{"class":66},">清风徐来\u003C\u002F",[49,63920,19],{"class":147},[49,63922,52554],{"class":66},[49,63924,63925,63927,63929,63931,63933,63936,63939,63941],{"class":51,"line":34021},[49,63926,56541],{"class":66},[49,63928,19],{"class":147},[49,63930,54728],{"class":62},[49,63932,1448],{"class":66},[49,63934,63935],{"class":1505},"\"text\"",[49,63937,63938],{"class":66},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[49,63940,19],{"class":147},[49,63942,52554],{"class":66},[49,63944,63945,63947,63949,63951,63953,63956,63959,63961],{"class":51,"line":34027},[49,63946,56541],{"class":66},[49,63948,19],{"class":147},[49,63950,54728],{"class":62},[49,63952,1448],{"class":66},[49,63954,63955],{"class":1505},"\"time\"",[49,63957,63958],{"class":66},">2022-10-10 20:29:21\u003C\u002F",[49,63960,19],{"class":147},[49,63962,52554],{"class":66},[49,63964,63965,63967,63969],{"class":51,"line":34043},[49,63966,56646],{"class":66},[49,63968,148],{"class":147},[49,63970,52554],{"class":66},[49,63972,63973,63975,63977],{"class":51,"line":34049},[49,63974,53018],{"class":66},[49,63976,148],{"class":147},[49,63978,52554],{"class":66},[49,63980,63981,63983,63985],{"class":51,"line":34063},[49,63982,53659],{"class":66},[49,63984,148],{"class":147},[49,63986,52554],{"class":66},[49,63988,63989,63991,63993],{"class":51,"line":34069},[49,63990,53386],{"class":66},[49,63992,53055],{"class":147},[49,63994,52554],{"class":66},[49,63996,63997,63999,64002,64004,64006,64008,64010,64013],{"class":51,"line":34084},[49,63998,12473],{"class":109},[49,64000,64001],{"class":73}," tx",[49,64003,14816],{"class":109},[49,64005,55637],{"class":66},[49,64007,55640],{"class":62},[49,64009,1403],{"class":66},[49,64011,64012],{"class":1505},"'#tx'",[49,64014,1409],{"class":66},[49,64016,64017,64019,64022,64024,64026,64028,64030,64033],{"class":51,"line":34090},[49,64018,12473],{"class":109},[49,64020,64021],{"class":73}," total",[49,64023,14816],{"class":109},[49,64025,55637],{"class":66},[49,64027,55640],{"class":62},[49,64029,1403],{"class":66},[49,64031,64032],{"class":1505},"'.total'",[49,64034,1409],{"class":66},[49,64036,64037],{"class":51,"line":34099},[49,64038,64039],{"class":55},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[49,64041,64042,64045,64047,64049,64051,64053,64055],{"class":51,"line":34105},[49,64043,64044],{"class":66},"    tx.",[49,64046,59052],{"class":62},[49,64048,1403],{"class":66},[49,64050,62565],{"class":1505},[49,64052,13687],{"class":66},[49,64054,55690],{"class":109},[49,64056,55693],{"class":66},[49,64058,64059,64062,64064],{"class":51,"line":34114},[49,64060,64061],{"class":66},"      total.style.opacity ",[49,64063,1448],{"class":109},[49,64065,56938],{"class":73},[49,64067,64068],{"class":51,"line":34120},[49,64069,34709],{"class":66},[49,64071,64072],{"class":51,"line":34126},[49,64073,64074],{"class":55},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[49,64076,64077,64079,64081,64083,64085,64087,64089],{"class":51,"line":34135},[49,64078,64044],{"class":66},[49,64080,59052],{"class":62},[49,64082,1403],{"class":66},[49,64084,62626],{"class":1505},[49,64086,13687],{"class":66},[49,64088,55690],{"class":109},[49,64090,55693],{"class":66},[49,64092,64093,64095,64097],{"class":51,"line":34141},[49,64094,64061],{"class":66},[49,64096,1448],{"class":109},[49,64098,48581],{"class":73},[49,64100,64101],{"class":51,"line":34152},[49,64102,34709],{"class":66},[49,64104,64105],{"class":51,"line":34158},[49,64106,64107],{"class":55},"    \u002F\u002F 3. 检测用户输入\n",[49,64109,64110,64112,64114,64116,64119,64121,64123],{"class":51,"line":34177},[49,64111,64044],{"class":66},[49,64113,59052],{"class":62},[49,64115,1403],{"class":66},[49,64117,64118],{"class":1505},"'input'",[49,64120,13687],{"class":66},[49,64122,55690],{"class":109},[49,64124,55693],{"class":66},[49,64126,64127],{"class":51,"line":34183},[49,64128,64129],{"class":55},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[49,64131,64132,64135,64137,64140,64143,64145,64148,64150,64152],{"class":51,"line":34194},[49,64133,64134],{"class":66},"      total.innerHTML ",[49,64136,1448],{"class":109},[49,64138,64139],{"class":1505}," `${",[49,64141,64142],{"class":66},"tx",[49,64144,1949],{"class":1505},[49,64146,64147],{"class":66},"value",[49,64149,1949],{"class":1505},[49,64151,53210],{"class":73},[49,64153,64154],{"class":1505},"}\u002F200字`\n",[49,64156,64157],{"class":51,"line":34200},[49,64158,34709],{"class":66},[49,64160,64161],{"class":51,"line":34220},[49,64162,3654],{"emptyLinePlaceholder":1330},[49,64164,64165],{"class":51,"line":34236},[49,64166,64167],{"class":55},"    \u002F\u002F const str = 'andy'\n",[49,64169,64170],{"class":51,"line":34242},[49,64171,64172],{"class":55},"    \u002F\u002F console.log(str.length)\n",[49,64174,64175,64177,64179],{"class":51,"line":34256},[49,64176,53659],{"class":66},[49,64178,53055],{"class":147},[49,64180,52554],{"class":66},[49,64182,64183,64185,64187],{"class":51,"line":34262},[49,64184,53027],{"class":66},[49,64186,53042],{"class":147},[49,64188,52554],{"class":66},[49,64190,64191],{"class":51,"line":34268},[49,64192,3654],{"emptyLinePlaceholder":1330},[49,64194,64195,64197,64199],{"class":51,"line":34279},[49,64196,53027],{"class":66},[49,64198,51883],{"class":147},[49,64200,52554],{"class":66},[525,64202,64204],{"id":64203},"_3254-change事件","3.2.5.4 change事件",[19,64206,64207],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64209,64210],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64212,64213],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[39,64215,64217],{"className":51881,"code":64216,"language":51883,"meta":44,"style":44},"\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",[46,64218,64219,64229,64243,64247,64255,64269,64289,64301,64309,64313,64321,64335,64343,64361,64379,64391,64395,64403,64411,64415],{"__ignoreMap":44},[49,64220,64221,64223,64225,64227],{"class":51,"line":52},[49,64222,52545],{"class":66},[49,64224,52548],{"class":147},[49,64226,52551],{"class":62},[49,64228,52554],{"class":66},[49,64230,64231,64233,64235,64237,64239,64241],{"class":51,"line":59},[49,64232,2300],{"class":66},[49,64234,51883],{"class":147},[49,64236,52563],{"class":62},[49,64238,1448],{"class":66},[49,64240,52568],{"class":1505},[49,64242,52554],{"class":66},[49,64244,64245],{"class":51,"line":70},[49,64246,3654],{"emptyLinePlaceholder":1330},[49,64248,64249,64251,64253],{"class":51,"line":86},[49,64250,2300],{"class":66},[49,64252,52581],{"class":147},[49,64254,52554],{"class":66},[49,64256,64257,64259,64261,64263,64265,64267],{"class":51,"line":98},[49,64258,53386],{"class":66},[49,64260,52591],{"class":147},[49,64262,52594],{"class":62},[49,64264,1448],{"class":66},[49,64266,52599],{"class":1505},[49,64268,52554],{"class":66},[49,64270,64271,64273,64275,64277,64279,64281,64283,64285,64287],{"class":51,"line":121},[49,64272,53386],{"class":66},[49,64274,52591],{"class":147},[49,64276,16171],{"class":62},[49,64278,1448],{"class":66},[49,64280,52638],{"class":1505},[49,64282,52618],{"class":62},[49,64284,1448],{"class":66},[49,64286,52645],{"class":1505},[49,64288,52554],{"class":66},[49,64290,64291,64293,64295,64297,64299],{"class":51,"line":134},[49,64292,53386],{"class":66},[49,64294,52654],{"class":147},[49,64296,52657],{"class":66},[49,64298,52654],{"class":147},[49,64300,52554],{"class":66},[49,64302,64303,64305,64307],{"class":51,"line":1085},[49,64304,53027],{"class":66},[49,64306,52581],{"class":147},[49,64308,52554],{"class":66},[49,64310,64311],{"class":51,"line":2574},[49,64312,3654],{"emptyLinePlaceholder":1330},[49,64314,64315,64317,64319],{"class":51,"line":2586},[49,64316,2300],{"class":66},[49,64318,53042],{"class":147},[49,64320,52554],{"class":66},[49,64322,64323,64325,64327,64329,64331,64333],{"class":51,"line":2867},[49,64324,53386],{"class":66},[49,64326,448],{"class":147},[49,64328,55065],{"class":62},[49,64330,1448],{"class":66},[49,64332,63935],{"class":1505},[49,64334,52554],{"class":66},[49,64336,64337,64339,64341],{"class":51,"line":2872},[49,64338,53386],{"class":66},[49,64340,53055],{"class":147},[49,64342,52554],{"class":66},[49,64344,64345,64347,64349,64351,64353,64355,64357,64359],{"class":51,"line":2878},[49,64346,12473],{"class":109},[49,64348,61844],{"class":73},[49,64350,14816],{"class":109},[49,64352,55637],{"class":66},[49,64354,55640],{"class":62},[49,64356,1403],{"class":66},[49,64358,64118],{"class":1505},[49,64360,1409],{"class":66},[49,64362,64363,64366,64368,64370,64373,64375,64377],{"class":51,"line":2883},[49,64364,64365],{"class":66},"    input.",[49,64367,59052],{"class":62},[49,64369,1403],{"class":66},[49,64371,64372],{"class":1505},"'change'",[49,64374,13687],{"class":66},[49,64376,55690],{"class":109},[49,64378,55693],{"class":66},[49,64380,64381,64383,64385,64387,64389],{"class":51,"line":2897},[49,64382,59483],{"class":66},[49,64384,59486],{"class":62},[49,64386,1403],{"class":66},[49,64388,1984],{"class":73},[49,64390,1409],{"class":66},[49,64392,64393],{"class":51,"line":2902},[49,64394,34709],{"class":66},[49,64396,64397,64399,64401],{"class":51,"line":2908},[49,64398,53659],{"class":66},[49,64400,53055],{"class":147},[49,64402,52554],{"class":66},[49,64404,64405,64407,64409],{"class":51,"line":2929},[49,64406,53027],{"class":66},[49,64408,53042],{"class":147},[49,64410,52554],{"class":66},[49,64412,64413],{"class":51,"line":2934},[49,64414,3654],{"emptyLinePlaceholder":1330},[49,64416,64417,64419,64421],{"class":51,"line":2948},[49,64418,53027],{"class":66},[49,64420,51883],{"class":147},[49,64422,52554],{"class":66},[19,64424,64425],{},"总结：内容发生改变才回去触发",[183,64427,64429],{"id":64428},"_326-事件对象","3.2.6 事件对象",[525,64431,64433],{"id":64432},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64435,64436],{},[174,64437],{"alt":44,"src":64438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64440,64441],{},[174,64442],{"alt":44,"src":64443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64445,64446],{},"点击一次，就输出了事件对象，它是个对象",[19,64448,64449],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64451,64452],{},[174,64453],{"alt":44,"src":64454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[525,64456,64458],{"id":64457},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,64460,64461],{},[174,64462],{"alt":44,"src":64463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,64465,64466],{},"实现按特殊字符才是实现打印输出效果：",[39,64468,64470],{"className":54309,"code":64469,"language":54311,"meta":44,"style":44},"\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",[46,64471,64472,64480,64485,64499,64507,64512,64517,64522,64527,64532,64537,64542,64547,64552,64556,64560,64568],{"__ignoreMap":44},[49,64473,64474,64476,64478],{"class":51,"line":52},[49,64475,2300],{"class":66},[49,64477,53042],{"class":147},[49,64479,52554],{"class":66},[49,64481,64482],{"class":51,"line":59},[49,64483,64484],{"class":55},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[49,64486,64487,64489,64491,64493,64495,64497],{"class":51,"line":70},[49,64488,53386],{"class":66},[49,64490,448],{"class":147},[49,64492,55065],{"class":62},[49,64494,1448],{"class":66},[49,64496,63935],{"class":1505},[49,64498,52554],{"class":66},[49,64500,64501,64503,64505],{"class":51,"line":86},[49,64502,53386],{"class":66},[49,64504,53055],{"class":147},[49,64506,52554],{"class":66},[49,64508,64509],{"class":51,"line":98},[49,64510,64511],{"class":66},"    \u002F\u002F const btn = document.querySelector('button')\n",[49,64513,64514],{"class":51,"line":121},[49,64515,64516],{"class":66},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[49,64518,64519],{"class":51,"line":134},[49,64520,64521],{"class":66},"    \u002F\u002F   console.log(e);\n",[49,64523,64524],{"class":51,"line":1085},[49,64525,64526],{"class":66},"    \u002F\u002F })\n",[49,64528,64529],{"class":51,"line":2574},[49,64530,64531],{"class":66},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[49,64533,64534],{"class":51,"line":2586},[49,64535,64536],{"class":66},"    const input = document.querySelector('input')\n",[49,64538,64539],{"class":51,"line":2867},[49,64540,64541],{"class":66},"    input.addEventListener('keyup', function (e) {\n",[49,64543,64544],{"class":51,"line":2872},[49,64545,64546],{"class":66},"      if (e.key === 'Enter') {\n",[49,64548,64549],{"class":51,"line":2878},[49,64550,64551],{"class":66},"        console.log('我按下了回车键')\n",[49,64553,64554],{"class":51,"line":2883},[49,64555,53640],{"class":66},[49,64557,64558],{"class":51,"line":2897},[49,64559,34709],{"class":66},[49,64561,64562,64564,64566],{"class":51,"line":2902},[49,64563,53659],{"class":66},[49,64565,53055],{"class":147},[49,64567,52554],{"class":66},[49,64569,64570,64572,64574],{"class":51,"line":2908},[49,64571,53027],{"class":66},[49,64573,53042],{"class":147},[49,64575,52554],{"class":66},[525,64577,64579],{"id":64578},"_3263-trim方法","3.2.6.3 trim方法",[19,64581,64582],{},[174,64583],{"alt":44,"src":64584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,64586,64587],{},[174,64588],{"alt":44,"src":64589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,64591,64592],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,64594,64595],{},"str.trim()",[183,64597,64599],{"id":64598},"_327-环境对象","3.2.7 环境对象",[19,64601,64602],{},[174,64603],{"alt":44,"src":64604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,64606,64607],{},[174,64608],{"alt":44,"src":64609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,64611,64612],{},[174,64613],{"alt":44,"src":64614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,64616,64617],{},"实际函数调用是window.fn()",[19,64619,64620],{},"普通函数里面this指向的是window",[23,64622,64623,64626,64629],{},[26,64624,64625],{},"在普通函数下，this指向的是window",[26,64627,64628],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[26,64630,64631],{},"箭头函数没有this",[19,64633,64634],{},"粗略记法就是：谁调用，this就指向谁",[19,64636,64637],{},[174,64638],{"alt":44,"src":64639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,64641,64642],{},[174,64643],{"alt":44,"src":64644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,64646,64647],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,64649,64650],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[39,64652,64654],{"className":54309,"code":64653,"language":54311,"meta":44,"style":44},"\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",[46,64655,64656,64664,64676,64684,64689,64694,64699,64704,64708,64716],{"__ignoreMap":44},[49,64657,64658,64660,64662],{"class":51,"line":52},[49,64659,2300],{"class":66},[49,64661,53042],{"class":147},[49,64663,52554],{"class":66},[49,64665,64666,64668,64670,64672,64674],{"class":51,"line":59},[49,64667,53386],{"class":66},[49,64669,55128],{"class":147},[49,64671,55134],{"class":66},[49,64673,55128],{"class":147},[49,64675,52554],{"class":66},[49,64677,64678,64680,64682],{"class":51,"line":70},[49,64679,53386],{"class":66},[49,64681,53055],{"class":147},[49,64683,52554],{"class":66},[49,64685,64686],{"class":51,"line":86},[49,64687,64688],{"class":66},"    const button = document.querySelector('button')\n",[49,64690,64691],{"class":51,"line":98},[49,64692,64693],{"class":66},"    button.addEventListener('click', function () {\n",[49,64695,64696],{"class":51,"line":121},[49,64697,64698],{"class":66},"      \u002F\u002F console.log(this);\n",[49,64700,64701],{"class":51,"line":134},[49,64702,64703],{"class":66},"      this.style.color = 'pink'\n",[49,64705,64706],{"class":51,"line":1085},[49,64707,34709],{"class":66},[49,64709,64710,64712,64714],{"class":51,"line":2574},[49,64711,53659],{"class":66},[49,64713,53055],{"class":147},[49,64715,52554],{"class":66},[49,64717,64718,64720,64722],{"class":51,"line":2586},[49,64719,53027],{"class":66},[49,64721,53042],{"class":147},[49,64723,52554],{"class":66},[183,64725,64727],{"id":64726},"_328-回调函数","3.2.8 回调函数",[19,64729,64730],{},[174,64731],{"alt":44,"src":64732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,64734,64735],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,64737,12584],{},[23,64739,64740,64743,64746],{},[26,64741,64742],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[26,64744,64745],{},"回调函数本质还是函数，只不过把它当成参数使用",[26,64747,64748],{},"使用匿名函数做为回调函数比较常见",[183,64750,64752],{"id":64751},"_329-tab栏切换","3.2.9 tab栏切换",[19,64754,64755],{},[174,64756],{"alt":44,"src":64757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[39,64759,64761],{"className":51881,"code":64760,"language":51883,"meta":44,"style":44},"\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",[46,64762,64763,64773,64787,64791,64799,64813,64833,64853,64866,64874,64880,64890,64900,64904,64908,64915,64928,64941,64953,64969,64973,64977,64984,64996,65008,65020,65030,65040,65044,65048,65057,65069,65080,65092,65096,65100,65108,65118,65128,65138,65142,65146,65156,65170,65182,65186,65190,65202,65213,65229,65239,65243,65247,65262,65273,65283,65287,65291,65298,65313,65317,65321,65329,65339,65343,65347,65356,65366,65370,65378,65386,65390,65398,65413,65428,65441,65449,65483,65510,65537,65564,65591,65599,65607,65622,65659,65694,65729,65764,65799,65807,65815,65823,65828,65833,65853,65858,65887,65892,65897,65915,65920,65925,65930,65952,65957,65973,65977,65982,65987,66008,66013,66042,66046,66051,66055,66063,66071,66075],{"__ignoreMap":44},[49,64764,64765,64767,64769,64771],{"class":51,"line":52},[49,64766,52545],{"class":66},[49,64768,52548],{"class":147},[49,64770,52551],{"class":62},[49,64772,52554],{"class":66},[49,64774,64775,64777,64779,64781,64783,64785],{"class":51,"line":59},[49,64776,2300],{"class":66},[49,64778,51883],{"class":147},[49,64780,52563],{"class":62},[49,64782,1448],{"class":66},[49,64784,52568],{"class":1505},[49,64786,52554],{"class":66},[49,64788,64789],{"class":51,"line":70},[49,64790,3654],{"emptyLinePlaceholder":1330},[49,64792,64793,64795,64797],{"class":51,"line":86},[49,64794,2300],{"class":66},[49,64796,52581],{"class":147},[49,64798,52554],{"class":66},[49,64800,64801,64803,64805,64807,64809,64811],{"class":51,"line":98},[49,64802,53386],{"class":66},[49,64804,52591],{"class":147},[49,64806,52594],{"class":62},[49,64808,1448],{"class":66},[49,64810,52599],{"class":1505},[49,64812,60366],{"class":66},[49,64814,64815,64817,64819,64821,64823,64825,64827,64829,64831],{"class":51,"line":121},[49,64816,53386],{"class":66},[49,64818,52591],{"class":147},[49,64820,52610],{"class":62},[49,64822,1448],{"class":66},[49,64824,52615],{"class":1505},[49,64826,52618],{"class":62},[49,64828,1448],{"class":66},[49,64830,52623],{"class":1505},[49,64832,60366],{"class":66},[49,64834,64835,64837,64839,64841,64843,64845,64847,64849,64851],{"class":51,"line":134},[49,64836,53386],{"class":66},[49,64838,52591],{"class":147},[49,64840,16171],{"class":62},[49,64842,1448],{"class":66},[49,64844,52638],{"class":1505},[49,64846,52618],{"class":62},[49,64848,1448],{"class":66},[49,64850,52645],{"class":1505},[49,64852,60366],{"class":66},[49,64854,64855,64857,64859,64862,64864],{"class":51,"line":1085},[49,64856,53386],{"class":66},[49,64858,52654],{"class":147},[49,64860,64861],{"class":66},">tab栏切换\u003C\u002F",[49,64863,52654],{"class":147},[49,64865,52554],{"class":66},[49,64867,64868,64870,64872],{"class":51,"line":2574},[49,64869,53386],{"class":66},[49,64871,1305],{"class":147},[49,64873,52554],{"class":66},[49,64875,64876,64878],{"class":51,"line":2586},[49,64877,7655],{"class":147},[49,64879,67],{"class":66},[49,64881,64882,64884,64886,64888],{"class":51,"line":2867},[49,64883,55947],{"class":73},[49,64885,77],{"class":66},[49,64887,80],{"class":73},[49,64889,83],{"class":66},[49,64891,64892,64894,64896,64898],{"class":51,"line":2872},[49,64893,55936],{"class":73},[49,64895,77],{"class":66},[49,64897,80],{"class":73},[49,64899,83],{"class":66},[49,64901,64902],{"class":51,"line":2878},[49,64903,3441],{"class":66},[49,64905,64906],{"class":51,"line":2883},[49,64907,3654],{"emptyLinePlaceholder":1330},[49,64909,64910,64913],{"class":51,"line":2897},[49,64911,64912],{"class":62},"    .tab",[49,64914,67],{"class":66},[49,64916,64917,64919,64921,64924,64926],{"class":51,"line":2902},[49,64918,56010],{"class":73},[49,64920,77],{"class":66},[49,64922,64923],{"class":73},"590",[49,64925,110],{"class":109},[49,64927,83],{"class":66},[49,64929,64930,64932,64934,64937,64939],{"class":51,"line":2908},[49,64931,56024],{"class":73},[49,64933,77],{"class":66},[49,64935,64936],{"class":73},"340",[49,64938,110],{"class":109},[49,64940,83],{"class":66},[49,64942,64943,64945,64947,64949,64951],{"class":51,"line":2929},[49,64944,55947],{"class":73},[49,64946,77],{"class":66},[49,64948,875],{"class":73},[49,64950,110],{"class":109},[49,64952,83],{"class":66},[49,64954,64955,64957,64959,64961,64963,64965,64967],{"class":51,"line":2934},[49,64956,63215],{"class":73},[49,64958,77],{"class":66},[49,64960,159],{"class":73},[49,64962,110],{"class":109},[49,64964,113],{"class":73},[49,64966,63481],{"class":73},[49,64968,83],{"class":66},[49,64970,64971],{"class":51,"line":2948},[49,64972,3441],{"class":66},[49,64974,64975],{"class":51,"line":2953},[49,64976,3654],{"emptyLinePlaceholder":1330},[49,64978,64979,64982],{"class":51,"line":2982},[49,64980,64981],{"class":62},"    .tab-nav",[49,64983,67],{"class":66},[49,64985,64986,64988,64990,64992,64994],{"class":51,"line":2987},[49,64987,56010],{"class":73},[49,64989,77],{"class":66},[49,64991,1703],{"class":73},[49,64993,1720],{"class":109},[49,64995,83],{"class":66},[49,64997,64998,65000,65002,65004,65006],{"class":51,"line":3004},[49,64999,56024],{"class":73},[49,65001,77],{"class":66},[49,65003,2297],{"class":73},[49,65005,110],{"class":109},[49,65007,83],{"class":66},[49,65009,65010,65012,65014,65016,65018],{"class":51,"line":3009},[49,65011,58598],{"class":73},[49,65013,77],{"class":66},[49,65015,2297],{"class":73},[49,65017,110],{"class":109},[49,65019,83],{"class":66},[49,65021,65022,65024,65026,65028],{"class":51,"line":3014},[49,65023,56248],{"class":73},[49,65025,77],{"class":66},[49,65027,52723],{"class":73},[49,65029,83],{"class":66},[49,65031,65032,65034,65036,65038],{"class":51,"line":3019},[49,65033,56259],{"class":73},[49,65035,77],{"class":66},[49,65037,52910],{"class":73},[49,65039,83],{"class":66},[49,65041,65042],{"class":51,"line":3033},[49,65043,3441],{"class":66},[49,65045,65046],{"class":51,"line":3038},[49,65047,3654],{"emptyLinePlaceholder":1330},[49,65049,65050,65052,65055],{"class":51,"line":3831},[49,65051,64981],{"class":62},[49,65053,65054],{"class":147}," h3",[49,65056,67],{"class":66},[49,65058,65059,65061,65063,65065,65067],{"class":51,"line":3845},[49,65060,56161],{"class":73},[49,65062,77],{"class":66},[49,65064,2190],{"class":73},[49,65066,110],{"class":109},[49,65068,83],{"class":66},[49,65070,65071,65073,65075,65078],{"class":51,"line":3853},[49,65072,63571],{"class":73},[49,65074,77],{"class":66},[49,65076,65077],{"class":73},"normal",[49,65079,83],{"class":66},[49,65081,65082,65084,65086,65088,65090],{"class":51,"line":3858},[49,65083,63238],{"class":73},[49,65085,77],{"class":66},[49,65087,875],{"class":73},[49,65089,110],{"class":109},[49,65091,83],{"class":66},[49,65093,65094],{"class":51,"line":3864},[49,65095,3441],{"class":66},[49,65097,65098],{"class":51,"line":3870},[49,65099,3654],{"emptyLinePlaceholder":1330},[49,65101,65102,65104,65106],{"class":51,"line":3875},[49,65103,64981],{"class":62},[49,65105,62530],{"class":147},[49,65107,67],{"class":66},[49,65109,65110,65112,65114,65116],{"class":51,"line":9200},[49,65111,55973],{"class":73},[49,65113,77],{"class":66},[49,65115,460],{"class":73},[49,65117,83],{"class":66},[49,65119,65120,65122,65124,65126],{"class":51,"line":9224},[49,65121,56248],{"class":73},[49,65123,77],{"class":66},[49,65125,52723],{"class":73},[49,65127,83],{"class":66},[49,65129,65130,65132,65134,65136],{"class":51,"line":9229},[49,65131,56259],{"class":73},[49,65133,77],{"class":66},[49,65135,52823],{"class":73},[49,65137,83],{"class":66},[49,65139,65140],{"class":51,"line":9235},[49,65141,3441],{"class":66},[49,65143,65144],{"class":51,"line":9262},[49,65145,3654],{"emptyLinePlaceholder":1330},[49,65147,65148,65150,65152,65154],{"class":51,"line":9267},[49,65149,64981],{"class":62},[49,65151,62530],{"class":147},[49,65153,56314],{"class":147},[49,65155,67],{"class":66},[49,65157,65158,65160,65162,65164,65166,65168],{"class":51,"line":9273},[49,65159,55947],{"class":73},[49,65161,77],{"class":66},[49,65163,80],{"class":73},[49,65165,10202],{"class":73},[49,65167,110],{"class":109},[49,65169,83],{"class":66},[49,65171,65172,65174,65176,65178,65180],{"class":51,"line":9285},[49,65173,56161],{"class":73},[49,65175,77],{"class":66},[49,65177,1940],{"class":73},[49,65179,110],{"class":109},[49,65181,83],{"class":66},[49,65183,65184],{"class":51,"line":9297},[49,65185,3441],{"class":66},[49,65187,65188],{"class":51,"line":9309},[49,65189,3654],{"emptyLinePlaceholder":1330},[49,65191,65192,65194,65196,65198,65200],{"class":51,"line":10968},[49,65193,64981],{"class":62},[49,65195,62530],{"class":147},[49,65197,56314],{"class":147},[49,65199,2655],{"class":147},[49,65201,67],{"class":66},[49,65203,65204,65207,65209,65211],{"class":51,"line":10993},[49,65205,65206],{"class":73},"      text-decoration",[49,65208,77],{"class":66},[49,65210,460],{"class":73},[49,65212,83],{"class":66},[49,65214,65215,65217,65219,65221,65223,65225,65227],{"class":51,"line":11016},[49,65216,63469],{"class":73},[49,65218,77],{"class":66},[49,65220,1478],{"class":73},[49,65222,110],{"class":109},[49,65224,113],{"class":73},[49,65226,116],{"class":73},[49,65228,83],{"class":66},[49,65230,65231,65233,65235,65237],{"class":51,"line":11040},[49,65232,58655],{"class":73},[49,65234,77],{"class":66},[49,65236,129],{"class":73},[49,65238,83],{"class":66},[49,65240,65241],{"class":51,"line":11045},[49,65242,3441],{"class":66},[49,65244,65245],{"class":51,"line":11050},[49,65246,3654],{"emptyLinePlaceholder":1330},[49,65248,65249,65251,65253,65255,65257,65260],{"class":51,"line":11055},[49,65250,64981],{"class":62},[49,65252,62530],{"class":147},[49,65254,56314],{"class":147},[49,65256,2655],{"class":147},[49,65258,65259],{"class":62},".active",[49,65261,67],{"class":66},[49,65263,65264,65266,65268,65271],{"class":51,"line":11064},[49,65265,63029],{"class":73},[49,65267,77],{"class":66},[49,65269,65270],{"class":73},"#e1251b",[49,65272,83],{"class":66},[49,65274,65275,65277,65279,65281],{"class":51,"line":11069},[49,65276,58655],{"class":73},[49,65278,77],{"class":66},[49,65280,65270],{"class":73},[49,65282,83],{"class":66},[49,65284,65285],{"class":51,"line":11075},[49,65286,3441],{"class":66},[49,65288,65289],{"class":51,"line":11096},[49,65290,3654],{"emptyLinePlaceholder":1330},[49,65292,65293,65296],{"class":51,"line":11102},[49,65294,65295],{"class":62},"    .tab-content",[49,65297,67],{"class":66},[49,65299,65300,65302,65304,65306,65309,65311],{"class":51,"line":11116},[49,65301,55936],{"class":73},[49,65303,77],{"class":66},[49,65305,80],{"class":73},[49,65307,65308],{"class":73}," 16",[49,65310,110],{"class":109},[49,65312,83],{"class":66},[49,65314,65315],{"class":51,"line":11122},[49,65316,3441],{"class":66},[49,65318,65319],{"class":51,"line":11149},[49,65320,3654],{"emptyLinePlaceholder":1330},[49,65322,65323,65325,65327],{"class":51,"line":11158},[49,65324,65295],{"class":62},[49,65326,63411],{"class":62},[49,65328,67],{"class":66},[49,65330,65331,65333,65335,65337],{"class":51,"line":11164},[49,65332,56248],{"class":73},[49,65334,77],{"class":66},[49,65336,460],{"class":73},[49,65338,83],{"class":66},[49,65340,65341],{"class":51,"line":11172},[49,65342,3441],{"class":66},[49,65344,65345],{"class":51,"line":11177},[49,65346,3654],{"emptyLinePlaceholder":1330},[49,65348,65349,65351,65354],{"class":51,"line":17854},[49,65350,65295],{"class":62},[49,65352,65353],{"class":62}," .item.active",[49,65355,67],{"class":66},[49,65357,65358,65360,65362,65364],{"class":51,"line":17860},[49,65359,56248],{"class":73},[49,65361,77],{"class":66},[49,65363,674],{"class":73},[49,65365,83],{"class":66},[49,65367,65368],{"class":51,"line":17883},[49,65369,3441],{"class":66},[49,65371,65372,65374,65376],{"class":51,"line":17889},[49,65373,53659],{"class":66},[49,65375,1305],{"class":147},[49,65377,52554],{"class":66},[49,65379,65380,65382,65384],{"class":51,"line":17912},[49,65381,53027],{"class":66},[49,65383,52581],{"class":147},[49,65385,52554],{"class":66},[49,65387,65388],{"class":51,"line":17926},[49,65389,3654],{"emptyLinePlaceholder":1330},[49,65391,65392,65394,65396],{"class":51,"line":17946},[49,65393,2300],{"class":66},[49,65395,53042],{"class":147},[49,65397,52554],{"class":66},[49,65399,65400,65402,65404,65406,65408,65411],{"class":51,"line":17952},[49,65401,53386],{"class":66},[49,65403,148],{"class":147},[49,65405,54728],{"class":62},[49,65407,1448],{"class":66},[49,65409,65410],{"class":1505},"\"tab\"",[49,65412,52554],{"class":66},[49,65414,65415,65417,65419,65421,65423,65426],{"class":51,"line":17963},[49,65416,52588],{"class":66},[49,65418,148],{"class":147},[49,65420,54728],{"class":62},[49,65422,1448],{"class":66},[49,65424,65425],{"class":1505},"\"tab-nav\"",[49,65427,52554],{"class":66},[49,65429,65430,65432,65434,65437,65439],{"class":51,"line":17986},[49,65431,56473],{"class":66},[49,65433,183],{"class":147},[49,65435,65436],{"class":66},">每日特价\u003C\u002F",[49,65438,183],{"class":147},[49,65440,52554],{"class":66},[49,65442,65443,65445,65447],{"class":51,"line":18008},[49,65444,56473],{"class":66},[49,65446,23],{"class":147},[49,65448,52554],{"class":66},[49,65450,65451,65453,65455,65457,65459,65461,65463,65465,65467,65469,65472,65475,65477,65479,65481],{"class":51,"line":18013},[49,65452,56541],{"class":66},[49,65454,26],{"class":147},[49,65456,62290],{"class":66},[49,65458,1630],{"class":147},[49,65460,54728],{"class":62},[49,65462,1448],{"class":66},[49,65464,60945],{"class":1505},[49,65466,62295],{"class":62},[49,65468,1448],{"class":66},[49,65470,65471],{"class":1505},"\"javascript:;\"",[49,65473,65474],{"class":66},">精选\u003C\u002F",[49,65476,1630],{"class":147},[49,65478,56553],{"class":66},[49,65480,26],{"class":147},[49,65482,52554],{"class":66},[49,65484,65485,65487,65489,65491,65493,65495,65497,65499,65502,65504,65506,65508],{"class":51,"line":18019},[49,65486,56541],{"class":66},[49,65488,26],{"class":147},[49,65490,62290],{"class":66},[49,65492,1630],{"class":147},[49,65494,62295],{"class":62},[49,65496,1448],{"class":66},[49,65498,65471],{"class":1505},[49,65500,65501],{"class":66},">美食\u003C\u002F",[49,65503,1630],{"class":147},[49,65505,56553],{"class":66},[49,65507,26],{"class":147},[49,65509,52554],{"class":66},[49,65511,65512,65514,65516,65518,65520,65522,65524,65526,65529,65531,65533,65535],{"class":51,"line":18033},[49,65513,56541],{"class":66},[49,65515,26],{"class":147},[49,65517,62290],{"class":66},[49,65519,1630],{"class":147},[49,65521,62295],{"class":62},[49,65523,1448],{"class":66},[49,65525,65471],{"class":1505},[49,65527,65528],{"class":66},">百货\u003C\u002F",[49,65530,1630],{"class":147},[49,65532,56553],{"class":66},[49,65534,26],{"class":147},[49,65536,52554],{"class":66},[49,65538,65539,65541,65543,65545,65547,65549,65551,65553,65556,65558,65560,65562],{"class":51,"line":18046},[49,65540,56541],{"class":66},[49,65542,26],{"class":147},[49,65544,62290],{"class":66},[49,65546,1630],{"class":147},[49,65548,62295],{"class":62},[49,65550,1448],{"class":66},[49,65552,65471],{"class":1505},[49,65554,65555],{"class":66},">个护\u003C\u002F",[49,65557,1630],{"class":147},[49,65559,56553],{"class":66},[49,65561,26],{"class":147},[49,65563,52554],{"class":66},[49,65565,65566,65568,65570,65572,65574,65576,65578,65580,65583,65585,65587,65589],{"class":51,"line":18051},[49,65567,56541],{"class":66},[49,65569,26],{"class":147},[49,65571,62290],{"class":66},[49,65573,1630],{"class":147},[49,65575,62295],{"class":62},[49,65577,1448],{"class":66},[49,65579,65471],{"class":1505},[49,65581,65582],{"class":66},">预告\u003C\u002F",[49,65584,1630],{"class":147},[49,65586,56553],{"class":66},[49,65588,26],{"class":147},[49,65590,52554],{"class":66},[49,65592,65593,65595,65597],{"class":51,"line":18065},[49,65594,56646],{"class":66},[49,65596,23],{"class":147},[49,65598,52554],{"class":66},[49,65600,65601,65603,65605],{"class":51,"line":18070},[49,65602,53018],{"class":66},[49,65604,148],{"class":147},[49,65606,52554],{"class":66},[49,65608,65609,65611,65613,65615,65617,65620],{"class":51,"line":18076},[49,65610,52588],{"class":66},[49,65612,148],{"class":147},[49,65614,54728],{"class":62},[49,65616,1448],{"class":66},[49,65618,65619],{"class":1505},"\"tab-content\"",[49,65621,52554],{"class":66},[49,65623,65624,65626,65628,65630,65632,65635,65637,65639,65641,65643,65646,65648,65650,65652,65655,65657],{"class":51,"line":18081},[49,65625,56473],{"class":66},[49,65627,148],{"class":147},[49,65629,54728],{"class":62},[49,65631,1448],{"class":66},[49,65633,65634],{"class":1505},"\"item active\"",[49,65636,62290],{"class":66},[49,65638,174],{"class":147},[49,65640,56478],{"class":62},[49,65642,1448],{"class":66},[49,65644,65645],{"class":1505},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[49,65647,56486],{"class":62},[49,65649,1448],{"class":66},[49,65651,8904],{"class":1505},[49,65653,65654],{"class":66}," \u002F>\u003C\u002F",[49,65656,148],{"class":147},[49,65658,52554],{"class":66},[49,65660,65661,65663,65665,65667,65669,65671,65673,65675,65677,65679,65682,65684,65686,65688,65690,65692],{"class":51,"line":18095},[49,65662,56473],{"class":66},[49,65664,148],{"class":147},[49,65666,54728],{"class":62},[49,65668,1448],{"class":66},[49,65670,63859],{"class":1505},[49,65672,62290],{"class":66},[49,65674,174],{"class":147},[49,65676,56478],{"class":62},[49,65678,1448],{"class":66},[49,65680,65681],{"class":1505},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[49,65683,56486],{"class":62},[49,65685,1448],{"class":66},[49,65687,8904],{"class":1505},[49,65689,65654],{"class":66},[49,65691,148],{"class":147},[49,65693,52554],{"class":66},[49,65695,65696,65698,65700,65702,65704,65706,65708,65710,65712,65714,65717,65719,65721,65723,65725,65727],{"class":51,"line":18100},[49,65697,56473],{"class":66},[49,65699,148],{"class":147},[49,65701,54728],{"class":62},[49,65703,1448],{"class":66},[49,65705,63859],{"class":1505},[49,65707,62290],{"class":66},[49,65709,174],{"class":147},[49,65711,56478],{"class":62},[49,65713,1448],{"class":66},[49,65715,65716],{"class":1505},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[49,65718,56486],{"class":62},[49,65720,1448],{"class":66},[49,65722,8904],{"class":1505},[49,65724,65654],{"class":66},[49,65726,148],{"class":147},[49,65728,52554],{"class":66},[49,65730,65731,65733,65735,65737,65739,65741,65743,65745,65747,65749,65752,65754,65756,65758,65760,65762],{"class":51,"line":18105},[49,65732,56473],{"class":66},[49,65734,148],{"class":147},[49,65736,54728],{"class":62},[49,65738,1448],{"class":66},[49,65740,63859],{"class":1505},[49,65742,62290],{"class":66},[49,65744,174],{"class":147},[49,65746,56478],{"class":62},[49,65748,1448],{"class":66},[49,65750,65751],{"class":1505},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[49,65753,56486],{"class":62},[49,65755,1448],{"class":66},[49,65757,8904],{"class":1505},[49,65759,65654],{"class":66},[49,65761,148],{"class":147},[49,65763,52554],{"class":66},[49,65765,65766,65768,65770,65772,65774,65776,65778,65780,65782,65784,65787,65789,65791,65793,65795,65797],{"class":51,"line":18119},[49,65767,56473],{"class":66},[49,65769,148],{"class":147},[49,65771,54728],{"class":62},[49,65773,1448],{"class":66},[49,65775,63859],{"class":1505},[49,65777,62290],{"class":66},[49,65779,174],{"class":147},[49,65781,56478],{"class":62},[49,65783,1448],{"class":66},[49,65785,65786],{"class":1505},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[49,65788,56486],{"class":62},[49,65790,1448],{"class":66},[49,65792,8904],{"class":1505},[49,65794,65654],{"class":66},[49,65796,148],{"class":147},[49,65798,52554],{"class":66},[49,65800,65801,65803,65805],{"class":51,"line":18131},[49,65802,53018],{"class":66},[49,65804,148],{"class":147},[49,65806,52554],{"class":66},[49,65808,65809,65811,65813],{"class":51,"line":18136},[49,65810,53659],{"class":66},[49,65812,148],{"class":147},[49,65814,52554],{"class":66},[49,65816,65817,65819,65821],{"class":51,"line":18149},[49,65818,53386],{"class":66},[49,65820,53055],{"class":147},[49,65822,52554],{"class":66},[49,65824,65825],{"class":51,"line":18154},[49,65826,65827],{"class":55},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[49,65829,65830],{"class":51,"line":18159},[49,65831,65832],{"class":55},"    \u002F\u002F 1.1 获取 a 元素 \n",[49,65834,65835,65837,65840,65842,65844,65846,65848,65851],{"class":51,"line":18164},[49,65836,12473],{"class":109},[49,65838,65839],{"class":73}," as",[49,65841,14816],{"class":109},[49,65843,55637],{"class":66},[49,65845,56920],{"class":62},[49,65847,1403],{"class":66},[49,65849,65850],{"class":1505},"'.tab-nav a'",[49,65852,1409],{"class":66},[49,65854,65855],{"class":51,"line":18177},[49,65856,65857],{"class":55},"    \u002F\u002F console.log(as) \n",[49,65859,65860,65862,65864,65866,65868,65870,65872,65874,65876,65879,65881,65883,65885],{"class":51,"line":18182},[49,65861,4455],{"class":109},[49,65863,2913],{"class":66},[49,65865,53089],{"class":109},[49,65867,10690],{"class":66},[49,65869,1448],{"class":109},[49,65871,5347],{"class":73},[49,65873,10697],{"class":66},[49,65875,2300],{"class":109},[49,65877,65878],{"class":66}," as.",[49,65880,53210],{"class":73},[49,65882,4468],{"class":66},[49,65884,3546],{"class":109},[49,65886,13694],{"class":66},[49,65888,65889],{"class":51,"line":33881},[49,65890,65891],{"class":55},"      \u002F\u002F console.log(as[i])\n",[49,65893,65894],{"class":51,"line":33887},[49,65895,65896],{"class":55},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[49,65898,65899,65902,65904,65906,65909,65911,65913],{"class":51,"line":33893},[49,65900,65901],{"class":66},"      as[i].",[49,65903,59052],{"class":62},[49,65905,1403],{"class":66},[49,65907,65908],{"class":1505},"'mouseenter'",[49,65910,13687],{"class":66},[49,65912,55690],{"class":109},[49,65914,55693],{"class":66},[49,65916,65917],{"class":51,"line":33899},[49,65918,65919],{"class":55},"        \u002F\u002F console.log('鼠标经过')\n",[49,65921,65922],{"class":51,"line":33905},[49,65923,65924],{"class":55},"        \u002F\u002F 排他思想  \n",[49,65926,65927],{"class":51,"line":33916},[49,65928,65929],{"class":55},"        \u002F\u002F 干掉别人 移除类active\n",[49,65931,65932,65934,65936,65938,65941,65943,65945,65947,65950],{"class":51,"line":33922},[49,65933,53167],{"class":66},[49,65935,55640],{"class":62},[49,65937,1403],{"class":66},[49,65939,65940],{"class":1505},"'.tab-nav .active'",[49,65942,58242],{"class":66},[49,65944,58245],{"class":62},[49,65946,1403],{"class":66},[49,65948,65949],{"class":1505},"'active'",[49,65951,1409],{"class":66},[49,65953,65954],{"class":51,"line":33942},[49,65955,65956],{"class":55},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[49,65958,65959,65962,65965,65967,65969,65971],{"class":51,"line":33948},[49,65960,65961],{"class":73},"        this",[49,65963,65964],{"class":66},".classList.",[49,65966,6586],{"class":62},[49,65968,1403],{"class":66},[49,65970,65949],{"class":1505},[49,65972,1409],{"class":66},[49,65974,65975],{"class":51,"line":33959},[49,65976,3654],{"emptyLinePlaceholder":1330},[49,65978,65979],{"class":51,"line":33965},[49,65980,65981],{"class":55},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[49,65983,65984],{"class":51,"line":33971},[49,65985,65986],{"class":55},"        \u002F\u002F 干掉别人\n",[49,65988,65989,65991,65993,65995,65998,66000,66002,66004,66006],{"class":51,"line":33977},[49,65990,53167],{"class":66},[49,65992,55640],{"class":62},[49,65994,1403],{"class":66},[49,65996,65997],{"class":1505},"'.tab-content .active'",[49,65999,58242],{"class":66},[49,66001,58245],{"class":62},[49,66003,1403],{"class":66},[49,66005,65949],{"class":1505},[49,66007,1409],{"class":66},[49,66009,66010],{"class":51,"line":33983},[49,66011,66012],{"class":55},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[49,66014,66015,66017,66019,66021,66024,66026,66028,66030,66032,66034,66036,66038,66040],{"class":51,"line":33989},[49,66016,53167],{"class":66},[49,66018,55640],{"class":62},[49,66020,1403],{"class":66},[49,66022,66023],{"class":1505},"`.tab-content .item:nth-child(${",[49,66025,1833],{"class":66},[49,66027,46814],{"class":109},[49,66029,26367],{"class":73},[49,66031,58271],{"class":1505},[49,66033,58242],{"class":66},[49,66035,6586],{"class":62},[49,66037,1403],{"class":66},[49,66039,65949],{"class":1505},[49,66041,1409],{"class":66},[49,66043,66044],{"class":51,"line":33995},[49,66045,3654],{"emptyLinePlaceholder":1330},[49,66047,66048],{"class":51,"line":34001},[49,66049,66050],{"class":66},"      })\n",[49,66052,66053],{"class":51,"line":34021},[49,66054,3441],{"class":66},[49,66056,66057,66059,66061],{"class":51,"line":34027},[49,66058,53659],{"class":66},[49,66060,53055],{"class":147},[49,66062,52554],{"class":66},[49,66064,66065,66067,66069],{"class":51,"line":34043},[49,66066,53027],{"class":66},[49,66068,53042],{"class":147},[49,66070,52554],{"class":66},[49,66072,66073],{"class":51,"line":34049},[49,66074,3654],{"emptyLinePlaceholder":1330},[49,66076,66077,66079,66081],{"class":51,"line":34063},[49,66078,53027],{"class":66},[49,66080,51883],{"class":147},[49,66082,52554],{"class":66},[19,66084,66085],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66087,66088],{},"在监听事件中，this指向的就是他的调用者",[19,66090,66091],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66093,54962],{},[19,66095,66096],{},"(function () {",[19,66098,66099],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66101,66102],{},"list.addEventListener('click', function (e) {",[19,66104,66105],{},"if (e.target.tagName === 'A') {",[19,66107,66108],{},"\u002F\u002F 排他思想",[19,66110,66111],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66113,66114],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66116,66117],{},"\u002F\u002F console.log(old);",[19,66119,66120],{},"\u002F\u002F 判断",[19,66122,66123],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66125,66126],{},"if (old) old.classList.remove('active')",[19,66128,66129],{},"e.target.classList.add('active')",[19,66131,620],{},[19,66133,53706],{},[19,66135,66136],{},"})();",[183,66138,66140],{"id":66139},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[39,66142,66144],{"className":51881,"code":66143,"language":51883,"meta":44,"style":44},"\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",[46,66145,66146,66156,66160,66168,66172,66186,66200,66212,66220,66226,66236,66246,66250,66254,66261,66273,66284,66301,66314,66328,66338,66342,66346,66353,66364,66382,66392,66404,66408,66412,66419,66436,66447,66459,66463,66467,66474,66486,66490,66498,66506,66510,66518,66526,66534,66549,66593,66601,66614,66627,66640,66648,66656,66664,66692,66700,66712,66725,66738,66746,66754,66762,66788,66796,66809,66821,66834,66842,66850,66858,66884,66892,66905,66917,66930,66938,66946,66954,66959,66979,66984,67004,67009,67026,67031,67039,67044,67073,67086,67090,67094,67099,67103,67131,67136,67153,67158,67163,67168,67173,67199,67203,67207,67215,67223,67227],{"__ignoreMap":44},[49,66147,66148,66150,66152,66154],{"class":51,"line":52},[49,66149,52545],{"class":66},[49,66151,52548],{"class":147},[49,66153,52551],{"class":62},[49,66155,52554],{"class":66},[49,66157,66158],{"class":51,"line":59},[49,66159,3654],{"emptyLinePlaceholder":1330},[49,66161,66162,66164,66166],{"class":51,"line":70},[49,66163,2300],{"class":66},[49,66165,51883],{"class":147},[49,66167,52554],{"class":66},[49,66169,66170],{"class":51,"line":86},[49,66171,3654],{"emptyLinePlaceholder":1330},[49,66173,66174,66176,66178,66180,66182,66184],{"class":51,"line":98},[49,66175,2300],{"class":66},[49,66177,52581],{"class":147},[49,66179,52563],{"class":62},[49,66181,1448],{"class":66},[49,66183,52568],{"class":1505},[49,66185,52554],{"class":66},[49,66187,66188,66190,66192,66194,66196,66198],{"class":51,"line":121},[49,66189,53386],{"class":66},[49,66191,52591],{"class":147},[49,66193,52594],{"class":62},[49,66195,1448],{"class":66},[49,66197,52599],{"class":1505},[49,66199,52554],{"class":66},[49,66201,66202,66204,66206,66208,66210],{"class":51,"line":134},[49,66203,53386],{"class":66},[49,66205,52654],{"class":147},[49,66207,56553],{"class":66},[49,66209,52654],{"class":147},[49,66211,52554],{"class":66},[49,66213,66214,66216,66218],{"class":51,"line":1085},[49,66215,53386],{"class":66},[49,66217,1305],{"class":147},[49,66219,52554],{"class":66},[49,66221,66222,66224],{"class":51,"line":2574},[49,66223,7655],{"class":147},[49,66225,67],{"class":66},[49,66227,66228,66230,66232,66234],{"class":51,"line":2586},[49,66229,55947],{"class":73},[49,66231,77],{"class":66},[49,66233,80],{"class":73},[49,66235,83],{"class":66},[49,66237,66238,66240,66242,66244],{"class":51,"line":2867},[49,66239,55936],{"class":73},[49,66241,77],{"class":66},[49,66243,80],{"class":73},[49,66245,83],{"class":66},[49,66247,66248],{"class":51,"line":2872},[49,66249,3441],{"class":66},[49,66251,66252],{"class":51,"line":2878},[49,66253,3654],{"emptyLinePlaceholder":1330},[49,66255,66256,66259],{"class":51,"line":2883},[49,66257,66258],{"class":147},"    table",[49,66260,67],{"class":66},[49,66262,66263,66266,66268,66271],{"class":51,"line":2897},[49,66264,66265],{"class":73},"      border-collapse",[49,66267,77],{"class":66},[49,66269,66270],{"class":73},"collapse",[49,66272,83],{"class":66},[49,66274,66275,66278,66280,66282],{"class":51,"line":2902},[49,66276,66277],{"class":73},"      border-spacing",[49,66279,77],{"class":66},[49,66281,80],{"class":73},[49,66283,83],{"class":66},[49,66285,66286,66288,66290,66292,66294,66296,66299],{"class":51,"line":2908},[49,66287,63215],{"class":73},[49,66289,77],{"class":66},[49,66291,159],{"class":73},[49,66293,110],{"class":109},[49,66295,113],{"class":73},[49,66297,66298],{"class":73}," #c0c0c0",[49,66300,83],{"class":66},[49,66302,66303,66305,66307,66310,66312],{"class":51,"line":2929},[49,66304,56010],{"class":73},[49,66306,77],{"class":66},[49,66308,66309],{"class":73},"500",[49,66311,110],{"class":109},[49,66313,83],{"class":66},[49,66315,66316,66318,66320,66322,66324,66326],{"class":51,"line":2934},[49,66317,55947],{"class":73},[49,66319,77],{"class":66},[49,66321,1703],{"class":73},[49,66323,110],{"class":109},[49,66325,1077],{"class":73},[49,66327,83],{"class":66},[49,66329,66330,66332,66334,66336],{"class":51,"line":2948},[49,66331,58525],{"class":73},[49,66333,77],{"class":66},[49,66335,52835],{"class":73},[49,66337,83],{"class":66},[49,66339,66340],{"class":51,"line":2953},[49,66341,3441],{"class":66},[49,66343,66344],{"class":51,"line":2982},[49,66345,3654],{"emptyLinePlaceholder":1330},[49,66347,66348,66351],{"class":51,"line":2987},[49,66349,66350],{"class":147},"    th",[49,66352,67],{"class":66},[49,66354,66355,66357,66359,66362],{"class":51,"line":3004},[49,66356,56123],{"class":73},[49,66358,77],{"class":66},[49,66360,66361],{"class":73},"#09c",[49,66363,83],{"class":66},[49,66365,66366,66369,66371,66373,66375,66377,66380],{"class":51,"line":3009},[49,66367,66368],{"class":73},"      font",[49,66370,77],{"class":66},[49,66372,63576],{"class":73},[49,66374,65308],{"class":73},[49,66376,110],{"class":109},[49,66378,66379],{"class":1505}," \"微软雅黑\"",[49,66381,83],{"class":66},[49,66383,66384,66386,66388,66390],{"class":51,"line":3014},[49,66385,58655],{"class":73},[49,66387,77],{"class":66},[49,66389,62081],{"class":73},[49,66391,83],{"class":66},[49,66393,66394,66396,66398,66400,66402],{"class":51,"line":3019},[49,66395,56024],{"class":73},[49,66397,77],{"class":66},[49,66399,2190],{"class":73},[49,66401,110],{"class":109},[49,66403,83],{"class":66},[49,66405,66406],{"class":51,"line":3033},[49,66407,3441],{"class":66},[49,66409,66410],{"class":51,"line":3038},[49,66411,3654],{"emptyLinePlaceholder":1330},[49,66413,66414,66417],{"class":51,"line":3831},[49,66415,66416],{"class":147},"    td",[49,66418,67],{"class":66},[49,66420,66421,66423,66425,66427,66429,66431,66434],{"class":51,"line":3845},[49,66422,63215],{"class":73},[49,66424,77],{"class":66},[49,66426,159],{"class":73},[49,66428,110],{"class":109},[49,66430,113],{"class":73},[49,66432,66433],{"class":73}," #d0d0d0",[49,66435,83],{"class":66},[49,66437,66438,66440,66442,66445],{"class":51,"line":3853},[49,66439,58655],{"class":73},[49,66441,77],{"class":66},[49,66443,66444],{"class":73},"#404060",[49,66446,83],{"class":66},[49,66448,66449,66451,66453,66455,66457],{"class":51,"line":3858},[49,66450,55936],{"class":73},[49,66452,77],{"class":66},[49,66454,106],{"class":73},[49,66456,110],{"class":109},[49,66458,83],{"class":66},[49,66460,66461],{"class":51,"line":3864},[49,66462,3441],{"class":66},[49,66464,66465],{"class":51,"line":3870},[49,66466,3654],{"emptyLinePlaceholder":1330},[49,66468,66469,66472],{"class":51,"line":3875},[49,66470,66471],{"class":62},"    .allCheck",[49,66473,67],{"class":66},[49,66475,66476,66478,66480,66482,66484],{"class":51,"line":9200},[49,66477,56010],{"class":73},[49,66479,77],{"class":66},[49,66481,2003],{"class":73},[49,66483,110],{"class":109},[49,66485,83],{"class":66},[49,66487,66488],{"class":51,"line":9224},[49,66489,3441],{"class":66},[49,66491,66492,66494,66496],{"class":51,"line":9229},[49,66493,53659],{"class":66},[49,66495,1305],{"class":147},[49,66497,52554],{"class":66},[49,66499,66500,66502,66504],{"class":51,"line":9235},[49,66501,53027],{"class":66},[49,66503,52581],{"class":147},[49,66505,52554],{"class":66},[49,66507,66508],{"class":51,"line":9262},[49,66509,3654],{"emptyLinePlaceholder":1330},[49,66511,66512,66514,66516],{"class":51,"line":9267},[49,66513,2300],{"class":66},[49,66515,53042],{"class":147},[49,66517,52554],{"class":66},[49,66519,66520,66522,66524],{"class":51,"line":9273},[49,66521,53386],{"class":66},[49,66523,293],{"class":147},[49,66525,52554],{"class":66},[49,66527,66528,66530,66532],{"class":51,"line":9285},[49,66529,52588],{"class":66},[49,66531,299],{"class":147},[49,66533,52554],{"class":66},[49,66535,66536,66538,66540,66542,66544,66547],{"class":51,"line":9297},[49,66537,56473],{"class":66},[49,66539,302],{"class":147},[49,66541,54728],{"class":62},[49,66543,1448],{"class":66},[49,66545,66546],{"class":1505},"\"allCheck\"",[49,66548,52554],{"class":66},[49,66550,66551,66553,66555,66557,66559,66561,66563,66565,66567,66569,66571,66574,66577,66579,66581,66583,66586,66589,66591],{"class":51,"line":9309},[49,66552,56541],{"class":66},[49,66554,448],{"class":147},[49,66556,55065],{"class":62},[49,66558,1448],{"class":66},[49,66560,55070],{"class":1505},[49,66562,16171],{"class":62},[49,66564,1448],{"class":66},[49,66566,8904],{"class":1505},[49,66568,16210],{"class":62},[49,66570,1448],{"class":66},[49,66572,66573],{"class":1505},"\"checkAll\"",[49,66575,66576],{"class":66},"> \u003C",[49,66578,49],{"class":147},[49,66580,54728],{"class":62},[49,66582,1448],{"class":66},[49,66584,66585],{"class":1505},"\"all\"",[49,66587,66588],{"class":66},">全选\u003C\u002F",[49,66590,49],{"class":147},[49,66592,52554],{"class":66},[49,66594,66595,66597,66599],{"class":51,"line":10968},[49,66596,56646],{"class":66},[49,66598,302],{"class":147},[49,66600,52554],{"class":66},[49,66602,66603,66605,66607,66610,66612],{"class":51,"line":10993},[49,66604,56473],{"class":66},[49,66606,302],{"class":147},[49,66608,66609],{"class":66},">商品\u003C\u002F",[49,66611,302],{"class":147},[49,66613,52554],{"class":66},[49,66615,66616,66618,66620,66623,66625],{"class":51,"line":11016},[49,66617,56473],{"class":66},[49,66619,302],{"class":147},[49,66621,66622],{"class":66},">商家\u003C\u002F",[49,66624,302],{"class":147},[49,66626,52554],{"class":66},[49,66628,66629,66631,66633,66636,66638],{"class":51,"line":11040},[49,66630,56473],{"class":66},[49,66632,302],{"class":147},[49,66634,66635],{"class":66},">价格\u003C\u002F",[49,66637,302],{"class":147},[49,66639,52554],{"class":66},[49,66641,66642,66644,66646],{"class":51,"line":11045},[49,66643,53018],{"class":66},[49,66645,299],{"class":147},[49,66647,52554],{"class":66},[49,66649,66650,66652,66654],{"class":51,"line":11050},[49,66651,52588],{"class":66},[49,66653,299],{"class":147},[49,66655,52554],{"class":66},[49,66657,66658,66660,66662],{"class":51,"line":11055},[49,66659,56473],{"class":66},[49,66661,315],{"class":147},[49,66663,52554],{"class":66},[49,66665,66666,66668,66670,66672,66674,66676,66678,66680,66683,66685,66687,66690],{"class":51,"line":11064},[49,66667,56541],{"class":66},[49,66669,448],{"class":147},[49,66671,55065],{"class":62},[49,66673,1448],{"class":66},[49,66675,55070],{"class":1505},[49,66677,16171],{"class":62},[49,66679,1448],{"class":66},[49,66681,66682],{"class":1505},"\"check\"",[49,66684,54728],{"class":62},[49,66686,1448],{"class":66},[49,66688,66689],{"class":1505},"\"ck\"",[49,66691,52554],{"class":66},[49,66693,66694,66696,66698],{"class":51,"line":11069},[49,66695,56646],{"class":66},[49,66697,315],{"class":147},[49,66699,52554],{"class":66},[49,66701,66702,66704,66706,66708,66710],{"class":51,"line":11075},[49,66703,56473],{"class":66},[49,66705,315],{"class":147},[49,66707,62411],{"class":66},[49,66709,315],{"class":147},[49,66711,52554],{"class":66},[49,66713,66714,66716,66718,66721,66723],{"class":51,"line":11096},[49,66715,56473],{"class":66},[49,66717,315],{"class":147},[49,66719,66720],{"class":66},">小米\u003C\u002F",[49,66722,315],{"class":147},[49,66724,52554],{"class":66},[49,66726,66727,66729,66731,66734,66736],{"class":51,"line":11102},[49,66728,56473],{"class":66},[49,66730,315],{"class":147},[49,66732,66733],{"class":66},">￥1999\u003C\u002F",[49,66735,315],{"class":147},[49,66737,52554],{"class":66},[49,66739,66740,66742,66744],{"class":51,"line":11116},[49,66741,53018],{"class":66},[49,66743,299],{"class":147},[49,66745,52554],{"class":66},[49,66747,66748,66750,66752],{"class":51,"line":11122},[49,66749,52588],{"class":66},[49,66751,299],{"class":147},[49,66753,52554],{"class":66},[49,66755,66756,66758,66760],{"class":51,"line":11149},[49,66757,56473],{"class":66},[49,66759,315],{"class":147},[49,66761,52554],{"class":66},[49,66763,66764,66766,66768,66770,66772,66774,66776,66778,66780,66782,66784,66786],{"class":51,"line":11158},[49,66765,56541],{"class":66},[49,66767,448],{"class":147},[49,66769,55065],{"class":62},[49,66771,1448],{"class":66},[49,66773,55070],{"class":1505},[49,66775,16171],{"class":62},[49,66777,1448],{"class":66},[49,66779,66682],{"class":1505},[49,66781,54728],{"class":62},[49,66783,1448],{"class":66},[49,66785,66689],{"class":1505},[49,66787,52554],{"class":66},[49,66789,66790,66792,66794],{"class":51,"line":11164},[49,66791,56646],{"class":66},[49,66793,315],{"class":147},[49,66795,52554],{"class":66},[49,66797,66798,66800,66802,66805,66807],{"class":51,"line":11172},[49,66799,56473],{"class":66},[49,66801,315],{"class":147},[49,66803,66804],{"class":66},">小米净水器\u003C\u002F",[49,66806,315],{"class":147},[49,66808,52554],{"class":66},[49,66810,66811,66813,66815,66817,66819],{"class":51,"line":11177},[49,66812,56473],{"class":66},[49,66814,315],{"class":147},[49,66816,66720],{"class":66},[49,66818,315],{"class":147},[49,66820,52554],{"class":66},[49,66822,66823,66825,66827,66830,66832],{"class":51,"line":17854},[49,66824,56473],{"class":66},[49,66826,315],{"class":147},[49,66828,66829],{"class":66},">￥4999\u003C\u002F",[49,66831,315],{"class":147},[49,66833,52554],{"class":66},[49,66835,66836,66838,66840],{"class":51,"line":17860},[49,66837,53018],{"class":66},[49,66839,299],{"class":147},[49,66841,52554],{"class":66},[49,66843,66844,66846,66848],{"class":51,"line":17883},[49,66845,52588],{"class":66},[49,66847,299],{"class":147},[49,66849,52554],{"class":66},[49,66851,66852,66854,66856],{"class":51,"line":17889},[49,66853,56473],{"class":66},[49,66855,315],{"class":147},[49,66857,52554],{"class":66},[49,66859,66860,66862,66864,66866,66868,66870,66872,66874,66876,66878,66880,66882],{"class":51,"line":17912},[49,66861,56541],{"class":66},[49,66863,448],{"class":147},[49,66865,55065],{"class":62},[49,66867,1448],{"class":66},[49,66869,55070],{"class":1505},[49,66871,16171],{"class":62},[49,66873,1448],{"class":66},[49,66875,66682],{"class":1505},[49,66877,54728],{"class":62},[49,66879,1448],{"class":66},[49,66881,66689],{"class":1505},[49,66883,52554],{"class":66},[49,66885,66886,66888,66890],{"class":51,"line":17926},[49,66887,56646],{"class":66},[49,66889,315],{"class":147},[49,66891,52554],{"class":66},[49,66893,66894,66896,66898,66901,66903],{"class":51,"line":17946},[49,66895,56473],{"class":66},[49,66897,315],{"class":147},[49,66899,66900],{"class":66},">小米电视\u003C\u002F",[49,66902,315],{"class":147},[49,66904,52554],{"class":66},[49,66906,66907,66909,66911,66913,66915],{"class":51,"line":17952},[49,66908,56473],{"class":66},[49,66910,315],{"class":147},[49,66912,66720],{"class":66},[49,66914,315],{"class":147},[49,66916,52554],{"class":66},[49,66918,66919,66921,66923,66926,66928],{"class":51,"line":17963},[49,66920,56473],{"class":66},[49,66922,315],{"class":147},[49,66924,66925],{"class":66},">￥5999\u003C\u002F",[49,66927,315],{"class":147},[49,66929,52554],{"class":66},[49,66931,66932,66934,66936],{"class":51,"line":17986},[49,66933,53018],{"class":66},[49,66935,299],{"class":147},[49,66937,52554],{"class":66},[49,66939,66940,66942,66944],{"class":51,"line":18008},[49,66941,53659],{"class":66},[49,66943,293],{"class":147},[49,66945,52554],{"class":66},[49,66947,66948,66950,66952],{"class":51,"line":18013},[49,66949,53386],{"class":66},[49,66951,53055],{"class":147},[49,66953,52554],{"class":66},[49,66955,66956],{"class":51,"line":18019},[49,66957,66958],{"class":55},"    \u002F\u002F 1. 获取大复选框\n",[49,66960,66961,66963,66966,66968,66970,66972,66974,66977],{"class":51,"line":18033},[49,66962,12473],{"class":109},[49,66964,66965],{"class":73}," checkAll",[49,66967,14816],{"class":109},[49,66969,55637],{"class":66},[49,66971,55640],{"class":62},[49,66973,1403],{"class":66},[49,66975,66976],{"class":1505},"'#checkAll'",[49,66978,1409],{"class":66},[49,66980,66981],{"class":51,"line":18046},[49,66982,66983],{"class":55},"    \u002F\u002F 2. 获取所有的小复选框\n",[49,66985,66986,66988,66991,66993,66995,66997,66999,67002],{"class":51,"line":18051},[49,66987,12473],{"class":109},[49,66989,66990],{"class":73}," cks",[49,66992,14816],{"class":109},[49,66994,55637],{"class":66},[49,66996,56920],{"class":62},[49,66998,1403],{"class":66},[49,67000,67001],{"class":1505},"'.ck'",[49,67003,1409],{"class":66},[49,67005,67006],{"class":51,"line":18065},[49,67007,67008],{"class":55},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[49,67010,67011,67014,67016,67018,67020,67022,67024],{"class":51,"line":18070},[49,67012,67013],{"class":66},"    checkAll.",[49,67015,59052],{"class":62},[49,67017,1403],{"class":66},[49,67019,59057],{"class":1505},[49,67021,13687],{"class":66},[49,67023,55690],{"class":109},[49,67025,55693],{"class":66},[49,67027,67028],{"class":51,"line":18076},[49,67029,67030],{"class":55},"      \u002F\u002F 得到当前大复选框的选中状态\n",[49,67032,67033,67036],{"class":51,"line":18081},[49,67034,67035],{"class":55},"      \u002F\u002F console.log(checkAll.checked)",[49,67037,67038],{"class":55},"  \u002F\u002F 得到 是 true 或者是 false\n",[49,67040,67041],{"class":51,"line":18095},[49,67042,67043],{"class":55},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[49,67045,67046,67048,67050,67052,67054,67056,67058,67060,67062,67065,67067,67069,67071],{"class":51,"line":18100},[49,67047,53526],{"class":109},[49,67049,2913],{"class":66},[49,67051,53089],{"class":109},[49,67053,10690],{"class":66},[49,67055,1448],{"class":109},[49,67057,5347],{"class":73},[49,67059,10697],{"class":66},[49,67061,2300],{"class":109},[49,67063,67064],{"class":66}," cks.",[49,67066,53210],{"class":73},[49,67068,4468],{"class":66},[49,67070,3546],{"class":109},[49,67072,13694],{"class":66},[49,67074,67075,67078,67080,67083],{"class":51,"line":18105},[49,67076,67077],{"class":66},"        cks[i].checked ",[49,67079,1448],{"class":109},[49,67081,67082],{"class":73}," this",[49,67084,67085],{"class":66},".checked\n",[49,67087,67088],{"class":51,"line":18119},[49,67089,53640],{"class":66},[49,67091,67092],{"class":51,"line":18131},[49,67093,34709],{"class":66},[49,67095,67096],{"class":51,"line":18136},[49,67097,67098],{"class":55},"    \u002F\u002F 5. 小复选框控制大复选框\n",[49,67100,67101],{"class":51,"line":18149},[49,67102,3654],{"emptyLinePlaceholder":1330},[49,67104,67105,67107,67109,67111,67113,67115,67117,67119,67121,67123,67125,67127,67129],{"class":51,"line":18154},[49,67106,4455],{"class":109},[49,67108,2913],{"class":66},[49,67110,53089],{"class":109},[49,67112,10690],{"class":66},[49,67114,1448],{"class":109},[49,67116,5347],{"class":73},[49,67118,10697],{"class":66},[49,67120,2300],{"class":109},[49,67122,67064],{"class":66},[49,67124,53210],{"class":73},[49,67126,4468],{"class":66},[49,67128,3546],{"class":109},[49,67130,13694],{"class":66},[49,67132,67133],{"class":51,"line":18159},[49,67134,67135],{"class":55},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[49,67137,67138,67141,67143,67145,67147,67149,67151],{"class":51,"line":18164},[49,67139,67140],{"class":66},"      cks[i].",[49,67142,59052],{"class":62},[49,67144,1403],{"class":66},[49,67146,59057],{"class":1505},[49,67148,13687],{"class":66},[49,67150,55690],{"class":109},[49,67152,55693],{"class":66},[49,67154,67155],{"class":51,"line":18177},[49,67156,67157],{"class":55},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[49,67159,67160],{"class":51,"line":18182},[49,67161,67162],{"class":55},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[49,67164,67165],{"class":51,"line":33881},[49,67166,67167],{"class":55},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[49,67169,67170],{"class":51,"line":33887},[49,67171,67172],{"class":55},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[49,67174,67175,67178,67180,67182,67184,67186,67189,67191,67193,67195,67197],{"class":51,"line":33893},[49,67176,67177],{"class":66},"        checkAll.checked ",[49,67179,1448],{"class":109},[49,67181,55637],{"class":66},[49,67183,56920],{"class":62},[49,67185,1403],{"class":66},[49,67187,67188],{"class":1505},"'.ck:checked'",[49,67190,32074],{"class":66},[49,67192,53210],{"class":73},[49,67194,59145],{"class":109},[49,67196,67064],{"class":66},[49,67198,57070],{"class":73},[49,67200,67201],{"class":51,"line":33899},[49,67202,66050],{"class":66},[49,67204,67205],{"class":51,"line":33905},[49,67206,3441],{"class":66},[49,67208,67209,67211,67213],{"class":51,"line":33916},[49,67210,53659],{"class":66},[49,67212,53055],{"class":147},[49,67214,52554],{"class":66},[49,67216,67217,67219,67221],{"class":51,"line":33922},[49,67218,53027],{"class":66},[49,67220,53042],{"class":147},[49,67222,52554],{"class":66},[49,67224,67225],{"class":51,"line":33942},[49,67226,3654],{"emptyLinePlaceholder":1330},[49,67228,67229,67231,67233],{"class":51,"line":33948},[49,67230,53027],{"class":66},[49,67232,51883],{"class":147},[49,67234,52554],{"class":66},[19,67236,67237],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67239,67240],{},"用好之间比较得到的布尔值！！！",[19,67242,67243,67244,67247,67248,2913,67251,1975,67253,67256],{},"在 JS 里访问的时候，",[46,67245,67246],{},"checkbox.checked"," 是一个 ",[485,67249,67250],{},"布尔值",[46,67252,2619],{},[46,67254,67255],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67258,67259,67260,67263,67264],{},"HTML 的 ",[46,67261,67262],{},"checked=\"checked\""," 只是 ",[485,67265,67266,67267,67270],{},"初始值；JS 的 ",[46,67268,67269],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67272,67273],{},"：checked是一个伪类选择器",[19,67275,67276],{},[174,67277],{"alt":44,"src":67278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67280,67281,67284],{},[67282,67283],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67286,67287],{},[174,67288],{"alt":44,"src":67289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67291,67293],{"id":67292},"_33-dom事件进阶","3.3 DOM事件进阶",[183,67295,67297],{"id":67296},"_331-事件流","3.3.1 事件流",[19,67299,67300],{},[174,67301],{"alt":44,"src":67302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[525,67304,67306],{"id":67305},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67308,67309],{},[174,67310],{"alt":44,"src":67311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[39,67313,67315],{"className":51881,"code":67314,"language":51883,"meta":44,"style":44},"\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",[46,67316,67317,67327,67341,67345,67353,67367,67387,67399,67407,67414,67426,67438,67448,67452,67456,67463,67475,67487,67497,67501,67509,67517,67521,67529,67544,67563,67571,67579,67599,67619,67635,67646,67654,67671,67682,67690,67707,67718,67726,67734,67742,67746],{"__ignoreMap":44},[49,67318,67319,67321,67323,67325],{"class":51,"line":52},[49,67320,52545],{"class":66},[49,67322,52548],{"class":147},[49,67324,52551],{"class":62},[49,67326,52554],{"class":66},[49,67328,67329,67331,67333,67335,67337,67339],{"class":51,"line":59},[49,67330,2300],{"class":66},[49,67332,51883],{"class":147},[49,67334,52563],{"class":62},[49,67336,1448],{"class":66},[49,67338,52568],{"class":1505},[49,67340,52554],{"class":66},[49,67342,67343],{"class":51,"line":70},[49,67344,3654],{"emptyLinePlaceholder":1330},[49,67346,67347,67349,67351],{"class":51,"line":86},[49,67348,2300],{"class":66},[49,67350,52581],{"class":147},[49,67352,52554],{"class":66},[49,67354,67355,67357,67359,67361,67363,67365],{"class":51,"line":98},[49,67356,53386],{"class":66},[49,67358,52591],{"class":147},[49,67360,52594],{"class":62},[49,67362,1448],{"class":66},[49,67364,52599],{"class":1505},[49,67366,52554],{"class":66},[49,67368,67369,67371,67373,67375,67377,67379,67381,67383,67385],{"class":51,"line":121},[49,67370,53386],{"class":66},[49,67372,52591],{"class":147},[49,67374,16171],{"class":62},[49,67376,1448],{"class":66},[49,67378,52638],{"class":1505},[49,67380,52618],{"class":62},[49,67382,1448],{"class":66},[49,67384,52645],{"class":1505},[49,67386,52554],{"class":66},[49,67388,67389,67391,67393,67395,67397],{"class":51,"line":134},[49,67390,53386],{"class":66},[49,67392,52654],{"class":147},[49,67394,52657],{"class":66},[49,67396,52654],{"class":147},[49,67398,52554],{"class":66},[49,67400,67401,67403,67405],{"class":51,"line":1085},[49,67402,53386],{"class":66},[49,67404,1305],{"class":147},[49,67406,52554],{"class":66},[49,67408,67409,67412],{"class":51,"line":2574},[49,67410,67411],{"class":62},"    .father",[49,67413,67],{"class":66},[49,67415,67416,67418,67420,67422,67424],{"class":51,"line":2586},[49,67417,56010],{"class":73},[49,67419,77],{"class":66},[49,67421,66309],{"class":73},[49,67423,110],{"class":109},[49,67425,83],{"class":66},[49,67427,67428,67430,67432,67434,67436],{"class":51,"line":2867},[49,67429,56024],{"class":73},[49,67431,77],{"class":66},[49,67433,66309],{"class":73},[49,67435,110],{"class":109},[49,67437,83],{"class":66},[49,67439,67440,67442,67444,67446],{"class":51,"line":2872},[49,67441,56123],{"class":73},[49,67443,77],{"class":66},[49,67445,52887],{"class":73},[49,67447,83],{"class":66},[49,67449,67450],{"class":51,"line":2878},[49,67451,3441],{"class":66},[49,67453,67454],{"class":51,"line":2883},[49,67455,3654],{"emptyLinePlaceholder":1330},[49,67457,67458,67461],{"class":51,"line":2897},[49,67459,67460],{"class":62},"    .son",[49,67462,67],{"class":66},[49,67464,67465,67467,67469,67471,67473],{"class":51,"line":2902},[49,67466,56010],{"class":73},[49,67468,77],{"class":66},[49,67470,2977],{"class":73},[49,67472,110],{"class":109},[49,67474,83],{"class":66},[49,67476,67477,67479,67481,67483,67485],{"class":51,"line":2908},[49,67478,56024],{"class":73},[49,67480,77],{"class":66},[49,67482,2977],{"class":73},[49,67484,110],{"class":109},[49,67486,83],{"class":66},[49,67488,67489,67491,67493,67495],{"class":51,"line":2929},[49,67490,56123],{"class":73},[49,67492,77],{"class":66},[49,67494,56128],{"class":73},[49,67496,83],{"class":66},[49,67498,67499],{"class":51,"line":2934},[49,67500,3441],{"class":66},[49,67502,67503,67505,67507],{"class":51,"line":2948},[49,67504,53659],{"class":66},[49,67506,1305],{"class":147},[49,67508,52554],{"class":66},[49,67510,67511,67513,67515],{"class":51,"line":2953},[49,67512,53027],{"class":66},[49,67514,52581],{"class":147},[49,67516,52554],{"class":66},[49,67518,67519],{"class":51,"line":2982},[49,67520,3654],{"emptyLinePlaceholder":1330},[49,67522,67523,67525,67527],{"class":51,"line":2987},[49,67524,2300],{"class":66},[49,67526,53042],{"class":147},[49,67528,52554],{"class":66},[49,67530,67531,67533,67535,67537,67539,67542],{"class":51,"line":3004},[49,67532,53386],{"class":66},[49,67534,148],{"class":147},[49,67536,54728],{"class":62},[49,67538,1448],{"class":66},[49,67540,67541],{"class":1505},"\"father\"",[49,67543,52554],{"class":66},[49,67545,67546,67548,67550,67552,67554,67557,67559,67561],{"class":51,"line":3009},[49,67547,52588],{"class":66},[49,67549,148],{"class":147},[49,67551,54728],{"class":62},[49,67553,1448],{"class":66},[49,67555,67556],{"class":1505},"\"son\"",[49,67558,56553],{"class":66},[49,67560,148],{"class":147},[49,67562,52554],{"class":66},[49,67564,67565,67567,67569],{"class":51,"line":3014},[49,67566,53659],{"class":66},[49,67568,148],{"class":147},[49,67570,52554],{"class":66},[49,67572,67573,67575,67577],{"class":51,"line":3019},[49,67574,53386],{"class":66},[49,67576,53055],{"class":147},[49,67578,52554],{"class":66},[49,67580,67581,67583,67586,67588,67590,67592,67594,67597],{"class":51,"line":3033},[49,67582,12473],{"class":109},[49,67584,67585],{"class":73}," fa",[49,67587,14816],{"class":109},[49,67589,55637],{"class":66},[49,67591,55640],{"class":62},[49,67593,1403],{"class":66},[49,67595,67596],{"class":1505},"'.father'",[49,67598,1409],{"class":66},[49,67600,67601,67603,67606,67608,67610,67612,67614,67617],{"class":51,"line":3038},[49,67602,12473],{"class":109},[49,67604,67605],{"class":73}," son",[49,67607,14816],{"class":109},[49,67609,55637],{"class":66},[49,67611,55640],{"class":62},[49,67613,1403],{"class":66},[49,67615,67616],{"class":1505},"'.son'",[49,67618,1409],{"class":66},[49,67620,67621,67623,67625,67627,67629,67631,67633],{"class":51,"line":3831},[49,67622,53649],{"class":66},[49,67624,59052],{"class":62},[49,67626,1403],{"class":66},[49,67628,59057],{"class":1505},[49,67630,13687],{"class":66},[49,67632,55690],{"class":109},[49,67634,55693],{"class":66},[49,67636,67637,67639,67641,67644],{"class":51,"line":3845},[49,67638,60164],{"class":62},[49,67640,1403],{"class":66},[49,67642,67643],{"class":1505},"'woshiu1'",[49,67645,1409],{"class":66},[49,67647,67648,67650,67652],{"class":51,"line":3853},[49,67649,55776],{"class":66},[49,67651,2619],{"class":73},[49,67653,1409],{"class":66},[49,67655,67656,67659,67661,67663,67665,67667,67669],{"class":51,"line":3858},[49,67657,67658],{"class":66},"    fa.",[49,67660,59052],{"class":62},[49,67662,1403],{"class":66},[49,67664,59057],{"class":1505},[49,67666,13687],{"class":66},[49,67668,55690],{"class":109},[49,67670,55693],{"class":66},[49,67672,67673,67675,67677,67680],{"class":51,"line":3864},[49,67674,60164],{"class":62},[49,67676,1403],{"class":66},[49,67678,67679],{"class":1505},"'1'",[49,67681,1409],{"class":66},[49,67683,67684,67686,67688],{"class":51,"line":3870},[49,67685,55776],{"class":66},[49,67687,2619],{"class":73},[49,67689,1409],{"class":66},[49,67691,67692,67695,67697,67699,67701,67703,67705],{"class":51,"line":3875},[49,67693,67694],{"class":66},"    son.",[49,67696,59052],{"class":62},[49,67698,1403],{"class":66},[49,67700,59057],{"class":1505},[49,67702,13687],{"class":66},[49,67704,55690],{"class":109},[49,67706,55693],{"class":66},[49,67708,67709,67711,67713,67716],{"class":51,"line":9200},[49,67710,60164],{"class":62},[49,67712,1403],{"class":66},[49,67714,67715],{"class":1505},"'2'",[49,67717,1409],{"class":66},[49,67719,67720,67722,67724],{"class":51,"line":9224},[49,67721,55776],{"class":66},[49,67723,2619],{"class":73},[49,67725,1409],{"class":66},[49,67727,67728,67730,67732],{"class":51,"line":9229},[49,67729,53659],{"class":66},[49,67731,53055],{"class":147},[49,67733,52554],{"class":66},[49,67735,67736,67738,67740],{"class":51,"line":9235},[49,67737,53027],{"class":66},[49,67739,53042],{"class":147},[49,67741,52554],{"class":66},[49,67743,67744],{"class":51,"line":9262},[49,67745,3654],{"emptyLinePlaceholder":1330},[49,67747,67748,67750,67752],{"class":51,"line":9267},[49,67749,53027],{"class":66},[49,67751,51883],{"class":147},[49,67753,52554],{"class":66},[19,67755,67756],{},[174,67757],{"alt":44,"src":67758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67760,67761],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[525,67763,67765],{"id":67764},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67767,67768],{},[174,67769],{"alt":44,"src":67770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67772,67773],{},"反着来",[19,67775,67776],{},"注意是同名事件，比如都是‘click’",[525,67778,67780],{"id":67779},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67782,67783],{},[174,67784],{"alt":44,"src":67785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[525,67787,67789],{"id":67788},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67791,67792],{},[174,67793],{"alt":44,"src":67794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67796,67797],{},[174,67798],{"alt":44,"src":67799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[525,67801,67803],{"id":67802},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[591,67805,67806],{},[26,67807,67808],{},"事件类型的区别",[19,67810,67811],{},[174,67812],{"alt":44,"src":67813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67815,67816],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[591,67818,67819],{"start":59},[26,67820,67821],{},"注册事件的区别",[19,67823,67824],{},[174,67825],{"alt":44,"src":67826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[525,67828,67830],{"id":67829},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67832,67833],{},[174,67834],{"alt":44,"src":67835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67837,67838],{},[174,67839],{"alt":44,"src":67840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[39,67842,67844],{"className":54309,"code":67843,"language":54311,"meta":44,"style":44},"\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",[46,67845,67846,67854,67871,67894,67902,67907,67912,67917,67921,67929,67937],{"__ignoreMap":44},[49,67847,67848,67850,67852],{"class":51,"line":52},[49,67849,2300],{"class":66},[49,67851,53042],{"class":147},[49,67853,52554],{"class":66},[49,67855,67856,67858,67861,67864,67866,67869],{"class":51,"line":59},[49,67857,53386],{"class":66},[49,67859,67860],{"class":147},"form",[49,67862,67863],{"class":62}," action",[49,67865,1448],{"class":66},[49,67867,67868],{"class":1505},"\"http:\u002F\u002Fwww.itcast.cn\"",[49,67870,52554],{"class":66},[49,67872,67873,67875,67877,67879,67881,67884,67887,67889,67892],{"class":51,"line":70},[49,67874,52588],{"class":66},[49,67876,448],{"class":147},[49,67878,55065],{"class":62},[49,67880,1448],{"class":66},[49,67882,67883],{"class":1505},"\"submit\"",[49,67885,67886],{"class":62}," value",[49,67888,1448],{"class":66},[49,67890,67891],{"class":1505},"\"免费注册\"",[49,67893,52554],{"class":66},[49,67895,67896,67898,67900],{"class":51,"line":86},[49,67897,52588],{"class":66},[49,67899,53055],{"class":147},[49,67901,52554],{"class":66},[49,67903,67904],{"class":51,"line":98},[49,67905,67906],{"class":66},"      const form = document.querySelector('form')\n",[49,67908,67909],{"class":51,"line":121},[49,67910,67911],{"class":66},"      form.addEventListener('submit', function (e) {\n",[49,67913,67914],{"class":51,"line":134},[49,67915,67916],{"class":66},"        e.preventDefault()\n",[49,67918,67919],{"class":51,"line":1085},[49,67920,66050],{"class":66},[49,67922,67923,67925,67927],{"class":51,"line":2574},[49,67924,53018],{"class":66},[49,67926,53055],{"class":147},[49,67928,52554],{"class":66},[49,67930,67931,67933,67935],{"class":51,"line":2586},[49,67932,53659],{"class":66},[49,67934,67860],{"class":147},[49,67936,52554],{"class":66},[49,67938,67939,67941,67943],{"class":51,"line":2867},[49,67940,53027],{"class":66},[49,67942,53042],{"class":147},[49,67944,52554],{"class":66},[19,67946,67947],{},"点击不在跳转！！！",[183,67949,67951],{"id":67950},"_332-事件委托","3.3.2 事件委托",[19,67953,67954],{},[174,67955],{"alt":44,"src":67956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[39,67958,67960],{"className":51881,"code":67959,"language":51883,"meta":44,"style":44},"\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",[46,67961,67962,67972,67986,67990,67998,68012,68032,68044,68052,68056,68064,68072,68084,68096,68108,68120,68132,68145,68153,68161,68166,68185,68206,68211,68216,68221,68226,68235,68239,68249,68253,68258,68263,68277,68287,68291,68295,68303,68311,68315],{"__ignoreMap":44},[49,67963,67964,67966,67968,67970],{"class":51,"line":52},[49,67965,52545],{"class":66},[49,67967,52548],{"class":147},[49,67969,52551],{"class":62},[49,67971,52554],{"class":66},[49,67973,67974,67976,67978,67980,67982,67984],{"class":51,"line":59},[49,67975,2300],{"class":66},[49,67977,51883],{"class":147},[49,67979,52563],{"class":62},[49,67981,1448],{"class":66},[49,67983,52568],{"class":1505},[49,67985,52554],{"class":66},[49,67987,67988],{"class":51,"line":70},[49,67989,3654],{"emptyLinePlaceholder":1330},[49,67991,67992,67994,67996],{"class":51,"line":86},[49,67993,2300],{"class":66},[49,67995,52581],{"class":147},[49,67997,52554],{"class":66},[49,67999,68000,68002,68004,68006,68008,68010],{"class":51,"line":98},[49,68001,53386],{"class":66},[49,68003,52591],{"class":147},[49,68005,52594],{"class":62},[49,68007,1448],{"class":66},[49,68009,52599],{"class":1505},[49,68011,52554],{"class":66},[49,68013,68014,68016,68018,68020,68022,68024,68026,68028,68030],{"class":51,"line":121},[49,68015,53386],{"class":66},[49,68017,52591],{"class":147},[49,68019,16171],{"class":62},[49,68021,1448],{"class":66},[49,68023,52638],{"class":1505},[49,68025,52618],{"class":62},[49,68027,1448],{"class":66},[49,68029,52645],{"class":1505},[49,68031,52554],{"class":66},[49,68033,68034,68036,68038,68040,68042],{"class":51,"line":134},[49,68035,53386],{"class":66},[49,68037,52654],{"class":147},[49,68039,52657],{"class":66},[49,68041,52654],{"class":147},[49,68043,52554],{"class":66},[49,68045,68046,68048,68050],{"class":51,"line":1085},[49,68047,53027],{"class":66},[49,68049,52581],{"class":147},[49,68051,52554],{"class":66},[49,68053,68054],{"class":51,"line":2574},[49,68055,3654],{"emptyLinePlaceholder":1330},[49,68057,68058,68060,68062],{"class":51,"line":2586},[49,68059,2300],{"class":66},[49,68061,53042],{"class":147},[49,68063,52554],{"class":66},[49,68065,68066,68068,68070],{"class":51,"line":2867},[49,68067,53386],{"class":66},[49,68069,23],{"class":147},[49,68071,52554],{"class":66},[49,68073,68074,68076,68078,68080,68082],{"class":51,"line":2872},[49,68075,52588],{"class":66},[49,68077,26],{"class":147},[49,68079,55207],{"class":66},[49,68081,26],{"class":147},[49,68083,52554],{"class":66},[49,68085,68086,68088,68090,68092,68094],{"class":51,"line":2878},[49,68087,52588],{"class":66},[49,68089,26],{"class":147},[49,68091,55226],{"class":66},[49,68093,26],{"class":147},[49,68095,52554],{"class":66},[49,68097,68098,68100,68102,68104,68106],{"class":51,"line":2883},[49,68099,52588],{"class":66},[49,68101,26],{"class":147},[49,68103,55245],{"class":66},[49,68105,26],{"class":147},[49,68107,52554],{"class":66},[49,68109,68110,68112,68114,68116,68118],{"class":51,"line":2897},[49,68111,52588],{"class":66},[49,68113,26],{"class":147},[49,68115,55264],{"class":66},[49,68117,26],{"class":147},[49,68119,52554],{"class":66},[49,68121,68122,68124,68126,68128,68130],{"class":51,"line":2902},[49,68123,52588],{"class":66},[49,68125,26],{"class":147},[49,68127,55283],{"class":66},[49,68129,26],{"class":147},[49,68131,52554],{"class":66},[49,68133,68134,68136,68138,68141,68143],{"class":51,"line":2908},[49,68135,52588],{"class":66},[49,68137,19],{"class":147},[49,68139,68140],{"class":66},">我不需要变色\u003C\u002F",[49,68142,19],{"class":147},[49,68144,52554],{"class":66},[49,68146,68147,68149,68151],{"class":51,"line":2929},[49,68148,53659],{"class":66},[49,68150,23],{"class":147},[49,68152,52554],{"class":66},[49,68154,68155,68157,68159],{"class":51,"line":2934},[49,68156,53386],{"class":66},[49,68158,53055],{"class":147},[49,68160,52554],{"class":66},[49,68162,68163],{"class":51,"line":2948},[49,68164,68165],{"class":55},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[49,68167,68168,68170,68172,68174,68176,68178,68180,68183],{"class":51,"line":2953},[49,68169,12473],{"class":109},[49,68171,62530],{"class":73},[49,68173,14816],{"class":109},[49,68175,55637],{"class":66},[49,68177,55640],{"class":62},[49,68179,1403],{"class":66},[49,68181,68182],{"class":1505},"'ul'",[49,68184,1409],{"class":66},[49,68186,68187,68190,68192,68194,68196,68198,68200,68202,68204],{"class":51,"line":2982},[49,68188,68189],{"class":66},"    ul.",[49,68191,59052],{"class":62},[49,68193,1403],{"class":66},[49,68195,59057],{"class":1505},[49,68197,13687],{"class":66},[49,68199,55690],{"class":109},[49,68201,2913],{"class":66},[49,68203,1475],{"class":6468},[49,68205,13694],{"class":66},[49,68207,68208],{"class":51,"line":2987},[49,68209,68210],{"class":55},"      \u002F\u002F alert(1)\n",[49,68212,68213],{"class":51,"line":3004},[49,68214,68215],{"class":55},"      \u002F\u002F e.target就是我们点击的对象\n",[49,68217,68218],{"class":51,"line":3009},[49,68219,68220],{"class":55},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[49,68222,68223],{"class":51,"line":3014},[49,68224,68225],{"class":55},"      \u002F\u002F e.target.style.color = 'red'\n",[49,68227,68228,68230,68232],{"class":51,"line":3019},[49,68229,59483],{"class":66},[49,68231,59486],{"class":62},[49,68233,68234],{"class":66},"(e)\n",[49,68236,68237],{"class":51,"line":3033},[49,68238,3654],{"emptyLinePlaceholder":1330},[49,68240,68241,68243,68246],{"class":51,"line":3038},[49,68242,59483],{"class":66},[49,68244,68245],{"class":62},"dir",[49,68247,68248],{"class":66},"(e.target)\n",[49,68250,68251],{"class":51,"line":3831},[49,68252,3654],{"emptyLinePlaceholder":1330},[49,68254,68255],{"class":51,"line":3845},[49,68256,68257],{"class":55},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[49,68259,68260],{"class":51,"line":3853},[49,68261,68262],{"class":55},"      \u002F\u002F 通过tagName来进行判断\n",[49,68264,68265,68267,68270,68272,68275],{"class":51,"line":3858},[49,68266,55721],{"class":109},[49,68268,68269],{"class":66}," (e.target.tagName ",[49,68271,55727],{"class":109},[49,68273,68274],{"class":1505}," 'LI'",[49,68276,13694],{"class":66},[49,68278,68279,68282,68284],{"class":51,"line":3864},[49,68280,68281],{"class":66},"        e.target.style.color ",[49,68283,1448],{"class":109},[49,68285,68286],{"class":1505}," 'red'\n",[49,68288,68289],{"class":51,"line":3870},[49,68290,53640],{"class":66},[49,68292,68293],{"class":51,"line":3875},[49,68294,34709],{"class":66},[49,68296,68297,68299,68301],{"class":51,"line":9200},[49,68298,53659],{"class":66},[49,68300,53055],{"class":147},[49,68302,52554],{"class":66},[49,68304,68305,68307,68309],{"class":51,"line":9224},[49,68306,53027],{"class":66},[49,68308,53042],{"class":147},[49,68310,52554],{"class":66},[49,68312,68313],{"class":51,"line":9229},[49,68314,3654],{"emptyLinePlaceholder":1330},[49,68316,68317,68319,68321],{"class":51,"line":9235},[49,68318,53027],{"class":66},[49,68320,51883],{"class":147},[49,68322,52554],{"class":66},[19,68324,68325],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68327,68328],{},"if(e.target.ragName==='P') {}",[19,68330,68331],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68333,68334],{},"通过事件委托的方式实现tab栏切换改造：",[19,68336,68337],{},"一定要记住自定义属性！！！！！！",[19,68339,68340],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68342,68343],{},"id是自定义的属性名",[19,68345,68346],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[39,68348,68350],{"className":51881,"code":68349,"language":51883,"meta":44,"style":44},"\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",[46,68351,68352,68362,68376,68380,68388,68402,68422,68442,68454,68462,68468,68478,68488,68492,68496,68502,68514,68526,68538,68554,68558,68562,68568,68580,68592,68604,68614,68624,68628,68632,68640,68652,68662,68674,68678,68682,68690,68700,68710,68720,68724,68728,68738,68752,68764,68768,68772,68784,68794,68810,68820,68824,68828,68842,68852,68862,68866,68870,68876,68890,68894,68898,68906,68916,68920,68924,68933,68943,68947,68955,68963,68967,68975,68989,69003,69015,69023,69062,69094,69126,69158,69190,69198,69206,69220,69254,69288,69322,69356,69390,69398,69406,69414,69419,69424,69443,69448,69468,69476,69481,69494,69515,69528,69532,69537,69542,69555,69575,69603,69607,69611,69615,69623,69631,69635],{"__ignoreMap":44},[49,68353,68354,68356,68358,68360],{"class":51,"line":52},[49,68355,52545],{"class":66},[49,68357,52548],{"class":147},[49,68359,52551],{"class":62},[49,68361,52554],{"class":66},[49,68363,68364,68366,68368,68370,68372,68374],{"class":51,"line":59},[49,68365,2300],{"class":66},[49,68367,51883],{"class":147},[49,68369,52563],{"class":62},[49,68371,1448],{"class":66},[49,68373,52568],{"class":1505},[49,68375,52554],{"class":66},[49,68377,68378],{"class":51,"line":70},[49,68379,3654],{"emptyLinePlaceholder":1330},[49,68381,68382,68384,68386],{"class":51,"line":86},[49,68383,2300],{"class":66},[49,68385,52581],{"class":147},[49,68387,52554],{"class":66},[49,68389,68390,68392,68394,68396,68398,68400],{"class":51,"line":98},[49,68391,53386],{"class":66},[49,68393,52591],{"class":147},[49,68395,52594],{"class":62},[49,68397,1448],{"class":66},[49,68399,52599],{"class":1505},[49,68401,60366],{"class":66},[49,68403,68404,68406,68408,68410,68412,68414,68416,68418,68420],{"class":51,"line":121},[49,68405,53386],{"class":66},[49,68407,52591],{"class":147},[49,68409,52610],{"class":62},[49,68411,1448],{"class":66},[49,68413,52615],{"class":1505},[49,68415,52618],{"class":62},[49,68417,1448],{"class":66},[49,68419,52623],{"class":1505},[49,68421,60366],{"class":66},[49,68423,68424,68426,68428,68430,68432,68434,68436,68438,68440],{"class":51,"line":134},[49,68425,53386],{"class":66},[49,68427,52591],{"class":147},[49,68429,16171],{"class":62},[49,68431,1448],{"class":66},[49,68433,52638],{"class":1505},[49,68435,52618],{"class":62},[49,68437,1448],{"class":66},[49,68439,52645],{"class":1505},[49,68441,60366],{"class":66},[49,68443,68444,68446,68448,68450,68452],{"class":51,"line":1085},[49,68445,53386],{"class":66},[49,68447,52654],{"class":147},[49,68449,64861],{"class":66},[49,68451,52654],{"class":147},[49,68453,52554],{"class":66},[49,68455,68456,68458,68460],{"class":51,"line":2574},[49,68457,53386],{"class":66},[49,68459,1305],{"class":147},[49,68461,52554],{"class":66},[49,68463,68464,68466],{"class":51,"line":2586},[49,68465,7655],{"class":147},[49,68467,67],{"class":66},[49,68469,68470,68472,68474,68476],{"class":51,"line":2867},[49,68471,55947],{"class":73},[49,68473,77],{"class":66},[49,68475,80],{"class":73},[49,68477,83],{"class":66},[49,68479,68480,68482,68484,68486],{"class":51,"line":2872},[49,68481,55936],{"class":73},[49,68483,77],{"class":66},[49,68485,80],{"class":73},[49,68487,83],{"class":66},[49,68489,68490],{"class":51,"line":2878},[49,68491,3441],{"class":66},[49,68493,68494],{"class":51,"line":2883},[49,68495,3654],{"emptyLinePlaceholder":1330},[49,68497,68498,68500],{"class":51,"line":2897},[49,68499,64912],{"class":62},[49,68501,67],{"class":66},[49,68503,68504,68506,68508,68510,68512],{"class":51,"line":2902},[49,68505,56010],{"class":73},[49,68507,77],{"class":66},[49,68509,64923],{"class":73},[49,68511,110],{"class":109},[49,68513,83],{"class":66},[49,68515,68516,68518,68520,68522,68524],{"class":51,"line":2908},[49,68517,56024],{"class":73},[49,68519,77],{"class":66},[49,68521,64936],{"class":73},[49,68523,110],{"class":109},[49,68525,83],{"class":66},[49,68527,68528,68530,68532,68534,68536],{"class":51,"line":2929},[49,68529,55947],{"class":73},[49,68531,77],{"class":66},[49,68533,875],{"class":73},[49,68535,110],{"class":109},[49,68537,83],{"class":66},[49,68539,68540,68542,68544,68546,68548,68550,68552],{"class":51,"line":2934},[49,68541,63215],{"class":73},[49,68543,77],{"class":66},[49,68545,159],{"class":73},[49,68547,110],{"class":109},[49,68549,113],{"class":73},[49,68551,63481],{"class":73},[49,68553,83],{"class":66},[49,68555,68556],{"class":51,"line":2948},[49,68557,3441],{"class":66},[49,68559,68560],{"class":51,"line":2953},[49,68561,3654],{"emptyLinePlaceholder":1330},[49,68563,68564,68566],{"class":51,"line":2982},[49,68565,64981],{"class":62},[49,68567,67],{"class":66},[49,68569,68570,68572,68574,68576,68578],{"class":51,"line":2987},[49,68571,56010],{"class":73},[49,68573,77],{"class":66},[49,68575,1703],{"class":73},[49,68577,1720],{"class":109},[49,68579,83],{"class":66},[49,68581,68582,68584,68586,68588,68590],{"class":51,"line":3004},[49,68583,56024],{"class":73},[49,68585,77],{"class":66},[49,68587,2297],{"class":73},[49,68589,110],{"class":109},[49,68591,83],{"class":66},[49,68593,68594,68596,68598,68600,68602],{"class":51,"line":3009},[49,68595,58598],{"class":73},[49,68597,77],{"class":66},[49,68599,2297],{"class":73},[49,68601,110],{"class":109},[49,68603,83],{"class":66},[49,68605,68606,68608,68610,68612],{"class":51,"line":3014},[49,68607,56248],{"class":73},[49,68609,77],{"class":66},[49,68611,52723],{"class":73},[49,68613,83],{"class":66},[49,68615,68616,68618,68620,68622],{"class":51,"line":3019},[49,68617,56259],{"class":73},[49,68619,77],{"class":66},[49,68621,52910],{"class":73},[49,68623,83],{"class":66},[49,68625,68626],{"class":51,"line":3033},[49,68627,3441],{"class":66},[49,68629,68630],{"class":51,"line":3038},[49,68631,3654],{"emptyLinePlaceholder":1330},[49,68633,68634,68636,68638],{"class":51,"line":3831},[49,68635,64981],{"class":62},[49,68637,65054],{"class":147},[49,68639,67],{"class":66},[49,68641,68642,68644,68646,68648,68650],{"class":51,"line":3845},[49,68643,56161],{"class":73},[49,68645,77],{"class":66},[49,68647,2190],{"class":73},[49,68649,110],{"class":109},[49,68651,83],{"class":66},[49,68653,68654,68656,68658,68660],{"class":51,"line":3853},[49,68655,63571],{"class":73},[49,68657,77],{"class":66},[49,68659,65077],{"class":73},[49,68661,83],{"class":66},[49,68663,68664,68666,68668,68670,68672],{"class":51,"line":3858},[49,68665,63238],{"class":73},[49,68667,77],{"class":66},[49,68669,875],{"class":73},[49,68671,110],{"class":109},[49,68673,83],{"class":66},[49,68675,68676],{"class":51,"line":3864},[49,68677,3441],{"class":66},[49,68679,68680],{"class":51,"line":3870},[49,68681,3654],{"emptyLinePlaceholder":1330},[49,68683,68684,68686,68688],{"class":51,"line":3875},[49,68685,64981],{"class":62},[49,68687,62530],{"class":147},[49,68689,67],{"class":66},[49,68691,68692,68694,68696,68698],{"class":51,"line":9200},[49,68693,55973],{"class":73},[49,68695,77],{"class":66},[49,68697,460],{"class":73},[49,68699,83],{"class":66},[49,68701,68702,68704,68706,68708],{"class":51,"line":9224},[49,68703,56248],{"class":73},[49,68705,77],{"class":66},[49,68707,52723],{"class":73},[49,68709,83],{"class":66},[49,68711,68712,68714,68716,68718],{"class":51,"line":9229},[49,68713,56259],{"class":73},[49,68715,77],{"class":66},[49,68717,52823],{"class":73},[49,68719,83],{"class":66},[49,68721,68722],{"class":51,"line":9235},[49,68723,3441],{"class":66},[49,68725,68726],{"class":51,"line":9262},[49,68727,3654],{"emptyLinePlaceholder":1330},[49,68729,68730,68732,68734,68736],{"class":51,"line":9267},[49,68731,64981],{"class":62},[49,68733,62530],{"class":147},[49,68735,56314],{"class":147},[49,68737,67],{"class":66},[49,68739,68740,68742,68744,68746,68748,68750],{"class":51,"line":9273},[49,68741,55947],{"class":73},[49,68743,77],{"class":66},[49,68745,80],{"class":73},[49,68747,10202],{"class":73},[49,68749,110],{"class":109},[49,68751,83],{"class":66},[49,68753,68754,68756,68758,68760,68762],{"class":51,"line":9285},[49,68755,56161],{"class":73},[49,68757,77],{"class":66},[49,68759,1940],{"class":73},[49,68761,110],{"class":109},[49,68763,83],{"class":66},[49,68765,68766],{"class":51,"line":9297},[49,68767,3441],{"class":66},[49,68769,68770],{"class":51,"line":9309},[49,68771,3654],{"emptyLinePlaceholder":1330},[49,68773,68774,68776,68778,68780,68782],{"class":51,"line":10968},[49,68775,64981],{"class":62},[49,68777,62530],{"class":147},[49,68779,56314],{"class":147},[49,68781,2655],{"class":147},[49,68783,67],{"class":66},[49,68785,68786,68788,68790,68792],{"class":51,"line":10993},[49,68787,65206],{"class":73},[49,68789,77],{"class":66},[49,68791,460],{"class":73},[49,68793,83],{"class":66},[49,68795,68796,68798,68800,68802,68804,68806,68808],{"class":51,"line":11016},[49,68797,63469],{"class":73},[49,68799,77],{"class":66},[49,68801,1478],{"class":73},[49,68803,110],{"class":109},[49,68805,113],{"class":73},[49,68807,116],{"class":73},[49,68809,83],{"class":66},[49,68811,68812,68814,68816,68818],{"class":51,"line":11040},[49,68813,58655],{"class":73},[49,68815,77],{"class":66},[49,68817,129],{"class":73},[49,68819,83],{"class":66},[49,68821,68822],{"class":51,"line":11045},[49,68823,3441],{"class":66},[49,68825,68826],{"class":51,"line":11050},[49,68827,3654],{"emptyLinePlaceholder":1330},[49,68829,68830,68832,68834,68836,68838,68840],{"class":51,"line":11055},[49,68831,64981],{"class":62},[49,68833,62530],{"class":147},[49,68835,56314],{"class":147},[49,68837,2655],{"class":147},[49,68839,65259],{"class":62},[49,68841,67],{"class":66},[49,68843,68844,68846,68848,68850],{"class":51,"line":11064},[49,68845,63029],{"class":73},[49,68847,77],{"class":66},[49,68849,65270],{"class":73},[49,68851,83],{"class":66},[49,68853,68854,68856,68858,68860],{"class":51,"line":11069},[49,68855,58655],{"class":73},[49,68857,77],{"class":66},[49,68859,65270],{"class":73},[49,68861,83],{"class":66},[49,68863,68864],{"class":51,"line":11075},[49,68865,3441],{"class":66},[49,68867,68868],{"class":51,"line":11096},[49,68869,3654],{"emptyLinePlaceholder":1330},[49,68871,68872,68874],{"class":51,"line":11102},[49,68873,65295],{"class":62},[49,68875,67],{"class":66},[49,68877,68878,68880,68882,68884,68886,68888],{"class":51,"line":11116},[49,68879,55936],{"class":73},[49,68881,77],{"class":66},[49,68883,80],{"class":73},[49,68885,65308],{"class":73},[49,68887,110],{"class":109},[49,68889,83],{"class":66},[49,68891,68892],{"class":51,"line":11122},[49,68893,3441],{"class":66},[49,68895,68896],{"class":51,"line":11149},[49,68897,3654],{"emptyLinePlaceholder":1330},[49,68899,68900,68902,68904],{"class":51,"line":11158},[49,68901,65295],{"class":62},[49,68903,63411],{"class":62},[49,68905,67],{"class":66},[49,68907,68908,68910,68912,68914],{"class":51,"line":11164},[49,68909,56248],{"class":73},[49,68911,77],{"class":66},[49,68913,460],{"class":73},[49,68915,83],{"class":66},[49,68917,68918],{"class":51,"line":11172},[49,68919,3441],{"class":66},[49,68921,68922],{"class":51,"line":11177},[49,68923,3654],{"emptyLinePlaceholder":1330},[49,68925,68926,68928,68931],{"class":51,"line":17854},[49,68927,65295],{"class":62},[49,68929,68930],{"class":62}," .active",[49,68932,67],{"class":66},[49,68934,68935,68937,68939,68941],{"class":51,"line":17860},[49,68936,56248],{"class":73},[49,68938,77],{"class":66},[49,68940,674],{"class":73},[49,68942,83],{"class":66},[49,68944,68945],{"class":51,"line":17883},[49,68946,3441],{"class":66},[49,68948,68949,68951,68953],{"class":51,"line":17889},[49,68950,53659],{"class":66},[49,68952,1305],{"class":147},[49,68954,52554],{"class":66},[49,68956,68957,68959,68961],{"class":51,"line":17912},[49,68958,53027],{"class":66},[49,68960,52581],{"class":147},[49,68962,52554],{"class":66},[49,68964,68965],{"class":51,"line":17926},[49,68966,3654],{"emptyLinePlaceholder":1330},[49,68968,68969,68971,68973],{"class":51,"line":17946},[49,68970,2300],{"class":66},[49,68972,53042],{"class":147},[49,68974,52554],{"class":66},[49,68976,68977,68979,68981,68983,68985,68987],{"class":51,"line":17952},[49,68978,53386],{"class":66},[49,68980,148],{"class":147},[49,68982,54728],{"class":62},[49,68984,1448],{"class":66},[49,68986,65410],{"class":1505},[49,68988,52554],{"class":66},[49,68990,68991,68993,68995,68997,68999,69001],{"class":51,"line":17963},[49,68992,52588],{"class":66},[49,68994,148],{"class":147},[49,68996,54728],{"class":62},[49,68998,1448],{"class":66},[49,69000,65425],{"class":1505},[49,69002,52554],{"class":66},[49,69004,69005,69007,69009,69011,69013],{"class":51,"line":17986},[49,69006,56473],{"class":66},[49,69008,183],{"class":147},[49,69010,65436],{"class":66},[49,69012,183],{"class":147},[49,69014,52554],{"class":66},[49,69016,69017,69019,69021],{"class":51,"line":18008},[49,69018,56473],{"class":66},[49,69020,23],{"class":147},[49,69022,52554],{"class":66},[49,69024,69025,69027,69029,69031,69033,69035,69037,69039,69041,69043,69045,69047,69049,69052,69054,69056,69058,69060],{"class":51,"line":18013},[49,69026,56541],{"class":66},[49,69028,26],{"class":147},[49,69030,62290],{"class":66},[49,69032,1630],{"class":147},[49,69034,54728],{"class":62},[49,69036,1448],{"class":66},[49,69038,60945],{"class":1505},[49,69040,62295],{"class":62},[49,69042,1448],{"class":66},[49,69044,65471],{"class":1505},[49,69046,55192],{"class":62},[49,69048,1448],{"class":66},[49,69050,69051],{"class":1505},"\"0\"",[49,69053,65474],{"class":66},[49,69055,1630],{"class":147},[49,69057,56553],{"class":66},[49,69059,26],{"class":147},[49,69061,52554],{"class":66},[49,69063,69064,69066,69068,69070,69072,69074,69076,69078,69080,69082,69084,69086,69088,69090,69092],{"class":51,"line":18019},[49,69065,56541],{"class":66},[49,69067,26],{"class":147},[49,69069,62290],{"class":66},[49,69071,1630],{"class":147},[49,69073,62295],{"class":62},[49,69075,1448],{"class":66},[49,69077,65471],{"class":1505},[49,69079,55192],{"class":62},[49,69081,1448],{"class":66},[49,69083,4932],{"class":1505},[49,69085,65501],{"class":66},[49,69087,1630],{"class":147},[49,69089,56553],{"class":66},[49,69091,26],{"class":147},[49,69093,52554],{"class":66},[49,69095,69096,69098,69100,69102,69104,69106,69108,69110,69112,69114,69116,69118,69120,69122,69124],{"class":51,"line":18033},[49,69097,56541],{"class":66},[49,69099,26],{"class":147},[49,69101,62290],{"class":66},[49,69103,1630],{"class":147},[49,69105,62295],{"class":62},[49,69107,1448],{"class":66},[49,69109,65471],{"class":1505},[49,69111,55192],{"class":62},[49,69113,1448],{"class":66},[49,69115,4955],{"class":1505},[49,69117,65528],{"class":66},[49,69119,1630],{"class":147},[49,69121,56553],{"class":66},[49,69123,26],{"class":147},[49,69125,52554],{"class":66},[49,69127,69128,69130,69132,69134,69136,69138,69140,69142,69144,69146,69148,69150,69152,69154,69156],{"class":51,"line":18046},[49,69129,56541],{"class":66},[49,69131,26],{"class":147},[49,69133,62290],{"class":66},[49,69135,1630],{"class":147},[49,69137,62295],{"class":62},[49,69139,1448],{"class":66},[49,69141,65471],{"class":1505},[49,69143,55192],{"class":62},[49,69145,1448],{"class":66},[49,69147,4968],{"class":1505},[49,69149,65555],{"class":66},[49,69151,1630],{"class":147},[49,69153,56553],{"class":66},[49,69155,26],{"class":147},[49,69157,52554],{"class":66},[49,69159,69160,69162,69164,69166,69168,69170,69172,69174,69176,69178,69180,69182,69184,69186,69188],{"class":51,"line":18051},[49,69161,56541],{"class":66},[49,69163,26],{"class":147},[49,69165,62290],{"class":66},[49,69167,1630],{"class":147},[49,69169,62295],{"class":62},[49,69171,1448],{"class":66},[49,69173,65471],{"class":1505},[49,69175,55192],{"class":62},[49,69177,1448],{"class":66},[49,69179,4981],{"class":1505},[49,69181,65582],{"class":66},[49,69183,1630],{"class":147},[49,69185,56553],{"class":66},[49,69187,26],{"class":147},[49,69189,52554],{"class":66},[49,69191,69192,69194,69196],{"class":51,"line":18065},[49,69193,56646],{"class":66},[49,69195,23],{"class":147},[49,69197,52554],{"class":66},[49,69199,69200,69202,69204],{"class":51,"line":18070},[49,69201,53018],{"class":66},[49,69203,148],{"class":147},[49,69205,52554],{"class":66},[49,69207,69208,69210,69212,69214,69216,69218],{"class":51,"line":18076},[49,69209,52588],{"class":66},[49,69211,148],{"class":147},[49,69213,54728],{"class":62},[49,69215,1448],{"class":66},[49,69217,65619],{"class":1505},[49,69219,52554],{"class":66},[49,69221,69222,69224,69226,69228,69230,69232,69234,69236,69238,69240,69242,69244,69246,69248,69250,69252],{"class":51,"line":18081},[49,69223,56473],{"class":66},[49,69225,148],{"class":147},[49,69227,54728],{"class":62},[49,69229,1448],{"class":66},[49,69231,65634],{"class":1505},[49,69233,62290],{"class":66},[49,69235,174],{"class":147},[49,69237,56478],{"class":62},[49,69239,1448],{"class":66},[49,69241,65645],{"class":1505},[49,69243,56486],{"class":62},[49,69245,1448],{"class":66},[49,69247,8904],{"class":1505},[49,69249,65654],{"class":66},[49,69251,148],{"class":147},[49,69253,52554],{"class":66},[49,69255,69256,69258,69260,69262,69264,69266,69268,69270,69272,69274,69276,69278,69280,69282,69284,69286],{"class":51,"line":18095},[49,69257,56473],{"class":66},[49,69259,148],{"class":147},[49,69261,54728],{"class":62},[49,69263,1448],{"class":66},[49,69265,63859],{"class":1505},[49,69267,62290],{"class":66},[49,69269,174],{"class":147},[49,69271,56478],{"class":62},[49,69273,1448],{"class":66},[49,69275,65681],{"class":1505},[49,69277,56486],{"class":62},[49,69279,1448],{"class":66},[49,69281,8904],{"class":1505},[49,69283,65654],{"class":66},[49,69285,148],{"class":147},[49,69287,52554],{"class":66},[49,69289,69290,69292,69294,69296,69298,69300,69302,69304,69306,69308,69310,69312,69314,69316,69318,69320],{"class":51,"line":18100},[49,69291,56473],{"class":66},[49,69293,148],{"class":147},[49,69295,54728],{"class":62},[49,69297,1448],{"class":66},[49,69299,63859],{"class":1505},[49,69301,62290],{"class":66},[49,69303,174],{"class":147},[49,69305,56478],{"class":62},[49,69307,1448],{"class":66},[49,69309,65716],{"class":1505},[49,69311,56486],{"class":62},[49,69313,1448],{"class":66},[49,69315,8904],{"class":1505},[49,69317,65654],{"class":66},[49,69319,148],{"class":147},[49,69321,52554],{"class":66},[49,69323,69324,69326,69328,69330,69332,69334,69336,69338,69340,69342,69344,69346,69348,69350,69352,69354],{"class":51,"line":18105},[49,69325,56473],{"class":66},[49,69327,148],{"class":147},[49,69329,54728],{"class":62},[49,69331,1448],{"class":66},[49,69333,63859],{"class":1505},[49,69335,62290],{"class":66},[49,69337,174],{"class":147},[49,69339,56478],{"class":62},[49,69341,1448],{"class":66},[49,69343,65751],{"class":1505},[49,69345,56486],{"class":62},[49,69347,1448],{"class":66},[49,69349,8904],{"class":1505},[49,69351,65654],{"class":66},[49,69353,148],{"class":147},[49,69355,52554],{"class":66},[49,69357,69358,69360,69362,69364,69366,69368,69370,69372,69374,69376,69378,69380,69382,69384,69386,69388],{"class":51,"line":18119},[49,69359,56473],{"class":66},[49,69361,148],{"class":147},[49,69363,54728],{"class":62},[49,69365,1448],{"class":66},[49,69367,63859],{"class":1505},[49,69369,62290],{"class":66},[49,69371,174],{"class":147},[49,69373,56478],{"class":62},[49,69375,1448],{"class":66},[49,69377,65786],{"class":1505},[49,69379,56486],{"class":62},[49,69381,1448],{"class":66},[49,69383,8904],{"class":1505},[49,69385,65654],{"class":66},[49,69387,148],{"class":147},[49,69389,52554],{"class":66},[49,69391,69392,69394,69396],{"class":51,"line":18131},[49,69393,53018],{"class":66},[49,69395,148],{"class":147},[49,69397,52554],{"class":66},[49,69399,69400,69402,69404],{"class":51,"line":18136},[49,69401,53659],{"class":66},[49,69403,148],{"class":147},[49,69405,52554],{"class":66},[49,69407,69408,69410,69412],{"class":51,"line":18149},[49,69409,53386],{"class":66},[49,69411,53055],{"class":147},[49,69413,52554],{"class":66},[49,69415,69416],{"class":51,"line":18154},[49,69417,69418],{"class":55},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[49,69420,69421],{"class":51,"line":18159},[49,69422,69423],{"class":55},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[49,69425,69426,69428,69430,69432,69434,69436,69438,69441],{"class":51,"line":18164},[49,69427,12473],{"class":109},[49,69429,62530],{"class":73},[49,69431,14816],{"class":109},[49,69433,55637],{"class":66},[49,69435,55640],{"class":62},[49,69437,1403],{"class":66},[49,69439,69440],{"class":1505},"'.tab-nav ul'",[49,69442,1409],{"class":66},[49,69444,69445],{"class":51,"line":18177},[49,69446,69447],{"class":55},"    \u002F\u002F 2.添加事件\n",[49,69449,69450,69452,69454,69456,69458,69460,69462,69464,69466],{"class":51,"line":18182},[49,69451,68189],{"class":66},[49,69453,59052],{"class":62},[49,69455,1403],{"class":66},[49,69457,59057],{"class":1505},[49,69459,13687],{"class":66},[49,69461,55690],{"class":109},[49,69463,2913],{"class":66},[49,69465,1475],{"class":6468},[49,69467,13694],{"class":66},[49,69469,69470,69472,69474],{"class":51,"line":33881},[49,69471,59483],{"class":66},[49,69473,68245],{"class":62},[49,69475,68248],{"class":66},[49,69477,69478],{"class":51,"line":33887},[49,69479,69480],{"class":55},"      \u002F\u002Fe.targer是我们点击的对象\n",[49,69482,69483,69485,69487,69489,69492],{"class":51,"line":33893},[49,69484,55721],{"class":109},[49,69486,68269],{"class":66},[49,69488,55727],{"class":109},[49,69490,69491],{"class":1505}," 'A'",[49,69493,13694],{"class":66},[49,69495,69496,69498,69500,69502,69505,69507,69509,69511,69513],{"class":51,"line":33899},[49,69497,53167],{"class":66},[49,69499,55640],{"class":62},[49,69501,1403],{"class":66},[49,69503,69504],{"class":1505},"'.active'",[49,69506,58242],{"class":66},[49,69508,58245],{"class":62},[49,69510,1403],{"class":66},[49,69512,65949],{"class":1505},[49,69514,1409],{"class":66},[49,69516,69517,69520,69522,69524,69526],{"class":51,"line":33905},[49,69518,69519],{"class":66},"        e.target.classList.",[49,69521,6586],{"class":62},[49,69523,1403],{"class":66},[49,69525,65949],{"class":1505},[49,69527,1409],{"class":66},[49,69529,69530],{"class":51,"line":33916},[49,69531,3654],{"emptyLinePlaceholder":1330},[49,69533,69534],{"class":51,"line":33922},[49,69535,69536],{"class":55},"        \u002F\u002F 下面大盒子模块\n",[49,69538,69539],{"class":51,"line":33942},[49,69540,69541],{"class":55},"        \u002F\u002F console.log(e.target.dataset.id)\n",[49,69543,69544,69546,69548,69550,69552],{"class":51,"line":33948},[49,69545,62508],{"class":109},[49,69547,4286],{"class":73},[49,69549,14816],{"class":109},[49,69551,46814],{"class":109},[49,69553,69554],{"class":66},"e.target.dataset.id\n",[49,69556,69557,69559,69561,69563,69565,69567,69569,69571,69573],{"class":51,"line":33959},[49,69558,53167],{"class":66},[49,69560,55640],{"class":62},[49,69562,1403],{"class":66},[49,69564,65997],{"class":1505},[49,69566,58242],{"class":66},[49,69568,58245],{"class":62},[49,69570,1403],{"class":66},[49,69572,65949],{"class":1505},[49,69574,1409],{"class":66},[49,69576,69577,69579,69581,69583,69585,69587,69589,69591,69593,69595,69597,69599,69601],{"class":51,"line":33965},[49,69578,53167],{"class":66},[49,69580,55640],{"class":62},[49,69582,1403],{"class":66},[49,69584,66023],{"class":1505},[49,69586,1833],{"class":66},[49,69588,46814],{"class":109},[49,69590,26367],{"class":73},[49,69592,58271],{"class":1505},[49,69594,58242],{"class":66},[49,69596,6586],{"class":62},[49,69598,1403],{"class":66},[49,69600,65949],{"class":1505},[49,69602,1409],{"class":66},[49,69604,69605],{"class":51,"line":33971},[49,69606,3654],{"emptyLinePlaceholder":1330},[49,69608,69609],{"class":51,"line":33977},[49,69610,53640],{"class":66},[49,69612,69613],{"class":51,"line":33983},[49,69614,34709],{"class":66},[49,69616,69617,69619,69621],{"class":51,"line":33989},[49,69618,53659],{"class":66},[49,69620,53055],{"class":147},[49,69622,52554],{"class":66},[49,69624,69625,69627,69629],{"class":51,"line":33995},[49,69626,53027],{"class":66},[49,69628,53042],{"class":147},[49,69630,52554],{"class":66},[49,69632,69633],{"class":51,"line":34001},[49,69634,3654],{"emptyLinePlaceholder":1330},[49,69636,69637,69639,69641],{"class":51,"line":34021},[49,69638,53027],{"class":66},[49,69640,51883],{"class":147},[49,69642,52554],{"class":66},[183,69644,69646],{"id":69645},"_333-页面加载事件","3.3.3 页面加载事件",[591,69648,69649],{},[26,69650,69651],{},"load",[19,69653,69654],{},[174,69655],{"alt":44,"src":69656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,69658,69659],{},"window代表整个窗口，比document还要大",[19,69661,69662],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,69664,69665],{},"img.addEventListener('load', function () {",[19,69667,69668],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,69670,53706],{},[591,69672,69673],{"start":59},[26,69674,69675],{},"DOMContentLoaded",[19,69677,69678],{},[174,69679],{"alt":44,"src":69680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,69682,69683],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[183,69685,69687],{"id":69686},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,69689,69690],{},[174,69691],{"alt":44,"src":69692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,69694,69695],{},[174,69696],{"alt":44,"src":69697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,69699,69700],{},[174,69701],{"alt":44,"src":69702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,69704,69705],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,69707,69708],{},"获得的是数字型数据，不带单位",[19,69710,69711],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,69713,69714],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,69716,69717],{},"它是通过document.documentElement来获取",[19,69719,69720],{},[174,69721],{"alt":44,"src":69722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,69724,69725],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[183,69727,69729],{"id":69728},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,69731,69732],{},[174,69733],{"alt":44,"src":69734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,69736,69737],{},[174,69738],{"alt":44,"src":69739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[183,69741,69743],{"id":69742},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,69745,69746],{},[174,69747],{"alt":44,"src":69748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,69750,69751],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,69753,69754],{},[174,69755],{"alt":44,"src":69756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69758,69759],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69761,69762],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69764,69765],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69767,69768],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69770,69771],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69773,69774],{},[174,69775],{"alt":44,"src":69776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69778,69779],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69781,69782],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69784,69785],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69787,69788],{},"e.pageX-box.getBoundingClientRect()",[183,69790,69792],{"id":69791},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69794,69795],{},[174,69796],{"alt":44,"src":69797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69799,69800],{},"这个是相对于视口来说的，它是个方法，不是属性值",[183,69802,69804],{"id":69803},"_338-总结","3.3.8 总结",[19,69806,69807],{},[174,69808],{"alt":44,"src":69809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69811,69812],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69814,69815],{},"修改盒子的宽高只能通过width和height来实现",[183,69817,69819],{"id":69818},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[39,69821,69823],{"className":51881,"code":69822,"language":51883,"meta":44,"style":44},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[46,69824,69825,69830,69835,69840,69845],{"__ignoreMap":44},[49,69826,69827],{"class":51,"line":52},[49,69828,69829],{"class":66},"\u002F* 页面滑动 *\u002F\n",[49,69831,69832],{"class":51,"line":59},[49,69833,69834],{"class":66},"html {\n",[49,69836,69837],{"class":51,"line":70},[49,69838,69839],{"class":66},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[49,69841,69842],{"class":51,"line":86},[49,69843,69844],{"class":66},"  scroll-behavior: smooth;\n",[49,69846,69847],{"class":51,"line":98},[49,69848,137],{"class":66},[19,69850,69851],{},"默认是auto",[183,69853,69855],{"id":69854},"_3310-日期对象","3.3.10 日期对象",[525,69857,69859],{"id":69858},"_33101-实例化","3.3.10.1 实例化",[19,69861,69862],{},[174,69863],{"alt":44,"src":69864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[525,69866,69868],{"id":69867},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69870,69871],{},[174,69872],{"alt":44,"src":69873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69875,69876],{},"月份+1",[19,69878,69879],{},"老外认为第一天为0，星期天",[19,69881,69882],{},"方法使用的时候必须要跟括号",[19,69884,69885],{},"快速获得日期",[19,69887,69888],{},"\u002F\u002F 得到年月日",[19,69890,69891],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69893,69894],{},"\u002F\u002F 得到当地日期",[19,69896,69897],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69899,69900],{},"\u002F\u002F 得到当地时间",[19,69902,69903],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,69905,69906],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,69908,69909],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53055,69911,69912],{},"\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,69914,69915],{},"学会去封装函数！",[525,69917,69919],{"id":69918},"_33103-时间戳","3.3.10.3 时间戳",[19,69921,69922],{},[174,69923],{"alt":44,"src":69924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,69926,69927],{},[174,69928],{"alt":44,"src":69929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,69931,69932],{},"三种方法记住一个就可以",[183,69934,69936],{"id":69935},"_3311-节点操作","3.3.11 节点操作",[525,69938,69940],{"id":69939},"_33111-dom节点","3.3.11.1 DOM节点",[19,69942,69943],{},[174,69944],{"alt":44,"src":69945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,69947,69948],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[525,69950,69952],{"id":69951},"_33112-查找节点","3.3.11.2 查找节点",[19,69954,69955],{},"前边的document.querySelector()是获取的元素",[19,69957,69958],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,69960,69961],{},[174,69962],{"alt":44,"src":69963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[591,69965,69966],{},[26,69967,69968],{},"父节点",[19,69970,69971],{},[174,69972],{"alt":44,"src":69973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[591,69975,69976],{"start":59},[26,69977,69978],{},"子节点",[19,69980,69981],{},[174,69982],{"alt":44,"src":69983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69985,69986],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69988,69989],{},"children获得的是伪数组，是亲儿子",[591,69991,69992],{"start":70},[26,69993,69994],{},"兄弟节点",[19,69996,69997],{},[174,69998],{"alt":44,"src":69999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[525,70001,70003],{"id":70002},"_33113-增加节点","3.3.11.3 增加节点",[19,70005,70006],{},[174,70007],{"alt":44,"src":70008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70010,70011],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70013,70014],{},[174,70015],{"alt":44,"src":70016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70018,70019],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70021,70022],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70024,70025],{},"例：",[53055,70027,70028],{},"\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,70030,70031],{},[174,70032],{"alt":44,"src":70033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70035,70036],{},"false只克隆标签，里边的内容不会克隆过来",[39,70038,70040],{"className":51881,"code":70039,"language":51883,"meta":44,"style":44},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[46,70041,70042],{"__ignoreMap":44},[49,70043,70044],{"class":51,"line":52},[49,70045,70039],{"class":66},[525,70047,70049],{"id":70048},"_33114-删除节点","3.3.11.4 删除节点",[19,70051,70052],{},[174,70053],{"alt":44,"src":70054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70056,70057],{},"父亲删儿子",[19,70059,70060],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[183,70062,70064],{"id":70063},"_3312-m端事件","3.3.12 M端事件",[19,70066,70067],{},"M端就是移动端",[19,70069,70070],{},[174,70071],{"alt":44,"src":70072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[183,70074,70076],{"id":70075},"_3313-插件","3.3.13 插件",[19,70078,70079],{},"要熟悉官网！！！",[19,70081,70082],{},[1630,70083,70084],{"href":70084,"rel":70085},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25113],[19,70087,70088],{},[1630,70089,70090],{"href":70090,"rel":70091},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25113],[183,70093,70095],{"id":70094},"_3314-学生信息表","3.3.14 学生信息表",[591,70097,70098,70101,70104,70107,70110,70113,70116,70119],{},[26,70099,70100],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[26,70102,70103],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[26,70105,70106],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[26,70108,70109],{},"用好表单元素自带的属性，value,name等",[26,70111,70112],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[26,70114,70115],{},"不要忘记事件对象",[26,70117,70118],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[26,70120,70121],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70123,70124],{},"结构：",[39,70126,70128],{"className":51881,"code":70127,"language":51883,"meta":44,"style":44},"\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",[46,70129,70130,70140,70154,70158,70166,70180,70200,70221,70234,70258,70266,70270,70278,70291,70312,70340,70368,70373,70395,70415,70434,70442,70470,70492,70512,70532,70552,70572,70592,70600,70620,70628,70632,70645,70653,70661,70669,70682,70695,70708,70721,70734,70747,70760,70768,70776,70784,70789,70794,70799,70804,70809,70814,70819,70824,70829,70834,70839,70844,70849,70857,70865,70873,70877,70897,70916,70936,70956,70976,70996,71000,71005,71025,71030,71040,71045,71050,71070,71092,71097,71107,71111,71115,71120,71125,71154,71168,71183,71187,71191,71195,71200,71211,71224,71229,71234,71239,71244,71249,71253,71258,71263,71272,71277,71282,71294,71299,71306,71310,71315,71325,71330,71340,71345,71373,71394,71404,71424,71442,71459,71476,71493,71510,71514,71524,71529,71534,71539,71550,71554,71558,71562,71567,71572,71593,71605,71610,71615,71620,71634,71639,71646,71650,71654,71662,71666,71674,71678],{"__ignoreMap":44},[49,70131,70132,70134,70136,70138],{"class":51,"line":52},[49,70133,52545],{"class":66},[49,70135,52548],{"class":147},[49,70137,52551],{"class":62},[49,70139,52554],{"class":66},[49,70141,70142,70144,70146,70148,70150,70152],{"class":51,"line":59},[49,70143,2300],{"class":66},[49,70145,51883],{"class":147},[49,70147,52563],{"class":62},[49,70149,1448],{"class":66},[49,70151,52568],{"class":1505},[49,70153,52554],{"class":66},[49,70155,70156],{"class":51,"line":70},[49,70157,3654],{"emptyLinePlaceholder":1330},[49,70159,70160,70162,70164],{"class":51,"line":86},[49,70161,2300],{"class":66},[49,70163,52581],{"class":147},[49,70165,52554],{"class":66},[49,70167,70168,70170,70172,70174,70176,70178],{"class":51,"line":98},[49,70169,53386],{"class":66},[49,70171,52591],{"class":147},[49,70173,52594],{"class":62},[49,70175,1448],{"class":66},[49,70177,52599],{"class":1505},[49,70179,60366],{"class":66},[49,70181,70182,70184,70186,70188,70190,70192,70194,70196,70198],{"class":51,"line":121},[49,70183,53386],{"class":66},[49,70185,52591],{"class":147},[49,70187,16171],{"class":62},[49,70189,1448],{"class":66},[49,70191,52638],{"class":1505},[49,70193,52618],{"class":62},[49,70195,1448],{"class":66},[49,70197,52645],{"class":1505},[49,70199,60366],{"class":66},[49,70201,70202,70204,70206,70208,70210,70212,70214,70216,70219],{"class":51,"line":134},[49,70203,53386],{"class":66},[49,70205,52591],{"class":147},[49,70207,52610],{"class":62},[49,70209,1448],{"class":66},[49,70211,52615],{"class":1505},[49,70213,52618],{"class":62},[49,70215,1448],{"class":66},[49,70217,70218],{"class":1505},"\"ie=edge\"",[49,70220,60366],{"class":66},[49,70222,70223,70225,70227,70230,70232],{"class":51,"line":1085},[49,70224,53386],{"class":66},[49,70226,52654],{"class":147},[49,70228,70229],{"class":66},">学生信息管理\u003C\u002F",[49,70231,52654],{"class":147},[49,70233,52554],{"class":66},[49,70235,70236,70238,70241,70244,70246,70249,70251,70253,70256],{"class":51,"line":2574},[49,70237,53386],{"class":66},[49,70239,70240],{"class":147},"link",[49,70242,70243],{"class":62}," rel",[49,70245,1448],{"class":66},[49,70247,70248],{"class":1505},"\"stylesheet\"",[49,70250,62295],{"class":62},[49,70252,1448],{"class":66},[49,70254,70255],{"class":1505},"\"css\u002Findex.css\"",[49,70257,60366],{"class":66},[49,70259,70260,70262,70264],{"class":51,"line":2586},[49,70261,53027],{"class":66},[49,70263,52581],{"class":147},[49,70265,52554],{"class":66},[49,70267,70268],{"class":51,"line":2867},[49,70269,3654],{"emptyLinePlaceholder":1330},[49,70271,70272,70274,70276],{"class":51,"line":2872},[49,70273,2300],{"class":66},[49,70275,53042],{"class":147},[49,70277,52554],{"class":66},[49,70279,70280,70282,70284,70287,70289],{"class":51,"line":2878},[49,70281,53386],{"class":66},[49,70283,10],{"class":147},[49,70285,70286],{"class":66},">新增学员\u003C\u002F",[49,70288,10],{"class":147},[49,70290,52554],{"class":66},[49,70292,70293,70295,70297,70299,70301,70303,70306,70308,70310],{"class":51,"line":2883},[49,70294,53386],{"class":66},[49,70296,67860],{"class":147},[49,70298,54728],{"class":62},[49,70300,1448],{"class":66},[49,70302,63900],{"class":1505},[49,70304,70305],{"class":62}," autocomplete",[49,70307,1448],{"class":66},[49,70309,33024],{"class":1505},[49,70311,52554],{"class":66},[49,70313,70314,70317,70319,70321,70323,70325,70327,70329,70332,70334,70336,70338],{"class":51,"line":2897},[49,70315,70316],{"class":66},"    姓名：\u003C",[49,70318,448],{"class":147},[49,70320,55065],{"class":62},[49,70322,1448],{"class":66},[49,70324,63935],{"class":1505},[49,70326,54728],{"class":62},[49,70328,1448],{"class":66},[49,70330,70331],{"class":1505},"\"uname\"",[49,70333,16171],{"class":62},[49,70335,1448],{"class":66},[49,70337,70331],{"class":1505},[49,70339,60366],{"class":66},[49,70341,70342,70345,70347,70349,70351,70353,70355,70357,70360,70362,70364,70366],{"class":51,"line":2902},[49,70343,70344],{"class":66},"    年龄：\u003C",[49,70346,448],{"class":147},[49,70348,55065],{"class":62},[49,70350,1448],{"class":66},[49,70352,63935],{"class":1505},[49,70354,54728],{"class":62},[49,70356,1448],{"class":66},[49,70358,70359],{"class":1505},"\"age\"",[49,70361,16171],{"class":62},[49,70363,1448],{"class":66},[49,70365,70359],{"class":1505},[49,70367,60366],{"class":66},[49,70369,70370],{"class":51,"line":2908},[49,70371,70372],{"class":66},"    性别:\n",[49,70374,70375,70377,70380,70382,70384,70387,70389,70391,70393],{"class":51,"line":2929},[49,70376,52588],{"class":66},[49,70378,70379],{"class":147},"select",[49,70381,16171],{"class":62},[49,70383,1448],{"class":66},[49,70385,70386],{"class":1505},"\"gender\"",[49,70388,54728],{"class":62},[49,70390,1448],{"class":66},[49,70392,70386],{"class":1505},[49,70394,52554],{"class":66},[49,70396,70397,70399,70402,70404,70406,70408,70411,70413],{"class":51,"line":2934},[49,70398,56473],{"class":66},[49,70400,70401],{"class":147},"option",[49,70403,67886],{"class":62},[49,70405,1448],{"class":66},[49,70407,11213],{"class":1505},[49,70409,70410],{"class":66},">男\u003C\u002F",[49,70412,70401],{"class":147},[49,70414,52554],{"class":66},[49,70416,70417,70419,70421,70423,70425,70427,70430,70432],{"class":51,"line":2948},[49,70418,56473],{"class":66},[49,70420,70401],{"class":147},[49,70422,67886],{"class":62},[49,70424,1448],{"class":66},[49,70426,11282],{"class":1505},[49,70428,70429],{"class":66},">女\u003C\u002F",[49,70431,70401],{"class":147},[49,70433,52554],{"class":66},[49,70435,70436,70438,70440],{"class":51,"line":2953},[49,70437,53018],{"class":66},[49,70439,70379],{"class":147},[49,70441,52554],{"class":66},[49,70443,70444,70447,70449,70451,70453,70455,70457,70459,70462,70464,70466,70468],{"class":51,"line":2982},[49,70445,70446],{"class":66},"    薪资：\u003C",[49,70448,448],{"class":147},[49,70450,55065],{"class":62},[49,70452,1448],{"class":66},[49,70454,63935],{"class":1505},[49,70456,54728],{"class":62},[49,70458,1448],{"class":66},[49,70460,70461],{"class":1505},"\"salary\"",[49,70463,16171],{"class":62},[49,70465,1448],{"class":66},[49,70467,70461],{"class":1505},[49,70469,60366],{"class":66},[49,70471,70472,70475,70477,70479,70481,70484,70486,70488,70490],{"class":51,"line":2987},[49,70473,70474],{"class":66},"    就业城市：\u003C",[49,70476,70379],{"class":147},[49,70478,16171],{"class":62},[49,70480,1448],{"class":66},[49,70482,70483],{"class":1505},"\"city\"",[49,70485,54728],{"class":62},[49,70487,1448],{"class":66},[49,70489,70483],{"class":1505},[49,70491,52554],{"class":66},[49,70493,70494,70496,70498,70500,70502,70505,70508,70510],{"class":51,"line":3004},[49,70495,56473],{"class":66},[49,70497,70401],{"class":147},[49,70499,67886],{"class":62},[49,70501,1448],{"class":66},[49,70503,70504],{"class":1505},"\"北京\"",[49,70506,70507],{"class":66},">北京\u003C\u002F",[49,70509,70401],{"class":147},[49,70511,52554],{"class":66},[49,70513,70514,70516,70518,70520,70522,70525,70528,70530],{"class":51,"line":3009},[49,70515,56473],{"class":66},[49,70517,70401],{"class":147},[49,70519,67886],{"class":62},[49,70521,1448],{"class":66},[49,70523,70524],{"class":1505},"\"上海\"",[49,70526,70527],{"class":66},">上海\u003C\u002F",[49,70529,70401],{"class":147},[49,70531,52554],{"class":66},[49,70533,70534,70536,70538,70540,70542,70545,70548,70550],{"class":51,"line":3014},[49,70535,56473],{"class":66},[49,70537,70401],{"class":147},[49,70539,67886],{"class":62},[49,70541,1448],{"class":66},[49,70543,70544],{"class":1505},"\"广州\"",[49,70546,70547],{"class":66},">广州\u003C\u002F",[49,70549,70401],{"class":147},[49,70551,52554],{"class":66},[49,70553,70554,70556,70558,70560,70562,70565,70568,70570],{"class":51,"line":3019},[49,70555,56473],{"class":66},[49,70557,70401],{"class":147},[49,70559,67886],{"class":62},[49,70561,1448],{"class":66},[49,70563,70564],{"class":1505},"\"深圳\"",[49,70566,70567],{"class":66},">深圳\u003C\u002F",[49,70569,70401],{"class":147},[49,70571,52554],{"class":66},[49,70573,70574,70576,70578,70580,70582,70585,70588,70590],{"class":51,"line":3033},[49,70575,56473],{"class":66},[49,70577,70401],{"class":147},[49,70579,67886],{"class":62},[49,70581,1448],{"class":66},[49,70583,70584],{"class":1505},"\"曹县\"",[49,70586,70587],{"class":66},">曹县\u003C\u002F",[49,70589,70401],{"class":147},[49,70591,52554],{"class":66},[49,70593,70594,70596,70598],{"class":51,"line":3038},[49,70595,53018],{"class":66},[49,70597,70379],{"class":147},[49,70599,52554],{"class":66},[49,70601,70602,70604,70606,70608,70610,70613,70616,70618],{"class":51,"line":3831},[49,70603,52588],{"class":66},[49,70605,55128],{"class":147},[49,70607,54728],{"class":62},[49,70609,1448],{"class":66},[49,70611,70612],{"class":1505},"\"add\"",[49,70614,70615],{"class":66},">录入\u003C\u002F",[49,70617,55128],{"class":147},[49,70619,52554],{"class":66},[49,70621,70622,70624,70626],{"class":51,"line":3845},[49,70623,53659],{"class":66},[49,70625,67860],{"class":147},[49,70627,52554],{"class":66},[49,70629,70630],{"class":51,"line":3853},[49,70631,3654],{"emptyLinePlaceholder":1330},[49,70633,70634,70636,70638,70641,70643],{"class":51,"line":3858},[49,70635,53386],{"class":66},[49,70637,10],{"class":147},[49,70639,70640],{"class":66},">就业榜\u003C\u002F",[49,70642,10],{"class":147},[49,70644,52554],{"class":66},[49,70646,70647,70649,70651],{"class":51,"line":3864},[49,70648,53386],{"class":66},[49,70650,293],{"class":147},[49,70652,52554],{"class":66},[49,70654,70655,70657,70659],{"class":51,"line":3870},[49,70656,52588],{"class":66},[49,70658,296],{"class":147},[49,70660,52554],{"class":66},[49,70662,70663,70665,70667],{"class":51,"line":3875},[49,70664,56473],{"class":66},[49,70666,299],{"class":147},[49,70668,52554],{"class":66},[49,70670,70671,70673,70675,70678,70680],{"class":51,"line":9200},[49,70672,56541],{"class":66},[49,70674,302],{"class":147},[49,70676,70677],{"class":66},">序号\u003C\u002F",[49,70679,302],{"class":147},[49,70681,52554],{"class":66},[49,70683,70684,70686,70688,70691,70693],{"class":51,"line":9224},[49,70685,56541],{"class":66},[49,70687,302],{"class":147},[49,70689,70690],{"class":66},">姓名\u003C\u002F",[49,70692,302],{"class":147},[49,70694,52554],{"class":66},[49,70696,70697,70699,70701,70704,70706],{"class":51,"line":9229},[49,70698,56541],{"class":66},[49,70700,302],{"class":147},[49,70702,70703],{"class":66},">年龄\u003C\u002F",[49,70705,302],{"class":147},[49,70707,52554],{"class":66},[49,70709,70710,70712,70714,70717,70719],{"class":51,"line":9235},[49,70711,56541],{"class":66},[49,70713,302],{"class":147},[49,70715,70716],{"class":66},">性别\u003C\u002F",[49,70718,302],{"class":147},[49,70720,52554],{"class":66},[49,70722,70723,70725,70727,70730,70732],{"class":51,"line":9262},[49,70724,56541],{"class":66},[49,70726,302],{"class":147},[49,70728,70729],{"class":66},">薪资\u003C\u002F",[49,70731,302],{"class":147},[49,70733,52554],{"class":66},[49,70735,70736,70738,70740,70743,70745],{"class":51,"line":9267},[49,70737,56541],{"class":66},[49,70739,302],{"class":147},[49,70741,70742],{"class":66},">就业城市\u003C\u002F",[49,70744,302],{"class":147},[49,70746,52554],{"class":66},[49,70748,70749,70751,70753,70756,70758],{"class":51,"line":9273},[49,70750,56541],{"class":66},[49,70752,302],{"class":147},[49,70754,70755],{"class":66},">操作\u003C\u002F",[49,70757,302],{"class":147},[49,70759,52554],{"class":66},[49,70761,70762,70764,70766],{"class":51,"line":9285},[49,70763,56646],{"class":66},[49,70765,299],{"class":147},[49,70767,52554],{"class":66},[49,70769,70770,70772,70774],{"class":51,"line":9297},[49,70771,53018],{"class":66},[49,70773,296],{"class":147},[49,70775,52554],{"class":66},[49,70777,70778,70780,70782],{"class":51,"line":9309},[49,70779,52588],{"class":66},[49,70781,310],{"class":147},[49,70783,52554],{"class":66},[49,70785,70786],{"class":51,"line":10968},[49,70787,70788],{"class":55},"      \u003C!-- \n",[49,70790,70791],{"class":51,"line":10993},[49,70792,70793],{"class":55},"        \u003Ctr>\n",[49,70795,70796],{"class":51,"line":11016},[49,70797,70798],{"class":55},"          \u003Ctd>1001\u003C\u002Ftd>\n",[49,70800,70801],{"class":51,"line":11040},[49,70802,70803],{"class":55},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[49,70805,70806],{"class":51,"line":11045},[49,70807,70808],{"class":55},"          \u003Ctd>19\u003C\u002Ftd>\n",[49,70810,70811],{"class":51,"line":11050},[49,70812,70813],{"class":55},"          \u003Ctd>男\u003C\u002Ftd>\n",[49,70815,70816],{"class":51,"line":11055},[49,70817,70818],{"class":55},"          \u003Ctd>15000\u003C\u002Ftd>\n",[49,70820,70821],{"class":51,"line":11064},[49,70822,70823],{"class":55},"          \u003Ctd>上海\u003C\u002Ftd>\n",[49,70825,70826],{"class":51,"line":11069},[49,70827,70828],{"class":55},"          \u003Ctd>\n",[49,70830,70831],{"class":51,"line":11075},[49,70832,70833],{"class":55},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[49,70835,70836],{"class":51,"line":11096},[49,70837,70838],{"class":55},"          \u003C\u002Ftd>\n",[49,70840,70841],{"class":51,"line":11102},[49,70842,70843],{"class":55},"        \u003C\u002Ftr> \n",[49,70845,70846],{"class":51,"line":11116},[49,70847,70848],{"class":55},"        -->\n",[49,70850,70851,70853,70855],{"class":51,"line":11122},[49,70852,53018],{"class":66},[49,70854,310],{"class":147},[49,70856,52554],{"class":66},[49,70858,70859,70861,70863],{"class":51,"line":11149},[49,70860,53659],{"class":66},[49,70862,293],{"class":147},[49,70864,52554],{"class":66},[49,70866,70867,70869,70871],{"class":51,"line":11158},[49,70868,53386],{"class":66},[49,70870,53055],{"class":147},[49,70872,52554],{"class":66},[49,70874,70875],{"class":51,"line":11164},[49,70876,61197],{"class":55},[49,70878,70879,70881,70884,70886,70888,70890,70892,70895],{"class":51,"line":11172},[49,70880,12473],{"class":109},[49,70882,70883],{"class":73}," uname",[49,70885,14816],{"class":109},[49,70887,55637],{"class":66},[49,70889,55640],{"class":62},[49,70891,1403],{"class":66},[49,70893,70894],{"class":1505},"'.uname'",[49,70896,1409],{"class":66},[49,70898,70899,70901,70903,70905,70907,70909,70911,70914],{"class":51,"line":11177},[49,70900,12473],{"class":109},[49,70902,16939],{"class":73},[49,70904,14816],{"class":109},[49,70906,55637],{"class":66},[49,70908,55640],{"class":62},[49,70910,1403],{"class":66},[49,70912,70913],{"class":1505},"'.age'",[49,70915,1409],{"class":66},[49,70917,70918,70920,70923,70925,70927,70929,70931,70934],{"class":51,"line":17854},[49,70919,12473],{"class":109},[49,70921,70922],{"class":73}," gender",[49,70924,14816],{"class":109},[49,70926,55637],{"class":66},[49,70928,55640],{"class":62},[49,70930,1403],{"class":66},[49,70932,70933],{"class":1505},"'.gender'",[49,70935,1409],{"class":66},[49,70937,70938,70940,70943,70945,70947,70949,70951,70954],{"class":51,"line":17860},[49,70939,12473],{"class":109},[49,70941,70942],{"class":73}," salary",[49,70944,14816],{"class":109},[49,70946,55637],{"class":66},[49,70948,55640],{"class":62},[49,70950,1403],{"class":66},[49,70952,70953],{"class":1505},"'.salary'",[49,70955,1409],{"class":66},[49,70957,70958,70960,70963,70965,70967,70969,70971,70974],{"class":51,"line":17883},[49,70959,12473],{"class":109},[49,70961,70962],{"class":73}," city",[49,70964,14816],{"class":109},[49,70966,55637],{"class":66},[49,70968,55640],{"class":62},[49,70970,1403],{"class":66},[49,70972,70973],{"class":1505},"'.city'",[49,70975,1409],{"class":66},[49,70977,70978,70980,70983,70985,70987,70989,70991,70994],{"class":51,"line":17889},[49,70979,12473],{"class":109},[49,70981,70982],{"class":73}," tbody",[49,70984,14816],{"class":109},[49,70986,55637],{"class":66},[49,70988,55640],{"class":62},[49,70990,1403],{"class":66},[49,70992,70993],{"class":1505},"'tbody'",[49,70995,1409],{"class":66},[49,70997,70998],{"class":51,"line":17912},[49,70999,3654],{"emptyLinePlaceholder":1330},[49,71001,71002],{"class":51,"line":17926},[49,71003,71004],{"class":55},"    \u002F\u002F 获取所有带有name属性的元素\n",[49,71006,71007,71009,71012,71014,71016,71018,71020,71023],{"class":51,"line":17946},[49,71008,12473],{"class":109},[49,71010,71011],{"class":73}," items",[49,71013,14816],{"class":109},[49,71015,55637],{"class":66},[49,71017,56920],{"class":62},[49,71019,1403],{"class":66},[49,71021,71022],{"class":1505},"'[name]'",[49,71024,1409],{"class":66},[49,71026,71027],{"class":51,"line":17952},[49,71028,71029],{"class":55},"    \u002F\u002F 声明一个空的数组\n",[49,71031,71032,71034,71036,71038],{"class":51,"line":17963},[49,71033,12473],{"class":109},[49,71035,58934],{"class":73},[49,71037,14816],{"class":109},[49,71039,53080],{"class":66},[49,71041,71042],{"class":51,"line":17986},[49,71043,71044],{"class":55},"    \u002F\u002F 1.录入模块\n",[49,71046,71047],{"class":51,"line":18008},[49,71048,71049],{"class":55},"    \u002F\u002F 1.1这是一个表单提交事件\n",[49,71051,71052,71054,71057,71059,71061,71063,71065,71068],{"class":51,"line":18013},[49,71053,12473],{"class":109},[49,71055,71056],{"class":73}," info",[49,71058,14816],{"class":109},[49,71060,55637],{"class":66},[49,71062,55640],{"class":62},[49,71064,1403],{"class":66},[49,71066,71067],{"class":1505},"'.info'",[49,71069,1409],{"class":66},[49,71071,71072,71075,71077,71079,71082,71084,71086,71088,71090],{"class":51,"line":18019},[49,71073,71074],{"class":66},"    info.",[49,71076,59052],{"class":62},[49,71078,1403],{"class":66},[49,71080,71081],{"class":1505},"'submit'",[49,71083,13687],{"class":66},[49,71085,55690],{"class":109},[49,71087,2913],{"class":66},[49,71089,1475],{"class":6468},[49,71091,13694],{"class":66},[49,71093,71094],{"class":51,"line":18033},[49,71095,71096],{"class":55},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[49,71098,71099,71102,71105],{"class":51,"line":18046},[49,71100,71101],{"class":66},"      e.",[49,71103,71104],{"class":62},"preventDefault",[49,71106,3230],{"class":66},[49,71108,71109],{"class":51,"line":18051},[49,71110,61251],{"class":55},[49,71112,71113],{"class":51,"line":18065},[49,71114,3654],{"emptyLinePlaceholder":1330},[49,71116,71117],{"class":51,"line":18070},[49,71118,71119],{"class":55},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[49,71121,71122],{"class":51,"line":18076},[49,71123,71124],{"class":55},"      \u002F\u002F 先遍历循环\n",[49,71126,71127,71129,71131,71133,71135,71137,71139,71141,71143,71146,71148,71150,71152],{"class":51,"line":18081},[49,71128,53526],{"class":109},[49,71130,2913],{"class":66},[49,71132,53089],{"class":109},[49,71134,10690],{"class":66},[49,71136,1448],{"class":109},[49,71138,5347],{"class":73},[49,71140,10697],{"class":66},[49,71142,2300],{"class":109},[49,71144,71145],{"class":66}," items.",[49,71147,53210],{"class":73},[49,71149,4468],{"class":66},[49,71151,3546],{"class":109},[49,71153,13694],{"class":66},[49,71155,71156,71158,71161,71163,71166],{"class":51,"line":18095},[49,71157,3751],{"class":109},[49,71159,71160],{"class":66}," (items[i].value ",[49,71162,55727],{"class":109},[49,71164,71165],{"class":1505}," ''",[49,71167,13694],{"class":66},[49,71169,71170,71173,71176,71178,71181],{"class":51,"line":18100},[49,71171,71172],{"class":109},"          return",[49,71174,71175],{"class":62}," alert",[49,71177,1403],{"class":66},[49,71179,71180],{"class":1505},"'输入内容不能为空'",[49,71182,1409],{"class":66},[49,71184,71185],{"class":51,"line":18105},[49,71186,3783],{"class":66},[49,71188,71189],{"class":51,"line":18119},[49,71190,53640],{"class":66},[49,71192,71193],{"class":51,"line":18131},[49,71194,3654],{"emptyLinePlaceholder":1330},[49,71196,71197],{"class":51,"line":18136},[49,71198,71199],{"class":55},"      \u002F\u002F 创建新的对象\n",[49,71201,71202,71204,71207,71209],{"class":51,"line":18149},[49,71203,59467],{"class":109},[49,71205,71206],{"class":73}," obj",[49,71208,14816],{"class":109},[49,71210,67],{"class":66},[49,71212,71213,71216,71218,71220,71222],{"class":51,"line":18154},[49,71214,71215],{"class":66},"        stuID: arr.",[49,71217,53210],{"class":73},[49,71219,46814],{"class":109},[49,71221,26367],{"class":73},[49,71223,32714],{"class":66},[49,71225,71226],{"class":51,"line":18159},[49,71227,71228],{"class":66},"        uname: uname.value,\n",[49,71230,71231],{"class":51,"line":18164},[49,71232,71233],{"class":66},"        age: age.value,\n",[49,71235,71236],{"class":51,"line":18177},[49,71237,71238],{"class":66},"        gender: gender.value,\n",[49,71240,71241],{"class":51,"line":18182},[49,71242,71243],{"class":66},"        salary: salary.value,\n",[49,71245,71246],{"class":51,"line":33881},[49,71247,71248],{"class":66},"        city: city.value\n",[49,71250,71251],{"class":51,"line":33887},[49,71252,53640],{"class":66},[49,71254,71255],{"class":51,"line":33893},[49,71256,71257],{"class":55},"      \u002F\u002F console.log(obj);\n",[49,71259,71260],{"class":51,"line":33899},[49,71261,71262],{"class":55},"      \u002F\u002F 追加到数组里面\n",[49,71264,71265,71267,71269],{"class":51,"line":33905},[49,71266,59246],{"class":66},[49,71268,53126],{"class":62},[49,71270,71271],{"class":66},"(obj)\n",[49,71273,71274],{"class":51,"line":33916},[49,71275,71276],{"class":55},"      \u002F\u002F console.log(arr);\n",[49,71278,71279],{"class":51,"line":33922},[49,71280,71281],{"class":55},"      \u002F\u002F 清空表单  reset重置表单\n",[49,71283,71284,71287,71289,71292],{"class":51,"line":33942},[49,71285,71286],{"class":73},"      this",[49,71288,1949],{"class":66},[49,71290,71291],{"class":62},"reset",[49,71293,3230],{"class":66},[49,71295,71296],{"class":51,"line":33948},[49,71297,71298],{"class":55},"      \u002F\u002F 调用渲染函数\n",[49,71300,71301,71304],{"class":51,"line":33959},[49,71302,71303],{"class":62},"      render",[49,71305,3230],{"class":66},[49,71307,71308],{"class":51,"line":33965},[49,71309,34709],{"class":66},[49,71311,71312],{"class":51,"line":33971},[49,71313,71314],{"class":55},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[49,71316,71317,71320,71323],{"class":51,"line":33977},[49,71318,71319],{"class":109},"    function",[49,71321,71322],{"class":62}," render",[49,71324,12105],{"class":66},[49,71326,71327],{"class":51,"line":33983},[49,71328,71329],{"class":55},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[49,71331,71332,71335,71337],{"class":51,"line":33989},[49,71333,71334],{"class":66},"      tbody.innerHTML ",[49,71336,1448],{"class":109},[49,71338,71339],{"class":1505}," ''\n",[49,71341,71342],{"class":51,"line":33995},[49,71343,71344],{"class":55},"      \u002F\u002F 遍历数组\n",[49,71346,71347,71349,71351,71353,71355,71357,71359,71361,71363,71365,71367,71369,71371],{"class":51,"line":34001},[49,71348,53526],{"class":109},[49,71350,2913],{"class":66},[49,71352,53089],{"class":109},[49,71354,10690],{"class":66},[49,71356,1448],{"class":109},[49,71358,5347],{"class":73},[49,71360,10697],{"class":66},[49,71362,2300],{"class":109},[49,71364,53207],{"class":66},[49,71366,53210],{"class":73},[49,71368,4468],{"class":66},[49,71370,3546],{"class":109},[49,71372,13694],{"class":66},[49,71374,71375,71377,71380,71382,71384,71387,71389,71392],{"class":51,"line":34021},[49,71376,62508],{"class":109},[49,71378,71379],{"class":73}," tr",[49,71381,14816],{"class":109},[49,71383,55637],{"class":66},[49,71385,71386],{"class":62},"createElement",[49,71388,1403],{"class":66},[49,71390,71391],{"class":1505},"'tr'",[49,71393,1409],{"class":66},[49,71395,71396,71399,71401],{"class":51,"line":34027},[49,71397,71398],{"class":66},"        tr.innerHTML ",[49,71400,1448],{"class":109},[49,71402,71403],{"class":1505}," `\n",[49,71405,71406,71409,71411,71413,71415,71418,71421],{"class":51,"line":34043},[49,71407,71408],{"class":1505},"        \u003Ctd>${",[49,71410,5134],{"class":66},[49,71412,2280],{"class":1505},[49,71414,1833],{"class":66},[49,71416,71417],{"class":1505},"].",[49,71419,71420],{"class":66},"stuID",[49,71422,71423],{"class":1505},"}\u003C\u002Ftd>\n",[49,71425,71426,71429,71431,71433,71435,71437,71440],{"class":51,"line":34049},[49,71427,71428],{"class":1505},"          \u003Ctd>${",[49,71430,5134],{"class":66},[49,71432,2280],{"class":1505},[49,71434,1833],{"class":66},[49,71436,71417],{"class":1505},[49,71438,71439],{"class":66},"uname",[49,71441,71423],{"class":1505},[49,71443,71444,71446,71448,71450,71452,71454,71457],{"class":51,"line":34063},[49,71445,71428],{"class":1505},[49,71447,5134],{"class":66},[49,71449,2280],{"class":1505},[49,71451,1833],{"class":66},[49,71453,71417],{"class":1505},[49,71455,71456],{"class":66},"age",[49,71458,71423],{"class":1505},[49,71460,71461,71463,71465,71467,71469,71471,71474],{"class":51,"line":34069},[49,71462,71428],{"class":1505},[49,71464,5134],{"class":66},[49,71466,2280],{"class":1505},[49,71468,1833],{"class":66},[49,71470,71417],{"class":1505},[49,71472,71473],{"class":66},"gender",[49,71475,71423],{"class":1505},[49,71477,71478,71480,71482,71484,71486,71488,71491],{"class":51,"line":34084},[49,71479,71428],{"class":1505},[49,71481,5134],{"class":66},[49,71483,2280],{"class":1505},[49,71485,1833],{"class":66},[49,71487,71417],{"class":1505},[49,71489,71490],{"class":66},"salary",[49,71492,71423],{"class":1505},[49,71494,71495,71497,71499,71501,71503,71505,71508],{"class":51,"line":34090},[49,71496,71428],{"class":1505},[49,71498,5134],{"class":66},[49,71500,2280],{"class":1505},[49,71502,1833],{"class":66},[49,71504,71417],{"class":1505},[49,71506,71507],{"class":66},"city",[49,71509,71423],{"class":1505},[49,71511,71512],{"class":51,"line":34099},[49,71513,70828],{"class":1505},[49,71515,71516,71519,71521],{"class":51,"line":34105},[49,71517,71518],{"class":1505},"            \u003Ca href=\"javascript:\" data-id=${",[49,71520,1833],{"class":66},[49,71522,71523],{"class":1505},"}>删除\u003C\u002Fa>\n",[49,71525,71526],{"class":51,"line":34114},[49,71527,71528],{"class":1505},"          \u003C\u002Ftd> \n",[49,71530,71531],{"class":51,"line":34120},[49,71532,71533],{"class":1505},"          `\n",[49,71535,71536],{"class":51,"line":34126},[49,71537,71538],{"class":55},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[49,71540,71541,71544,71547],{"class":51,"line":34135},[49,71542,71543],{"class":66},"        tbody.",[49,71545,71546],{"class":62},"appendChild",[49,71548,71549],{"class":66},"(tr)\n",[49,71551,71552],{"class":51,"line":34141},[49,71553,53640],{"class":66},[49,71555,71556],{"class":51,"line":34152},[49,71557,3441],{"class":66},[49,71559,71560],{"class":51,"line":34158},[49,71561,3654],{"emptyLinePlaceholder":1330},[49,71563,71564],{"class":51,"line":34177},[49,71565,71566],{"class":55},"    \u002F\u002F 3.删除委托\n",[49,71568,71569],{"class":51,"line":34183},[49,71570,71571],{"class":55},"    \u002F\u002F 3.1 事件委托 tbody\n",[49,71573,71574,71577,71579,71581,71583,71585,71587,71589,71591],{"class":51,"line":34194},[49,71575,71576],{"class":66},"    tbody.",[49,71578,59052],{"class":62},[49,71580,1403],{"class":66},[49,71582,59057],{"class":1505},[49,71584,13687],{"class":66},[49,71586,55690],{"class":109},[49,71588,2913],{"class":66},[49,71590,1475],{"class":6468},[49,71592,13694],{"class":66},[49,71594,71595,71597,71599,71601,71603],{"class":51,"line":34200},[49,71596,55721],{"class":109},[49,71598,68269],{"class":66},[49,71600,55727],{"class":109},[49,71602,69491],{"class":1505},[49,71604,13694],{"class":66},[49,71606,71607],{"class":51,"line":34220},[49,71608,71609],{"class":55},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[49,71611,71612],{"class":51,"line":34236},[49,71613,71614],{"class":55},"        \u002F\u002F console.log(e.target.dataset.id);\n",[49,71616,71617],{"class":51,"line":34242},[49,71618,71619],{"class":55},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[49,71621,71622,71625,71627,71630,71632],{"class":51,"line":34256},[49,71623,71624],{"class":66},"        arr.",[49,71626,59249],{"class":62},[49,71628,71629],{"class":66},"(e.target.dataset.id, ",[49,71631,159],{"class":73},[49,71633,1409],{"class":66},[49,71635,71636],{"class":51,"line":34262},[49,71637,71638],{"class":55},"        \u002F\u002F 重新渲染一次\n",[49,71640,71641,71644],{"class":51,"line":34268},[49,71642,71643],{"class":62},"        render",[49,71645,3230],{"class":66},[49,71647,71648],{"class":51,"line":34279},[49,71649,53640],{"class":66},[49,71651,71652],{"class":51,"line":34285},[49,71653,34709],{"class":66},[49,71655,71656,71658,71660],{"class":51,"line":34291},[49,71657,53659],{"class":66},[49,71659,53055],{"class":147},[49,71661,52554],{"class":66},[49,71663,71664],{"class":51,"line":34301},[49,71665,3654],{"emptyLinePlaceholder":1330},[49,71667,71668,71670,71672],{"class":51,"line":34307},[49,71669,53027],{"class":66},[49,71671,53042],{"class":147},[49,71673,52554],{"class":66},[49,71675,71676],{"class":51,"line":34318},[49,71677,3654],{"emptyLinePlaceholder":1330},[49,71679,71680,71682,71684],{"class":51,"line":34324},[49,71681,53027],{"class":66},[49,71683,51883],{"class":147},[49,71685,52554],{"class":66},[19,71687,71688],{},"样式：",[39,71690,71694],{"className":71691,"code":71692,"language":71693,"meta":44,"style":44},"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",[46,71695,71696,71701,71710,71719,71723,71727,71732,71742,71747,71751,71756,71766,71771,71780,71784,71788,71793,71798,71807,71817,71822,71826,71831,71840,71850,71855,71865,71875,71879,71884,71892,71896,71901,71906,71911,71919,71928,71932,71937,71946,71950,71955,71964,71968,71973,71982,71991,71999,72003,72008,72017,72026,72034,72044,72050,72059,72069,72079,72083,72088,72097,72105,72115,72123,72131,72140,72150,72158,72162,72167,72176],{"__ignoreMap":44},[49,71697,71698],{"class":51,"line":52},[49,71699,71700],{"class":66},"* {\n",[49,71702,71703,71705,71707],{"class":51,"line":59},[49,71704,1070],{"class":147},[49,71706,77],{"class":66},[49,71708,71709],{"class":1505},"0;\n",[49,71711,71712,71715,71717],{"class":51,"line":70},[49,71713,71714],{"class":1505},"  padding",[49,71716,77],{"class":66},[49,71718,71709],{"class":1505},[49,71720,71721],{"class":51,"line":86},[49,71722,137],{"class":66},[49,71724,71725],{"class":51,"line":98},[49,71726,3654],{"emptyLinePlaceholder":1330},[49,71728,71729],{"class":51,"line":121},[49,71730,71731],{"class":1505},"a {\n",[49,71733,71734,71737,71739],{"class":51,"line":134},[49,71735,71736],{"class":147},"  text-decoration",[49,71738,77],{"class":66},[49,71740,71741],{"class":1505},"none;\n",[49,71743,71744],{"class":51,"line":1085},[49,71745,71746],{"class":1505},"  color:#721c24;\n",[49,71748,71749],{"class":51,"line":2574},[49,71750,137],{"class":66},[49,71752,71753],{"class":51,"line":2586},[49,71754,71755],{"class":1505},"h1 {\n",[49,71757,71758,71761,71763],{"class":51,"line":2867},[49,71759,71760],{"class":147},"  text-align",[49,71762,77],{"class":66},[49,71764,71765],{"class":1505},"center;\n",[49,71767,71768],{"class":51,"line":2872},[49,71769,71770],{"class":1505},"  color:#333;\n",[49,71772,71773,71775,71777],{"class":51,"line":2878},[49,71774,1070],{"class":147},[49,71776,77],{"class":66},[49,71778,71779],{"class":1505},"20px 0;\n",[49,71781,71782],{"class":51,"line":2883},[49,71783,3928],{"class":66},[49,71785,71786],{"class":51,"line":2897},[49,71787,137],{"class":66},[49,71789,71790],{"class":51,"line":2902},[49,71791,71792],{"class":1505},"table {\n",[49,71794,71795],{"class":51,"line":2908},[49,71796,71797],{"class":1505},"  margin:0 auto;\n",[49,71799,71800,71802,71804],{"class":51,"line":2929},[49,71801,74],{"class":147},[49,71803,77],{"class":66},[49,71805,71806],{"class":1505},"800px;\n",[49,71808,71809,71812,71814],{"class":51,"line":2934},[49,71810,71811],{"class":147},"  border-collapse",[49,71813,77],{"class":66},[49,71815,71816],{"class":1505},"collapse;\n",[49,71818,71819],{"class":51,"line":2948},[49,71820,71821],{"class":1505},"  color:#004085;\n",[49,71823,71824],{"class":51,"line":2953},[49,71825,137],{"class":66},[49,71827,71828],{"class":51,"line":2982},[49,71829,71830],{"class":1505},"th {\n",[49,71832,71833,71835,71837],{"class":51,"line":2987},[49,71834,71714],{"class":147},[49,71836,77],{"class":66},[49,71838,71839],{"class":1505},"10px;\n",[49,71841,71842,71845,71847],{"class":51,"line":3004},[49,71843,71844],{"class":147},"  background",[49,71846,77],{"class":66},[49,71848,71849],{"class":55},"#cfe5ff;\n",[49,71851,71852],{"class":51,"line":3009},[49,71853,71854],{"class":66},"  \n",[49,71856,71857,71860,71862],{"class":51,"line":3014},[49,71858,71859],{"class":147},"  font-size",[49,71861,77],{"class":66},[49,71863,71864],{"class":1505},"20px;\n",[49,71866,71867,71870,71872],{"class":51,"line":3019},[49,71868,71869],{"class":147},"  font-weight",[49,71871,77],{"class":66},[49,71873,71874],{"class":1505},"400;\n",[49,71876,71877],{"class":51,"line":3033},[49,71878,137],{"class":66},[49,71880,71881],{"class":51,"line":3038},[49,71882,71883],{"class":1505},"td,th {\n",[49,71885,71886,71889],{"class":51,"line":3831},[49,71887,71888],{"class":1505},"  border:1px solid",[49,71890,71891],{"class":55}," #b8daff;\n",[49,71893,71894],{"class":51,"line":3845},[49,71895,137],{"class":66},[49,71897,71898],{"class":51,"line":3853},[49,71899,71900],{"class":1505},"td {\n",[49,71902,71903],{"class":51,"line":3858},[49,71904,71905],{"class":1505},"  padding:10px;\n",[49,71907,71908],{"class":51,"line":3864},[49,71909,71910],{"class":1505},"  color:#666;\n",[49,71912,71913,71915,71917],{"class":51,"line":3870},[49,71914,71760],{"class":147},[49,71916,77],{"class":66},[49,71918,71765],{"class":1505},[49,71920,71921,71923,71925],{"class":51,"line":3875},[49,71922,71859],{"class":147},[49,71924,77],{"class":66},[49,71926,71927],{"class":1505},"16px;\n",[49,71929,71930],{"class":51,"line":9200},[49,71931,137],{"class":66},[49,71933,71934],{"class":51,"line":9224},[49,71935,71936],{"class":1505},"tbody tr {\n",[49,71938,71939,71941,71943],{"class":51,"line":9229},[49,71940,71844],{"class":147},[49,71942,77],{"class":66},[49,71944,71945],{"class":55},"#fff;\n",[49,71947,71948],{"class":51,"line":9235},[49,71949,137],{"class":66},[49,71951,71952],{"class":51,"line":9262},[49,71953,71954],{"class":1505},"tbody tr:hover {\n",[49,71956,71957,71959,71961],{"class":51,"line":9267},[49,71958,71844],{"class":147},[49,71960,77],{"class":66},[49,71962,71963],{"class":55},"#e1ecf8;\n",[49,71965,71966],{"class":51,"line":9273},[49,71967,137],{"class":66},[49,71969,71970],{"class":51,"line":9285},[49,71971,71972],{"class":1505},".info {\n",[49,71974,71975,71977,71979],{"class":51,"line":9297},[49,71976,74],{"class":147},[49,71978,77],{"class":66},[49,71980,71981],{"class":1505},"900px;\n",[49,71983,71984,71986,71988],{"class":51,"line":9309},[49,71985,1070],{"class":147},[49,71987,77],{"class":66},[49,71989,71990],{"class":1505},"50px auto;\n",[49,71992,71993,71995,71997],{"class":51,"line":10968},[49,71994,71760],{"class":147},[49,71996,77],{"class":66},[49,71998,71765],{"class":1505},[49,72000,72001],{"class":51,"line":10993},[49,72002,137],{"class":66},[49,72004,72005],{"class":51,"line":11016},[49,72006,72007],{"class":1505},".info  input, .info select {\n",[49,72009,72010,72012,72014],{"class":51,"line":11040},[49,72011,74],{"class":147},[49,72013,77],{"class":66},[49,72015,72016],{"class":1505},"80px;\n",[49,72018,72019,72021,72023],{"class":51,"line":11045},[49,72020,89],{"class":147},[49,72022,77],{"class":66},[49,72024,72025],{"class":1505},"27px;\n",[49,72027,72028,72030,72032],{"class":51,"line":11050},[49,72029,455],{"class":147},[49,72031,77],{"class":66},[49,72033,71741],{"class":1505},[49,72035,72036,72039,72041],{"class":51,"line":11055},[49,72037,72038],{"class":147},"  border-radius",[49,72040,77],{"class":66},[49,72042,72043],{"class":1505},"5px;\n",[49,72045,72046,72048],{"class":51,"line":11064},[49,72047,71888],{"class":1505},[49,72049,71891],{"class":55},[49,72051,72052,72055,72057],{"class":51,"line":11069},[49,72053,72054],{"class":147},"  padding-left",[49,72056,77],{"class":66},[49,72058,72043],{"class":1505},[49,72060,72061,72064,72066],{"class":51,"line":11075},[49,72062,72063],{"class":147},"  box-sizing",[49,72065,77],{"class":66},[49,72067,72068],{"class":1505},"border-box;\n",[49,72070,72071,72074,72076],{"class":51,"line":11096},[49,72072,72073],{"class":147},"  margin-right",[49,72075,77],{"class":66},[49,72077,72078],{"class":1505},"15px;\n",[49,72080,72081],{"class":51,"line":11102},[49,72082,137],{"class":66},[49,72084,72085],{"class":51,"line":11116},[49,72086,72087],{"class":1505},".info button {\n",[49,72089,72090,72092,72094],{"class":51,"line":11122},[49,72091,74],{"class":147},[49,72093,77],{"class":66},[49,72095,72096],{"class":1505},"60px;\n",[49,72098,72099,72101,72103],{"class":51,"line":11149},[49,72100,89],{"class":147},[49,72102,77],{"class":66},[49,72104,72025],{"class":1505},[49,72106,72107,72110,72112],{"class":51,"line":11158},[49,72108,72109],{"class":147},"  background-color",[49,72111,77],{"class":66},[49,72113,72114],{"class":55},"#004085;\n",[49,72116,72117,72119,72121],{"class":51,"line":11164},[49,72118,455],{"class":147},[49,72120,77],{"class":66},[49,72122,71741],{"class":1505},[49,72124,72125,72127,72129],{"class":51,"line":11172},[49,72126,101],{"class":147},[49,72128,77],{"class":66},[49,72130,71709],{"class":1505},[49,72132,72133,72136,72138],{"class":51,"line":11177},[49,72134,72135],{"class":147},"  color",[49,72137,77],{"class":66},[49,72139,71945],{"class":55},[49,72141,72142,72145,72147],{"class":51,"line":17854},[49,72143,72144],{"class":147},"  cursor",[49,72146,77],{"class":66},[49,72148,72149],{"class":1505},"pointer;\n",[49,72151,72152,72154,72156],{"class":51,"line":17860},[49,72153,72038],{"class":147},[49,72155,77],{"class":66},[49,72157,72043],{"class":1505},[49,72159,72160],{"class":51,"line":17883},[49,72161,137],{"class":66},[49,72163,72164],{"class":51,"line":17889},[49,72165,72166],{"class":1505},".info .age {\n",[49,72168,72169,72171,72173],{"class":51,"line":17912},[49,72170,74],{"class":147},[49,72172,77],{"class":66},[49,72174,72175],{"class":1505},"50px;\n",[49,72177,72178],{"class":51,"line":17926},[49,72179,137],{"class":66},[19,72181,72182],{},"思路：",[19,72184,72185],{},[174,72186],{"alt":44,"src":72187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72189,72190],{},[174,72191],{"alt":44,"src":72192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72194,72195],{},[174,72196],{"alt":44,"src":72197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[183,72199,72201],{"id":72200},"_3315-重绘回流","3.3.15 重绘回流",[19,72203,72204],{},[174,72205],{"alt":44,"src":72206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72208,72209],{},[174,72210],{"alt":44,"src":72211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72213,72214],{},[174,72215],{"alt":44,"src":72216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72218,72220],{"id":72219},"_34-bom","3.4 BOM",[19,72222,72223],{},[174,72224],{"alt":44,"src":72225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72227,72228],{},"平时写的document省略了window而已，实际上是window.document",[19,72230,72231],{},"函数也是这样，调用的时候实际为window.fn()",[19,72233,72234],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72236,72237],{},"window大部分情况下可以省略",[183,72239,72241],{"id":72240},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72243,72244],{},"只执行一次",[19,72246,72247],{},[174,72248],{"alt":44,"src":72249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72251,72252],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72254,72255],{},[174,72256],{"alt":44,"src":72257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[183,72259,72261],{"id":72260},"_342-js执行机制","3.4.2 JS执行机制",[19,72263,72264],{},[174,72265],{"alt":44,"src":72266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72268,72269],{},"两个的结果都是1111 3333 2222",[19,72271,72272],{},[174,72273],{"alt":44,"src":72274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72276,72277],{},[174,72278],{"alt":44,"src":72279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72281,72282],{},[174,72283],{"alt":44,"src":72284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72286,72287],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72289,72290],{},"工作流程：",[19,72292,72293],{},[174,72294],{"alt":44,"src":72295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72297,72298],{},[174,72299],{"alt":44,"src":72300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72302,72303],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72305,72306],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[183,72308,72310],{"id":72309},"_343-location对象","3.4.3 location对象",[19,72312,72313],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72315,72316],{},[174,72317],{"alt":44,"src":72318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72320,72321],{},"href可以跳转页面",[591,72323,72324],{},[26,72325,72326],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72328,72329],{},"search得到提交信息之后网站后边的地址",[19,72331,72332],{},[174,72333],{"alt":44,"src":72334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72336,72337],{},[174,72338],{"alt":44,"src":72339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[591,72341,72342],{"start":59},[26,72343,72344],{},"hash:这个获取单页面应用#后边的地址",[19,72346,72347],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72349,72350],{},[174,72351],{"alt":44,"src":72352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[39,72354,72356],{"className":54309,"code":72355,"language":54311,"meta":44,"style":44},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[46,72357,72358,72378,72398],{"__ignoreMap":44},[49,72359,72360,72362,72364,72366,72368,72371,72374,72376],{"class":51,"line":52},[49,72361,53386],{"class":66},[49,72363,1630],{"class":147},[49,72365,62295],{"class":62},[49,72367,1448],{"class":66},[49,72369,72370],{"class":1505},"\"#\u002Fmy\"",[49,72372,72373],{"class":66},">我的\u003C\u002F",[49,72375,1630],{"class":147},[49,72377,52554],{"class":66},[49,72379,72380,72382,72384,72386,72388,72391,72394,72396],{"class":51,"line":59},[49,72381,53386],{"class":66},[49,72383,1630],{"class":147},[49,72385,62295],{"class":62},[49,72387,1448],{"class":66},[49,72389,72390],{"class":1505},"\"#\u002Ffriend\"",[49,72392,72393],{"class":66},">关注\u003C\u002F",[49,72395,1630],{"class":147},[49,72397,52554],{"class":66},[49,72399,72400,72402,72404,72406,72408,72411,72414,72416],{"class":51,"line":70},[49,72401,53386],{"class":66},[49,72403,1630],{"class":147},[49,72405,62295],{"class":62},[49,72407,1448],{"class":66},[49,72409,72410],{"class":1505},"\"#\u002Fdownload\"",[49,72412,72413],{"class":66},">下载\u003C\u002F",[49,72415,1630],{"class":147},[49,72417,52554],{"class":66},[19,72419,72420],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[591,72422,72423],{"start":70},[26,72424,72425,72426,72428,72429,72431],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54958,72427],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54958,72430],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[183,72433,72435],{"id":72434},"_345-navigator对象","3.4.5 navigator对象",[19,72437,72438],{},[174,72439],{"alt":44,"src":72440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[39,72442,72446],{"className":72443,"code":72444,"language":72445,"meta":44,"style":44},"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",[46,72447,72448,72453,72464,72476,72481,72532,72573,72578,72591,72603,72608],{"__ignoreMap":44},[49,72449,72450],{"class":51,"line":52},[49,72451,72452],{"class":55},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[49,72454,72455,72457,72459,72461],{"class":51,"line":59},[49,72456,1618],{"class":109},[49,72458,1403],{"class":66},[49,72460,55690],{"class":109},[49,72462,72463],{"class":66}," () { \n",[49,72465,72466,72468,72471,72473],{"class":51,"line":70},[49,72467,8044],{"class":109},[49,72469,72470],{"class":73}," userAgent",[49,72472,14816],{"class":109},[49,72474,72475],{"class":66}," navigator.userAgent \n",[49,72477,72478],{"class":51,"line":86},[49,72479,72480],{"class":55},"\u002F\u002F 验证是否为Android或iPhone \n",[49,72482,72483,72485,72488,72490,72493,72496,72498,72500,72503,72505,72508,72512,72514,72516,72518,72521,72523,72525,72527,72529],{"class":51,"line":98},[49,72484,8044],{"class":109},[49,72486,72487],{"class":73}," android",[49,72489,14816],{"class":109},[49,72491,72492],{"class":66}," userAgent.",[49,72494,72495],{"class":62},"match",[49,72497,1403],{"class":66},[49,72499,1975],{"class":1505},[49,72501,72502],{"class":49225},"(Android);",[49,72504,2375],{"class":109},[49,72506,72507],{"class":73},"[\\s",[49,72509,72511],{"class":72510},"snhLl","\\\u002F",[49,72513,2330],{"class":73},[49,72515,1872],{"class":109},[49,72517,1403],{"class":49225},[49,72519,72520],{"class":73},"[\\d.]",[49,72522,1872],{"class":109},[49,72524,1821],{"class":49225},[49,72526,2375],{"class":109},[49,72528,1975],{"class":1505},[49,72530,72531],{"class":66},") \n",[49,72533,72534,72536,72539,72541,72543,72545,72547,72549,72552,72555,72558,72560,72562,72565,72567,72569,72571],{"class":51,"line":121},[49,72535,8044],{"class":109},[49,72537,72538],{"class":73}," iphone",[49,72540,14816],{"class":109},[49,72542,72492],{"class":66},[49,72544,72495],{"class":62},[49,72546,1403],{"class":66},[49,72548,1975],{"class":1505},[49,72550,72551],{"class":49225},"(iPhone",[49,72553,72554],{"class":73},"\\s",[49,72556,72557],{"class":49225},"OS)",[49,72559,72554],{"class":73},[49,72561,1403],{"class":49225},[49,72563,72564],{"class":73},"[\\d_]",[49,72566,1872],{"class":109},[49,72568,1821],{"class":49225},[49,72570,1975],{"class":1505},[49,72572,72531],{"class":66},[49,72574,72575],{"class":51,"line":134},[49,72576,72577],{"class":55},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[49,72579,72580,72582,72585,72588],{"class":51,"line":1085},[49,72581,2787],{"class":109},[49,72583,72584],{"class":66}," (android ",[49,72586,72587],{"class":109},"||",[49,72589,72590],{"class":66}," iphone) { \n",[49,72592,72593,72596,72598,72601],{"class":51,"line":2574},[49,72594,72595],{"class":66},"location.href ",[49,72597,1448],{"class":109},[49,72599,72600],{"class":1505}," 'http:\u002F\u002Fm.itcast.cn'",[49,72602,3928],{"class":66},[49,72604,72605],{"class":51,"line":2586},[49,72606,72607],{"class":66},"} \n",[49,72609,72610],{"class":51,"line":2867},[49,72611,72612],{"class":66},"})()\n",[183,72614,72616],{"id":72615},"_346-histroy对象","3.4.6 histroy对象",[19,72618,72619],{},[174,72620],{"alt":44,"src":72621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,72623,72624],{},"浏览器地址的前进与后退!!!",[19,72626,72627],{},"history.back() 等效于 history.go(-1)",[19,72629,72630],{},"history.forward() 等效于 history.go(1)",[14,72632,72634],{"id":72633},"_35-本地存储","3.5 本地存储",[591,72636,72637,72640,72643],{},[26,72638,72639],{},"数据存储在用户浏览器中",[26,72641,72642],{},"设置、读取方便、甚至页面刷新不丢失数据",[26,72644,72645],{},"容量较大，sessionStorage和localStorage约 5M 左右",[183,72647,72649],{"id":72648},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,72651,72652],{},"只能存储字符串",[19,72654,72655],{},[174,72656],{"alt":44,"src":72657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,72659,72660],{},[174,72661],{"alt":44,"src":72662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,72664,72665],{},"键值对要加引号,不然就会当变量来看了",[19,72667,72668],{},"localStorage.setItem('uname', 'pink')",[19,72670,72671],{},"刷新之后信息不再丢失",[19,72673,72674],{},"操作key,value会跟着变",[19,72676,72677],{},"删除只删除键就可以,即名字",[19,72679,72668],{},[19,72681,72682],{},"改:",[19,72684,72685],{},"localStorage.setItem('uname','red')",[19,72687,72688],{},"有这个键就是改,没有这个键就是改",[19,72690,72691],{},[174,72692],{"alt":44,"src":72693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,72695,72696],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,72698,72699],{},[174,72700],{"alt":44,"src":72701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,72703,72704],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[183,72706,72708],{"id":72707},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,72710,72711],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,72713,72714],{},"特性:",[591,72716,72717,72720,72723,72726],{},[26,72718,72719],{},"生命周期为关闭浏览器窗口",[26,72721,72722],{},"在同一个窗口(页面)下数据可以共享",[26,72724,72725],{},"以键值对的形式存储使用",[26,72727,72728],{},"用法跟localStorage 基本相同",[183,72730,72732],{"id":72731},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,72734,72735],{},"本地只能存储字符串,无法直接存储复杂数据类型",[39,72737,72739],{"className":54309,"code":72738,"language":54311,"meta":44,"style":44},"\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",[46,72740,72741,72749,72754,72759,72764,72769,72773,72778,72783],{"__ignoreMap":44},[49,72742,72743,72745,72747],{"class":51,"line":52},[49,72744,2300],{"class":66},[49,72746,53055],{"class":147},[49,72748,52554],{"class":66},[49,72750,72751],{"class":51,"line":59},[49,72752,72753],{"class":66},"    const obj = {\n",[49,72755,72756],{"class":51,"line":70},[49,72757,72758],{"class":66},"      uname: 'pink老师',\n",[49,72760,72761],{"class":51,"line":86},[49,72762,72763],{"class":66},"      age: 18,\n",[49,72765,72766],{"class":51,"line":98},[49,72767,72768],{"class":66},"      gender: '女'\n",[49,72770,72771],{"class":51,"line":121},[49,72772,3441],{"class":66},[49,72774,72775],{"class":51,"line":134},[49,72776,72777],{"class":66},"    \u002F\u002F 存储复杂数据类型\n",[49,72779,72780],{"class":51,"line":1085},[49,72781,72782],{"class":66},"    localStorage.setItem('obj', obj)\n",[49,72784,72785,72787,72789],{"class":51,"line":2574},[49,72786,53659],{"class":66},[49,72788,53055],{"class":147},[49,72790,52554],{"class":66},[19,72792,72793],{},[174,72794],{"alt":44,"src":72795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72797,72798],{},"如果获取一下数据:",[19,72800,72801],{},"log(localStorage.getItem('obj'))",[19,72803,72804],{},[174,72805],{"alt":44,"src":72806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72808,72809],{},"发现直接存对象是使用不了的!!!",[525,72811,72813],{"id":72812},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72815,72816],{},[174,72817],{"alt":44,"src":72818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[39,72820,72822],{"className":51881,"code":72821,"language":51883,"meta":44,"style":44},"\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",[46,72823,72824,72832,72842,72852,72861,72869,72873,72877,72903,72922,72930,72934,72939,72944],{"__ignoreMap":44},[49,72825,72826,72828,72830],{"class":51,"line":52},[49,72827,2300],{"class":66},[49,72829,53055],{"class":147},[49,72831,52554],{"class":66},[49,72833,72834,72836,72838,72840],{"class":51,"line":59},[49,72835,12473],{"class":109},[49,72837,71206],{"class":73},[49,72839,14816],{"class":109},[49,72841,67],{"class":66},[49,72843,72844,72847,72850],{"class":51,"line":70},[49,72845,72846],{"class":66},"      uname: ",[49,72848,72849],{"class":1505},"'pink老师'",[49,72851,32714],{"class":66},[49,72853,72854,72857,72859],{"class":51,"line":86},[49,72855,72856],{"class":66},"      age: ",[49,72858,2041],{"class":73},[49,72860,32714],{"class":66},[49,72862,72863,72866],{"class":51,"line":98},[49,72864,72865],{"class":66},"      gender: ",[49,72867,72868],{"class":1505},"'女'\n",[49,72870,72871],{"class":51,"line":121},[49,72872,3441],{"class":66},[49,72874,72875],{"class":51,"line":134},[49,72876,72777],{"class":55},[49,72878,72879,72882,72885,72887,72890,72892,72895,72897,72900],{"class":51,"line":1085},[49,72880,72881],{"class":66},"  localStorage.",[49,72883,72884],{"class":62},"setItem",[49,72886,1403],{"class":66},[49,72888,72889],{"class":1505},"'obj'",[49,72891,13687],{"class":66},[49,72893,72894],{"class":73},"JSON",[49,72896,1949],{"class":66},[49,72898,72899],{"class":62},"stringify",[49,72901,72902],{"class":66},"(obj))\n",[49,72904,72905,72908,72910,72913,72916,72918,72920],{"class":51,"line":2574},[49,72906,72907],{"class":66},"  console.",[49,72909,59486],{"class":62},[49,72911,72912],{"class":66},"(localStorage.",[49,72914,72915],{"class":62},"getItem",[49,72917,1403],{"class":66},[49,72919,72889],{"class":1505},[49,72921,31745],{"class":66},[49,72923,72924,72926,72928],{"class":51,"line":2586},[49,72925,53659],{"class":66},[49,72927,53055],{"class":147},[49,72929,52554],{"class":66},[49,72931,72932],{"class":51,"line":2867},[49,72933,71854],{"class":66},[49,72935,72936],{"class":51,"line":2872},[49,72937,72938],{"class":66},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[49,72940,72941],{"class":51,"line":2878},[49,72942,72943],{"class":66},"  类型是字符串的\n",[49,72945,72946],{"class":51,"line":2883},[49,72947,72948],{"class":66},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[525,72950,72952],{"id":72951},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,72954,72955],{},[174,72956],{"alt":44,"src":72957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72959,72960],{},[174,72961],{"alt":44,"src":72962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[39,72964,72966],{"className":54309,"code":72965,"language":54311,"meta":44,"style":44},"  \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",[46,72967,72968,72976,72980,72984,72988,72992,72996,73001,73006,73011,73016,73021,73026,73031,73036],{"__ignoreMap":44},[49,72969,72970,72972,72974],{"class":51,"line":52},[49,72971,53386],{"class":66},[49,72973,53055],{"class":147},[49,72975,52554],{"class":66},[49,72977,72978],{"class":51,"line":59},[49,72979,72753],{"class":66},[49,72981,72982],{"class":51,"line":70},[49,72983,72758],{"class":66},[49,72985,72986],{"class":51,"line":86},[49,72987,72763],{"class":66},[49,72989,72990],{"class":51,"line":98},[49,72991,72768],{"class":66},[49,72993,72994],{"class":51,"line":121},[49,72995,3441],{"class":66},[49,72997,72998],{"class":51,"line":134},[49,72999,73000],{"class":66},"    \u002F\u002F 1.存储复杂数据类型\n",[49,73002,73003],{"class":51,"line":1085},[49,73004,73005],{"class":66},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[49,73007,73008],{"class":51,"line":2574},[49,73009,73010],{"class":66},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[49,73012,73013],{"class":51,"line":2586},[49,73014,73015],{"class":66},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[49,73017,73018],{"class":51,"line":2867},[49,73019,73020],{"class":66},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[49,73022,73023],{"class":51,"line":2872},[49,73024,73025],{"class":66},"    \u002F\u002F 取\n",[49,73027,73028],{"class":51,"line":2878},[49,73029,73030],{"class":66},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[49,73032,73033],{"class":51,"line":2883},[49,73034,73035],{"class":66},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[49,73037,73038,73040,73042],{"class":51,"line":2897},[49,73039,53659],{"class":66},[49,73041,53055],{"class":147},[49,73043,52554],{"class":66},[19,73045,73046],{},[174,73047],{"alt":44,"src":73048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[183,73050,73052],{"id":73051},"_356-数组map方法","3.5.6 数组map方法",[19,73054,73055],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73057,73058],{},[174,73059],{"alt":44,"src":73060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73062,73063],{},[174,73064],{"alt":44,"src":73065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73067,73068,73071],{},[485,73069,73070],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73073,73074],{},"map有返回值，但是forEach没有返回值",[19,73076,73077],{},"map是个方法。用的时候要加 ()",[19,73079,73080],{},"map返回的是一个数组",[183,73082,73084],{"id":73083},"_357-数组中join方法","3.5.7 数组中join方法",[19,73086,73087],{},[174,73088],{"alt":44,"src":73089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73091,73092],{},"类似于python中拼接字符串一样！",[591,73094,73095,73098,73101],{},[26,73096,73097],{},"小括号为空则逗号分开",[26,73099,73100],{},"小括号为空字符串 ''，则元素之间没有分隔符",[26,73102,73103],{},"小括号用啥符号就用进行分割",[183,73105,73107],{"id":73106},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[591,73109,73110,73113,73116,73119,73122],{},[26,73111,73112],{},"记住本地时间获取快速方式：new Date().toDateString()",[26,73114,73115],{},"尽量减少DOM操作，用好map+join的渲染方式",[26,73117,73118],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[26,73120,73121],{},"return可以实现函数的结束",[26,73123,73124],{},"禁止跳转是 preventDefault() 不要忘记",[39,73126,73128],{"className":51881,"code":73127,"language":51883,"meta":44,"style":44},"\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",[46,73129,73130,73140,73154,73158,73166,73180,73200,73212,73220,73226,73236,73246,73250,73254,73260,73270,73282,73286,73290,73297,73309,73323,73333,73337,73341,73348,73355,73362,73374,73386,73396,73408,73412,73416,73423,73430,73442,73454,73464,73476,73506,73510,73514,73521,73533,73545,73569,73579,73589,73593,73597,73605,73616,73628,73640,73652,73669,73681,73693,73697,73701,73708,73720,73732,73744,73754,73772,73785,73797,73821,73832,73836,73840,73848,73858,73862,73866,73872,73884,73895,73905,73909,73913,73919,73941,73945,73949,73955,73961,73973,73983,73995,74025,74038,74055,74059,74063,74074,74096,74106,74110,74114,74127,74137,74149,74161,74173,74185,74195,74205,74215,74226,74239,74243,74251,74259,74263,74271,74284,74304,74337,74370,74403,74429,74447,74465,74473,74499,74517,74535,74553,74571,74589,74597,74605,74623,74631,74660,74668,74676,74684,74697,74709,74721,74733,74745,74757,74770,74782,74790,74798,74806,74811,74816,74820,74824,74828,74832,74836,74840,74845,74850,74855,74860,74868,74876,74884,74889,74894,74899,74904,74909,74914,74919,74924,74929,74934,74939,74944,74949,74954,74958,74963,74968,74978,74987,74991,74996,75005,75021,75063,75103,75142,75207,75215,75219,75224,75242,75250,75255,75260,75290,75296,75301,75314,75326,75338,75350,75362,75374,75386,75390,75400,75404,75409,75414,75418,75427,75431,75436,75441,75460,75465,75485,75489,75494,75498,75503,75521,75539,75557,75576,75595,75614,75619,75625,75646,75652,75661,75667,75673,75679,75706,75719,75724,75734,75740,75746,75752,75758,75763,75769,75775,75781,75787,75820,75825,75830,75835,75840,75846,75852,75858,75869,75874,75880,75887,75901,75907,75931,75936,75941,75947,75953,75974,75980,75993,75999,76005,76011,76017,76022,76028,76034,76040,76058,76072,76078,76086,76092,76114,76119,76124,76129,76134,76139,76148,76157,76162],{"__ignoreMap":44},[49,73131,73132,73134,73136,73138],{"class":51,"line":52},[49,73133,52545],{"class":66},[49,73135,52548],{"class":147},[49,73137,52551],{"class":62},[49,73139,52554],{"class":66},[49,73141,73142,73144,73146,73148,73150,73152],{"class":51,"line":59},[49,73143,2300],{"class":66},[49,73145,51883],{"class":147},[49,73147,52563],{"class":62},[49,73149,1448],{"class":66},[49,73151,52568],{"class":1505},[49,73153,52554],{"class":66},[49,73155,73156],{"class":51,"line":70},[49,73157,3654],{"emptyLinePlaceholder":1330},[49,73159,73160,73162,73164],{"class":51,"line":86},[49,73161,2300],{"class":66},[49,73163,52581],{"class":147},[49,73165,52554],{"class":66},[49,73167,73168,73170,73172,73174,73176,73178],{"class":51,"line":98},[49,73169,53386],{"class":66},[49,73171,52591],{"class":147},[49,73173,52594],{"class":62},[49,73175,1448],{"class":66},[49,73177,52599],{"class":1505},[49,73179,52554],{"class":66},[49,73181,73182,73184,73186,73188,73190,73192,73194,73196,73198],{"class":51,"line":121},[49,73183,53386],{"class":66},[49,73185,52591],{"class":147},[49,73187,16171],{"class":62},[49,73189,1448],{"class":66},[49,73191,52638],{"class":1505},[49,73193,52618],{"class":62},[49,73195,1448],{"class":66},[49,73197,52645],{"class":1505},[49,73199,52554],{"class":66},[49,73201,73202,73204,73206,73208,73210],{"class":51,"line":134},[49,73203,53386],{"class":66},[49,73205,52654],{"class":147},[49,73207,52657],{"class":66},[49,73209,52654],{"class":147},[49,73211,52554],{"class":66},[49,73213,73214,73216,73218],{"class":51,"line":1085},[49,73215,53386],{"class":66},[49,73217,1305],{"class":147},[49,73219,52554],{"class":66},[49,73221,73222,73224],{"class":51,"line":2574},[49,73223,7655],{"class":147},[49,73225,67],{"class":66},[49,73227,73228,73230,73232,73234],{"class":51,"line":2586},[49,73229,55936],{"class":73},[49,73231,77],{"class":66},[49,73233,80],{"class":73},[49,73235,83],{"class":66},[49,73237,73238,73240,73242,73244],{"class":51,"line":2867},[49,73239,55947],{"class":73},[49,73241,77],{"class":66},[49,73243,80],{"class":73},[49,73245,83],{"class":66},[49,73247,73248],{"class":51,"line":2872},[49,73249,3441],{"class":66},[49,73251,73252],{"class":51,"line":2878},[49,73253,3654],{"emptyLinePlaceholder":1330},[49,73255,73256,73258],{"class":51,"line":2883},[49,73257,58518],{"class":147},[49,73259,67],{"class":66},[49,73261,73262,73264,73266,73268],{"class":51,"line":2897},[49,73263,58525],{"class":73},[49,73265,77],{"class":66},[49,73267,52835],{"class":73},[49,73269,83],{"class":66},[49,73271,73272,73274,73276,73278,73280],{"class":51,"line":2902},[49,73273,63314],{"class":73},[49,73275,77],{"class":66},[49,73277,875],{"class":73},[49,73279,110],{"class":109},[49,73281,83],{"class":66},[49,73283,73284],{"class":51,"line":2908},[49,73285,3441],{"class":66},[49,73287,73288],{"class":51,"line":2929},[49,73289,3654],{"emptyLinePlaceholder":1330},[49,73291,73292,73295],{"class":51,"line":2934},[49,73293,73294],{"class":62},"    .info",[49,73296,67],{"class":66},[49,73298,73299,73301,73303,73305,73307],{"class":51,"line":2948},[49,73300,56010],{"class":73},[49,73302,77],{"class":66},[49,73304,52735],{"class":73},[49,73306,110],{"class":109},[49,73308,83],{"class":66},[49,73310,73311,73313,73315,73317,73319,73321],{"class":51,"line":2953},[49,73312,55947],{"class":73},[49,73314,77],{"class":66},[49,73316,106],{"class":73},[49,73318,110],{"class":109},[49,73320,1077],{"class":73},[49,73322,83],{"class":66},[49,73324,73325,73327,73329,73331],{"class":51,"line":2982},[49,73326,58525],{"class":73},[49,73328,77],{"class":66},[49,73330,52835],{"class":73},[49,73332,83],{"class":66},[49,73334,73335],{"class":51,"line":2987},[49,73336,3441],{"class":66},[49,73338,73339],{"class":51,"line":3004},[49,73340,3654],{"emptyLinePlaceholder":1330},[49,73342,73343,73346],{"class":51,"line":3009},[49,73344,73345],{"class":62},"    .uname",[49,73347,32714],{"class":66},[49,73349,73350,73353],{"class":51,"line":3014},[49,73351,73352],{"class":62},"    .age",[49,73354,32714],{"class":66},[49,73356,73357,73360],{"class":51,"line":3019},[49,73358,73359],{"class":62},"    .salary",[49,73361,67],{"class":66},[49,73363,73364,73366,73368,73370,73372],{"class":51,"line":3033},[49,73365,56010],{"class":73},[49,73367,77],{"class":66},[49,73369,1703],{"class":73},[49,73371,110],{"class":109},[49,73373,83],{"class":66},[49,73375,73376,73378,73380,73382,73384],{"class":51,"line":3038},[49,73377,56024],{"class":73},[49,73379,77],{"class":66},[49,73381,875],{"class":73},[49,73383,110],{"class":109},[49,73385,83],{"class":66},[49,73387,73388,73390,73392,73394],{"class":51,"line":3831},[49,73389,63018],{"class":73},[49,73391,77],{"class":66},[49,73393,460],{"class":73},[49,73395,83],{"class":66},[49,73397,73398,73400,73402,73404,73406],{"class":51,"line":3845},[49,73399,62988],{"class":73},[49,73401,77],{"class":66},[49,73403,1966],{"class":73},[49,73405,110],{"class":109},[49,73407,83],{"class":66},[49,73409,73410],{"class":51,"line":3853},[49,73411,3441],{"class":66},[49,73413,73414],{"class":51,"line":3858},[49,73415,3654],{"emptyLinePlaceholder":1330},[49,73417,73418,73421],{"class":51,"line":3864},[49,73419,73420],{"class":62},"    .gender",[49,73422,32714],{"class":66},[49,73424,73425,73428],{"class":51,"line":3870},[49,73426,73427],{"class":62},"    .city",[49,73429,67],{"class":66},[49,73431,73432,73434,73436,73438,73440],{"class":51,"line":3875},[49,73433,56010],{"class":73},[49,73435,77],{"class":66},[49,73437,1703],{"class":73},[49,73439,110],{"class":109},[49,73441,83],{"class":66},[49,73443,73444,73446,73448,73450,73452],{"class":51,"line":9200},[49,73445,56024],{"class":73},[49,73447,77],{"class":66},[49,73449,2215],{"class":73},[49,73451,110],{"class":109},[49,73453,83],{"class":66},[49,73455,73456,73458,73460,73462],{"class":51,"line":9224},[49,73457,63018],{"class":73},[49,73459,77],{"class":66},[49,73461,460],{"class":73},[49,73463,83],{"class":66},[49,73465,73466,73468,73470,73472,73474],{"class":51,"line":9229},[49,73467,62988],{"class":73},[49,73469,77],{"class":66},[49,73471,1966],{"class":73},[49,73473,110],{"class":109},[49,73475,83],{"class":66},[49,73477,73478,73480,73482,73484,73486,73488,73491,73493,73495,73497,73500,73502,73504],{"class":51,"line":9235},[49,73479,63215],{"class":73},[49,73481,77],{"class":66},[49,73483,159],{"class":73},[49,73485,110],{"class":109},[49,73487,113],{"class":73},[49,73489,73490],{"class":73}," rgb",[49,73492,1403],{"class":66},[49,73494,2977],{"class":73},[49,73496,13687],{"class":66},[49,73498,73499],{"class":73},"197",[49,73501,13687],{"class":66},[49,73503,73499],{"class":73},[49,73505,3973],{"class":66},[49,73507,73508],{"class":51,"line":9262},[49,73509,3441],{"class":66},[49,73511,73512],{"class":51,"line":9267},[49,73513,3654],{"emptyLinePlaceholder":1330},[49,73515,73516,73519],{"class":51,"line":9273},[49,73517,73518],{"class":147},"    button",[49,73520,67],{"class":66},[49,73522,73523,73525,73527,73529,73531],{"class":51,"line":9285},[49,73524,56024],{"class":73},[49,73526,77],{"class":66},[49,73528,2215],{"class":73},[49,73530,110],{"class":109},[49,73532,83],{"class":66},[49,73534,73535,73537,73539,73541,73543],{"class":51,"line":9297},[49,73536,56010],{"class":73},[49,73538,77],{"class":66},[49,73540,1875],{"class":73},[49,73542,110],{"class":109},[49,73544,83],{"class":66},[49,73546,73547,73549,73551,73554,73556,73558,73560,73563,73565,73567],{"class":51,"line":9309},[49,73548,56123],{"class":73},[49,73550,77],{"class":66},[49,73552,73553],{"class":73},"rgb",[49,73555,1403],{"class":66},[49,73557,2358],{"class":73},[49,73559,13687],{"class":66},[49,73561,73562],{"class":73},"187",[49,73564,13687],{"class":66},[49,73566,1691],{"class":73},[49,73568,3973],{"class":66},[49,73570,73571,73573,73575,73577],{"class":51,"line":10968},[49,73572,58655],{"class":73},[49,73574,77],{"class":66},[49,73576,62081],{"class":73},[49,73578,83],{"class":66},[49,73580,73581,73583,73585,73587],{"class":51,"line":10993},[49,73582,63215],{"class":73},[49,73584,77],{"class":66},[49,73586,80],{"class":73},[49,73588,83],{"class":66},[49,73590,73591],{"class":51,"line":11016},[49,73592,3441],{"class":66},[49,73594,73595],{"class":51,"line":11040},[49,73596,3654],{"emptyLinePlaceholder":1330},[49,73598,73599,73601,73603],{"class":51,"line":11045},[49,73600,73518],{"class":147},[49,73602,52930],{"class":147},[49,73604,67],{"class":66},[49,73606,73607,73609,73611,73614],{"class":51,"line":11050},[49,73608,56248],{"class":73},[49,73610,77],{"class":66},[49,73612,73613],{"class":73},"inline-block",[49,73615,83],{"class":66},[49,73617,73618,73620,73622,73624,73626],{"class":51,"line":11055},[49,73619,56010],{"class":73},[49,73621,77],{"class":66},[49,73623,106],{"class":73},[49,73625,110],{"class":109},[49,73627,83],{"class":66},[49,73629,73630,73632,73634,73636,73638],{"class":51,"line":11064},[49,73631,56024],{"class":73},[49,73633,77],{"class":66},[49,73635,106],{"class":73},[49,73637,110],{"class":109},[49,73639,83],{"class":66},[49,73641,73642,73644,73646,73648,73650],{"class":51,"line":11069},[49,73643,58598],{"class":73},[49,73645,77],{"class":66},[49,73647,1863],{"class":73},[49,73649,110],{"class":109},[49,73651,83],{"class":66},[49,73653,73654,73656,73658,73660,73662,73664,73667],{"class":51,"line":11075},[49,73655,63215],{"class":73},[49,73657,77],{"class":66},[49,73659,159],{"class":73},[49,73661,110],{"class":109},[49,73663,113],{"class":73},[49,73665,73666],{"class":73}," #fff",[49,73668,83],{"class":66},[49,73670,73671,73673,73675,73677,73679],{"class":51,"line":11096},[49,73672,56373],{"class":73},[49,73674,77],{"class":66},[49,73676,1711],{"class":73},[49,73678,110],{"class":109},[49,73680,83],{"class":66},[49,73682,73683,73685,73687,73689,73691],{"class":51,"line":11102},[49,73684,62988],{"class":73},[49,73686,77],{"class":66},[49,73688,159],{"class":73},[49,73690,110],{"class":109},[49,73692,83],{"class":66},[49,73694,73695],{"class":51,"line":11116},[49,73696,3441],{"class":66},[49,73698,73699],{"class":51,"line":11122},[49,73700,3654],{"emptyLinePlaceholder":1330},[49,73702,73703,73706],{"class":51,"line":11149},[49,73704,73705],{"class":62},"    .total",[49,73707,67],{"class":66},[49,73709,73710,73712,73714,73716,73718],{"class":51,"line":11158},[49,73711,56010],{"class":73},[49,73713,77],{"class":66},[49,73715,62867],{"class":73},[49,73717,110],{"class":109},[49,73719,83],{"class":66},[49,73721,73722,73724,73726,73728,73730],{"class":51,"line":11164},[49,73723,56024],{"class":73},[49,73725,77],{"class":66},[49,73727,1793],{"class":73},[49,73729,110],{"class":109},[49,73731,83],{"class":66},[49,73733,73734,73736,73738,73740,73742],{"class":51,"line":11172},[49,73735,58598],{"class":73},[49,73737,77],{"class":66},[49,73739,1793],{"class":73},[49,73741,110],{"class":109},[49,73743,83],{"class":66},[49,73745,73746,73748,73750,73752],{"class":51,"line":11177},[49,73747,58525],{"class":73},[49,73749,77],{"class":66},[49,73751,1231],{"class":73},[49,73753,83],{"class":66},[49,73755,73756,73758,73760,73762,73764,73766,73768,73770],{"class":51,"line":17854},[49,73757,55947],{"class":73},[49,73759,77],{"class":66},[49,73761,1793],{"class":73},[49,73763,110],{"class":109},[49,73765,1077],{"class":73},[49,73767,3292],{"class":73},[49,73769,110],{"class":109},[49,73771,83],{"class":66},[49,73773,73774,73777,73779,73781,73783],{"class":51,"line":17860},[49,73775,73776],{"class":73},"      padding-right",[49,73778,77],{"class":66},[49,73780,106],{"class":73},[49,73782,110],{"class":109},[49,73784,83],{"class":66},[49,73786,73787,73789,73791,73793,73795],{"class":51,"line":17883},[49,73788,56161],{"class":73},[49,73790,77],{"class":66},[49,73792,1914],{"class":73},[49,73794,110],{"class":109},[49,73796,83],{"class":66},[49,73798,73799,73801,73803,73805,73807,73810,73812,73815,73817,73819],{"class":51,"line":17889},[49,73800,56123],{"class":73},[49,73802,77],{"class":66},[49,73804,73553],{"class":73},[49,73806,1403],{"class":66},[49,73808,73809],{"class":73},"237",[49,73811,13687],{"class":66},[49,73813,73814],{"class":73},"235",[49,73816,13687],{"class":66},[49,73818,73814],{"class":73},[49,73820,3973],{"class":66},[49,73822,73823,73826,73828,73830],{"class":51,"line":17912},[49,73824,73825],{"class":73},"      box-sizing",[49,73827,77],{"class":66},[49,73829,61744],{"class":73},[49,73831,83],{"class":66},[49,73833,73834],{"class":51,"line":17926},[49,73835,3441],{"class":66},[49,73837,73838],{"class":51,"line":17946},[49,73839,3654],{"emptyLinePlaceholder":1330},[49,73841,73842,73844,73846],{"class":51,"line":17952},[49,73843,73705],{"class":62},[49,73845,52930],{"class":147},[49,73847,67],{"class":66},[49,73849,73850,73852,73854,73856],{"class":51,"line":17963},[49,73851,58655],{"class":73},[49,73853,77],{"class":66},[49,73855,58660],{"class":73},[49,73857,83],{"class":66},[49,73859,73860],{"class":51,"line":17986},[49,73861,3441],{"class":66},[49,73863,73864],{"class":51,"line":18008},[49,73865,3654],{"emptyLinePlaceholder":1330},[49,73867,73868,73870],{"class":51,"line":18013},[49,73869,66258],{"class":147},[49,73871,67],{"class":66},[49,73873,73874,73876,73878,73880,73882],{"class":51,"line":18019},[49,73875,56010],{"class":73},[49,73877,77],{"class":66},[49,73879,62867],{"class":73},[49,73881,110],{"class":109},[49,73883,83],{"class":66},[49,73885,73886,73888,73890,73893],{"class":51,"line":18033},[49,73887,55947],{"class":73},[49,73889,77],{"class":66},[49,73891,73892],{"class":73},"auto",[49,73894,83],{"class":66},[49,73896,73897,73899,73901,73903],{"class":51,"line":18046},[49,73898,66265],{"class":73},[49,73900,77],{"class":66},[49,73902,66270],{"class":73},[49,73904,83],{"class":66},[49,73906,73907],{"class":51,"line":18051},[49,73908,3441],{"class":66},[49,73910,73911],{"class":51,"line":18065},[49,73912,3654],{"emptyLinePlaceholder":1330},[49,73914,73915,73917],{"class":51,"line":18070},[49,73916,66350],{"class":147},[49,73918,67],{"class":66},[49,73920,73921,73923,73925,73927,73929,73931,73933,73935,73937,73939],{"class":51,"line":18076},[49,73922,56123],{"class":73},[49,73924,77],{"class":66},[49,73926,73553],{"class":73},[49,73928,1403],{"class":66},[49,73930,73809],{"class":73},[49,73932,13687],{"class":66},[49,73934,73814],{"class":73},[49,73936,13687],{"class":66},[49,73938,73814],{"class":73},[49,73940,3973],{"class":66},[49,73942,73943],{"class":51,"line":18081},[49,73944,3441],{"class":66},[49,73946,73947],{"class":51,"line":18095},[49,73948,3654],{"emptyLinePlaceholder":1330},[49,73950,73951,73953],{"class":51,"line":18100},[49,73952,66350],{"class":147},[49,73954,32714],{"class":66},[49,73956,73957,73959],{"class":51,"line":18105},[49,73958,66416],{"class":147},[49,73960,67],{"class":66},[49,73962,73963,73965,73967,73969,73971],{"class":51,"line":18119},[49,73964,56024],{"class":73},[49,73966,77],{"class":66},[49,73968,1665],{"class":73},[49,73970,110],{"class":109},[49,73972,83],{"class":66},[49,73974,73975,73977,73979,73981],{"class":51,"line":18131},[49,73976,58525],{"class":73},[49,73978,77],{"class":66},[49,73980,304],{"class":73},[49,73982,83],{"class":66},[49,73984,73985,73987,73989,73991,73993],{"class":51,"line":18136},[49,73986,56161],{"class":73},[49,73988,77],{"class":66},[49,73990,1940],{"class":73},[49,73992,110],{"class":109},[49,73994,83],{"class":66},[49,73996,73997,73999,74001,74003,74005,74007,74009,74011,74014,74016,74019,74021,74023],{"class":51,"line":18149},[49,73998,63215],{"class":73},[49,74000,77],{"class":66},[49,74002,159],{"class":73},[49,74004,110],{"class":109},[49,74006,113],{"class":73},[49,74008,73490],{"class":73},[49,74010,1403],{"class":66},[49,74012,74013],{"class":73},"228",[49,74015,13687],{"class":66},[49,74017,74018],{"class":73},"225",[49,74020,13687],{"class":66},[49,74022,74018],{"class":73},[49,74024,3973],{"class":66},[49,74026,74027,74030,74032,74034,74036],{"class":51,"line":18154},[49,74028,74029],{"class":73},"      padding-left",[49,74031,77],{"class":66},[49,74033,1711],{"class":73},[49,74035,110],{"class":109},[49,74037,83],{"class":66},[49,74039,74040,74042,74044,74046,74049,74051,74053],{"class":51,"line":18159},[49,74041,63098],{"class":73},[49,74043,77],{"class":66},[49,74045,29369],{"class":73},[49,74047,74048],{"class":73}," linear",[49,74050,63105],{"class":73},[49,74052,2086],{"class":109},[49,74054,83],{"class":66},[49,74056,74057],{"class":51,"line":18164},[49,74058,3441],{"class":66},[49,74060,74061],{"class":51,"line":18177},[49,74062,3654],{"emptyLinePlaceholder":1330},[49,74064,74065,74068,74070,74072],{"class":51,"line":18182},[49,74066,74067],{"class":147},"    tbody",[49,74069,71379],{"class":147},[49,74071,62178],{"class":62},[49,74073,67],{"class":66},[49,74075,74076,74078,74080,74082,74084,74086,74088,74090,74092,74094],{"class":51,"line":33881},[49,74077,56123],{"class":73},[49,74079,77],{"class":66},[49,74081,73553],{"class":73},[49,74083,1403],{"class":66},[49,74085,73809],{"class":73},[49,74087,13687],{"class":66},[49,74089,73814],{"class":73},[49,74091,13687],{"class":66},[49,74093,73814],{"class":73},[49,74095,3973],{"class":66},[49,74097,74098,74100,74102,74104],{"class":51,"line":33887},[49,74099,63263],{"class":73},[49,74101,77],{"class":66},[49,74103,211],{"class":73},[49,74105,83],{"class":66},[49,74107,74108],{"class":51,"line":33893},[49,74109,3441],{"class":66},[49,74111,74112],{"class":51,"line":33899},[49,74113,3654],{"emptyLinePlaceholder":1330},[49,74115,74116,74118,74120,74123,74125],{"class":51,"line":33905},[49,74117,74067],{"class":147},[49,74119,71379],{"class":147},[49,74121,74122],{"class":147}," td",[49,74124,2655],{"class":147},[49,74126,67],{"class":66},[49,74128,74129,74131,74133,74135],{"class":51,"line":33916},[49,74130,56248],{"class":73},[49,74132,77],{"class":66},[49,74134,674],{"class":73},[49,74136,83],{"class":66},[49,74138,74139,74141,74143,74145,74147],{"class":51,"line":33922},[49,74140,56010],{"class":73},[49,74142,77],{"class":66},[49,74144,2297],{"class":73},[49,74146,110],{"class":109},[49,74148,83],{"class":66},[49,74150,74151,74153,74155,74157,74159],{"class":51,"line":33942},[49,74152,56024],{"class":73},[49,74154,77],{"class":66},[49,74156,2215],{"class":73},[49,74158,110],{"class":109},[49,74160,83],{"class":66},[49,74162,74163,74165,74167,74169,74171],{"class":51,"line":33948},[49,74164,58598],{"class":73},[49,74166,77],{"class":66},[49,74168,2215],{"class":73},[49,74170,110],{"class":109},[49,74172,83],{"class":66},[49,74174,74175,74177,74179,74181,74183],{"class":51,"line":33959},[49,74176,63314],{"class":73},[49,74178,77],{"class":66},[49,74180,1478],{"class":73},[49,74182,110],{"class":109},[49,74184,83],{"class":66},[49,74186,74187,74189,74191,74193],{"class":51,"line":33965},[49,74188,58655],{"class":73},[49,74190,77],{"class":66},[49,74192,62081],{"class":73},[49,74194,83],{"class":66},[49,74196,74197,74199,74201,74203],{"class":51,"line":33971},[49,74198,58525],{"class":73},[49,74200,77],{"class":66},[49,74202,52835],{"class":73},[49,74204,83],{"class":66},[49,74206,74207,74209,74211,74213],{"class":51,"line":33977},[49,74208,65206],{"class":73},[49,74210,77],{"class":66},[49,74212,460],{"class":73},[49,74214,83],{"class":66},[49,74216,74217,74219,74221,74224],{"class":51,"line":33983},[49,74218,56123],{"class":73},[49,74220,77],{"class":66},[49,74222,74223],{"class":73},"orange",[49,74225,83],{"class":66},[49,74227,74228,74230,74232,74235,74237],{"class":51,"line":33989},[49,74229,56373],{"class":73},[49,74231,77],{"class":66},[49,74233,74234],{"class":73},"12.5",[49,74236,110],{"class":109},[49,74238,83],{"class":66},[49,74240,74241],{"class":51,"line":33995},[49,74242,3441],{"class":66},[49,74244,74245,74247,74249],{"class":51,"line":34001},[49,74246,53659],{"class":66},[49,74248,1305],{"class":147},[49,74250,52554],{"class":66},[49,74252,74253,74255,74257],{"class":51,"line":34021},[49,74254,53027],{"class":66},[49,74256,52581],{"class":147},[49,74258,52554],{"class":66},[49,74260,74261],{"class":51,"line":34027},[49,74262,3654],{"emptyLinePlaceholder":1330},[49,74264,74265,74267,74269],{"class":51,"line":34043},[49,74266,2300],{"class":66},[49,74268,53042],{"class":147},[49,74270,52554],{"class":66},[49,74272,74273,74275,74277,74280,74282],{"class":51,"line":34049},[49,74274,53386],{"class":66},[49,74276,14],{"class":147},[49,74278,74279],{"class":66},">学生就业统计表\u003C\u002F",[49,74281,14],{"class":147},[49,74283,52554],{"class":66},[49,74285,74286,74288,74290,74292,74294,74296,74298,74300,74302],{"class":51,"line":34063},[49,74287,53386],{"class":66},[49,74289,67860],{"class":147},[49,74291,54728],{"class":62},[49,74293,1448],{"class":66},[49,74295,63900],{"class":1505},[49,74297,70305],{"class":62},[49,74299,1448],{"class":66},[49,74301,33024],{"class":1505},[49,74303,52554],{"class":66},[49,74305,74306,74308,74310,74312,74314,74316,74318,74320,74322,74324,74326,74329,74331,74333,74335],{"class":51,"line":34069},[49,74307,52588],{"class":66},[49,74309,448],{"class":147},[49,74311,55065],{"class":62},[49,74313,1448],{"class":66},[49,74315,63935],{"class":1505},[49,74317,16171],{"class":62},[49,74319,1448],{"class":66},[49,74321,70331],{"class":1505},[49,74323,62258],{"class":62},[49,74325,1448],{"class":66},[49,74327,74328],{"class":1505},"\"姓名\"",[49,74330,54728],{"class":62},[49,74332,1448],{"class":66},[49,74334,70331],{"class":1505},[49,74336,52554],{"class":66},[49,74338,74339,74341,74343,74345,74347,74349,74351,74353,74355,74357,74359,74362,74364,74366,74368],{"class":51,"line":34084},[49,74340,52588],{"class":66},[49,74342,448],{"class":147},[49,74344,55065],{"class":62},[49,74346,1448],{"class":66},[49,74348,63935],{"class":1505},[49,74350,16171],{"class":62},[49,74352,1448],{"class":66},[49,74354,70359],{"class":1505},[49,74356,62258],{"class":62},[49,74358,1448],{"class":66},[49,74360,74361],{"class":1505},"\"年龄\"",[49,74363,54728],{"class":62},[49,74365,1448],{"class":66},[49,74367,70359],{"class":1505},[49,74369,52554],{"class":66},[49,74371,74372,74374,74376,74378,74380,74382,74384,74386,74388,74390,74392,74395,74397,74399,74401],{"class":51,"line":34090},[49,74373,52588],{"class":66},[49,74375,448],{"class":147},[49,74377,55065],{"class":62},[49,74379,1448],{"class":66},[49,74381,63935],{"class":1505},[49,74383,16171],{"class":62},[49,74385,1448],{"class":66},[49,74387,70461],{"class":1505},[49,74389,62258],{"class":62},[49,74391,1448],{"class":66},[49,74393,74394],{"class":1505},"\"薪资\"",[49,74396,54728],{"class":62},[49,74398,1448],{"class":66},[49,74400,70461],{"class":1505},[49,74402,52554],{"class":66},[49,74404,74405,74407,74409,74411,74413,74415,74417,74419,74421,74423,74425,74427],{"class":51,"line":34099},[49,74406,52588],{"class":66},[49,74408,70379],{"class":147},[49,74410,16171],{"class":62},[49,74412,1448],{"class":66},[49,74414,70386],{"class":1505},[49,74416,16210],{"class":62},[49,74418,1448],{"class":66},[49,74420,8904],{"class":1505},[49,74422,54728],{"class":62},[49,74424,1448],{"class":66},[49,74426,70386],{"class":1505},[49,74428,52554],{"class":66},[49,74430,74431,74433,74435,74437,74439,74441,74443,74445],{"class":51,"line":34105},[49,74432,56473],{"class":66},[49,74434,70401],{"class":147},[49,74436,67886],{"class":62},[49,74438,1448],{"class":66},[49,74440,11213],{"class":1505},[49,74442,70410],{"class":66},[49,74444,70401],{"class":147},[49,74446,52554],{"class":66},[49,74448,74449,74451,74453,74455,74457,74459,74461,74463],{"class":51,"line":34114},[49,74450,56473],{"class":66},[49,74452,70401],{"class":147},[49,74454,67886],{"class":62},[49,74456,1448],{"class":66},[49,74458,11282],{"class":1505},[49,74460,70429],{"class":66},[49,74462,70401],{"class":147},[49,74464,52554],{"class":66},[49,74466,74467,74469,74471],{"class":51,"line":34120},[49,74468,53018],{"class":66},[49,74470,70379],{"class":147},[49,74472,52554],{"class":66},[49,74474,74475,74477,74479,74481,74483,74485,74487,74489,74491,74493,74495,74497],{"class":51,"line":34126},[49,74476,52588],{"class":66},[49,74478,70379],{"class":147},[49,74480,16171],{"class":62},[49,74482,1448],{"class":66},[49,74484,70483],{"class":1505},[49,74486,16210],{"class":62},[49,74488,1448],{"class":66},[49,74490,8904],{"class":1505},[49,74492,54728],{"class":62},[49,74494,1448],{"class":66},[49,74496,70483],{"class":1505},[49,74498,52554],{"class":66},[49,74500,74501,74503,74505,74507,74509,74511,74513,74515],{"class":51,"line":34135},[49,74502,56473],{"class":66},[49,74504,70401],{"class":147},[49,74506,67886],{"class":62},[49,74508,1448],{"class":66},[49,74510,70504],{"class":1505},[49,74512,70507],{"class":66},[49,74514,70401],{"class":147},[49,74516,52554],{"class":66},[49,74518,74519,74521,74523,74525,74527,74529,74531,74533],{"class":51,"line":34141},[49,74520,56473],{"class":66},[49,74522,70401],{"class":147},[49,74524,67886],{"class":62},[49,74526,1448],{"class":66},[49,74528,70524],{"class":1505},[49,74530,70527],{"class":66},[49,74532,70401],{"class":147},[49,74534,52554],{"class":66},[49,74536,74537,74539,74541,74543,74545,74547,74549,74551],{"class":51,"line":34152},[49,74538,56473],{"class":66},[49,74540,70401],{"class":147},[49,74542,67886],{"class":62},[49,74544,1448],{"class":66},[49,74546,70544],{"class":1505},[49,74548,70547],{"class":66},[49,74550,70401],{"class":147},[49,74552,52554],{"class":66},[49,74554,74555,74557,74559,74561,74563,74565,74567,74569],{"class":51,"line":34158},[49,74556,56473],{"class":66},[49,74558,70401],{"class":147},[49,74560,67886],{"class":62},[49,74562,1448],{"class":66},[49,74564,70564],{"class":1505},[49,74566,70567],{"class":66},[49,74568,70401],{"class":147},[49,74570,52554],{"class":66},[49,74572,74573,74575,74577,74579,74581,74583,74585,74587],{"class":51,"line":34177},[49,74574,56473],{"class":66},[49,74576,70401],{"class":147},[49,74578,67886],{"class":62},[49,74580,1448],{"class":66},[49,74582,70584],{"class":1505},[49,74584,70587],{"class":66},[49,74586,70401],{"class":147},[49,74588,52554],{"class":66},[49,74590,74591,74593,74595],{"class":51,"line":34183},[49,74592,53018],{"class":66},[49,74594,70379],{"class":147},[49,74596,52554],{"class":66},[49,74598,74599,74601,74603],{"class":51,"line":34194},[49,74600,52588],{"class":66},[49,74602,55128],{"class":147},[49,74604,52554],{"class":66},[49,74606,74607,74609,74611,74614,74616,74619,74621],{"class":51,"line":34200},[49,74608,56473],{"class":66},[49,74610,49],{"class":147},[49,74612,74613],{"class":66},">+\u003C\u002F",[49,74615,49],{"class":147},[49,74617,74618],{"class":66},">添加\u003C\u002F",[49,74620,55128],{"class":147},[49,74622,52554],{"class":66},[49,74624,74625,74627,74629],{"class":51,"line":34220},[49,74626,53659],{"class":66},[49,74628,67860],{"class":147},[49,74630,52554],{"class":66},[49,74632,74633,74635,74637,74639,74641,74643,74646,74648,74651,74653,74656,74658],{"class":51,"line":34236},[49,74634,53386],{"class":66},[49,74636,148],{"class":147},[49,74638,54728],{"class":62},[49,74640,1448],{"class":66},[49,74642,63816],{"class":1505},[49,74644,74645],{"class":66},">共有数据 \u003C",[49,74647,49],{"class":147},[49,74649,74650],{"class":66},">0\u003C\u002F",[49,74652,49],{"class":147},[49,74654,74655],{"class":66},"> 条\u003C\u002F",[49,74657,148],{"class":147},[49,74659,52554],{"class":66},[49,74661,74662,74664,74666],{"class":51,"line":34242},[49,74663,53386],{"class":66},[49,74665,293],{"class":147},[49,74667,52554],{"class":66},[49,74669,74670,74672,74674],{"class":51,"line":34256},[49,74671,52588],{"class":66},[49,74673,296],{"class":147},[49,74675,52554],{"class":66},[49,74677,74678,74680,74682],{"class":51,"line":34262},[49,74679,56473],{"class":66},[49,74681,299],{"class":147},[49,74683,52554],{"class":66},[49,74685,74686,74688,74690,74693,74695],{"class":51,"line":34268},[49,74687,56541],{"class":66},[49,74689,302],{"class":147},[49,74691,74692],{"class":66},">ID\u003C\u002F",[49,74694,302],{"class":147},[49,74696,52554],{"class":66},[49,74698,74699,74701,74703,74705,74707],{"class":51,"line":34279},[49,74700,56541],{"class":66},[49,74702,302],{"class":147},[49,74704,70690],{"class":66},[49,74706,302],{"class":147},[49,74708,52554],{"class":66},[49,74710,74711,74713,74715,74717,74719],{"class":51,"line":34285},[49,74712,56541],{"class":66},[49,74714,302],{"class":147},[49,74716,70703],{"class":66},[49,74718,302],{"class":147},[49,74720,52554],{"class":66},[49,74722,74723,74725,74727,74729,74731],{"class":51,"line":34291},[49,74724,56541],{"class":66},[49,74726,302],{"class":147},[49,74728,70716],{"class":66},[49,74730,302],{"class":147},[49,74732,52554],{"class":66},[49,74734,74735,74737,74739,74741,74743],{"class":51,"line":34301},[49,74736,56541],{"class":66},[49,74738,302],{"class":147},[49,74740,70729],{"class":66},[49,74742,302],{"class":147},[49,74744,52554],{"class":66},[49,74746,74747,74749,74751,74753,74755],{"class":51,"line":34307},[49,74748,56541],{"class":66},[49,74750,302],{"class":147},[49,74752,70742],{"class":66},[49,74754,302],{"class":147},[49,74756,52554],{"class":66},[49,74758,74759,74761,74763,74766,74768],{"class":51,"line":34318},[49,74760,56541],{"class":66},[49,74762,302],{"class":147},[49,74764,74765],{"class":66},">录入时间\u003C\u002F",[49,74767,302],{"class":147},[49,74769,52554],{"class":66},[49,74771,74772,74774,74776,74778,74780],{"class":51,"line":34324},[49,74773,56541],{"class":66},[49,74775,302],{"class":147},[49,74777,70755],{"class":66},[49,74779,302],{"class":147},[49,74781,52554],{"class":66},[49,74783,74784,74786,74788],{"class":51,"line":34334},[49,74785,56646],{"class":66},[49,74787,299],{"class":147},[49,74789,52554],{"class":66},[49,74791,74792,74794,74796],{"class":51,"line":34339},[49,74793,53018],{"class":66},[49,74795,296],{"class":147},[49,74797,52554],{"class":66},[49,74799,74800,74802,74804],{"class":51,"line":34345},[49,74801,52588],{"class":66},[49,74803,310],{"class":147},[49,74805,52554],{"class":66},[49,74807,74808],{"class":51,"line":34394},[49,74809,74810],{"class":55},"      \u003C!-- \u003Ctr>\n",[49,74812,74813],{"class":51,"line":34441},[49,74814,74815],{"class":55},"        \u003Ctd>1\u003C\u002Ftd>\n",[49,74817,74818],{"class":51,"line":34446},[49,74819,74815],{"class":55},[49,74821,74822],{"class":51,"line":34452},[49,74823,74815],{"class":55},[49,74825,74826],{"class":51,"line":34471},[49,74827,74815],{"class":55},[49,74829,74830],{"class":51,"line":34477},[49,74831,74815],{"class":55},[49,74833,74834],{"class":51,"line":34497},[49,74835,74815],{"class":55},[49,74837,74838],{"class":51,"line":34503},[49,74839,74815],{"class":55},[49,74841,74842],{"class":51,"line":34509},[49,74843,74844],{"class":55},"        \u003Ctd>\n",[49,74846,74847],{"class":51,"line":34519},[49,74848,74849],{"class":55},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[49,74851,74852],{"class":51,"line":34524},[49,74853,74854],{"class":55},"        \u003C\u002Ftd>\n",[49,74856,74857],{"class":51,"line":34530},[49,74858,74859],{"class":55},"      \u003C\u002Ftr> -->\n",[49,74861,74862,74864,74866],{"class":51,"line":34546},[49,74863,53018],{"class":66},[49,74865,310],{"class":147},[49,74867,52554],{"class":66},[49,74869,74870,74872,74874],{"class":51,"line":34591},[49,74871,53659],{"class":66},[49,74873,293],{"class":147},[49,74875,52554],{"class":66},[49,74877,74878,74880,74882],{"class":51,"line":34597},[49,74879,53386],{"class":66},[49,74881,53055],{"class":147},[49,74883,52554],{"class":66},[49,74885,74886],{"class":51,"line":34603},[49,74887,74888],{"class":55},"    \u002F\u002F const initData = [{\n",[49,74890,74891],{"class":51,"line":34609},[49,74892,74893],{"class":55},"    \u002F\u002F   unameId: 1,\n",[49,74895,74896],{"class":51,"line":34620},[49,74897,74898],{"class":55},"    \u002F\u002F   uname: '华晨宇',\n",[49,74900,74901],{"class":51,"line":34626},[49,74902,74903],{"class":55},"    \u002F\u002F   age: 22,\n",[49,74905,74906],{"class":51,"line":34632},[49,74907,74908],{"class":55},"    \u002F\u002F   salary: 12000,\n",[49,74910,74911],{"class":51,"line":34638},[49,74912,74913],{"class":55},"    \u002F\u002F   gender: '男',\n",[49,74915,74916],{"class":51,"line":34656},[49,74917,74918],{"class":55},"    \u002F\u002F   city: '北京',\n",[49,74920,74921],{"class":51,"line":34670},[49,74922,74923],{"class":55},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[49,74925,74926],{"class":51,"line":34679},[49,74927,74928],{"class":55},"    \u002F\u002F }]\n",[49,74930,74931],{"class":51,"line":34688},[49,74932,74933],{"class":55},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[49,74935,74936],{"class":51,"line":34697},[49,74937,74938],{"class":55},"    \u002F\u002F 1.渲染业务\n",[49,74940,74941],{"class":51,"line":34706},[49,74942,74943],{"class":55},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[49,74945,74946],{"class":51,"line":34712},[49,74947,74948],{"class":55},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[49,74950,74951],{"class":51,"line":34718},[49,74952,74953],{"class":55},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[49,74955,74956],{"class":51,"line":34726},[49,74957,3654],{"emptyLinePlaceholder":1330},[49,74959,74960],{"class":51,"line":34731},[49,74961,74962],{"class":55},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[49,74964,74965],{"class":51,"line":34737},[49,74966,74967],{"class":55},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[49,74969,74970,74972,74974,74976],{"class":51,"line":34748},[49,74971,12473],{"class":109},[49,74973,58934],{"class":73},[49,74975,14816],{"class":109},[49,74977,53080],{"class":66},[49,74979,74980,74983,74985],{"class":51,"line":34754},[49,74981,74982],{"class":66},"    console.",[49,74984,59486],{"class":62},[49,74986,53654],{"class":66},[49,74988,74989],{"class":51,"line":34774},[49,74990,3654],{"emptyLinePlaceholder":1330},[49,74992,74993],{"class":51,"line":34780},[49,74994,74995],{"class":55},"    \u002F\u002F 时间函数\n",[49,74997,74998,75000,75003],{"class":51,"line":34786},[49,74999,71319],{"class":109},[49,75001,75002],{"class":62}," getTime",[49,75004,12105],{"class":66},[49,75006,75007,75009,75012,75014,75016,75019],{"class":51,"line":34792},[49,75008,59467],{"class":109},[49,75010,75011],{"class":73}," date",[49,75013,14816],{"class":109},[49,75015,12830],{"class":109},[49,75017,75018],{"class":62}," Date",[49,75020,3230],{"class":66},[49,75022,75023,75025,75027,75029,75032,75035,75037,75039,75041,75044,75047,75049,75051,75053,75055,75057,75059,75061],{"class":51,"line":34809},[49,75024,59467],{"class":109},[49,75026,17341],{"class":73},[49,75028,14816],{"class":109},[49,75030,75031],{"class":66}," date.",[49,75033,75034],{"class":62},"getHours",[49,75036,14302],{"class":66},[49,75038,2300],{"class":109},[49,75040,3292],{"class":73},[49,75042,75043],{"class":109}," ?",[49,75045,75046],{"class":1505}," '0'",[49,75048,46814],{"class":109},[49,75050,75031],{"class":66},[49,75052,75034],{"class":62},[49,75054,14302],{"class":66},[49,75056,2249],{"class":109},[49,75058,75031],{"class":66},[49,75060,75034],{"class":62},[49,75062,3230],{"class":66},[49,75064,75065,75067,75070,75072,75074,75077,75079,75081,75083,75085,75087,75089,75091,75093,75095,75097,75099,75101],{"class":51,"line":34815},[49,75066,59467],{"class":109},[49,75068,75069],{"class":73}," m",[49,75071,14816],{"class":109},[49,75073,75031],{"class":66},[49,75075,75076],{"class":62},"getMinutes",[49,75078,14302],{"class":66},[49,75080,2300],{"class":109},[49,75082,3292],{"class":73},[49,75084,75043],{"class":109},[49,75086,75046],{"class":1505},[49,75088,46814],{"class":109},[49,75090,75031],{"class":66},[49,75092,75076],{"class":62},[49,75094,14302],{"class":66},[49,75096,2249],{"class":109},[49,75098,75031],{"class":66},[49,75100,75076],{"class":62},[49,75102,3230],{"class":66},[49,75104,75105,75107,75109,75111,75113,75116,75118,75120,75122,75124,75126,75128,75130,75132,75134,75136,75138,75140],{"class":51,"line":34821},[49,75106,59467],{"class":109},[49,75108,9680],{"class":73},[49,75110,14816],{"class":109},[49,75112,75031],{"class":66},[49,75114,75115],{"class":62},"getSeconds",[49,75117,14302],{"class":66},[49,75119,2300],{"class":109},[49,75121,3292],{"class":73},[49,75123,75043],{"class":109},[49,75125,75046],{"class":1505},[49,75127,46814],{"class":109},[49,75129,75031],{"class":66},[49,75131,75115],{"class":62},[49,75133,14302],{"class":66},[49,75135,2249],{"class":109},[49,75137,75031],{"class":66},[49,75139,75115],{"class":62},[49,75141,3230],{"class":66},[49,75143,75144,75146,75149,75151,75153,75156,75158,75161,75163,75166,75168,75170,75173,75175,75177,75179,75181,75183,75185,75188,75190,75193,75195,75198,75200,75202,75204],{"class":51,"line":34827},[49,75145,59467],{"class":109},[49,75147,75148],{"class":73}," str",[49,75150,14816],{"class":109},[49,75152,64139],{"class":1505},[49,75154,75155],{"class":66},"date",[49,75157,1949],{"class":1505},[49,75159,75160],{"class":62},"getFullYear",[49,75162,3681],{"class":1505},[49,75164,75165],{"class":1505},"}\u002F${",[49,75167,75155],{"class":66},[49,75169,1949],{"class":1505},[49,75171,75172],{"class":62},"getMonth",[49,75174,14302],{"class":1505},[49,75176,1872],{"class":109},[49,75178,26367],{"class":73},[49,75180,75165],{"class":1505},[49,75182,75155],{"class":66},[49,75184,1949],{"class":1505},[49,75186,75187],{"class":62},"getDate",[49,75189,3681],{"class":1505},[49,75191,75192],{"class":1505},"} ${",[49,75194,1807],{"class":66},[49,75196,75197],{"class":1505},"}:${",[49,75199,1935],{"class":66},[49,75201,75197],{"class":1505},[49,75203,2086],{"class":66},[49,75205,75206],{"class":1505},"}`\n",[49,75208,75209,75212],{"class":51,"line":34833},[49,75210,75211],{"class":109},"      return",[49,75213,75214],{"class":66}," str\n",[49,75216,75217],{"class":51,"line":34839},[49,75218,3441],{"class":66},[49,75220,75221],{"class":51,"line":34866},[49,75222,75223],{"class":55},"    \u002F\u002F 渲染函数\n",[49,75225,75226,75228,75230,75232,75234,75236,75238,75240],{"class":51,"line":34890},[49,75227,12473],{"class":109},[49,75229,70982],{"class":73},[49,75231,14816],{"class":109},[49,75233,55637],{"class":66},[49,75235,55640],{"class":62},[49,75237,1403],{"class":66},[49,75239,70993],{"class":1505},[49,75241,1409],{"class":66},[49,75243,75244,75246,75248],{"class":51,"line":34896},[49,75245,71319],{"class":109},[49,75247,71322],{"class":62},[49,75249,12105],{"class":66},[49,75251,75252],{"class":51,"line":34902},[49,75253,75254],{"class":55},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[49,75256,75257],{"class":51,"line":34908},[49,75258,75259],{"class":55},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[49,75261,75262,75264,75267,75269,75271,75274,75276,75278,75280,75283,75285,75288],{"class":51,"line":34919},[49,75263,59467],{"class":109},[49,75265,75266],{"class":73}," trArr",[49,75268,14816],{"class":109},[49,75270,53207],{"class":66},[49,75272,75273],{"class":62},"map",[49,75275,1403],{"class":66},[49,75277,55690],{"class":109},[49,75279,2913],{"class":66},[49,75281,75282],{"class":6468},"ele",[49,75284,13687],{"class":66},[49,75286,75287],{"class":6468},"index",[49,75289,13694],{"class":66},[49,75291,75292,75294],{"class":51,"line":34930},[49,75293,16003],{"class":109},[49,75295,71403],{"class":1505},[49,75297,75298],{"class":51,"line":34936},[49,75299,75300],{"class":1505},"      \u003Ctr>\n",[49,75302,75303,75305,75307,75309,75312],{"class":51,"line":34953},[49,75304,71408],{"class":1505},[49,75306,75282],{"class":66},[49,75308,1949],{"class":1505},[49,75310,75311],{"class":66},"unameId",[49,75313,71423],{"class":1505},[49,75315,75316,75318,75320,75322,75324],{"class":51,"line":34976},[49,75317,71408],{"class":1505},[49,75319,75282],{"class":66},[49,75321,1949],{"class":1505},[49,75323,71439],{"class":66},[49,75325,71423],{"class":1505},[49,75327,75328,75330,75332,75334,75336],{"class":51,"line":34999},[49,75329,71408],{"class":1505},[49,75331,75282],{"class":66},[49,75333,1949],{"class":1505},[49,75335,71456],{"class":66},[49,75337,71423],{"class":1505},[49,75339,75340,75342,75344,75346,75348],{"class":51,"line":35005},[49,75341,71408],{"class":1505},[49,75343,75282],{"class":66},[49,75345,1949],{"class":1505},[49,75347,71473],{"class":66},[49,75349,71423],{"class":1505},[49,75351,75352,75354,75356,75358,75360],{"class":51,"line":35010},[49,75353,71408],{"class":1505},[49,75355,75282],{"class":66},[49,75357,1949],{"class":1505},[49,75359,71490],{"class":66},[49,75361,71423],{"class":1505},[49,75363,75364,75366,75368,75370,75372],{"class":51,"line":35019},[49,75365,71408],{"class":1505},[49,75367,75282],{"class":66},[49,75369,1949],{"class":1505},[49,75371,71507],{"class":66},[49,75373,71423],{"class":1505},[49,75375,75376,75378,75380,75382,75384],{"class":51,"line":35029},[49,75377,71408],{"class":1505},[49,75379,75282],{"class":66},[49,75381,1949],{"class":1505},[49,75383,3641],{"class":66},[49,75385,71423],{"class":1505},[49,75387,75388],{"class":51,"line":35035},[49,75389,74844],{"class":1505},[49,75391,75392,75395,75397],{"class":51,"line":35040},[49,75393,75394],{"class":1505},"          \u003Ca href=\"#\" data-id=\"${",[49,75396,75287],{"class":66},[49,75398,75399],{"class":1505},"}\">删除\u003C\u002Fa>\n",[49,75401,75402],{"class":51,"line":35046},[49,75403,74854],{"class":1505},[49,75405,75406],{"class":51,"line":35059},[49,75407,75408],{"class":1505},"      \u003C\u002Ftr>\n",[49,75410,75411],{"class":51,"line":35065},[49,75412,75413],{"class":1505},"  `\n",[49,75415,75416],{"class":51,"line":35076},[49,75417,66050],{"class":66},[49,75419,75420,75422,75424],{"class":51,"line":35087},[49,75421,59483],{"class":66},[49,75423,59486],{"class":62},[49,75425,75426],{"class":66},"(trArr)\n",[49,75428,75429],{"class":51,"line":35106},[49,75430,3654],{"emptyLinePlaceholder":1330},[49,75432,75433],{"class":51,"line":50766},[49,75434,75435],{"class":55},"      \u002F\u002F (2) 把数组转换为字符串join\n",[49,75437,75438],{"class":51,"line":50771},[49,75439,75440],{"class":55},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[49,75442,75443,75445,75447,75450,75453,75455,75458],{"class":51,"line":50780},[49,75444,71334],{"class":66},[49,75446,1448],{"class":109},[49,75448,75449],{"class":66}," trArr.",[49,75451,75452],{"class":62},"join",[49,75454,1403],{"class":66},[49,75456,75457],{"class":1505},"''",[49,75459,1409],{"class":66},[49,75461,75462],{"class":51,"line":50789},[49,75463,75464],{"class":55},"      \u002F\u002F 显示共有几条\n",[49,75466,75467,75469,75471,75473,75476,75479,75481,75483],{"class":51,"line":50794},[49,75468,57010],{"class":66},[49,75470,55640],{"class":62},[49,75472,1403],{"class":66},[49,75474,75475],{"class":1505},"'.total span'",[49,75477,75478],{"class":66},").innerHTML ",[49,75480,1448],{"class":109},[49,75482,53207],{"class":66},[49,75484,57070],{"class":73},[49,75486,75487],{"class":51,"line":50799},[49,75488,3441],{"class":66},[49,75490,75491],{"class":51,"line":50804},[49,75492,75493],{"class":55},"    \u002F\u002F render()\n",[49,75495,75496],{"class":51,"line":50817},[49,75497,3654],{"emptyLinePlaceholder":1330},[49,75499,75500],{"class":51,"line":50822},[49,75501,75502],{"class":55},"    \u002F\u002F 获取DOM对象\n",[49,75504,75505,75507,75509,75511,75513,75515,75517,75519],{"class":51,"line":50831},[49,75506,12473],{"class":109},[49,75508,71056],{"class":73},[49,75510,14816],{"class":109},[49,75512,55637],{"class":66},[49,75514,55640],{"class":62},[49,75516,1403],{"class":66},[49,75518,71067],{"class":1505},[49,75520,1409],{"class":66},[49,75522,75523,75525,75527,75529,75531,75533,75535,75537],{"class":51,"line":50840},[49,75524,12473],{"class":109},[49,75526,70883],{"class":73},[49,75528,14816],{"class":109},[49,75530,55637],{"class":66},[49,75532,55640],{"class":62},[49,75534,1403],{"class":66},[49,75536,70894],{"class":1505},[49,75538,1409],{"class":66},[49,75540,75541,75543,75545,75547,75549,75551,75553,75555],{"class":51,"line":50857},[49,75542,12473],{"class":109},[49,75544,16939],{"class":73},[49,75546,14816],{"class":109},[49,75548,55637],{"class":66},[49,75550,55640],{"class":62},[49,75552,1403],{"class":66},[49,75554,70913],{"class":1505},[49,75556,1409],{"class":66},[49,75558,75560,75562,75564,75566,75568,75570,75572,75574],{"class":51,"line":75559},231,[49,75561,12473],{"class":109},[49,75563,70942],{"class":73},[49,75565,14816],{"class":109},[49,75567,55637],{"class":66},[49,75569,55640],{"class":62},[49,75571,1403],{"class":66},[49,75573,70953],{"class":1505},[49,75575,1409],{"class":66},[49,75577,75579,75581,75583,75585,75587,75589,75591,75593],{"class":51,"line":75578},232,[49,75580,12473],{"class":109},[49,75582,70922],{"class":73},[49,75584,14816],{"class":109},[49,75586,55637],{"class":66},[49,75588,55640],{"class":62},[49,75590,1403],{"class":66},[49,75592,70933],{"class":1505},[49,75594,1409],{"class":66},[49,75596,75598,75600,75602,75604,75606,75608,75610,75612],{"class":51,"line":75597},233,[49,75599,12473],{"class":109},[49,75601,70962],{"class":73},[49,75603,14816],{"class":109},[49,75605,55637],{"class":66},[49,75607,55640],{"class":62},[49,75609,1403],{"class":66},[49,75611,70973],{"class":1505},[49,75613,1409],{"class":66},[49,75615,75617],{"class":51,"line":75616},234,[49,75618,3654],{"emptyLinePlaceholder":1330},[49,75620,75622],{"class":51,"line":75621},235,[49,75623,75624],{"class":55},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[49,75626,75628,75630,75632,75634,75636,75638,75640,75642,75644],{"class":51,"line":75627},236,[49,75629,71074],{"class":66},[49,75631,59052],{"class":62},[49,75633,1403],{"class":66},[49,75635,71081],{"class":1505},[49,75637,13687],{"class":66},[49,75639,55690],{"class":109},[49,75641,2913],{"class":66},[49,75643,1475],{"class":6468},[49,75645,13694],{"class":66},[49,75647,75649],{"class":51,"line":75648},237,[49,75650,75651],{"class":55},"      \u002F\u002F 禁止浏览器跳转\n",[49,75653,75655,75657,75659],{"class":51,"line":75654},238,[49,75656,71101],{"class":66},[49,75658,71104],{"class":62},[49,75660,3230],{"class":66},[49,75662,75664],{"class":51,"line":75663},239,[49,75665,75666],{"class":55},"      \u002F\u002F 非空判断\n",[49,75668,75670],{"class":51,"line":75669},240,[49,75671,75672],{"class":55},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[49,75674,75676],{"class":51,"line":75675},241,[49,75677,75678],{"class":55},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[49,75680,75682,75684,75686,75688,75691,75693,75696,75699,75701,75703],{"class":51,"line":75681},242,[49,75683,55721],{"class":109},[49,75685,2913],{"class":66},[49,75687,1618],{"class":109},[49,75689,75690],{"class":66},"uname.value ",[49,75692,72587],{"class":109},[49,75694,75695],{"class":109}," !",[49,75697,75698],{"class":66},"age.value ",[49,75700,72587],{"class":109},[49,75702,75695],{"class":109},[49,75704,75705],{"class":66},"salary.value) {\n",[49,75707,75709,75711,75713,75715,75717],{"class":51,"line":75708},243,[49,75710,16003],{"class":109},[49,75712,71175],{"class":62},[49,75714,1403],{"class":66},[49,75716,71180],{"class":1505},[49,75718,1409],{"class":66},[49,75720,75722],{"class":51,"line":75721},244,[49,75723,53640],{"class":66},[49,75725,75727,75729,75731],{"class":51,"line":75726},245,[49,75728,59246],{"class":66},[49,75730,53126],{"class":62},[49,75732,75733],{"class":66},"({\n",[49,75735,75737],{"class":51,"line":75736},246,[49,75738,75739],{"class":55},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[49,75741,75743],{"class":51,"line":75742},247,[49,75744,75745],{"class":55},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[49,75747,75749],{"class":51,"line":75748},248,[49,75750,75751],{"class":55},"        \u002F\u002F 对象的序号应为数组长度+1\n",[49,75753,75755],{"class":51,"line":75754},249,[49,75756,75757],{"class":55},"        \u002F\u002F unameId: arr.length + 1,\n",[49,75759,75761],{"class":51,"line":75760},250,[49,75762,3654],{"emptyLinePlaceholder":1330},[49,75764,75766],{"class":51,"line":75765},251,[49,75767,75768],{"class":55},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[49,75770,75772],{"class":51,"line":75771},252,[49,75773,75774],{"class":55},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[49,75776,75778],{"class":51,"line":75777},253,[49,75779,75780],{"class":55},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[49,75782,75784],{"class":51,"line":75783},254,[49,75785,75786],{"class":55},"        \u002F\u002F 0当假看\n",[49,75788,75790,75793,75795,75797,75800,75802,75804,75806,75809,75811,75813,75816,75818],{"class":51,"line":75789},255,[49,75791,75792],{"class":66},"        unameId: arr.",[49,75794,53210],{"class":73},[49,75796,75043],{"class":109},[49,75798,75799],{"class":66}," arr[arr.",[49,75801,53210],{"class":73},[49,75803,53513],{"class":109},[49,75805,26367],{"class":73},[49,75807,75808],{"class":66},"].unameId ",[49,75810,1872],{"class":109},[49,75812,26367],{"class":73},[49,75814,75815],{"class":109}," :",[49,75817,26367],{"class":73},[49,75819,32714],{"class":66},[49,75821,75823],{"class":51,"line":75822},256,[49,75824,71228],{"class":66},[49,75826,75828],{"class":51,"line":75827},257,[49,75829,71233],{"class":66},[49,75831,75833],{"class":51,"line":75832},258,[49,75834,71243],{"class":66},[49,75836,75838],{"class":51,"line":75837},259,[49,75839,71238],{"class":66},[49,75841,75843],{"class":51,"line":75842},260,[49,75844,75845],{"class":66},"        city: city.value,\n",[49,75847,75849],{"class":51,"line":75848},261,[49,75850,75851],{"class":55},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[49,75853,75855],{"class":51,"line":75854},262,[49,75856,75857],{"class":55},"        \u002F\u002F time: new Date().toDateString()\n",[49,75859,75861,75864,75867],{"class":51,"line":75860},263,[49,75862,75863],{"class":66},"        time: ",[49,75865,75866],{"class":62},"getTime",[49,75868,3230],{"class":66},[49,75870,75872],{"class":51,"line":75871},264,[49,75873,66050],{"class":66},[49,75875,75877],{"class":51,"line":75876},265,[49,75878,75879],{"class":55},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[49,75881,75883,75885],{"class":51,"line":75882},266,[49,75884,71303],{"class":62},[49,75886,3230],{"class":66},[49,75888,75890,75892,75894,75896,75898],{"class":51,"line":75889},267,[49,75891,71286],{"class":73},[49,75893,1949],{"class":66},[49,75895,71291],{"class":62},[49,75897,14302],{"class":66},[49,75899,75900],{"class":55},"\u002F\u002F重置表单\n",[49,75902,75904],{"class":51,"line":75903},268,[49,75905,75906],{"class":55},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[49,75908,75910,75913,75915,75917,75920,75922,75924,75926,75928],{"class":51,"line":75909},269,[49,75911,75912],{"class":66},"      localStorage.",[49,75914,72884],{"class":62},[49,75916,1403],{"class":66},[49,75918,75919],{"class":1505},"'data'",[49,75921,13687],{"class":66},[49,75923,72894],{"class":73},[49,75925,1949],{"class":66},[49,75927,72899],{"class":62},[49,75929,75930],{"class":66},"(arr))\n",[49,75932,75934],{"class":51,"line":75933},270,[49,75935,34709],{"class":66},[49,75937,75939],{"class":51,"line":75938},271,[49,75940,3654],{"emptyLinePlaceholder":1330},[49,75942,75944],{"class":51,"line":75943},272,[49,75945,75946],{"class":55},"    \u002F\u002F 3.删除业务\n",[49,75948,75950],{"class":51,"line":75949},273,[49,75951,75952],{"class":55},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[49,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972],{"class":51,"line":75955},274,[49,75957,71576],{"class":66},[49,75959,59052],{"class":62},[49,75961,1403],{"class":66},[49,75963,59057],{"class":1505},[49,75965,13687],{"class":66},[49,75967,55690],{"class":109},[49,75969,2913],{"class":66},[49,75971,1475],{"class":6468},[49,75973,13694],{"class":66},[49,75975,75977],{"class":51,"line":75976},275,[49,75978,75979],{"class":55},"      \u002F\u002F 判断是否点击的是删除按钮\n",[49,75981,75983,75985,75987,75989,75991],{"class":51,"line":75982},276,[49,75984,55721],{"class":109},[49,75986,68269],{"class":66},[49,75988,55727],{"class":109},[49,75990,69491],{"class":1505},[49,75992,13694],{"class":66},[49,75994,75996],{"class":51,"line":75995},277,[49,75997,75998],{"class":55},"        \u002F\u002F alert(1)\n",[49,76000,76002],{"class":51,"line":76001},278,[49,76003,76004],{"class":55},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[49,76006,76008],{"class":51,"line":76007},279,[49,76009,76010],{"class":55},"        \u002F\u002F console.log(e.target)\n",[49,76012,76014],{"class":51,"line":76013},280,[49,76015,76016],{"class":55},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[49,76018,76020],{"class":51,"line":76019},281,[49,76021,3654],{"emptyLinePlaceholder":1330},[49,76023,76025],{"class":51,"line":76024},282,[49,76026,76027],{"class":55},"        \u002F\u002F 确认框，确然是否真的要删除\n",[49,76029,76031],{"class":51,"line":76030},283,[49,76032,76033],{"class":55},"        \u002F\u002F confirm()为确认框\n",[49,76035,76037],{"class":51,"line":76036},284,[49,76038,76039],{"class":55},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[49,76041,76043,76045,76047,76050,76052,76055],{"class":51,"line":76042},285,[49,76044,3751],{"class":109},[49,76046,2913],{"class":66},[49,76048,76049],{"class":62},"confirm",[49,76051,1403],{"class":66},[49,76053,76054],{"class":1505},"'您确定要删除这条数据吗？'",[49,76056,76057],{"class":66},")) {\n",[49,76059,76061,76064,76066,76068,76070],{"class":51,"line":76060},286,[49,76062,76063],{"class":66},"          arr.",[49,76065,59249],{"class":62},[49,76067,71629],{"class":66},[49,76069,159],{"class":73},[49,76071,1409],{"class":66},[49,76073,76075],{"class":51,"line":76074},287,[49,76076,76077],{"class":55},"          \u002F\u002F 3.4 重新渲染页面\n",[49,76079,76081,76084],{"class":51,"line":76080},288,[49,76082,76083],{"class":62},"          render",[49,76085,3230],{"class":66},[49,76087,76089],{"class":51,"line":76088},289,[49,76090,76091],{"class":55},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[49,76093,76095,76098,76100,76102,76104,76106,76108,76110,76112],{"class":51,"line":76094},290,[49,76096,76097],{"class":66},"          localStorage.",[49,76099,72884],{"class":62},[49,76101,1403],{"class":66},[49,76103,75919],{"class":1505},[49,76105,13687],{"class":66},[49,76107,72894],{"class":73},[49,76109,1949],{"class":66},[49,76111,72899],{"class":62},[49,76113,75930],{"class":66},[49,76115,76117],{"class":51,"line":76116},291,[49,76118,3783],{"class":66},[49,76120,76122],{"class":51,"line":76121},292,[49,76123,53640],{"class":66},[49,76125,76127],{"class":51,"line":76126},293,[49,76128,3654],{"emptyLinePlaceholder":1330},[49,76130,76132],{"class":51,"line":76131},294,[49,76133,34709],{"class":66},[49,76135,76137],{"class":51,"line":76136},295,[49,76138,3654],{"emptyLinePlaceholder":1330},[49,76140,76142,76144,76146],{"class":51,"line":76141},296,[49,76143,53659],{"class":66},[49,76145,53055],{"class":147},[49,76147,52554],{"class":66},[49,76149,76151,76153,76155],{"class":51,"line":76150},297,[49,76152,53027],{"class":66},[49,76154,53042],{"class":147},[49,76156,52554],{"class":66},[49,76158,76160],{"class":51,"line":76159},298,[49,76161,3654],{"emptyLinePlaceholder":1330},[49,76163,76165,76167,76169],{"class":51,"line":76164},299,[49,76166,53027],{"class":66},[49,76168,51883],{"class":147},[49,76170,52554],{"class":66},[14,76172,76174],{"id":76173},"_36-正则表达式","3.6 正则表达式",[19,76176,76177],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76179,76180],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76182,76183],{},"正则表达式的作用：",[23,76185,76186,76193,76199],{},[26,76187,76188,76189,76192],{},"表单验证（ ",[485,76190,76191],{},"匹配"," ）",[26,76194,76195,76196,76192],{},"过滤敏感词（ ",[485,76197,76198],{},"替换",[26,76200,76201,76202,76192],{},"字符串中提取我们想要的部分（ ",[485,76203,76204],{},"提取",[183,76206,76208],{"id":76207},"_361-语法","3.6.1 语法",[19,76210,76211],{},"正则表达式使用步骤：",[591,76213,76214,76217],{},[26,76215,76216],{},"定义规则",[26,76218,76219],{},"查找是否匹配",[19,76221,76222],{},"正则表达式里边不需要写引号",[19,76224,76225],{},[174,76226],{"alt":44,"src":76227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76229,76230],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76232,76233],{},"reg.test(str)",[19,76235,76236],{},[174,76237],{"alt":44,"src":76238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76240,76241],{},[174,76242],{"alt":44,"src":76243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[183,76245,76247],{"id":76246},"_362-元字符","3.6.2 元字符",[591,76249,76250,76253,76256,76259,76266],{},[26,76251,76252],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[26,76254,76255],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[26,76257,76258],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[26,76260,76261,76262],{},"正则验证工具：",[1630,76263,76264],{"href":76264,"rel":76265},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25113],[26,76267,76268],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[525,76270,76272],{"id":76271},"_3621-边界符","3.6.2.1 边界符",[19,76274,76275],{},[174,76276],{"alt":44,"src":76277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76279,76280],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76282,76283],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76285,76286],{},"只匹配一次",[19,76288,76289],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[525,76291,76293],{"id":76292},"_3622-量词","3.6.2.2 量词",[19,76295,76296],{},[174,76297],{"alt":44,"src":76298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76300,76301],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[525,76303,76305],{"id":76304},"_3623-元字符","3.6.2.3 元字符",[19,76307,76308],{},[174,76309],{"alt":44,"src":76310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76312,76313],{},"匹配的是a或b或c []只选一个",[19,76315,76316],{},[174,76317],{"alt":44,"src":76318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76320,76321],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76323,76324],{},[174,76325],{"alt":44,"src":76326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76328,76329],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76331,76332],{},[174,76333],{"alt":44,"src":76334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[39,76336,76338],{"className":51881,"code":76337,"language":51883,"meta":44,"style":44},"\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",[46,76339,76340,76350,76364,76368,76376,76390,76410,76422,76430,76434,76442,76450,76455,76486,76513,76541,76545,76550,76578,76609,76614,76619,76650,76682,76714,76718,76723,76754,76784,76814,76818,76823,76854,76885,76915,76945,76949,76954,76987,76991,76996,77027,77058,77062,77067,77098,77128,77159,77163,77168,77200,77231,77262,77289,77320,77352,77385,77416,77447,77479,77510,77518,77526,77530],{"__ignoreMap":44},[49,76341,76342,76344,76346,76348],{"class":51,"line":52},[49,76343,52545],{"class":66},[49,76345,52548],{"class":147},[49,76347,52551],{"class":62},[49,76349,52554],{"class":66},[49,76351,76352,76354,76356,76358,76360,76362],{"class":51,"line":59},[49,76353,2300],{"class":66},[49,76355,51883],{"class":147},[49,76357,52563],{"class":62},[49,76359,1448],{"class":66},[49,76361,52568],{"class":1505},[49,76363,52554],{"class":66},[49,76365,76366],{"class":51,"line":70},[49,76367,3654],{"emptyLinePlaceholder":1330},[49,76369,76370,76372,76374],{"class":51,"line":86},[49,76371,2300],{"class":66},[49,76373,52581],{"class":147},[49,76375,52554],{"class":66},[49,76377,76378,76380,76382,76384,76386,76388],{"class":51,"line":98},[49,76379,53386],{"class":66},[49,76381,52591],{"class":147},[49,76383,52594],{"class":62},[49,76385,1448],{"class":66},[49,76387,52599],{"class":1505},[49,76389,52554],{"class":66},[49,76391,76392,76394,76396,76398,76400,76402,76404,76406,76408],{"class":51,"line":121},[49,76393,53386],{"class":66},[49,76395,52591],{"class":147},[49,76397,16171],{"class":62},[49,76399,1448],{"class":66},[49,76401,52638],{"class":1505},[49,76403,52618],{"class":62},[49,76405,1448],{"class":66},[49,76407,52645],{"class":1505},[49,76409,52554],{"class":66},[49,76411,76412,76414,76416,76418,76420],{"class":51,"line":134},[49,76413,53386],{"class":66},[49,76415,52654],{"class":147},[49,76417,52657],{"class":66},[49,76419,52654],{"class":147},[49,76421,52554],{"class":66},[49,76423,76424,76426,76428],{"class":51,"line":1085},[49,76425,53027],{"class":66},[49,76427,52581],{"class":147},[49,76429,52554],{"class":66},[49,76431,76432],{"class":51,"line":2574},[49,76433,3654],{"emptyLinePlaceholder":1330},[49,76435,76436,76438,76440],{"class":51,"line":2586},[49,76437,2300],{"class":66},[49,76439,53042],{"class":147},[49,76441,52554],{"class":66},[49,76443,76444,76446,76448],{"class":51,"line":2867},[49,76445,53386],{"class":66},[49,76447,53055],{"class":147},[49,76449,52554],{"class":66},[49,76451,76452],{"class":51,"line":2872},[49,76453,76454],{"class":55},"    \u002F\u002F 元字符中\n",[49,76456,76457,76459,76461,76463,76465,76468,76470,76472,76475,76477,76480,76483],{"class":51,"line":2878},[49,76458,74982],{"class":66},[49,76460,59486],{"class":62},[49,76462,1403],{"class":66},[49,76464,1975],{"class":1505},[49,76466,76467],{"class":49225},"哈",[49,76469,1975],{"class":1505},[49,76471,1949],{"class":66},[49,76473,76474],{"class":62},"test",[49,76476,1403],{"class":66},[49,76478,76479],{"class":1505},"'哈'",[49,76481,76482],{"class":66},"))  ",[49,76484,76485],{"class":55},"\u002F\u002Ftrue\n",[49,76487,76488,76490,76492,76494,76496,76498,76500,76502,76504,76506,76509,76511],{"class":51,"line":2883},[49,76489,74982],{"class":66},[49,76491,59486],{"class":62},[49,76493,1403],{"class":66},[49,76495,1975],{"class":1505},[49,76497,76467],{"class":49225},[49,76499,1975],{"class":1505},[49,76501,1949],{"class":66},[49,76503,76474],{"class":62},[49,76505,1403],{"class":66},[49,76507,76508],{"class":1505},"'哈哈'",[49,76510,76482],{"class":66},[49,76512,76485],{"class":55},[49,76514,76515,76517,76519,76521,76523,76525,76527,76529,76531,76533,76536,76539],{"class":51,"line":2897},[49,76516,74982],{"class":66},[49,76518,59486],{"class":62},[49,76520,1403],{"class":66},[49,76522,1975],{"class":1505},[49,76524,76467],{"class":49225},[49,76526,1975],{"class":1505},[49,76528,1949],{"class":66},[49,76530,76474],{"class":62},[49,76532,1403],{"class":66},[49,76534,76535],{"class":1505},"'二哈'",[49,76537,76538],{"class":66},"))   ",[49,76540,76485],{"class":55},[49,76542,76543],{"class":51,"line":2902},[49,76544,3654],{"emptyLinePlaceholder":1330},[49,76546,76547],{"class":51,"line":2908},[49,76548,76549],{"class":55},"    \u002F\u002F 1.边界符\n",[49,76551,76552,76554,76556,76558,76560,76562,76564,76566,76568,76570,76572,76574,76576],{"class":51,"line":2929},[49,76553,74982],{"class":66},[49,76555,59486],{"class":62},[49,76557,1403],{"class":66},[49,76559,1975],{"class":1505},[49,76561,2355],{"class":109},[49,76563,76467],{"class":49225},[49,76565,1975],{"class":1505},[49,76567,1949],{"class":66},[49,76569,76474],{"class":62},[49,76571,1403],{"class":66},[49,76573,76479],{"class":1505},[49,76575,76482],{"class":66},[49,76577,76485],{"class":55},[49,76579,76580,76582,76584,76586,76588,76590,76592,76594,76596,76598,76600,76602,76604,76606],{"class":51,"line":2934},[49,76581,74982],{"class":66},[49,76583,59486],{"class":62},[49,76585,1403],{"class":66},[49,76587,1975],{"class":1505},[49,76589,2355],{"class":109},[49,76591,76467],{"class":49225},[49,76593,1694],{"class":109},[49,76595,1975],{"class":1505},[49,76597,1949],{"class":66},[49,76599,76474],{"class":62},[49,76601,1403],{"class":66},[49,76603,76508],{"class":1505},[49,76605,76482],{"class":66},[49,76607,76608],{"class":55},"\u002F\u002Ffalse\n",[49,76610,76611],{"class":51,"line":2948},[49,76612,76613],{"class":55},"    \u002F\u002F 2.量词\n",[49,76615,76616],{"class":51,"line":2953},[49,76617,76618],{"class":55},"    \u002F\u002F 量词 * 类似于 >= 0\n",[49,76620,76621,76623,76625,76627,76629,76631,76633,76636,76638,76640,76642,76644,76646,76648],{"class":51,"line":2982},[49,76622,74982],{"class":66},[49,76624,59486],{"class":62},[49,76626,1403],{"class":66},[49,76628,1975],{"class":1505},[49,76630,2355],{"class":109},[49,76632,76467],{"class":49225},[49,76634,76635],{"class":109},"*$",[49,76637,1975],{"class":1505},[49,76639,1949],{"class":66},[49,76641,76474],{"class":62},[49,76643,1403],{"class":66},[49,76645,76508],{"class":1505},[49,76647,76482],{"class":66},[49,76649,76485],{"class":55},[49,76651,76652,76654,76656,76658,76660,76662,76664,76666,76668,76670,76672,76674,76677,76679],{"class":51,"line":2987},[49,76653,74982],{"class":66},[49,76655,59486],{"class":62},[49,76657,1403],{"class":66},[49,76659,1975],{"class":1505},[49,76661,2355],{"class":109},[49,76663,76467],{"class":49225},[49,76665,76635],{"class":109},[49,76667,1975],{"class":1505},[49,76669,1949],{"class":66},[49,76671,76474],{"class":62},[49,76673,1403],{"class":66},[49,76675,76676],{"class":1505},"'二哈好傻'",[49,76678,76482],{"class":66},[49,76680,76681],{"class":55},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[49,76683,76684,76686,76688,76690,76692,76694,76696,76698,76700,76702,76704,76706,76709,76711],{"class":51,"line":3004},[49,76685,74982],{"class":66},[49,76687,59486],{"class":62},[49,76689,1403],{"class":66},[49,76691,1975],{"class":1505},[49,76693,2355],{"class":109},[49,76695,76467],{"class":49225},[49,76697,76635],{"class":109},[49,76699,1975],{"class":1505},[49,76701,1949],{"class":66},[49,76703,76474],{"class":62},[49,76705,1403],{"class":66},[49,76707,76708],{"class":1505},"'哈好哈'",[49,76710,76538],{"class":66},[49,76712,76713],{"class":55},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[49,76715,76716],{"class":51,"line":3009},[49,76717,3654],{"emptyLinePlaceholder":1330},[49,76719,76720],{"class":51,"line":3014},[49,76721,76722],{"class":55},"    \u002F\u002F +类似于>=1\n",[49,76724,76725,76727,76729,76731,76733,76735,76737,76740,76742,76744,76746,76748,76750,76752],{"class":51,"line":3019},[49,76726,74982],{"class":66},[49,76728,59486],{"class":62},[49,76730,1403],{"class":66},[49,76732,1975],{"class":1505},[49,76734,2355],{"class":109},[49,76736,76467],{"class":49225},[49,76738,76739],{"class":109},"+$",[49,76741,1975],{"class":1505},[49,76743,1949],{"class":66},[49,76745,76474],{"class":62},[49,76747,1403],{"class":66},[49,76749,76508],{"class":1505},[49,76751,76482],{"class":66},[49,76753,76485],{"class":55},[49,76755,76756,76758,76760,76762,76764,76766,76768,76770,76772,76774,76776,76778,76780,76782],{"class":51,"line":3033},[49,76757,74982],{"class":66},[49,76759,59486],{"class":62},[49,76761,1403],{"class":66},[49,76763,1975],{"class":1505},[49,76765,2355],{"class":109},[49,76767,76467],{"class":49225},[49,76769,76739],{"class":109},[49,76771,1975],{"class":1505},[49,76773,1949],{"class":66},[49,76775,76474],{"class":62},[49,76777,1403],{"class":66},[49,76779,76676],{"class":1505},[49,76781,76482],{"class":66},[49,76783,76681],{"class":55},[49,76785,76786,76788,76790,76792,76794,76796,76798,76800,76802,76804,76806,76808,76810,76812],{"class":51,"line":3038},[49,76787,74982],{"class":66},[49,76789,59486],{"class":62},[49,76791,1403],{"class":66},[49,76793,1975],{"class":1505},[49,76795,2355],{"class":109},[49,76797,76467],{"class":49225},[49,76799,76739],{"class":109},[49,76801,1975],{"class":1505},[49,76803,1949],{"class":66},[49,76805,76474],{"class":62},[49,76807,1403],{"class":66},[49,76809,76708],{"class":1505},[49,76811,76538],{"class":66},[49,76813,76608],{"class":55},[49,76815,76816],{"class":51,"line":3831},[49,76817,3654],{"emptyLinePlaceholder":1330},[49,76819,76820],{"class":51,"line":3845},[49,76821,76822],{"class":55},"    \u002F\u002F ?类似于0次或一次\n",[49,76824,76825,76827,76829,76831,76833,76835,76838,76840,76842,76844,76846,76848,76850,76852],{"class":51,"line":3853},[49,76826,74982],{"class":66},[49,76828,59486],{"class":62},[49,76830,1403],{"class":66},[49,76832,1975],{"class":1505},[49,76834,2355],{"class":109},[49,76836,76837],{"class":49225},"哈？",[49,76839,1694],{"class":109},[49,76841,1975],{"class":1505},[49,76843,1949],{"class":66},[49,76845,76474],{"class":62},[49,76847,1403],{"class":66},[49,76849,75457],{"class":1505},[49,76851,76538],{"class":66},[49,76853,76485],{"class":55},[49,76855,76856,76858,76860,76862,76864,76866,76868,76871,76873,76875,76877,76879,76881,76883],{"class":51,"line":3858},[49,76857,74982],{"class":66},[49,76859,59486],{"class":62},[49,76861,1403],{"class":66},[49,76863,1975],{"class":1505},[49,76865,2355],{"class":109},[49,76867,76467],{"class":49225},[49,76869,76870],{"class":109},"?$",[49,76872,1975],{"class":1505},[49,76874,1949],{"class":66},[49,76876,76474],{"class":62},[49,76878,1403],{"class":66},[49,76880,76508],{"class":1505},[49,76882,76482],{"class":66},[49,76884,76608],{"class":55},[49,76886,76887,76889,76891,76893,76895,76897,76899,76901,76903,76905,76907,76909,76911,76913],{"class":51,"line":3864},[49,76888,74982],{"class":66},[49,76890,59486],{"class":62},[49,76892,1403],{"class":66},[49,76894,1975],{"class":1505},[49,76896,2355],{"class":109},[49,76898,76467],{"class":49225},[49,76900,76870],{"class":109},[49,76902,1975],{"class":1505},[49,76904,1949],{"class":66},[49,76906,76474],{"class":62},[49,76908,1403],{"class":66},[49,76910,76676],{"class":1505},[49,76912,76482],{"class":66},[49,76914,76681],{"class":55},[49,76916,76917,76919,76921,76923,76925,76927,76929,76931,76933,76935,76937,76939,76941,76943],{"class":51,"line":3870},[49,76918,74982],{"class":66},[49,76920,59486],{"class":62},[49,76922,1403],{"class":66},[49,76924,1975],{"class":1505},[49,76926,2355],{"class":109},[49,76928,76467],{"class":49225},[49,76930,76870],{"class":109},[49,76932,1975],{"class":1505},[49,76934,1949],{"class":66},[49,76936,76474],{"class":62},[49,76938,1403],{"class":66},[49,76940,76708],{"class":1505},[49,76942,76482],{"class":66},[49,76944,76608],{"class":55},[49,76946,76947],{"class":51,"line":3875},[49,76948,3654],{"emptyLinePlaceholder":1330},[49,76950,76951],{"class":51,"line":9200},[49,76952,76953],{"class":55},"    \u002F\u002F {n}写几，就必须出现几次\n",[49,76955,76956,76958,76960,76962,76964,76966,76968,76971,76973,76975,76977,76979,76982,76985],{"class":51,"line":9224},[49,76957,74982],{"class":66},[49,76959,59486],{"class":62},[49,76961,1403],{"class":66},[49,76963,1975],{"class":1505},[49,76965,2355],{"class":109},[49,76967,76467],{"class":49225},[49,76969,76970],{"class":109},"{4}$",[49,76972,1975],{"class":1505},[49,76974,1949],{"class":66},[49,76976,76474],{"class":62},[49,76978,1403],{"class":66},[49,76980,76981],{"class":1505},"'哈哈哈哈'",[49,76983,76984],{"class":66},")) ",[49,76986,76485],{"class":55},[49,76988,76989],{"class":51,"line":9229},[49,76990,3654],{"emptyLinePlaceholder":1330},[49,76992,76993],{"class":51,"line":9235},[49,76994,76995],{"class":55},"    \u002F\u002F {n,}大于等于n次\n",[49,76997,76998,77000,77002,77004,77006,77008,77010,77013,77015,77017,77019,77021,77023,77025],{"class":51,"line":9262},[49,76999,74982],{"class":66},[49,77001,59486],{"class":62},[49,77003,1403],{"class":66},[49,77005,1975],{"class":1505},[49,77007,2355],{"class":109},[49,77009,76467],{"class":49225},[49,77011,77012],{"class":109},"{4,}$",[49,77014,1975],{"class":1505},[49,77016,1949],{"class":66},[49,77018,76474],{"class":62},[49,77020,1403],{"class":66},[49,77022,76981],{"class":1505},[49,77024,76984],{"class":66},[49,77026,76485],{"class":55},[49,77028,77029,77031,77033,77035,77037,77039,77041,77043,77045,77047,77049,77051,77054,77056],{"class":51,"line":9267},[49,77030,74982],{"class":66},[49,77032,59486],{"class":62},[49,77034,1403],{"class":66},[49,77036,1975],{"class":1505},[49,77038,2355],{"class":109},[49,77040,76467],{"class":49225},[49,77042,77012],{"class":109},[49,77044,1975],{"class":1505},[49,77046,1949],{"class":66},[49,77048,76474],{"class":62},[49,77050,1403],{"class":66},[49,77052,77053],{"class":1505},"'哈哈哈哈哈'",[49,77055,76984],{"class":66},[49,77057,76485],{"class":55},[49,77059,77060],{"class":51,"line":9273},[49,77061,3654],{"emptyLinePlaceholder":1330},[49,77063,77064],{"class":51,"line":9285},[49,77065,77066],{"class":55},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[49,77068,77069,77071,77073,77075,77077,77079,77081,77084,77086,77088,77090,77092,77094,77096],{"class":51,"line":9297},[49,77070,74982],{"class":66},[49,77072,59486],{"class":62},[49,77074,1403],{"class":66},[49,77076,1975],{"class":1505},[49,77078,2355],{"class":109},[49,77080,76467],{"class":49225},[49,77082,77083],{"class":109},"{4,6}$",[49,77085,1975],{"class":1505},[49,77087,1949],{"class":66},[49,77089,76474],{"class":62},[49,77091,1403],{"class":66},[49,77093,76981],{"class":1505},[49,77095,76984],{"class":66},[49,77097,76485],{"class":55},[49,77099,77100,77102,77104,77106,77108,77110,77112,77114,77116,77118,77120,77122,77124,77126],{"class":51,"line":9309},[49,77101,74982],{"class":66},[49,77103,59486],{"class":62},[49,77105,1403],{"class":66},[49,77107,1975],{"class":1505},[49,77109,2355],{"class":109},[49,77111,76467],{"class":49225},[49,77113,77083],{"class":109},[49,77115,1975],{"class":1505},[49,77117,1949],{"class":66},[49,77119,76474],{"class":62},[49,77121,1403],{"class":66},[49,77123,77053],{"class":1505},[49,77125,76984],{"class":66},[49,77127,76485],{"class":55},[49,77129,77130,77132,77134,77136,77138,77140,77142,77144,77146,77148,77150,77152,77155,77157],{"class":51,"line":10968},[49,77131,74982],{"class":66},[49,77133,59486],{"class":62},[49,77135,1403],{"class":66},[49,77137,1975],{"class":1505},[49,77139,2355],{"class":109},[49,77141,76467],{"class":49225},[49,77143,77083],{"class":109},[49,77145,1975],{"class":1505},[49,77147,1949],{"class":66},[49,77149,76474],{"class":62},[49,77151,1403],{"class":66},[49,77153,77154],{"class":1505},"'哈哈哈哈哈哈哈'",[49,77156,76984],{"class":66},[49,77158,76608],{"class":55},[49,77160,77161],{"class":51,"line":10993},[49,77162,3654],{"emptyLinePlaceholder":1330},[49,77164,77165],{"class":51,"line":11016},[49,77166,77167],{"class":55},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[49,77169,77170,77172,77174,77176,77178,77180,77183,77185,77187,77189,77191,77193,77196,77198],{"class":51,"line":11040},[49,77171,74982],{"class":66},[49,77173,59486],{"class":62},[49,77175,1403],{"class":66},[49,77177,1975],{"class":1505},[49,77179,2355],{"class":109},[49,77181,77182],{"class":73},"[abc]",[49,77184,1694],{"class":109},[49,77186,1975],{"class":1505},[49,77188,1949],{"class":66},[49,77190,76474],{"class":62},[49,77192,1403],{"class":66},[49,77194,77195],{"class":1505},"'a'",[49,77197,76482],{"class":66},[49,77199,76485],{"class":55},[49,77201,77202,77204,77206,77208,77210,77212,77214,77216,77218,77220,77222,77224,77227,77229],{"class":51,"line":11045},[49,77203,74982],{"class":66},[49,77205,59486],{"class":62},[49,77207,1403],{"class":66},[49,77209,1975],{"class":1505},[49,77211,2355],{"class":109},[49,77213,77182],{"class":73},[49,77215,1694],{"class":109},[49,77217,1975],{"class":1505},[49,77219,1949],{"class":66},[49,77221,76474],{"class":62},[49,77223,1403],{"class":66},[49,77225,77226],{"class":1505},"'b'",[49,77228,76482],{"class":66},[49,77230,76485],{"class":55},[49,77232,77233,77235,77237,77239,77241,77243,77245,77247,77249,77251,77253,77255,77258,77260],{"class":51,"line":11050},[49,77234,74982],{"class":66},[49,77236,59486],{"class":62},[49,77238,1403],{"class":66},[49,77240,1975],{"class":1505},[49,77242,2355],{"class":109},[49,77244,77182],{"class":73},[49,77246,1694],{"class":109},[49,77248,1975],{"class":1505},[49,77250,1949],{"class":66},[49,77252,76474],{"class":62},[49,77254,1403],{"class":66},[49,77256,77257],{"class":1505},"'c'",[49,77259,76482],{"class":66},[49,77261,76485],{"class":55},[49,77263,77264,77266,77268,77270,77272,77274,77276,77278,77280,77282,77285,77287],{"class":51,"line":11055},[49,77265,74982],{"class":66},[49,77267,59486],{"class":62},[49,77269,1403],{"class":66},[49,77271,1975],{"class":1505},[49,77273,77182],{"class":73},[49,77275,1975],{"class":1505},[49,77277,1949],{"class":66},[49,77279,76474],{"class":62},[49,77281,1403],{"class":66},[49,77283,77284],{"class":1505},"'ab'",[49,77286,76482],{"class":66},[49,77288,76485],{"class":55},[49,77290,77291,77293,77295,77297,77299,77301,77303,77305,77307,77309,77311,77313,77315,77317],{"class":51,"line":11064},[49,77292,74982],{"class":66},[49,77294,59486],{"class":62},[49,77296,1403],{"class":66},[49,77298,1975],{"class":1505},[49,77300,2355],{"class":109},[49,77302,77182],{"class":73},[49,77304,1694],{"class":109},[49,77306,1975],{"class":1505},[49,77308,1949],{"class":66},[49,77310,76474],{"class":62},[49,77312,1403],{"class":66},[49,77314,77284],{"class":1505},[49,77316,76482],{"class":66},[49,77318,77319],{"class":55},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[49,77321,77322,77324,77326,77328,77330,77332,77334,77337,77339,77341,77343,77345,77347,77349],{"class":51,"line":11069},[49,77323,74982],{"class":66},[49,77325,59486],{"class":62},[49,77327,1403],{"class":66},[49,77329,1975],{"class":1505},[49,77331,2355],{"class":109},[49,77333,77182],{"class":73},[49,77335,77336],{"class":109},"{2}$",[49,77338,1975],{"class":1505},[49,77340,1949],{"class":66},[49,77342,76474],{"class":62},[49,77344,1403],{"class":66},[49,77346,77284],{"class":1505},[49,77348,76482],{"class":66},[49,77350,77351],{"class":55},"\u002F\u002Ftrue   可以选两个\n",[49,77353,77354,77356,77358,77360,77362,77364,77367,77369,77371,77373,77375,77377,77380,77382],{"class":51,"line":11075},[49,77355,74982],{"class":66},[49,77357,59486],{"class":62},[49,77359,1403],{"class":66},[49,77361,1975],{"class":1505},[49,77363,2355],{"class":109},[49,77365,77366],{"class":73},"[a-z]",[49,77368,1694],{"class":109},[49,77370,1975],{"class":1505},[49,77372,1949],{"class":66},[49,77374,76474],{"class":62},[49,77376,1403],{"class":66},[49,77378,77379],{"class":1505},"'p'",[49,77381,76538],{"class":66},[49,77383,77384],{"class":55},"\u002F\u002Ftrue   依然只能选一个\n",[49,77386,77387,77389,77391,77393,77395,77397,77400,77402,77404,77406,77408,77410,77412,77414],{"class":51,"line":11096},[49,77388,74982],{"class":66},[49,77390,59486],{"class":62},[49,77392,1403],{"class":66},[49,77394,1975],{"class":1505},[49,77396,2355],{"class":109},[49,77398,77399],{"class":73},"[A-Z]",[49,77401,1694],{"class":109},[49,77403,1975],{"class":1505},[49,77405,1949],{"class":66},[49,77407,76474],{"class":62},[49,77409,1403],{"class":66},[49,77411,77379],{"class":1505},[49,77413,76538],{"class":66},[49,77415,76608],{"class":55},[49,77417,77418,77420,77422,77424,77426,77428,77430,77432,77434,77436,77438,77440,77443,77445],{"class":51,"line":11102},[49,77419,74982],{"class":66},[49,77421,59486],{"class":62},[49,77423,1403],{"class":66},[49,77425,1975],{"class":1505},[49,77427,2355],{"class":109},[49,77429,77399],{"class":73},[49,77431,1694],{"class":109},[49,77433,1975],{"class":1505},[49,77435,1949],{"class":66},[49,77437,76474],{"class":62},[49,77439,1403],{"class":66},[49,77441,77442],{"class":1505},"'P'",[49,77444,76538],{"class":66},[49,77446,76485],{"class":55},[49,77448,77449,77451,77453,77455,77457,77459,77462,77464,77466,77468,77470,77472,77475,77477],{"class":51,"line":11116},[49,77450,74982],{"class":66},[49,77452,59486],{"class":62},[49,77454,1403],{"class":66},[49,77456,1975],{"class":1505},[49,77458,2355],{"class":109},[49,77460,77461],{"class":73},"[0-9]",[49,77463,1694],{"class":109},[49,77465,1975],{"class":1505},[49,77467,1949],{"class":66},[49,77469,76474],{"class":62},[49,77471,1403],{"class":66},[49,77473,77474],{"class":1505},"'0'",[49,77476,76538],{"class":66},[49,77478,76485],{"class":55},[49,77480,77481,77483,77485,77487,77489,77491,77494,77496,77498,77500,77502,77504,77506,77508],{"class":51,"line":11122},[49,77482,74982],{"class":66},[49,77484,59486],{"class":62},[49,77486,1403],{"class":66},[49,77488,1975],{"class":1505},[49,77490,2355],{"class":109},[49,77492,77493],{"class":73},"[a-zA-Z0-9]",[49,77495,1694],{"class":109},[49,77497,1975],{"class":1505},[49,77499,1949],{"class":66},[49,77501,76474],{"class":62},[49,77503,1403],{"class":66},[49,77505,77379],{"class":1505},[49,77507,76482],{"class":66},[49,77509,76485],{"class":55},[49,77511,77512,77514,77516],{"class":51,"line":11149},[49,77513,53659],{"class":66},[49,77515,53055],{"class":147},[49,77517,52554],{"class":66},[49,77519,77520,77522,77524],{"class":51,"line":11158},[49,77521,53027],{"class":66},[49,77523,53042],{"class":147},[49,77525,52554],{"class":66},[49,77527,77528],{"class":51,"line":11164},[49,77529,3654],{"emptyLinePlaceholder":1330},[49,77531,77532,77534,77536],{"class":51,"line":11172},[49,77533,53027],{"class":66},[49,77535,51883],{"class":147},[49,77537,52554],{"class":66},[525,77539,77541],{"id":77540},"_3624-修饰符","3.6.2.4 修饰符",[19,77543,77544],{},[174,77545],{"alt":44,"src":77546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,77548,77549],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,77551,77552],{},[174,77553],{"alt":44,"src":77554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[39,77556,77558],{"className":51881,"code":77557,"language":51883,"meta":44,"style":44},"\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",[46,77559,77560,77570,77584,77592,77606,77626,77638,77646,77654,77662,77694,77725,77730,77762,77773,77806,77815,77823,77831],{"__ignoreMap":44},[49,77561,77562,77564,77566,77568],{"class":51,"line":52},[49,77563,52545],{"class":66},[49,77565,52548],{"class":147},[49,77567,52551],{"class":62},[49,77569,52554],{"class":66},[49,77571,77572,77574,77576,77578,77580,77582],{"class":51,"line":59},[49,77573,2300],{"class":66},[49,77575,51883],{"class":147},[49,77577,52563],{"class":62},[49,77579,1448],{"class":66},[49,77581,52568],{"class":1505},[49,77583,52554],{"class":66},[49,77585,77586,77588,77590],{"class":51,"line":70},[49,77587,2300],{"class":66},[49,77589,52581],{"class":147},[49,77591,52554],{"class":66},[49,77593,77594,77596,77598,77600,77602,77604],{"class":51,"line":86},[49,77595,53386],{"class":66},[49,77597,52591],{"class":147},[49,77599,52594],{"class":62},[49,77601,1448],{"class":66},[49,77603,52599],{"class":1505},[49,77605,52554],{"class":66},[49,77607,77608,77610,77612,77614,77616,77618,77620,77622,77624],{"class":51,"line":98},[49,77609,53386],{"class":66},[49,77611,52591],{"class":147},[49,77613,16171],{"class":62},[49,77615,1448],{"class":66},[49,77617,52638],{"class":1505},[49,77619,52618],{"class":62},[49,77621,1448],{"class":66},[49,77623,52645],{"class":1505},[49,77625,52554],{"class":66},[49,77627,77628,77630,77632,77634,77636],{"class":51,"line":121},[49,77629,53386],{"class":66},[49,77631,52654],{"class":147},[49,77633,52657],{"class":66},[49,77635,52654],{"class":147},[49,77637,52554],{"class":66},[49,77639,77640,77642,77644],{"class":51,"line":134},[49,77641,53027],{"class":66},[49,77643,52581],{"class":147},[49,77645,52554],{"class":66},[49,77647,77648,77650,77652],{"class":51,"line":1085},[49,77649,2300],{"class":66},[49,77651,53042],{"class":147},[49,77653,52554],{"class":66},[49,77655,77656,77658,77660],{"class":51,"line":2574},[49,77657,53386],{"class":66},[49,77659,53055],{"class":147},[49,77661,52554],{"class":66},[49,77663,77664,77666,77668,77670,77672,77674,77677,77679,77681,77683,77685,77687,77690,77692],{"class":51,"line":2586},[49,77665,74982],{"class":66},[49,77667,59486],{"class":62},[49,77669,1403],{"class":66},[49,77671,1975],{"class":1505},[49,77673,2355],{"class":109},[49,77675,77676],{"class":49225},"java",[49,77678,1694],{"class":109},[49,77680,1975],{"class":1505},[49,77682,1949],{"class":66},[49,77684,76474],{"class":62},[49,77686,1403],{"class":66},[49,77688,77689],{"class":1505},"'java'",[49,77691,76984],{"class":66},[49,77693,76485],{"class":55},[49,77695,77696,77698,77700,77702,77704,77706,77708,77710,77712,77714,77716,77718,77721,77723],{"class":51,"line":2867},[49,77697,74982],{"class":66},[49,77699,59486],{"class":62},[49,77701,1403],{"class":66},[49,77703,1975],{"class":1505},[49,77705,2355],{"class":109},[49,77707,77676],{"class":49225},[49,77709,1694],{"class":109},[49,77711,1975],{"class":1505},[49,77713,1949],{"class":66},[49,77715,76474],{"class":62},[49,77717,1403],{"class":66},[49,77719,77720],{"class":1505},"'Java'",[49,77722,76984],{"class":66},[49,77724,76608],{"class":55},[49,77726,77727],{"class":51,"line":2872},[49,77728,77729],{"class":55},"    \u002F\u002F 不区分大小写、\n",[49,77731,77732,77734,77736,77738,77740,77742,77744,77746,77748,77750,77752,77754,77756,77758,77760],{"class":51,"line":2878},[49,77733,74982],{"class":66},[49,77735,59486],{"class":62},[49,77737,1403],{"class":66},[49,77739,1975],{"class":1505},[49,77741,2355],{"class":109},[49,77743,77676],{"class":49225},[49,77745,1694],{"class":109},[49,77747,1975],{"class":1505},[49,77749,1833],{"class":109},[49,77751,1949],{"class":66},[49,77753,76474],{"class":62},[49,77755,1403],{"class":66},[49,77757,77720],{"class":1505},[49,77759,76984],{"class":66},[49,77761,76485],{"class":55},[49,77763,77764,77766,77768,77770],{"class":51,"line":2883},[49,77765,12473],{"class":109},[49,77767,75148],{"class":73},[49,77769,14816],{"class":109},[49,77771,77772],{"class":1505}," 'java是一门编程语言，学完java工资很高'\n",[49,77774,77775,77777,77780,77782,77785,77788,77790,77792,77794,77796,77799,77801,77804],{"class":51,"line":2897},[49,77776,12473],{"class":109},[49,77778,77779],{"class":73}," result",[49,77781,14816],{"class":109},[49,77783,77784],{"class":66}," str.",[49,77786,77787],{"class":62},"replace",[49,77789,1403],{"class":66},[49,77791,1975],{"class":1505},[49,77793,77676],{"class":49225},[49,77795,1975],{"class":1505},[49,77797,77798],{"class":109},"ig",[49,77800,13687],{"class":66},[49,77802,77803],{"class":1505},"'前端'",[49,77805,1409],{"class":66},[49,77807,77808,77810,77812],{"class":51,"line":2902},[49,77809,74982],{"class":66},[49,77811,59486],{"class":62},[49,77813,77814],{"class":66},"(result)\n",[49,77816,77817,77819,77821],{"class":51,"line":2908},[49,77818,53659],{"class":66},[49,77820,53055],{"class":147},[49,77822,52554],{"class":66},[49,77824,77825,77827,77829],{"class":51,"line":2929},[49,77826,53027],{"class":66},[49,77828,53042],{"class":147},[49,77830,52554],{"class":66},[49,77832,77833,77835,77837],{"class":51,"line":2934},[49,77834,53027],{"class":66},[49,77836,51883],{"class":147},[49,77838,52554],{"class":66},[1305,77840,77841],{},"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":44,"searchDepth":59,"depth":59,"links":77843},[77844,77854,77866,77883,77890,77898],{"id":54602,"depth":59,"text":54603,"children":77845},[77846,77847,77848,77849,77850,77851,77852,77853],{"id":54606,"depth":70,"text":54607},{"id":54639,"depth":70,"text":54640},{"id":54678,"depth":70,"text":54679},{"id":54836,"depth":70,"text":54837},{"id":54884,"depth":70,"text":54885},{"id":55021,"depth":70,"text":55022},{"id":55342,"depth":70,"text":55343},{"id":58328,"depth":70,"text":58329},{"id":58356,"depth":59,"text":58357,"children":77855},[77856,77857,77858,77859,77860,77861,77862,77863,77864,77865],{"id":58360,"depth":70,"text":58361},{"id":58383,"depth":70,"text":58384},{"id":59298,"depth":70,"text":59299},{"id":59988,"depth":70,"text":59989},{"id":60270,"depth":70,"text":60271},{"id":64428,"depth":70,"text":64429},{"id":64598,"depth":70,"text":64599},{"id":64726,"depth":70,"text":64727},{"id":64751,"depth":70,"text":64752},{"id":66139,"depth":70,"text":66140},{"id":67292,"depth":59,"text":67293,"children":77867},[77868,77869,77870,77871,77872,77873,77874,77875,77876,77877,77878,77879,77880,77881,77882],{"id":67296,"depth":70,"text":67297},{"id":67950,"depth":70,"text":67951},{"id":69645,"depth":70,"text":69646},{"id":69686,"depth":70,"text":69687},{"id":69728,"depth":70,"text":69729},{"id":69742,"depth":70,"text":69743},{"id":69791,"depth":70,"text":69792},{"id":69803,"depth":70,"text":69804},{"id":69818,"depth":70,"text":69819},{"id":69854,"depth":70,"text":69855},{"id":69935,"depth":70,"text":69936},{"id":70063,"depth":70,"text":70064},{"id":70075,"depth":70,"text":70076},{"id":70094,"depth":70,"text":70095},{"id":72200,"depth":70,"text":72201},{"id":72219,"depth":59,"text":72220,"children":77884},[77885,77886,77887,77888,77889],{"id":72240,"depth":70,"text":72241},{"id":72260,"depth":70,"text":72261},{"id":72309,"depth":70,"text":72310},{"id":72434,"depth":70,"text":72435},{"id":72615,"depth":70,"text":72616},{"id":72633,"depth":59,"text":72634,"children":77891},[77892,77893,77894,77895,77896,77897],{"id":72648,"depth":70,"text":72649},{"id":72707,"depth":70,"text":72708},{"id":72731,"depth":70,"text":72732},{"id":73051,"depth":70,"text":73052},{"id":73083,"depth":70,"text":73084},{"id":73106,"depth":70,"text":73107},{"id":76173,"depth":59,"text":76174,"children":77899},[77900,77901],{"id":76207,"depth":70,"text":76208},{"id":76246,"depth":70,"text":76247},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54574,"description":1327},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77908,"title":77909,"body":77910,"description":1327,"extension":1328,"meta":94043,"navigation":1330,"path":94044,"seo":94045,"stem":94046,"__hash__":94047},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77911,"toc":93979},[77912,77915,77918,77922,77926,77931,77936,77947,77951,77956,77959,77963,77966,77971,77975,77979,77982,77987,77990,77994,77997,78005,78008,78012,78017,78022,78025,78029,78034,78039,78042,78046,78051,78054,78059,78062,78067,78070,78075,78080,78083,78086,78090,78095,78100,78103,78107,78111,78114,78117,78120,78124,78128,78133,78138,78141,78145,78150,78155,78158,78161,78164,78167,78170,78173,78176,78179,78182,78187,78191,78196,78201,78204,78207,78210,78213,78216,78219,78222,78225,78229,78233,78236,78239,78242,78247,78249,78252,78255,78258,78261,78264,78267,78270,78273,78276,78279,78282,78285,78288,78293,78298,78303,78306,78310,78313,78318,78322,78324,78335,78340,78441,78444,78447,78450,78453,78455,78458,78461,78464,78466,78469,78472,78475,78477,78480,78482,78485,78488,78491,78494,78497,78500,78502,78505,78507,78509,78512,78516,78520,78523,78526,78529,78532,78535,78538,78541,78544,78547,78552,78672,78675,78678,78683,78686,78689,78692,78695,78700,78703,78706,78709,78712,78717,78720,78820,78885,78959,78963,78966,78969,78973,78976,78990,79019,79022,79025,79028,79031,79034,79037,79040,79042,79045,79048,79051,79054,79058,79063,79067,79072,79147,79150,79333,79336,79339,79342,79345,79348,79350,79353,79356,79359,79362,79365,79368,79370,79374,79377,79382,79385,79388,79391,79394,79396,79401,79404,79407,79410,79413,79415,79420,79423,79426,79428,79430,79433,79437,79440,79443,79448,79451,79454,79457,79507,79512,79516,79521,79524,79593,79596,79605,79609,79614,79617,79620,79628,79631,79648,81449,81453,81457,81462,81465,81469,81475,81481,81633,81638,81643,81646,81649,81652,81655,81658,81661,81664,81667,81670,81673,81676,81679,81684,81688,81691,81702,81706,81711,81714,81717,81720,81723,81726,81728,81731,81734,81737,81740,81742,81759,81762,81766,81769,81774,81779,81782,81785,81789,81792,81795,81804,81807,81811,81814,81819,81824,81891,81895,81898,81901,81906,81911,81997,82002,82006,82009,82012,82027,82030,82035,82039,82044,82153,82156,82167,82317,82321,82326,82435,82439,82444,82449,82454,82457,82464,82484,82520,82684,82689,82692,82697,82704,82707,82710,82713,82772,82828,82884,82888,82893,83208,83211,83215,83218,83223,83332,83337,83341,83346,83350,83421,83425,83427,83430,83433,83471,83747,83751,83768,83834,83868,83872,83875,83880,83909,83916,83925,83930,83945,83950,83959,83962,84099,84103,84165,84169,84174,84419,84423,84428,84431,84433,84436,84439,84443,84448,86029,86033,86037,86043,86046,86051,86055,86058,86063,86066,86077,86081,86086,86090,86095,86100,86103,86108,86112,86116,86119,86124,86129,86132,86135,86138,86260,86265,86367,86370,86373,86377,86382,86554,86559,86563,86566,86571,86637,86642,86645,86776,86779,86784,86787,86790,86881,86886,86889,86892,86895,86898,86903,86908,86911,86916,86921,86926,86930,86933,86936,86941,86946,86951,86956,87010,87013,87016,87021,87024,87027,87032,87037,87042,87046,87051,87065,87070,87073,87078,87082,87087,87092,87097,87102,87107,87112,87117,87122,87125,87129,87134,87137,87140,87143,87148,87153,87156,87159,87163,87166,87169,87174,87179,87184,87189,87192,87197,87202,87263,87268,87271,87276,88517,88522,88526,88530,88535,88538,88543,88548,88551,88556,88558,88563,88567,88570,88573,88584,88588,88593,88598,88653,88658,88663,88668,88879,88884,88888,88893,88896,88898,88901,88904,89351,89356,89363,89369,89372,89375,89639,89644,89648,89913,89918,89922,89927,89932,89937,89942,90273,90276,90281,90286,90289,90293,90297,90302,90307,90312,90317,90322,90327,90331,90334,90339,90344,90347,90421,90426,90431,90436,90438,90441,90811,90816,90821,90826,90829,90832,90934,90939,90944,91047,91051,91056,91060,91064,91069,91074,91077,91082,91085,91088,91481,91486,91489,91492,91495,91498,92018,92022,92027,92032,92037,92040,92045,92048,92051,92433,92438,92440,92442,92445,92448,92960,92964,93025,93028,93031,93034,93038,93041,93046,93051,93976],[10,77913,77909],{"id":77914},"_4js进阶",[19,77916,77917],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77919,77921],{"id":77920},"_41-作用域","4.1 作用域",[183,77923,77925],{"id":77924},"_411-局部作用域","4.1.1 局部作用域",[19,77927,77928],{},[174,77929],{"alt":44,"src":77930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,77932,77933],{},[174,77934],{"alt":44,"src":77935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[23,77937,77938,77941,77944],{},[26,77939,77940],{},"函数作用域在函数内部",[26,77942,77943],{},"块级作用域在{}",[26,77945,77946],{},"对象的那个{}不是作用域，不是块作用域",[183,77948,77950],{"id":77949},"_412-全局作用域","4.1.2 全局作用域",[19,77952,77953],{},[174,77954],{"alt":44,"src":77955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77957,77958],{},"window.a=10不要这样写",[183,77960,77962],{"id":77961},"_413-作用域链","4.1.3 作用域链",[19,77964,77965],{},"变量查找机制",[19,77967,77968],{},[174,77969],{"alt":44,"src":77970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77972,77974],{"id":77973},"_42-垃圾回收机制","4.2 垃圾回收机制",[183,77976,77978],{"id":77977},"_421-大体介绍","4.2.1 大体介绍",[19,77980,77981],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77983,77984],{},[174,77985],{"alt":44,"src":77986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77988,77989],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[183,77991,77993],{"id":77992},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77995,77996],{},"堆栈空间分配区别：",[591,77998,77999,78002],{},[26,78000,78001],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[26,78003,78004],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78006,78007],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[525,78009,78011],{"id":78010},"_4221-引用计数","4.2.2.1 引用计数",[19,78013,78014],{},[174,78015],{"alt":44,"src":78016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78018,78019],{},[174,78020],{"alt":44,"src":78021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78023,78024],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[525,78026,78028],{"id":78027},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78030,78031],{},[174,78032],{"alt":44,"src":78033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78035,78036],{},[174,78037],{"alt":44,"src":78038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78040,78041],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78043,78045],{"id":78044},"_43-闭包","4.3 闭包",[19,78047,78048],{},[174,78049],{"alt":44,"src":78050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78052,78053],{},"闭包：内层函数+外层函数的变量",[19,78055,78056],{},[174,78057],{"alt":44,"src":78058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78060,78061],{},"closure就是闭包",[19,78063,78064],{},[174,78065],{"alt":44,"src":78066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78068,78069],{},"内层函数必须包含外层函数的变量才是闭包",[19,78071,78072],{},[174,78073],{"alt":44,"src":78074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78076,78077],{},[174,78078],{"alt":44,"src":78079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78081,78082],{},"闭包可能会引起内存泄漏",[19,78084,78085],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78087,78089],{"id":78088},"_44-变量提升","4.4 变量提升",[19,78091,78092],{},[174,78093],{"alt":44,"src":78094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78096,78097],{},[174,78098],{"alt":44,"src":78099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78101,78102],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78104,78106],{"id":78105},"_45-函数进阶","4.5 函数进阶",[183,78108,78110],{"id":78109},"_451-函数提升","4.5.1 函数提升",[19,78112,78113],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78115,78116],{},"只提升函数声明，不提升函数调用",[53055,78118,78119],{},"\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",[183,78121,78123],{"id":78122},"_452-函数参数","4.5.2 函数参数",[525,78125,78127],{"id":78126},"_4521-动态参数","4.5.2.1 动态参数",[19,78129,78130],{},[174,78131],{"alt":44,"src":78132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78134,78135],{},[174,78136],{"alt":44,"src":78137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78139,78140],{},"箭头函数里边没有arguments",[525,78142,78144],{"id":78143},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78146,78147],{},[174,78148],{"alt":44,"src":78149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78151,78152],{},[174,78153],{"alt":44,"src":78154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78156,78157],{},"剩余参数使用的时候不需要写...",[19,78159,78160],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78162,78163],{},"  function getSum(a,b,...arr) {",[19,78165,78166],{},"  console.log(11)",[19,78168,78169],{},"  }",[19,78171,78172],{},"  getSum(1,2,3,4)",[19,78174,78175],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78177,78178],{},"  getSum(1,2)",[19,78180,78181],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78183,78184],{},[174,78185],{"alt":44,"src":78186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[525,78188,78190],{"id":78189},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78192,78193],{},[174,78194],{"alt":44,"src":78195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78197,78198],{},[174,78199],{"alt":44,"src":78200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78202,78203],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78205,78206],{},"展开运算符可以用于数组之间的合并：",[19,78208,78209],{},"const arr1 = [1, 2, 3]",[19,78211,78212],{},"const arr2 = [3, 4, 5]",[19,78214,78215],{},"const arr = [...arr1, ...arr2]",[19,78217,78218],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78220,78221],{},"剩余参数：函数参数使用，得到真数组",[19,78223,78224],{},"展开运算符：数组中使用，数组展开",[183,78226,78228],{"id":78227},"_453-箭头函数","4.5.3 箭头函数",[525,78230,78232],{"id":78231},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78234,78235],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78237,78238],{},"它不是万能的！！！",[19,78240,78241],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78243,78244],{},[174,78245],{"alt":44,"src":78246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78248,1432],{},[19,78250,78251],{},"① 只有一个形参的时候，可以省略小括号：",[19,78253,78254],{},"const fn=x=>{console.log(x)}",[19,78256,78257],{},"② 只有一行代码时可以省略大括号：",[19,78259,78260],{},"const fn=x=>console.log(11)",[19,78262,78263],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78265,78266],{},"const fn=x=>x+x",[19,78268,78269],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78271,78272],{},"⑤ 阻止表单默认提交：",[19,78274,78275],{},"const form = document.querySelector('form')",[19,78277,78278],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78280,78281],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78283,78284],{},"const fn=uname=>({uname:uname})",[19,78286,78287],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78289,78290],{},[174,78291],{"alt":44,"src":78292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78294,78295],{},[174,78296],{"alt":44,"src":78297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78299,78300],{},[174,78301],{"alt":44,"src":78302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78304,78305],{},"一定不要忘记用()，有()就理解为自带return",[525,78307,78309],{"id":78308},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78311,78312],{},"箭头函数是没有动态参数的arguments",[19,78314,78315],{},[174,78316],{"alt":44,"src":78317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[525,78319,78321],{"id":78320},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78323,12584],{},[591,78325,78326,78329,78332],{},[26,78327,78328],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[26,78330,78331],{},"事件回调函数使用箭头函数时，this 为全局的 window",[26,78333,78334],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78336,78337],{},[174,78338],{"alt":44,"src":78339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[39,78341,78343],{"className":54309,"code":78342,"language":54311,"meta":44,"style":44},"  \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",[46,78344,78345,78353,78358,78363,78368,78373,78378,78382,78387,78391,78395,78400,78405,78410,78414,78418,78423,78428,78433],{"__ignoreMap":44},[49,78346,78347,78349,78351],{"class":51,"line":52},[49,78348,53386],{"class":66},[49,78350,53055],{"class":147},[49,78352,52554],{"class":66},[49,78354,78355],{"class":51,"line":59},[49,78356,78357],{"class":66},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[49,78359,78360],{"class":51,"line":70},[49,78361,78362],{"class":66},"    console.log(this) \u002F\u002F指向window\n",[49,78364,78365],{"class":51,"line":86},[49,78366,78367],{"class":66},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[49,78369,78370],{"class":51,"line":98},[49,78371,78372],{"class":66},"    function fn() {\n",[49,78374,78375],{"class":51,"line":121},[49,78376,78377],{"class":66},"      console.log(this)  \u002F\u002F指向window\n",[49,78379,78380],{"class":51,"line":134},[49,78381,3441],{"class":66},[49,78383,78384],{"class":51,"line":1085},[49,78385,78386],{"class":66},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[49,78388,78389],{"class":51,"line":2574},[49,78390,3654],{"emptyLinePlaceholder":1330},[49,78392,78393],{"class":51,"line":2586},[49,78394,72753],{"class":66},[49,78396,78397],{"class":51,"line":2867},[49,78398,78399],{"class":66},"      name: 'andy',\n",[49,78401,78402],{"class":51,"line":2872},[49,78403,78404],{"class":66},"      sayHai: function () {\n",[49,78406,78407],{"class":51,"line":2878},[49,78408,78409],{"class":66},"        console.log(this)\n",[49,78411,78412],{"class":51,"line":2883},[49,78413,53640],{"class":66},[49,78415,78416],{"class":51,"line":2897},[49,78417,3441],{"class":66},[49,78419,78420],{"class":51,"line":2902},[49,78421,78422],{"class":66},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[49,78424,78425],{"class":51,"line":2908},[49,78426,78427],{"class":66},"    \u002F\u002F 2.箭头函数的this\n",[49,78429,78430],{"class":51,"line":2929},[49,78431,78432],{"class":66},"    const fn = () => console.log(this)\n",[49,78434,78435,78437,78439],{"class":51,"line":2934},[49,78436,53659],{"class":66},[49,78438,53055],{"class":147},[49,78440,52554],{"class":66},[19,78442,78443],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78445,78446],{},"const fn = () => console.log(this)",[19,78448,78449],{},"fn() \u002F\u002F指向window",[19,78451,78452],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,78454,1265],{},[19,78456,78457],{},"const obj = {",[19,78459,78460],{},"uname: 'pink老师',",[19,78462,78463],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,78465,620],{},[19,78467,78468],{},"调用对象里边的函数",[19,78470,78471],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,78473,78474],{},"obj.sayHai()",[19,78476,1271],{},[19,78478,78479],{},"const obj1 = {",[19,78481,78460],{},[19,78483,78484],{},"sayHai: function () {",[19,78486,78487],{},"let i = 10",[19,78489,78490],{},"const count = () => {",[19,78492,78493],{},"console.log(this)",[19,78495,78496],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,78498,78499],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,78501,620],{},[19,78503,78504],{},"count()",[19,78506,620],{},[19,78508,620],{},[19,78510,78511],{},"obj1.sayHai()",[14,78513,78515],{"id":78514},"_46-解构赋值","4.6 解构赋值",[183,78517,78519],{"id":78518},"_461-数组解构","4.6.1 数组解构",[19,78521,78522],{},"以前要是使用数组中的值的话：",[19,78524,78525],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,78527,78528],{},"const arr=[100,60,80]",[19,78530,78531],{},"const max=arr[0]",[19,78533,78534],{},"const min=arr[1]",[19,78536,78537],{},"const avg=arr[2]",[19,78539,78540],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,78542,78543],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,78545,78546],{},"这个写法就类似于上边的那种用很多const的方法",[19,78548,78549],{},[174,78550],{"alt":44,"src":78551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[39,78553,78555],{"className":51881,"code":78554,"language":51883,"meta":44,"style":44},"①变量之间交换值:\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",[46,78556,78557,78562,78567,78572,78577,78582,78586,78590,78595,78599,78604,78609,78613,78618,78623,78634,78644,78649,78654,78659,78663,78667],{"__ignoreMap":44},[49,78558,78559],{"class":51,"line":52},[49,78560,78561],{"class":66},"①变量之间交换值:\n",[49,78563,78564],{"class":51,"line":59},[49,78565,78566],{"class":66},"let a=1\n",[49,78568,78569],{"class":51,"line":70},[49,78570,78571],{"class":66},"let b=2;\n",[49,78573,78574],{"class":51,"line":86},[49,78575,78576],{"class":66},"必须加这行代码，不然就会报错\n",[49,78578,78579],{"class":51,"line":98},[49,78580,78581],{"class":66},"[b,a]=[a,b]\n",[49,78583,78584],{"class":51,"line":121},[49,78585,3654],{"emptyLinePlaceholder":1330},[49,78587,78588],{"class":51,"line":134},[49,78589,3654],{"emptyLinePlaceholder":1330},[49,78591,78592],{"class":51,"line":1085},[49,78593,78594],{"class":66},"可以写成下面的方式：\n",[49,78596,78597],{"class":51,"line":2574},[49,78598,78566],{"class":66},[49,78600,78601],{"class":51,"line":2586},[49,78602,78603],{"class":66},"let b=2\n",[49,78605,78606],{"class":51,"line":2867},[49,78607,78608],{"class":66},";[b,a]=[a,b]\n",[49,78610,78611],{"class":51,"line":2872},[49,78612,3654],{"emptyLinePlaceholder":1330},[49,78614,78615],{"class":51,"line":2878},[49,78616,78617],{"class":66},"②排序\n",[49,78619,78620],{"class":51,"line":2883},[49,78621,78622],{"class":66},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[49,78624,78625,78628,78631],{"class":51,"line":2897},[49,78626,78627],{"class":66},"for (let i = 0; i ",[49,78629,2300],{"class":78630},"s7hpK",[49,78632,78633],{"class":66}," arr1.length; i++) {\n",[49,78635,78636,78639,78641],{"class":51,"line":2902},[49,78637,78638],{"class":66},"   for (let j = 0; j ",[49,78640,2300],{"class":78630},[49,78642,78643],{"class":66}," arr1.length - 1; j++) {\n",[49,78645,78646],{"class":51,"line":2908},[49,78647,78648],{"class":66},"      if (arr1[j] > arr1[j + 1]) {\n",[49,78650,78651],{"class":51,"line":2929},[49,78652,78653],{"class":66},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[49,78655,78656],{"class":51,"line":2934},[49,78657,78658],{"class":66},"       }\n",[49,78660,78661],{"class":51,"line":2948},[49,78662,5563],{"class":66},[49,78664,78665],{"class":51,"line":2953},[49,78666,137],{"class":66},[49,78668,78669],{"class":51,"line":2982},[49,78670,78671],{"class":66},"console.log(arr1)\n",[19,78673,78674],{},"数组解构的细节：",[19,78676,78677],{},"①变量多，单元值少",[19,78679,78680],{},[174,78681],{"alt":44,"src":78682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,78684,78685],{},"防止出现undefined的方法：",[19,78687,78688],{},"const [a=0,b=0] =[1]",[19,78690,78691],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,78693,78694],{},"②变量少，单元值多",[19,78696,78697],{},[174,78698],{"alt":44,"src":78699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,78701,78702],{},"此时可以使用剩余参数来接收多余的值",[19,78704,78705],{},"const [a,b,...c]=[1,2,3,4]",[19,78707,78708],{},"console.log(c) 输出[3,4]",[19,78710,78711],{},"③可以按需导入，忽略某些返回值",[19,78713,78714],{},[174,78715],{"alt":44,"src":78716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,78718,78719],{},"④支持多维数组的结构",[39,78721,78725],{"className":78722,"code":78723,"language":78724,"meta":44,"style":44},"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",[46,78726,78727,78755,78771,78786,78801],{"__ignoreMap":44},[49,78728,78729,78731,78733,78735,78737,78739,78741,78743,78746,78748,78750,78752],{"class":51,"line":52},[49,78730,8044],{"class":109},[49,78732,53075],{"class":66},[49,78734,1448],{"class":109},[49,78736,53468],{"class":66},[49,78738,159],{"class":73},[49,78740,13687],{"class":66},[49,78742,1478],{"class":73},[49,78744,78745],{"class":66},", [",[49,78747,1472],{"class":73},[49,78749,13687],{"class":66},[49,78751,1685],{"class":73},[49,78753,78754],{"class":66},"]]\n",[49,78756,78757,78760,78762,78764,78766,78768],{"class":51,"line":59},[49,78758,78759],{"class":66},"console.",[49,78761,59486],{"class":62},[49,78763,5105],{"class":66},[49,78765,80],{"class":73},[49,78767,5470],{"class":66},[49,78769,78770],{"class":55},"  \u002F\u002F1\n",[49,78772,78773,78775,78777,78779,78781,78783],{"class":51,"line":70},[49,78774,78759],{"class":66},[49,78776,59486],{"class":62},[49,78778,5105],{"class":66},[49,78780,159],{"class":73},[49,78782,5470],{"class":66},[49,78784,78785],{"class":55},"  \u002F\u002F2\n",[49,78787,78788,78790,78792,78794,78796,78798],{"class":51,"line":86},[49,78789,78759],{"class":66},[49,78791,59486],{"class":62},[49,78793,5105],{"class":66},[49,78795,1478],{"class":73},[49,78797,5470],{"class":66},[49,78799,78800],{"class":55},"  \u002F\u002F[3,4]\n",[49,78802,78803,78805,78807,78809,78811,78813,78815,78817],{"class":51,"line":98},[49,78804,78759],{"class":66},[49,78806,59486],{"class":62},[49,78808,5105],{"class":66},[49,78810,1478],{"class":73},[49,78812,6155],{"class":66},[49,78814,80],{"class":73},[49,78816,5470],{"class":66},[49,78818,78819],{"class":55},"  \u002F\u002F3\n",[39,78821,78823],{"className":78722,"code":78822,"language":78724,"meta":44,"style":44},"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",[46,78824,78825,78852,78863,78874],{"__ignoreMap":44},[49,78826,78827,78829,78832,78834,78836,78838,78840,78842,78844,78846,78848,78850],{"class":51,"line":52},[49,78828,8044],{"class":109},[49,78830,78831],{"class":66}," [a, b, c] ",[49,78833,1448],{"class":109},[49,78835,53468],{"class":66},[49,78837,159],{"class":73},[49,78839,13687],{"class":66},[49,78841,1478],{"class":73},[49,78843,78745],{"class":66},[49,78845,1472],{"class":73},[49,78847,13687],{"class":66},[49,78849,1685],{"class":73},[49,78851,78754],{"class":66},[49,78853,78854,78856,78858,78861],{"class":51,"line":59},[49,78855,78759],{"class":66},[49,78857,59486],{"class":62},[49,78859,78860],{"class":66},"(a)",[49,78862,78770],{"class":55},[49,78864,78865,78867,78869,78872],{"class":51,"line":70},[49,78866,78759],{"class":66},[49,78868,59486],{"class":62},[49,78870,78871],{"class":66},"(b)",[49,78873,78785],{"class":55},[49,78875,78876,78878,78880,78883],{"class":51,"line":86},[49,78877,78759],{"class":66},[49,78879,59486],{"class":62},[49,78881,78882],{"class":66},"(c)",[49,78884,78800],{"class":55},[39,78886,78888],{"className":78722,"code":78887,"language":78724,"meta":44,"style":44},"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",[46,78889,78890,78917,78927,78937,78947],{"__ignoreMap":44},[49,78891,78892,78894,78897,78899,78901,78903,78905,78907,78909,78911,78913,78915],{"class":51,"line":52},[49,78893,8044],{"class":109},[49,78895,78896],{"class":66}," [a, b, [c, d]] ",[49,78898,1448],{"class":109},[49,78900,53468],{"class":66},[49,78902,159],{"class":73},[49,78904,13687],{"class":66},[49,78906,1478],{"class":73},[49,78908,78745],{"class":66},[49,78910,1472],{"class":73},[49,78912,13687],{"class":66},[49,78914,1685],{"class":73},[49,78916,78754],{"class":66},[49,78918,78919,78921,78923,78925],{"class":51,"line":59},[49,78920,78759],{"class":66},[49,78922,59486],{"class":62},[49,78924,78860],{"class":66},[49,78926,78770],{"class":55},[49,78928,78929,78931,78933,78935],{"class":51,"line":70},[49,78930,78759],{"class":66},[49,78932,59486],{"class":62},[49,78934,78871],{"class":66},[49,78936,78785],{"class":55},[49,78938,78939,78941,78943,78945],{"class":51,"line":86},[49,78940,78759],{"class":66},[49,78942,59486],{"class":62},[49,78944,78882],{"class":66},[49,78946,78819],{"class":55},[49,78948,78949,78951,78953,78956],{"class":51,"line":98},[49,78950,78759],{"class":66},[49,78952,59486],{"class":62},[49,78954,78955],{"class":66},"(d)",[49,78957,78958],{"class":55},"  \u002F\u002F4\n",[183,78960,78962],{"id":78961},"_462-对象解构","4.6.2 对象解构",[19,78964,78965],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78967,78968],{},"用的非常非常多！！！！！！",[525,78970,78972],{"id":78971},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78974,78975],{},"基本语法：",[591,78977,78978,78981,78984,78987],{},[26,78979,78980],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[26,78982,78983],{},"对象属性的值将被赋值给与属性名相同的变量",[26,78985,78986],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[26,78988,78989],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[39,78991,78993],{"className":51881,"code":78992,"language":51883,"meta":44,"style":44},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[46,78994,78995,79000,79005,79010,79014],{"__ignoreMap":44},[49,78996,78997],{"class":51,"line":52},[49,78998,78999],{"class":66},"const obj = {\n",[49,79001,79002],{"class":51,"line":59},[49,79003,79004],{"class":66},"   uname: 'pink老师',\n",[49,79006,79007],{"class":51,"line":70},[49,79008,79009],{"class":66},"   age: 18,\n",[49,79011,79012],{"class":51,"line":86},[49,79013,137],{"class":66},[49,79015,79016],{"class":51,"line":98},[49,79017,79018],{"class":66},"const { uname, age } = obj\n",[19,79020,79021],{},"上方代码这样写等价于：",[19,79023,79024],{},"const uname等价于obj.uname",[19,79026,79027],{},"变量名可以重新改名：",[19,79029,79030],{},"const uname='red老师'",[19,79032,79033],{},"const user={",[19,79035,79036],{},"  uname:'pink老师',",[19,79038,79039],{},"  age:18",[19,79041,620],{},[19,79043,79044],{},"const {uname,age}=user",[19,79046,79047],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79049,79050],{},"const {旧变量名：新变量名}=对象",[19,79052,79053],{},"const {uname:username,age}=user",[525,79055,79057],{"id":79056},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79059,79060],{},[174,79061],{"alt":44,"src":79062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[525,79064,79066],{"id":79065},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79068,79069],{},[174,79070],{"alt":44,"src":79071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[39,79073,79075],{"className":54309,"code":79074,"language":54311,"meta":44,"style":44},"  \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",[46,79076,79077,79085,79090,79095,79100,79105,79110,79115,79120,79125,79129,79134,79139],{"__ignoreMap":44},[49,79078,79079,79081,79083],{"class":51,"line":52},[49,79080,53386],{"class":66},[49,79082,53055],{"class":147},[49,79084,52554],{"class":66},[49,79086,79087],{"class":51,"line":59},[49,79088,79089],{"class":66},"    const pig = {\n",[49,79091,79092],{"class":51,"line":70},[49,79093,79094],{"class":66},"      name: '佩奇',\n",[49,79096,79097],{"class":51,"line":86},[49,79098,79099],{"class":66},"      family: {\n",[49,79101,79102],{"class":51,"line":98},[49,79103,79104],{"class":66},"        mother: '猪妈妈',\n",[49,79106,79107],{"class":51,"line":121},[49,79108,79109],{"class":66},"        father: '猪爸爸',\n",[49,79111,79112],{"class":51,"line":134},[49,79113,79114],{"class":66},"        sister: '乔治'\n",[49,79116,79117],{"class":51,"line":1085},[49,79118,79119],{"class":66},"      },\n",[49,79121,79122],{"class":51,"line":2574},[49,79123,79124],{"class":66},"      age: 6\n",[49,79126,79127],{"class":51,"line":2586},[49,79128,3441],{"class":66},[49,79130,79131],{"class":51,"line":2867},[49,79132,79133],{"class":66},"    \u002F\u002F 多级对象解构\n",[49,79135,79136],{"class":51,"line":2872},[49,79137,79138],{"class":66},"    const { name, family: { mother, father, sister }, age } = pig\n",[49,79140,79141,79143,79145],{"class":51,"line":2878},[49,79142,53659],{"class":66},[49,79144,53055],{"class":147},[49,79146,52554],{"class":66},[19,79148,79149],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[39,79151,79154],{"className":79152,"code":79153,"language":77676,"meta":44,"style":44},"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",[46,79155,79156,79161,79172,79184,79196,79205,79209,79220,79232,79242,79247,79251,79261,79272,79281,79285,79289,79300,79311,79320,79324,79329],{"__ignoreMap":44},[49,79157,79158],{"class":51,"line":52},[49,79159,79160],{"class":55},"    \u002F\u002F 这是后台传递过来的数据\n",[49,79162,79163,79165,79168,79170],{"class":51,"line":59},[49,79164,12473],{"class":109},[49,79166,79167],{"class":66}," msg ",[49,79169,1448],{"class":109},[49,79171,67],{"class":66},[49,79173,79174,79177,79179,79182],{"class":51,"line":70},[49,79175,79176],{"class":1505},"      \"code\"",[49,79178,2249],{"class":109},[49,79180,79181],{"class":73}," 200",[49,79183,32714],{"class":66},[49,79185,79186,79189,79191,79194],{"class":51,"line":86},[49,79187,79188],{"class":1505},"      \"msg\"",[49,79190,2249],{"class":109},[49,79192,79193],{"class":1505}," \"获取新闻列表成功\"",[49,79195,32714],{"class":66},[49,79197,79198,79201,79203],{"class":51,"line":98},[49,79199,79200],{"class":1505},"      \"data\"",[49,79202,2249],{"class":109},[49,79204,56686],{"class":66},[49,79206,79207],{"class":51,"line":121},[49,79208,3764],{"class":66},[49,79210,79211,79214,79216,79218],{"class":51,"line":134},[49,79212,79213],{"class":1505},"          \"id\"",[49,79215,2249],{"class":109},[49,79217,26367],{"class":73},[49,79219,32714],{"class":66},[49,79221,79222,79225,79227,79230],{"class":51,"line":1085},[49,79223,79224],{"class":1505},"          \"title\"",[49,79226,2249],{"class":109},[49,79228,79229],{"class":1505}," \"5G商用自己，三大运用商收入下降\"",[49,79231,32714],{"class":66},[49,79233,79234,79237,79239],{"class":51,"line":2574},[49,79235,79236],{"class":1505},"          \"count\"",[49,79238,2249],{"class":109},[49,79240,79241],{"class":73}," 58\n",[49,79243,79244],{"class":51,"line":2586},[49,79245,79246],{"class":66},"        },\n",[49,79248,79249],{"class":51,"line":2867},[49,79250,3764],{"class":66},[49,79252,79253,79255,79257,79259],{"class":51,"line":2872},[49,79254,79213],{"class":1505},[49,79256,2249],{"class":109},[49,79258,16006],{"class":73},[49,79260,32714],{"class":66},[49,79262,79263,79265,79267,79270],{"class":51,"line":2878},[49,79264,79224],{"class":1505},[49,79266,2249],{"class":109},[49,79268,79269],{"class":1505}," \"国际媒体头条速览\"",[49,79271,32714],{"class":66},[49,79273,79274,79276,79278],{"class":51,"line":2883},[49,79275,79236],{"class":1505},[49,79277,2249],{"class":109},[49,79279,79280],{"class":73}," 56\n",[49,79282,79283],{"class":51,"line":2897},[49,79284,79246],{"class":66},[49,79286,79287],{"class":51,"line":2902},[49,79288,3764],{"class":66},[49,79290,79291,79293,79295,79298],{"class":51,"line":2908},[49,79292,79213],{"class":1505},[49,79294,2249],{"class":109},[49,79296,79297],{"class":73}," 3",[49,79299,32714],{"class":66},[49,79301,79302,79304,79306,79309],{"class":51,"line":2929},[49,79303,79224],{"class":1505},[49,79305,2249],{"class":109},[49,79307,79308],{"class":1505}," \"乌克兰和俄罗斯持续冲突\"",[49,79310,32714],{"class":66},[49,79312,79313,79315,79317],{"class":51,"line":2934},[49,79314,79236],{"class":1505},[49,79316,2249],{"class":109},[49,79318,79319],{"class":73}," 1669\n",[49,79321,79322],{"class":51,"line":2948},[49,79323,79246],{"class":66},[49,79325,79326],{"class":51,"line":2953},[49,79327,79328],{"class":66},"      ]\n",[49,79330,79331],{"class":51,"line":2982},[49,79332,3441],{"class":66},[19,79334,79335],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79337,79338],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79340,79341],{},"\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,79343,79344],{},"function({data}) {",[19,79346,79347],{},"console.log(data)",[19,79349,620],{},[19,79351,79352],{},"render(msg)",[19,79354,79355],{},"实参传递给形参的时候解构了",[19,79357,79358],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79360,79361],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79363,79364],{},"function render({data:mydata}) {",[19,79366,79367],{},"  console.log(data)",[19,79369,620],{},[183,79371,79373],{"id":79372},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79375,79376],{},"有两种情况：一个是数组结构，一个是立即执行函数",[591,79378,79379],{},[26,79380,79381],{},"如果对一个数组进行遍历，有两种方式：",[19,79383,79384],{},"①法1",[19,79386,79387],{},"const arr=[1,2,3]",[19,79389,79390],{},"arr.map(function(item,index) {",[19,79392,79393],{},"  console.log(item)",[19,79395,53706],{},[19,79397,79398],{},[174,79399],{"alt":44,"src":79400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79402,79403],{},"②法2",[19,79405,79406],{},"const str='pink'",[19,79408,79409],{},"[1,2,3].map(function(item,index) {",[19,79411,79412],{},"console.log(item)",[19,79414,53706],{},[19,79416,79417],{},[174,79418],{"alt":44,"src":79419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79421,79422],{},"此时会报错",[19,79424,79425],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79427,79412],{},[19,79429,53706],{},[19,79431,79432],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79434,79436],{"id":79435},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79438,79439],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79441,79442],{},"可以理解为加强版的for循环",[19,79444,79445],{},[174,79446],{"alt":44,"src":79447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,79449,79450],{},"里边不写return，不返回数组，只遍历不返回",[19,79452,79453],{},"map是返回数组",[19,79455,79456],{},"forEach主要用于遍历数组对象",[39,79458,79460],{"className":54309,"code":79459,"language":54311,"meta":44,"style":44},"  \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",[46,79461,79462,79470,79475,79480,79485,79490,79494,79499],{"__ignoreMap":44},[49,79463,79464,79466,79468],{"class":51,"line":52},[49,79465,53386],{"class":66},[49,79467,53055],{"class":147},[49,79469,52554],{"class":66},[49,79471,79472],{"class":51,"line":59},[49,79473,79474],{"class":66},"    const arr = ['red', 'green', 'pink']\n",[49,79476,79477],{"class":51,"line":70},[49,79478,79479],{"class":66},"    const result = arr.forEach(function (item, index) {\n",[49,79481,79482],{"class":51,"line":86},[49,79483,79484],{"class":66},"      console.log(item)\n",[49,79486,79487],{"class":51,"line":98},[49,79488,79489],{"class":66},"      console.log(index)\n",[49,79491,79492],{"class":51,"line":121},[49,79493,34709],{"class":66},[49,79495,79496],{"class":51,"line":134},[49,79497,79498],{"class":66},"    console.log(result)\n",[49,79500,79501,79503,79505],{"class":51,"line":1085},[49,79502,53659],{"class":66},[49,79504,53055],{"class":147},[49,79506,52554],{"class":66},[19,79508,79509],{},[174,79510],{"alt":44,"src":79511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79513,79515],{"id":79514},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,79517,79518],{},[174,79519],{"alt":44,"src":79520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,79522,79523],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[39,79525,79527],{"className":54309,"code":79526,"language":54311,"meta":44,"style":44},"\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",[46,79528,79529,79537,79545,79550,79555,79559,79563,79568,79572,79577,79585],{"__ignoreMap":44},[49,79530,79531,79533,79535],{"class":51,"line":52},[49,79532,2300],{"class":66},[49,79534,53042],{"class":147},[49,79536,52554],{"class":66},[49,79538,79539,79541,79543],{"class":51,"line":59},[49,79540,53386],{"class":66},[49,79542,53055],{"class":147},[49,79544,52554],{"class":66},[49,79546,79547],{"class":51,"line":70},[49,79548,79549],{"class":66},"    const arr = [10, 20, 30]\n",[49,79551,79552],{"class":51,"line":86},[49,79553,79554],{"class":66},"    const newArr = arr.filter(function (item, index) {\n",[49,79556,79557],{"class":51,"line":98},[49,79558,79484],{"class":66},[49,79560,79561],{"class":51,"line":121},[49,79562,79489],{"class":66},[49,79564,79565],{"class":51,"line":134},[49,79566,79567],{"class":66},"      return item >= 20\n",[49,79569,79570],{"class":51,"line":1085},[49,79571,34709],{"class":66},[49,79573,79574],{"class":51,"line":2574},[49,79575,79576],{"class":66},"    console.log(newArr)\n",[49,79578,79579,79581,79583],{"class":51,"line":2586},[49,79580,53659],{"class":66},[49,79582,53055],{"class":147},[49,79584,52554],{"class":66},[49,79586,79587,79589,79591],{"class":51,"line":2867},[49,79588,53027],{"class":66},[49,79590,53042],{"class":147},[49,79592,52554],{"class":66},[19,79594,79595],{},"这个也可以写成箭头函数：",[39,79597,79599],{"className":51881,"code":79598,"language":51883,"meta":44,"style":44},"const newArr = arr.filter(item => item >= 20)\n",[46,79600,79601],{"__ignoreMap":44},[49,79602,79603],{"class":51,"line":52},[49,79604,79598],{"class":66},[14,79606,79608],{"id":79607},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,79610,79611],{},[174,79612],{"alt":44,"src":79613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,79615,79616],{},"步骤：",[19,79618,79619],{},"①：渲染页面模块",[23,79621,79622,79625],{},[26,79623,79624],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[26,79626,79627],{},"用forEach+字符串的形式",[19,79629,79630],{},"②：点击不同需求，显示不同页面内容",[23,79632,79633,79636,79639,79642,79645],{},[26,79634,79635],{},"点击采取事件委托方式 .filter",[26,79637,79638],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[26,79640,79641],{},"筛选条件是根据点击的 data-index 来判断",[26,79643,79644],{},"可以使用对象解构，把事件对象解构",[26,79646,79647],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[39,79649,79651],{"className":51881,"code":79650,"language":51883,"meta":44,"style":44},"\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",[46,79652,79653,79663,79677,79681,79689,79703,79723,79735,79743,79749,79759,79769,79779,79783,79787,79793,79806,79818,79828,79840,79844,79848,79855,79868,79880,79897,79915,79928,79932,79936,79948,79958,79962,79966,79973,80014,80041,80051,80055,80059,80067,80079,80083,80087,80095,80107,80119,80130,80134,80138,80147,80159,80170,80174,80178,80187,80199,80211,80215,80219,80226,80236,80248,80260,80275,80279,80283,80291,80307,80317,80327,80337,80349,80353,80357,80367,80378,80388,80392,80400,80408,80412,80420,80435,80461,80486,80511,80530,80538,80552,80557,80562,80567,80572,80577,80585,80593,80598,80609,80614,80624,80634,80644,80654,80658,80662,80671,80680,80689,80698,80702,80706,80715,80724,80733,80742,80746,80750,80759,80768,80777,80786,80790,80794,80803,80812,80821,80830,80834,80838,80847,80856,80865,80874,80878,80882,80891,80900,80909,80918,80922,80926,80935,80944,80952,80961,80965,80969,80973,80978,80990,80995,81007,81011,81028,81055,81064,81069,81079,81089,81098,81103,81108,81112,81117,81134,81138,81143,81151,81156,81183,81188,81208,81213,81225,81230,81235,81240,81251,81265,81302,81320,81353,81370,81394,81398,81403,81409,81413,81417,81421,81429,81437,81441],{"__ignoreMap":44},[49,79654,79655,79657,79659,79661],{"class":51,"line":52},[49,79656,52545],{"class":66},[49,79658,52548],{"class":147},[49,79660,52551],{"class":62},[49,79662,52554],{"class":66},[49,79664,79665,79667,79669,79671,79673,79675],{"class":51,"line":59},[49,79666,2300],{"class":66},[49,79668,51883],{"class":147},[49,79670,52563],{"class":62},[49,79672,1448],{"class":66},[49,79674,52568],{"class":1505},[49,79676,52554],{"class":66},[49,79678,79679],{"class":51,"line":70},[49,79680,3654],{"emptyLinePlaceholder":1330},[49,79682,79683,79685,79687],{"class":51,"line":86},[49,79684,2300],{"class":66},[49,79686,52581],{"class":147},[49,79688,52554],{"class":66},[49,79690,79691,79693,79695,79697,79699,79701],{"class":51,"line":98},[49,79692,53386],{"class":66},[49,79694,52591],{"class":147},[49,79696,52594],{"class":62},[49,79698,1448],{"class":66},[49,79700,52599],{"class":1505},[49,79702,52554],{"class":66},[49,79704,79705,79707,79709,79711,79713,79715,79717,79719,79721],{"class":51,"line":121},[49,79706,53386],{"class":66},[49,79708,52591],{"class":147},[49,79710,16171],{"class":62},[49,79712,1448],{"class":66},[49,79714,52638],{"class":1505},[49,79716,52618],{"class":62},[49,79718,1448],{"class":66},[49,79720,52645],{"class":1505},[49,79722,52554],{"class":66},[49,79724,79725,79727,79729,79731,79733],{"class":51,"line":134},[49,79726,53386],{"class":66},[49,79728,52654],{"class":147},[49,79730,52657],{"class":66},[49,79732,52654],{"class":147},[49,79734,52554],{"class":66},[49,79736,79737,79739,79741],{"class":51,"line":1085},[49,79738,53386],{"class":66},[49,79740,1305],{"class":147},[49,79742,52554],{"class":66},[49,79744,79745,79747],{"class":51,"line":2574},[49,79746,7655],{"class":147},[49,79748,67],{"class":66},[49,79750,79751,79753,79755,79757],{"class":51,"line":2586},[49,79752,55936],{"class":73},[49,79754,77],{"class":66},[49,79756,80],{"class":73},[49,79758,83],{"class":66},[49,79760,79761,79763,79765,79767],{"class":51,"line":2867},[49,79762,55947],{"class":73},[49,79764,77],{"class":66},[49,79766,80],{"class":73},[49,79768,83],{"class":66},[49,79770,79771,79773,79775,79777],{"class":51,"line":2872},[49,79772,73825],{"class":73},[49,79774,77],{"class":66},[49,79776,61744],{"class":73},[49,79778,83],{"class":66},[49,79780,79781],{"class":51,"line":2878},[49,79782,3441],{"class":66},[49,79784,79785],{"class":51,"line":2883},[49,79786,3654],{"emptyLinePlaceholder":1330},[49,79788,79789,79791],{"class":51,"line":2897},[49,79790,63360],{"class":62},[49,79792,67],{"class":66},[49,79794,79795,79797,79799,79802,79804],{"class":51,"line":2902},[49,79796,56010],{"class":73},[49,79798,77],{"class":66},[49,79800,79801],{"class":73},"990",[49,79803,110],{"class":109},[49,79805,83],{"class":66},[49,79807,79808,79810,79812,79814,79816],{"class":51,"line":2908},[49,79809,55947],{"class":73},[49,79811,77],{"class":66},[49,79813,80],{"class":73},[49,79815,1077],{"class":73},[49,79817,83],{"class":66},[49,79819,79820,79822,79824,79826],{"class":51,"line":2929},[49,79821,56248],{"class":73},[49,79823,77],{"class":66},[49,79825,52723],{"class":73},[49,79827,83],{"class":66},[49,79829,79830,79833,79835,79838],{"class":51,"line":2934},[49,79831,79832],{"class":73},"      flex-wrap",[49,79834,77],{"class":66},[49,79836,79837],{"class":73},"wrap",[49,79839,83],{"class":66},[49,79841,79842],{"class":51,"line":2948},[49,79843,3441],{"class":66},[49,79845,79846],{"class":51,"line":2953},[49,79847,3654],{"emptyLinePlaceholder":1330},[49,79849,79850,79853],{"class":51,"line":2982},[49,79851,79852],{"class":62},"    .item",[49,79854,67],{"class":66},[49,79856,79857,79859,79861,79864,79866],{"class":51,"line":2987},[49,79858,56010],{"class":73},[49,79860,77],{"class":66},[49,79862,79863],{"class":73},"240",[49,79865,110],{"class":109},[49,79867,83],{"class":66},[49,79869,79870,79872,79874,79876,79878],{"class":51,"line":3004},[49,79871,63238],{"class":73},[49,79873,77],{"class":66},[49,79875,106],{"class":73},[49,79877,110],{"class":109},[49,79879,83],{"class":66},[49,79881,79882,79884,79886,79888,79890,79893,79895],{"class":51,"line":3009},[49,79883,55936],{"class":73},[49,79885,77],{"class":66},[49,79887,875],{"class":73},[49,79889,110],{"class":109},[49,79891,79892],{"class":73}," 30",[49,79894,110],{"class":109},[49,79896,83],{"class":66},[49,79898,79899,79901,79903,79905,79908,79911,79913],{"class":51,"line":3014},[49,79900,63098],{"class":73},[49,79902,77],{"class":66},[49,79904,29369],{"class":73},[49,79906,79907],{"class":73}," ease",[49,79909,79910],{"class":73}," .5",[49,79912,2086],{"class":109},[49,79914,83],{"class":66},[49,79916,79917,79920,79922,79924,79926],{"class":51,"line":3019},[49,79918,79919],{"class":73},"      margin-bottom",[49,79921,77],{"class":66},[49,79923,875],{"class":73},[49,79925,110],{"class":109},[49,79927,83],{"class":66},[49,79929,79930],{"class":51,"line":3033},[49,79931,3441],{"class":66},[49,79933,79934],{"class":51,"line":3038},[49,79935,3654],{"emptyLinePlaceholder":1330},[49,79937,79938,79941,79943,79946],{"class":51,"line":3831},[49,79939,79940],{"class":62},"    .item:nth-child",[49,79942,1403],{"class":66},[49,79944,79945],{"class":73},"4n",[49,79947,13694],{"class":66},[49,79949,79950,79952,79954,79956],{"class":51,"line":3845},[49,79951,63238],{"class":73},[49,79953,77],{"class":66},[49,79955,80],{"class":73},[49,79957,83],{"class":66},[49,79959,79960],{"class":51,"line":3853},[49,79961,3441],{"class":66},[49,79963,79964],{"class":51,"line":3858},[49,79965,3654],{"emptyLinePlaceholder":1330},[49,79967,79968,79971],{"class":51,"line":3864},[49,79969,79970],{"class":62},"    .item:hover",[49,79972,67],{"class":66},[49,79974,79975,79978,79980,79982,79984,79986,79988,79990,79992,79995,79997,79999,80001,80003,80005,80007,80009,80012],{"class":51,"line":3870},[49,79976,79977],{"class":73},"      box-shadow",[49,79979,77],{"class":66},[49,79981,80],{"class":73},[49,79983,110],{"class":109},[49,79985,5347],{"class":73},[49,79987,110],{"class":109},[49,79989,3402],{"class":73},[49,79991,110],{"class":109},[49,79993,79994],{"class":73}," rgba",[49,79996,1403],{"class":66},[49,79998,80],{"class":73},[49,80000,13687],{"class":66},[49,80002,80],{"class":73},[49,80004,13687],{"class":66},[49,80006,80],{"class":73},[49,80008,13687],{"class":66},[49,80010,80011],{"class":73},".2",[49,80013,3973],{"class":66},[49,80015,80016,80019,80021,80024,80026,80028,80030,80033,80035,80037,80039],{"class":51,"line":3875},[49,80017,80018],{"class":73},"      transform",[49,80020,77],{"class":66},[49,80022,80023],{"class":73},"translate3d",[49,80025,1403],{"class":66},[49,80027,80],{"class":73},[49,80029,13687],{"class":66},[49,80031,80032],{"class":73},"-4",[49,80034,110],{"class":109},[49,80036,13687],{"class":66},[49,80038,80],{"class":73},[49,80040,3973],{"class":66},[49,80042,80043,80045,80047,80049],{"class":51,"line":9200},[49,80044,63263],{"class":73},[49,80046,77],{"class":66},[49,80048,211],{"class":73},[49,80050,83],{"class":66},[49,80052,80053],{"class":51,"line":9224},[49,80054,3441],{"class":66},[49,80056,80057],{"class":51,"line":9229},[49,80058,3654],{"emptyLinePlaceholder":1330},[49,80060,80061,80063,80065],{"class":51,"line":9235},[49,80062,79852],{"class":62},[49,80064,56854],{"class":147},[49,80066,67],{"class":66},[49,80068,80069,80071,80073,80075,80077],{"class":51,"line":9262},[49,80070,56010],{"class":73},[49,80072,77],{"class":66},[49,80074,1703],{"class":73},[49,80076,1720],{"class":109},[49,80078,83],{"class":66},[49,80080,80081],{"class":51,"line":9267},[49,80082,3441],{"class":66},[49,80084,80085],{"class":51,"line":9273},[49,80086,3654],{"emptyLinePlaceholder":1330},[49,80088,80089,80091,80093],{"class":51,"line":9285},[49,80090,79852],{"class":62},[49,80092,63541],{"class":62},[49,80094,67],{"class":66},[49,80096,80097,80099,80101,80103,80105],{"class":51,"line":9297},[49,80098,56161],{"class":73},[49,80100,77],{"class":66},[49,80102,2041],{"class":73},[49,80104,110],{"class":109},[49,80106,83],{"class":66},[49,80108,80109,80111,80113,80115,80117],{"class":51,"line":9309},[49,80110,79919],{"class":73},[49,80112,77],{"class":66},[49,80114,106],{"class":73},[49,80116,110],{"class":109},[49,80118,83],{"class":66},[49,80120,80121,80123,80125,80128],{"class":51,"line":10968},[49,80122,58655],{"class":73},[49,80124,77],{"class":66},[49,80126,80127],{"class":73},"#666",[49,80129,83],{"class":66},[49,80131,80132],{"class":51,"line":10993},[49,80133,3441],{"class":66},[49,80135,80136],{"class":51,"line":11016},[49,80137,3654],{"emptyLinePlaceholder":1330},[49,80139,80140,80142,80145],{"class":51,"line":11040},[49,80141,79852],{"class":62},[49,80143,80144],{"class":62}," .price",[49,80146,67],{"class":66},[49,80148,80149,80151,80153,80155,80157],{"class":51,"line":11045},[49,80150,56161],{"class":73},[49,80152,77],{"class":66},[49,80154,2140],{"class":73},[49,80156,110],{"class":109},[49,80158,83],{"class":66},[49,80160,80161,80163,80165,80168],{"class":51,"line":11050},[49,80162,58655],{"class":73},[49,80164,77],{"class":66},[49,80166,80167],{"class":73},"firebrick",[49,80169,83],{"class":66},[49,80171,80172],{"class":51,"line":11055},[49,80173,3441],{"class":66},[49,80175,80176],{"class":51,"line":11064},[49,80177,3654],{"emptyLinePlaceholder":1330},[49,80179,80180,80182,80185],{"class":51,"line":11069},[49,80181,79852],{"class":62},[49,80183,80184],{"class":62}," .price::before",[49,80186,67],{"class":66},[49,80188,80189,80192,80194,80197],{"class":51,"line":11075},[49,80190,80191],{"class":73},"      content",[49,80193,77],{"class":66},[49,80195,80196],{"class":1505},"'￥'",[49,80198,83],{"class":66},[49,80200,80201,80203,80205,80207,80209],{"class":51,"line":11096},[49,80202,56161],{"class":73},[49,80204,77],{"class":66},[49,80206,1940],{"class":73},[49,80208,110],{"class":109},[49,80210,83],{"class":66},[49,80212,80213],{"class":51,"line":11102},[49,80214,3441],{"class":66},[49,80216,80217],{"class":51,"line":11116},[49,80218,3654],{"emptyLinePlaceholder":1330},[49,80220,80221,80224],{"class":51,"line":11122},[49,80222,80223],{"class":62},"    .filter",[49,80225,67],{"class":66},[49,80227,80228,80230,80232,80234],{"class":51,"line":11149},[49,80229,56248],{"class":73},[49,80231,77],{"class":66},[49,80233,52723],{"class":73},[49,80235,83],{"class":66},[49,80237,80238,80240,80242,80244,80246],{"class":51,"line":11158},[49,80239,56010],{"class":73},[49,80241,77],{"class":66},[49,80243,79801],{"class":73},[49,80245,110],{"class":109},[49,80247,83],{"class":66},[49,80249,80250,80252,80254,80256,80258],{"class":51,"line":11164},[49,80251,55947],{"class":73},[49,80253,77],{"class":66},[49,80255,80],{"class":73},[49,80257,1077],{"class":73},[49,80259,83],{"class":66},[49,80261,80262,80264,80266,80268,80270,80272],{"class":51,"line":11172},[49,80263,55936],{"class":73},[49,80265,77],{"class":66},[49,80267,2047],{"class":73},[49,80269,110],{"class":109},[49,80271,79892],{"class":73},[49,80273,80274],{"class":109},"px\n",[49,80276,80277],{"class":51,"line":11177},[49,80278,3441],{"class":66},[49,80280,80281],{"class":51,"line":17854},[49,80282,3654],{"emptyLinePlaceholder":1330},[49,80284,80285,80287,80289],{"class":51,"line":17860},[49,80286,80223],{"class":62},[49,80288,2655],{"class":147},[49,80290,67],{"class":66},[49,80292,80293,80295,80297,80299,80301,80303,80305],{"class":51,"line":17883},[49,80294,55936],{"class":73},[49,80296,77],{"class":66},[49,80298,106],{"class":73},[49,80300,110],{"class":109},[49,80302,10202],{"class":73},[49,80304,110],{"class":109},[49,80306,83],{"class":66},[49,80308,80309,80311,80313,80315],{"class":51,"line":17889},[49,80310,62959],{"class":73},[49,80312,77],{"class":66},[49,80314,63056],{"class":73},[49,80316,83],{"class":66},[49,80318,80319,80321,80323,80325],{"class":51,"line":17912},[49,80320,58655],{"class":73},[49,80322,77],{"class":66},[49,80324,80127],{"class":73},[49,80326,83],{"class":66},[49,80328,80329,80331,80333,80335],{"class":51,"line":17926},[49,80330,65206],{"class":73},[49,80332,77],{"class":66},[49,80334,460],{"class":73},[49,80336,83],{"class":66},[49,80338,80339,80341,80343,80345,80347],{"class":51,"line":17946},[49,80340,62988],{"class":73},[49,80342,77],{"class":66},[49,80344,875],{"class":73},[49,80346,110],{"class":109},[49,80348,83],{"class":66},[49,80350,80351],{"class":51,"line":17952},[49,80352,3441],{"class":66},[49,80354,80355],{"class":51,"line":17963},[49,80356,3654],{"emptyLinePlaceholder":1330},[49,80358,80359,80361,80363,80365],{"class":51,"line":17986},[49,80360,80223],{"class":62},[49,80362,2655],{"class":147},[49,80364,63138],{"class":62},[49,80366,67],{"class":66},[49,80368,80369,80371,80373,80376],{"class":51,"line":18008},[49,80370,56123],{"class":73},[49,80372,77],{"class":66},[49,80374,80375],{"class":73},"#05943c",[49,80377,83],{"class":66},[49,80379,80380,80382,80384,80386],{"class":51,"line":18013},[49,80381,58655],{"class":73},[49,80383,77],{"class":66},[49,80385,62081],{"class":73},[49,80387,83],{"class":66},[49,80389,80390],{"class":51,"line":18019},[49,80391,3441],{"class":66},[49,80393,80394,80396,80398],{"class":51,"line":18033},[49,80395,53659],{"class":66},[49,80397,1305],{"class":147},[49,80399,52554],{"class":66},[49,80401,80402,80404,80406],{"class":51,"line":18046},[49,80403,53027],{"class":66},[49,80405,52581],{"class":147},[49,80407,52554],{"class":66},[49,80409,80410],{"class":51,"line":18051},[49,80411,3654],{"emptyLinePlaceholder":1330},[49,80413,80414,80416,80418],{"class":51,"line":18065},[49,80415,2300],{"class":66},[49,80417,53042],{"class":147},[49,80419,52554],{"class":66},[49,80421,80422,80424,80426,80428,80430,80433],{"class":51,"line":18070},[49,80423,53386],{"class":66},[49,80425,148],{"class":147},[49,80427,54728],{"class":62},[49,80429,1448],{"class":66},[49,80431,80432],{"class":1505},"\"filter\"",[49,80434,52554],{"class":66},[49,80436,80437,80439,80441,80443,80445,80447,80450,80452,80454,80457,80459],{"class":51,"line":18076},[49,80438,52588],{"class":66},[49,80440,1630],{"class":147},[49,80442,62295],{"class":62},[49,80444,1448],{"class":66},[49,80446,62300],{"class":1505},[49,80448,80449],{"class":62}," data-index",[49,80451,1448],{"class":66},[49,80453,4932],{"class":1505},[49,80455,80456],{"class":66},">0-100元\u003C\u002F",[49,80458,1630],{"class":147},[49,80460,52554],{"class":66},[49,80462,80463,80465,80467,80469,80471,80473,80475,80477,80479,80482,80484],{"class":51,"line":18081},[49,80464,52588],{"class":66},[49,80466,1630],{"class":147},[49,80468,62295],{"class":62},[49,80470,1448],{"class":66},[49,80472,62300],{"class":1505},[49,80474,80449],{"class":62},[49,80476,1448],{"class":66},[49,80478,4955],{"class":1505},[49,80480,80481],{"class":66},">100-300元\u003C\u002F",[49,80483,1630],{"class":147},[49,80485,52554],{"class":66},[49,80487,80488,80490,80492,80494,80496,80498,80500,80502,80504,80507,80509],{"class":51,"line":18095},[49,80489,52588],{"class":66},[49,80491,1630],{"class":147},[49,80493,62295],{"class":62},[49,80495,1448],{"class":66},[49,80497,62300],{"class":1505},[49,80499,80449],{"class":62},[49,80501,1448],{"class":66},[49,80503,4968],{"class":1505},[49,80505,80506],{"class":66},">300元以上\u003C\u002F",[49,80508,1630],{"class":147},[49,80510,52554],{"class":66},[49,80512,80513,80515,80517,80519,80521,80523,80526,80528],{"class":51,"line":18100},[49,80514,52588],{"class":66},[49,80516,1630],{"class":147},[49,80518,62295],{"class":62},[49,80520,1448],{"class":66},[49,80522,62300],{"class":1505},[49,80524,80525],{"class":66},">全部区间\u003C\u002F",[49,80527,1630],{"class":147},[49,80529,52554],{"class":66},[49,80531,80532,80534,80536],{"class":51,"line":18105},[49,80533,53659],{"class":66},[49,80535,148],{"class":147},[49,80537,52554],{"class":66},[49,80539,80540,80542,80544,80546,80548,80550],{"class":51,"line":18119},[49,80541,53386],{"class":66},[49,80543,148],{"class":147},[49,80545,54728],{"class":62},[49,80547,1448],{"class":66},[49,80549,63844],{"class":1505},[49,80551,52554],{"class":66},[49,80553,80554],{"class":51,"line":18131},[49,80555,80556],{"class":55},"    \u003C!-- \u003Cdiv class=\"item\">\n",[49,80558,80559],{"class":51,"line":18136},[49,80560,80561],{"class":55},"      \u003Cimg src=\"\" alt=\"\">\n",[49,80563,80564],{"class":51,"line":18149},[49,80565,80566],{"class":55},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[49,80568,80569],{"class":51,"line":18154},[49,80570,80571],{"class":55},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[49,80573,80574],{"class":51,"line":18159},[49,80575,80576],{"class":55},"    \u003C\u002Fdiv> -->\n",[49,80578,80579,80581,80583],{"class":51,"line":18164},[49,80580,53659],{"class":66},[49,80582,148],{"class":147},[49,80584,52554],{"class":66},[49,80586,80587,80589,80591],{"class":51,"line":18177},[49,80588,53386],{"class":66},[49,80590,53055],{"class":147},[49,80592,52554],{"class":66},[49,80594,80595],{"class":51,"line":18182},[49,80596,80597],{"class":55},"    \u002F\u002F 2. 初始化数据\n",[49,80599,80600,80602,80605,80607],{"class":51,"line":33881},[49,80601,12473],{"class":109},[49,80603,80604],{"class":73}," goodsList",[49,80606,14816],{"class":109},[49,80608,56686],{"class":66},[49,80610,80611],{"class":51,"line":33887},[49,80612,80613],{"class":66},"      {\n",[49,80615,80616,80619,80622],{"class":51,"line":33893},[49,80617,80618],{"class":66},"        id: ",[49,80620,80621],{"class":1505},"'4001172'",[49,80623,32714],{"class":66},[49,80625,80626,80629,80632],{"class":51,"line":33899},[49,80627,80628],{"class":66},"        name: ",[49,80630,80631],{"class":1505},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[49,80633,32714],{"class":66},[49,80635,80636,80639,80642],{"class":51,"line":33905},[49,80637,80638],{"class":66},"        price: ",[49,80640,80641],{"class":1505},"'289.00'",[49,80643,32714],{"class":66},[49,80645,80646,80649,80652],{"class":51,"line":33916},[49,80647,80648],{"class":66},"        picture: ",[49,80650,80651],{"class":1505},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[49,80653,32714],{"class":66},[49,80655,80656],{"class":51,"line":33922},[49,80657,79119],{"class":66},[49,80659,80660],{"class":51,"line":33942},[49,80661,80613],{"class":66},[49,80663,80664,80666,80669],{"class":51,"line":33948},[49,80665,80618],{"class":66},[49,80667,80668],{"class":1505},"'4001594'",[49,80670,32714],{"class":66},[49,80672,80673,80675,80678],{"class":51,"line":33959},[49,80674,80628],{"class":66},[49,80676,80677],{"class":1505},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[49,80679,32714],{"class":66},[49,80681,80682,80684,80687],{"class":51,"line":33965},[49,80683,80638],{"class":66},[49,80685,80686],{"class":1505},"'288.00'",[49,80688,32714],{"class":66},[49,80690,80691,80693,80696],{"class":51,"line":33971},[49,80692,80648],{"class":66},[49,80694,80695],{"class":1505},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[49,80697,32714],{"class":66},[49,80699,80700],{"class":51,"line":33977},[49,80701,79119],{"class":66},[49,80703,80704],{"class":51,"line":33983},[49,80705,80613],{"class":66},[49,80707,80708,80710,80713],{"class":51,"line":33989},[49,80709,80618],{"class":66},[49,80711,80712],{"class":1505},"'4001009'",[49,80714,32714],{"class":66},[49,80716,80717,80719,80722],{"class":51,"line":33995},[49,80718,80628],{"class":66},[49,80720,80721],{"class":1505},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[49,80723,32714],{"class":66},[49,80725,80726,80728,80731],{"class":51,"line":34001},[49,80727,80638],{"class":66},[49,80729,80730],{"class":1505},"'109.00'",[49,80732,32714],{"class":66},[49,80734,80735,80737,80740],{"class":51,"line":34021},[49,80736,80648],{"class":66},[49,80738,80739],{"class":1505},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[49,80741,32714],{"class":66},[49,80743,80744],{"class":51,"line":34027},[49,80745,79119],{"class":66},[49,80747,80748],{"class":51,"line":34043},[49,80749,80613],{"class":66},[49,80751,80752,80754,80757],{"class":51,"line":34049},[49,80753,80618],{"class":66},[49,80755,80756],{"class":1505},"'4001874'",[49,80758,32714],{"class":66},[49,80760,80761,80763,80766],{"class":51,"line":34063},[49,80762,80628],{"class":66},[49,80764,80765],{"class":1505},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[49,80767,32714],{"class":66},[49,80769,80770,80772,80775],{"class":51,"line":34069},[49,80771,80638],{"class":66},[49,80773,80774],{"class":1505},"'488.00'",[49,80776,32714],{"class":66},[49,80778,80779,80781,80784],{"class":51,"line":34084},[49,80780,80648],{"class":66},[49,80782,80783],{"class":1505},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[49,80785,32714],{"class":66},[49,80787,80788],{"class":51,"line":34090},[49,80789,79119],{"class":66},[49,80791,80792],{"class":51,"line":34099},[49,80793,80613],{"class":66},[49,80795,80796,80798,80801],{"class":51,"line":34105},[49,80797,80618],{"class":66},[49,80799,80800],{"class":1505},"'4001649'",[49,80802,32714],{"class":66},[49,80804,80805,80807,80810],{"class":51,"line":34114},[49,80806,80628],{"class":66},[49,80808,80809],{"class":1505},"'大师监制龙泉青瓷茶叶罐'",[49,80811,32714],{"class":66},[49,80813,80814,80816,80819],{"class":51,"line":34120},[49,80815,80638],{"class":66},[49,80817,80818],{"class":1505},"'139.00'",[49,80820,32714],{"class":66},[49,80822,80823,80825,80828],{"class":51,"line":34126},[49,80824,80648],{"class":66},[49,80826,80827],{"class":1505},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[49,80829,32714],{"class":66},[49,80831,80832],{"class":51,"line":34135},[49,80833,79119],{"class":66},[49,80835,80836],{"class":51,"line":34141},[49,80837,80613],{"class":66},[49,80839,80840,80842,80845],{"class":51,"line":34152},[49,80841,80618],{"class":66},[49,80843,80844],{"class":1505},"'3997185'",[49,80846,32714],{"class":66},[49,80848,80849,80851,80854],{"class":51,"line":34158},[49,80850,80628],{"class":66},[49,80852,80853],{"class":1505},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[49,80855,32714],{"class":66},[49,80857,80858,80860,80863],{"class":51,"line":34177},[49,80859,80638],{"class":66},[49,80861,80862],{"class":1505},"'108.00'",[49,80864,32714],{"class":66},[49,80866,80867,80869,80872],{"class":51,"line":34183},[49,80868,80648],{"class":66},[49,80870,80871],{"class":1505},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[49,80873,32714],{"class":66},[49,80875,80876],{"class":51,"line":34194},[49,80877,79119],{"class":66},[49,80879,80880],{"class":51,"line":34200},[49,80881,80613],{"class":66},[49,80883,80884,80886,80889],{"class":51,"line":34220},[49,80885,80618],{"class":66},[49,80887,80888],{"class":1505},"'3997403'",[49,80890,32714],{"class":66},[49,80892,80893,80895,80898],{"class":51,"line":34236},[49,80894,80628],{"class":66},[49,80896,80897],{"class":1505},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[49,80899,32714],{"class":66},[49,80901,80902,80904,80907],{"class":51,"line":34242},[49,80903,80638],{"class":66},[49,80905,80906],{"class":1505},"'100.00'",[49,80908,32714],{"class":66},[49,80910,80911,80913,80916],{"class":51,"line":34256},[49,80912,80648],{"class":66},[49,80914,80915],{"class":1505},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[49,80917,32714],{"class":66},[49,80919,80920],{"class":51,"line":34262},[49,80921,79119],{"class":66},[49,80923,80924],{"class":51,"line":34268},[49,80925,80613],{"class":66},[49,80927,80928,80930,80933],{"class":51,"line":34279},[49,80929,80618],{"class":66},[49,80931,80932],{"class":1505},"'3998274'",[49,80934,32714],{"class":66},[49,80936,80937,80939,80942],{"class":51,"line":34285},[49,80938,80628],{"class":66},[49,80940,80941],{"class":1505},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[49,80943,32714],{"class":66},[49,80945,80946,80948,80950],{"class":51,"line":34291},[49,80947,80638],{"class":66},[49,80949,80818],{"class":1505},[49,80951,32714],{"class":66},[49,80953,80954,80956,80959],{"class":51,"line":34301},[49,80955,80648],{"class":66},[49,80957,80958],{"class":1505},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[49,80960,32714],{"class":66},[49,80962,80963],{"class":51,"line":34307},[49,80964,79119],{"class":66},[49,80966,80967],{"class":51,"line":34318},[49,80968,54351],{"class":66},[49,80970,80971],{"class":51,"line":34324},[49,80972,3654],{"emptyLinePlaceholder":1330},[49,80974,80975],{"class":51,"line":34334},[49,80976,80977],{"class":55},"    \u002F\u002F 1.渲染函数\n",[49,80979,80980,80982,80984,80986,80988],{"class":51,"line":34339},[49,80981,71319],{"class":109},[49,80983,71322],{"class":62},[49,80985,1403],{"class":66},[49,80987,5134],{"class":6468},[49,80989,13694],{"class":66},[49,80991,80992],{"class":51,"line":34345},[49,80993,80994],{"class":55},"      \u002F\u002F 声明空字符串\n",[49,80996,80997,81000,81003,81005],{"class":51,"line":34394},[49,80998,80999],{"class":109},"      let",[49,81001,81002],{"class":66}," str ",[49,81004,1448],{"class":109},[49,81006,71339],{"class":1505},[49,81008,81009],{"class":51,"line":34441},[49,81010,71344],{"class":55},[49,81012,81013,81015,81018,81020,81023,81026],{"class":51,"line":34446},[49,81014,59246],{"class":66},[49,81016,81017],{"class":62},"forEach",[49,81019,1403],{"class":66},[49,81021,81022],{"class":6468},"item",[49,81024,81025],{"class":109}," =>",[49,81027,67],{"class":66},[49,81029,81030,81032,81034,81037,81039,81042,81044,81047,81050,81052],{"class":51,"line":34452},[49,81031,62508],{"class":109},[49,81033,203],{"class":66},[49,81035,81036],{"class":73},"name",[49,81038,13687],{"class":66},[49,81040,81041],{"class":73},"price",[49,81043,13687],{"class":66},[49,81045,81046],{"class":73},"picture",[49,81048,81049],{"class":66}," } ",[49,81051,1448],{"class":109},[49,81053,81054],{"class":66}," item\n",[49,81056,81057,81060,81062],{"class":51,"line":34471},[49,81058,81059],{"class":66},"        str ",[49,81061,10729],{"class":109},[49,81063,71403],{"class":1505},[49,81065,81066],{"class":51,"line":34477},[49,81067,81068],{"class":1505},"          \u003Cdiv class=\"item\">\n",[49,81070,81071,81074,81076],{"class":51,"line":34497},[49,81072,81073],{"class":1505},"            \u003Cimg src=\"${",[49,81075,81046],{"class":66},[49,81077,81078],{"class":1505},"}\" alt=\"\">\n",[49,81080,81081,81084,81086],{"class":51,"line":34503},[49,81082,81083],{"class":1505},"            \u003Cp class=\"name\">${",[49,81085,81036],{"class":66},[49,81087,81088],{"class":1505},"}\u003C\u002Fp>\n",[49,81090,81091,81094,81096],{"class":51,"line":34509},[49,81092,81093],{"class":1505},"            \u003Cp class=\"price\">${",[49,81095,81041],{"class":66},[49,81097,81088],{"class":1505},[49,81099,81100],{"class":51,"line":34519},[49,81101,81102],{"class":1505},"          \u003C\u002Fdiv>\n",[49,81104,81105],{"class":51,"line":34524},[49,81106,81107],{"class":1505},"        `\n",[49,81109,81110],{"class":51,"line":34530},[49,81111,66050],{"class":66},[49,81113,81114],{"class":51,"line":34546},[49,81115,81116],{"class":55},"      \u002F\u002F 追加给List\n",[49,81118,81119,81121,81123,81125,81128,81130,81132],{"class":51,"line":34591},[49,81120,57010],{"class":66},[49,81122,55640],{"class":62},[49,81124,1403],{"class":66},[49,81126,81127],{"class":1505},"'.list'",[49,81129,75478],{"class":66},[49,81131,1448],{"class":109},[49,81133,75214],{"class":66},[49,81135,81136],{"class":51,"line":34597},[49,81137,3441],{"class":66},[49,81139,81140],{"class":51,"line":34603},[49,81141,81142],{"class":55},"    \u002F\u002F 页面一打开就需要渲染\n",[49,81144,81145,81148],{"class":51,"line":34609},[49,81146,81147],{"class":62},"    render",[49,81149,81150],{"class":66},"(goodsList)\n",[49,81152,81153],{"class":51,"line":34620},[49,81154,81155],{"class":55},"    \u002F\u002F 2.过滤筛选\n",[49,81157,81158,81160,81162,81164,81167,81169,81171,81173,81175,81177,81179,81181],{"class":51,"line":34626},[49,81159,53649],{"class":66},[49,81161,55640],{"class":62},[49,81163,1403],{"class":66},[49,81165,81166],{"class":1505},"'.filter'",[49,81168,32074],{"class":66},[49,81170,59052],{"class":62},[49,81172,1403],{"class":66},[49,81174,59057],{"class":1505},[49,81176,13687],{"class":66},[49,81178,1475],{"class":6468},[49,81180,81025],{"class":109},[49,81182,67],{"class":66},[49,81184,81185],{"class":51,"line":34632},[49,81186,81187],{"class":55},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[49,81189,81190,81192,81194,81197,81199,81201,81203,81205],{"class":51,"line":34638},[49,81191,59467],{"class":109},[49,81193,203],{"class":66},[49,81195,81196],{"class":73},"tagName",[49,81198,13687],{"class":66},[49,81200,32785],{"class":73},[49,81202,81049],{"class":66},[49,81204,1448],{"class":109},[49,81206,81207],{"class":66}," e.target\n",[49,81209,81210],{"class":51,"line":34656},[49,81211,81212],{"class":55},"      \u002F\u002F 判断\n",[49,81214,81215,81217,81219,81221,81223],{"class":51,"line":34670},[49,81216,55721],{"class":109},[49,81218,68269],{"class":66},[49,81220,55727],{"class":109},[49,81222,69491],{"class":1505},[49,81224,13694],{"class":66},[49,81226,81227],{"class":51,"line":34679},[49,81228,81229],{"class":55},"        \u002F\u002F console.log(11)\n",[49,81231,81232],{"class":51,"line":34688},[49,81233,81234],{"class":55},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[49,81236,81237],{"class":51,"line":34697},[49,81238,81239],{"class":55},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[49,81241,81242,81244,81246,81248],{"class":51,"line":34706},[49,81243,53072],{"class":109},[49,81245,53075],{"class":66},[49,81247,1448],{"class":109},[49,81249,81250],{"class":66}," goodsList\n",[49,81252,81253,81255,81258,81260,81263],{"class":51,"line":34712},[49,81254,3751],{"class":109},[49,81256,81257],{"class":66}," (dataset.index ",[49,81259,55727],{"class":109},[49,81261,81262],{"class":1505}," '1'",[49,81264,13694],{"class":66},[49,81266,81267,81270,81272,81275,81278,81280,81282,81284,81287,81289,81291,81294,81296,81298,81300],{"class":51,"line":34718},[49,81268,81269],{"class":66},"          arr ",[49,81271,1448],{"class":109},[49,81273,81274],{"class":66}," goodsList.",[49,81276,81277],{"class":62},"filter",[49,81279,1403],{"class":66},[49,81281,81022],{"class":6468},[49,81283,81025],{"class":109},[49,81285,81286],{"class":66}," item.price ",[49,81288,2965],{"class":109},[49,81290,5347],{"class":73},[49,81292,81293],{"class":109}," &&",[49,81295,81286],{"class":66},[49,81297,2843],{"class":109},[49,81299,7006],{"class":73},[49,81301,1409],{"class":66},[49,81303,81304,81307,81309,81311,81313,81315,81318],{"class":51,"line":34726},[49,81305,81306],{"class":66},"        } ",[49,81308,2956],{"class":109},[49,81310,2959],{"class":109},[49,81312,81257],{"class":66},[49,81314,55727],{"class":109},[49,81316,81317],{"class":1505}," '2'",[49,81319,13694],{"class":66},[49,81321,81322,81324,81326,81328,81330,81332,81334,81336,81338,81340,81342,81344,81346,81348,81351],{"class":51,"line":34731},[49,81323,81269],{"class":66},[49,81325,1448],{"class":109},[49,81327,81274],{"class":66},[49,81329,81277],{"class":62},[49,81331,1403],{"class":66},[49,81333,81022],{"class":6468},[49,81335,81025],{"class":109},[49,81337,81286],{"class":66},[49,81339,2965],{"class":109},[49,81341,7006],{"class":73},[49,81343,81293],{"class":109},[49,81345,81286],{"class":66},[49,81347,2843],{"class":109},[49,81349,81350],{"class":73}," 300",[49,81352,1409],{"class":66},[49,81354,81355,81357,81359,81361,81363,81365,81368],{"class":51,"line":34737},[49,81356,81306],{"class":66},[49,81358,2956],{"class":109},[49,81360,2959],{"class":109},[49,81362,81257],{"class":66},[49,81364,55727],{"class":109},[49,81366,81367],{"class":1505}," '3'",[49,81369,13694],{"class":66},[49,81371,81372,81374,81376,81378,81380,81382,81384,81386,81388,81390,81392],{"class":51,"line":34748},[49,81373,81269],{"class":66},[49,81375,1448],{"class":109},[49,81377,81274],{"class":66},[49,81379,81277],{"class":62},[49,81381,1403],{"class":66},[49,81383,81022],{"class":6468},[49,81385,81025],{"class":109},[49,81387,81286],{"class":66},[49,81389,2965],{"class":109},[49,81391,81350],{"class":73},[49,81393,1409],{"class":66},[49,81395,81396],{"class":51,"line":34754},[49,81397,3783],{"class":66},[49,81399,81400],{"class":51,"line":34774},[49,81401,81402],{"class":55},"        \u002F\u002F 渲染函数\n",[49,81404,81405,81407],{"class":51,"line":34780},[49,81406,71643],{"class":62},[49,81408,53654],{"class":66},[49,81410,81411],{"class":51,"line":34786},[49,81412,53640],{"class":66},[49,81414,81415],{"class":51,"line":34792},[49,81416,3654],{"emptyLinePlaceholder":1330},[49,81418,81419],{"class":51,"line":34809},[49,81420,34709],{"class":66},[49,81422,81423,81425,81427],{"class":51,"line":34815},[49,81424,53659],{"class":66},[49,81426,53055],{"class":147},[49,81428,52554],{"class":66},[49,81430,81431,81433,81435],{"class":51,"line":34821},[49,81432,53027],{"class":66},[49,81434,53042],{"class":147},[49,81436,52554],{"class":66},[49,81438,81439],{"class":51,"line":34827},[49,81440,3654],{"emptyLinePlaceholder":1330},[49,81442,81443,81445,81447],{"class":51,"line":34833},[49,81444,53027],{"class":66},[49,81446,51883],{"class":147},[49,81448,52554],{"class":66},[14,81450,81452],{"id":81451},"_410-深入了解对象","4.10 深入了解对象",[183,81454,81456],{"id":81455},"_4101-创建对象","4.10.1 创建对象",[19,81458,81459],{},[174,81460],{"alt":44,"src":81461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,81463,81464],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[183,81466,81468],{"id":81467},"_4102-构造函数","4.10.2 构造函数",[19,81470,81471,81474],{},[485,81472,81473],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,81476,81477,81480],{},[485,81478,81479],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[39,81482,81484],{"className":51881,"code":81483,"language":51883,"meta":44,"style":44},"\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",[46,81485,81486,81494,81499,81520,81533,81545,81557,81561,81566,81593,81598,81625],{"__ignoreMap":44},[49,81487,81488,81490,81492],{"class":51,"line":52},[49,81489,2300],{"class":66},[49,81491,53055],{"class":147},[49,81493,52554],{"class":66},[49,81495,81496],{"class":51,"line":59},[49,81497,81498],{"class":55},"\u002F\u002F例：\n",[49,81500,81501,81503,81506,81508,81510,81512,81514,81516,81518],{"class":51,"line":70},[49,81502,55690],{"class":109},[49,81504,81505],{"class":62}," Pig",[49,81507,1403],{"class":66},[49,81509,81036],{"class":6468},[49,81511,1770],{"class":66},[49,81513,71456],{"class":6468},[49,81515,1770],{"class":66},[49,81517,71473],{"class":6468},[49,81519,13694],{"class":66},[49,81521,81522,81525,81528,81530],{"class":51,"line":86},[49,81523,81524],{"class":73},"    this",[49,81526,81527],{"class":66},".name",[49,81529,1448],{"class":109},[49,81531,81532],{"class":66},"name\n",[49,81534,81535,81537,81540,81542],{"class":51,"line":98},[49,81536,81524],{"class":73},[49,81538,81539],{"class":66},".age",[49,81541,1448],{"class":109},[49,81543,81544],{"class":66},"age\n",[49,81546,81547,81549,81552,81554],{"class":51,"line":121},[49,81548,81524],{"class":73},[49,81550,81551],{"class":66},".gender",[49,81553,1448],{"class":109},[49,81555,81556],{"class":66},"gender    \n",[49,81558,81559],{"class":51,"line":134},[49,81560,137],{"class":66},[49,81562,81563],{"class":51,"line":1085},[49,81564,81565],{"class":55},"\u002F\u002F创建佩奇对象\n",[49,81567,81568,81570,81573,81575,81577,81579,81582,81584,81586,81588,81591],{"class":51,"line":2574},[49,81569,8044],{"class":109},[49,81571,81572],{"class":73}," Peppa",[49,81574,12969],{"class":109},[49,81576,81505],{"class":62},[49,81578,1403],{"class":66},[49,81580,81581],{"class":1505},"'佩奇'",[49,81583,1770],{"class":66},[49,81585,1736],{"class":73},[49,81587,1770],{"class":66},[49,81589,81590],{"class":1505},"'女'",[49,81592,1409],{"class":66},[49,81594,81595],{"class":51,"line":2586},[49,81596,81597],{"class":55},"\u002F\u002F创建乔治对象\n",[49,81599,81600,81602,81605,81607,81609,81611,81614,81616,81618,81620,81623],{"class":51,"line":2867},[49,81601,8044],{"class":109},[49,81603,81604],{"class":73}," George",[49,81606,12969],{"class":109},[49,81608,81505],{"class":62},[49,81610,1403],{"class":66},[49,81612,81613],{"class":1505},"'乔治'",[49,81615,1770],{"class":66},[49,81617,1472],{"class":73},[49,81619,1770],{"class":66},[49,81621,81622],{"class":1505},"'男'",[49,81624,1409],{"class":66},[49,81626,81627,81629,81631],{"class":51,"line":2872},[49,81628,53027],{"class":66},[49,81630,53055],{"class":147},[49,81632,52554],{"class":66},[19,81634,81635],{},[174,81636],{"alt":44,"src":81637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,81639,81640],{},[174,81641],{"alt":44,"src":81642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,81644,81645],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,81647,81648],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,81650,81651],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,81653,81654],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,81656,81657],{},"这里用等号是因为：对象.属性=值",[19,81659,81660],{},"①利用对象字面量创建对象",[19,81662,81663],{},"const o={",[19,81665,81666],{},"name:'pink'",[19,81668,81669],{},"} ②利用new Object创建对象",[19,81671,81672],{},"const o=new Object({name:'pink'})",[19,81674,81675],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,81677,81678],{},"构造函数创建对象的执行过程：",[19,81680,81681],{},[174,81682],{"alt":44,"src":81683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[183,81685,81687],{"id":81686},"_4103-实例成员","4.10.3 实例成员",[19,81689,81690],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[591,81692,81693,81696,81699],{},[26,81694,81695],{},"实例对象的属性和方法即为实例成员",[26,81697,81698],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[26,81700,81701],{},"构造函数创建的实例对象彼此独立互不影响",[183,81703,81705],{"id":81704},"_4104-静态成员","4.10.4 静态成员",[19,81707,81708],{},[174,81709],{"alt":44,"src":81710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,81712,81713],{},"静态成员有Date.now() Math.PI Math.random()",[19,81715,81716],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,81718,81719],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,81721,81722],{},"function Pig(name) n {",[19,81724,81725],{},"this.name=name",[19,81727,620],{},[19,81729,81730],{},"Pig.eyes=2",[19,81732,81733],{},"Pig.sayHai=function () { console.log(this) }",[19,81735,81736],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,81738,81739],{},"console.log(Pig.eyes) \u002F\u002F2",[19,81741,12584],{},[591,81743,81744,81747,81750,81753,81756],{},[26,81745,81746],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[26,81748,81749],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[26,81751,81752],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[26,81754,81755],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[26,81757,81758],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81760,81761],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[183,81763,81765],{"id":81764},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81767,81768],{},"内置构造函数包含：",[19,81770,81771],{},[174,81772],{"alt":44,"src":81773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81775,81776],{},[174,81777],{"alt":44,"src":81778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81780,81781],{},"这些基本数据类型，js对他们进行了包装",[53055,81783,81784],{},"\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",[525,81786,81788],{"id":81787},"_41051-object","4.10.5.1 Object",[19,81790,81791],{},"Object 是内置的构造函数，用于创建普通对象",[19,81793,81794],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[39,81796,81798],{"className":51881,"code":81797,"language":51883,"meta":44,"style":44},"const user=new Object({name:'小明',age:15})\n",[46,81799,81800],{"__ignoreMap":44},[49,81801,81802],{"class":51,"line":52},[49,81803,81797],{"class":66},[19,81805,81806],{},"三个常用的静态方法：",[24159,81808,81810],{"id":81809},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81812,81813],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81815,81816],{},[174,81817],{"alt":44,"src":81818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81820,81821],{},[174,81822],{"alt":44,"src":81823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[39,81825,81827],{"className":54309,"code":81826,"language":54311,"meta":44,"style":44},"\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",[46,81828,81829,81837,81845,81850,81855,81860,81865,81870,81875,81883],{"__ignoreMap":44},[49,81830,81831,81833,81835],{"class":51,"line":52},[49,81832,2300],{"class":66},[49,81834,53042],{"class":147},[49,81836,52554],{"class":66},[49,81838,81839,81841,81843],{"class":51,"line":59},[49,81840,53386],{"class":66},[49,81842,53055],{"class":147},[49,81844,52554],{"class":66},[49,81846,81847],{"class":51,"line":70},[49,81848,81849],{"class":66},"    const o = { name: 'pink', age: 6 }\n",[49,81851,81852],{"class":51,"line":86},[49,81853,81854],{"class":66},"    \u002F\u002F 获得所有属性名\n",[49,81856,81857],{"class":51,"line":98},[49,81858,81859],{"class":66},"    const arr = Object.keys(o)\n",[49,81861,81862],{"class":51,"line":121},[49,81863,81864],{"class":66},"    console.log(arr)\n",[49,81866,81867],{"class":51,"line":134},[49,81868,81869],{"class":66},"    \u002F\u002F 获得所有属性值\n",[49,81871,81872],{"class":51,"line":1085},[49,81873,81874],{"class":66},"    console.log(Object.values(o))\n",[49,81876,81877,81879,81881],{"class":51,"line":2574},[49,81878,53659],{"class":66},[49,81880,53055],{"class":147},[49,81882,52554],{"class":66},[49,81884,81885,81887,81889],{"class":51,"line":2586},[49,81886,53027],{"class":66},[49,81888,53042],{"class":147},[49,81890,52554],{"class":66},[24159,81892,81894],{"id":81893},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,81896,81897],{},"Object.assign(oo,o)",[19,81899,81900],{},"后的东西添加给前 是追加",[19,81902,81903],{},[174,81904],{"alt":44,"src":81905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,81907,81908],{},[174,81909],{"alt":44,"src":81910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[39,81912,81914],{"className":54309,"code":81913,"language":54311,"meta":44,"style":44},"\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",[46,81915,81916,81924,81932,81936,81940,81944,81948,81952,81956,81961,81966,81971,81976,81981,81989],{"__ignoreMap":44},[49,81917,81918,81920,81922],{"class":51,"line":52},[49,81919,2300],{"class":66},[49,81921,53042],{"class":147},[49,81923,52554],{"class":66},[49,81925,81926,81928,81930],{"class":51,"line":59},[49,81927,53386],{"class":66},[49,81929,53055],{"class":147},[49,81931,52554],{"class":66},[49,81933,81934],{"class":51,"line":70},[49,81935,81849],{"class":66},[49,81937,81938],{"class":51,"line":86},[49,81939,81854],{"class":66},[49,81941,81942],{"class":51,"line":98},[49,81943,81859],{"class":66},[49,81945,81946],{"class":51,"line":121},[49,81947,81864],{"class":66},[49,81949,81950],{"class":51,"line":134},[49,81951,81869],{"class":66},[49,81953,81954],{"class":51,"line":1085},[49,81955,81874],{"class":66},[49,81957,81958],{"class":51,"line":2574},[49,81959,81960],{"class":66},"    const oo = {}\n",[49,81962,81963],{"class":51,"line":2586},[49,81964,81965],{"class":66},"    Object.assign(oo, o)\n",[49,81967,81968],{"class":51,"line":2867},[49,81969,81970],{"class":66},"    console.log(oo)\n",[49,81972,81973],{"class":51,"line":2872},[49,81974,81975],{"class":66},"    Object.assign(o, { gender: '女' })\n",[49,81977,81978],{"class":51,"line":2878},[49,81979,81980],{"class":66},"    console.log(o)\n",[49,81982,81983,81985,81987],{"class":51,"line":2883},[49,81984,53659],{"class":66},[49,81986,53055],{"class":147},[49,81988,52554],{"class":66},[49,81990,81991,81993,81995],{"class":51,"line":2897},[49,81992,53027],{"class":66},[49,81994,53042],{"class":147},[49,81996,52554],{"class":66},[19,81998,81999],{},[174,82000],{"alt":44,"src":82001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[525,82003,82005],{"id":82004},"_41052-array","4.10.5.2 Array",[19,82007,82008],{},"Array 是内置的构造函数，用于创建数组",[19,82010,82011],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[39,82013,82015],{"className":51881,"code":82014,"language":51883,"meta":44,"style":44},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[46,82016,82017,82022],{"__ignoreMap":44},[49,82018,82019],{"class":51,"line":52},[49,82020,82021],{"class":66},"const arr=new Array(3,5)\n",[49,82023,82024],{"class":51,"line":59},[49,82025,82026],{"class":66},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82028,82029],{},"Array的实例方法，这个方法是实例成员",[19,82031,82032],{},[174,82033],{"alt":44,"src":82034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24159,82036,82038],{"id":82037},"_410521-reduce","4.10.5.2.1 reduce",[19,82040,82041],{},[174,82042],{"alt":44,"src":82043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[39,82045,82047],{"className":54309,"code":82046,"language":54311,"meta":44,"style":44},"\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",[46,82048,82049,82057,82065,82070,82075,82080,82085,82089,82094,82099,82104,82108,82113,82118,82122,82127,82132,82137,82145],{"__ignoreMap":44},[49,82050,82051,82053,82055],{"class":51,"line":52},[49,82052,2300],{"class":66},[49,82054,53042],{"class":147},[49,82056,52554],{"class":66},[49,82058,82059,82061,82063],{"class":51,"line":59},[49,82060,53386],{"class":66},[49,82062,53055],{"class":147},[49,82064,52554],{"class":66},[49,82066,82067],{"class":51,"line":70},[49,82068,82069],{"class":66},"    const arr = [1, 5, 8]\n",[49,82071,82072],{"class":51,"line":86},[49,82073,82074],{"class":66},"    \u002F\u002F 1.没有初始值\n",[49,82076,82077],{"class":51,"line":98},[49,82078,82079],{"class":66},"    const total = arr.reduce(function (prev, current) {\n",[49,82081,82082],{"class":51,"line":121},[49,82083,82084],{"class":66},"      return prev + current\n",[49,82086,82087],{"class":51,"line":134},[49,82088,34709],{"class":66},[49,82090,82091],{"class":51,"line":1085},[49,82092,82093],{"class":66},"    console.log(total)   \u002F\u002F14\n",[49,82095,82096],{"class":51,"line":2574},[49,82097,82098],{"class":66},"    \u002F\u002F 2.有初始值\n",[49,82100,82101],{"class":51,"line":2586},[49,82102,82103],{"class":66},"    const total1 = arr.reduce(function (prev, current) {\n",[49,82105,82106],{"class":51,"line":2867},[49,82107,82084],{"class":66},[49,82109,82110],{"class":51,"line":2872},[49,82111,82112],{"class":66},"    }, 10)\n",[49,82114,82115],{"class":51,"line":2878},[49,82116,82117],{"class":66},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[49,82119,82120],{"class":51,"line":2883},[49,82121,3654],{"emptyLinePlaceholder":1330},[49,82123,82124],{"class":51,"line":2897},[49,82125,82126],{"class":66},"    \u002F\u002F 3.箭头函数写法\n",[49,82128,82129],{"class":51,"line":2902},[49,82130,82131],{"class":66},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[49,82133,82134],{"class":51,"line":2908},[49,82135,82136],{"class":66},"    console.log(total2)   \u002F\u002F24\n",[49,82138,82139,82141,82143],{"class":51,"line":2929},[49,82140,53659],{"class":66},[49,82142,53055],{"class":147},[49,82144,52554],{"class":66},[49,82146,82147,82149,82151],{"class":51,"line":2934},[49,82148,53027],{"class":66},[49,82150,53042],{"class":147},[49,82152,52554],{"class":66},[19,82154,82155],{},"执行过程：",[591,82157,82158,82161,82164],{},[26,82159,82160],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[26,82162,82163],{},"每一次循环，把返回值给作为下一次循环的上一次值",[26,82165,82166],{},"如果有起始值，则起始值作为上一次值",[39,82168,82170],{"className":54309,"code":82169,"language":54311,"meta":44,"style":44},"\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",[46,82171,82172,82180,82188,82192,82196,82200,82204,82208,82212,82217,82222,82227,82232,82237,82241,82245,82249,82253,82257,82261,82266,82270,82275,82279,82284,82289,82293,82297,82301,82309],{"__ignoreMap":44},[49,82173,82174,82176,82178],{"class":51,"line":52},[49,82175,2300],{"class":66},[49,82177,53042],{"class":147},[49,82179,52554],{"class":66},[49,82181,82182,82184,82186],{"class":51,"line":59},[49,82183,53386],{"class":66},[49,82185,53055],{"class":147},[49,82187,52554],{"class":66},[49,82189,82190],{"class":51,"line":70},[49,82191,82069],{"class":66},[49,82193,82194],{"class":51,"line":86},[49,82195,82074],{"class":66},[49,82197,82198],{"class":51,"line":98},[49,82199,82079],{"class":66},[49,82201,82202],{"class":51,"line":121},[49,82203,82084],{"class":66},[49,82205,82206],{"class":51,"line":134},[49,82207,34709],{"class":66},[49,82209,82210],{"class":51,"line":1085},[49,82211,82093],{"class":66},[49,82213,82214],{"class":51,"line":2574},[49,82215,82216],{"class":66},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[49,82218,82219],{"class":51,"line":2586},[49,82220,82221],{"class":66},"    \u002F\u002F     1              5                    6\n",[49,82223,82224],{"class":51,"line":2867},[49,82225,82226],{"class":66},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[49,82228,82229],{"class":51,"line":2872},[49,82230,82231],{"class":66},"    \u002F\u002F     6              8                    14\n",[49,82233,82234],{"class":51,"line":2878},[49,82235,82236],{"class":66},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[49,82238,82239],{"class":51,"line":2883},[49,82240,82098],{"class":66},[49,82242,82243],{"class":51,"line":2897},[49,82244,82103],{"class":66},[49,82246,82247],{"class":51,"line":2902},[49,82248,82084],{"class":66},[49,82250,82251],{"class":51,"line":2908},[49,82252,82112],{"class":66},[49,82254,82255],{"class":51,"line":2929},[49,82256,82117],{"class":66},[49,82258,82259],{"class":51,"line":2934},[49,82260,82216],{"class":66},[49,82262,82263],{"class":51,"line":2948},[49,82264,82265],{"class":66},"    \u002F\u002F     10             1                     11\n",[49,82267,82268],{"class":51,"line":2953},[49,82269,82226],{"class":66},[49,82271,82272],{"class":51,"line":2982},[49,82273,82274],{"class":66},"    \u002F\u002F     11             5                    16\n",[49,82276,82277],{"class":51,"line":2987},[49,82278,82226],{"class":66},[49,82280,82281],{"class":51,"line":3004},[49,82282,82283],{"class":66},"    \u002F\u002F     16             8                    24\n",[49,82285,82286],{"class":51,"line":3009},[49,82287,82288],{"class":66},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[49,82290,82291],{"class":51,"line":3014},[49,82292,82126],{"class":66},[49,82294,82295],{"class":51,"line":3019},[49,82296,82131],{"class":66},[49,82298,82299],{"class":51,"line":3033},[49,82300,82136],{"class":66},[49,82302,82303,82305,82307],{"class":51,"line":3038},[49,82304,53659],{"class":66},[49,82306,53055],{"class":147},[49,82308,52554],{"class":66},[49,82310,82311,82313,82315],{"class":51,"line":3831},[49,82312,53027],{"class":66},[49,82314,53042],{"class":147},[49,82316,52554],{"class":66},[24159,82318,82320],{"id":82319},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82322,82323],{},[174,82324],{"alt":44,"src":82325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[39,82327,82329],{"className":54309,"code":82328,"language":54311,"meta":44,"style":44},"\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",[46,82330,82331,82339,82347,82352,82357,82362,82367,82371,82376,82381,82386,82391,82396,82401,82405,82410,82414,82419,82427],{"__ignoreMap":44},[49,82332,82333,82335,82337],{"class":51,"line":52},[49,82334,2300],{"class":66},[49,82336,53042],{"class":147},[49,82338,52554],{"class":66},[49,82340,82341,82343,82345],{"class":51,"line":59},[49,82342,53386],{"class":66},[49,82344,53055],{"class":147},[49,82346,52554],{"class":66},[49,82348,82349],{"class":51,"line":70},[49,82350,82351],{"class":66},"    const arr = [\n",[49,82353,82354],{"class":51,"line":86},[49,82355,82356],{"class":66},"      { name: '张三', salary: 10000 },\n",[49,82358,82359],{"class":51,"line":98},[49,82360,82361],{"class":66},"      { name: '李四', salary: 10000 },\n",[49,82363,82364],{"class":51,"line":121},[49,82365,82366],{"class":66},"      { name: '王五', salary: 10000 }\n",[49,82368,82369],{"class":51,"line":134},[49,82370,54351],{"class":66},[49,82372,82373],{"class":51,"line":1085},[49,82374,82375],{"class":66},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[49,82377,82378],{"class":51,"line":2574},[49,82379,82380],{"class":66},"    \u002F\u002F prev是累计值\n",[49,82382,82383],{"class":51,"line":2586},[49,82384,82385],{"class":66},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[49,82387,82388],{"class":51,"line":2867},[49,82389,82390],{"class":66},"    console.log(total)\n",[49,82392,82393],{"class":51,"line":2872},[49,82394,82395],{"class":66},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[49,82397,82398],{"class":51,"line":2878},[49,82399,82400],{"class":66},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[49,82402,82403],{"class":51,"line":2883},[49,82404,82395],{"class":66},[49,82406,82407],{"class":51,"line":2897},[49,82408,82409],{"class":66},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[49,82411,82412],{"class":51,"line":2902},[49,82413,82395],{"class":66},[49,82415,82416],{"class":51,"line":2908},[49,82417,82418],{"class":66},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[49,82420,82421,82423,82425],{"class":51,"line":2929},[49,82422,53659],{"class":66},[49,82424,53055],{"class":147},[49,82426,52554],{"class":66},[49,82428,82429,82431,82433],{"class":51,"line":2934},[49,82430,53027],{"class":66},[49,82432,53042],{"class":147},[49,82434,52554],{"class":66},[24159,82436,82438],{"id":82437},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82440,82441],{},[174,82442],{"alt":44,"src":82443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82445,82446],{},[174,82447],{"alt":44,"src":82448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[591,82450,82451],{},[26,82452,82453],{},"find()",[19,82455,82456],{},"循环查找，找到第一个就ok",[19,82458,82459],{},[1630,82460,82463],{"href":82461,"rel":82462},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25113],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[39,82465,82467],{"className":51881,"code":82466,"language":51883,"meta":44,"style":44},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[46,82468,82469,82474,82479],{"__ignoreMap":44},[49,82470,82471],{"class":51,"line":52},[49,82472,82473],{"class":66},"const array1 = [5, 12, 8, 130, 44]\n",[49,82475,82476],{"class":51,"line":59},[49,82477,82478],{"class":66},"const found = array1.find((element) => element > 10)\n",[49,82480,82481],{"class":51,"line":70},[49,82482,82483],{"class":66},"console.log(found)  \u002F\u002F12\n",[19,82485,82486,82488,82489,82494,82495,82498,82499,82501,82502,82507,82508,82510,82511,82513,82514,82516,82517],{},[46,82487,82453],{}," 方法是一个",[1630,82490,82493],{"href":82491,"rel":82492},"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",[25113],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[46,82496,82497],{},"callbackFn"," 函数，直到 ",[46,82500,82497],{}," 返回一个",[1630,82503,82506],{"href":82504,"rel":82505},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25113],"真值","。然后 ",[46,82509,82453],{}," 返回该元素并停止迭代数组。如果 ",[46,82512,82497],{}," 从未返回真值，则 ",[46,82515,82453],{}," 返回 ",[46,82518,82519],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[39,82521,82523],{"className":54309,"code":82522,"language":54311,"meta":44,"style":44},"\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",[46,82524,82525,82533,82541,82546,82551,82556,82560,82565,82570,82574,82579,82584,82588,82592,82597,82602,82606,82610,82615,82620,82625,82630,82635,82639,82644,82649,82654,82659,82663,82668,82676],{"__ignoreMap":44},[49,82526,82527,82529,82531],{"class":51,"line":52},[49,82528,2300],{"class":66},[49,82530,53042],{"class":147},[49,82532,52554],{"class":66},[49,82534,82535,82537,82539],{"class":51,"line":59},[49,82536,53386],{"class":66},[49,82538,53055],{"class":147},[49,82540,52554],{"class":66},[49,82542,82543],{"class":51,"line":70},[49,82544,82545],{"class":66},"    const arr = ['red', 'blue', 'green']\n",[49,82547,82548],{"class":51,"line":86},[49,82549,82550],{"class":66},"    const found = arr.find(item => item === 'pink')\n",[49,82552,82553],{"class":51,"line":98},[49,82554,82555],{"class":66},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[49,82557,82558],{"class":51,"line":121},[49,82559,3654],{"emptyLinePlaceholder":1330},[49,82561,82562],{"class":51,"line":134},[49,82563,82564],{"class":66},"    \u002F\u002F 使用场景，用于查找数据\n",[49,82566,82567],{"class":51,"line":1085},[49,82568,82569],{"class":66},"    const arr1 = [\n",[49,82571,82572],{"class":51,"line":2574},[49,82573,80613],{"class":66},[49,82575,82576],{"class":51,"line":2586},[49,82577,82578],{"class":66},"        name: '小米',\n",[49,82580,82581],{"class":51,"line":2867},[49,82582,82583],{"class":66},"        price: 1999\n",[49,82585,82586],{"class":51,"line":2872},[49,82587,79119],{"class":66},[49,82589,82590],{"class":51,"line":2878},[49,82591,80613],{"class":66},[49,82593,82594],{"class":51,"line":2883},[49,82595,82596],{"class":66},"        name: '华为',\n",[49,82598,82599],{"class":51,"line":2897},[49,82600,82601],{"class":66},"        price: 3999\n",[49,82603,82604],{"class":51,"line":2902},[49,82605,53640],{"class":66},[49,82607,82608],{"class":51,"line":2908},[49,82609,54351],{"class":66},[49,82611,82612],{"class":51,"line":2929},[49,82613,82614],{"class":66},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[49,82616,82617],{"class":51,"line":2934},[49,82618,82619],{"class":66},"    \u002F\u002F const found1 = arr1.find(item => {\n",[49,82621,82622],{"class":51,"line":2948},[49,82623,82624],{"class":66},"    \u002F\u002F   if (item.name === '小米') {\n",[49,82626,82627],{"class":51,"line":2953},[49,82628,82629],{"class":66},"    \u002F\u002F     return item\n",[49,82631,82632],{"class":51,"line":2982},[49,82633,82634],{"class":66},"    \u002F\u002F   }\n",[49,82636,82637],{"class":51,"line":2987},[49,82638,64526],{"class":66},[49,82640,82641],{"class":51,"line":3004},[49,82642,82643],{"class":66},"    \u002F\u002F 另一种写法\n",[49,82645,82646],{"class":51,"line":3009},[49,82647,82648],{"class":66},"    const found1 = arr1.find(item => {\n",[49,82650,82651],{"class":51,"line":3014},[49,82652,82653],{"class":66},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[49,82655,82656],{"class":51,"line":3019},[49,82657,82658],{"class":66},"      return item.name = '小米'\n",[49,82660,82661],{"class":51,"line":3033},[49,82662,34709],{"class":66},[49,82664,82665],{"class":51,"line":3038},[49,82666,82667],{"class":66},"    console.log(found1)\n",[49,82669,82670,82672,82674],{"class":51,"line":3831},[49,82671,53659],{"class":66},[49,82673,53055],{"class":147},[49,82675,52554],{"class":66},[49,82677,82678,82680,82682],{"class":51,"line":3845},[49,82679,53027],{"class":66},[49,82681,53042],{"class":147},[49,82683,52554],{"class":66},[19,82685,82686],{},[174,82687],{"alt":44,"src":82688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,82690,82691],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[591,82693,82694],{"start":59},[26,82695,82696],{},"every()返回的是布尔值",[19,82698,82699],{},[1630,82700,82703],{"href":82701,"rel":82702},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25113],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,82705,82706],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,82708,82709],{},"some是只有有一个就没问题",[19,82711,82712],{},"every是必须全是才行",[39,82714,82718],{"className":82715,"code":82716,"language":82717,"meta":44,"style":44},"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",[46,82719,82720,82736,82750,82754,82763],{"__ignoreMap":44},[49,82721,82722,82724,82727,82729,82731,82734],{"class":51,"line":52},[49,82723,55690],{"class":109},[49,82725,82726],{"class":66}," isBigEnough(element, ",[49,82728,75287],{"class":109},[49,82730,13687],{"class":66},[49,82732,82733],{"class":109},"array",[49,82735,13694],{"class":66},[49,82737,82738,82741,82744,82746,82748],{"class":51,"line":59},[49,82739,82740],{"class":109},"  return",[49,82742,82743],{"class":66}," element ",[49,82745,2965],{"class":109},[49,82747,3292],{"class":73},[49,82749,83],{"class":66},[49,82751,82752],{"class":51,"line":70},[49,82753,137],{"class":66},[49,82755,82756,82759,82761],{"class":51,"line":86},[49,82757,82758],{"class":66},"[12, 5, 8, 130, 44].every(isBigEnough); ",[49,82760,34577],{"class":109},[49,82762,55757],{"class":66},[49,82764,82765,82768,82770],{"class":51,"line":98},[49,82766,82767],{"class":66},"[12, 54, 18, 130, 44].every(isBigEnough); ",[49,82769,34577],{"class":109},[49,82771,59179],{"class":66},[39,82773,82775],{"className":54309,"code":82774,"language":54311,"meta":44,"style":44},"\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",[46,82776,82777,82785,82793,82798,82802,82807,82812,82820],{"__ignoreMap":44},[49,82778,82779,82781,82783],{"class":51,"line":52},[49,82780,2300],{"class":66},[49,82782,53042],{"class":147},[49,82784,52554],{"class":66},[49,82786,82787,82789,82791],{"class":51,"line":59},[49,82788,53386],{"class":66},[49,82790,53055],{"class":147},[49,82792,52554],{"class":66},[49,82794,82795],{"class":51,"line":70},[49,82796,82797],{"class":66},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[49,82799,82800],{"class":51,"line":86},[49,82801,79549],{"class":66},[49,82803,82804],{"class":51,"line":98},[49,82805,82806],{"class":66},"    const flag = arr.every(item => item >= 10)\n",[49,82808,82809],{"class":51,"line":121},[49,82810,82811],{"class":66},"    console.log(flag)    \u002F\u002Ftrue\n",[49,82813,82814,82816,82818],{"class":51,"line":134},[49,82815,53659],{"class":66},[49,82817,53055],{"class":147},[49,82819,52554],{"class":66},[49,82821,82822,82824,82826],{"class":51,"line":1085},[49,82823,53027],{"class":66},[49,82825,53042],{"class":147},[49,82827,52554],{"class":66},[39,82829,82831],{"className":54309,"code":82830,"language":54311,"meta":44,"style":44},"\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",[46,82832,82833,82841,82849,82853,82858,82863,82868,82876],{"__ignoreMap":44},[49,82834,82835,82837,82839],{"class":51,"line":52},[49,82836,2300],{"class":66},[49,82838,53042],{"class":147},[49,82840,52554],{"class":66},[49,82842,82843,82845,82847],{"class":51,"line":59},[49,82844,53386],{"class":66},[49,82846,53055],{"class":147},[49,82848,52554],{"class":66},[49,82850,82851],{"class":51,"line":70},[49,82852,82797],{"class":66},[49,82854,82855],{"class":51,"line":86},[49,82856,82857],{"class":66},"    const arr = [10, 0, 5]\n",[49,82859,82860],{"class":51,"line":98},[49,82861,82862],{"class":66},"    const flag = arr.some(item => item >= 10)\n",[49,82864,82865],{"class":51,"line":121},[49,82866,82867],{"class":66},"    console.log(flag)   \u002F\u002Ftrue\n",[49,82869,82870,82872,82874],{"class":51,"line":134},[49,82871,53659],{"class":66},[49,82873,53055],{"class":147},[49,82875,52554],{"class":66},[49,82877,82878,82880,82882],{"class":51,"line":1085},[49,82879,53027],{"class":66},[49,82881,53042],{"class":147},[49,82883,52554],{"class":66},[24159,82885,82887],{"id":82886},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82889,82890],{},[174,82891],{"alt":44,"src":82892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[39,82894,82896],{"className":51881,"code":82895,"language":51883,"meta":44,"style":44},"\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",[46,82897,82898,82908,82922,82926,82934,82948,82968,82980,82988,82995,83007,83019,83031,83043,83053,83063,83067,83075,83083,83087,83095,83107,83115,83137,83142,83147,83180,83188,83196,83200],{"__ignoreMap":44},[49,82899,82900,82902,82904,82906],{"class":51,"line":52},[49,82901,52545],{"class":66},[49,82903,52548],{"class":147},[49,82905,52551],{"class":62},[49,82907,52554],{"class":66},[49,82909,82910,82912,82914,82916,82918,82920],{"class":51,"line":59},[49,82911,2300],{"class":66},[49,82913,51883],{"class":147},[49,82915,52563],{"class":62},[49,82917,1448],{"class":66},[49,82919,52568],{"class":1505},[49,82921,52554],{"class":66},[49,82923,82924],{"class":51,"line":70},[49,82925,3654],{"emptyLinePlaceholder":1330},[49,82927,82928,82930,82932],{"class":51,"line":86},[49,82929,2300],{"class":66},[49,82931,52581],{"class":147},[49,82933,52554],{"class":66},[49,82935,82936,82938,82940,82942,82944,82946],{"class":51,"line":98},[49,82937,53386],{"class":66},[49,82939,52591],{"class":147},[49,82941,52594],{"class":62},[49,82943,1448],{"class":66},[49,82945,52599],{"class":1505},[49,82947,52554],{"class":66},[49,82949,82950,82952,82954,82956,82958,82960,82962,82964,82966],{"class":51,"line":121},[49,82951,53386],{"class":66},[49,82953,52591],{"class":147},[49,82955,16171],{"class":62},[49,82957,1448],{"class":66},[49,82959,52638],{"class":1505},[49,82961,52618],{"class":62},[49,82963,1448],{"class":66},[49,82965,52645],{"class":1505},[49,82967,52554],{"class":66},[49,82969,82970,82972,82974,82976,82978],{"class":51,"line":134},[49,82971,53386],{"class":66},[49,82973,52654],{"class":147},[49,82975,52657],{"class":66},[49,82977,52654],{"class":147},[49,82979,52554],{"class":66},[49,82981,82982,82984,82986],{"class":51,"line":1085},[49,82983,53386],{"class":66},[49,82985,1305],{"class":147},[49,82987,52554],{"class":66},[49,82989,82990,82993],{"class":51,"line":2574},[49,82991,82992],{"class":147},"    div",[49,82994,67],{"class":66},[49,82996,82997,82999,83001,83003,83005],{"class":51,"line":2586},[49,82998,56010],{"class":73},[49,83000,77],{"class":66},[49,83002,2977],{"class":73},[49,83004,110],{"class":109},[49,83006,83],{"class":66},[49,83008,83009,83011,83013,83015,83017],{"class":51,"line":2867},[49,83010,56024],{"class":73},[49,83012,77],{"class":66},[49,83014,1793],{"class":73},[49,83016,110],{"class":109},[49,83018,83],{"class":66},[49,83020,83021,83023,83025,83027,83029],{"class":51,"line":2872},[49,83022,58598],{"class":73},[49,83024,77],{"class":66},[49,83026,1793],{"class":73},[49,83028,110],{"class":109},[49,83030,83],{"class":66},[49,83032,83033,83035,83037,83039,83041],{"class":51,"line":2878},[49,83034,66368],{"class":73},[49,83036,77],{"class":66},[49,83038,1889],{"class":73},[49,83040,110],{"class":109},[49,83042,83],{"class":66},[49,83044,83045,83047,83049,83051],{"class":51,"line":2883},[49,83046,58525],{"class":73},[49,83048,77],{"class":66},[49,83050,52835],{"class":73},[49,83052,83],{"class":66},[49,83054,83055,83057,83059,83061],{"class":51,"line":2897},[49,83056,56123],{"class":73},[49,83058,77],{"class":66},[49,83060,52887],{"class":73},[49,83062,83],{"class":66},[49,83064,83065],{"class":51,"line":2902},[49,83066,3441],{"class":66},[49,83068,83069,83071,83073],{"class":51,"line":2908},[49,83070,53659],{"class":66},[49,83072,1305],{"class":147},[49,83074,52554],{"class":66},[49,83076,83077,83079,83081],{"class":51,"line":2929},[49,83078,53027],{"class":66},[49,83080,52581],{"class":147},[49,83082,52554],{"class":66},[49,83084,83085],{"class":51,"line":2934},[49,83086,3654],{"emptyLinePlaceholder":1330},[49,83088,83089,83091,83093],{"class":51,"line":2948},[49,83090,2300],{"class":66},[49,83092,53042],{"class":147},[49,83094,52554],{"class":66},[49,83096,83097,83099,83101,83103,83105],{"class":51,"line":2953},[49,83098,53386],{"class":66},[49,83100,148],{"class":147},[49,83102,56553],{"class":66},[49,83104,148],{"class":147},[49,83106,52554],{"class":66},[49,83108,83109,83111,83113],{"class":51,"line":2982},[49,83110,53386],{"class":66},[49,83112,53055],{"class":147},[49,83114,52554],{"class":66},[49,83116,83117,83119,83122,83124,83127,83130,83132,83135],{"class":51,"line":2987},[49,83118,12473],{"class":109},[49,83120,83121],{"class":73}," spec",[49,83123,14816],{"class":109},[49,83125,83126],{"class":66}," { size: ",[49,83128,83129],{"class":1505},"'40cm*40cm'",[49,83131,56703],{"class":66},[49,83133,83134],{"class":1505},"'黑色'",[49,83136,56843],{"class":66},[49,83138,83139],{"class":51,"line":3004},[49,83140,83141],{"class":55},"    \u002F\u002F const arr = Object.values(spec)\n",[49,83143,83144],{"class":51,"line":3009},[49,83145,83146],{"class":55},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[49,83148,83149,83151,83153,83155,83158,83160,83162,83165,83168,83171,83173,83175,83178],{"class":51,"line":3014},[49,83150,53649],{"class":66},[49,83152,55640],{"class":62},[49,83154,1403],{"class":66},[49,83156,83157],{"class":1505},"'div'",[49,83159,75478],{"class":66},[49,83161,1448],{"class":109},[49,83163,83164],{"class":66}," Object.",[49,83166,83167],{"class":62},"values",[49,83169,83170],{"class":66},"(spec).",[49,83172,75452],{"class":62},[49,83174,1403],{"class":66},[49,83176,83177],{"class":1505},"'\u002F'",[49,83179,1409],{"class":66},[49,83181,83182,83184,83186],{"class":51,"line":3019},[49,83183,53659],{"class":66},[49,83185,53055],{"class":147},[49,83187,52554],{"class":66},[49,83189,83190,83192,83194],{"class":51,"line":3033},[49,83191,53027],{"class":66},[49,83193,53042],{"class":147},[49,83195,52554],{"class":66},[49,83197,83198],{"class":51,"line":3038},[49,83199,3654],{"emptyLinePlaceholder":1330},[49,83201,83202,83204,83206],{"class":51,"line":3831},[49,83203,53027],{"class":66},[49,83205,51883],{"class":147},[49,83207,52554],{"class":66},[19,83209,83210],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24159,83212,83214],{"id":83213},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83216,83217],{},"静态方法，将伪数组转换为真数组",[19,83219,83220],{},[174,83221],{"alt":44,"src":83222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[39,83224,83226],{"className":54309,"code":83225,"language":54311,"meta":44,"style":44},"\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",[46,83227,83228,83236,83244,83256,83268,83280,83288,83296,83301,83306,83311,83316,83324],{"__ignoreMap":44},[49,83229,83230,83232,83234],{"class":51,"line":52},[49,83231,2300],{"class":66},[49,83233,53042],{"class":147},[49,83235,52554],{"class":66},[49,83237,83238,83240,83242],{"class":51,"line":59},[49,83239,53386],{"class":66},[49,83241,23],{"class":147},[49,83243,52554],{"class":66},[49,83245,83246,83248,83250,83252,83254],{"class":51,"line":70},[49,83247,52588],{"class":66},[49,83249,26],{"class":147},[49,83251,56553],{"class":66},[49,83253,26],{"class":147},[49,83255,52554],{"class":66},[49,83257,83258,83260,83262,83264,83266],{"class":51,"line":86},[49,83259,52588],{"class":66},[49,83261,26],{"class":147},[49,83263,56553],{"class":66},[49,83265,26],{"class":147},[49,83267,52554],{"class":66},[49,83269,83270,83272,83274,83276,83278],{"class":51,"line":98},[49,83271,52588],{"class":66},[49,83273,26],{"class":147},[49,83275,56553],{"class":66},[49,83277,26],{"class":147},[49,83279,52554],{"class":66},[49,83281,83282,83284,83286],{"class":51,"line":121},[49,83283,53659],{"class":66},[49,83285,23],{"class":147},[49,83287,52554],{"class":66},[49,83289,83290,83292,83294],{"class":51,"line":134},[49,83291,53386],{"class":66},[49,83293,53055],{"class":147},[49,83295,52554],{"class":66},[49,83297,83298],{"class":51,"line":1085},[49,83299,83300],{"class":66},"    const lis = document.querySelectorAll('li')\n",[49,83302,83303],{"class":51,"line":2574},[49,83304,83305],{"class":66},"    const liss = Array.from(lis)\n",[49,83307,83308],{"class":51,"line":2586},[49,83309,83310],{"class":66},"    liss.pop()\n",[49,83312,83313],{"class":51,"line":2867},[49,83314,83315],{"class":66},"    console.log(liss)\n",[49,83317,83318,83320,83322],{"class":51,"line":2872},[49,83319,53659],{"class":66},[49,83321,53055],{"class":147},[49,83323,52554],{"class":66},[49,83325,83326,83328,83330],{"class":51,"line":2878},[49,83327,53027],{"class":66},[49,83329,53042],{"class":147},[49,83331,52554],{"class":66},[19,83333,83334],{},[174,83335],{"alt":44,"src":83336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[525,83338,83340],{"id":83339},"_41053-string","4.10.5.3 String",[19,83342,83343],{},[174,83344],{"alt":44,"src":83345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24159,83347,83349],{"id":83348},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[39,83351,83353],{"className":54309,"code":83352,"language":54311,"meta":44,"style":44},"\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",[46,83354,83355,83363,83371,83376,83381,83386,83390,83395,83400,83405,83413],{"__ignoreMap":44},[49,83356,83357,83359,83361],{"class":51,"line":52},[49,83358,2300],{"class":66},[49,83360,53042],{"class":147},[49,83362,52554],{"class":66},[49,83364,83365,83367,83369],{"class":51,"line":59},[49,83366,53386],{"class":66},[49,83368,53055],{"class":147},[49,83370,52554],{"class":66},[49,83372,83373],{"class":51,"line":70},[49,83374,83375],{"class":66},"    \u002F\u002F 把字符串转化为数组\n",[49,83377,83378],{"class":51,"line":86},[49,83379,83380],{"class":66},"    const str = 'pink,red'\n",[49,83382,83383],{"class":51,"line":98},[49,83384,83385],{"class":66},"    const arr = str.split(',')\n",[49,83387,83388],{"class":51,"line":121},[49,83389,81864],{"class":66},[49,83391,83392],{"class":51,"line":134},[49,83393,83394],{"class":66},"    const str1 = '2025-8-25'\n",[49,83396,83397],{"class":51,"line":1085},[49,83398,83399],{"class":66},"    const arr1 = str1.split('-')\n",[49,83401,83402],{"class":51,"line":2574},[49,83403,83404],{"class":66},"    console.log(arr1)\n",[49,83406,83407,83409,83411],{"class":51,"line":2586},[49,83408,53659],{"class":66},[49,83410,53055],{"class":147},[49,83412,52554],{"class":66},[49,83414,83415,83417,83419],{"class":51,"line":2867},[49,83416,53027],{"class":66},[49,83418,53042],{"class":147},[49,83420,52554],{"class":66},[24159,83422,83424],{"id":83423},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83426,6435],{},[19,83428,83429],{},"substring(indexStart)",[19,83431,83432],{},"substring(indexStart, indexEnd)",[23,83434,83435,83446,83458,83468],{},[26,83436,83437,83438,83441,83442,83445],{},"如果省略了 ",[46,83439,83440],{},"indexEnd","，则 ",[46,83443,83444],{},"substring()"," 提取字符直到字符串的末尾",[26,83447,83448,83449,83452,83453,83441,83455,83457],{},"如果 ",[46,83450,83451],{},"indexStart"," 等于 ",[46,83454,83440],{},[46,83456,83444],{}," 返回一个空字符串",[26,83459,83448,83460,83462,83463,83441,83465,83467],{},[46,83461,83451],{}," 大于 ",[46,83464,83440],{},[46,83466,83444],{}," 的效果就像交换了这两个参数一样",[26,83469,83470],{},"结束的索引号不包含想要截取的部分",[39,83472,83474],{"className":82715,"code":83473,"language":82717,"meta":44,"style":44},"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",[46,83475,83476,83488,83492,83526,83556,83560,83591,83595,83622,83652,83682,83686,83717],{"__ignoreMap":44},[49,83477,83478,83481,83483,83486],{"class":51,"line":52},[49,83479,83480],{"class":66},"const anyString ",[49,83482,1448],{"class":109},[49,83484,83485],{"class":1505}," \"Mozilla\"",[49,83487,83],{"class":66},[49,83489,83490],{"class":51,"line":59},[49,83491,3654],{"emptyLinePlaceholder":1330},[49,83493,83494,83497,83499,83501,83503,83506,83508,83511,83513,83515,83517,83519,83521,83523],{"class":51,"line":70},[49,83495,83496],{"class":73},"console",[49,83498,1949],{"class":66},[49,83500,59486],{"class":73},[49,83502,1403],{"class":66},[49,83504,83505],{"class":73},"anyString",[49,83507,1949],{"class":66},[49,83509,83510],{"class":73},"substring",[49,83512,1403],{"class":66},[49,83514,80],{"class":73},[49,83516,13687],{"class":66},[49,83518,159],{"class":73},[49,83520,76482],{"class":66},[49,83522,34577],{"class":109},[49,83524,83525],{"class":1505}," 'M'\n",[49,83527,83528,83530,83532,83534,83536,83538,83540,83542,83544,83546,83548,83550,83552,83554],{"class":51,"line":86},[49,83529,83496],{"class":73},[49,83531,1949],{"class":66},[49,83533,59486],{"class":73},[49,83535,1403],{"class":66},[49,83537,83505],{"class":73},[49,83539,1949],{"class":66},[49,83541,83510],{"class":73},[49,83543,1403],{"class":66},[49,83545,159],{"class":73},[49,83547,13687],{"class":66},[49,83549,80],{"class":73},[49,83551,76482],{"class":66},[49,83553,34577],{"class":109},[49,83555,83525],{"class":1505},[49,83557,83558],{"class":51,"line":98},[49,83559,3654],{"emptyLinePlaceholder":1330},[49,83561,83562,83564,83566,83568,83570,83572,83574,83576,83578,83580,83582,83584,83586,83588],{"class":51,"line":121},[49,83563,83496],{"class":73},[49,83565,1949],{"class":66},[49,83567,59486],{"class":73},[49,83569,1403],{"class":66},[49,83571,83505],{"class":73},[49,83573,1949],{"class":66},[49,83575,83510],{"class":73},[49,83577,1403],{"class":66},[49,83579,80],{"class":73},[49,83581,13687],{"class":66},[49,83583,1736],{"class":73},[49,83585,76482],{"class":66},[49,83587,34577],{"class":109},[49,83589,83590],{"class":1505}," 'Mozill'\n",[49,83592,83593],{"class":51,"line":134},[49,83594,3654],{"emptyLinePlaceholder":1330},[49,83596,83597,83599,83601,83603,83605,83607,83609,83611,83613,83615,83617,83619],{"class":51,"line":1085},[49,83598,83496],{"class":73},[49,83600,1949],{"class":66},[49,83602,59486],{"class":73},[49,83604,1403],{"class":66},[49,83606,83505],{"class":73},[49,83608,1949],{"class":66},[49,83610,83510],{"class":73},[49,83612,1403],{"class":66},[49,83614,1685],{"class":73},[49,83616,76482],{"class":66},[49,83618,34577],{"class":109},[49,83620,83621],{"class":1505}," 'lla'\n",[49,83623,83624,83626,83628,83630,83632,83634,83636,83638,83640,83642,83644,83646,83648,83650],{"class":51,"line":2574},[49,83625,83496],{"class":73},[49,83627,1949],{"class":66},[49,83629,59486],{"class":73},[49,83631,1403],{"class":66},[49,83633,83505],{"class":73},[49,83635,1949],{"class":66},[49,83637,83510],{"class":73},[49,83639,1403],{"class":66},[49,83641,1685],{"class":73},[49,83643,13687],{"class":66},[49,83645,1761],{"class":73},[49,83647,76538],{"class":66},[49,83649,34577],{"class":109},[49,83651,83621],{"class":1505},[49,83653,83654,83656,83658,83660,83662,83664,83666,83668,83670,83672,83674,83676,83678,83680],{"class":51,"line":2586},[49,83655,83496],{"class":73},[49,83657,1949],{"class":66},[49,83659,59486],{"class":73},[49,83661,1403],{"class":66},[49,83663,83505],{"class":73},[49,83665,1949],{"class":66},[49,83667,83510],{"class":73},[49,83669,1403],{"class":66},[49,83671,1761],{"class":73},[49,83673,13687],{"class":66},[49,83675,1685],{"class":73},[49,83677,76482],{"class":66},[49,83679,34577],{"class":109},[49,83681,83621],{"class":1505},[49,83683,83684],{"class":51,"line":2867},[49,83685,3654],{"emptyLinePlaceholder":1330},[49,83687,83688,83690,83692,83694,83696,83698,83700,83702,83704,83706,83708,83710,83712,83714],{"class":51,"line":2872},[49,83689,83496],{"class":73},[49,83691,1949],{"class":66},[49,83693,59486],{"class":73},[49,83695,1403],{"class":66},[49,83697,83505],{"class":73},[49,83699,1949],{"class":66},[49,83701,83510],{"class":73},[49,83703,1403],{"class":66},[49,83705,80],{"class":73},[49,83707,13687],{"class":66},[49,83709,1761],{"class":73},[49,83711,76482],{"class":66},[49,83713,34577],{"class":109},[49,83715,83716],{"class":1505}," 'Mozilla'\n",[49,83718,83719,83721,83723,83725,83727,83729,83731,83733,83735,83737,83739,83741,83743,83745],{"class":51,"line":2878},[49,83720,83496],{"class":73},[49,83722,1949],{"class":66},[49,83724,59486],{"class":73},[49,83726,1403],{"class":66},[49,83728,83505],{"class":73},[49,83730,1949],{"class":66},[49,83732,83510],{"class":73},[49,83734,1403],{"class":66},[49,83736,80],{"class":73},[49,83738,13687],{"class":66},[49,83740,106],{"class":73},[49,83742,76482],{"class":66},[49,83744,34577],{"class":109},[49,83746,83716],{"class":1505},[24159,83748,83750],{"id":83749},"_410533-startswith","4.10.5.3.3 startsWith",[19,83752,83753,83756,83757,83762,83763,83765,83766],{},[46,83754,83755],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[485,83758,83759],{},[46,83760,83761],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[46,83764,2619],{}," 或 ",[46,83767,67255],{},[39,83769,83771],{"className":78722,"code":83770,"language":78724,"meta":44,"style":44},"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",[46,83772,83773,83785,83804,83809,83829],{"__ignoreMap":44},[49,83774,83775,83777,83780,83782],{"class":51,"line":52},[49,83776,8044],{"class":109},[49,83778,83779],{"class":66}," str1 ",[49,83781,1448],{"class":109},[49,83783,83784],{"class":1505}," \"Saturday night plans\"\n",[49,83786,83787,83789,83791,83794,83797,83799,83802],{"class":51,"line":59},[49,83788,78759],{"class":66},[49,83790,59486],{"class":62},[49,83792,83793],{"class":66},"(str1.",[49,83795,83796],{"class":62},"startsWith",[49,83798,1403],{"class":66},[49,83800,83801],{"class":1505},"\"Sat\"",[49,83803,31745],{"class":66},[49,83805,83806],{"class":51,"line":70},[49,83807,83808],{"class":55},"\u002F\u002F Expected output: true\n",[49,83810,83811,83813,83815,83817,83819,83821,83823,83825,83827],{"class":51,"line":86},[49,83812,78759],{"class":66},[49,83814,59486],{"class":62},[49,83816,83793],{"class":66},[49,83818,83796],{"class":62},[49,83820,1403],{"class":66},[49,83822,83801],{"class":1505},[49,83824,13687],{"class":66},[49,83826,1472],{"class":73},[49,83828,31745],{"class":66},[49,83830,83831],{"class":51,"line":98},[49,83832,83833],{"class":55},"\u002F\u002F Expected output: false\n",[39,83835,83837],{"className":51881,"code":83836,"language":51883,"meta":44,"style":44},"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",[46,83838,83839,83844,83849,83853,83858,83863],{"__ignoreMap":44},[49,83840,83841],{"class":51,"line":52},[49,83842,83843],{"class":66},"startsWith(searchString)\n",[49,83845,83846],{"class":51,"line":59},[49,83847,83848],{"class":66},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[49,83850,83851],{"class":51,"line":70},[49,83852,3654],{"emptyLinePlaceholder":1330},[49,83854,83855],{"class":51,"line":86},[49,83856,83857],{"class":66},"const str3 = 'pink老师上课中'\n",[49,83859,83860],{"class":51,"line":98},[49,83861,83862],{"class":66},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[49,83864,83865],{"class":51,"line":121},[49,83866,83867],{"class":66},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24159,83869,83871],{"id":83870},"_410534-includes","4.10.5.3.4 includes",[19,83873,83874],{},"includes(searchString) includes(searchString, position)",[591,83876,83877],{},[26,83878,83879],{},"searchString:",[19,83881,83882,83883,83885,83886,83891,83892,83897,83898,22750,83901,83904,83905,83908],{},"一个要在 ",[46,83884,2557],{}," 中查找的字符串。",[1630,83887,83890],{"href":83888,"rel":83889},"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",[25113],"不能是正则表达式","。所有非正则表达式的值都会被",[1630,83893,83896],{"href":83894,"rel":83895},"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",[25113],"强制转换为字符串","，因此如果该参数被省略或传入 ",[46,83899,83900],{},"undefined",[46,83902,83903],{},"includes()"," 方法会在字符串中搜索 ",[46,83906,83907],{},"\"undefined\"","，这通常不是你想要的",[591,83910,83911],{"start":59},[26,83912,83913,2249],{},[46,83914,83915],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,83917,83918,83919,83922,83923],{},"在字符串中开始搜索 ",[46,83920,83921],{},"searchString"," 的位置。默认值为 ",[46,83924,80],{},[591,83926,83927],{"start":70},[26,83928,83929],{},"返回值：",[19,83931,83932,83933,83935,83936,83940,83941],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[46,83934,83921],{}," 为空字符串的情况），则返回 ",[485,83937,83938],{},[46,83939,2619],{}," ，否则返回 ",[485,83942,83943],{},[46,83944,67255],{},[591,83946,83947],{"start":86},[26,83948,83949],{},"异常：",[19,83951,83448,83952,15047,83954,83958],{},[46,83953,83921],{},[1630,83955,83957],{"href":83888,"rel":83956},[25113],"是一个正则表达式","，则会抛出",[19,83960,83961],{},"只要是有就是true，不需要非得以谁开头结尾",[39,83963,83965],{"className":78722,"code":83964,"language":78724,"meta":44,"style":44},"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",[46,83966,83967,83978,84001,84020,84040,84062,84081],{"__ignoreMap":44},[49,83968,83969,83971,83973,83975],{"class":51,"line":52},[49,83970,8044],{"class":109},[49,83972,81002],{"class":66},[49,83974,1448],{"class":109},[49,83976,83977],{"class":1505}," \"To be, or not to be, that is the question.\"\n",[49,83979,83980,83982,83984,83987,83990,83992,83995,83998],{"class":51,"line":59},[49,83981,78759],{"class":66},[49,83983,59486],{"class":62},[49,83985,83986],{"class":66},"(str.",[49,83988,83989],{"class":62},"includes",[49,83991,1403],{"class":66},[49,83993,83994],{"class":1505},"\"To be\"",[49,83996,83997],{"class":66},"))",[49,83999,84000],{"class":55},"  \u002F\u002F true\n",[49,84002,84003,84005,84007,84009,84011,84013,84016,84018],{"class":51,"line":70},[49,84004,78759],{"class":66},[49,84006,59486],{"class":62},[49,84008,83986],{"class":66},[49,84010,83989],{"class":62},[49,84012,1403],{"class":66},[49,84014,84015],{"class":1505},"\"question\"",[49,84017,83997],{"class":66},[49,84019,84000],{"class":55},[49,84021,84022,84024,84026,84028,84030,84032,84035,84037],{"class":51,"line":86},[49,84023,78759],{"class":66},[49,84025,59486],{"class":62},[49,84027,83986],{"class":66},[49,84029,83989],{"class":62},[49,84031,1403],{"class":66},[49,84033,84034],{"class":1505},"\"nonexistent\"",[49,84036,83997],{"class":66},[49,84038,84039],{"class":55},"  \u002F\u002F false\n",[49,84041,84042,84044,84046,84048,84050,84052,84054,84056,84058,84060],{"class":51,"line":98},[49,84043,78759],{"class":66},[49,84045,59486],{"class":62},[49,84047,83986],{"class":66},[49,84049,83989],{"class":62},[49,84051,1403],{"class":66},[49,84053,83994],{"class":1505},[49,84055,13687],{"class":66},[49,84057,159],{"class":73},[49,84059,83997],{"class":66},[49,84061,84039],{"class":55},[49,84063,84064,84066,84068,84070,84072,84074,84077,84079],{"class":51,"line":121},[49,84065,78759],{"class":66},[49,84067,59486],{"class":62},[49,84069,83986],{"class":66},[49,84071,83989],{"class":62},[49,84073,1403],{"class":66},[49,84075,84076],{"class":1505},"\"TO BE\"",[49,84078,83997],{"class":66},[49,84080,84039],{"class":55},[49,84082,84083,84085,84087,84089,84091,84093,84095,84097],{"class":51,"line":134},[49,84084,78759],{"class":66},[49,84086,59486],{"class":62},[49,84088,83986],{"class":66},[49,84090,83989],{"class":62},[49,84092,1403],{"class":66},[49,84094,8904],{"class":1505},[49,84096,83997],{"class":66},[49,84098,84000],{"class":55},[24159,84100,84102],{"id":84101},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[39,84104,84106],{"className":54309,"code":84105,"language":54311,"meta":44,"style":44},"\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",[46,84107,84108,84116,84124,84129,84134,84139,84144,84149,84157],{"__ignoreMap":44},[49,84109,84110,84112,84114],{"class":51,"line":52},[49,84111,2300],{"class":66},[49,84113,53042],{"class":147},[49,84115,52554],{"class":66},[49,84117,84118,84120,84122],{"class":51,"line":59},[49,84119,53386],{"class":66},[49,84121,53055],{"class":147},[49,84123,52554],{"class":66},[49,84125,84126],{"class":51,"line":70},[49,84127,84128],{"class":66},"    const num = 10\n",[49,84130,84131],{"class":51,"line":86},[49,84132,84133],{"class":66},"    \u002F\u002F 强制转换\n",[49,84135,84136],{"class":51,"line":98},[49,84137,84138],{"class":66},"    console.log(String(num))\n",[49,84140,84141],{"class":51,"line":121},[49,84142,84143],{"class":66},"    \u002F\u002F toString()方法转换\n",[49,84145,84146],{"class":51,"line":134},[49,84147,84148],{"class":66},"    console.log(num.toString())\n",[49,84150,84151,84153,84155],{"class":51,"line":1085},[49,84152,53659],{"class":66},[49,84154,53055],{"class":147},[49,84156,52554],{"class":66},[49,84158,84159,84161,84163],{"class":51,"line":2574},[49,84160,53027],{"class":66},[49,84162,53042],{"class":147},[49,84164,52554],{"class":66},[24159,84166,84168],{"id":84167},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84170,84171],{},[174,84172],{"alt":44,"src":84173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[39,84175,84177],{"className":51881,"code":84176,"language":51883,"meta":44,"style":44},"\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",[46,84178,84179,84189,84203,84207,84215,84229,84249,84261,84269,84273,84281,84293,84301,84313,84318,84323,84328,84375,84391,84399,84407,84411],{"__ignoreMap":44},[49,84180,84181,84183,84185,84187],{"class":51,"line":52},[49,84182,52545],{"class":66},[49,84184,52548],{"class":147},[49,84186,52551],{"class":62},[49,84188,52554],{"class":66},[49,84190,84191,84193,84195,84197,84199,84201],{"class":51,"line":59},[49,84192,2300],{"class":66},[49,84194,51883],{"class":147},[49,84196,52563],{"class":62},[49,84198,1448],{"class":66},[49,84200,52568],{"class":1505},[49,84202,52554],{"class":66},[49,84204,84205],{"class":51,"line":70},[49,84206,3654],{"emptyLinePlaceholder":1330},[49,84208,84209,84211,84213],{"class":51,"line":86},[49,84210,2300],{"class":66},[49,84212,52581],{"class":147},[49,84214,52554],{"class":66},[49,84216,84217,84219,84221,84223,84225,84227],{"class":51,"line":98},[49,84218,53386],{"class":66},[49,84220,52591],{"class":147},[49,84222,52594],{"class":62},[49,84224,1448],{"class":66},[49,84226,52599],{"class":1505},[49,84228,52554],{"class":66},[49,84230,84231,84233,84235,84237,84239,84241,84243,84245,84247],{"class":51,"line":121},[49,84232,53386],{"class":66},[49,84234,52591],{"class":147},[49,84236,16171],{"class":62},[49,84238,1448],{"class":66},[49,84240,52638],{"class":1505},[49,84242,52618],{"class":62},[49,84244,1448],{"class":66},[49,84246,52645],{"class":1505},[49,84248,52554],{"class":66},[49,84250,84251,84253,84255,84257,84259],{"class":51,"line":134},[49,84252,53386],{"class":66},[49,84254,52654],{"class":147},[49,84256,52657],{"class":66},[49,84258,52654],{"class":147},[49,84260,52554],{"class":66},[49,84262,84263,84265,84267],{"class":51,"line":1085},[49,84264,53027],{"class":66},[49,84266,52581],{"class":147},[49,84268,52554],{"class":66},[49,84270,84271],{"class":51,"line":2574},[49,84272,3654],{"emptyLinePlaceholder":1330},[49,84274,84275,84277,84279],{"class":51,"line":2586},[49,84276,2300],{"class":66},[49,84278,53042],{"class":147},[49,84280,52554],{"class":66},[49,84282,84283,84285,84287,84289,84291],{"class":51,"line":2867},[49,84284,53386],{"class":66},[49,84286,148],{"class":147},[49,84288,56553],{"class":66},[49,84290,148],{"class":147},[49,84292,52554],{"class":66},[49,84294,84295,84297,84299],{"class":51,"line":2872},[49,84296,53386],{"class":66},[49,84298,53055],{"class":147},[49,84300,52554],{"class":66},[49,84302,84303,84305,84308,84310],{"class":51,"line":2878},[49,84304,12473],{"class":109},[49,84306,84307],{"class":73}," gift",[49,84309,14816],{"class":109},[49,84311,84312],{"class":1505}," '50g的茶叶，清洗球'\n",[49,84314,84315],{"class":51,"line":2883},[49,84316,84317],{"class":55},"    \u002F\u002F 1.把字符串拆分为数组\n",[49,84319,84320],{"class":51,"line":2897},[49,84321,84322],{"class":55},"    \u002F\u002F console.log(gift.split(','))\n",[49,84324,84325],{"class":51,"line":2902},[49,84326,84327],{"class":55},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[49,84329,84330,84332,84334,84336,84339,84342,84344,84347,84349,84351,84353,84355,84357,84360,84362,84365,84367,84369,84371,84373],{"class":51,"line":2908},[49,84331,12473],{"class":109},[49,84333,75148],{"class":73},[49,84335,14816],{"class":109},[49,84337,84338],{"class":66}," gift.",[49,84340,84341],{"class":62},"split",[49,84343,1403],{"class":66},[49,84345,84346],{"class":1505},"'，'",[49,84348,32074],{"class":66},[49,84350,75273],{"class":62},[49,84352,1403],{"class":66},[49,84354,81022],{"class":6468},[49,84356,81025],{"class":109},[49,84358,84359],{"class":1505}," `\u003Cspan>【赠品】${",[49,84361,81022],{"class":66},[49,84363,84364],{"class":1505},"}\u003C\u002Fspan>\u003Cbr>`",[49,84366,32074],{"class":66},[49,84368,75452],{"class":62},[49,84370,1403],{"class":66},[49,84372,75457],{"class":1505},[49,84374,1409],{"class":66},[49,84376,84377,84379,84381,84383,84385,84387,84389],{"class":51,"line":2929},[49,84378,53649],{"class":66},[49,84380,55640],{"class":62},[49,84382,1403],{"class":66},[49,84384,83157],{"class":1505},[49,84386,75478],{"class":66},[49,84388,1448],{"class":109},[49,84390,75214],{"class":66},[49,84392,84393,84395,84397],{"class":51,"line":2934},[49,84394,53659],{"class":66},[49,84396,53055],{"class":147},[49,84398,52554],{"class":66},[49,84400,84401,84403,84405],{"class":51,"line":2948},[49,84402,53027],{"class":66},[49,84404,53042],{"class":147},[49,84406,52554],{"class":66},[49,84408,84409],{"class":51,"line":2953},[49,84410,3654],{"emptyLinePlaceholder":1330},[49,84412,84413,84415,84417],{"class":51,"line":2982},[49,84414,53027],{"class":66},[49,84416,51883],{"class":147},[49,84418,52554],{"class":66},[525,84420,84422],{"id":84421},"_41054-number","4.10.5.4 Number",[19,84424,84425],{},[174,84426],{"alt":44,"src":84427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84429,84430],{},"整数也可以进行toFixed来保留小数",[19,84432,1294],{},[19,84434,84435],{},"const price=10",[19,84437,84438],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[525,84440,84442],{"id":84441},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84444,84445],{},[174,84446],{"alt":44,"src":84447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[39,84449,84451],{"className":51881,"code":84450,"language":51883,"meta":44,"style":44},"\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",[46,84452,84453,84463,84477,84481,84489,84503,84523,84535,84543,84549,84559,84569,84579,84583,84587,84593,84605,84619,84623,84627,84633,84645,84661,84671,84687,84691,84695,84701,84711,84721,84725,84729,84737,84749,84761,84773,84777,84781,84789,84801,84805,84809,84820,84830,84842,84854,84864,84868,84872,84880,84889,84901,84911,84921,84925,84929,84937,84946,84953,84963,84975,84979,84983,84992,85002,85013,85025,85037,85041,85045,85054,85064,85075,85079,85083,85089,85101,85113,85123,85133,85151,85163,85167,85171,85180,85192,85202,85212,85224,85228,85236,85244,85248,85256,85270,85278,85292,85320,85328,85336,85346,85350,85358,85366,85375,85383,85392,85402,85406,85410,85418,85426,85435,85443,85451,85464,85468,85472,85480,85488,85497,85505,85513,85528,85532,85536,85544,85552,85561,85569,85577,85591,85599,85603,85607,85612,85638,85643,85680,85685,85708,85713,85767,85772,85808,85812,85818,85823,85832,85846,85855,85874,85883,85893,85898,85903,85916,85921,85975,86001,86009,86017,86021],{"__ignoreMap":44},[49,84454,84455,84457,84459,84461],{"class":51,"line":52},[49,84456,52545],{"class":66},[49,84458,52548],{"class":147},[49,84460,52551],{"class":62},[49,84462,52554],{"class":66},[49,84464,84465,84467,84469,84471,84473,84475],{"class":51,"line":59},[49,84466,2300],{"class":66},[49,84468,51883],{"class":147},[49,84470,52563],{"class":62},[49,84472,1448],{"class":66},[49,84474,52568],{"class":1505},[49,84476,52554],{"class":66},[49,84478,84479],{"class":51,"line":70},[49,84480,3654],{"emptyLinePlaceholder":1330},[49,84482,84483,84485,84487],{"class":51,"line":86},[49,84484,2300],{"class":66},[49,84486,52581],{"class":147},[49,84488,52554],{"class":66},[49,84490,84491,84493,84495,84497,84499,84501],{"class":51,"line":98},[49,84492,53386],{"class":66},[49,84494,52591],{"class":147},[49,84496,52594],{"class":62},[49,84498,1448],{"class":66},[49,84500,52599],{"class":1505},[49,84502,52554],{"class":66},[49,84504,84505,84507,84509,84511,84513,84515,84517,84519,84521],{"class":51,"line":121},[49,84506,53386],{"class":66},[49,84508,52591],{"class":147},[49,84510,16171],{"class":62},[49,84512,1448],{"class":66},[49,84514,52638],{"class":1505},[49,84516,52618],{"class":62},[49,84518,1448],{"class":66},[49,84520,52645],{"class":1505},[49,84522,52554],{"class":66},[49,84524,84525,84527,84529,84531,84533],{"class":51,"line":134},[49,84526,53386],{"class":66},[49,84528,52654],{"class":147},[49,84530,52657],{"class":66},[49,84532,52654],{"class":147},[49,84534,52554],{"class":66},[49,84536,84537,84539,84541],{"class":51,"line":1085},[49,84538,53386],{"class":66},[49,84540,1305],{"class":147},[49,84542,52554],{"class":66},[49,84544,84545,84547],{"class":51,"line":2574},[49,84546,7655],{"class":147},[49,84548,67],{"class":66},[49,84550,84551,84553,84555,84557],{"class":51,"line":2586},[49,84552,55936],{"class":73},[49,84554,77],{"class":66},[49,84556,80],{"class":73},[49,84558,83],{"class":66},[49,84560,84561,84563,84565,84567],{"class":51,"line":2867},[49,84562,55947],{"class":73},[49,84564,77],{"class":66},[49,84566,80],{"class":73},[49,84568,83],{"class":66},[49,84570,84571,84573,84575,84577],{"class":51,"line":2872},[49,84572,73825],{"class":73},[49,84574,77],{"class":66},[49,84576,61744],{"class":73},[49,84578,83],{"class":66},[49,84580,84581],{"class":51,"line":2878},[49,84582,3441],{"class":66},[49,84584,84585],{"class":51,"line":2883},[49,84586,3654],{"emptyLinePlaceholder":1330},[49,84588,84589,84591],{"class":51,"line":2897},[49,84590,63360],{"class":62},[49,84592,67],{"class":66},[49,84594,84595,84597,84599,84601,84603],{"class":51,"line":2902},[49,84596,56010],{"class":73},[49,84598,77],{"class":66},[49,84600,79801],{"class":73},[49,84602,110],{"class":109},[49,84604,83],{"class":66},[49,84606,84607,84609,84611,84613,84615,84617],{"class":51,"line":2908},[49,84608,55947],{"class":73},[49,84610,77],{"class":66},[49,84612,1703],{"class":73},[49,84614,110],{"class":109},[49,84616,1077],{"class":73},[49,84618,83],{"class":66},[49,84620,84621],{"class":51,"line":2929},[49,84622,3441],{"class":66},[49,84624,84625],{"class":51,"line":2934},[49,84626,3654],{"emptyLinePlaceholder":1330},[49,84628,84629,84631],{"class":51,"line":2948},[49,84630,79852],{"class":62},[49,84632,67],{"class":66},[49,84634,84635,84637,84639,84641,84643],{"class":51,"line":2953},[49,84636,55936],{"class":73},[49,84638,77],{"class":66},[49,84640,1966],{"class":73},[49,84642,110],{"class":109},[49,84644,83],{"class":66},[49,84646,84647,84649,84651,84653,84655,84657,84659],{"class":51,"line":2982},[49,84648,63098],{"class":73},[49,84650,77],{"class":66},[49,84652,29369],{"class":73},[49,84654,79907],{"class":73},[49,84656,79910],{"class":73},[49,84658,2086],{"class":109},[49,84660,83],{"class":66},[49,84662,84663,84665,84667,84669],{"class":51,"line":2987},[49,84664,56248],{"class":73},[49,84666,77],{"class":66},[49,84668,52723],{"class":73},[49,84670,83],{"class":66},[49,84672,84673,84675,84677,84679,84681,84683,84685],{"class":51,"line":3004},[49,84674,63215],{"class":73},[49,84676,77],{"class":66},[49,84678,159],{"class":73},[49,84680,110],{"class":109},[49,84682,113],{"class":73},[49,84684,63481],{"class":73},[49,84686,83],{"class":66},[49,84688,84689],{"class":51,"line":3009},[49,84690,3441],{"class":66},[49,84692,84693],{"class":51,"line":3014},[49,84694,3654],{"emptyLinePlaceholder":1330},[49,84696,84697,84699],{"class":51,"line":3019},[49,84698,79970],{"class":62},[49,84700,67],{"class":66},[49,84702,84703,84705,84707,84709],{"class":51,"line":3033},[49,84704,63263],{"class":73},[49,84706,77],{"class":66},[49,84708,211],{"class":73},[49,84710,83],{"class":66},[49,84712,84713,84715,84717,84719],{"class":51,"line":3038},[49,84714,56123],{"class":73},[49,84716,77],{"class":66},[49,84718,63056],{"class":73},[49,84720,83],{"class":66},[49,84722,84723],{"class":51,"line":3831},[49,84724,3441],{"class":66},[49,84726,84727],{"class":51,"line":3845},[49,84728,3654],{"emptyLinePlaceholder":1330},[49,84730,84731,84733,84735],{"class":51,"line":3853},[49,84732,79852],{"class":62},[49,84734,56854],{"class":147},[49,84736,67],{"class":66},[49,84738,84739,84741,84743,84745,84747],{"class":51,"line":3858},[49,84740,56010],{"class":73},[49,84742,77],{"class":66},[49,84744,2003],{"class":73},[49,84746,110],{"class":109},[49,84748,83],{"class":66},[49,84750,84751,84753,84755,84757,84759],{"class":51,"line":3864},[49,84752,56024],{"class":73},[49,84754,77],{"class":66},[49,84756,2003],{"class":73},[49,84758,110],{"class":109},[49,84760,83],{"class":66},[49,84762,84763,84765,84767,84769,84771],{"class":51,"line":3870},[49,84764,62988],{"class":73},[49,84766,77],{"class":66},[49,84768,1711],{"class":73},[49,84770,110],{"class":109},[49,84772,83],{"class":66},[49,84774,84775],{"class":51,"line":3875},[49,84776,3441],{"class":66},[49,84778,84779],{"class":51,"line":9200},[49,84780,3654],{"emptyLinePlaceholder":1330},[49,84782,84783,84785,84787],{"class":51,"line":9224},[49,84784,79852],{"class":62},[49,84786,63541],{"class":62},[49,84788,67],{"class":66},[49,84790,84791,84793,84795,84797,84799],{"class":51,"line":9229},[49,84792,56010],{"class":73},[49,84794,77],{"class":66},[49,84796,2977],{"class":73},[49,84798,110],{"class":109},[49,84800,83],{"class":66},[49,84802,84803],{"class":51,"line":9235},[49,84804,3441],{"class":66},[49,84806,84807],{"class":51,"line":9262},[49,84808,3654],{"emptyLinePlaceholder":1330},[49,84810,84811,84813,84815,84818],{"class":51,"line":9267},[49,84812,79852],{"class":62},[49,84814,63541],{"class":62},[49,84816,84817],{"class":62}," .tag",[49,84819,67],{"class":66},[49,84821,84822,84824,84826,84828],{"class":51,"line":9273},[49,84823,56248],{"class":73},[49,84825,77],{"class":66},[49,84827,674],{"class":73},[49,84829,83],{"class":66},[49,84831,84832,84834,84836,84838,84840],{"class":51,"line":9285},[49,84833,55936],{"class":73},[49,84835,77],{"class":66},[49,84837,1478],{"class":73},[49,84839,110],{"class":109},[49,84841,83],{"class":66},[49,84843,84844,84846,84848,84850,84852],{"class":51,"line":9297},[49,84845,56161],{"class":73},[49,84847,77],{"class":66},[49,84849,1889],{"class":73},[49,84851,110],{"class":109},[49,84853,83],{"class":66},[49,84855,84856,84858,84860,84862],{"class":51,"line":9309},[49,84857,58655],{"class":73},[49,84859,77],{"class":66},[49,84861,63307],{"class":73},[49,84863,83],{"class":66},[49,84865,84866],{"class":51,"line":10968},[49,84867,3441],{"class":66},[49,84869,84870],{"class":51,"line":10993},[49,84871,3654],{"emptyLinePlaceholder":1330},[49,84873,84874,84876,84878],{"class":51,"line":11016},[49,84875,79852],{"class":62},[49,84877,80144],{"class":62},[49,84879,32714],{"class":66},[49,84881,84882,84884,84887],{"class":51,"line":11040},[49,84883,79852],{"class":62},[49,84885,84886],{"class":62}," .sub-total",[49,84888,67],{"class":66},[49,84890,84891,84893,84895,84897,84899],{"class":51,"line":11045},[49,84892,56161],{"class":73},[49,84894,77],{"class":66},[49,84896,2041],{"class":73},[49,84898,110],{"class":109},[49,84900,83],{"class":66},[49,84902,84903,84905,84907,84909],{"class":51,"line":11050},[49,84904,58655],{"class":73},[49,84906,77],{"class":66},[49,84908,80167],{"class":73},[49,84910,83],{"class":66},[49,84912,84913,84915,84917,84919],{"class":51,"line":11055},[49,84914,63075],{"class":73},[49,84916,77],{"class":66},[49,84918,159],{"class":73},[49,84920,83],{"class":66},[49,84922,84923],{"class":51,"line":11064},[49,84924,3441],{"class":66},[49,84926,84927],{"class":51,"line":11069},[49,84928,3654],{"emptyLinePlaceholder":1330},[49,84930,84931,84933,84935],{"class":51,"line":11075},[49,84932,79852],{"class":62},[49,84934,80184],{"class":62},[49,84936,32714],{"class":66},[49,84938,84939,84941,84944],{"class":51,"line":11096},[49,84940,79852],{"class":62},[49,84942,84943],{"class":62}," .sub-total::before",[49,84945,32714],{"class":66},[49,84947,84948,84951],{"class":51,"line":11102},[49,84949,84950],{"class":62},"    .amount::before",[49,84952,67],{"class":66},[49,84954,84955,84957,84959,84961],{"class":51,"line":11116},[49,84956,80191],{"class":73},[49,84958,77],{"class":66},[49,84960,80196],{"class":1505},[49,84962,83],{"class":66},[49,84964,84965,84967,84969,84971,84973],{"class":51,"line":11122},[49,84966,56161],{"class":73},[49,84968,77],{"class":66},[49,84970,1889],{"class":73},[49,84972,110],{"class":109},[49,84974,83],{"class":66},[49,84976,84977],{"class":51,"line":11149},[49,84978,3441],{"class":66},[49,84980,84981],{"class":51,"line":11158},[49,84982,3654],{"emptyLinePlaceholder":1330},[49,84984,84985,84987,84990],{"class":51,"line":11164},[49,84986,79852],{"class":62},[49,84988,84989],{"class":62}," .spec",[49,84991,67],{"class":66},[49,84993,84994,84996,84998,85000],{"class":51,"line":11172},[49,84995,63075],{"class":73},[49,84997,77],{"class":66},[49,84999,1478],{"class":73},[49,85001,83],{"class":66},[49,85003,85004,85006,85008,85011],{"class":51,"line":11177},[49,85005,58655],{"class":73},[49,85007,77],{"class":66},[49,85009,85010],{"class":73},"#888",[49,85012,83],{"class":66},[49,85014,85015,85017,85019,85021,85023],{"class":51,"line":17854},[49,85016,56161],{"class":73},[49,85018,77],{"class":66},[49,85020,1940],{"class":73},[49,85022,110],{"class":109},[49,85024,83],{"class":66},[49,85026,85027,85029,85031,85033,85035],{"class":51,"line":17860},[49,85028,63238],{"class":73},[49,85030,77],{"class":66},[49,85032,875],{"class":73},[49,85034,110],{"class":109},[49,85036,83],{"class":66},[49,85038,85039],{"class":51,"line":17883},[49,85040,3441],{"class":66},[49,85042,85043],{"class":51,"line":17889},[49,85044,3654],{"emptyLinePlaceholder":1330},[49,85046,85047,85049,85052],{"class":51,"line":17912},[49,85048,79852],{"class":62},[49,85050,85051],{"class":62}," .count",[49,85053,67],{"class":66},[49,85055,85056,85058,85060,85062],{"class":51,"line":17926},[49,85057,63075],{"class":73},[49,85059,77],{"class":66},[49,85061,159],{"class":73},[49,85063,83],{"class":66},[49,85065,85066,85068,85070,85073],{"class":51,"line":17946},[49,85067,58655],{"class":73},[49,85069,77],{"class":66},[49,85071,85072],{"class":73},"#aaa",[49,85074,83],{"class":66},[49,85076,85077],{"class":51,"line":17952},[49,85078,3441],{"class":66},[49,85080,85081],{"class":51,"line":17963},[49,85082,3654],{"emptyLinePlaceholder":1330},[49,85084,85085,85087],{"class":51,"line":17986},[49,85086,73705],{"class":62},[49,85088,67],{"class":66},[49,85090,85091,85093,85095,85097,85099],{"class":51,"line":18008},[49,85092,56010],{"class":73},[49,85094,77],{"class":66},[49,85096,79801],{"class":73},[49,85098,110],{"class":109},[49,85100,83],{"class":66},[49,85102,85103,85105,85107,85109,85111],{"class":51,"line":18013},[49,85104,55947],{"class":73},[49,85106,77],{"class":66},[49,85108,80],{"class":73},[49,85110,1077],{"class":73},[49,85112,83],{"class":66},[49,85114,85115,85117,85119,85121],{"class":51,"line":18019},[49,85116,56248],{"class":73},[49,85118,77],{"class":66},[49,85120,52723],{"class":73},[49,85122,83],{"class":66},[49,85124,85125,85127,85129,85131],{"class":51,"line":18033},[49,85126,56259],{"class":73},[49,85128,77],{"class":66},[49,85130,52823],{"class":73},[49,85132,83],{"class":66},[49,85134,85135,85138,85140,85142,85144,85146,85149],{"class":51,"line":18046},[49,85136,85137],{"class":73},"      border-top",[49,85139,77],{"class":66},[49,85141,159],{"class":73},[49,85143,110],{"class":109},[49,85145,113],{"class":73},[49,85147,85148],{"class":73}," #4e4e4e",[49,85150,83],{"class":66},[49,85152,85153,85155,85157,85159,85161],{"class":51,"line":18051},[49,85154,55936],{"class":73},[49,85156,77],{"class":66},[49,85158,875],{"class":73},[49,85160,110],{"class":109},[49,85162,83],{"class":66},[49,85164,85165],{"class":51,"line":18065},[49,85166,3441],{"class":66},[49,85168,85169],{"class":51,"line":18070},[49,85170,3654],{"emptyLinePlaceholder":1330},[49,85172,85173,85175,85178],{"class":51,"line":18076},[49,85174,73705],{"class":62},[49,85176,85177],{"class":62}," .amount",[49,85179,67],{"class":66},[49,85181,85182,85184,85186,85188,85190],{"class":51,"line":18081},[49,85183,56161],{"class":73},[49,85185,77],{"class":66},[49,85187,2041],{"class":73},[49,85189,110],{"class":109},[49,85191,83],{"class":66},[49,85193,85194,85196,85198,85200],{"class":51,"line":18095},[49,85195,58655],{"class":73},[49,85197,77],{"class":66},[49,85199,80167],{"class":73},[49,85201,83],{"class":66},[49,85203,85204,85206,85208,85210],{"class":51,"line":18100},[49,85205,63571],{"class":73},[49,85207,77],{"class":66},[49,85209,52735],{"class":73},[49,85211,83],{"class":66},[49,85213,85214,85216,85218,85220,85222],{"class":51,"line":18105},[49,85215,62988],{"class":73},[49,85217,77],{"class":66},[49,85219,2047],{"class":73},[49,85221,110],{"class":109},[49,85223,83],{"class":66},[49,85225,85226],{"class":51,"line":18119},[49,85227,3441],{"class":66},[49,85229,85230,85232,85234],{"class":51,"line":18131},[49,85231,53659],{"class":66},[49,85233,1305],{"class":147},[49,85235,52554],{"class":66},[49,85237,85238,85240,85242],{"class":51,"line":18136},[49,85239,53027],{"class":66},[49,85241,52581],{"class":147},[49,85243,52554],{"class":66},[49,85245,85246],{"class":51,"line":18149},[49,85247,3654],{"emptyLinePlaceholder":1330},[49,85249,85250,85252,85254],{"class":51,"line":18154},[49,85251,2300],{"class":66},[49,85253,53042],{"class":147},[49,85255,52554],{"class":66},[49,85257,85258,85260,85262,85264,85266,85268],{"class":51,"line":18159},[49,85259,53386],{"class":66},[49,85261,148],{"class":147},[49,85263,54728],{"class":62},[49,85265,1448],{"class":66},[49,85267,63844],{"class":1505},[49,85269,52554],{"class":66},[49,85271,85272,85274,85276],{"class":51,"line":18164},[49,85273,53659],{"class":66},[49,85275,148],{"class":147},[49,85277,52554],{"class":66},[49,85279,85280,85282,85284,85286,85288,85290],{"class":51,"line":18177},[49,85281,53386],{"class":66},[49,85283,148],{"class":147},[49,85285,54728],{"class":62},[49,85287,1448],{"class":66},[49,85289,63816],{"class":1505},[49,85291,52554],{"class":66},[49,85293,85294,85296,85298,85301,85303,85305,85307,85310,85312,85314,85316,85318],{"class":51,"line":18182},[49,85295,52588],{"class":66},[49,85297,148],{"class":147},[49,85299,85300],{"class":66},">合计：\u003C",[49,85302,49],{"class":147},[49,85304,54728],{"class":62},[49,85306,1448],{"class":66},[49,85308,85309],{"class":1505},"\"amount\"",[49,85311,56553],{"class":66},[49,85313,49],{"class":147},[49,85315,56553],{"class":66},[49,85317,148],{"class":147},[49,85319,52554],{"class":66},[49,85321,85322,85324,85326],{"class":51,"line":33881},[49,85323,53659],{"class":66},[49,85325,148],{"class":147},[49,85327,52554],{"class":66},[49,85329,85330,85332,85334],{"class":51,"line":33887},[49,85331,53386],{"class":66},[49,85333,53055],{"class":147},[49,85335,52554],{"class":66},[49,85337,85338,85340,85342,85344],{"class":51,"line":33893},[49,85339,12473],{"class":109},[49,85341,80604],{"class":73},[49,85343,14816],{"class":109},[49,85345,56686],{"class":66},[49,85347,85348],{"class":51,"line":33899},[49,85349,80613],{"class":66},[49,85351,85352,85354,85356],{"class":51,"line":33905},[49,85353,80618],{"class":66},[49,85355,80621],{"class":1505},[49,85357,32714],{"class":66},[49,85359,85360,85362,85364],{"class":51,"line":33916},[49,85361,80628],{"class":66},[49,85363,80631],{"class":1505},[49,85365,32714],{"class":66},[49,85367,85368,85370,85373],{"class":51,"line":33922},[49,85369,80638],{"class":66},[49,85371,85372],{"class":73},"289.9",[49,85374,32714],{"class":66},[49,85376,85377,85379,85381],{"class":51,"line":33942},[49,85378,80648],{"class":66},[49,85380,80651],{"class":1505},[49,85382,32714],{"class":66},[49,85384,85385,85388,85390],{"class":51,"line":33948},[49,85386,85387],{"class":66},"        count: ",[49,85389,1478],{"class":73},[49,85391,32714],{"class":66},[49,85393,85394,85397,85400],{"class":51,"line":33959},[49,85395,85396],{"class":66},"        spec: { color: ",[49,85398,85399],{"class":1505},"'白色'",[49,85401,56843],{"class":66},[49,85403,85404],{"class":51,"line":33965},[49,85405,79119],{"class":66},[49,85407,85408],{"class":51,"line":33971},[49,85409,80613],{"class":66},[49,85411,85412,85414,85416],{"class":51,"line":33977},[49,85413,80618],{"class":66},[49,85415,80712],{"class":1505},[49,85417,32714],{"class":66},[49,85419,85420,85422,85424],{"class":51,"line":33983},[49,85421,80628],{"class":66},[49,85423,80721],{"class":1505},[49,85425,32714],{"class":66},[49,85427,85428,85430,85433],{"class":51,"line":33989},[49,85429,80638],{"class":66},[49,85431,85432],{"class":73},"109.8",[49,85434,32714],{"class":66},[49,85436,85437,85439,85441],{"class":51,"line":33995},[49,85438,80648],{"class":66},[49,85440,80739],{"class":1505},[49,85442,32714],{"class":66},[49,85444,85445,85447,85449],{"class":51,"line":34001},[49,85446,85387],{"class":66},[49,85448,1472],{"class":73},[49,85450,32714],{"class":66},[49,85452,85453,85456,85458,85460,85462],{"class":51,"line":34021},[49,85454,85455],{"class":66},"        spec: { size: ",[49,85457,83129],{"class":1505},[49,85459,56703],{"class":66},[49,85461,83134],{"class":1505},[49,85463,56843],{"class":66},[49,85465,85466],{"class":51,"line":34027},[49,85467,79119],{"class":66},[49,85469,85470],{"class":51,"line":34043},[49,85471,80613],{"class":66},[49,85473,85474,85476,85478],{"class":51,"line":34049},[49,85475,80618],{"class":66},[49,85477,80756],{"class":1505},[49,85479,32714],{"class":66},[49,85481,85482,85484,85486],{"class":51,"line":34063},[49,85483,80628],{"class":66},[49,85485,80765],{"class":1505},[49,85487,32714],{"class":66},[49,85489,85490,85492,85495],{"class":51,"line":34069},[49,85491,80638],{"class":66},[49,85493,85494],{"class":73},"488",[49,85496,32714],{"class":66},[49,85498,85499,85501,85503],{"class":51,"line":34084},[49,85500,80648],{"class":66},[49,85502,80783],{"class":1505},[49,85504,32714],{"class":66},[49,85506,85507,85509,85511],{"class":51,"line":34090},[49,85508,85387],{"class":66},[49,85510,159],{"class":73},[49,85512,32714],{"class":66},[49,85514,85515,85517,85520,85523,85526],{"class":51,"line":34099},[49,85516,85396],{"class":66},[49,85518,85519],{"class":1505},"'青色'",[49,85521,85522],{"class":66},", sum: ",[49,85524,85525],{"class":1505},"'一大四小'",[49,85527,56843],{"class":66},[49,85529,85530],{"class":51,"line":34105},[49,85531,79119],{"class":66},[49,85533,85534],{"class":51,"line":34114},[49,85535,80613],{"class":66},[49,85537,85538,85540,85542],{"class":51,"line":34120},[49,85539,80618],{"class":66},[49,85541,80800],{"class":1505},[49,85543,32714],{"class":66},[49,85545,85546,85548,85550],{"class":51,"line":34126},[49,85547,80628],{"class":66},[49,85549,80809],{"class":1505},[49,85551,32714],{"class":66},[49,85553,85554,85556,85559],{"class":51,"line":34135},[49,85555,80638],{"class":66},[49,85557,85558],{"class":73},"139",[49,85560,32714],{"class":66},[49,85562,85563,85565,85567],{"class":51,"line":34141},[49,85564,80648],{"class":66},[49,85566,80827],{"class":1505},[49,85568,32714],{"class":66},[49,85570,85571,85573,85575],{"class":51,"line":34152},[49,85572,85387],{"class":66},[49,85574,159],{"class":73},[49,85576,32714],{"class":66},[49,85578,85579,85581,85584,85586,85589],{"class":51,"line":34158},[49,85580,85455],{"class":66},[49,85582,85583],{"class":1505},"'小号'",[49,85585,56703],{"class":66},[49,85587,85588],{"class":1505},"'紫色'",[49,85590,56709],{"class":66},[49,85592,85593,85596],{"class":51,"line":34177},[49,85594,85595],{"class":66},"        gift: ",[49,85597,85598],{"class":1505},"'50g茶叶,清洗球'\n",[49,85600,85601],{"class":51,"line":34183},[49,85602,53640],{"class":66},[49,85604,85605],{"class":51,"line":34194},[49,85606,54351],{"class":66},[49,85608,85609],{"class":51,"line":34200},[49,85610,85611],{"class":55},"    \u002F\u002F  1.根据数据渲染页面\n",[49,85613,85614,85616,85618,85620,85622,85624,85626,85628,85630,85632,85634,85636],{"class":51,"line":34220},[49,85615,53649],{"class":66},[49,85617,55640],{"class":62},[49,85619,1403],{"class":66},[49,85621,81127],{"class":1505},[49,85623,75478],{"class":66},[49,85625,1448],{"class":109},[49,85627,81274],{"class":66},[49,85629,75273],{"class":62},[49,85631,1403],{"class":66},[49,85633,81022],{"class":6468},[49,85635,81025],{"class":109},[49,85637,67],{"class":66},[49,85639,85640],{"class":51,"line":34236},[49,85641,85642],{"class":55},"      \u002F\u002F 对象解构\n",[49,85644,85645,85647,85649,85651,85653,85655,85657,85660,85662,85664,85666,85669,85671,85674,85676,85678],{"class":51,"line":34242},[49,85646,59467],{"class":109},[49,85648,203],{"class":66},[49,85650,81046],{"class":73},[49,85652,13687],{"class":66},[49,85654,81036],{"class":73},[49,85656,13687],{"class":66},[49,85658,85659],{"class":73},"count",[49,85661,13687],{"class":66},[49,85663,81041],{"class":73},[49,85665,13687],{"class":66},[49,85667,85668],{"class":73},"spec",[49,85670,13687],{"class":66},[49,85672,85673],{"class":73},"gift",[49,85675,81049],{"class":66},[49,85677,1448],{"class":109},[49,85679,81054],{"class":66},[49,85681,85682],{"class":51,"line":34256},[49,85683,85684],{"class":55},"      \u002F\u002F 规格文字模块处理\n",[49,85686,85687,85689,85692,85694,85696,85698,85700,85702,85704,85706],{"class":51,"line":34262},[49,85688,59467],{"class":109},[49,85690,85691],{"class":73}," text",[49,85693,14816],{"class":109},[49,85695,83164],{"class":66},[49,85697,83167],{"class":62},[49,85699,83170],{"class":66},[49,85701,75452],{"class":62},[49,85703,1403],{"class":66},[49,85705,83177],{"class":1505},[49,85707,1409],{"class":66},[49,85709,85710],{"class":51,"line":34268},[49,85711,85712],{"class":55},"      \u002F\u002F 处理赠品模块\n",[49,85714,85715,85717,85719,85721,85724,85726,85728,85730,85732,85735,85737,85739,85741,85743,85745,85748,85750,85753,85755,85757,85759,85761,85763,85765],{"class":51,"line":34279},[49,85716,59467],{"class":109},[49,85718,75148],{"class":73},[49,85720,14816],{"class":109},[49,85722,85723],{"class":66}," gift ",[49,85725,2375],{"class":109},[49,85727,84338],{"class":66},[49,85729,84341],{"class":62},[49,85731,1403],{"class":66},[49,85733,85734],{"class":1505},"','",[49,85736,32074],{"class":66},[49,85738,75273],{"class":62},[49,85740,1403],{"class":66},[49,85742,81022],{"class":6468},[49,85744,81025],{"class":109},[49,85746,85747],{"class":1505}," `\u003Cspan class=\"tag\">【赠品】${",[49,85749,81022],{"class":66},[49,85751,85752],{"class":1505},"}\u003C\u002Fspan>`",[49,85754,32074],{"class":66},[49,85756,75452],{"class":62},[49,85758,1403],{"class":66},[49,85760,75457],{"class":1505},[49,85762,14966],{"class":66},[49,85764,2249],{"class":109},[49,85766,71339],{"class":1505},[49,85768,85769],{"class":51,"line":34285},[49,85770,85771],{"class":55},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[49,85773,85774,85776,85779,85781,85784,85786,85788,85790,85793,85795,85797,85799,85802,85804,85806],{"class":51,"line":34291},[49,85775,59467],{"class":109},[49,85777,85778],{"class":73}," subtotal",[49,85780,14816],{"class":109},[49,85782,85783],{"class":66}," ((price ",[49,85785,1846],{"class":109},[49,85787,7006],{"class":73},[49,85789,7770],{"class":109},[49,85791,85792],{"class":66}," count) ",[49,85794,1975],{"class":109},[49,85796,7006],{"class":73},[49,85798,32074],{"class":66},[49,85800,85801],{"class":62},"toFixed",[49,85803,1403],{"class":66},[49,85805,1478],{"class":73},[49,85807,1409],{"class":66},[49,85809,85810],{"class":51,"line":34301},[49,85811,3654],{"emptyLinePlaceholder":1330},[49,85813,85814,85816],{"class":51,"line":34307},[49,85815,75211],{"class":109},[49,85817,71403],{"class":1505},[49,85819,85820],{"class":51,"line":34318},[49,85821,85822],{"class":1505},"        \u003Cdiv class=\"item\">\n",[49,85824,85825,85828,85830],{"class":51,"line":34324},[49,85826,85827],{"class":1505},"          \u003Cimg src=\"${",[49,85829,81046],{"class":66},[49,85831,81078],{"class":1505},[49,85833,85834,85837,85839,85842,85844],{"class":51,"line":34334},[49,85835,85836],{"class":1505},"          \u003Cp class=\"name\">${",[49,85838,81036],{"class":66},[49,85840,85841],{"class":1505},"}${",[49,85843,2557],{"class":66},[49,85845,81088],{"class":1505},[49,85847,85848,85851,85853],{"class":51,"line":34339},[49,85849,85850],{"class":1505},"          \u003Cp class=\"spec\">${",[49,85852,267],{"class":66},[49,85854,81088],{"class":1505},[49,85856,85857,85860,85862,85864,85866,85868,85870,85872],{"class":51,"line":34345},[49,85858,85859],{"class":1505},"          \u003Cp class=\"price\">${",[49,85861,81041],{"class":66},[49,85863,1949],{"class":1505},[49,85865,85801],{"class":62},[49,85867,1403],{"class":1505},[49,85869,1478],{"class":73},[49,85871,1821],{"class":1505},[49,85873,81088],{"class":1505},[49,85875,85876,85879,85881],{"class":51,"line":34394},[49,85877,85878],{"class":1505},"          \u003Cp class=\"count\">x${",[49,85880,85659],{"class":66},[49,85882,81088],{"class":1505},[49,85884,85885,85888,85891],{"class":51,"line":34441},[49,85886,85887],{"class":1505},"          \u003Cp class=\"sub-total\">${",[49,85889,85890],{"class":66},"subtotal",[49,85892,81088],{"class":1505},[49,85894,85895],{"class":51,"line":34446},[49,85896,85897],{"class":1505},"        \u003C\u002Fdiv> \n",[49,85899,85900],{"class":51,"line":34452},[49,85901,85902],{"class":1505},"             `\n",[49,85904,85905,85908,85910,85912,85914],{"class":51,"line":34471},[49,85906,85907],{"class":66},"    }).",[49,85909,75452],{"class":62},[49,85911,1403],{"class":66},[49,85913,75457],{"class":1505},[49,85915,1409],{"class":66},[49,85917,85918],{"class":51,"line":34477},[49,85919,85920],{"class":55},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[49,85922,85923,85925,85927,85929,85931,85934,85936,85939,85941,85943,85945,85948,85951,85953,85956,85958,85960,85962,85965,85967,85969,85971,85973],{"class":51,"line":34497},[49,85924,12473],{"class":109},[49,85926,64021],{"class":73},[49,85928,14816],{"class":109},[49,85930,81274],{"class":66},[49,85932,85933],{"class":62},"reduce",[49,85935,3630],{"class":66},[49,85937,85938],{"class":6468},"prev",[49,85940,13687],{"class":66},[49,85942,81022],{"class":6468},[49,85944,14966],{"class":66},[49,85946,85947],{"class":109},"=>",[49,85949,85950],{"class":66}," prev ",[49,85952,1872],{"class":109},[49,85954,85955],{"class":66}," (item.price ",[49,85957,1846],{"class":109},[49,85959,7006],{"class":73},[49,85961,7770],{"class":109},[49,85963,85964],{"class":66}," item.count) ",[49,85966,1975],{"class":109},[49,85968,7006],{"class":73},[49,85970,13687],{"class":66},[49,85972,80],{"class":73},[49,85974,1409],{"class":66},[49,85976,85977,85979,85981,85983,85986,85988,85990,85993,85995,85997,85999],{"class":51,"line":34503},[49,85978,53649],{"class":66},[49,85980,55640],{"class":62},[49,85982,1403],{"class":66},[49,85984,85985],{"class":1505},"'.amount'",[49,85987,75478],{"class":66},[49,85989,1448],{"class":109},[49,85991,85992],{"class":66}," total.",[49,85994,85801],{"class":62},[49,85996,1403],{"class":66},[49,85998,1478],{"class":73},[49,86000,1409],{"class":66},[49,86002,86003,86005,86007],{"class":51,"line":34509},[49,86004,53659],{"class":66},[49,86006,53055],{"class":147},[49,86008,52554],{"class":66},[49,86010,86011,86013,86015],{"class":51,"line":34519},[49,86012,53027],{"class":66},[49,86014,53042],{"class":147},[49,86016,52554],{"class":66},[49,86018,86019],{"class":51,"line":34524},[49,86020,3654],{"emptyLinePlaceholder":1330},[49,86022,86023,86025,86027],{"class":51,"line":34530},[49,86024,53027],{"class":66},[49,86026,51883],{"class":147},[49,86028,52554],{"class":66},[14,86030,86032],{"id":86031},"_411-编程思想","4.11 编程思想",[183,86034,86036],{"id":86035},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86038,86039,86042],{},[485,86040,86041],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86044,86045],{},"调用就可以了",[19,86047,86048],{},[174,86049],{"alt":44,"src":86050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[183,86052,86054],{"id":86053},"_4112-面向对象","4.11.2 面向对象",[19,86056,86057],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86059,86060],{},[174,86061],{"alt":44,"src":86062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86064,86065],{},"面向对象的特性：",[23,86067,86068,86071,86074],{},[26,86069,86070],{},"封装性",[26,86072,86073],{},"继承性",[26,86075,86076],{},"多态性",[183,86078,86080],{"id":86079},"_4113-两者比较","4.11.3 两者比较",[19,86082,86083],{},[174,86084],{"alt":44,"src":86085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86087,86089],{"id":86088},"_412-构造函数回顾","4.12 构造函数回顾",[19,86091,86092],{},[174,86093],{"alt":44,"src":86094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86096,86097],{},[174,86098],{"alt":44,"src":86099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86101,86102],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86104,86105],{},[174,86106],{"alt":44,"src":86107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86109,86111],{"id":86110},"_413-原型","4.13 原型",[183,86113,86115],{"id":86114},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86117,86118],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86120,86121],{},[174,86122],{"alt":44,"src":86123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86125,86126],{},[174,86127],{"alt":44,"src":86128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86130,86131],{},"原型是构造函数的属性，它也是一个对象",[19,86133,86134],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86136,86137],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[39,86139,86141],{"className":54309,"code":86140,"language":54311,"meta":44,"style":44},"\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",[46,86142,86143,86151,86156,86164,86169,86174,86179,86184,86189,86193,86197,86201,86206,86211,86215,86220,86225,86230,86235,86240,86244,86252],{"__ignoreMap":44},[49,86144,86145,86147,86149],{"class":51,"line":52},[49,86146,2300],{"class":66},[49,86148,53042],{"class":147},[49,86150,52554],{"class":66},[49,86152,86153],{"class":51,"line":59},[49,86154,86155],{"class":55},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[49,86157,86158,86160,86162],{"class":51,"line":70},[49,86159,53386],{"class":66},[49,86161,53055],{"class":147},[49,86163,52554],{"class":66},[49,86165,86166],{"class":51,"line":86},[49,86167,86168],{"class":66},"    function Star(uname, age) {\n",[49,86170,86171],{"class":51,"line":98},[49,86172,86173],{"class":66},"      this.uname = uname,\n",[49,86175,86176],{"class":51,"line":121},[49,86177,86178],{"class":66},"        this.age = age\n",[49,86180,86181],{"class":51,"line":134},[49,86182,86183],{"class":66},"      \u002F\u002F this.sing = function () {\n",[49,86185,86186],{"class":51,"line":1085},[49,86187,86188],{"class":66},"      \u002F\u002F   console.log('唱歌')\n",[49,86190,86191],{"class":51,"line":2574},[49,86192,3654],{"emptyLinePlaceholder":1330},[49,86194,86195],{"class":51,"line":2586},[49,86196,61276],{"class":66},[49,86198,86199],{"class":51,"line":2867},[49,86200,3441],{"class":66},[49,86202,86203],{"class":51,"line":2872},[49,86204,86205],{"class":66},"    Star.prototype.sing = function () {\n",[49,86207,86208],{"class":51,"line":2878},[49,86209,86210],{"class":66},"      console.log('唱歌')\n",[49,86212,86213],{"class":51,"line":2883},[49,86214,3441],{"class":66},[49,86216,86217],{"class":51,"line":2897},[49,86218,86219],{"class":66},"    \u002F\u002F console.dir(Star.prototype)\n",[49,86221,86222],{"class":51,"line":2902},[49,86223,86224],{"class":66},"    const pink = new Star('pink', 18)\n",[49,86226,86227],{"class":51,"line":2908},[49,86228,86229],{"class":66},"    const red = new Star('red', 20)\n",[49,86231,86232],{"class":51,"line":2929},[49,86233,86234],{"class":66},"    pink.sing()\n",[49,86236,86237],{"class":51,"line":2934},[49,86238,86239],{"class":66},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[49,86241,86242],{"class":51,"line":2948},[49,86243,3654],{"emptyLinePlaceholder":1330},[49,86245,86246,86248,86250],{"class":51,"line":2953},[49,86247,53659],{"class":66},[49,86249,53055],{"class":147},[49,86251,52554],{"class":66},[49,86253,86254,86256,86258],{"class":51,"line":2982},[49,86255,53027],{"class":66},[49,86257,53042],{"class":147},[49,86259,52554],{"class":66},[19,86261,86262],{},[174,86263],{"alt":44,"src":86264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[39,86266,86268],{"className":54309,"code":86267,"language":54311,"meta":44,"style":44},"\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",[46,86269,86270,86278,86286,86291,86296,86301,86306,86310,86315,86320,86325,86329,86334,86338,86342,86347,86351,86359],{"__ignoreMap":44},[49,86271,86272,86274,86276],{"class":51,"line":52},[49,86273,2300],{"class":66},[49,86275,53042],{"class":147},[49,86277,52554],{"class":66},[49,86279,86280,86282,86284],{"class":51,"line":59},[49,86281,53386],{"class":66},[49,86283,53055],{"class":147},[49,86285,52554],{"class":66},[49,86287,86288],{"class":51,"line":70},[49,86289,86290],{"class":66},"    let that\n",[49,86292,86293],{"class":51,"line":86},[49,86294,86295],{"class":66},"    function Star(uname) {\n",[49,86297,86298],{"class":51,"line":98},[49,86299,86300],{"class":66},"      this.uname = uname\n",[49,86302,86303],{"class":51,"line":121},[49,86304,86305],{"class":66},"      that = this\n",[49,86307,86308],{"class":51,"line":134},[49,86309,3441],{"class":66},[49,86311,86312],{"class":51,"line":1085},[49,86313,86314],{"class":66},"    \u002F\u002F 实例对象是 ldh\n",[49,86316,86317],{"class":51,"line":2574},[49,86318,86319],{"class":66},"    const ldh = new Star('刘德华')\n",[49,86321,86322],{"class":51,"line":2586},[49,86323,86324],{"class":66},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[49,86326,86327],{"class":51,"line":2867},[49,86328,3654],{"emptyLinePlaceholder":1330},[49,86330,86331],{"class":51,"line":2872},[49,86332,86333],{"class":66},"    Star.sing = function () {\n",[49,86335,86336],{"class":51,"line":2878},[49,86337,86210],{"class":66},[49,86339,86340],{"class":51,"line":2883},[49,86341,3441],{"class":66},[49,86343,86344],{"class":51,"line":2897},[49,86345,86346],{"class":66},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[49,86348,86349],{"class":51,"line":2902},[49,86350,3654],{"emptyLinePlaceholder":1330},[49,86352,86353,86355,86357],{"class":51,"line":2908},[49,86354,53659],{"class":66},[49,86356,53055],{"class":147},[49,86358,52554],{"class":66},[49,86360,86361,86363,86365],{"class":51,"line":2929},[49,86362,53027],{"class":66},[49,86364,53042],{"class":147},[49,86366,52554],{"class":66},[19,86368,86369],{},"构造函数的this指向的是实例对象；",[19,86371,86372],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[183,86374,86376],{"id":86375},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86378,86379],{},[174,86380],{"alt":44,"src":86381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[39,86383,86385],{"className":54309,"code":86384,"language":54311,"meta":44,"style":44},"\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",[46,86386,86387,86395,86403,86408,86413,86418,86423,86428,86433,86438,86443,86448,86453,86457,86462,86467,86472,86477,86481,86486,86491,86496,86501,86505,86510,86515,86520,86525,86529,86534,86538,86546],{"__ignoreMap":44},[49,86388,86389,86391,86393],{"class":51,"line":52},[49,86390,2300],{"class":66},[49,86392,53042],{"class":147},[49,86394,52554],{"class":66},[49,86396,86397,86399,86401],{"class":51,"line":59},[49,86398,53386],{"class":66},[49,86400,53055],{"class":147},[49,86402,52554],{"class":66},[49,86404,86405],{"class":51,"line":70},[49,86406,86407],{"class":66},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[49,86409,86410],{"class":51,"line":86},[49,86411,86412],{"class":66},"    const arr = [1, 2, 3]\n",[49,86414,86415],{"class":51,"line":98},[49,86416,86417],{"class":66},"    \u002F\u002F 自己定义数组的扩展方法\n",[49,86419,86420],{"class":51,"line":121},[49,86421,86422],{"class":66},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[49,86424,86425],{"class":51,"line":134},[49,86426,86427],{"class":66},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[49,86429,86430],{"class":51,"line":1085},[49,86431,86432],{"class":66},"    \u002F\u002F ①.最大值\n",[49,86434,86435],{"class":51,"line":2574},[49,86436,86437],{"class":66},"    Array.prototype.max = function () {\n",[49,86439,86440],{"class":51,"line":2586},[49,86441,86442],{"class":66},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[49,86444,86445],{"class":51,"line":2867},[49,86446,86447],{"class":66},"      return Math.max(...this)\n",[49,86449,86450],{"class":51,"line":2872},[49,86451,86452],{"class":66},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[49,86454,86455],{"class":51,"line":2878},[49,86456,3441],{"class":66},[49,86458,86459],{"class":51,"line":2883},[49,86460,86461],{"class":66},"    console.log(arr.max())\n",[49,86463,86464],{"class":51,"line":2897},[49,86465,86466],{"class":66},"    \u002F\u002F ②最小值\n",[49,86468,86469],{"class":51,"line":2902},[49,86470,86471],{"class":66},"    Array.prototype.min = function () {\n",[49,86473,86474],{"class":51,"line":2908},[49,86475,86476],{"class":66},"      return Math.min(...this)\n",[49,86478,86479],{"class":51,"line":2929},[49,86480,3441],{"class":66},[49,86482,86483],{"class":51,"line":2934},[49,86484,86485],{"class":66},"    console.log(arr.min())\n",[49,86487,86488],{"class":51,"line":2948},[49,86489,86490],{"class":66},"    \u002F\u002F③求和\n",[49,86492,86493],{"class":51,"line":2953},[49,86494,86495],{"class":66},"    Array.prototype.sum = function () {\n",[49,86497,86498],{"class":51,"line":2982},[49,86499,86500],{"class":66},"      return this.reduce((prev, current) => prev + current, 0)\n",[49,86502,86503],{"class":51,"line":2987},[49,86504,3441],{"class":66},[49,86506,86507],{"class":51,"line":3004},[49,86508,86509],{"class":66},"    console.log(arr.sum())\n",[49,86511,86512],{"class":51,"line":3009},[49,86513,86514],{"class":66},"    \u002F\u002F ③排序\n",[49,86516,86517],{"class":51,"line":3014},[49,86518,86519],{"class":66},"    Array.prototype.rever = function () {\n",[49,86521,86522],{"class":51,"line":3019},[49,86523,86524],{"class":66},"      return this.reverse()\n",[49,86526,86527],{"class":51,"line":3033},[49,86528,3441],{"class":66},[49,86530,86531],{"class":51,"line":3038},[49,86532,86533],{"class":66},"    console.log(arr.rever())\n",[49,86535,86536],{"class":51,"line":3831},[49,86537,3654],{"emptyLinePlaceholder":1330},[49,86539,86540,86542,86544],{"class":51,"line":3845},[49,86541,53659],{"class":66},[49,86543,53055],{"class":147},[49,86545,52554],{"class":66},[49,86547,86548,86550,86552],{"class":51,"line":3853},[49,86549,53027],{"class":66},[49,86551,53042],{"class":147},[49,86553,52554],{"class":66},[19,86555,86556],{},[174,86557],{"alt":44,"src":86558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[183,86560,86562],{"id":86561},"_4133-constructor-属性","4.13.3 constructor 属性",[19,86564,86565],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,86567,86568],{},[174,86569],{"alt":44,"src":86570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[39,86572,86574],{"className":54309,"code":86573,"language":54311,"meta":44,"style":44},"\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",[46,86575,86576,86584,86592,86597,86602,86606,86611,86616,86621,86629],{"__ignoreMap":44},[49,86577,86578,86580,86582],{"class":51,"line":52},[49,86579,2300],{"class":66},[49,86581,53042],{"class":147},[49,86583,52554],{"class":66},[49,86585,86586,86588,86590],{"class":51,"line":59},[49,86587,53386],{"class":66},[49,86589,53055],{"class":147},[49,86591,52554],{"class":66},[49,86593,86594],{"class":51,"line":70},[49,86595,86596],{"class":66},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[49,86598,86599],{"class":51,"line":86},[49,86600,86601],{"class":66},"    function Star() {\n",[49,86603,86604],{"class":51,"line":98},[49,86605,3441],{"class":66},[49,86607,86608],{"class":51,"line":121},[49,86609,86610],{"class":66},"    const ldh = new Star()\n",[49,86612,86613],{"class":51,"line":134},[49,86614,86615],{"class":66},"    console.log(Star.prototype)\n",[49,86617,86618],{"class":51,"line":1085},[49,86619,86620],{"class":66},"    console.log(Star.prototype.constructor === Star)\n",[49,86622,86623,86625,86627],{"class":51,"line":2574},[49,86624,53659],{"class":66},[49,86626,53055],{"class":147},[49,86628,52554],{"class":66},[49,86630,86631,86633,86635],{"class":51,"line":2586},[49,86632,53027],{"class":66},[49,86634,53042],{"class":147},[49,86636,52554],{"class":66},[19,86638,86639],{},[174,86640],{"alt":44,"src":86641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,86643,86644],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[39,86646,86648],{"className":54309,"code":86647,"language":54311,"meta":44,"style":44},"  \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",[46,86649,86650,86658,86662,86666,86670,86675,86680,86685,86689,86694,86699,86704,86709,86714,86719,86723,86727,86732,86737,86742,86746,86751,86756,86760,86764,86768],{"__ignoreMap":44},[49,86651,86652,86654,86656],{"class":51,"line":52},[49,86653,53386],{"class":66},[49,86655,53055],{"class":147},[49,86657,52554],{"class":66},[49,86659,86660],{"class":51,"line":59},[49,86661,86596],{"class":66},[49,86663,86664],{"class":51,"line":70},[49,86665,86601],{"class":66},[49,86667,86668],{"class":51,"line":86},[49,86669,3441],{"class":66},[49,86671,86672],{"class":51,"line":98},[49,86673,86674],{"class":66},"    \u002F\u002F const ldh = new Star()\n",[49,86676,86677],{"class":51,"line":121},[49,86678,86679],{"class":66},"    \u002F\u002F console.log(Star.prototype)\n",[49,86681,86682],{"class":51,"line":134},[49,86683,86684],{"class":66},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[49,86686,86687],{"class":51,"line":1085},[49,86688,3654],{"emptyLinePlaceholder":1330},[49,86690,86691],{"class":51,"line":2574},[49,86692,86693],{"class":66},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[49,86695,86696],{"class":51,"line":2586},[49,86697,86698],{"class":66},"    \u002F\u002F Star.prototype.sing = function () {\n",[49,86700,86701],{"class":51,"line":2867},[49,86702,86703],{"class":66},"    \u002F\u002F   console.log('唱歌')\n",[49,86705,86706],{"class":51,"line":2872},[49,86707,86708],{"class":66},"    \u002F\u002F }\n",[49,86710,86711],{"class":51,"line":2878},[49,86712,86713],{"class":66},"    \u002F\u002F Star.prototype.dance = function () {\n",[49,86715,86716],{"class":51,"line":2883},[49,86717,86718],{"class":66},"    \u002F\u002F   console.log('跳舞')\n",[49,86720,86721],{"class":51,"line":2897},[49,86722,86708],{"class":66},[49,86724,86725],{"class":51,"line":2902},[49,86726,86615],{"class":66},[49,86728,86729],{"class":51,"line":2908},[49,86730,86731],{"class":66},"    Star.prototype = {\n",[49,86733,86734],{"class":51,"line":2929},[49,86735,86736],{"class":66},"      sing: function () {\n",[49,86738,86739],{"class":51,"line":2934},[49,86740,86741],{"class":66},"        console.log('唱歌')\n",[49,86743,86744],{"class":51,"line":2948},[49,86745,79119],{"class":66},[49,86747,86748],{"class":51,"line":2953},[49,86749,86750],{"class":66},"      dance: function () {\n",[49,86752,86753],{"class":51,"line":2982},[49,86754,86755],{"class":66},"        console.log('跳舞')\n",[49,86757,86758],{"class":51,"line":2987},[49,86759,53640],{"class":66},[49,86761,86762],{"class":51,"line":3004},[49,86763,3441],{"class":66},[49,86765,86766],{"class":51,"line":3009},[49,86767,86615],{"class":66},[49,86769,86770,86772,86774],{"class":51,"line":3014},[49,86771,53659],{"class":66},[49,86773,53055],{"class":147},[49,86775,52554],{"class":66},[19,86777,86778],{},"进行输出结果后会发现：",[19,86780,86781],{},[174,86782],{"alt":44,"src":86783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86785,86786],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86788,86789],{},"所以，要重新指回创造这个原型对象的构造函数",[39,86791,86793],{"className":72443,"code":86792,"language":72445,"meta":44,"style":44},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[46,86794,86795,86809,86814,86819,86830,86843,86848,86859,86873,86877],{"__ignoreMap":44},[49,86796,86797,86800,86802,86805,86807],{"class":51,"line":52},[49,86798,86799],{"class":73},"Star",[49,86801,1949],{"class":66},[49,86803,86804],{"class":73},"prototype",[49,86806,14816],{"class":109},[49,86808,67],{"class":66},[49,86810,86811],{"class":51,"line":59},[49,86812,86813],{"class":55},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[49,86815,86816],{"class":51,"line":70},[49,86817,86818],{"class":66},"  constructor: Star,\n",[49,86820,86821,86824,86826,86828],{"class":51,"line":86},[49,86822,86823],{"class":62},"  sing",[49,86825,77],{"class":66},[49,86827,55690],{"class":109},[49,86829,55693],{"class":66},[49,86831,86832,86834,86836,86838,86841],{"class":51,"line":98},[49,86833,74982],{"class":66},[49,86835,59486],{"class":62},[49,86837,1403],{"class":66},[49,86839,86840],{"class":1505},"'唱歌'",[49,86842,1409],{"class":66},[49,86844,86845],{"class":51,"line":121},[49,86846,86847],{"class":66},"   },\n",[49,86849,86850,86853,86855,86857],{"class":51,"line":134},[49,86851,86852],{"class":62},"   dance",[49,86854,77],{"class":66},[49,86856,55690],{"class":109},[49,86858,55693],{"class":66},[49,86860,86861,86864,86866,86868,86871],{"class":51,"line":1085},[49,86862,86863],{"class":66},"     console.",[49,86865,59486],{"class":62},[49,86867,1403],{"class":66},[49,86869,86870],{"class":1505},"'跳舞'",[49,86872,1409],{"class":66},[49,86874,86875],{"class":51,"line":2574},[49,86876,5563],{"class":66},[49,86878,86879],{"class":51,"line":2586},[49,86880,137],{"class":66},[19,86882,86883],{},[174,86884],{"alt":44,"src":86885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86887,86888],{},"总结1：",[19,86890,86891],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86893,86894],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,86896,86897],{},"constructor指的是他的来源",[19,86899,86900],{},[174,86901],{"alt":44,"src":86902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,86904,86905],{},[174,86906],{"alt":44,"src":86907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,86909,86910],{},"总结2：",[19,86912,86913],{},[174,86914],{"alt":44,"src":86915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,86917,86918],{},[174,86919],{"alt":44,"src":86920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,86922,86923],{},[174,86924],{"alt":44,"src":86925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[183,86927,86929],{"id":86928},"_4134-对象原型","4.13.4 对象原型",[19,86931,86932],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,86934,86935],{},"对象原型就是__proto__这个属性",[19,86937,86938],{},[174,86939],{"alt":44,"src":86940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,86942,86943],{},[174,86944],{"alt":44,"src":86945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,86947,86948],{},[174,86949],{"alt":44,"src":86950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,86952,86953],{},[174,86954],{"alt":44,"src":86955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[39,86957,86959],{"className":54309,"code":86958,"language":54311,"meta":44,"style":44},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[46,86960,86961,86969,86977,86981,86985,86989,86994,87002],{"__ignoreMap":44},[49,86962,86963,86965,86967],{"class":51,"line":52},[49,86964,2300],{"class":66},[49,86966,53042],{"class":147},[49,86968,52554],{"class":66},[49,86970,86971,86973,86975],{"class":51,"line":59},[49,86972,53386],{"class":66},[49,86974,53055],{"class":147},[49,86976,52554],{"class":66},[49,86978,86979],{"class":51,"line":70},[49,86980,86601],{"class":66},[49,86982,86983],{"class":51,"line":86},[49,86984,3441],{"class":66},[49,86986,86987],{"class":51,"line":98},[49,86988,86610],{"class":66},[49,86990,86991],{"class":51,"line":121},[49,86992,86993],{"class":66},"    console.log(ldh)\n",[49,86995,86996,86998,87000],{"class":51,"line":134},[49,86997,53659],{"class":66},[49,86999,53055],{"class":147},[49,87001,52554],{"class":66},[49,87003,87004,87006,87008],{"class":51,"line":1085},[49,87005,53027],{"class":66},[49,87007,53042],{"class":147},[49,87009,52554],{"class":66},[19,87011,87012],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87014,87015],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87017,87018],{},[174,87019],{"alt":44,"src":87020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87022,87023],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87025,87026],{},"对象原型指向原型对象",[19,87028,87029],{},[174,87030],{"alt":44,"src":87031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87033,87034],{},[174,87035],{"alt":44,"src":87036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87038,87039],{},[174,87040],{"alt":44,"src":87041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[183,87043,87045],{"id":87044},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87047,87048],{},[174,87049],{"alt":44,"src":87050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[591,87052,87053,87056,87059,87062],{},[26,87054,87055],{},"构造函数通过new的形式实例化得到实例对象",[26,87057,87058],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[26,87060,87061],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[26,87063,87064],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87066,87067],{},[174,87068],{"alt":44,"src":87069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87071,87072],{},"题目梳理：",[19,87074,87075],{},[174,87076],{"alt":44,"src":87077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[183,87079,87081],{"id":87080},"_4136-原型继承","4.13.6 原型继承",[19,87083,87084],{},[174,87085],{"alt":44,"src":87086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87088,87089],{},[174,87090],{"alt":44,"src":87091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87093,87094],{},[174,87095],{"alt":44,"src":87096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87098,87099],{},[174,87100],{"alt":44,"src":87101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87103,87104],{},[174,87105],{"alt":44,"src":87106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87108,87109],{},[174,87110],{"alt":44,"src":87111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87113,87114],{},[174,87115],{"alt":44,"src":87116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87118,87119],{},[174,87120],{"alt":44,"src":87121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87123,87124],{},"回顾：构造函数每次new得到对象都是不同的",[183,87126,87128],{"id":87127},"_4137-原型链","4.13.7 原型链",[19,87130,87131],{},[174,87132],{"alt":44,"src":87133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87135,87136],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87138,87139],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87141,87142],{},"大哥是Object",[19,87144,87145],{},[174,87146],{"alt":44,"src":87147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87149,87150],{},[174,87151],{"alt":44,"src":87152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87154,87155],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87157,87158],{},"万物皆对象",[183,87160,87162],{"id":87161},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87164,87165],{},"模态框",[19,87167,87168],{},"以后遇见这个效果直接使用这个就行",[19,87170,87171],{},[174,87172],{"alt":44,"src":87173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87175,87176],{},[174,87177],{"alt":44,"src":87178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87180,87181],{},[174,87182],{"alt":44,"src":87183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87185,87186],{},[174,87187],{"alt":44,"src":87188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87190,87191],{},"补充知识点：",[591,87193,87194],{},[26,87195,87196],{},"append()",[19,87198,87199],{},[174,87200],{"alt":44,"src":87201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[39,87203,87205],{"className":51881,"code":87204,"language":51883,"meta":44,"style":44},"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",[46,87206,87207,87212,87217,87222,87226,87230,87234,87239,87244,87249,87253],{"__ignoreMap":44},[49,87208,87209],{"class":51,"line":52},[49,87210,87211],{"class":66},"append(param1)\n",[49,87213,87214],{"class":51,"line":59},[49,87215,87216],{"class":66},"append(param1, param2)\n",[49,87218,87219],{"class":51,"line":70},[49,87220,87221],{"class":66},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[49,87223,87224],{"class":51,"line":86},[49,87225,3654],{"emptyLinePlaceholder":1330},[49,87227,87228],{"class":51,"line":98},[49,87229,3654],{"emptyLinePlaceholder":1330},[49,87231,87232],{"class":51,"line":121},[49,87233,3654],{"emptyLinePlaceholder":1330},[49,87235,87236],{"class":51,"line":134},[49,87237,87238],{"class":66},"let div = document.createElement(\"div\");\n",[49,87240,87241],{"class":51,"line":1085},[49,87242,87243],{"class":66},"let p = document.createElement(\"p\");\n",[49,87245,87246],{"class":51,"line":2574},[49,87247,87248],{"class":66},"div.append(p);\n",[49,87250,87251],{"class":51,"line":2586},[49,87252,3654],{"emptyLinePlaceholder":1330},[49,87254,87255,87258,87260],{"class":51,"line":2867},[49,87256,87257],{"class":66},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[49,87259,19],{"class":147},[49,87261,87262],{"class":66},"> ]\n",[591,87264,87265],{"start":59},[26,87266,87267],{},"remove()",[19,87269,87270],{},"自己删自己",[19,87272,87273],{},[174,87274],{"alt":44,"src":87275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[39,87277,87279],{"className":51881,"code":87278,"language":51883,"meta":44,"style":44},"\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",[46,87280,87281,87291,87305,87309,87317,87331,87351,87363,87371,87378,87390,87403,87438,87450,87461,87473,87485,87497,87524,87534,87538,87542,87551,87563,87577,87587,87599,87603,87607,87617,87628,87638,87648,87661,87674,87684,87688,87692,87701,87711,87723,87727,87731,87740,87750,87760,87772,87776,87780,87790,87806,87817,87827,87837,87849,87861,87873,87877,87881,87894,87905,87909,87917,87925,87929,87937,87957,87977,87985,87990,88016,88021,88026,88045,88050,88062,88067,88078,88088,88098,88103,88108,88112,88117,88122,88127,88147,88152,88172,88177,88191,88196,88201,88206,88222,88226,88231,88260,88265,88270,88275,88286,88290,88294,88298,88303,88328,88333,88358,88363,88372,88376,88381,88406,88410,88435,88439,88448,88452,88457,88475,88485,88489,88497,88505,88509],{"__ignoreMap":44},[49,87282,87283,87285,87287,87289],{"class":51,"line":52},[49,87284,52545],{"class":66},[49,87286,52548],{"class":147},[49,87288,52551],{"class":62},[49,87290,52554],{"class":66},[49,87292,87293,87295,87297,87299,87301,87303],{"class":51,"line":59},[49,87294,2300],{"class":66},[49,87296,51883],{"class":147},[49,87298,52563],{"class":62},[49,87300,1448],{"class":66},[49,87302,52568],{"class":1505},[49,87304,52554],{"class":66},[49,87306,87307],{"class":51,"line":70},[49,87308,3654],{"emptyLinePlaceholder":1330},[49,87310,87311,87313,87315],{"class":51,"line":86},[49,87312,2300],{"class":66},[49,87314,52581],{"class":147},[49,87316,52554],{"class":66},[49,87318,87319,87321,87323,87325,87327,87329],{"class":51,"line":98},[49,87320,53386],{"class":66},[49,87322,52591],{"class":147},[49,87324,52594],{"class":62},[49,87326,1448],{"class":66},[49,87328,52599],{"class":1505},[49,87330,52554],{"class":66},[49,87332,87333,87335,87337,87339,87341,87343,87345,87347,87349],{"class":51,"line":121},[49,87334,53386],{"class":66},[49,87336,52591],{"class":147},[49,87338,16171],{"class":62},[49,87340,1448],{"class":66},[49,87342,52638],{"class":1505},[49,87344,52618],{"class":62},[49,87346,1448],{"class":66},[49,87348,52645],{"class":1505},[49,87350,52554],{"class":66},[49,87352,87353,87355,87357,87359,87361],{"class":51,"line":134},[49,87354,53386],{"class":66},[49,87356,52654],{"class":147},[49,87358,52657],{"class":66},[49,87360,52654],{"class":147},[49,87362,52554],{"class":66},[49,87364,87365,87367,87369],{"class":51,"line":1085},[49,87366,53386],{"class":66},[49,87368,1305],{"class":147},[49,87370,52554],{"class":66},[49,87372,87373,87376],{"class":51,"line":2574},[49,87374,87375],{"class":62},"    .modal",[49,87377,67],{"class":66},[49,87379,87380,87382,87384,87386,87388],{"class":51,"line":2586},[49,87381,56010],{"class":73},[49,87383,77],{"class":66},[49,87385,5227],{"class":73},[49,87387,110],{"class":109},[49,87389,83],{"class":66},[49,87391,87392,87395,87397,87399,87401],{"class":51,"line":2867},[49,87393,87394],{"class":73},"      min-height",[49,87396,77],{"class":66},[49,87398,1703],{"class":73},[49,87400,110],{"class":109},[49,87402,83],{"class":66},[49,87404,87405,87407,87409,87411,87413,87415,87417,87419,87421,87423,87425,87427,87429,87431,87433,87436],{"class":51,"line":2872},[49,87406,79977],{"class":73},[49,87408,77],{"class":66},[49,87410,80],{"class":73},[49,87412,5347],{"class":73},[49,87414,3292],{"class":73},[49,87416,110],{"class":109},[49,87418,79994],{"class":73},[49,87420,1403],{"class":66},[49,87422,80],{"class":73},[49,87424,13687],{"class":66},[49,87426,80],{"class":73},[49,87428,13687],{"class":66},[49,87430,80],{"class":73},[49,87432,13687],{"class":66},[49,87434,87435],{"class":73},"0.1",[49,87437,3973],{"class":66},[49,87439,87440,87442,87444,87446,87448],{"class":51,"line":2878},[49,87441,56373],{"class":73},[49,87443,77],{"class":66},[49,87445,1685],{"class":73},[49,87447,110],{"class":109},[49,87449,83],{"class":66},[49,87451,87452,87454,87456,87459],{"class":51,"line":2883},[49,87453,55999],{"class":73},[49,87455,77],{"class":66},[49,87457,87458],{"class":73},"fixed",[49,87460,83],{"class":66},[49,87462,87463,87466,87468,87471],{"class":51,"line":2897},[49,87464,87465],{"class":73},"      z-index",[49,87467,77],{"class":66},[49,87469,87470],{"class":73},"999",[49,87472,83],{"class":66},[49,87474,87475,87477,87479,87481,87483],{"class":51,"line":2902},[49,87476,56077],{"class":73},[49,87478,77],{"class":66},[49,87480,2047],{"class":73},[49,87482,1720],{"class":109},[49,87484,83],{"class":66},[49,87486,87487,87489,87491,87493,87495],{"class":51,"line":2908},[49,87488,56186],{"class":73},[49,87490,77],{"class":66},[49,87492,2047],{"class":73},[49,87494,1720],{"class":109},[49,87496,83],{"class":66},[49,87498,87499,87501,87503,87505,87507,87510,87512,87514,87516,87518,87520,87522],{"class":51,"line":2929},[49,87500,80018],{"class":73},[49,87502,77],{"class":66},[49,87504,80023],{"class":73},[49,87506,1403],{"class":66},[49,87508,87509],{"class":73},"-50",[49,87511,1720],{"class":109},[49,87513,13687],{"class":66},[49,87515,87509],{"class":73},[49,87517,1720],{"class":109},[49,87519,13687],{"class":66},[49,87521,80],{"class":73},[49,87523,3973],{"class":66},[49,87525,87526,87528,87530,87532],{"class":51,"line":2934},[49,87527,56123],{"class":73},[49,87529,77],{"class":66},[49,87531,62081],{"class":73},[49,87533,83],{"class":66},[49,87535,87536],{"class":51,"line":2948},[49,87537,3441],{"class":66},[49,87539,87540],{"class":51,"line":2953},[49,87541,3654],{"emptyLinePlaceholder":1330},[49,87543,87544,87546,87549],{"class":51,"line":2982},[49,87545,87375],{"class":62},[49,87547,87548],{"class":62}," .header",[49,87550,67],{"class":66},[49,87552,87553,87555,87557,87559,87561],{"class":51,"line":2987},[49,87554,58598],{"class":73},[49,87556,77],{"class":66},[49,87558,1793],{"class":73},[49,87560,110],{"class":109},[49,87562,83],{"class":66},[49,87564,87565,87567,87569,87571,87573,87575],{"class":51,"line":3004},[49,87566,55936],{"class":73},[49,87568,77],{"class":66},[49,87570,80],{"class":73},[49,87572,3292],{"class":73},[49,87574,110],{"class":109},[49,87576,83],{"class":66},[49,87578,87579,87581,87583,87585],{"class":51,"line":3009},[49,87580,55999],{"class":73},[49,87582,77],{"class":66},[49,87584,850],{"class":73},[49,87586,83],{"class":66},[49,87588,87589,87591,87593,87595,87597],{"class":51,"line":3014},[49,87590,56161],{"class":73},[49,87592,77],{"class":66},[49,87594,875],{"class":73},[49,87596,110],{"class":109},[49,87598,83],{"class":66},[49,87600,87601],{"class":51,"line":3019},[49,87602,3441],{"class":66},[49,87604,87605],{"class":51,"line":3033},[49,87606,3654],{"emptyLinePlaceholder":1330},[49,87608,87609,87611,87613,87615],{"class":51,"line":3038},[49,87610,87375],{"class":62},[49,87612,87548],{"class":62},[49,87614,4286],{"class":147},[49,87616,67],{"class":66},[49,87618,87619,87622,87624,87626],{"class":51,"line":3831},[49,87620,87621],{"class":73},"      font-style",[49,87623,77],{"class":66},[49,87625,65077],{"class":73},[49,87627,83],{"class":66},[49,87629,87630,87632,87634,87636],{"class":51,"line":3845},[49,87631,58655],{"class":73},[49,87633,77],{"class":66},[49,87635,63307],{"class":73},[49,87637,83],{"class":66},[49,87639,87640,87642,87644,87646],{"class":51,"line":3853},[49,87641,55999],{"class":73},[49,87643,77],{"class":66},[49,87645,56070],{"class":73},[49,87647,83],{"class":66},[49,87649,87650,87653,87655,87657,87659],{"class":51,"line":3858},[49,87651,87652],{"class":73},"      right",[49,87654,77],{"class":66},[49,87656,1966],{"class":73},[49,87658,110],{"class":109},[49,87660,83],{"class":66},[49,87662,87663,87665,87667,87670,87672],{"class":51,"line":3864},[49,87664,56186],{"class":73},[49,87666,77],{"class":66},[49,87668,87669],{"class":73},"-2",[49,87671,110],{"class":109},[49,87673,83],{"class":66},[49,87675,87676,87678,87680,87682],{"class":51,"line":3870},[49,87677,63263],{"class":73},[49,87679,77],{"class":66},[49,87681,211],{"class":73},[49,87683,83],{"class":66},[49,87685,87686],{"class":51,"line":3875},[49,87687,3441],{"class":66},[49,87689,87690],{"class":51,"line":9200},[49,87691,3654],{"emptyLinePlaceholder":1330},[49,87693,87694,87696,87699],{"class":51,"line":9224},[49,87695,87375],{"class":62},[49,87697,87698],{"class":62}," .body",[49,87700,67],{"class":66},[49,87702,87703,87705,87707,87709],{"class":51,"line":9229},[49,87704,58525],{"class":73},[49,87706,77],{"class":66},[49,87708,52835],{"class":73},[49,87710,83],{"class":66},[49,87712,87713,87715,87717,87719,87721],{"class":51,"line":9235},[49,87714,55936],{"class":73},[49,87716,77],{"class":66},[49,87718,106],{"class":73},[49,87720,110],{"class":109},[49,87722,83],{"class":66},[49,87724,87725],{"class":51,"line":9262},[49,87726,3441],{"class":66},[49,87728,87729],{"class":51,"line":9267},[49,87730,3654],{"emptyLinePlaceholder":1330},[49,87732,87733,87735,87738],{"class":51,"line":9273},[49,87734,87375],{"class":62},[49,87736,87737],{"class":62}," .footer",[49,87739,67],{"class":66},[49,87741,87742,87744,87746,87748],{"class":51,"line":9285},[49,87743,56248],{"class":73},[49,87745,77],{"class":66},[49,87747,52723],{"class":73},[49,87749,83],{"class":66},[49,87751,87752,87754,87756,87758],{"class":51,"line":9297},[49,87753,56259],{"class":73},[49,87755,77],{"class":66},[49,87757,52823],{"class":73},[49,87759,83],{"class":66},[49,87761,87762,87764,87766,87768,87770],{"class":51,"line":9309},[49,87763,55936],{"class":73},[49,87765,77],{"class":66},[49,87767,106],{"class":73},[49,87769,110],{"class":109},[49,87771,83],{"class":66},[49,87773,87774],{"class":51,"line":10968},[49,87775,3441],{"class":66},[49,87777,87778],{"class":51,"line":10993},[49,87779,3654],{"emptyLinePlaceholder":1330},[49,87781,87782,87784,87786,87788],{"class":51,"line":11016},[49,87783,87375],{"class":62},[49,87785,87737],{"class":62},[49,87787,2655],{"class":147},[49,87789,67],{"class":66},[49,87791,87792,87794,87796,87798,87800,87802,87804],{"class":51,"line":11040},[49,87793,55936],{"class":73},[49,87795,77],{"class":66},[49,87797,1472],{"class":73},[49,87799,110],{"class":109},[49,87801,3337],{"class":73},[49,87803,110],{"class":109},[49,87805,83],{"class":66},[49,87807,87808,87810,87812,87815],{"class":51,"line":11045},[49,87809,62959],{"class":73},[49,87811,77],{"class":66},[49,87813,87814],{"class":73},"#ccc",[49,87816,83],{"class":66},[49,87818,87819,87821,87823,87825],{"class":51,"line":11050},[49,87820,65206],{"class":73},[49,87822,77],{"class":66},[49,87824,460],{"class":73},[49,87826,83],{"class":66},[49,87828,87829,87831,87833,87835],{"class":51,"line":11055},[49,87830,58655],{"class":73},[49,87832,77],{"class":66},[49,87834,62081],{"class":73},[49,87836,83],{"class":66},[49,87838,87839,87841,87843,87845,87847],{"class":51,"line":11064},[49,87840,56373],{"class":73},[49,87842,77],{"class":66},[49,87844,1478],{"class":73},[49,87846,110],{"class":109},[49,87848,83],{"class":66},[49,87850,87851,87853,87855,87857,87859],{"class":51,"line":11069},[49,87852,62988],{"class":73},[49,87854,77],{"class":66},[49,87856,106],{"class":73},[49,87858,110],{"class":109},[49,87860,83],{"class":66},[49,87862,87863,87865,87867,87869,87871],{"class":51,"line":11075},[49,87864,56161],{"class":73},[49,87866,77],{"class":66},[49,87868,1940],{"class":73},[49,87870,110],{"class":109},[49,87872,83],{"class":66},[49,87874,87875],{"class":51,"line":11096},[49,87876,3441],{"class":66},[49,87878,87879],{"class":51,"line":11102},[49,87880,3654],{"emptyLinePlaceholder":1330},[49,87882,87883,87885,87887,87889,87892],{"class":51,"line":11116},[49,87884,87375],{"class":62},[49,87886,87737],{"class":62},[49,87888,2655],{"class":147},[49,87890,87891],{"class":62},".submit",[49,87893,67],{"class":66},[49,87895,87896,87898,87900,87903],{"class":51,"line":11122},[49,87897,56123],{"class":73},[49,87899,77],{"class":66},[49,87901,87902],{"class":73},"#369",[49,87904,83],{"class":66},[49,87906,87907],{"class":51,"line":11149},[49,87908,3441],{"class":66},[49,87910,87911,87913,87915],{"class":51,"line":11158},[49,87912,53659],{"class":66},[49,87914,1305],{"class":147},[49,87916,52554],{"class":66},[49,87918,87919,87921,87923],{"class":51,"line":11164},[49,87920,53027],{"class":66},[49,87922,52581],{"class":147},[49,87924,52554],{"class":66},[49,87926,87927],{"class":51,"line":11172},[49,87928,3654],{"emptyLinePlaceholder":1330},[49,87930,87931,87933,87935],{"class":51,"line":11177},[49,87932,2300],{"class":66},[49,87934,53042],{"class":147},[49,87936,52554],{"class":66},[49,87938,87939,87941,87943,87945,87947,87950,87953,87955],{"class":51,"line":17854},[49,87940,53386],{"class":66},[49,87942,55128],{"class":147},[49,87944,16210],{"class":62},[49,87946,1448],{"class":66},[49,87948,87949],{"class":1505},"\"delete\"",[49,87951,87952],{"class":66},">删除\u003C\u002F",[49,87954,55128],{"class":147},[49,87956,52554],{"class":66},[49,87958,87959,87961,87963,87965,87967,87970,87973,87975],{"class":51,"line":17860},[49,87960,53386],{"class":66},[49,87962,55128],{"class":147},[49,87964,16210],{"class":62},[49,87966,1448],{"class":66},[49,87968,87969],{"class":1505},"\"login\"",[49,87971,87972],{"class":66},">登录\u003C\u002F",[49,87974,55128],{"class":147},[49,87976,52554],{"class":66},[49,87978,87979,87981,87983],{"class":51,"line":17883},[49,87980,53386],{"class":66},[49,87982,53055],{"class":147},[49,87984,52554],{"class":66},[49,87986,87987],{"class":51,"line":17889},[49,87988,87989],{"class":55},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[49,87991,87992,87994,87997,87999,88001,88003,88005,88007,88010,88012,88014],{"class":51,"line":17912},[49,87993,71319],{"class":109},[49,87995,87996],{"class":62}," Modal",[49,87998,1403],{"class":66},[49,88000,52654],{"class":6468},[49,88002,14816],{"class":109},[49,88004,71165],{"class":1505},[49,88006,13687],{"class":66},[49,88008,88009],{"class":6468},"message",[49,88011,14816],{"class":109},[49,88013,71165],{"class":1505},[49,88015,13694],{"class":66},[49,88017,88018],{"class":51,"line":17926},[49,88019,88020],{"class":55},"      \u002F\u002F 创建Model 模态框盒子\n",[49,88022,88023],{"class":51,"line":17946},[49,88024,88025],{"class":55},"      \u002F\u002F 1.1 创建div标签\n",[49,88027,88028,88030,88033,88035,88037,88039,88041,88043],{"class":51,"line":17952},[49,88029,71286],{"class":73},[49,88031,88032],{"class":66},".modalBox ",[49,88034,1448],{"class":109},[49,88036,55637],{"class":66},[49,88038,71386],{"class":62},[49,88040,1403],{"class":66},[49,88042,83157],{"class":1505},[49,88044,1409],{"class":66},[49,88046,88047],{"class":51,"line":17963},[49,88048,88049],{"class":55},"      \u002F\u002F 1.2 给div 添加类名为model\n",[49,88051,88052,88054,88057,88059],{"class":51,"line":17986},[49,88053,71286],{"class":73},[49,88055,88056],{"class":66},".modalBox.className ",[49,88058,1448],{"class":109},[49,88060,88061],{"class":1505}," 'modal'\n",[49,88063,88064],{"class":51,"line":18008},[49,88065,88066],{"class":55},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[49,88068,88069,88071,88074,88076],{"class":51,"line":18013},[49,88070,71286],{"class":73},[49,88072,88073],{"class":66},".modalBox.innerHTML ",[49,88075,1448],{"class":109},[49,88077,71403],{"class":1505},[49,88079,88080,88083,88085],{"class":51,"line":18019},[49,88081,88082],{"class":1505},"        \u003Cdiv class=\"header\">${",[49,88084,52654],{"class":66},[49,88086,88087],{"class":1505},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[49,88089,88090,88093,88095],{"class":51,"line":18033},[49,88091,88092],{"class":1505},"        \u003Cdiv class=\"body\">${",[49,88094,88009],{"class":66},[49,88096,88097],{"class":1505},"}\u003C\u002Fdiv>\n",[49,88099,88100],{"class":51,"line":18046},[49,88101,88102],{"class":1505},"      `\n",[49,88104,88105],{"class":51,"line":18051},[49,88106,88107],{"class":55},"      \u002F\u002F console.log(this.modalBox)\n",[49,88109,88110],{"class":51,"line":18065},[49,88111,3441],{"class":66},[49,88113,88114],{"class":51,"line":18070},[49,88115,88116],{"class":55},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[49,88118,88119],{"class":51,"line":18076},[49,88120,88121],{"class":55},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[49,88123,88124],{"class":51,"line":18081},[49,88125,88126],{"class":55},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[49,88128,88129,88132,88134,88136,88138,88141,88143,88145],{"class":51,"line":18095},[49,88130,88131],{"class":73},"    Modal",[49,88133,1949],{"class":66},[49,88135,86804],{"class":73},[49,88137,1949],{"class":66},[49,88139,88140],{"class":62},"open",[49,88142,14816],{"class":109},[49,88144,60157],{"class":109},[49,88146,55693],{"class":66},[49,88148,88149],{"class":51,"line":18100},[49,88150,88151],{"class":55},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[49,88153,88154,88156,88159,88161,88163,88165,88167,88170],{"class":51,"line":18105},[49,88155,59467],{"class":109},[49,88157,88158],{"class":73}," box",[49,88160,14816],{"class":109},[49,88162,55637],{"class":66},[49,88164,55640],{"class":62},[49,88166,1403],{"class":66},[49,88168,88169],{"class":1505},"'.modal'",[49,88171,1409],{"class":66},[49,88173,88174],{"class":51,"line":18119},[49,88175,88176],{"class":55},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[49,88178,88179,88182,88184,88187,88189],{"class":51,"line":18131},[49,88180,88181],{"class":66},"      box ",[49,88183,2970],{"class":109},[49,88185,88186],{"class":66}," box.",[49,88188,58245],{"class":62},[49,88190,3230],{"class":66},[49,88192,88193],{"class":51,"line":18136},[49,88194,88195],{"class":55},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[49,88197,88198],{"class":51,"line":18149},[49,88199,88200],{"class":55},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[49,88202,88203],{"class":51,"line":18154},[49,88204,88205],{"class":55},"      \u002F\u002F append可以增加对象\n",[49,88207,88208,88211,88214,88216,88219],{"class":51,"line":18159},[49,88209,88210],{"class":66},"      document.body.",[49,88212,88213],{"class":62},"append",[49,88215,1403],{"class":66},[49,88217,88218],{"class":73},"this",[49,88220,88221],{"class":66},".modalBox)\n",[49,88223,88224],{"class":51,"line":18164},[49,88225,3654],{"emptyLinePlaceholder":1330},[49,88227,88228],{"class":51,"line":18177},[49,88229,88230],{"class":55},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[49,88232,88233,88235,88238,88240,88242,88245,88247,88249,88251,88253,88256,88258],{"class":51,"line":18182},[49,88234,71286],{"class":73},[49,88236,88237],{"class":66},".modalBox.",[49,88239,55640],{"class":62},[49,88241,1403],{"class":66},[49,88243,88244],{"class":1505},"'i'",[49,88246,32074],{"class":66},[49,88248,59052],{"class":62},[49,88250,1403],{"class":66},[49,88252,59057],{"class":1505},[49,88254,88255],{"class":66},", () ",[49,88257,85947],{"class":109},[49,88259,67],{"class":66},[49,88261,88262],{"class":51,"line":33881},[49,88263,88264],{"class":55},"        \u002F\u002F 这个地方需要用到箭头函数\n",[49,88266,88267],{"class":51,"line":33887},[49,88268,88269],{"class":55},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[49,88271,88272],{"class":51,"line":33893},[49,88273,88274],{"class":55},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[49,88276,88277,88279,88281,88284],{"class":51,"line":33899},[49,88278,65961],{"class":73},[49,88280,1949],{"class":66},[49,88282,88283],{"class":62},"close",[49,88285,3230],{"class":66},[49,88287,88288],{"class":51,"line":33905},[49,88289,66050],{"class":66},[49,88291,88292],{"class":51,"line":33916},[49,88293,3441],{"class":66},[49,88295,88296],{"class":51,"line":33922},[49,88297,3654],{"emptyLinePlaceholder":1330},[49,88299,88300],{"class":51,"line":33942},[49,88301,88302],{"class":55},"    \u002F\u002F 测试一下 点击 删除按钮\n",[49,88304,88305,88307,88309,88311,88314,88316,88318,88320,88322,88324,88326],{"class":51,"line":33948},[49,88306,53649],{"class":66},[49,88308,55640],{"class":62},[49,88310,1403],{"class":66},[49,88312,88313],{"class":1505},"'#delete'",[49,88315,32074],{"class":66},[49,88317,59052],{"class":62},[49,88319,1403],{"class":66},[49,88321,59057],{"class":1505},[49,88323,88255],{"class":66},[49,88325,85947],{"class":109},[49,88327,67],{"class":66},[49,88329,88330],{"class":51,"line":33959},[49,88331,88332],{"class":55},"      \u002F\u002F 先调用Model构造函数\n",[49,88334,88335,88337,88340,88342,88344,88346,88348,88351,88353,88356],{"class":51,"line":33965},[49,88336,59467],{"class":109},[49,88338,88339],{"class":73}," del",[49,88341,14816],{"class":109},[49,88343,12830],{"class":109},[49,88345,87996],{"class":62},[49,88347,1403],{"class":66},[49,88349,88350],{"class":1505},"'温馨的提示'",[49,88352,13687],{"class":66},[49,88354,88355],{"class":1505},"'您没有删除权限操作'",[49,88357,1409],{"class":66},[49,88359,88360],{"class":51,"line":33971},[49,88361,88362],{"class":55},"      \u002F\u002F 实例对象调用open方法\n",[49,88364,88365,88368,88370],{"class":51,"line":33977},[49,88366,88367],{"class":66},"      del.",[49,88369,88140],{"class":62},[49,88371,3230],{"class":66},[49,88373,88374],{"class":51,"line":33983},[49,88375,34709],{"class":66},[49,88377,88378],{"class":51,"line":33989},[49,88379,88380],{"class":55},"    \u002F\u002F 测试一下 点击 登录按钮\n",[49,88382,88383,88385,88387,88389,88392,88394,88396,88398,88400,88402,88404],{"class":51,"line":33995},[49,88384,53649],{"class":66},[49,88386,55640],{"class":62},[49,88388,1403],{"class":66},[49,88390,88391],{"class":1505},"'#login'",[49,88393,32074],{"class":66},[49,88395,59052],{"class":62},[49,88397,1403],{"class":66},[49,88399,59057],{"class":1505},[49,88401,88255],{"class":66},[49,88403,85947],{"class":109},[49,88405,67],{"class":66},[49,88407,88408],{"class":51,"line":34001},[49,88409,88332],{"class":55},[49,88411,88412,88414,88417,88419,88421,88423,88425,88428,88430,88433],{"class":51,"line":34021},[49,88413,59467],{"class":109},[49,88415,88416],{"class":73}," log",[49,88418,14816],{"class":109},[49,88420,12830],{"class":109},[49,88422,87996],{"class":62},[49,88424,1403],{"class":66},[49,88426,88427],{"class":1505},"'友情提示'",[49,88429,13687],{"class":66},[49,88431,88432],{"class":1505},"'您还没有登录呢'",[49,88434,1409],{"class":66},[49,88436,88437],{"class":51,"line":34027},[49,88438,88362],{"class":55},[49,88440,88441,88444,88446],{"class":51,"line":34043},[49,88442,88443],{"class":66},"      log.",[49,88445,88140],{"class":62},[49,88447,3230],{"class":66},[49,88449,88450],{"class":51,"line":34049},[49,88451,34709],{"class":66},[49,88453,88454],{"class":51,"line":34063},[49,88455,88456],{"class":55},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[49,88458,88459,88461,88463,88465,88467,88469,88471,88473],{"class":51,"line":34069},[49,88460,88131],{"class":73},[49,88462,1949],{"class":66},[49,88464,86804],{"class":73},[49,88466,1949],{"class":66},[49,88468,88283],{"class":62},[49,88470,14816],{"class":109},[49,88472,60157],{"class":109},[49,88474,55693],{"class":66},[49,88476,88477,88479,88481,88483],{"class":51,"line":34084},[49,88478,71286],{"class":73},[49,88480,88237],{"class":66},[49,88482,58245],{"class":62},[49,88484,3230],{"class":66},[49,88486,88487],{"class":51,"line":34090},[49,88488,3441],{"class":66},[49,88490,88491,88493,88495],{"class":51,"line":34099},[49,88492,53659],{"class":66},[49,88494,53055],{"class":147},[49,88496,52554],{"class":66},[49,88498,88499,88501,88503],{"class":51,"line":34105},[49,88500,53027],{"class":66},[49,88502,53042],{"class":147},[49,88504,52554],{"class":66},[49,88506,88507],{"class":51,"line":34114},[49,88508,3654],{"emptyLinePlaceholder":1330},[49,88510,88511,88513,88515],{"class":51,"line":34120},[49,88512,53027],{"class":66},[49,88514,51883],{"class":147},[49,88516,52554],{"class":66},[19,88518,88519],{},[174,88520],{"alt":44,"src":88521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88523,88525],{"id":88524},"_414-深浅拷贝","4.14 深浅拷贝",[183,88527,88529],{"id":88528},"_4141-浅拷贝","4.14.1 浅拷贝",[19,88531,88532],{},[174,88533],{"alt":44,"src":88534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,88536,88537],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,88539,88540],{},[174,88541],{"alt":44,"src":88542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,88544,88545],{},[174,88546],{"alt":44,"src":88547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,88549,88550],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,88552,88553],{},[174,88554],{"alt":44,"src":88555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,88557,12584],{},[19,88559,88560],{},[174,88561],{"alt":44,"src":88562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[183,88564,88566],{"id":88565},"_4142-深拷贝","4.14.2 深拷贝",[19,88568,88569],{},"深拷贝：拷贝的是对象，不是地址",[19,88571,88572],{},"常用的三种方法：",[591,88574,88575,88578,88581],{},[26,88576,88577],{},"通过递归实现深拷贝",[26,88579,88580],{},"lodash\u002FcloneDeep",[26,88582,88583],{},"通过JSON.stringify()实现",[525,88585,88587],{"id":88586},"_41421-递归函数","4.14.2.1 递归函数",[19,88589,88590],{},[174,88591],{"alt":44,"src":88592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[591,88594,88595],{},[26,88596,88597],{},"死递归占溢出：",[39,88599,88601],{"className":54309,"code":88600,"language":54311,"meta":44,"style":44},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[46,88602,88603,88611,88619,88623,88628,88632,88637,88645],{"__ignoreMap":44},[49,88604,88605,88607,88609],{"class":51,"line":52},[49,88606,2300],{"class":66},[49,88608,53042],{"class":147},[49,88610,52554],{"class":66},[49,88612,88613,88615,88617],{"class":51,"line":59},[49,88614,53386],{"class":66},[49,88616,53055],{"class":147},[49,88618,52554],{"class":66},[49,88620,88621],{"class":51,"line":70},[49,88622,78372],{"class":66},[49,88624,88625],{"class":51,"line":86},[49,88626,88627],{"class":66},"      fn()\n",[49,88629,88630],{"class":51,"line":98},[49,88631,3441],{"class":66},[49,88633,88634],{"class":51,"line":121},[49,88635,88636],{"class":66},"    fn()\n",[49,88638,88639,88641,88643],{"class":51,"line":134},[49,88640,53659],{"class":66},[49,88642,53055],{"class":147},[49,88644,52554],{"class":66},[49,88646,88647,88649,88651],{"class":51,"line":1085},[49,88648,53027],{"class":66},[49,88650,53042],{"class":147},[49,88652,52554],{"class":66},[591,88654,88655],{"start":59},[26,88656,88657],{},"递归函数要加判断条件：",[19,88659,88660],{},[174,88661],{"alt":44,"src":88662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[591,88664,88665],{"start":70},[26,88666,88667],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[39,88669,88671],{"className":51881,"code":88670,"language":51883,"meta":44,"style":44},"\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",[46,88672,88673,88683,88697,88701,88709,88723,88743,88755,88763,88767,88775,88787,88795,88803,88828,88840,88844,88851,88859,88867,88871],{"__ignoreMap":44},[49,88674,88675,88677,88679,88681],{"class":51,"line":52},[49,88676,52545],{"class":66},[49,88678,52548],{"class":147},[49,88680,52551],{"class":62},[49,88682,52554],{"class":66},[49,88684,88685,88687,88689,88691,88693,88695],{"class":51,"line":59},[49,88686,2300],{"class":66},[49,88688,51883],{"class":147},[49,88690,52563],{"class":62},[49,88692,1448],{"class":66},[49,88694,52568],{"class":1505},[49,88696,52554],{"class":66},[49,88698,88699],{"class":51,"line":70},[49,88700,3654],{"emptyLinePlaceholder":1330},[49,88702,88703,88705,88707],{"class":51,"line":86},[49,88704,2300],{"class":66},[49,88706,52581],{"class":147},[49,88708,52554],{"class":66},[49,88710,88711,88713,88715,88717,88719,88721],{"class":51,"line":98},[49,88712,53386],{"class":66},[49,88714,52591],{"class":147},[49,88716,52594],{"class":62},[49,88718,1448],{"class":66},[49,88720,52599],{"class":1505},[49,88722,52554],{"class":66},[49,88724,88725,88727,88729,88731,88733,88735,88737,88739,88741],{"class":51,"line":121},[49,88726,53386],{"class":66},[49,88728,52591],{"class":147},[49,88730,16171],{"class":62},[49,88732,1448],{"class":66},[49,88734,52638],{"class":1505},[49,88736,52618],{"class":62},[49,88738,1448],{"class":66},[49,88740,52645],{"class":1505},[49,88742,52554],{"class":66},[49,88744,88745,88747,88749,88751,88753],{"class":51,"line":134},[49,88746,53386],{"class":66},[49,88748,52654],{"class":147},[49,88750,52657],{"class":66},[49,88752,52654],{"class":147},[49,88754,52554],{"class":66},[49,88756,88757,88759,88761],{"class":51,"line":1085},[49,88758,53027],{"class":66},[49,88760,52581],{"class":147},[49,88762,52554],{"class":66},[49,88764,88765],{"class":51,"line":2574},[49,88766,3654],{"emptyLinePlaceholder":1330},[49,88768,88769,88771,88773],{"class":51,"line":2586},[49,88770,2300],{"class":66},[49,88772,53042],{"class":147},[49,88774,52554],{"class":66},[49,88776,88777,88779,88781,88783,88785],{"class":51,"line":2867},[49,88778,53386],{"class":66},[49,88780,148],{"class":147},[49,88782,56553],{"class":66},[49,88784,148],{"class":147},[49,88786,52554],{"class":66},[49,88788,88789,88791,88793],{"class":51,"line":2872},[49,88790,53386],{"class":66},[49,88792,53055],{"class":147},[49,88794,52554],{"class":66},[49,88796,88797,88799,88801],{"class":51,"line":2878},[49,88798,71319],{"class":109},[49,88800,75002],{"class":62},[49,88802,12105],{"class":66},[49,88804,88805,88807,88809,88811,88813,88815,88817,88819,88821,88823,88826],{"class":51,"line":2883},[49,88806,57010],{"class":66},[49,88808,55640],{"class":62},[49,88810,1403],{"class":66},[49,88812,83157],{"class":1505},[49,88814,75478],{"class":66},[49,88816,1448],{"class":109},[49,88818,12830],{"class":109},[49,88820,75018],{"class":62},[49,88822,18511],{"class":66},[49,88824,88825],{"class":62},"toLocaleString",[49,88827,3230],{"class":66},[49,88829,88830,88833,88836,88838],{"class":51,"line":2897},[49,88831,88832],{"class":62},"      setTimeout",[49,88834,88835],{"class":66},"(getTime, ",[49,88837,7662],{"class":73},[49,88839,1409],{"class":66},[49,88841,88842],{"class":51,"line":2902},[49,88843,3441],{"class":66},[49,88845,88846,88849],{"class":51,"line":2908},[49,88847,88848],{"class":62},"    getTime",[49,88850,3230],{"class":66},[49,88852,88853,88855,88857],{"class":51,"line":2929},[49,88854,53659],{"class":66},[49,88856,53055],{"class":147},[49,88858,52554],{"class":66},[49,88860,88861,88863,88865],{"class":51,"line":2934},[49,88862,53027],{"class":66},[49,88864,53042],{"class":147},[49,88866,52554],{"class":66},[49,88868,88869],{"class":51,"line":2948},[49,88870,3654],{"emptyLinePlaceholder":1330},[49,88872,88873,88875,88877],{"class":51,"line":2953},[49,88874,53027],{"class":66},[49,88876,51883],{"class":147},[49,88878,52554],{"class":66},[19,88880,88881],{},[174,88882],{"alt":44,"src":88883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[591,88885,88886],{"start":86},[26,88887,88577],{},[19,88889,88890],{},[174,88891],{"alt":44,"src":88892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,88894,88895],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,88897,40437],{},[19,88899,88900],{},"这个是简易版的递归函数深拷贝",[19,88902,88903],{},"一定要注意先数组再对象，因为万物皆可对象",[39,88905,88907],{"className":51881,"code":88906,"language":51883,"meta":44,"style":44},"\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",[46,88908,88909,88919,88933,88937,88945,88959,88979,88991,88999,89003,89011,89019,89029,89038,89046,89062,89066,89074,89078,89082,89094,89099,89118,89134,89139,89144,89149,89164,89169,89174,89183,89191,89208,89216,89222,89230,89235,89240,89249,89253,89257,89261,89272,89281,89291,89305,89315,89323,89331,89339,89343],{"__ignoreMap":44},[49,88910,88911,88913,88915,88917],{"class":51,"line":52},[49,88912,52545],{"class":66},[49,88914,52548],{"class":147},[49,88916,52551],{"class":62},[49,88918,52554],{"class":66},[49,88920,88921,88923,88925,88927,88929,88931],{"class":51,"line":59},[49,88922,2300],{"class":66},[49,88924,51883],{"class":147},[49,88926,52563],{"class":62},[49,88928,1448],{"class":66},[49,88930,52568],{"class":1505},[49,88932,52554],{"class":66},[49,88934,88935],{"class":51,"line":70},[49,88936,3654],{"emptyLinePlaceholder":1330},[49,88938,88939,88941,88943],{"class":51,"line":86},[49,88940,2300],{"class":66},[49,88942,52581],{"class":147},[49,88944,52554],{"class":66},[49,88946,88947,88949,88951,88953,88955,88957],{"class":51,"line":98},[49,88948,53386],{"class":66},[49,88950,52591],{"class":147},[49,88952,52594],{"class":62},[49,88954,1448],{"class":66},[49,88956,52599],{"class":1505},[49,88958,52554],{"class":66},[49,88960,88961,88963,88965,88967,88969,88971,88973,88975,88977],{"class":51,"line":121},[49,88962,53386],{"class":66},[49,88964,52591],{"class":147},[49,88966,16171],{"class":62},[49,88968,1448],{"class":66},[49,88970,52638],{"class":1505},[49,88972,52618],{"class":62},[49,88974,1448],{"class":66},[49,88976,52645],{"class":1505},[49,88978,52554],{"class":66},[49,88980,88981,88983,88985,88987,88989],{"class":51,"line":134},[49,88982,53386],{"class":66},[49,88984,52654],{"class":147},[49,88986,52657],{"class":66},[49,88988,52654],{"class":147},[49,88990,52554],{"class":66},[49,88992,88993,88995,88997],{"class":51,"line":1085},[49,88994,53027],{"class":66},[49,88996,52581],{"class":147},[49,88998,52554],{"class":66},[49,89000,89001],{"class":51,"line":2574},[49,89002,3654],{"emptyLinePlaceholder":1330},[49,89004,89005,89007,89009],{"class":51,"line":2586},[49,89006,2300],{"class":66},[49,89008,53042],{"class":147},[49,89010,52554],{"class":66},[49,89012,89013,89015,89017],{"class":51,"line":2867},[49,89014,53386],{"class":66},[49,89016,53055],{"class":147},[49,89018,52554],{"class":66},[49,89020,89021,89023,89025,89027],{"class":51,"line":2872},[49,89022,12473],{"class":109},[49,89024,71206],{"class":73},[49,89026,14816],{"class":109},[49,89028,67],{"class":66},[49,89030,89031,89033,89036],{"class":51,"line":2878},[49,89032,72846],{"class":66},[49,89034,89035],{"class":1505},"'pink'",[49,89037,32714],{"class":66},[49,89039,89040,89042,89044],{"class":51,"line":2883},[49,89041,72856],{"class":66},[49,89043,2041],{"class":73},[49,89045,32714],{"class":66},[49,89047,89048,89051,89054,89056,89059],{"class":51,"line":2897},[49,89049,89050],{"class":66},"      hobby: [",[49,89052,89053],{"class":1505},"'乒乓球'",[49,89055,13687],{"class":66},[49,89057,89058],{"class":1505},"'足球'",[49,89060,89061],{"class":66},"],\n",[49,89063,89064],{"class":51,"line":2902},[49,89065,79099],{"class":66},[49,89067,89068,89071],{"class":51,"line":2908},[49,89069,89070],{"class":66},"        baby: ",[49,89072,89073],{"class":1505},"'小pink'\n",[49,89075,89076],{"class":51,"line":2929},[49,89077,53640],{"class":66},[49,89079,89080],{"class":51,"line":2934},[49,89081,3441],{"class":66},[49,89083,89084,89086,89089,89091],{"class":51,"line":2948},[49,89085,12473],{"class":109},[49,89087,89088],{"class":73}," o",[49,89090,14816],{"class":109},[49,89092,89093],{"class":66}," {}\n",[49,89095,89096],{"class":51,"line":2953},[49,89097,89098],{"class":55},"    \u002F\u002F 拷贝函数\n",[49,89100,89101,89103,89106,89108,89111,89113,89116],{"class":51,"line":2982},[49,89102,71319],{"class":109},[49,89104,89105],{"class":62}," deepCopy",[49,89107,1403],{"class":66},[49,89109,89110],{"class":6468},"newObj",[49,89112,13687],{"class":66},[49,89114,89115],{"class":6468},"oldObj",[49,89117,13694],{"class":66},[49,89119,89120,89122,89124,89126,89129,89131],{"class":51,"line":2987},[49,89121,53526],{"class":109},[49,89123,2913],{"class":66},[49,89125,53089],{"class":109},[49,89127,89128],{"class":66}," k ",[49,89130,27292],{"class":109},[49,89132,89133],{"class":66}," oldObj) {\n",[49,89135,89136],{"class":51,"line":3004},[49,89137,89138],{"class":55},"        \u002F\u002F 处理数组的问题\n",[49,89140,89141],{"class":51,"line":3009},[49,89142,89143],{"class":55},"        \u002F\u002F 判断是否属于数组\n",[49,89145,89146],{"class":51,"line":3014},[49,89147,89148],{"class":55},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[49,89150,89151,89153,89156,89159,89162],{"class":51,"line":3019},[49,89152,3751],{"class":109},[49,89154,89155],{"class":66}," (oldObj[k] ",[49,89157,89158],{"class":109},"instanceof",[49,89160,89161],{"class":62}," Array",[49,89163,13694],{"class":66},[49,89165,89166],{"class":51,"line":3033},[49,89167,89168],{"class":55},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[49,89170,89171],{"class":51,"line":3038},[49,89172,89173],{"class":55},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[49,89175,89176,89179,89181],{"class":51,"line":3831},[49,89177,89178],{"class":66},"          newObj[k] ",[49,89180,1448],{"class":109},[49,89182,53080],{"class":66},[49,89184,89185,89188],{"class":51,"line":3845},[49,89186,89187],{"class":62},"          deepCopy",[49,89189,89190],{"class":66},"(newObj[k], oldObj[k])\n",[49,89192,89193,89195,89197,89199,89201,89203,89206],{"class":51,"line":3853},[49,89194,81306],{"class":66},[49,89196,2956],{"class":109},[49,89198,2959],{"class":109},[49,89200,89155],{"class":66},[49,89202,89158],{"class":109},[49,89204,89205],{"class":62}," Object",[49,89207,13694],{"class":66},[49,89209,89210,89212,89214],{"class":51,"line":3858},[49,89211,89178],{"class":66},[49,89213,1448],{"class":109},[49,89215,89093],{"class":66},[49,89217,89218,89220],{"class":51,"line":3864},[49,89219,89187],{"class":62},[49,89221,89190],{"class":66},[49,89223,89224,89226,89228],{"class":51,"line":3870},[49,89225,81306],{"class":66},[49,89227,2956],{"class":109},[49,89229,67],{"class":66},[49,89231,89232],{"class":51,"line":3875},[49,89233,89234],{"class":55},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[49,89236,89237],{"class":51,"line":9200},[49,89238,89239],{"class":55},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[49,89241,89242,89244,89246],{"class":51,"line":9224},[49,89243,89178],{"class":66},[49,89245,1448],{"class":109},[49,89247,89248],{"class":66}," oldObj[k]\n",[49,89250,89251],{"class":51,"line":9229},[49,89252,3783],{"class":66},[49,89254,89255],{"class":51,"line":9235},[49,89256,53640],{"class":66},[49,89258,89259],{"class":51,"line":9262},[49,89260,3441],{"class":66},[49,89262,89263,89266,89269],{"class":51,"line":9267},[49,89264,89265],{"class":62},"    deepCopy",[49,89267,89268],{"class":66},"(o, obj) ",[49,89270,89271],{"class":55},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[49,89273,89274,89276,89278],{"class":51,"line":9273},[49,89275,74982],{"class":66},[49,89277,59486],{"class":62},[49,89279,89280],{"class":66},"(o)\n",[49,89282,89283,89286,89288],{"class":51,"line":9285},[49,89284,89285],{"class":66},"    o.age ",[49,89287,1448],{"class":109},[49,89289,89290],{"class":73}," 20\n",[49,89292,89293,89296,89298,89300,89302],{"class":51,"line":9297},[49,89294,89295],{"class":66},"    o.hobby[",[49,89297,80],{"class":73},[49,89299,5697],{"class":66},[49,89301,1448],{"class":109},[49,89303,89304],{"class":1505}," '篮球'\n",[49,89306,89307,89310,89312],{"class":51,"line":9309},[49,89308,89309],{"class":66},"    o.family ",[49,89311,1448],{"class":109},[49,89313,89314],{"class":1505}," '老pink'\n",[49,89316,89317,89319,89321],{"class":51,"line":10968},[49,89318,74982],{"class":66},[49,89320,59486],{"class":62},[49,89322,71271],{"class":66},[49,89324,89325,89327,89329],{"class":51,"line":10993},[49,89326,53659],{"class":66},[49,89328,53055],{"class":147},[49,89330,52554],{"class":66},[49,89332,89333,89335,89337],{"class":51,"line":11016},[49,89334,53027],{"class":66},[49,89336,53042],{"class":147},[49,89338,52554],{"class":66},[49,89340,89341],{"class":51,"line":11040},[49,89342,3654],{"emptyLinePlaceholder":1330},[49,89344,89345,89347,89349],{"class":51,"line":11045},[49,89346,53027],{"class":66},[49,89348,51883],{"class":147},[49,89350,52554],{"class":66},[19,89352,89353],{},[174,89354],{"alt":44,"src":89355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[525,89357,89359,89360],{"id":89358},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[485,89361,89362],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89364,89365],{},[1630,89366,89367],{"href":89367,"rel":89368},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25113],[19,89370,89371],{},"lodash里边的方法都要加上一个下划线_",[19,89373,89374],{},"_.cloneDeep()",[39,89376,89378],{"className":51881,"code":89377,"language":51883,"meta":44,"style":44},"\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",[46,89379,89380,89390,89404,89408,89416,89430,89450,89462,89470,89474,89482,89487,89506,89514,89524,89532,89540,89552,89556,89562,89566,89570,89586,89594,89603,89611,89619,89627,89631],{"__ignoreMap":44},[49,89381,89382,89384,89386,89388],{"class":51,"line":52},[49,89383,52545],{"class":66},[49,89385,52548],{"class":147},[49,89387,52551],{"class":62},[49,89389,52554],{"class":66},[49,89391,89392,89394,89396,89398,89400,89402],{"class":51,"line":59},[49,89393,2300],{"class":66},[49,89395,51883],{"class":147},[49,89397,52563],{"class":62},[49,89399,1448],{"class":66},[49,89401,52568],{"class":1505},[49,89403,52554],{"class":66},[49,89405,89406],{"class":51,"line":70},[49,89407,3654],{"emptyLinePlaceholder":1330},[49,89409,89410,89412,89414],{"class":51,"line":86},[49,89411,2300],{"class":66},[49,89413,52581],{"class":147},[49,89415,52554],{"class":66},[49,89417,89418,89420,89422,89424,89426,89428],{"class":51,"line":98},[49,89419,53386],{"class":66},[49,89421,52591],{"class":147},[49,89423,52594],{"class":62},[49,89425,1448],{"class":66},[49,89427,52599],{"class":1505},[49,89429,52554],{"class":66},[49,89431,89432,89434,89436,89438,89440,89442,89444,89446,89448],{"class":51,"line":121},[49,89433,53386],{"class":66},[49,89435,52591],{"class":147},[49,89437,16171],{"class":62},[49,89439,1448],{"class":66},[49,89441,52638],{"class":1505},[49,89443,52618],{"class":62},[49,89445,1448],{"class":66},[49,89447,52645],{"class":1505},[49,89449,52554],{"class":66},[49,89451,89452,89454,89456,89458,89460],{"class":51,"line":134},[49,89453,53386],{"class":66},[49,89455,52654],{"class":147},[49,89457,52657],{"class":66},[49,89459,52654],{"class":147},[49,89461,52554],{"class":66},[49,89463,89464,89466,89468],{"class":51,"line":1085},[49,89465,53027],{"class":66},[49,89467,52581],{"class":147},[49,89469,52554],{"class":66},[49,89471,89472],{"class":51,"line":2574},[49,89473,3654],{"emptyLinePlaceholder":1330},[49,89475,89476,89478,89480],{"class":51,"line":2586},[49,89477,2300],{"class":66},[49,89479,53042],{"class":147},[49,89481,52554],{"class":66},[49,89483,89484],{"class":51,"line":2867},[49,89485,89486],{"class":55},"  \u003C!-- 先引用这个库 -->\n",[49,89488,89489,89491,89493,89495,89497,89500,89502,89504],{"class":51,"line":2872},[49,89490,53386],{"class":66},[49,89492,53055],{"class":147},[49,89494,56478],{"class":62},[49,89496,1448],{"class":66},[49,89498,89499],{"class":1505},"\"lodash.min.js\"",[49,89501,56553],{"class":66},[49,89503,53055],{"class":147},[49,89505,52554],{"class":66},[49,89507,89508,89510,89512],{"class":51,"line":2878},[49,89509,53386],{"class":66},[49,89511,53055],{"class":147},[49,89513,52554],{"class":66},[49,89515,89516,89518,89520,89522],{"class":51,"line":2883},[49,89517,12473],{"class":109},[49,89519,71206],{"class":73},[49,89521,14816],{"class":109},[49,89523,67],{"class":66},[49,89525,89526,89528,89530],{"class":51,"line":2897},[49,89527,72846],{"class":66},[49,89529,89035],{"class":1505},[49,89531,32714],{"class":66},[49,89533,89534,89536,89538],{"class":51,"line":2902},[49,89535,72856],{"class":66},[49,89537,2041],{"class":73},[49,89539,32714],{"class":66},[49,89541,89542,89544,89546,89548,89550],{"class":51,"line":2908},[49,89543,89050],{"class":66},[49,89545,89053],{"class":1505},[49,89547,13687],{"class":66},[49,89549,89058],{"class":1505},[49,89551,89061],{"class":66},[49,89553,89554],{"class":51,"line":2929},[49,89555,79099],{"class":66},[49,89557,89558,89560],{"class":51,"line":2934},[49,89559,89070],{"class":66},[49,89561,89073],{"class":1505},[49,89563,89564],{"class":51,"line":2948},[49,89565,53640],{"class":66},[49,89567,89568],{"class":51,"line":2953},[49,89569,3441],{"class":66},[49,89571,89572,89574,89576,89578,89581,89584],{"class":51,"line":2982},[49,89573,12473],{"class":109},[49,89575,89088],{"class":73},[49,89577,14816],{"class":109},[49,89579,89580],{"class":66}," _.",[49,89582,89583],{"class":62},"cloneDeep",[49,89585,71271],{"class":66},[49,89587,89588,89590,89592],{"class":51,"line":2987},[49,89589,74982],{"class":66},[49,89591,59486],{"class":62},[49,89593,89280],{"class":66},[49,89595,89596,89599,89601],{"class":51,"line":3004},[49,89597,89598],{"class":66},"    o.family.baby ",[49,89600,1448],{"class":109},[49,89602,89314],{"class":1505},[49,89604,89605,89607,89609],{"class":51,"line":3009},[49,89606,74982],{"class":66},[49,89608,59486],{"class":62},[49,89610,71271],{"class":66},[49,89612,89613,89615,89617],{"class":51,"line":3014},[49,89614,53659],{"class":66},[49,89616,53055],{"class":147},[49,89618,52554],{"class":66},[49,89620,89621,89623,89625],{"class":51,"line":3019},[49,89622,53027],{"class":66},[49,89624,53042],{"class":147},[49,89626,52554],{"class":66},[49,89628,89629],{"class":51,"line":3033},[49,89630,3654],{"emptyLinePlaceholder":1330},[49,89632,89633,89635,89637],{"class":51,"line":3038},[49,89634,53027],{"class":66},[49,89636,51883],{"class":147},[49,89638,52554],{"class":66},[19,89640,89641],{},[174,89642],{"alt":44,"src":89643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[525,89645,89647],{"id":89646},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[39,89649,89651],{"className":51881,"code":89650,"language":51883,"meta":44,"style":44},"\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",[46,89652,89653,89663,89677,89681,89689,89703,89723,89735,89743,89747,89755,89763,89773,89781,89789,89801,89805,89811,89815,89819,89824,89829,89834,89860,89868,89877,89885,89893,89901,89905],{"__ignoreMap":44},[49,89654,89655,89657,89659,89661],{"class":51,"line":52},[49,89656,52545],{"class":66},[49,89658,52548],{"class":147},[49,89660,52551],{"class":62},[49,89662,52554],{"class":66},[49,89664,89665,89667,89669,89671,89673,89675],{"class":51,"line":59},[49,89666,2300],{"class":66},[49,89668,51883],{"class":147},[49,89670,52563],{"class":62},[49,89672,1448],{"class":66},[49,89674,52568],{"class":1505},[49,89676,52554],{"class":66},[49,89678,89679],{"class":51,"line":70},[49,89680,3654],{"emptyLinePlaceholder":1330},[49,89682,89683,89685,89687],{"class":51,"line":86},[49,89684,2300],{"class":66},[49,89686,52581],{"class":147},[49,89688,52554],{"class":66},[49,89690,89691,89693,89695,89697,89699,89701],{"class":51,"line":98},[49,89692,53386],{"class":66},[49,89694,52591],{"class":147},[49,89696,52594],{"class":62},[49,89698,1448],{"class":66},[49,89700,52599],{"class":1505},[49,89702,52554],{"class":66},[49,89704,89705,89707,89709,89711,89713,89715,89717,89719,89721],{"class":51,"line":121},[49,89706,53386],{"class":66},[49,89708,52591],{"class":147},[49,89710,16171],{"class":62},[49,89712,1448],{"class":66},[49,89714,52638],{"class":1505},[49,89716,52618],{"class":62},[49,89718,1448],{"class":66},[49,89720,52645],{"class":1505},[49,89722,52554],{"class":66},[49,89724,89725,89727,89729,89731,89733],{"class":51,"line":134},[49,89726,53386],{"class":66},[49,89728,52654],{"class":147},[49,89730,52657],{"class":66},[49,89732,52654],{"class":147},[49,89734,52554],{"class":66},[49,89736,89737,89739,89741],{"class":51,"line":1085},[49,89738,53027],{"class":66},[49,89740,52581],{"class":147},[49,89742,52554],{"class":66},[49,89744,89745],{"class":51,"line":2574},[49,89746,3654],{"emptyLinePlaceholder":1330},[49,89748,89749,89751,89753],{"class":51,"line":2586},[49,89750,2300],{"class":66},[49,89752,53042],{"class":147},[49,89754,52554],{"class":66},[49,89756,89757,89759,89761],{"class":51,"line":2867},[49,89758,53386],{"class":66},[49,89760,53055],{"class":147},[49,89762,52554],{"class":66},[49,89764,89765,89767,89769,89771],{"class":51,"line":2872},[49,89766,12473],{"class":109},[49,89768,71206],{"class":73},[49,89770,14816],{"class":109},[49,89772,67],{"class":66},[49,89774,89775,89777,89779],{"class":51,"line":2878},[49,89776,72846],{"class":66},[49,89778,89035],{"class":1505},[49,89780,32714],{"class":66},[49,89782,89783,89785,89787],{"class":51,"line":2883},[49,89784,72856],{"class":66},[49,89786,2041],{"class":73},[49,89788,32714],{"class":66},[49,89790,89791,89793,89795,89797,89799],{"class":51,"line":2897},[49,89792,89050],{"class":66},[49,89794,89053],{"class":1505},[49,89796,13687],{"class":66},[49,89798,89058],{"class":1505},[49,89800,89061],{"class":66},[49,89802,89803],{"class":51,"line":2902},[49,89804,79099],{"class":66},[49,89806,89807,89809],{"class":51,"line":2908},[49,89808,89070],{"class":66},[49,89810,89073],{"class":1505},[49,89812,89813],{"class":51,"line":2929},[49,89814,53640],{"class":66},[49,89816,89817],{"class":51,"line":2934},[49,89818,3441],{"class":66},[49,89820,89821],{"class":51,"line":2948},[49,89822,89823],{"class":55},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[49,89825,89826],{"class":51,"line":2953},[49,89827,89828],{"class":55},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[49,89830,89831],{"class":51,"line":2982},[49,89832,89833],{"class":55},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[49,89835,89836,89838,89840,89842,89845,89847,89850,89852,89854,89856,89858],{"class":51,"line":2987},[49,89837,12473],{"class":109},[49,89839,89088],{"class":73},[49,89841,14816],{"class":109},[49,89843,89844],{"class":73}," JSON",[49,89846,1949],{"class":66},[49,89848,89849],{"class":62},"parse",[49,89851,1403],{"class":66},[49,89853,72894],{"class":73},[49,89855,1949],{"class":66},[49,89857,72899],{"class":62},[49,89859,72902],{"class":66},[49,89861,89862,89864,89866],{"class":51,"line":3004},[49,89863,74982],{"class":66},[49,89865,59486],{"class":62},[49,89867,89280],{"class":66},[49,89869,89870,89872,89874],{"class":51,"line":3009},[49,89871,89598],{"class":66},[49,89873,1448],{"class":109},[49,89875,89876],{"class":1505}," '123'\n",[49,89878,89879,89881,89883],{"class":51,"line":3014},[49,89880,74982],{"class":66},[49,89882,59486],{"class":62},[49,89884,71271],{"class":66},[49,89886,89887,89889,89891],{"class":51,"line":3019},[49,89888,53659],{"class":66},[49,89890,53055],{"class":147},[49,89892,52554],{"class":66},[49,89894,89895,89897,89899],{"class":51,"line":3033},[49,89896,53027],{"class":66},[49,89898,53042],{"class":147},[49,89900,52554],{"class":66},[49,89902,89903],{"class":51,"line":3038},[49,89904,3654],{"emptyLinePlaceholder":1330},[49,89906,89907,89909,89911],{"class":51,"line":3831},[49,89908,53027],{"class":66},[49,89910,51883],{"class":147},[49,89912,52554],{"class":66},[19,89914,89915],{},[174,89916],{"alt":44,"src":89917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89919,89921],{"id":89920},"_415-异常处理","4.15 异常处理",[591,89923,89924],{},[26,89925,89926],{},"throw抛异常",[19,89928,89929],{},[174,89930],{"alt":44,"src":89931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[591,89933,89934],{"start":59},[26,89935,89936],{},"try\u002Fcatch 捕获错误信息",[19,89938,89939],{},[174,89940],{"alt":44,"src":89941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[39,89943,89945],{"className":51881,"code":89944,"language":51883,"meta":44,"style":44},"\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",[46,89946,89947,89957,89971,89975,89983,89997,90017,90029,90037,90041,90049,90061,90069,90078,90085,90090,90109,90118,90129,90134,90144,90149,90154,90159,90176,90180,90185,90192,90204,90208,90220,90224,90228,90233,90238,90245,90253,90261,90265],{"__ignoreMap":44},[49,89948,89949,89951,89953,89955],{"class":51,"line":52},[49,89950,52545],{"class":66},[49,89952,52548],{"class":147},[49,89954,52551],{"class":62},[49,89956,52554],{"class":66},[49,89958,89959,89961,89963,89965,89967,89969],{"class":51,"line":59},[49,89960,2300],{"class":66},[49,89962,51883],{"class":147},[49,89964,52563],{"class":62},[49,89966,1448],{"class":66},[49,89968,52568],{"class":1505},[49,89970,52554],{"class":66},[49,89972,89973],{"class":51,"line":70},[49,89974,3654],{"emptyLinePlaceholder":1330},[49,89976,89977,89979,89981],{"class":51,"line":86},[49,89978,2300],{"class":66},[49,89980,52581],{"class":147},[49,89982,52554],{"class":66},[49,89984,89985,89987,89989,89991,89993,89995],{"class":51,"line":98},[49,89986,53386],{"class":66},[49,89988,52591],{"class":147},[49,89990,52594],{"class":62},[49,89992,1448],{"class":66},[49,89994,52599],{"class":1505},[49,89996,52554],{"class":66},[49,89998,89999,90001,90003,90005,90007,90009,90011,90013,90015],{"class":51,"line":121},[49,90000,53386],{"class":66},[49,90002,52591],{"class":147},[49,90004,16171],{"class":62},[49,90006,1448],{"class":66},[49,90008,52638],{"class":1505},[49,90010,52618],{"class":62},[49,90012,1448],{"class":66},[49,90014,52645],{"class":1505},[49,90016,52554],{"class":66},[49,90018,90019,90021,90023,90025,90027],{"class":51,"line":134},[49,90020,53386],{"class":66},[49,90022,52654],{"class":147},[49,90024,52657],{"class":66},[49,90026,52654],{"class":147},[49,90028,52554],{"class":66},[49,90030,90031,90033,90035],{"class":51,"line":1085},[49,90032,53027],{"class":66},[49,90034,52581],{"class":147},[49,90036,52554],{"class":66},[49,90038,90039],{"class":51,"line":2574},[49,90040,3654],{"emptyLinePlaceholder":1330},[49,90042,90043,90045,90047],{"class":51,"line":2586},[49,90044,2300],{"class":66},[49,90046,53042],{"class":147},[49,90048,52554],{"class":66},[49,90050,90051,90053,90055,90057,90059],{"class":51,"line":2867},[49,90052,53386],{"class":66},[49,90054,19],{"class":147},[49,90056,54736],{"class":66},[49,90058,19],{"class":147},[49,90060,52554],{"class":66},[49,90062,90063,90065,90067],{"class":51,"line":2872},[49,90064,53386],{"class":66},[49,90066,53055],{"class":147},[49,90068,52554],{"class":66},[49,90070,90071,90073,90076],{"class":51,"line":2878},[49,90072,71319],{"class":109},[49,90074,90075],{"class":62}," fn",[49,90077,12105],{"class":66},[49,90079,90080,90083],{"class":51,"line":2883},[49,90081,90082],{"class":109},"      try",[49,90084,67],{"class":66},[49,90086,90087],{"class":51,"line":2897},[49,90088,90089],{"class":55},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[49,90091,90092,90094,90096,90098,90100,90102,90104,90107],{"class":51,"line":2902},[49,90093,62508],{"class":109},[49,90095,8077],{"class":73},[49,90097,14816],{"class":109},[49,90099,55637],{"class":66},[49,90101,55640],{"class":62},[49,90103,1403],{"class":66},[49,90105,90106],{"class":1505},"'.p'",[49,90108,1409],{"class":66},[49,90110,90111,90114,90116],{"class":51,"line":2908},[49,90112,90113],{"class":66},"        p.style.color ",[49,90115,1448],{"class":109},[49,90117,68286],{"class":1505},[49,90119,90120,90123,90126],{"class":51,"line":2929},[49,90121,90122],{"class":66},"      } ",[49,90124,90125],{"class":109},"catch",[49,90127,90128],{"class":66}," (err) {\n",[49,90130,90131],{"class":51,"line":2934},[49,90132,90133],{"class":55},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[49,90135,90136,90139,90141],{"class":51,"line":2948},[49,90137,90138],{"class":66},"        console.",[49,90140,59486],{"class":62},[49,90142,90143],{"class":66},"(err.message)\n",[49,90145,90146],{"class":51,"line":2953},[49,90147,90148],{"class":55},"        \u002F\u002F 想要中断程序，需要加return\n",[49,90150,90151],{"class":51,"line":2982},[49,90152,90153],{"class":55},"        \u002F\u002F return\n",[49,90155,90156],{"class":51,"line":2987},[49,90157,90158],{"class":55},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[49,90160,90161,90164,90166,90169,90171,90174],{"class":51,"line":3004},[49,90162,90163],{"class":109},"        throw",[49,90165,12830],{"class":109},[49,90167,90168],{"class":62}," Error",[49,90170,1403],{"class":66},[49,90172,90173],{"class":1505},"'你看看，选择器错误了吧'",[49,90175,1409],{"class":66},[49,90177,90178],{"class":51,"line":3009},[49,90179,53640],{"class":66},[49,90181,90182],{"class":51,"line":3014},[49,90183,90184],{"class":55},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[49,90186,90187,90190],{"class":51,"line":3019},[49,90188,90189],{"class":109},"      finally",[49,90191,67],{"class":66},[49,90193,90194,90197,90199,90202],{"class":51,"line":3033},[49,90195,90196],{"class":62},"        alert",[49,90198,1403],{"class":66},[49,90200,90201],{"class":1505},"'弹出对话框'",[49,90203,1409],{"class":66},[49,90205,90206],{"class":51,"line":3038},[49,90207,53640],{"class":66},[49,90209,90210,90212,90214,90216,90218],{"class":51,"line":3831},[49,90211,59483],{"class":66},[49,90213,59486],{"class":62},[49,90215,1403],{"class":66},[49,90217,1863],{"class":73},[49,90219,1409],{"class":66},[49,90221,90222],{"class":51,"line":3845},[49,90223,3654],{"emptyLinePlaceholder":1330},[49,90225,90226],{"class":51,"line":3853},[49,90227,3441],{"class":66},[49,90229,90230],{"class":51,"line":3858},[49,90231,90232],{"class":55},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[49,90234,90235],{"class":51,"line":3864},[49,90236,90237],{"class":55},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[49,90239,90240,90243],{"class":51,"line":3870},[49,90241,90242],{"class":62},"    fn",[49,90244,3230],{"class":66},[49,90246,90247,90249,90251],{"class":51,"line":3875},[49,90248,53659],{"class":66},[49,90250,53055],{"class":147},[49,90252,52554],{"class":66},[49,90254,90255,90257,90259],{"class":51,"line":9200},[49,90256,53027],{"class":66},[49,90258,53042],{"class":147},[49,90260,52554],{"class":66},[49,90262,90263],{"class":51,"line":9224},[49,90264,3654],{"emptyLinePlaceholder":1330},[49,90266,90267,90269,90271],{"class":51,"line":9229},[49,90268,53027],{"class":66},[49,90270,51883],{"class":147},[49,90272,52554],{"class":66},[19,90274,90275],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[591,90277,90278],{"start":70},[26,90279,90280],{},"debugger",[19,90282,90283],{},[174,90284],{"alt":44,"src":90285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90287,90288],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90290,90292],{"id":90291},"_416-处理this","4.16 处理this",[183,90294,90296],{"id":90295},"_4161-this的指向","4.16.1 this的指向",[591,90298,90299],{},[26,90300,90301],{},"普通函数的this",[19,90303,90304],{},[174,90305],{"alt":44,"src":90306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[591,90308,90309],{"start":59},[26,90310,90311],{},"箭头函数的this",[19,90313,90314],{},[174,90315],{"alt":44,"src":90316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90318,90319],{},[174,90320],{"alt":44,"src":90321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90323,90324],{},[174,90325],{"alt":44,"src":90326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[183,90328,90330],{"id":90329},"_4162-this的改变","4.16.2 this的改变",[19,90332,90333],{},"call() apply() bind()",[591,90335,90336],{},[26,90337,90338],{},"call()",[19,90340,90341],{},[174,90342],{"alt":44,"src":90343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90345,90346],{},"两个作用：①调用函数；②改变this指向",[39,90348,90350],{"className":54309,"code":90349,"language":54311,"meta":44,"style":44},"\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",[46,90351,90352,90360,90368,90372,90377,90381,90386,90391,90396,90400,90405,90413],{"__ignoreMap":44},[49,90353,90354,90356,90358],{"class":51,"line":52},[49,90355,2300],{"class":66},[49,90357,53042],{"class":147},[49,90359,52554],{"class":66},[49,90361,90362,90364,90366],{"class":51,"line":59},[49,90363,53386],{"class":66},[49,90365,53055],{"class":147},[49,90367,52554],{"class":66},[49,90369,90370],{"class":51,"line":70},[49,90371,72753],{"class":66},[49,90373,90374],{"class":51,"line":86},[49,90375,90376],{"class":66},"      uname: 'pink'\n",[49,90378,90379],{"class":51,"line":98},[49,90380,3441],{"class":66},[49,90382,90383],{"class":51,"line":121},[49,90384,90385],{"class":66},"    function fn(x, y) {\n",[49,90387,90388],{"class":51,"line":134},[49,90389,90390],{"class":66},"      console.log(this)  \u002F\u002Fwindow\n",[49,90392,90393],{"class":51,"line":1085},[49,90394,90395],{"class":66},"      console.log(x + y)\n",[49,90397,90398],{"class":51,"line":2574},[49,90399,3441],{"class":66},[49,90401,90402],{"class":51,"line":2586},[49,90403,90404],{"class":66},"    fn.call(obj, 1, 2)\n",[49,90406,90407,90409,90411],{"class":51,"line":2867},[49,90408,53659],{"class":66},[49,90410,53055],{"class":147},[49,90412,52554],{"class":66},[49,90414,90415,90417,90419],{"class":51,"line":2872},[49,90416,53027],{"class":66},[49,90418,53042],{"class":147},[49,90420,52554],{"class":66},[19,90422,90423],{},[174,90424],{"alt":44,"src":90425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[591,90427,90428],{"start":59},[26,90429,90430],{},"apply()",[19,90432,90433],{},[174,90434],{"alt":44,"src":90435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90437,90346],{},[19,90439,90440],{},"call传递的是普通参数，而apply必须传递的是数组",[39,90442,90444],{"className":51881,"code":90443,"language":51883,"meta":44,"style":44},"\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",[46,90445,90446,90456,90470,90474,90482,90496,90516,90528,90536,90540,90548,90556,90566,90573,90577,90582,90598,90610,90624,90628,90633,90652,90657,90661,90666,90671,90679,90684,90706,90711,90727,90743,90755,90759,90764,90783,90791,90799,90803],{"__ignoreMap":44},[49,90447,90448,90450,90452,90454],{"class":51,"line":52},[49,90449,52545],{"class":66},[49,90451,52548],{"class":147},[49,90453,52551],{"class":62},[49,90455,52554],{"class":66},[49,90457,90458,90460,90462,90464,90466,90468],{"class":51,"line":59},[49,90459,2300],{"class":66},[49,90461,51883],{"class":147},[49,90463,52563],{"class":62},[49,90465,1448],{"class":66},[49,90467,52568],{"class":1505},[49,90469,52554],{"class":66},[49,90471,90472],{"class":51,"line":70},[49,90473,3654],{"emptyLinePlaceholder":1330},[49,90475,90476,90478,90480],{"class":51,"line":86},[49,90477,2300],{"class":66},[49,90479,52581],{"class":147},[49,90481,52554],{"class":66},[49,90483,90484,90486,90488,90490,90492,90494],{"class":51,"line":98},[49,90485,53386],{"class":66},[49,90487,52591],{"class":147},[49,90489,52594],{"class":62},[49,90491,1448],{"class":66},[49,90493,52599],{"class":1505},[49,90495,52554],{"class":66},[49,90497,90498,90500,90502,90504,90506,90508,90510,90512,90514],{"class":51,"line":121},[49,90499,53386],{"class":66},[49,90501,52591],{"class":147},[49,90503,16171],{"class":62},[49,90505,1448],{"class":66},[49,90507,52638],{"class":1505},[49,90509,52618],{"class":62},[49,90511,1448],{"class":66},[49,90513,52645],{"class":1505},[49,90515,52554],{"class":66},[49,90517,90518,90520,90522,90524,90526],{"class":51,"line":134},[49,90519,53386],{"class":66},[49,90521,52654],{"class":147},[49,90523,52657],{"class":66},[49,90525,52654],{"class":147},[49,90527,52554],{"class":66},[49,90529,90530,90532,90534],{"class":51,"line":1085},[49,90531,53027],{"class":66},[49,90533,52581],{"class":147},[49,90535,52554],{"class":66},[49,90537,90538],{"class":51,"line":2574},[49,90539,3654],{"emptyLinePlaceholder":1330},[49,90541,90542,90544,90546],{"class":51,"line":2586},[49,90543,2300],{"class":66},[49,90545,53042],{"class":147},[49,90547,52554],{"class":66},[49,90549,90550,90552,90554],{"class":51,"line":2867},[49,90551,53386],{"class":66},[49,90553,53055],{"class":147},[49,90555,52554],{"class":66},[49,90557,90558,90560,90562,90564],{"class":51,"line":2872},[49,90559,12473],{"class":109},[49,90561,71206],{"class":73},[49,90563,14816],{"class":109},[49,90565,67],{"class":66},[49,90567,90568,90570],{"class":51,"line":2878},[49,90569,72856],{"class":66},[49,90571,90572],{"class":73},"18\n",[49,90574,90575],{"class":51,"line":2883},[49,90576,3441],{"class":66},[49,90578,90579],{"class":51,"line":2897},[49,90580,90581],{"class":55},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[49,90583,90584,90586,90588,90590,90592,90594,90596],{"class":51,"line":2902},[49,90585,71319],{"class":109},[49,90587,90075],{"class":62},[49,90589,1403],{"class":66},[49,90591,2210],{"class":6468},[49,90593,13687],{"class":66},[49,90595,2235],{"class":6468},[49,90597,13694],{"class":66},[49,90599,90600,90602,90604,90606,90608],{"class":51,"line":2908},[49,90601,59483],{"class":66},[49,90603,59486],{"class":62},[49,90605,1403],{"class":66},[49,90607,88218],{"class":73},[49,90609,1409],{"class":66},[49,90611,90612,90614,90616,90619,90621],{"class":51,"line":2929},[49,90613,59483],{"class":66},[49,90615,59486],{"class":62},[49,90617,90618],{"class":66},"(x ",[49,90620,1872],{"class":109},[49,90622,90623],{"class":66}," y)\n",[49,90625,90626],{"class":51,"line":2934},[49,90627,3441],{"class":66},[49,90629,90630],{"class":51,"line":2948},[49,90631,90632],{"class":55},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[49,90634,90635,90638,90641,90644,90646,90648,90650],{"class":51,"line":2953},[49,90636,90637],{"class":66},"    fn.",[49,90639,90640],{"class":62},"apply",[49,90642,90643],{"class":66},"(obj, [",[49,90645,159],{"class":73},[49,90647,13687],{"class":66},[49,90649,1478],{"class":73},[49,90651,5911],{"class":66},[49,90653,90654],{"class":51,"line":2982},[49,90655,90656],{"class":55},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[49,90658,90659],{"class":51,"line":2987},[49,90660,3654],{"emptyLinePlaceholder":1330},[49,90662,90663],{"class":51,"line":3004},[49,90664,90665],{"class":55},"    \u002F\u002F 使用场景：求数组最大值\n",[49,90667,90668],{"class":51,"line":3009},[49,90669,90670],{"class":55},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[49,90672,90673,90676],{"class":51,"line":3014},[49,90674,90675],{"class":55},"    \u002F\u002F console.log(max)",[49,90677,90678],{"class":55},"   \u002F\u002F3\n",[49,90680,90681],{"class":51,"line":3019},[49,90682,90683],{"class":55},"    \u002F\u002F 指向空或者Math都是可以的\n",[49,90685,90686,90688,90690,90692,90694,90696,90698,90700,90702,90704],{"class":51,"line":3033},[49,90687,12473],{"class":109},[49,90689,58934],{"class":73},[49,90691,14816],{"class":109},[49,90693,53468],{"class":66},[49,90695,1703],{"class":73},[49,90697,13687],{"class":66},[49,90699,1895],{"class":73},[49,90701,13687],{"class":66},[49,90703,1926],{"class":73},[49,90705,34494],{"class":66},[49,90707,90708],{"class":51,"line":3038},[49,90709,90710],{"class":55},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[49,90712,90713,90715,90717,90719,90722,90724],{"class":51,"line":3831},[49,90714,12473],{"class":109},[49,90716,7203],{"class":73},[49,90718,14816],{"class":109},[49,90720,90721],{"class":66}," Math.max.",[49,90723,90640],{"class":62},[49,90725,90726],{"class":66},"(Math, arr)\n",[49,90728,90729,90731,90734,90736,90739,90741],{"class":51,"line":3845},[49,90730,12473],{"class":109},[49,90732,90733],{"class":73}," min",[49,90735,14816],{"class":109},[49,90737,90738],{"class":66}," Math.min.",[49,90740,90640],{"class":62},[49,90742,90726],{"class":66},[49,90744,90745,90747,90749,90752],{"class":51,"line":3853},[49,90746,74982],{"class":66},[49,90748,59486],{"class":62},[49,90750,90751],{"class":66},"(max, min)     ",[49,90753,90754],{"class":55},"\u002F\u002F100,4\n",[49,90756,90757],{"class":51,"line":3858},[49,90758,3654],{"emptyLinePlaceholder":1330},[49,90760,90761],{"class":51,"line":3864},[49,90762,90763],{"class":55},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[49,90765,90766,90768,90770,90773,90775,90777,90780],{"class":51,"line":3870},[49,90767,74982],{"class":66},[49,90769,59486],{"class":62},[49,90771,90772],{"class":66},"(Max.",[49,90774,7267],{"class":62},[49,90776,1403],{"class":66},[49,90778,90779],{"class":109},"...",[49,90781,90782],{"class":66},"arr))\n",[49,90784,90785,90787,90789],{"class":51,"line":3875},[49,90786,53659],{"class":66},[49,90788,53055],{"class":147},[49,90790,52554],{"class":66},[49,90792,90793,90795,90797],{"class":51,"line":9200},[49,90794,53027],{"class":66},[49,90796,53042],{"class":147},[49,90798,52554],{"class":66},[49,90800,90801],{"class":51,"line":9224},[49,90802,3654],{"emptyLinePlaceholder":1330},[49,90804,90805,90807,90809],{"class":51,"line":9229},[49,90806,53027],{"class":66},[49,90808,51883],{"class":147},[49,90810,52554],{"class":66},[19,90812,90813],{},[174,90814],{"alt":44,"src":90815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[591,90817,90818],{"start":70},[26,90819,90820],{},"bind()",[19,90822,90823],{},[174,90824],{"alt":44,"src":90825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90827,90828],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90830,90831],{},"bind的语法跟call很相似",[39,90833,90835],{"className":54309,"code":90834,"language":54311,"meta":44,"style":44},"\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",[46,90836,90837,90845,90853,90857,90862,90866,90870,90875,90879,90884,90889,90894,90899,90904,90909,90914,90918,90926],{"__ignoreMap":44},[49,90838,90839,90841,90843],{"class":51,"line":52},[49,90840,2300],{"class":66},[49,90842,53042],{"class":147},[49,90844,52554],{"class":66},[49,90846,90847,90849,90851],{"class":51,"line":59},[49,90848,53386],{"class":66},[49,90850,53055],{"class":147},[49,90852,52554],{"class":66},[49,90854,90855],{"class":51,"line":70},[49,90856,72753],{"class":66},[49,90858,90859],{"class":51,"line":86},[49,90860,90861],{"class":66},"      age: 18\n",[49,90863,90864],{"class":51,"line":98},[49,90865,3441],{"class":66},[49,90867,90868],{"class":51,"line":121},[49,90869,78372],{"class":66},[49,90871,90872],{"class":51,"line":134},[49,90873,90874],{"class":66},"      console.log(this)\n",[49,90876,90877],{"class":51,"line":1085},[49,90878,3441],{"class":66},[49,90880,90881],{"class":51,"line":2574},[49,90882,90883],{"class":66},"    \u002F\u002F 1.bind 不会调用函数\n",[49,90885,90886],{"class":51,"line":2586},[49,90887,90888],{"class":66},"    \u002F\u002F 2.bind能改变this的指向\n",[49,90890,90891],{"class":51,"line":2867},[49,90892,90893],{"class":66},"    fn.bind()\n",[49,90895,90896],{"class":51,"line":2872},[49,90897,90898],{"class":66},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[49,90900,90901],{"class":51,"line":2878},[49,90902,90903],{"class":66},"    const fun = fn.bind(obj)\n",[49,90905,90906],{"class":51,"line":2883},[49,90907,90908],{"class":66},"    \u002F\u002F console.log(fun)\n",[49,90910,90911],{"class":51,"line":2897},[49,90912,90913],{"class":66},"    \u002F\u002F 调用,查看this的指向\n",[49,90915,90916],{"class":51,"line":2902},[49,90917,53893],{"class":66},[49,90919,90920,90922,90924],{"class":51,"line":2908},[49,90921,53659],{"class":66},[49,90923,53055],{"class":147},[49,90925,52554],{"class":66},[49,90927,90928,90930,90932],{"class":51,"line":2929},[49,90929,53027],{"class":66},[49,90931,53042],{"class":147},[49,90933,52554],{"class":66},[19,90935,90936],{},[174,90937],{"alt":44,"src":90938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[591,90940,90941],{"start":86},[26,90942,90943],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[39,90945,90947],{"className":54309,"code":90946,"language":54311,"meta":44,"style":44},"\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",[46,90948,90949,90957,90970,90978,90983,90987,90992,90997,91002,91007,91012,91017,91022,91027,91031,91039],{"__ignoreMap":44},[49,90950,90951,90953,90955],{"class":51,"line":52},[49,90952,2300],{"class":66},[49,90954,53042],{"class":147},[49,90956,52554],{"class":66},[49,90958,90959,90961,90963,90966,90968],{"class":51,"line":59},[49,90960,53386],{"class":66},[49,90962,55128],{"class":147},[49,90964,90965],{"class":66},">禁用\u003C\u002F",[49,90967,55128],{"class":147},[49,90969,52554],{"class":66},[49,90971,90972,90974,90976],{"class":51,"line":70},[49,90973,53386],{"class":66},[49,90975,53055],{"class":147},[49,90977,52554],{"class":66},[49,90979,90980],{"class":51,"line":86},[49,90981,90982],{"class":66},"    const btn = document.querySelector('button')\n",[49,90984,90985],{"class":51,"line":98},[49,90986,60255],{"class":66},[49,90988,90989],{"class":51,"line":121},[49,90990,90991],{"class":66},"      this.disabled = true\n",[49,90993,90994],{"class":51,"line":134},[49,90995,90996],{"class":66},"      \u002F\u002F 定时器是window进行调用的\n",[49,90998,90999],{"class":51,"line":1085},[49,91000,91001],{"class":66},"      setTimeout(function () {\n",[49,91003,91004],{"class":51,"line":2574},[49,91005,91006],{"class":66},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[49,91008,91009],{"class":51,"line":2586},[49,91010,91011],{"class":66},"        this.disabled = false\n",[49,91013,91014],{"class":51,"line":2867},[49,91015,91016],{"class":66},"      }.bind(this), 2000)\n",[49,91018,91019],{"class":51,"line":2872},[49,91020,91021],{"class":66},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[49,91023,91024],{"class":51,"line":2878},[49,91025,91026],{"class":66},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[49,91028,91029],{"class":51,"line":2883},[49,91030,34709],{"class":66},[49,91032,91033,91035,91037],{"class":51,"line":2897},[49,91034,53659],{"class":66},[49,91036,53055],{"class":147},[49,91038,52554],{"class":66},[49,91040,91041,91043,91045],{"class":51,"line":2902},[49,91042,53027],{"class":66},[49,91044,53042],{"class":147},[49,91046,52554],{"class":66},[591,91048,91049],{"start":98},[26,91050,23203],{},[19,91052,91053],{},[174,91054],{"alt":44,"src":91055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91057,91059],{"id":91058},"_417-性能优化","4.17 性能优化",[183,91061,91063],{"id":91062},"_4171-防抖","4.17.1 防抖",[19,91065,91066],{},[174,91067],{"alt":44,"src":91068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91070,91071],{},[485,91072,91073],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91075,91076],{},"防抖实现方式：",[23,91078,91079],{},[26,91080,91081],{},"lodash 提供了防抖处理",[19,91083,91084],{},"_.debounce(func,[wait=0],[options={}])",[19,91086,91087],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[39,91089,91091],{"className":51881,"code":91090,"language":51883,"meta":44,"style":44},"\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",[46,91092,91093,91103,91117,91121,91129,91143,91163,91175,91183,91189,91199,91211,91223,91234,91246,91256,91266,91279,91283,91291,91299,91303,91311,91329,91347,91355,91374,91384,91393,91404,91409,91413,91418,91423,91428,91453,91461,91469,91473],{"__ignoreMap":44},[49,91094,91095,91097,91099,91101],{"class":51,"line":52},[49,91096,52545],{"class":66},[49,91098,52548],{"class":147},[49,91100,52551],{"class":62},[49,91102,52554],{"class":66},[49,91104,91105,91107,91109,91111,91113,91115],{"class":51,"line":59},[49,91106,2300],{"class":66},[49,91108,51883],{"class":147},[49,91110,52563],{"class":62},[49,91112,1448],{"class":66},[49,91114,52568],{"class":1505},[49,91116,52554],{"class":66},[49,91118,91119],{"class":51,"line":70},[49,91120,3654],{"emptyLinePlaceholder":1330},[49,91122,91123,91125,91127],{"class":51,"line":86},[49,91124,2300],{"class":66},[49,91126,52581],{"class":147},[49,91128,52554],{"class":66},[49,91130,91131,91133,91135,91137,91139,91141],{"class":51,"line":98},[49,91132,53386],{"class":66},[49,91134,52591],{"class":147},[49,91136,52594],{"class":62},[49,91138,1448],{"class":66},[49,91140,52599],{"class":1505},[49,91142,52554],{"class":66},[49,91144,91145,91147,91149,91151,91153,91155,91157,91159,91161],{"class":51,"line":121},[49,91146,53386],{"class":66},[49,91148,52591],{"class":147},[49,91150,16171],{"class":62},[49,91152,1448],{"class":66},[49,91154,52638],{"class":1505},[49,91156,52618],{"class":62},[49,91158,1448],{"class":66},[49,91160,52645],{"class":1505},[49,91162,52554],{"class":66},[49,91164,91165,91167,91169,91171,91173],{"class":51,"line":134},[49,91166,53386],{"class":66},[49,91168,52654],{"class":147},[49,91170,52657],{"class":66},[49,91172,52654],{"class":147},[49,91174,52554],{"class":66},[49,91176,91177,91179,91181],{"class":51,"line":1085},[49,91178,53386],{"class":66},[49,91180,1305],{"class":147},[49,91182,52554],{"class":66},[49,91184,91185,91187],{"class":51,"line":2574},[49,91186,55992],{"class":62},[49,91188,67],{"class":66},[49,91190,91191,91193,91195,91197],{"class":51,"line":2586},[49,91192,73825],{"class":73},[49,91194,77],{"class":66},[49,91196,61744],{"class":73},[49,91198,83],{"class":66},[49,91200,91201,91203,91205,91207,91209],{"class":51,"line":2867},[49,91202,56010],{"class":73},[49,91204,77],{"class":66},[49,91206,2977],{"class":73},[49,91208,110],{"class":109},[49,91210,83],{"class":66},[49,91212,91213,91215,91217,91219,91221],{"class":51,"line":2872},[49,91214,56024],{"class":73},[49,91216,77],{"class":66},[49,91218,2977],{"class":73},[49,91220,110],{"class":109},[49,91222,83],{"class":66},[49,91224,91225,91227,91229,91232],{"class":51,"line":2878},[49,91226,56123],{"class":73},[49,91228,77],{"class":66},[49,91230,91231],{"class":73},"gray",[49,91233,83],{"class":66},[49,91235,91236,91238,91240,91242,91244],{"class":51,"line":2883},[49,91237,56161],{"class":73},[49,91239,77],{"class":66},[49,91241,2215],{"class":73},[49,91243,110],{"class":109},[49,91245,83],{"class":66},[49,91247,91248,91250,91252,91254],{"class":51,"line":2897},[49,91249,58655],{"class":73},[49,91251,77],{"class":66},[49,91253,62081],{"class":73},[49,91255,83],{"class":66},[49,91257,91258,91260,91262,91264],{"class":51,"line":2902},[49,91259,58525],{"class":73},[49,91261,77],{"class":66},[49,91263,52835],{"class":73},[49,91265,83],{"class":66},[49,91267,91268,91271,91273,91275,91277],{"class":51,"line":2908},[49,91269,91270],{"class":73},"      padding-top",[49,91272,77],{"class":66},[49,91274,1711],{"class":73},[49,91276,110],{"class":109},[49,91278,83],{"class":66},[49,91280,91281],{"class":51,"line":2929},[49,91282,3441],{"class":66},[49,91284,91285,91287,91289],{"class":51,"line":2934},[49,91286,53659],{"class":66},[49,91288,1305],{"class":147},[49,91290,52554],{"class":66},[49,91292,91293,91295,91297],{"class":51,"line":2948},[49,91294,53027],{"class":66},[49,91296,52581],{"class":147},[49,91298,52554],{"class":66},[49,91300,91301],{"class":51,"line":2953},[49,91302,3654],{"emptyLinePlaceholder":1330},[49,91304,91305,91307,91309],{"class":51,"line":2982},[49,91306,2300],{"class":66},[49,91308,53042],{"class":147},[49,91310,52554],{"class":66},[49,91312,91313,91315,91317,91319,91321,91323,91325,91327],{"class":51,"line":2987},[49,91314,53386],{"class":66},[49,91316,148],{"class":147},[49,91318,54728],{"class":62},[49,91320,1448],{"class":66},[49,91322,54733],{"class":1505},[49,91324,56553],{"class":66},[49,91326,148],{"class":147},[49,91328,52554],{"class":66},[49,91330,91331,91333,91335,91337,91339,91341,91343,91345],{"class":51,"line":3004},[49,91332,53386],{"class":66},[49,91334,53055],{"class":147},[49,91336,56478],{"class":62},[49,91338,1448],{"class":66},[49,91340,89499],{"class":1505},[49,91342,56553],{"class":66},[49,91344,53055],{"class":147},[49,91346,52554],{"class":66},[49,91348,91349,91351,91353],{"class":51,"line":3009},[49,91350,53386],{"class":66},[49,91352,53055],{"class":147},[49,91354,52554],{"class":66},[49,91356,91357,91359,91361,91363,91365,91367,91369,91372],{"class":51,"line":3014},[49,91358,12473],{"class":109},[49,91360,88158],{"class":73},[49,91362,14816],{"class":109},[49,91364,55637],{"class":66},[49,91366,55640],{"class":62},[49,91368,1403],{"class":66},[49,91370,91371],{"class":1505},"'.box'",[49,91373,1409],{"class":66},[49,91375,91376,91378,91380,91382],{"class":51,"line":3019},[49,91377,53461],{"class":109},[49,91379,10690],{"class":66},[49,91381,1448],{"class":109},[49,91383,48581],{"class":73},[49,91385,91386,91388,91391],{"class":51,"line":3033},[49,91387,71319],{"class":109},[49,91389,91390],{"class":62}," mouseMove",[49,91392,12105],{"class":66},[49,91394,91395,91398,91400,91402],{"class":51,"line":3038},[49,91396,91397],{"class":66},"      box.innerHTML ",[49,91399,1448],{"class":109},[49,91401,4286],{"class":66},[49,91403,3956],{"class":109},[49,91405,91406],{"class":51,"line":3831},[49,91407,91408],{"class":55},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[49,91410,91411],{"class":51,"line":3845},[49,91412,3441],{"class":66},[49,91414,91415],{"class":51,"line":3853},[49,91416,91417],{"class":55},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[49,91419,91420],{"class":51,"line":3858},[49,91421,91422],{"class":55},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[49,91424,91425],{"class":51,"line":3864},[49,91426,91427],{"class":55},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[49,91429,91430,91433,91435,91437,91440,91443,91446,91449,91451],{"class":51,"line":3870},[49,91431,91432],{"class":66},"    box.",[49,91434,59052],{"class":62},[49,91436,1403],{"class":66},[49,91438,91439],{"class":1505},"'mousemove'",[49,91441,91442],{"class":66},", _.",[49,91444,91445],{"class":62},"debounce",[49,91447,91448],{"class":66},"(mouseMove, ",[49,91450,66309],{"class":73},[49,91452,31745],{"class":66},[49,91454,91455,91457,91459],{"class":51,"line":3875},[49,91456,53659],{"class":66},[49,91458,53055],{"class":147},[49,91460,52554],{"class":66},[49,91462,91463,91465,91467],{"class":51,"line":9200},[49,91464,53027],{"class":66},[49,91466,53042],{"class":147},[49,91468,52554],{"class":66},[49,91470,91471],{"class":51,"line":9224},[49,91472,3654],{"emptyLinePlaceholder":1330},[49,91474,91475,91477,91479],{"class":51,"line":9229},[49,91476,53027],{"class":66},[49,91478,51883],{"class":147},[49,91480,52554],{"class":66},[23,91482,91483],{},[26,91484,91485],{},"手写一个防抖函数来处理",[19,91487,91488],{},"防抖的核心就是利用定时器来实现的：",[19,91490,91491],{},"①声明一个定时器变量",[19,91493,91494],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,91496,91497],{},"③如果没有定时器则开启定时器，记得存到变量里面",[39,91499,91501],{"className":51881,"code":91500,"language":51883,"meta":44,"style":44},"\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",[46,91502,91503,91513,91527,91531,91539,91553,91573,91585,91593,91599,91609,91621,91633,91643,91655,91665,91675,91687,91691,91699,91707,91711,91719,91737,91755,91763,91781,91791,91799,91809,91813,91817,91821,91826,91831,91836,91841,91846,91851,91869,91876,91881,91889,91894,91907,91923,91933,91938,91942,91946,91966,91970,91975,91980,91985,91990,91998,92006,92010],{"__ignoreMap":44},[49,91504,91505,91507,91509,91511],{"class":51,"line":52},[49,91506,52545],{"class":66},[49,91508,52548],{"class":147},[49,91510,52551],{"class":62},[49,91512,52554],{"class":66},[49,91514,91515,91517,91519,91521,91523,91525],{"class":51,"line":59},[49,91516,2300],{"class":66},[49,91518,51883],{"class":147},[49,91520,52563],{"class":62},[49,91522,1448],{"class":66},[49,91524,52568],{"class":1505},[49,91526,52554],{"class":66},[49,91528,91529],{"class":51,"line":70},[49,91530,3654],{"emptyLinePlaceholder":1330},[49,91532,91533,91535,91537],{"class":51,"line":86},[49,91534,2300],{"class":66},[49,91536,52581],{"class":147},[49,91538,52554],{"class":66},[49,91540,91541,91543,91545,91547,91549,91551],{"class":51,"line":98},[49,91542,53386],{"class":66},[49,91544,52591],{"class":147},[49,91546,52594],{"class":62},[49,91548,1448],{"class":66},[49,91550,52599],{"class":1505},[49,91552,52554],{"class":66},[49,91554,91555,91557,91559,91561,91563,91565,91567,91569,91571],{"class":51,"line":121},[49,91556,53386],{"class":66},[49,91558,52591],{"class":147},[49,91560,16171],{"class":62},[49,91562,1448],{"class":66},[49,91564,52638],{"class":1505},[49,91566,52618],{"class":62},[49,91568,1448],{"class":66},[49,91570,52645],{"class":1505},[49,91572,52554],{"class":66},[49,91574,91575,91577,91579,91581,91583],{"class":51,"line":134},[49,91576,53386],{"class":66},[49,91578,52654],{"class":147},[49,91580,52657],{"class":66},[49,91582,52654],{"class":147},[49,91584,52554],{"class":66},[49,91586,91587,91589,91591],{"class":51,"line":1085},[49,91588,53386],{"class":66},[49,91590,1305],{"class":147},[49,91592,52554],{"class":66},[49,91594,91595,91597],{"class":51,"line":2574},[49,91596,55992],{"class":62},[49,91598,67],{"class":66},[49,91600,91601,91603,91605,91607],{"class":51,"line":2586},[49,91602,73825],{"class":73},[49,91604,77],{"class":66},[49,91606,61744],{"class":73},[49,91608,83],{"class":66},[49,91610,91611,91613,91615,91617,91619],{"class":51,"line":2867},[49,91612,56010],{"class":73},[49,91614,77],{"class":66},[49,91616,2977],{"class":73},[49,91618,110],{"class":109},[49,91620,83],{"class":66},[49,91622,91623,91625,91627,91629,91631],{"class":51,"line":2872},[49,91624,56024],{"class":73},[49,91626,77],{"class":66},[49,91628,2977],{"class":73},[49,91630,110],{"class":109},[49,91632,83],{"class":66},[49,91634,91635,91637,91639,91641],{"class":51,"line":2878},[49,91636,56123],{"class":73},[49,91638,77],{"class":66},[49,91640,91231],{"class":73},[49,91642,83],{"class":66},[49,91644,91645,91647,91649,91651,91653],{"class":51,"line":2883},[49,91646,56161],{"class":73},[49,91648,77],{"class":66},[49,91650,2215],{"class":73},[49,91652,110],{"class":109},[49,91654,83],{"class":66},[49,91656,91657,91659,91661,91663],{"class":51,"line":2897},[49,91658,58655],{"class":73},[49,91660,77],{"class":66},[49,91662,62081],{"class":73},[49,91664,83],{"class":66},[49,91666,91667,91669,91671,91673],{"class":51,"line":2902},[49,91668,58525],{"class":73},[49,91670,77],{"class":66},[49,91672,52835],{"class":73},[49,91674,83],{"class":66},[49,91676,91677,91679,91681,91683,91685],{"class":51,"line":2908},[49,91678,91270],{"class":73},[49,91680,77],{"class":66},[49,91682,1711],{"class":73},[49,91684,110],{"class":109},[49,91686,83],{"class":66},[49,91688,91689],{"class":51,"line":2929},[49,91690,3441],{"class":66},[49,91692,91693,91695,91697],{"class":51,"line":2934},[49,91694,53659],{"class":66},[49,91696,1305],{"class":147},[49,91698,52554],{"class":66},[49,91700,91701,91703,91705],{"class":51,"line":2948},[49,91702,53027],{"class":66},[49,91704,52581],{"class":147},[49,91706,52554],{"class":66},[49,91708,91709],{"class":51,"line":2953},[49,91710,3654],{"emptyLinePlaceholder":1330},[49,91712,91713,91715,91717],{"class":51,"line":2982},[49,91714,2300],{"class":66},[49,91716,53042],{"class":147},[49,91718,52554],{"class":66},[49,91720,91721,91723,91725,91727,91729,91731,91733,91735],{"class":51,"line":2987},[49,91722,53386],{"class":66},[49,91724,148],{"class":147},[49,91726,54728],{"class":62},[49,91728,1448],{"class":66},[49,91730,54733],{"class":1505},[49,91732,56553],{"class":66},[49,91734,148],{"class":147},[49,91736,52554],{"class":66},[49,91738,91739,91741,91743,91745,91747,91749,91751,91753],{"class":51,"line":3004},[49,91740,53386],{"class":66},[49,91742,53055],{"class":147},[49,91744,56478],{"class":62},[49,91746,1448],{"class":66},[49,91748,89499],{"class":1505},[49,91750,56553],{"class":66},[49,91752,53055],{"class":147},[49,91754,52554],{"class":66},[49,91756,91757,91759,91761],{"class":51,"line":3009},[49,91758,53386],{"class":66},[49,91760,53055],{"class":147},[49,91762,52554],{"class":66},[49,91764,91765,91767,91769,91771,91773,91775,91777,91779],{"class":51,"line":3014},[49,91766,12473],{"class":109},[49,91768,88158],{"class":73},[49,91770,14816],{"class":109},[49,91772,55637],{"class":66},[49,91774,55640],{"class":62},[49,91776,1403],{"class":66},[49,91778,91371],{"class":1505},[49,91780,1409],{"class":66},[49,91782,91783,91785,91787,91789],{"class":51,"line":3019},[49,91784,53461],{"class":109},[49,91786,10690],{"class":66},[49,91788,1448],{"class":109},[49,91790,48581],{"class":73},[49,91792,91793,91795,91797],{"class":51,"line":3033},[49,91794,71319],{"class":109},[49,91796,91390],{"class":62},[49,91798,12105],{"class":66},[49,91800,91801,91803,91805,91807],{"class":51,"line":3038},[49,91802,91397],{"class":66},[49,91804,1448],{"class":109},[49,91806,4286],{"class":66},[49,91808,3956],{"class":109},[49,91810,91811],{"class":51,"line":3831},[49,91812,91408],{"class":55},[49,91814,91815],{"class":51,"line":3845},[49,91816,3441],{"class":66},[49,91818,91819],{"class":51,"line":3853},[49,91820,91417],{"class":55},[49,91822,91823],{"class":51,"line":3858},[49,91824,91825],{"class":55},"    \u002F\u002F 手写防抖函数\n",[49,91827,91828],{"class":51,"line":3864},[49,91829,91830],{"class":55},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[49,91832,91833],{"class":51,"line":3870},[49,91834,91835],{"class":55},"    \u002F\u002F 1.声明定时器变量\n",[49,91837,91838],{"class":51,"line":3875},[49,91839,91840],{"class":55},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[49,91842,91843],{"class":51,"line":9200},[49,91844,91845],{"class":55},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[49,91847,91848],{"class":51,"line":9224},[49,91849,91850],{"class":55},"    \u002F\u002F 4.定时器里面写函数调用\n",[49,91852,91853,91855,91858,91860,91863,91865,91867],{"class":51,"line":9229},[49,91854,71319],{"class":109},[49,91856,91857],{"class":62}," debounce",[49,91859,1403],{"class":66},[49,91861,91862],{"class":6468},"fn",[49,91864,13687],{"class":66},[49,91866,2110],{"class":6468},[49,91868,13694],{"class":66},[49,91870,91871,91873],{"class":51,"line":9235},[49,91872,80999],{"class":109},[49,91874,91875],{"class":66}," timer\n",[49,91877,91878],{"class":51,"line":9262},[49,91879,91880],{"class":55},"      \u002F\u002F return 返回一个匿名函数\n",[49,91882,91883,91885,91887],{"class":51,"line":9267},[49,91884,75211],{"class":109},[49,91886,60157],{"class":109},[49,91888,55693],{"class":66},[49,91890,91891],{"class":51,"line":9273},[49,91892,91893],{"class":55},"        \u002F\u002F 这里边写第二三四步\n",[49,91895,91896,91898,91901,91904],{"class":51,"line":9285},[49,91897,3751],{"class":109},[49,91899,91900],{"class":66}," (timer) ",[49,91902,91903],{"class":62},"clearTimeout",[49,91905,91906],{"class":66},"(timer)\n",[49,91908,91909,91912,91914,91917,91919,91921],{"class":51,"line":9297},[49,91910,91911],{"class":66},"        timer ",[49,91913,1448],{"class":109},[49,91915,91916],{"class":62}," setTimeout",[49,91918,1403],{"class":66},[49,91920,55690],{"class":109},[49,91922,55693],{"class":66},[49,91924,91925,91928,91930],{"class":51,"line":9309},[49,91926,91927],{"class":62},"          fn",[49,91929,14302],{"class":66},[49,91931,91932],{"class":55},"\u002F\u002F加小括号调用fn }, t)\n",[49,91934,91935],{"class":51,"line":10968},[49,91936,91937],{"class":66},"        }, t)\n",[49,91939,91940],{"class":51,"line":10993},[49,91941,53640],{"class":66},[49,91943,91944],{"class":51,"line":11016},[49,91945,3441],{"class":66},[49,91947,91948,91950,91952,91954,91956,91958,91960,91962,91964],{"class":51,"line":11040},[49,91949,91432],{"class":66},[49,91951,59052],{"class":62},[49,91953,1403],{"class":66},[49,91955,91439],{"class":1505},[49,91957,13687],{"class":66},[49,91959,91445],{"class":62},[49,91961,91448],{"class":66},[49,91963,66309],{"class":73},[49,91965,31745],{"class":66},[49,91967,91968],{"class":51,"line":11045},[49,91969,3654],{"emptyLinePlaceholder":1330},[49,91971,91972],{"class":51,"line":11050},[49,91973,91974],{"class":55},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[49,91976,91977],{"class":51,"line":11055},[49,91978,91979],{"class":55},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[49,91981,91982],{"class":51,"line":11064},[49,91983,91984],{"class":55},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[49,91986,91987],{"class":51,"line":11069},[49,91988,91989],{"class":55},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[49,91991,91992,91994,91996],{"class":51,"line":11075},[49,91993,53659],{"class":66},[49,91995,53055],{"class":147},[49,91997,52554],{"class":66},[49,91999,92000,92002,92004],{"class":51,"line":11096},[49,92001,53027],{"class":66},[49,92003,53042],{"class":147},[49,92005,52554],{"class":66},[49,92007,92008],{"class":51,"line":11102},[49,92009,3654],{"emptyLinePlaceholder":1330},[49,92011,92012,92014,92016],{"class":51,"line":11116},[49,92013,53027],{"class":66},[49,92015,51883],{"class":147},[49,92017,52554],{"class":66},[183,92019,92021],{"id":92020},"_4172-节流","4.17.2 节流",[19,92023,92024],{},[174,92025],{"alt":44,"src":92026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92028,92029],{},[174,92030],{"alt":44,"src":92031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92033,92034],{},[485,92035,92036],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92038,92039],{},"实现方式：",[23,92041,92042],{},[26,92043,92044],{},"lodash 提供的节流函数来处理",[19,92046,92047],{},"_.throttle(func,[wait=0],[options=])",[19,92049,92050],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[39,92052,92054],{"className":51881,"code":92053,"language":51883,"meta":44,"style":44},"\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",[46,92055,92056,92066,92080,92084,92092,92106,92126,92138,92146,92152,92162,92174,92186,92196,92208,92218,92228,92240,92244,92252,92260,92264,92272,92290,92308,92316,92334,92344,92352,92362,92366,92370,92374,92379,92384,92405,92413,92421,92425],{"__ignoreMap":44},[49,92057,92058,92060,92062,92064],{"class":51,"line":52},[49,92059,52545],{"class":66},[49,92061,52548],{"class":147},[49,92063,52551],{"class":62},[49,92065,52554],{"class":66},[49,92067,92068,92070,92072,92074,92076,92078],{"class":51,"line":59},[49,92069,2300],{"class":66},[49,92071,51883],{"class":147},[49,92073,52563],{"class":62},[49,92075,1448],{"class":66},[49,92077,52568],{"class":1505},[49,92079,52554],{"class":66},[49,92081,92082],{"class":51,"line":70},[49,92083,3654],{"emptyLinePlaceholder":1330},[49,92085,92086,92088,92090],{"class":51,"line":86},[49,92087,2300],{"class":66},[49,92089,52581],{"class":147},[49,92091,52554],{"class":66},[49,92093,92094,92096,92098,92100,92102,92104],{"class":51,"line":98},[49,92095,53386],{"class":66},[49,92097,52591],{"class":147},[49,92099,52594],{"class":62},[49,92101,1448],{"class":66},[49,92103,52599],{"class":1505},[49,92105,52554],{"class":66},[49,92107,92108,92110,92112,92114,92116,92118,92120,92122,92124],{"class":51,"line":121},[49,92109,53386],{"class":66},[49,92111,52591],{"class":147},[49,92113,16171],{"class":62},[49,92115,1448],{"class":66},[49,92117,52638],{"class":1505},[49,92119,52618],{"class":62},[49,92121,1448],{"class":66},[49,92123,52645],{"class":1505},[49,92125,52554],{"class":66},[49,92127,92128,92130,92132,92134,92136],{"class":51,"line":134},[49,92129,53386],{"class":66},[49,92131,52654],{"class":147},[49,92133,52657],{"class":66},[49,92135,52654],{"class":147},[49,92137,52554],{"class":66},[49,92139,92140,92142,92144],{"class":51,"line":1085},[49,92141,53386],{"class":66},[49,92143,1305],{"class":147},[49,92145,52554],{"class":66},[49,92147,92148,92150],{"class":51,"line":2574},[49,92149,55992],{"class":62},[49,92151,67],{"class":66},[49,92153,92154,92156,92158,92160],{"class":51,"line":2586},[49,92155,73825],{"class":73},[49,92157,77],{"class":66},[49,92159,61744],{"class":73},[49,92161,83],{"class":66},[49,92163,92164,92166,92168,92170,92172],{"class":51,"line":2867},[49,92165,56010],{"class":73},[49,92167,77],{"class":66},[49,92169,2977],{"class":73},[49,92171,110],{"class":109},[49,92173,83],{"class":66},[49,92175,92176,92178,92180,92182,92184],{"class":51,"line":2872},[49,92177,56024],{"class":73},[49,92179,77],{"class":66},[49,92181,2977],{"class":73},[49,92183,110],{"class":109},[49,92185,83],{"class":66},[49,92187,92188,92190,92192,92194],{"class":51,"line":2878},[49,92189,56123],{"class":73},[49,92191,77],{"class":66},[49,92193,91231],{"class":73},[49,92195,83],{"class":66},[49,92197,92198,92200,92202,92204,92206],{"class":51,"line":2883},[49,92199,56161],{"class":73},[49,92201,77],{"class":66},[49,92203,2215],{"class":73},[49,92205,110],{"class":109},[49,92207,83],{"class":66},[49,92209,92210,92212,92214,92216],{"class":51,"line":2897},[49,92211,58655],{"class":73},[49,92213,77],{"class":66},[49,92215,62081],{"class":73},[49,92217,83],{"class":66},[49,92219,92220,92222,92224,92226],{"class":51,"line":2902},[49,92221,58525],{"class":73},[49,92223,77],{"class":66},[49,92225,52835],{"class":73},[49,92227,83],{"class":66},[49,92229,92230,92232,92234,92236,92238],{"class":51,"line":2908},[49,92231,91270],{"class":73},[49,92233,77],{"class":66},[49,92235,1711],{"class":73},[49,92237,110],{"class":109},[49,92239,83],{"class":66},[49,92241,92242],{"class":51,"line":2929},[49,92243,3441],{"class":66},[49,92245,92246,92248,92250],{"class":51,"line":2934},[49,92247,53659],{"class":66},[49,92249,1305],{"class":147},[49,92251,52554],{"class":66},[49,92253,92254,92256,92258],{"class":51,"line":2948},[49,92255,53027],{"class":66},[49,92257,52581],{"class":147},[49,92259,52554],{"class":66},[49,92261,92262],{"class":51,"line":2953},[49,92263,3654],{"emptyLinePlaceholder":1330},[49,92265,92266,92268,92270],{"class":51,"line":2982},[49,92267,2300],{"class":66},[49,92269,53042],{"class":147},[49,92271,52554],{"class":66},[49,92273,92274,92276,92278,92280,92282,92284,92286,92288],{"class":51,"line":2987},[49,92275,53386],{"class":66},[49,92277,148],{"class":147},[49,92279,54728],{"class":62},[49,92281,1448],{"class":66},[49,92283,54733],{"class":1505},[49,92285,56553],{"class":66},[49,92287,148],{"class":147},[49,92289,52554],{"class":66},[49,92291,92292,92294,92296,92298,92300,92302,92304,92306],{"class":51,"line":3004},[49,92293,53386],{"class":66},[49,92295,53055],{"class":147},[49,92297,56478],{"class":62},[49,92299,1448],{"class":66},[49,92301,89499],{"class":1505},[49,92303,56553],{"class":66},[49,92305,53055],{"class":147},[49,92307,52554],{"class":66},[49,92309,92310,92312,92314],{"class":51,"line":3009},[49,92311,53386],{"class":66},[49,92313,53055],{"class":147},[49,92315,52554],{"class":66},[49,92317,92318,92320,92322,92324,92326,92328,92330,92332],{"class":51,"line":3014},[49,92319,12473],{"class":109},[49,92321,88158],{"class":73},[49,92323,14816],{"class":109},[49,92325,55637],{"class":66},[49,92327,55640],{"class":62},[49,92329,1403],{"class":66},[49,92331,91371],{"class":1505},[49,92333,1409],{"class":66},[49,92335,92336,92338,92340,92342],{"class":51,"line":3019},[49,92337,53461],{"class":109},[49,92339,10690],{"class":66},[49,92341,1448],{"class":109},[49,92343,48581],{"class":73},[49,92345,92346,92348,92350],{"class":51,"line":3033},[49,92347,71319],{"class":109},[49,92349,91390],{"class":62},[49,92351,12105],{"class":66},[49,92353,92354,92356,92358,92360],{"class":51,"line":3038},[49,92355,91397],{"class":66},[49,92357,1448],{"class":109},[49,92359,4286],{"class":66},[49,92361,3956],{"class":109},[49,92363,92364],{"class":51,"line":3831},[49,92365,91408],{"class":55},[49,92367,92368],{"class":51,"line":3845},[49,92369,3441],{"class":66},[49,92371,92372],{"class":51,"line":3853},[49,92373,91417],{"class":55},[49,92375,92376],{"class":51,"line":3858},[49,92377,92378],{"class":55},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[49,92380,92381],{"class":51,"line":3864},[49,92382,92383],{"class":55},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[49,92385,92386,92388,92390,92392,92394,92396,92399,92401,92403],{"class":51,"line":3870},[49,92387,91432],{"class":66},[49,92389,59052],{"class":62},[49,92391,1403],{"class":66},[49,92393,91439],{"class":1505},[49,92395,91442],{"class":66},[49,92397,92398],{"class":62},"throttle",[49,92400,91448],{"class":66},[49,92402,66309],{"class":73},[49,92404,31745],{"class":66},[49,92406,92407,92409,92411],{"class":51,"line":3875},[49,92408,53659],{"class":66},[49,92410,53055],{"class":147},[49,92412,52554],{"class":66},[49,92414,92415,92417,92419],{"class":51,"line":9200},[49,92416,53027],{"class":66},[49,92418,53042],{"class":147},[49,92420,52554],{"class":66},[49,92422,92423],{"class":51,"line":9224},[49,92424,3654],{"emptyLinePlaceholder":1330},[49,92426,92427,92429,92431],{"class":51,"line":9229},[49,92428,53027],{"class":66},[49,92430,51883],{"class":147},[49,92432,52554],{"class":66},[23,92434,92435],{},[26,92436,92437],{},"手写一个节流函数来处理",[19,92439,72182],{},[19,92441,91491],{},[19,92443,92444],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92446,92447],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[39,92449,92451],{"className":51881,"code":92450,"language":51883,"meta":44,"style":44},"\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",[46,92452,92453,92463,92477,92481,92489,92503,92523,92535,92543,92549,92559,92571,92583,92593,92605,92615,92625,92637,92641,92649,92657,92661,92669,92687,92705,92713,92731,92741,92749,92759,92763,92767,92771,92776,92781,92786,92791,92796,92801,92818,92824,92832,92843,92858,92865,92870,92875,92885,92890,92895,92900,92904,92908,92912,92932,92940,92948,92952],{"__ignoreMap":44},[49,92454,92455,92457,92459,92461],{"class":51,"line":52},[49,92456,52545],{"class":66},[49,92458,52548],{"class":147},[49,92460,52551],{"class":62},[49,92462,52554],{"class":66},[49,92464,92465,92467,92469,92471,92473,92475],{"class":51,"line":59},[49,92466,2300],{"class":66},[49,92468,51883],{"class":147},[49,92470,52563],{"class":62},[49,92472,1448],{"class":66},[49,92474,52568],{"class":1505},[49,92476,52554],{"class":66},[49,92478,92479],{"class":51,"line":70},[49,92480,3654],{"emptyLinePlaceholder":1330},[49,92482,92483,92485,92487],{"class":51,"line":86},[49,92484,2300],{"class":66},[49,92486,52581],{"class":147},[49,92488,52554],{"class":66},[49,92490,92491,92493,92495,92497,92499,92501],{"class":51,"line":98},[49,92492,53386],{"class":66},[49,92494,52591],{"class":147},[49,92496,52594],{"class":62},[49,92498,1448],{"class":66},[49,92500,52599],{"class":1505},[49,92502,52554],{"class":66},[49,92504,92505,92507,92509,92511,92513,92515,92517,92519,92521],{"class":51,"line":121},[49,92506,53386],{"class":66},[49,92508,52591],{"class":147},[49,92510,16171],{"class":62},[49,92512,1448],{"class":66},[49,92514,52638],{"class":1505},[49,92516,52618],{"class":62},[49,92518,1448],{"class":66},[49,92520,52645],{"class":1505},[49,92522,52554],{"class":66},[49,92524,92525,92527,92529,92531,92533],{"class":51,"line":134},[49,92526,53386],{"class":66},[49,92528,52654],{"class":147},[49,92530,52657],{"class":66},[49,92532,52654],{"class":147},[49,92534,52554],{"class":66},[49,92536,92537,92539,92541],{"class":51,"line":1085},[49,92538,53386],{"class":66},[49,92540,1305],{"class":147},[49,92542,52554],{"class":66},[49,92544,92545,92547],{"class":51,"line":2574},[49,92546,55992],{"class":62},[49,92548,67],{"class":66},[49,92550,92551,92553,92555,92557],{"class":51,"line":2586},[49,92552,73825],{"class":73},[49,92554,77],{"class":66},[49,92556,61744],{"class":73},[49,92558,83],{"class":66},[49,92560,92561,92563,92565,92567,92569],{"class":51,"line":2867},[49,92562,56010],{"class":73},[49,92564,77],{"class":66},[49,92566,2977],{"class":73},[49,92568,110],{"class":109},[49,92570,83],{"class":66},[49,92572,92573,92575,92577,92579,92581],{"class":51,"line":2872},[49,92574,56024],{"class":73},[49,92576,77],{"class":66},[49,92578,2977],{"class":73},[49,92580,110],{"class":109},[49,92582,83],{"class":66},[49,92584,92585,92587,92589,92591],{"class":51,"line":2878},[49,92586,56123],{"class":73},[49,92588,77],{"class":66},[49,92590,91231],{"class":73},[49,92592,83],{"class":66},[49,92594,92595,92597,92599,92601,92603],{"class":51,"line":2883},[49,92596,56161],{"class":73},[49,92598,77],{"class":66},[49,92600,2215],{"class":73},[49,92602,110],{"class":109},[49,92604,83],{"class":66},[49,92606,92607,92609,92611,92613],{"class":51,"line":2897},[49,92608,58655],{"class":73},[49,92610,77],{"class":66},[49,92612,62081],{"class":73},[49,92614,83],{"class":66},[49,92616,92617,92619,92621,92623],{"class":51,"line":2902},[49,92618,58525],{"class":73},[49,92620,77],{"class":66},[49,92622,52835],{"class":73},[49,92624,83],{"class":66},[49,92626,92627,92629,92631,92633,92635],{"class":51,"line":2908},[49,92628,91270],{"class":73},[49,92630,77],{"class":66},[49,92632,1711],{"class":73},[49,92634,110],{"class":109},[49,92636,83],{"class":66},[49,92638,92639],{"class":51,"line":2929},[49,92640,3441],{"class":66},[49,92642,92643,92645,92647],{"class":51,"line":2934},[49,92644,53659],{"class":66},[49,92646,1305],{"class":147},[49,92648,52554],{"class":66},[49,92650,92651,92653,92655],{"class":51,"line":2948},[49,92652,53027],{"class":66},[49,92654,52581],{"class":147},[49,92656,52554],{"class":66},[49,92658,92659],{"class":51,"line":2953},[49,92660,3654],{"emptyLinePlaceholder":1330},[49,92662,92663,92665,92667],{"class":51,"line":2982},[49,92664,2300],{"class":66},[49,92666,53042],{"class":147},[49,92668,52554],{"class":66},[49,92670,92671,92673,92675,92677,92679,92681,92683,92685],{"class":51,"line":2987},[49,92672,53386],{"class":66},[49,92674,148],{"class":147},[49,92676,54728],{"class":62},[49,92678,1448],{"class":66},[49,92680,54733],{"class":1505},[49,92682,56553],{"class":66},[49,92684,148],{"class":147},[49,92686,52554],{"class":66},[49,92688,92689,92691,92693,92695,92697,92699,92701,92703],{"class":51,"line":3004},[49,92690,53386],{"class":66},[49,92692,53055],{"class":147},[49,92694,56478],{"class":62},[49,92696,1448],{"class":66},[49,92698,89499],{"class":1505},[49,92700,56553],{"class":66},[49,92702,53055],{"class":147},[49,92704,52554],{"class":66},[49,92706,92707,92709,92711],{"class":51,"line":3009},[49,92708,53386],{"class":66},[49,92710,53055],{"class":147},[49,92712,52554],{"class":66},[49,92714,92715,92717,92719,92721,92723,92725,92727,92729],{"class":51,"line":3014},[49,92716,12473],{"class":109},[49,92718,88158],{"class":73},[49,92720,14816],{"class":109},[49,92722,55637],{"class":66},[49,92724,55640],{"class":62},[49,92726,1403],{"class":66},[49,92728,91371],{"class":1505},[49,92730,1409],{"class":66},[49,92732,92733,92735,92737,92739],{"class":51,"line":3019},[49,92734,53461],{"class":109},[49,92736,10690],{"class":66},[49,92738,1448],{"class":109},[49,92740,48581],{"class":73},[49,92742,92743,92745,92747],{"class":51,"line":3033},[49,92744,71319],{"class":109},[49,92746,91390],{"class":62},[49,92748,12105],{"class":66},[49,92750,92751,92753,92755,92757],{"class":51,"line":3038},[49,92752,91397],{"class":66},[49,92754,1448],{"class":109},[49,92756,4286],{"class":66},[49,92758,3956],{"class":109},[49,92760,92761],{"class":51,"line":3831},[49,92762,91408],{"class":55},[49,92764,92765],{"class":51,"line":3845},[49,92766,3441],{"class":66},[49,92768,92769],{"class":51,"line":3853},[49,92770,91417],{"class":55},[49,92772,92773],{"class":51,"line":3858},[49,92774,92775],{"class":55},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[49,92777,92778],{"class":51,"line":3864},[49,92779,92780],{"class":55},"    \u002F\u002F 1.声明一个定时器变量\n",[49,92782,92783],{"class":51,"line":3870},[49,92784,92785],{"class":55},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[49,92787,92788],{"class":51,"line":3875},[49,92789,92790],{"class":55},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[49,92792,92793],{"class":51,"line":9200},[49,92794,92795],{"class":55},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[49,92797,92798],{"class":51,"line":9224},[49,92799,92800],{"class":55},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[49,92802,92803,92805,92808,92810,92812,92814,92816],{"class":51,"line":9229},[49,92804,71319],{"class":109},[49,92806,92807],{"class":62}," throttle",[49,92809,1403],{"class":66},[49,92811,91862],{"class":6468},[49,92813,13687],{"class":66},[49,92815,2110],{"class":6468},[49,92817,13694],{"class":66},[49,92819,92820,92822],{"class":51,"line":9235},[49,92821,80999],{"class":109},[49,92823,91875],{"class":66},[49,92825,92826,92828,92830],{"class":51,"line":9262},[49,92827,75211],{"class":109},[49,92829,60157],{"class":109},[49,92831,55693],{"class":66},[49,92833,92834,92836,92838,92840],{"class":51,"line":9267},[49,92835,3751],{"class":109},[49,92837,2913],{"class":66},[49,92839,1618],{"class":109},[49,92841,92842],{"class":66},"timer) {\n",[49,92844,92845,92848,92850,92852,92854,92856],{"class":51,"line":9273},[49,92846,92847],{"class":66},"          timer ",[49,92849,1448],{"class":109},[49,92851,91916],{"class":62},[49,92853,1403],{"class":66},[49,92855,55690],{"class":109},[49,92857,55693],{"class":66},[49,92859,92860,92863],{"class":51,"line":9285},[49,92861,92862],{"class":62},"            fn",[49,92864,3230],{"class":66},[49,92866,92867],{"class":51,"line":9297},[49,92868,92869],{"class":55},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[49,92871,92872],{"class":51,"line":9309},[49,92873,92874],{"class":55},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[49,92876,92877,92880,92882],{"class":51,"line":10968},[49,92878,92879],{"class":66},"            timer ",[49,92881,1448],{"class":109},[49,92883,92884],{"class":73}," null\n",[49,92886,92887],{"class":51,"line":10993},[49,92888,92889],{"class":55},"            \u002F\u002F 不能用clearTimeout(timer)\n",[49,92891,92892],{"class":51,"line":11016},[49,92893,92894],{"class":55},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[49,92896,92897],{"class":51,"line":11040},[49,92898,92899],{"class":66},"          }, t)\n",[49,92901,92902],{"class":51,"line":11045},[49,92903,3783],{"class":66},[49,92905,92906],{"class":51,"line":11050},[49,92907,53640],{"class":66},[49,92909,92910],{"class":51,"line":11055},[49,92911,3441],{"class":66},[49,92913,92914,92916,92918,92920,92922,92924,92926,92928,92930],{"class":51,"line":11064},[49,92915,91432],{"class":66},[49,92917,59052],{"class":62},[49,92919,1403],{"class":66},[49,92921,91439],{"class":1505},[49,92923,13687],{"class":66},[49,92925,92398],{"class":62},[49,92927,91448],{"class":66},[49,92929,66309],{"class":73},[49,92931,31745],{"class":66},[49,92933,92934,92936,92938],{"class":51,"line":11069},[49,92935,53659],{"class":66},[49,92937,53055],{"class":147},[49,92939,52554],{"class":66},[49,92941,92942,92944,92946],{"class":51,"line":11075},[49,92943,53027],{"class":66},[49,92945,53042],{"class":147},[49,92947,52554],{"class":66},[49,92949,92950],{"class":51,"line":11096},[49,92951,3654],{"emptyLinePlaceholder":1330},[49,92953,92954,92956,92958],{"class":51,"line":11102},[49,92955,53027],{"class":66},[49,92957,51883],{"class":147},[49,92959,52554],{"class":66},[183,92961,92963],{"id":92962},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[39,92965,92967],{"className":54309,"code":92966,"language":54311,"meta":44,"style":44},"\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",[46,92968,92969,92977,92985,92990,92995,93000,93005,93009,93017],{"__ignoreMap":44},[49,92970,92971,92973,92975],{"class":51,"line":52},[49,92972,2300],{"class":66},[49,92974,53042],{"class":147},[49,92976,52554],{"class":66},[49,92978,92979,92981,92983],{"class":51,"line":59},[49,92980,53386],{"class":66},[49,92982,53055],{"class":147},[49,92984,52554],{"class":66},[49,92986,92987],{"class":51,"line":70},[49,92988,92989],{"class":66},"    let timer = null\n",[49,92991,92992],{"class":51,"line":86},[49,92993,92994],{"class":66},"    timer = setTimeout(() => {\n",[49,92996,92997],{"class":51,"line":98},[49,92998,92999],{"class":66},"      clearTimeout(timer)\n",[49,93001,93002],{"class":51,"line":121},[49,93003,93004],{"class":66},"      console.log(timer)\n",[49,93006,93007],{"class":51,"line":134},[49,93008,61464],{"class":66},[49,93010,93011,93013,93015],{"class":51,"line":1085},[49,93012,53659],{"class":66},[49,93014,53055],{"class":147},[49,93016,52554],{"class":66},[49,93018,93019,93021,93023],{"class":51,"line":2574},[49,93020,53027],{"class":66},[49,93022,53042],{"class":147},[49,93024,52554],{"class":66},[19,93026,93027],{},"输出为1",[19,93029,93030],{},"在开启的定时器里边写清除定时器",[19,93032,93033],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[183,93035,93037],{"id":93036},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93039,93040],{},"页面打开，可以记录上一次的视频播放位置",[19,93042,93043],{},[174,93044],{"alt":44,"src":93045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93047,93048],{},[174,93049],{"alt":44,"src":93050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[39,93052,93054],{"className":51881,"code":93053,"language":51883,"meta":44,"style":44},"\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",[46,93055,93056,93066,93080,93084,93092,93106,93126,93146,93168,93181,93189,93195,93205,93215,93225,93229,93233,93240,93253,93265,93269,93273,93283,93295,93309,93313,93317,93324,93334,93347,93359,93369,93379,93395,93407,93411,93415,93423,93433,93445,93455,93465,93475,93479,93483,93493,93504,93508,93516,93524,93528,93536,93551,93566,93581,93602,93610,93618,93633,93655,93663,93678,93704,93730,93756,93764,93772,93791,93799,93804,93823,93828,93846,93851,93856,93864,93869,93883,93891,93896,93913,93917,93922,93944,93948,93956,93964,93968],{"__ignoreMap":44},[49,93057,93058,93060,93062,93064],{"class":51,"line":52},[49,93059,52545],{"class":66},[49,93061,52548],{"class":147},[49,93063,52551],{"class":62},[49,93065,52554],{"class":66},[49,93067,93068,93070,93072,93074,93076,93078],{"class":51,"line":59},[49,93069,2300],{"class":66},[49,93071,51883],{"class":147},[49,93073,52563],{"class":62},[49,93075,1448],{"class":66},[49,93077,52568],{"class":1505},[49,93079,52554],{"class":66},[49,93081,93082],{"class":51,"line":70},[49,93083,3654],{"emptyLinePlaceholder":1330},[49,93085,93086,93088,93090],{"class":51,"line":86},[49,93087,2300],{"class":66},[49,93089,52581],{"class":147},[49,93091,52554],{"class":66},[49,93093,93094,93096,93098,93100,93102,93104],{"class":51,"line":98},[49,93095,53386],{"class":66},[49,93097,52591],{"class":147},[49,93099,52594],{"class":62},[49,93101,1448],{"class":66},[49,93103,52599],{"class":1505},[49,93105,60366],{"class":66},[49,93107,93108,93110,93112,93114,93116,93118,93120,93122,93124],{"class":51,"line":121},[49,93109,53386],{"class":66},[49,93111,52591],{"class":147},[49,93113,52610],{"class":62},[49,93115,1448],{"class":66},[49,93117,52615],{"class":1505},[49,93119,52618],{"class":62},[49,93121,1448],{"class":66},[49,93123,52623],{"class":1505},[49,93125,60366],{"class":66},[49,93127,93128,93130,93132,93134,93136,93138,93140,93142,93144],{"class":51,"line":134},[49,93129,53386],{"class":66},[49,93131,52591],{"class":147},[49,93133,16171],{"class":62},[49,93135,1448],{"class":66},[49,93137,52638],{"class":1505},[49,93139,52618],{"class":62},[49,93141,1448],{"class":66},[49,93143,52645],{"class":1505},[49,93145,60366],{"class":66},[49,93147,93148,93150,93152,93154,93156,93159,93161,93163,93166],{"class":51,"line":1085},[49,93149,53386],{"class":66},[49,93151,52591],{"class":147},[49,93153,16171],{"class":62},[49,93155,1448],{"class":66},[49,93157,93158],{"class":1505},"\"referrer\"",[49,93160,52618],{"class":62},[49,93162,1448],{"class":66},[49,93164,93165],{"class":1505},"\"never\"",[49,93167,60366],{"class":66},[49,93169,93170,93172,93174,93177,93179],{"class":51,"line":2574},[49,93171,53386],{"class":66},[49,93173,52654],{"class":147},[49,93175,93176],{"class":66},">综合案例\u003C\u002F",[49,93178,52654],{"class":147},[49,93180,52554],{"class":66},[49,93182,93183,93185,93187],{"class":51,"line":2586},[49,93184,53386],{"class":66},[49,93186,1305],{"class":147},[49,93188,52554],{"class":66},[49,93190,93191,93193],{"class":51,"line":2867},[49,93192,7655],{"class":147},[49,93194,67],{"class":66},[49,93196,93197,93199,93201,93203],{"class":51,"line":2872},[49,93198,55936],{"class":73},[49,93200,77],{"class":66},[49,93202,80],{"class":73},[49,93204,83],{"class":66},[49,93206,93207,93209,93211,93213],{"class":51,"line":2878},[49,93208,55947],{"class":73},[49,93210,77],{"class":66},[49,93212,80],{"class":73},[49,93214,83],{"class":66},[49,93216,93217,93219,93221,93223],{"class":51,"line":2883},[49,93218,73825],{"class":73},[49,93220,77],{"class":66},[49,93222,61744],{"class":73},[49,93224,83],{"class":66},[49,93226,93227],{"class":51,"line":2897},[49,93228,3441],{"class":66},[49,93230,93231],{"class":51,"line":2902},[49,93232,3654],{"emptyLinePlaceholder":1330},[49,93234,93235,93238],{"class":51,"line":2908},[49,93236,93237],{"class":62},"    .container",[49,93239,67],{"class":66},[49,93241,93242,93244,93246,93249,93251],{"class":51,"line":2929},[49,93243,56010],{"class":73},[49,93245,77],{"class":66},[49,93247,93248],{"class":73},"1200",[49,93250,110],{"class":109},[49,93252,83],{"class":66},[49,93254,93255,93257,93259,93261,93263],{"class":51,"line":2934},[49,93256,55947],{"class":73},[49,93258,77],{"class":66},[49,93260,80],{"class":73},[49,93262,1077],{"class":73},[49,93264,83],{"class":66},[49,93266,93267],{"class":51,"line":2948},[49,93268,3441],{"class":66},[49,93270,93271],{"class":51,"line":2953},[49,93272,3654],{"emptyLinePlaceholder":1330},[49,93274,93275,93278,93281],{"class":51,"line":2982},[49,93276,93277],{"class":62},"    .video",[49,93279,93280],{"class":147}," video",[49,93282,67],{"class":66},[49,93284,93285,93287,93289,93291,93293],{"class":51,"line":2987},[49,93286,56010],{"class":73},[49,93288,77],{"class":66},[49,93290,1703],{"class":73},[49,93292,1720],{"class":109},[49,93294,83],{"class":66},[49,93296,93297,93299,93301,93303,93305,93307],{"class":51,"line":3004},[49,93298,55936],{"class":73},[49,93300,77],{"class":66},[49,93302,875],{"class":73},[49,93304,110],{"class":109},[49,93306,5347],{"class":73},[49,93308,83],{"class":66},[49,93310,93311],{"class":51,"line":3009},[49,93312,3441],{"class":66},[49,93314,93315],{"class":51,"line":3014},[49,93316,3654],{"emptyLinePlaceholder":1330},[49,93318,93319,93322],{"class":51,"line":3019},[49,93320,93321],{"class":62},"    .elevator",[49,93323,67],{"class":66},[49,93325,93326,93328,93330,93332],{"class":51,"line":3033},[49,93327,55999],{"class":73},[49,93329,77],{"class":66},[49,93331,87458],{"class":73},[49,93333,83],{"class":66},[49,93335,93336,93338,93340,93343,93345],{"class":51,"line":3038},[49,93337,56186],{"class":73},[49,93339,77],{"class":66},[49,93341,93342],{"class":73},"280",[49,93344,110],{"class":109},[49,93346,83],{"class":66},[49,93348,93349,93351,93353,93355,93357],{"class":51,"line":3831},[49,93350,87652],{"class":73},[49,93352,77],{"class":66},[49,93354,875],{"class":73},[49,93356,110],{"class":109},[49,93358,83],{"class":66},[49,93360,93361,93363,93365,93367],{"class":51,"line":3845},[49,93362,87465],{"class":73},[49,93364,77],{"class":66},[49,93366,87470],{"class":73},[49,93368,83],{"class":66},[49,93370,93371,93373,93375,93377],{"class":51,"line":3853},[49,93372,62959],{"class":73},[49,93374,77],{"class":66},[49,93376,62081],{"class":73},[49,93378,83],{"class":66},[49,93380,93381,93383,93385,93387,93389,93391,93393],{"class":51,"line":3858},[49,93382,63215],{"class":73},[49,93384,77],{"class":66},[49,93386,159],{"class":73},[49,93388,110],{"class":109},[49,93390,113],{"class":73},[49,93392,63481],{"class":73},[49,93394,83],{"class":66},[49,93396,93397,93399,93401,93403,93405],{"class":51,"line":3864},[49,93398,56010],{"class":73},[49,93400,77],{"class":66},[49,93402,2297],{"class":73},[49,93404,110],{"class":109},[49,93406,83],{"class":66},[49,93408,93409],{"class":51,"line":3870},[49,93410,3441],{"class":66},[49,93412,93413],{"class":51,"line":3875},[49,93414,3654],{"emptyLinePlaceholder":1330},[49,93416,93417,93419,93421],{"class":51,"line":9200},[49,93418,93321],{"class":62},[49,93420,2655],{"class":147},[49,93422,67],{"class":66},[49,93424,93425,93427,93429,93431],{"class":51,"line":9224},[49,93426,56248],{"class":73},[49,93428,77],{"class":66},[49,93430,674],{"class":73},[49,93432,83],{"class":66},[49,93434,93435,93437,93439,93441,93443],{"class":51,"line":9229},[49,93436,55936],{"class":73},[49,93438,77],{"class":66},[49,93440,106],{"class":73},[49,93442,110],{"class":109},[49,93444,83],{"class":66},[49,93446,93447,93449,93451,93453],{"class":51,"line":9235},[49,93448,65206],{"class":73},[49,93450,77],{"class":66},[49,93452,460],{"class":73},[49,93454,83],{"class":66},[49,93456,93457,93459,93461,93463],{"class":51,"line":9262},[49,93458,58525],{"class":73},[49,93460,77],{"class":66},[49,93462,52835],{"class":73},[49,93464,83],{"class":66},[49,93466,93467,93469,93471,93473],{"class":51,"line":9267},[49,93468,58655],{"class":73},[49,93470,77],{"class":66},[49,93472,63307],{"class":73},[49,93474,83],{"class":66},[49,93476,93477],{"class":51,"line":9273},[49,93478,3441],{"class":66},[49,93480,93481],{"class":51,"line":9285},[49,93482,3654],{"emptyLinePlaceholder":1330},[49,93484,93485,93487,93489,93491],{"class":51,"line":9297},[49,93486,93321],{"class":62},[49,93488,2655],{"class":147},[49,93490,65259],{"class":62},[49,93492,67],{"class":66},[49,93494,93495,93497,93499,93502],{"class":51,"line":9309},[49,93496,58655],{"class":73},[49,93498,77],{"class":66},[49,93500,93501],{"class":73},"#1286ff",[49,93503,83],{"class":66},[49,93505,93506],{"class":51,"line":10968},[49,93507,3441],{"class":66},[49,93509,93510,93512,93514],{"class":51,"line":10993},[49,93511,53659],{"class":66},[49,93513,1305],{"class":147},[49,93515,52554],{"class":66},[49,93517,93518,93520,93522],{"class":51,"line":11016},[49,93519,53027],{"class":66},[49,93521,52581],{"class":147},[49,93523,52554],{"class":66},[49,93525,93526],{"class":51,"line":11040},[49,93527,3654],{"emptyLinePlaceholder":1330},[49,93529,93530,93532,93534],{"class":51,"line":11045},[49,93531,2300],{"class":66},[49,93533,53042],{"class":147},[49,93535,52554],{"class":66},[49,93537,93538,93540,93542,93544,93546,93549],{"class":51,"line":11050},[49,93539,53386],{"class":66},[49,93541,148],{"class":147},[49,93543,54728],{"class":62},[49,93545,1448],{"class":66},[49,93547,93548],{"class":1505},"\"container\"",[49,93550,52554],{"class":66},[49,93552,93553,93555,93557,93559,93561,93564],{"class":51,"line":11055},[49,93554,52588],{"class":66},[49,93556,148],{"class":147},[49,93558,54728],{"class":62},[49,93560,1448],{"class":66},[49,93562,93563],{"class":1505},"\"header\"",[49,93565,52554],{"class":66},[49,93567,93568,93570,93572,93574,93576,93579],{"class":51,"line":11064},[49,93569,56473],{"class":66},[49,93571,1630],{"class":147},[49,93573,62295],{"class":62},[49,93575,1448],{"class":66},[49,93577,93578],{"class":1505},"\"http:\u002F\u002Fpip.itcast.cn\"",[49,93580,52554],{"class":66},[49,93582,93583,93585,93587,93589,93591,93594,93596,93598,93600],{"class":51,"line":11069},[49,93584,56541],{"class":66},[49,93586,174],{"class":147},[49,93588,56478],{"class":62},[49,93590,1448],{"class":66},[49,93592,93593],{"class":1505},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[49,93595,56486],{"class":62},[49,93597,1448],{"class":66},[49,93599,8904],{"class":1505},[49,93601,60366],{"class":66},[49,93603,93604,93606,93608],{"class":51,"line":11075},[49,93605,56646],{"class":66},[49,93607,1630],{"class":147},[49,93609,52554],{"class":66},[49,93611,93612,93614,93616],{"class":51,"line":11096},[49,93613,53018],{"class":66},[49,93615,148],{"class":147},[49,93617,52554],{"class":66},[49,93619,93620,93622,93624,93626,93628,93631],{"class":51,"line":11102},[49,93621,52588],{"class":66},[49,93623,148],{"class":147},[49,93625,54728],{"class":62},[49,93627,1448],{"class":66},[49,93629,93630],{"class":1505},"\"video\"",[49,93632,52554],{"class":66},[49,93634,93635,93637,93639,93641,93643,93646,93649,93651,93653],{"class":51,"line":11116},[49,93636,56473],{"class":66},[49,93638,29431],{"class":147},[49,93640,56478],{"class":62},[49,93642,1448],{"class":66},[49,93644,93645],{"class":1505},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[49,93647,93648],{"class":62}," controls",[49,93650,56553],{"class":66},[49,93652,29431],{"class":147},[49,93654,52554],{"class":66},[49,93656,93657,93659,93661],{"class":51,"line":11122},[49,93658,53018],{"class":66},[49,93660,148],{"class":147},[49,93662,52554],{"class":66},[49,93664,93665,93667,93669,93671,93673,93676],{"class":51,"line":11149},[49,93666,52588],{"class":66},[49,93668,148],{"class":147},[49,93670,54728],{"class":62},[49,93672,1448],{"class":66},[49,93674,93675],{"class":1505},"\"elevator\"",[49,93677,52554],{"class":66},[49,93679,93680,93682,93684,93686,93688,93690,93693,93695,93697,93700,93702],{"class":51,"line":11158},[49,93681,56473],{"class":66},[49,93683,1630],{"class":147},[49,93685,62295],{"class":62},[49,93687,1448],{"class":66},[49,93689,65471],{"class":1505},[49,93691,93692],{"class":62}," data-ref",[49,93694,1448],{"class":66},[49,93696,93630],{"class":1505},[49,93698,93699],{"class":66},">视频介绍\u003C\u002F",[49,93701,1630],{"class":147},[49,93703,52554],{"class":66},[49,93705,93706,93708,93710,93712,93714,93716,93718,93720,93723,93726,93728],{"class":51,"line":11164},[49,93707,56473],{"class":66},[49,93709,1630],{"class":147},[49,93711,62295],{"class":62},[49,93713,1448],{"class":66},[49,93715,65471],{"class":1505},[49,93717,93692],{"class":62},[49,93719,1448],{"class":66},[49,93721,93722],{"class":1505},"\"intro\"",[49,93724,93725],{"class":66},">课程简介\u003C\u002F",[49,93727,1630],{"class":147},[49,93729,52554],{"class":66},[49,93731,93732,93734,93736,93738,93740,93742,93744,93746,93749,93752,93754],{"class":51,"line":11172},[49,93733,56473],{"class":66},[49,93735,1630],{"class":147},[49,93737,62295],{"class":62},[49,93739,1448],{"class":66},[49,93741,65471],{"class":1505},[49,93743,93692],{"class":62},[49,93745,1448],{"class":66},[49,93747,93748],{"class":1505},"\"outline\"",[49,93750,93751],{"class":66},">评论列表\u003C\u002F",[49,93753,1630],{"class":147},[49,93755,52554],{"class":66},[49,93757,93758,93760,93762],{"class":51,"line":11177},[49,93759,53018],{"class":66},[49,93761,148],{"class":147},[49,93763,52554],{"class":66},[49,93765,93766,93768,93770],{"class":51,"line":17854},[49,93767,53659],{"class":66},[49,93769,148],{"class":147},[49,93771,52554],{"class":66},[49,93773,93774,93776,93778,93780,93782,93785,93787,93789],{"class":51,"line":17860},[49,93775,53386],{"class":66},[49,93777,53055],{"class":147},[49,93779,56478],{"class":62},[49,93781,1448],{"class":66},[49,93783,93784],{"class":1505},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[49,93786,56553],{"class":66},[49,93788,53055],{"class":147},[49,93790,52554],{"class":66},[49,93792,93793,93795,93797],{"class":51,"line":17883},[49,93794,53386],{"class":66},[49,93796,53055],{"class":147},[49,93798,52554],{"class":66},[49,93800,93801],{"class":51,"line":17889},[49,93802,93803],{"class":55},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[49,93805,93806,93808,93810,93812,93814,93816,93818,93821],{"class":51,"line":17912},[49,93807,12473],{"class":109},[49,93809,93280],{"class":73},[49,93811,14816],{"class":109},[49,93813,55637],{"class":66},[49,93815,55640],{"class":62},[49,93817,1403],{"class":66},[49,93819,93820],{"class":1505},"'video'",[49,93822,1409],{"class":66},[49,93824,93825],{"class":51,"line":17926},[49,93826,93827],{"class":55},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[49,93829,93830,93833,93835,93837,93839,93842,93844],{"class":51,"line":17946},[49,93831,93832],{"class":66},"    video.ontimeupdate ",[49,93834,1448],{"class":109},[49,93836,89580],{"class":66},[49,93838,92398],{"class":62},[49,93840,93841],{"class":66},"(() ",[49,93843,85947],{"class":109},[49,93845,67],{"class":66},[49,93847,93848],{"class":51,"line":17952},[49,93849,93850],{"class":55},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[49,93852,93853],{"class":51,"line":17963},[49,93854,93855],{"class":55},"      \u002F\u002F 控制台输出当前的时间\n",[49,93857,93858,93861],{"class":51,"line":17986},[49,93859,93860],{"class":55},"      \u002F\u002F console.log(video.currentTime)",[49,93862,93863],{"class":55},"  \u002F\u002F获得当前的视频时间\n",[49,93865,93866],{"class":51,"line":18008},[49,93867,93868],{"class":55},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[49,93870,93871,93873,93875,93877,93880],{"class":51,"line":18013},[49,93872,75912],{"class":66},[49,93874,72884],{"class":62},[49,93876,1403],{"class":66},[49,93878,93879],{"class":1505},"'currentTime'",[49,93881,93882],{"class":66},", video.currentTime)\n",[49,93884,93885,93887,93889],{"class":51,"line":18019},[49,93886,55776],{"class":66},[49,93888,7662],{"class":73},[49,93890,1409],{"class":66},[49,93892,93893],{"class":51,"line":18033},[49,93894,93895],{"class":55},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[49,93897,93898,93901,93904,93906,93909,93911],{"class":51,"line":18046},[49,93899,93900],{"class":66},"    video.",[49,93902,93903],{"class":62},"onloadeddata",[49,93905,14816],{"class":109},[49,93907,93908],{"class":66}," () ",[49,93910,85947],{"class":109},[49,93912,67],{"class":66},[49,93914,93915],{"class":51,"line":18051},[49,93916,61251],{"class":55},[49,93918,93919],{"class":51,"line":18065},[49,93920,93921],{"class":55},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[49,93923,93924,93927,93929,93932,93934,93936,93938,93940,93942],{"class":51,"line":18070},[49,93925,93926],{"class":66},"      video.currentTime ",[49,93928,1448],{"class":109},[49,93930,93931],{"class":66}," localStorage.",[49,93933,72915],{"class":62},[49,93935,1403],{"class":66},[49,93937,93879],{"class":1505},[49,93939,14966],{"class":66},[49,93941,72587],{"class":109},[49,93943,48581],{"class":73},[49,93945,93946],{"class":51,"line":18076},[49,93947,3441],{"class":66},[49,93949,93950,93952,93954],{"class":51,"line":18081},[49,93951,53659],{"class":66},[49,93953,53055],{"class":147},[49,93955,52554],{"class":66},[49,93957,93958,93960,93962],{"class":51,"line":18095},[49,93959,53027],{"class":66},[49,93961,53042],{"class":147},[49,93963,52554],{"class":66},[49,93965,93966],{"class":51,"line":18100},[49,93967,3654],{"emptyLinePlaceholder":1330},[49,93969,93970,93972,93974],{"class":51,"line":18105},[49,93971,53027],{"class":66},[49,93973,51883],{"class":147},[49,93975,52554],{"class":66},[1305,93977,93978],{},"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":44,"searchDepth":59,"depth":59,"links":93980},[93981,93986,93990,93991,93992,93997,94002,94003,94004,94005,94012,94017,94018,94028,94032,94033,94037],{"id":77920,"depth":59,"text":77921,"children":93982},[93983,93984,93985],{"id":77924,"depth":70,"text":77925},{"id":77949,"depth":70,"text":77950},{"id":77961,"depth":70,"text":77962},{"id":77973,"depth":59,"text":77974,"children":93987},[93988,93989],{"id":77977,"depth":70,"text":77978},{"id":77992,"depth":70,"text":77993},{"id":78044,"depth":59,"text":78045},{"id":78088,"depth":59,"text":78089},{"id":78105,"depth":59,"text":78106,"children":93993},[93994,93995,93996],{"id":78109,"depth":70,"text":78110},{"id":78122,"depth":70,"text":78123},{"id":78227,"depth":70,"text":78228},{"id":78514,"depth":59,"text":78515,"children":93998},[93999,94000,94001],{"id":78518,"depth":70,"text":78519},{"id":78961,"depth":70,"text":78962},{"id":79372,"depth":70,"text":79373},{"id":79435,"depth":59,"text":79436},{"id":79514,"depth":59,"text":79515},{"id":79607,"depth":59,"text":79608},{"id":81451,"depth":59,"text":81452,"children":94006},[94007,94008,94009,94010,94011],{"id":81455,"depth":70,"text":81456},{"id":81467,"depth":70,"text":81468},{"id":81686,"depth":70,"text":81687},{"id":81704,"depth":70,"text":81705},{"id":81764,"depth":70,"text":81765},{"id":86031,"depth":59,"text":86032,"children":94013},[94014,94015,94016],{"id":86035,"depth":70,"text":86036},{"id":86053,"depth":70,"text":86054},{"id":86079,"depth":70,"text":86080},{"id":86088,"depth":59,"text":86089},{"id":86110,"depth":59,"text":86111,"children":94019},[94020,94021,94022,94023,94024,94025,94026,94027],{"id":86114,"depth":70,"text":86115},{"id":86375,"depth":70,"text":86376},{"id":86561,"depth":70,"text":86562},{"id":86928,"depth":70,"text":86929},{"id":87044,"depth":70,"text":87045},{"id":87080,"depth":70,"text":87081},{"id":87127,"depth":70,"text":87128},{"id":87161,"depth":70,"text":87162},{"id":88524,"depth":59,"text":88525,"children":94029},[94030,94031],{"id":88528,"depth":70,"text":88529},{"id":88565,"depth":70,"text":88566},{"id":89920,"depth":59,"text":89921},{"id":90291,"depth":59,"text":90292,"children":94034},[94035,94036],{"id":90295,"depth":70,"text":90296},{"id":90329,"depth":70,"text":90330},{"id":91058,"depth":59,"text":91059,"children":94038},[94039,94040,94041,94042],{"id":91062,"depth":70,"text":91063},{"id":92020,"depth":70,"text":92021},{"id":92962,"depth":70,"text":92963},{"id":93036,"depth":70,"text":93037},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77909,"description":1327},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94049,"title":94050,"body":94051,"description":94062,"extension":1328,"meta":94063,"navigation":1330,"path":94065,"seo":94066,"stem":94067,"__hash__":94068},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94052,"toc":94060},[94053],[19,94054,94055,94056],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[1630,94057,94058],{"href":94058,"rel":94059},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25113],{"title":44,"searchDepth":59,"depth":59,"links":94061},[],"三件套第三套学习",{"category":94064},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94050,"description":94062},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94070,"title":94071,"body":94072,"description":1327,"extension":1328,"meta":94177,"navigation":1330,"path":94178,"seo":94179,"stem":94180,"__hash__":94181},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94073,"toc":94172},[94074,94081,94084,94087,94090,94094,94103,94106,94109,94113,94122,94125,94129,94132,94152,94155,94169],[19,94075,94076],{},[1630,94077,94080],{"href":94078,"rel":94079},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25113],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94082,94071],{"id":94083},"_1安装",[19,94085,94086],{},"numpy是科学计算基础库,底层是C语言",[19,94088,94089],{},"三种方式：",[14,94091,94093],{"id":94092},"_11-通过pip安装","1.1 通过pip安装",[39,94095,94097],{"className":31626,"code":94096,"language":31628,"meta":44,"style":44},"pip install numpy\n",[46,94098,94099],{"__ignoreMap":44},[49,94100,94101],{"class":51,"line":52},[49,94102,94096],{"class":66},[19,94104,94105],{},"首选方式，自动处理依赖项",[19,94107,94108],{},"在提示系统命令符中使用cmd",[14,94110,94112],{"id":94111},"_12-通过anaconda安装","1.2 通过Anaconda安装",[39,94114,94116],{"className":31626,"code":94115,"language":31628,"meta":44,"style":44},"conda install numpy\n",[46,94117,94118],{"__ignoreMap":44},[49,94119,94120],{"class":51,"line":52},[49,94121,94115],{"class":66},[19,94123,94124],{},"自动解决环境依赖",[14,94126,94128],{"id":94127},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94130,94131],{},"对于Debian\u002FUbuntu",[39,94133,94135],{"className":31626,"code":94134,"language":31628,"meta":44,"style":44},"sudo apt-get install python3-numpy\n",[46,94136,94137],{"__ignoreMap":44},[49,94138,94139,94142,94144,94147,94149],{"class":51,"line":52},[49,94140,94141],{"class":66},"sudo apt",[49,94143,1923],{"class":109},[49,94145,94146],{"class":66},"get install python3",[49,94148,1923],{"class":109},[49,94150,94151],{"class":66},"numpy\n",[19,94153,94154],{},"对于Fedora:",[39,94156,94158],{"className":31626,"code":94157,"language":31628,"meta":44,"style":44},"sudo dnf install python3-numpy\n",[46,94159,94160],{"__ignoreMap":44},[49,94161,94162,94165,94167],{"class":51,"line":52},[49,94163,94164],{"class":66},"sudo dnf install python3",[49,94166,1923],{"class":109},[49,94168,94151],{"class":66},[1305,94170,94171],{},"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":44,"searchDepth":59,"depth":59,"links":94173},[94174,94175,94176],{"id":94092,"depth":59,"text":94093},{"id":94111,"depth":59,"text":94112},{"id":94127,"depth":59,"text":94128},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94071,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94183,"title":94184,"body":94185,"description":1327,"extension":1328,"meta":94298,"navigation":1330,"path":94299,"seo":94300,"stem":94301,"__hash__":94302},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94186,"toc":94296},[94187,94190,94193,94196,94199,94202,94205,94208,94211,94214,94290,94293],[10,94188,94184],{"id":94189},"_10算数函数",[19,94191,94192],{},"加减乘除运算跟python基础语法没区别",[19,94194,94195],{},"除了python那种方法外还可以使用函数",[19,94197,94198],{},"加：np.add(a,b)",[19,94200,94201],{},"减：np.subtract(a,b)",[19,94203,94204],{},"乘：np.multiply(a,b)",[19,94206,94207],{},"除：np.divide(a,b) == a\u002Fb",[19,94209,94210],{},"取余：np.mod(a,b) == a%b",[19,94212,94213],{},"必须会的用法：",[39,94215,94217],{"className":31626,"code":94216,"language":31628,"meta":44,"style":44},"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",[46,94218,94219,94241,94262,94272,94285],{"__ignoreMap":44},[49,94220,94221,94223,94225,94228,94230,94233,94235,94237,94239],{"class":51,"line":52},[49,94222,1630],{"class":66},[49,94224,1448],{"class":109},[49,94226,94227],{"class":66},"np.arange(",[49,94229,1812],{"class":73},[49,94231,94232],{"class":66},").reshape(",[49,94234,1472],{"class":73},[49,94236,1770],{"class":66},[49,94238,1472],{"class":73},[49,94240,1409],{"class":66},[49,94242,94243,94245,94247,94250,94252,94254,94256,94258,94260],{"class":51,"line":59},[49,94244,1655],{"class":66},[49,94246,1448],{"class":109},[49,94248,94249],{"class":66},"np.array([",[49,94251,106],{"class":73},[49,94253,1770],{"class":66},[49,94255,106],{"class":73},[49,94257,1770],{"class":66},[49,94259,106],{"class":73},[49,94261,5911],{"class":66},[49,94263,94264,94267,94269],{"class":51,"line":70},[49,94265,94266],{"class":66},"result",[49,94268,1448],{"class":109},[49,94270,94271],{"class":66},"np.empty_like(a)\n",[49,94273,94274,94277,94280,94282],{"class":51,"line":86},[49,94275,94276],{"class":66},"np.add(a,b,",[49,94278,94279],{"class":6468},"out",[49,94281,1448],{"class":109},[49,94283,94284],{"class":66},"result)\n",[49,94286,94287],{"class":51,"line":98},[49,94288,94289],{"class":66},"result\n",[19,94291,94292],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1305,94294,94295],{},"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":44,"searchDepth":59,"depth":59,"links":94297},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94184,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94304,"title":94305,"body":94306,"description":1327,"extension":1328,"meta":95068,"navigation":1330,"path":95069,"seo":95070,"stem":95071,"__hash__":95072},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94307,"toc":95055},[94308,94311,94314,94317,94321,94360,94364,94408,94468,94472,94475,94514,94517,94562,94566,94602,94606,94675,94679,94743,94747,94750,94753,94756,94759,94795,94799,94839,94843,94915,94918,94922,94985,94989,95052],[10,94309,94305],{"id":94310},"_11统计函数",[19,94312,94313],{},"sum max min mean",[19,94315,94316],{},"这些有axis参数，可以指定方向",[14,94318,94320],{"id":94319},"_111-sum求和函数","11.1 sum()求和函数",[39,94322,94324],{"className":31626,"code":94323,"language":31628,"meta":44,"style":44},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[46,94325,94326,94331,94352],{"__ignoreMap":44},[49,94327,94328],{"class":51,"line":52},[49,94329,94330],{"class":55},"#创建一维数组\n",[49,94332,94333,94335,94337,94340,94342,94344,94346,94348,94350],{"class":51,"line":59},[49,94334,1630],{"class":66},[49,94336,1448],{"class":109},[49,94338,94339],{"class":66},"np.random.randint(",[49,94341,159],{"class":73},[49,94343,1770],{"class":66},[49,94345,1703],{"class":73},[49,94347,1770],{"class":66},[49,94349,875],{"class":73},[49,94351,1409],{"class":66},[49,94353,94354,94357],{"class":51,"line":70},[49,94355,94356],{"class":66},"np.sum(a)",[49,94358,94359],{"class":55},"#求和\n",[14,94361,94363],{"id":94362},"_112-max求最大值函数","11.2 max()求最大值函数",[39,94365,94367],{"className":31626,"code":94366,"language":31628,"meta":44,"style":44},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[46,94368,94369,94373,94393,94398,94403],{"__ignoreMap":44},[49,94370,94371],{"class":51,"line":52},[49,94372,94330],{"class":55},[49,94374,94375,94377,94379,94381,94383,94385,94387,94389,94391],{"class":51,"line":59},[49,94376,1630],{"class":66},[49,94378,1448],{"class":109},[49,94380,94339],{"class":66},[49,94382,159],{"class":73},[49,94384,1770],{"class":66},[49,94386,1703],{"class":73},[49,94388,1770],{"class":66},[49,94390,875],{"class":73},[49,94392,1409],{"class":66},[49,94394,94395],{"class":51,"line":70},[49,94396,94397],{"class":66},"np.max(a)\n",[49,94399,94400],{"class":51,"line":86},[49,94401,94402],{"class":55},"#最大索引(求最大元素的索引)arg\n",[49,94404,94405],{"class":51,"line":98},[49,94406,94407],{"class":66},"np.argmax(a)\n",[39,94409,94411],{"className":31626,"code":94410,"language":31628,"meta":44,"style":44},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[46,94412,94413,94434,94454,94458],{"__ignoreMap":44},[49,94414,94415,94417,94419,94422,94424,94426,94428,94430,94432],{"class":51,"line":52},[49,94416,12171],{"class":66},[49,94418,1448],{"class":109},[49,94420,94421],{"class":66}," np.array([",[49,94423,159],{"class":73},[49,94425,13687],{"class":66},[49,94427,1711],{"class":73},[49,94429,13687],{"class":66},[49,94431,1472],{"class":73},[49,94433,5911],{"class":66},[49,94435,94436,94438,94440,94442,94444,94446,94448,94450,94452],{"class":51,"line":59},[49,94437,12197],{"class":66},[49,94439,1448],{"class":109},[49,94441,94421],{"class":66},[49,94443,1472],{"class":73},[49,94445,13687],{"class":66},[49,94447,1478],{"class":73},[49,94449,13687],{"class":66},[49,94451,1685],{"class":73},[49,94453,5911],{"class":66},[49,94455,94456],{"class":51,"line":70},[49,94457,3654],{"emptyLinePlaceholder":1330},[49,94459,94460,94462,94465],{"class":51,"line":86},[49,94461,31663],{"class":73},[49,94463,94464],{"class":66},"(np.maximum(a, b))   ",[49,94466,94467],{"class":55},"# [3 5 4]，每个位置上取较大值\n",[14,94469,94471],{"id":94470},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,94473,94474],{},"①一维数组：",[39,94476,94478],{"className":31626,"code":94477,"language":31628,"meta":44,"style":44},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[46,94479,94480,94484,94504,94509],{"__ignoreMap":44},[49,94481,94482],{"class":51,"line":52},[49,94483,94330],{"class":55},[49,94485,94486,94488,94490,94492,94494,94496,94498,94500,94502],{"class":51,"line":59},[49,94487,1630],{"class":66},[49,94489,1448],{"class":109},[49,94491,94339],{"class":66},[49,94493,159],{"class":73},[49,94495,1770],{"class":66},[49,94497,1703],{"class":73},[49,94499,1770],{"class":66},[49,94501,875],{"class":73},[49,94503,1409],{"class":66},[49,94505,94506],{"class":51,"line":70},[49,94507,94508],{"class":55},"#求平均值\n",[49,94510,94511],{"class":51,"line":86},[49,94512,94513],{"class":66},"np.mean(a)\n",[19,94515,94516],{},"②二维数组",[39,94518,94520],{"className":31626,"code":94519,"language":31628,"meta":44,"style":44},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[46,94521,94522,94527,94552,94557],{"__ignoreMap":44},[49,94523,94524],{"class":51,"line":52},[49,94525,94526],{"class":55},"#二维数组\n",[49,94528,94529,94532,94534,94536,94538,94540,94542,94544,94546,94548,94550],{"class":51,"line":59},[49,94530,94531],{"class":66},"aa",[49,94533,1448],{"class":109},[49,94535,94227],{"class":66},[49,94537,159],{"class":73},[49,94539,1770],{"class":66},[49,94541,1914],{"class":73},[49,94543,94232],{"class":66},[49,94545,1472],{"class":73},[49,94547,1770],{"class":66},[49,94549,1685],{"class":73},[49,94551,1409],{"class":66},[49,94553,94554],{"class":51,"line":70},[49,94555,94556],{"class":55},"#对数组中的所有数求平均\n",[49,94558,94559],{"class":51,"line":86},[49,94560,94561],{"class":66},"np.mean(aa)\n",[14,94563,94565],{"id":94564},"_114-median求中位数函数","11.4 median()求中位数函数",[39,94567,94569],{"className":31626,"code":94568,"language":31628,"meta":44,"style":44},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[46,94570,94571,94576,94592,94597],{"__ignoreMap":44},[49,94572,94573],{"class":51,"line":52},[49,94574,94575],{"class":55},"#求中位数\n",[49,94577,94578,94580,94582,94584,94586,94588,94590],{"class":51,"line":59},[49,94579,1655],{"class":66},[49,94581,1448],{"class":109},[49,94583,94227],{"class":66},[49,94585,159],{"class":73},[49,94587,1770],{"class":66},[49,94589,106],{"class":73},[49,94591,1409],{"class":66},[49,94593,94594],{"class":51,"line":70},[49,94595,94596],{"class":66},"np.median(b)\n",[49,94598,94599],{"class":51,"line":86},[49,94600,94601],{"class":55},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94603,94605],{"id":94604},"_115-power求幂运算函数","11.5 power()求幂运算函数",[39,94607,94609],{"className":31626,"code":94608,"language":31628,"meta":44,"style":44},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[46,94610,94611,94627,94632,94637,94646,94651,94660],{"__ignoreMap":44},[49,94612,94613,94615,94617,94619,94621,94623,94625],{"class":51,"line":52},[49,94614,1655],{"class":66},[49,94616,1448],{"class":109},[49,94618,94227],{"class":66},[49,94620,159],{"class":73},[49,94622,1770],{"class":66},[49,94624,106],{"class":73},[49,94626,1409],{"class":66},[49,94628,94629],{"class":51,"line":59},[49,94630,94631],{"class":55},"#幂运算\n",[49,94633,94634],{"class":51,"line":70},[49,94635,94636],{"class":55},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[49,94638,94639,94642,94644],{"class":51,"line":86},[49,94640,94641],{"class":66},"np.power(b,",[49,94643,1478],{"class":73},[49,94645,1409],{"class":66},[49,94647,94648],{"class":51,"line":98},[49,94649,94650],{"class":55},"#或者以下代码，将数据存储起来\n",[49,94652,94653,94655,94657],{"class":51,"line":121},[49,94654,2235],{"class":66},[49,94656,1448],{"class":109},[49,94658,94659],{"class":66},"np.empty_like(b)\n",[49,94661,94662,94664,94666,94668,94670,94672],{"class":51,"line":134},[49,94663,94641],{"class":66},[49,94665,1478],{"class":73},[49,94667,1770],{"class":66},[49,94669,94279],{"class":6468},[49,94671,1448],{"class":109},[49,94673,94674],{"class":66},"y)\n",[14,94676,94678],{"id":94677},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[39,94680,94682],{"className":31626,"code":94681,"language":31628,"meta":44,"style":44},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[46,94683,94684,94700,94705,94710,94714,94732],{"__ignoreMap":44},[49,94685,94686,94688,94690,94692,94694,94696,94698],{"class":51,"line":52},[49,94687,1655],{"class":66},[49,94689,1448],{"class":109},[49,94691,94227],{"class":66},[49,94693,159],{"class":73},[49,94695,1770],{"class":66},[49,94697,106],{"class":73},[49,94699,1409],{"class":66},[49,94701,94702],{"class":51,"line":59},[49,94703,94704],{"class":55},"#开方\n",[49,94706,94707],{"class":51,"line":70},[49,94708,94709],{"class":66},"np.sqrt(b)\n",[49,94711,94712],{"class":51,"line":86},[49,94713,94650],{"class":55},[49,94715,94716,94718,94720,94723,94726,94728,94730],{"class":51,"line":98},[49,94717,2235],{"class":66},[49,94719,1448],{"class":109},[49,94721,94722],{"class":66},"np.empty_like(b,",[49,94724,94725],{"class":6468},"dtype",[49,94727,1448],{"class":109},[49,94729,1442],{"class":73},[49,94731,1409],{"class":66},[49,94733,94734,94737,94739,94741],{"class":51,"line":121},[49,94735,94736],{"class":66},"np.sqrt(b,",[49,94738,94279],{"class":6468},[49,94740,1448],{"class":109},[49,94742,94674],{"class":66},[14,94744,94746],{"id":94745},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,94748,94749],{},"对数组中的元素累计求和，可指定轴",[19,94751,94752],{},"#累计求和的意思是：",[19,94754,94755],{},"a = np.array([1, 2, 3, 4])",[19,94757,94758],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[39,94760,94762],{"className":31626,"code":94761,"language":31628,"meta":44,"style":44},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[46,94763,94764,94780,94785,94790],{"__ignoreMap":44},[49,94765,94766,94768,94770,94772,94774,94776,94778],{"class":51,"line":52},[49,94767,1655],{"class":66},[49,94769,1448],{"class":109},[49,94771,94227],{"class":66},[49,94773,159],{"class":73},[49,94775,1770],{"class":66},[49,94777,106],{"class":73},[49,94779,1409],{"class":66},[49,94781,94782],{"class":51,"line":59},[49,94783,94784],{"class":66},"np.cumsum(b)\n",[49,94786,94787],{"class":51,"line":70},[49,94788,94789],{"class":55},"#结果：\n",[49,94791,94792],{"class":51,"line":86},[49,94793,94794],{"class":55},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94796,94798],{"id":94797},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[39,94800,94802],{"className":31626,"code":94801,"language":31628,"meta":44,"style":44},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[46,94803,94804,94820,94825,94830,94834],{"__ignoreMap":44},[49,94805,94806,94808,94810,94812,94814,94816,94818],{"class":51,"line":52},[49,94807,1655],{"class":66},[49,94809,1448],{"class":109},[49,94811,94227],{"class":66},[49,94813,159],{"class":73},[49,94815,1770],{"class":66},[49,94817,106],{"class":73},[49,94819,1409],{"class":66},[49,94821,94822],{"class":51,"line":59},[49,94823,94824],{"class":55},"#对数组中的元素累计求积，可指定轴\n",[49,94826,94827],{"class":51,"line":70},[49,94828,94829],{"class":66},"np.cumprod(b)\n",[49,94831,94832],{"class":51,"line":86},[49,94833,94789],{"class":55},[49,94835,94836],{"class":51,"line":98},[49,94837,94838],{"class":55},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94840,94842],{"id":94841},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[39,94844,94846],{"className":31626,"code":94845,"language":31628,"meta":44,"style":44},"#删除数组中的重复数据，并对数据进行排序\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",[46,94847,94848,94853,94901,94906,94910],{"__ignoreMap":44},[49,94849,94850],{"class":51,"line":52},[49,94851,94852],{"class":55},"#删除数组中的重复数据，并对数据进行排序\n",[49,94854,94855,94857,94859,94861,94863,94865,94867,94869,94871,94873,94875,94877,94879,94881,94883,94885,94887,94889,94891,94893,94895,94897,94899],{"class":51,"line":59},[49,94856,1630],{"class":66},[49,94858,1448],{"class":109},[49,94860,94249],{"class":66},[49,94862,159],{"class":73},[49,94864,1770],{"class":66},[49,94866,1478],{"class":73},[49,94868,1770],{"class":66},[49,94870,1472],{"class":73},[49,94872,1770],{"class":66},[49,94874,1889],{"class":73},[49,94876,1770],{"class":66},[49,94878,1472],{"class":73},[49,94880,1770],{"class":66},[49,94882,106],{"class":73},[49,94884,1770],{"class":66},[49,94886,1590],{"class":73},[49,94888,1770],{"class":66},[49,94890,80],{"class":73},[49,94892,1770],{"class":66},[49,94894,2165],{"class":73},[49,94896,1770],{"class":66},[49,94898,1685],{"class":73},[49,94900,5911],{"class":66},[49,94902,94903],{"class":51,"line":70},[49,94904,94905],{"class":66},"np.unique(a)\n",[49,94907,94908],{"class":51,"line":86},[49,94909,94789],{"class":55},[49,94911,94912],{"class":51,"line":98},[49,94913,94914],{"class":55},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,94916,94917],{},"升序形式排序",[14,94919,94921],{"id":94920},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[39,94923,94925],{"className":31626,"code":94924,"language":31628,"meta":44,"style":44},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[46,94926,94927,94975,94980],{"__ignoreMap":44},[49,94928,94929,94931,94933,94935,94937,94939,94941,94943,94945,94947,94949,94951,94953,94955,94957,94959,94961,94963,94965,94967,94969,94971,94973],{"class":51,"line":52},[49,94930,1630],{"class":66},[49,94932,1448],{"class":109},[49,94934,94249],{"class":66},[49,94936,159],{"class":73},[49,94938,1770],{"class":66},[49,94940,1478],{"class":73},[49,94942,1770],{"class":66},[49,94944,1472],{"class":73},[49,94946,1770],{"class":66},[49,94948,1889],{"class":73},[49,94950,1770],{"class":66},[49,94952,1472],{"class":73},[49,94954,1770],{"class":66},[49,94956,106],{"class":73},[49,94958,1770],{"class":66},[49,94960,1590],{"class":73},[49,94962,1770],{"class":66},[49,94964,80],{"class":73},[49,94966,1770],{"class":66},[49,94968,2165],{"class":73},[49,94970,1770],{"class":66},[49,94972,1685],{"class":73},[49,94974,5911],{"class":66},[49,94976,94977],{"class":51,"line":59},[49,94978,94979],{"class":55},"#返回数组中非零元素的索引\n",[49,94981,94982],{"class":51,"line":70},[49,94983,94984],{"class":66},"np.nonzero(a)\n",[14,94986,94988],{"id":94987},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[39,94990,94992],{"className":31626,"code":94991,"language":31628,"meta":44,"style":44},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[46,94993,94994,95042,95047],{"__ignoreMap":44},[49,94995,94996,94998,95000,95002,95004,95006,95008,95010,95012,95014,95016,95018,95020,95022,95024,95026,95028,95030,95032,95034,95036,95038,95040],{"class":51,"line":52},[49,94997,1630],{"class":66},[49,94999,1448],{"class":109},[49,95001,94249],{"class":66},[49,95003,159],{"class":73},[49,95005,1770],{"class":66},[49,95007,1478],{"class":73},[49,95009,1770],{"class":66},[49,95011,1472],{"class":73},[49,95013,1770],{"class":66},[49,95015,1889],{"class":73},[49,95017,1770],{"class":66},[49,95019,1472],{"class":73},[49,95021,1770],{"class":66},[49,95023,106],{"class":73},[49,95025,1770],{"class":66},[49,95027,1590],{"class":73},[49,95029,1770],{"class":66},[49,95031,80],{"class":73},[49,95033,1770],{"class":66},[49,95035,2165],{"class":73},[49,95037,1770],{"class":66},[49,95039,1685],{"class":73},[49,95041,5911],{"class":66},[49,95043,95044],{"class":51,"line":59},[49,95045,95046],{"class":55},"#计算一组数中最大值与最小值的差，可指定轴\n",[49,95048,95049],{"class":51,"line":70},[49,95050,95051],{"class":66},"np.ptp(a)\n",[1305,95053,95054],{},"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":44,"searchDepth":59,"depth":59,"links":95056},[95057,95058,95059,95060,95061,95062,95063,95064,95065,95066,95067],{"id":94319,"depth":59,"text":94320},{"id":94362,"depth":59,"text":94363},{"id":94470,"depth":59,"text":94471},{"id":94564,"depth":59,"text":94565},{"id":94604,"depth":59,"text":94605},{"id":94677,"depth":59,"text":94678},{"id":94745,"depth":59,"text":94746},{"id":94797,"depth":59,"text":94798},{"id":94841,"depth":59,"text":94842},{"id":94920,"depth":59,"text":94921},{"id":94987,"depth":59,"text":94988},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94305,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95074,"title":95075,"body":95076,"description":1327,"extension":1328,"meta":95731,"navigation":1330,"path":95732,"seo":95733,"stem":95734,"__hash__":95735},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95077,"toc":95719},[95078,95081,95085,95088,95304,95308,95311,95520,95524,95590,95595,95599,95602,95605,95643,95647,95650,95655,95659,95662,95665,95670,95674,95677,95681,95684,95687,95692,95696,95699,95702,95707,95711,95716],[10,95079,95075],{"id":95080},"_12其他常用函数",[14,95082,95084],{"id":95083},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95086,95087],{},"将数组的数据按照行列复制扩展",[39,95089,95091],{"className":31626,"code":95090,"language":31628,"meta":44,"style":44},"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",[46,95092,95093,95109,95118,95122,95127,95132,95145,95149,95154,95159,95164,95168,95173,95197,95209,95213,95217,95222,95227,95232,95237,95241,95254,95258,95262,95267,95272,95277,95282,95287,95291,95295,95300],{"__ignoreMap":44},[49,95094,95095,95097,95099,95101,95103,95105,95107],{"class":51,"line":52},[49,95096,1630],{"class":66},[49,95098,1448],{"class":109},[49,95100,94227],{"class":66},[49,95102,159],{"class":73},[49,95104,1770],{"class":66},[49,95106,1711],{"class":73},[49,95108,1409],{"class":66},[49,95110,95111,95114,95116],{"class":51,"line":59},[49,95112,95113],{"class":66},"np.tile(a,",[49,95115,1478],{"class":73},[49,95117,1409],{"class":66},[49,95119,95120],{"class":51,"line":70},[49,95121,94789],{"class":55},[49,95123,95124],{"class":51,"line":86},[49,95125,95126],{"class":55},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[49,95128,95129],{"class":51,"line":98},[49,95130,95131],{"class":55},"#行复制两次，列复制三次\n",[49,95133,95134,95137,95139,95141,95143],{"class":51,"line":121},[49,95135,95136],{"class":66},"np.tile(a,(",[49,95138,1478],{"class":73},[49,95140,1770],{"class":66},[49,95142,1472],{"class":73},[49,95144,31745],{"class":66},[49,95146,95147],{"class":51,"line":134},[49,95148,94789],{"class":55},[49,95150,95151],{"class":51,"line":1085},[49,95152,95153],{"class":1505},"'''\n",[49,95155,95156],{"class":51,"line":2574},[49,95157,95158],{"class":1505},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[49,95160,95161],{"class":51,"line":2586},[49,95162,95163],{"class":1505},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[49,95165,95166],{"class":51,"line":2867},[49,95167,95153],{"class":1505},[49,95169,95170],{"class":51,"line":2872},[49,95171,95172],{"class":55},"#创建二维数组\n",[49,95174,95175,95177,95179,95181,95183,95185,95187,95189,95191,95193,95195],{"class":51,"line":2878},[49,95176,94531],{"class":66},[49,95178,1448],{"class":109},[49,95180,94227],{"class":66},[49,95182,159],{"class":73},[49,95184,1770],{"class":66},[49,95186,1914],{"class":73},[49,95188,94232],{"class":66},[49,95190,1685],{"class":73},[49,95192,1770],{"class":66},[49,95194,1472],{"class":73},[49,95196,1409],{"class":66},[49,95198,95199,95202,95204,95206],{"class":51,"line":2883},[49,95200,95201],{"class":66},"np.tile(aa,",[49,95203,1478],{"class":73},[49,95205,1821],{"class":66},[49,95207,95208],{"class":55},"#一个数的时候就是行\n",[49,95210,95211],{"class":51,"line":2897},[49,95212,94789],{"class":55},[49,95214,95215],{"class":51,"line":2902},[49,95216,95153],{"class":1505},[49,95218,95219],{"class":51,"line":2908},[49,95220,95221],{"class":1505},"array([[ 1,  2,  3,  1,  2,  3],\n",[49,95223,95224],{"class":51,"line":2929},[49,95225,95226],{"class":1505},"       [ 4,  5,  6,  4,  5,  6],\n",[49,95228,95229],{"class":51,"line":2934},[49,95230,95231],{"class":1505},"       [ 7,  8,  9,  7,  8,  9],\n",[49,95233,95234],{"class":51,"line":2948},[49,95235,95236],{"class":1505},"       [10, 11, 12, 10, 11, 12]])\n",[49,95238,95239],{"class":51,"line":2953},[49,95240,95153],{"class":1505},[49,95242,95243,95246,95248,95250,95252],{"class":51,"line":2982},[49,95244,95245],{"class":66},"np.tile(aa,(",[49,95247,1478],{"class":73},[49,95249,1770],{"class":66},[49,95251,1472],{"class":73},[49,95253,31745],{"class":66},[49,95255,95256],{"class":51,"line":2987},[49,95257,94789],{"class":55},[49,95259,95260],{"class":51,"line":3004},[49,95261,95153],{"class":1505},[49,95263,95264],{"class":51,"line":3009},[49,95265,95266],{"class":1505},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[49,95268,95269],{"class":51,"line":3014},[49,95270,95271],{"class":1505},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[49,95273,95274],{"class":51,"line":3019},[49,95275,95276],{"class":1505},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[49,95278,95279],{"class":51,"line":3033},[49,95280,95281],{"class":1505},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[49,95283,95284],{"class":51,"line":3038},[49,95285,95286],{"class":1505},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[49,95288,95289],{"class":51,"line":3831},[49,95290,95271],{"class":1505},[49,95292,95293],{"class":51,"line":3845},[49,95294,95276],{"class":1505},[49,95296,95297],{"class":51,"line":3853},[49,95298,95299],{"class":1505},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[49,95301,95302],{"class":51,"line":3858},[49,95303,95153],{"class":1505},[14,95305,95307],{"id":95306},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95309,95310],{},"repeat()将数组中的每个元素重复若干次",[39,95312,95314],{"className":31626,"code":95313,"language":31628,"meta":44,"style":44},"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",[46,95315,95316,95332,95341,95345,95350,95374,95379,95388,95392,95397,95401,95406,95422,95426,95430,95435,95440,95445,95449,95454,95458,95463,95468,95472,95488,95492,95496,95501,95506,95511,95516],{"__ignoreMap":44},[49,95317,95318,95320,95322,95324,95326,95328,95330],{"class":51,"line":52},[49,95319,1630],{"class":66},[49,95321,1448],{"class":109},[49,95323,94227],{"class":66},[49,95325,159],{"class":73},[49,95327,1770],{"class":66},[49,95329,1711],{"class":73},[49,95331,1409],{"class":66},[49,95333,95334,95337,95339],{"class":51,"line":59},[49,95335,95336],{"class":66},"np.repeat(a,",[49,95338,1472],{"class":73},[49,95340,1409],{"class":66},[49,95342,95343],{"class":51,"line":70},[49,95344,94789],{"class":55},[49,95346,95347],{"class":51,"line":86},[49,95348,95349],{"class":55},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[49,95351,95352,95354,95356,95358,95360,95362,95364,95366,95368,95370,95372],{"class":51,"line":98},[49,95353,94531],{"class":66},[49,95355,1448],{"class":109},[49,95357,94227],{"class":66},[49,95359,159],{"class":73},[49,95361,1770],{"class":66},[49,95363,1914],{"class":73},[49,95365,94232],{"class":66},[49,95367,1685],{"class":73},[49,95369,1770],{"class":66},[49,95371,1472],{"class":73},[49,95373,1409],{"class":66},[49,95375,95376],{"class":51,"line":121},[49,95377,95378],{"class":55},"#这个重复之后二维变成一维\n",[49,95380,95381,95384,95386],{"class":51,"line":134},[49,95382,95383],{"class":66},"np.repeat(aa,",[49,95385,1478],{"class":73},[49,95387,1409],{"class":66},[49,95389,95390],{"class":51,"line":1085},[49,95391,95153],{"class":1505},[49,95393,95394],{"class":51,"line":2574},[49,95395,95396],{"class":1505},"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",[49,95398,95399],{"class":51,"line":2586},[49,95400,95153],{"class":1505},[49,95402,95403],{"class":51,"line":2867},[49,95404,95405],{"class":55},"#指定axis\n",[49,95407,95408,95410,95412,95414,95416,95418,95420],{"class":51,"line":2872},[49,95409,95383],{"class":66},[49,95411,1478],{"class":73},[49,95413,1770],{"class":66},[49,95415,48762],{"class":6468},[49,95417,1448],{"class":109},[49,95419,80],{"class":73},[49,95421,1409],{"class":66},[49,95423,95424],{"class":51,"line":2878},[49,95425,94789],{"class":55},[49,95427,95428],{"class":51,"line":2883},[49,95429,95153],{"class":1505},[49,95431,95432],{"class":51,"line":2897},[49,95433,95434],{"class":1505},"array([[ 1,  2,  3],\n",[49,95436,95437],{"class":51,"line":2902},[49,95438,95439],{"class":1505},"       [ 1,  2,  3],\n",[49,95441,95442],{"class":51,"line":2908},[49,95443,95444],{"class":1505},"       [ 4,  5,  6],\n",[49,95446,95447],{"class":51,"line":2929},[49,95448,95444],{"class":1505},[49,95450,95451],{"class":51,"line":2934},[49,95452,95453],{"class":1505},"       [ 7,  8,  9],\n",[49,95455,95456],{"class":51,"line":2948},[49,95457,95453],{"class":1505},[49,95459,95460],{"class":51,"line":2953},[49,95461,95462],{"class":1505},"       [10, 11, 12],\n",[49,95464,95465],{"class":51,"line":2982},[49,95466,95467],{"class":1505},"       [10, 11, 12]])\n",[49,95469,95470],{"class":51,"line":2987},[49,95471,95153],{"class":1505},[49,95473,95474,95476,95478,95480,95482,95484,95486],{"class":51,"line":3004},[49,95475,95383],{"class":66},[49,95477,1478],{"class":73},[49,95479,1770],{"class":66},[49,95481,48762],{"class":6468},[49,95483,1448],{"class":109},[49,95485,159],{"class":73},[49,95487,1409],{"class":66},[49,95489,95490],{"class":51,"line":3009},[49,95491,94789],{"class":55},[49,95493,95494],{"class":51,"line":3014},[49,95495,95153],{"class":1505},[49,95497,95498],{"class":51,"line":3019},[49,95499,95500],{"class":1505},"array([[ 1,  1,  2,  2,  3,  3],\n",[49,95502,95503],{"class":51,"line":3033},[49,95504,95505],{"class":1505},"       [ 4,  4,  5,  5,  6,  6],\n",[49,95507,95508],{"class":51,"line":3038},[49,95509,95510],{"class":1505},"       [ 7,  7,  8,  8,  9,  9],\n",[49,95512,95513],{"class":51,"line":3831},[49,95514,95515],{"class":1505},"       [10, 10, 11, 11, 12, 12]])\n",[49,95517,95518],{"class":51,"line":3845},[49,95519,95153],{"class":1505},[14,95521,95523],{"id":95522},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[39,95525,95527],{"className":31626,"code":95526,"language":31628,"meta":44,"style":44},"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",[46,95528,95529,95545,95550,95562,95566,95571,95581,95585],{"__ignoreMap":44},[49,95530,95531,95533,95535,95537,95539,95541,95543],{"class":51,"line":52},[49,95532,1630],{"class":66},[49,95534,1448],{"class":109},[49,95536,94227],{"class":66},[49,95538,159],{"class":73},[49,95540,1770],{"class":66},[49,95542,1711],{"class":73},[49,95544,1409],{"class":66},[49,95546,95547],{"class":51,"line":59},[49,95548,95549],{"class":55},"#array([，2，3，4])\n",[49,95551,95552,95555,95557,95559],{"class":51,"line":70},[49,95553,95554],{"class":66},"np.roll(a,",[49,95556,1478],{"class":73},[49,95558,1821],{"class":66},[49,95560,95561],{"class":55},"#传正数向后调多少位，传负数向前调多少位\n",[49,95563,95564],{"class":51,"line":86},[49,95565,94789],{"class":55},[49,95567,95568],{"class":51,"line":98},[49,95569,95570],{"class":55},"#array([3, 4, 1, 2])\n",[49,95572,95573,95575,95577,95579],{"class":51,"line":121},[49,95574,95554],{"class":66},[49,95576,1923],{"class":109},[49,95578,159],{"class":73},[49,95580,1409],{"class":66},[49,95582,95583],{"class":51,"line":134},[49,95584,94789],{"class":55},[49,95586,95587],{"class":51,"line":1085},[49,95588,95589],{"class":55},"#array([2, 3, 4, 1])\n",[19,95591,95592],{},[174,95593],{"alt":44,"src":95594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95596,95598],{"id":95597},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,95600,95601],{},"resize()重新调整数组的大小",[19,95603,95604],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[39,95606,95608],{"className":31626,"code":95607,"language":31628,"meta":44,"style":44},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[46,95609,95610,95615,95628],{"__ignoreMap":44},[49,95611,95612],{"class":51,"line":52},[49,95613,95614],{"class":55},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[49,95616,95617,95620,95622,95624,95626],{"class":51,"line":59},[49,95618,95619],{"class":66},"np.resize(aa,(",[49,95621,1478],{"class":73},[49,95623,1770],{"class":66},[49,95625,1736],{"class":73},[49,95627,31745],{"class":66},[49,95629,95630,95632,95634,95636,95638,95640],{"class":51,"line":70},[49,95631,95619],{"class":66},[49,95633,1478],{"class":73},[49,95635,1770],{"class":66},[49,95637,1812],{"class":73},[49,95639,83997],{"class":66},[49,95641,95642],{"class":55},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95644,95646],{"id":95645},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,95648,95649],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,95651,95652],{},[174,95653],{"alt":44,"src":95654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95656,95658],{"id":95657},"_126-保存加载文件","12.6 保存加载文件",[19,95660,95661],{},"savetxt():将数据保存到txt文件中",[19,95663,95664],{},"loadtxt():从文件加载数据",[19,95666,95667],{},[174,95668],{"alt":44,"src":95669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95671,95673],{"id":95672},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,95675,95676],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95678,95680],{"id":95679},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,95682,95683],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,95685,95686],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,95688,95689],{},[174,95690],{"alt":44,"src":95691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95693,95695],{"id":95694},"_129-where语句","12.9 where语句",[19,95697,95698],{},"np.where(条件,x,y)",[19,95700,95701],{},"如果条件为True,对应值为x,否则对应值为y",[19,95703,95704],{},[174,95705],{"alt":44,"src":95706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95708,95710],{"id":95709},"_1210-dot矩阵","12.10 dot()矩阵",[19,95712,95713],{},[174,95714],{"alt":44,"src":95715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1305,95717,95718],{},"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":44,"searchDepth":59,"depth":59,"links":95720},[95721,95722,95723,95724,95725,95726,95727,95728,95729,95730],{"id":95083,"depth":59,"text":95084},{"id":95306,"depth":59,"text":95307},{"id":95522,"depth":59,"text":95523},{"id":95597,"depth":59,"text":95598},{"id":95645,"depth":59,"text":95646},{"id":95657,"depth":59,"text":95658},{"id":95672,"depth":59,"text":95673},{"id":95679,"depth":59,"text":95680},{"id":95694,"depth":59,"text":95695},{"id":95709,"depth":59,"text":95710},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95075,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95737,"title":95738,"body":95739,"description":1327,"extension":1328,"meta":96092,"navigation":1330,"path":96093,"seo":96094,"stem":96095,"__hash__":96096},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95740,"toc":96090},[95741,95744,95747,95750,95753,95756,95821,95823,96087],[10,95742,95738],{"id":95743},"_13数组排序",[19,95745,95746],{},"排序主要用到的方法是np.sort和np.argsort",[19,95748,95749],{},"其中np.sort()对数组直接排序",[19,95751,95752],{},"而np.argsort()是返回排序后的原始索引",[19,95754,95755],{},"①一维数组",[39,95757,95759],{"className":31626,"code":95758,"language":31628,"meta":44,"style":44},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[46,95760,95761,95765,95805,95813],{"__ignoreMap":44},[49,95762,95763],{"class":51,"line":52},[49,95764,94330],{"class":55},[49,95766,95767,95769,95771,95773,95775,95777,95779,95781,95783,95785,95787,95789,95791,95793,95795,95797,95799,95801,95803],{"class":51,"line":59},[49,95768,1630],{"class":66},[49,95770,1448],{"class":109},[49,95772,94249],{"class":66},[49,95774,1472],{"class":73},[49,95776,1770],{"class":66},[49,95778,1889],{"class":73},[49,95780,1770],{"class":66},[49,95782,1787],{"class":73},[49,95784,1770],{"class":66},[49,95786,2165],{"class":73},[49,95788,1770],{"class":66},[49,95790,1671],{"class":73},[49,95792,1770],{"class":66},[49,95794,2283],{"class":73},[49,95796,1770],{"class":66},[49,95798,1736],{"class":73},[49,95800,1770],{"class":66},[49,95802,106],{"class":73},[49,95804,5911],{"class":66},[49,95806,95807,95810],{"class":51,"line":70},[49,95808,95809],{"class":66},"np.sort(a)",[49,95811,95812],{"class":55},"#升序排序\n",[49,95814,95815,95818],{"class":51,"line":86},[49,95816,95817],{"class":66},"np.argsort(a)",[49,95819,95820],{"class":55},"#按照元素大小来索引排序\n",[19,95822,94516],{},[39,95824,95826],{"className":31626,"code":95825,"language":31628,"meta":44,"style":44},"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",[46,95827,95828,95840,95866,95871,95875,95880,95885,95890,95895,95899,95907,95911,95916,95921,95926,95931,95935,95940,95953,95957,95962,95967,95972,95977,95981,95986,95998,96002,96006,96010,96014,96018,96022,96027,96042,96047,96056,96061,96065,96069,96074,96078,96083],{"__ignoreMap":44},[49,95829,95830,95833,95835,95837],{"class":51,"line":52},[49,95831,95832],{"class":66},"np.random.seed(",[49,95834,80],{"class":73},[49,95836,1821],{"class":66},[49,95838,95839],{"class":55},"#保证每次值一样\n",[49,95841,95842,95844,95846,95848,95850,95852,95854,95856,95858,95860,95862,95864],{"class":51,"line":59},[49,95843,94531],{"class":66},[49,95845,1448],{"class":109},[49,95847,94339],{"class":66},[49,95849,1703],{"class":73},[49,95851,1770],{"class":66},[49,95853,32744],{"class":6468},[49,95855,1448],{"class":109},[49,95857,1403],{"class":66},[49,95859,1685],{"class":73},[49,95861,1770],{"class":66},[49,95863,1736],{"class":73},[49,95865,31745],{"class":66},[49,95867,95868],{"class":51,"line":70},[49,95869,95870],{"class":55},"#原数组：\n",[49,95872,95873],{"class":51,"line":86},[49,95874,95153],{"class":1505},[49,95876,95877],{"class":51,"line":98},[49,95878,95879],{"class":1505},"array([[44, 47, 64, 67, 67,  9],\n",[49,95881,95882],{"class":51,"line":121},[49,95883,95884],{"class":1505},"       [83, 21, 36, 87, 70, 88],\n",[49,95886,95887],{"class":51,"line":134},[49,95888,95889],{"class":1505},"       [88, 12, 58, 65, 39, 87],\n",[49,95891,95892],{"class":51,"line":1085},[49,95893,95894],{"class":1505},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[49,95896,95897],{"class":51,"line":2574},[49,95898,95153],{"class":1505},[49,95900,95901,95904],{"class":51,"line":2586},[49,95902,95903],{"class":66},"np.sort(aa)",[49,95905,95906],{"class":55},"#每行进行了排序\n",[49,95908,95909],{"class":51,"line":2867},[49,95910,95153],{"class":1505},[49,95912,95913],{"class":51,"line":2872},[49,95914,95915],{"class":1505},"array([[ 9, 44, 47, 64, 67, 67],\n",[49,95917,95918],{"class":51,"line":2878},[49,95919,95920],{"class":1505},"       [21, 36, 70, 83, 87, 88],\n",[49,95922,95923],{"class":51,"line":2883},[49,95924,95925],{"class":1505},"       [12, 39, 58, 65, 87, 88],\n",[49,95927,95928],{"class":51,"line":2897},[49,95929,95930],{"class":1505},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[49,95932,95933],{"class":51,"line":2902},[49,95934,95153],{"class":1505},[49,95936,95937],{"class":51,"line":2908},[49,95938,95939],{"class":55},"#axis=0时\n",[49,95941,95942,95945,95947,95949,95951],{"class":51,"line":2929},[49,95943,95944],{"class":66},"np.sort(aa,",[49,95946,48762],{"class":6468},[49,95948,1448],{"class":109},[49,95950,80],{"class":73},[49,95952,1409],{"class":66},[49,95954,95955],{"class":51,"line":2934},[49,95956,95153],{"class":1505},[49,95958,95959],{"class":51,"line":2948},[49,95960,95961],{"class":1505},"array([[44, 12, 36, 37, 25,  9],\n",[49,95963,95964],{"class":51,"line":2953},[49,95965,95966],{"class":1505},"       [46, 21, 58, 65, 39, 77],\n",[49,95968,95969],{"class":51,"line":2982},[49,95970,95971],{"class":1505},"       [83, 47, 64, 67, 67, 87],\n",[49,95973,95974],{"class":51,"line":2987},[49,95975,95976],{"class":1505},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[49,95978,95979],{"class":51,"line":3004},[49,95980,95153],{"class":1505},[49,95982,95983],{"class":51,"line":3009},[49,95984,95985],{"class":55},"#axis=1时,为默认值\n",[49,95987,95988,95990,95992,95994,95996],{"class":51,"line":3014},[49,95989,95944],{"class":66},[49,95991,48762],{"class":6468},[49,95993,1448],{"class":109},[49,95995,159],{"class":73},[49,95997,1409],{"class":66},[49,95999,96000],{"class":51,"line":3019},[49,96001,95153],{"class":1505},[49,96003,96004],{"class":51,"line":3033},[49,96005,95915],{"class":1505},[49,96007,96008],{"class":51,"line":3038},[49,96009,95920],{"class":1505},[49,96011,96012],{"class":51,"line":3831},[49,96013,95925],{"class":1505},[49,96015,96016],{"class":51,"line":3845},[49,96017,95930],{"class":1505},[49,96019,96020],{"class":51,"line":3853},[49,96021,95153],{"class":1505},[49,96023,96024],{"class":51,"line":3858},[49,96025,96026],{"class":55},"#按最后一列排序\n",[49,96028,96029,96031,96033,96036,96038,96040],{"class":51,"line":3864},[49,96030,1655],{"class":66},[49,96032,1448],{"class":109},[49,96034,96035],{"class":66},"aa[:,",[49,96037,1923],{"class":109},[49,96039,159],{"class":73},[49,96041,34494],{"class":66},[49,96043,96044],{"class":51,"line":3870},[49,96045,96046],{"class":55},"#获取最后一列排好序的索引\n",[49,96048,96049,96051,96053],{"class":51,"line":3875},[49,96050,75287],{"class":66},[49,96052,1448],{"class":109},[49,96054,96055],{"class":66},"np.argsort(b)\n",[49,96057,96058],{"class":51,"line":9200},[49,96059,96060],{"class":66},"aa[index]\n",[49,96062,96063],{"class":51,"line":9224},[49,96064,95153],{"class":1505},[49,96066,96067],{"class":51,"line":9229},[49,96068,95879],{"class":1505},[49,96070,96071],{"class":51,"line":9235},[49,96072,96073],{"class":1505},"       [46, 88, 81, 37, 25, 77],\n",[49,96075,96076],{"class":51,"line":9262},[49,96077,95889],{"class":1505},[49,96079,96080],{"class":51,"line":9267},[49,96081,96082],{"class":1505},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[49,96084,96085],{"class":51,"line":9273},[49,96086,95153],{"class":1505},[1305,96088,96089],{},"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":44,"searchDepth":59,"depth":59,"links":96091},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95738,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96098,"title":96099,"body":96100,"description":1327,"extension":1328,"meta":96130,"navigation":1330,"path":96131,"seo":96132,"stem":96133,"__hash__":96134},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96101,"toc":96128},[96102,96105,96108,96111,96114,96117,96120,96123],[10,96103,96099],{"id":96104},"_14广播机制",[19,96106,96107],{},"广播的规则：",[19,96109,96110],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96112,96113],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96115,96116],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96118,96119],{},"3.如果没有维度形状为1，则会引发异常",[19,96121,96122],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96124,96125],{},[174,96126],{"alt":44,"src":96127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":44,"searchDepth":59,"depth":59,"links":96129},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96099,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96136,"title":96137,"body":96138,"description":1327,"extension":1328,"meta":96236,"navigation":1330,"path":96237,"seo":96238,"stem":96239,"__hash__":96240},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96139,"toc":96234},[96140,96143,96146,96231],[10,96141,96137],{"id":96142},"_15比较掩码",[19,96144,96145],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[39,96147,96149],{"className":31626,"code":96148,"language":31628,"meta":44,"style":44},"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",[46,96150,96151,96197,96208,96222,96226],{"__ignoreMap":44},[49,96152,96153,96155,96157,96160,96162,96164,96166,96168,96170,96172,96174,96176,96178,96180,96182,96184,96186,96188,96190,96192,96194],{"class":51,"line":52},[49,96154,1630],{"class":66},[49,96156,1448],{"class":109},[49,96158,96159],{"class":66},"np.array([[",[49,96161,159],{"class":73},[49,96163,1770],{"class":66},[49,96165,1478],{"class":73},[49,96167,1770],{"class":66},[49,96169,1472],{"class":73},[49,96171,49278],{"class":66},[49,96173,1863],{"class":73},[49,96175,1770],{"class":66},[49,96177,1889],{"class":73},[49,96179,1770],{"class":66},[49,96181,1914],{"class":73},[49,96183,49278],{"class":66},[49,96185,2115],{"class":73},[49,96187,1770],{"class":66},[49,96189,2140],{"class":73},[49,96191,1770],{"class":66},[49,96193,2165],{"class":73},[49,96195,96196],{"class":66},"]])\n",[49,96198,96199,96201,96203,96205],{"class":51,"line":59},[49,96200,1630],{"class":66},[49,96202,2300],{"class":109},[49,96204,875],{"class":73},[49,96206,96207],{"class":55},"#结果是一个由True,False组成的数组\n",[49,96209,96210,96213,96215,96217,96219],{"class":51,"line":70},[49,96211,96212],{"class":66},"a[a",[49,96214,2300],{"class":109},[49,96216,875],{"class":73},[49,96218,2330],{"class":66},[49,96220,96221],{"class":55},"#小于20的元素会存到这个数组中\n",[49,96223,96224],{"class":51,"line":86},[49,96225,94789],{"class":55},[49,96227,96228],{"class":51,"line":98},[49,96229,96230],{"class":55},"#array([ 1,  2,  3, 11, 12, 13])\n",[1305,96232,96233],{},"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":44,"searchDepth":59,"depth":59,"links":96235},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96137,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96242,"title":96243,"body":96244,"description":1327,"extension":1328,"meta":96336,"navigation":1330,"path":96337,"seo":96338,"stem":96339,"__hash__":96340},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96245,"toc":96334},[96246,96249,96252,96255,96258,96261,96326,96331],[10,96247,96243],{"id":96248},"_16魔法命令time",[19,96250,96251],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96253,96254],{},"%:行模式",[19,96256,96257],{},"%%:单元格模式",[19,96259,96260],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[39,96262,96264],{"className":31626,"code":96263,"language":31628,"meta":44,"style":44},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[46,96265,96266,96271,96278,96283,96292,96305,96309,96317],{"__ignoreMap":44},[49,96267,96268],{"class":51,"line":52},[49,96269,96270],{"class":55},"#程序执行时间\n",[49,96272,96273,96275],{"class":51,"line":59},[49,96274,31640],{"class":109},[49,96276,96277],{"class":66}," time \n",[49,96279,96280],{"class":51,"line":70},[49,96281,96282],{"class":55},"#获取时间\n",[49,96284,96285,96288,96290],{"class":51,"line":86},[49,96286,96287],{"class":66},"start",[49,96289,1448],{"class":109},[49,96291,33666],{"class":66},[49,96293,96294,96297,96300,96302],{"class":51,"line":98},[49,96295,96296],{"class":66},"time.sleep(",[49,96298,96299],{"class":73},"0.4",[49,96301,1821],{"class":66},[49,96303,96304],{"class":55},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[49,96306,96307],{"class":51,"line":121},[49,96308,96282],{"class":55},[49,96310,96311,96313,96315],{"class":51,"line":134},[49,96312,47049],{"class":66},[49,96314,1448],{"class":109},[49,96316,33666],{"class":66},[49,96318,96319,96321,96323],{"class":51,"line":1085},[49,96320,47049],{"class":66},[49,96322,1923],{"class":109},[49,96324,96325],{"class":66},"start\n",[19,96327,96328],{},[174,96329],{"alt":44,"src":96330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1305,96332,96333],{},"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":44,"searchDepth":59,"depth":59,"links":96335},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96243,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96342,"title":96343,"body":96344,"description":1327,"extension":1328,"meta":96379,"navigation":1330,"path":96380,"seo":96381,"stem":96382,"__hash__":96383},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96345,"toc":96377},[96346,96349,96352,96355,96358,96361,96364,96367,96372],[10,96347,96343],{"id":96348},"_17魔法命令timeit",[19,96350,96351],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96353,96354],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96356,96357],{},"单元格模式：",[19,96359,96360],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96362,96363],{},"初始化语句执行次数由轮数来决定",[19,96365,96366],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96368,96369],{},[174,96370],{"alt":44,"src":96371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96373,96374],{},[174,96375],{"alt":44,"src":96376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":44,"searchDepth":59,"depth":59,"links":96378},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96343,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96385,"title":96386,"body":96387,"description":1327,"extension":1328,"meta":96405,"navigation":1330,"path":96406,"seo":96407,"stem":96408,"__hash__":96409},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96388,"toc":96403},[96389,96392,96395,96398],[10,96390,96386],{"id":96391},"_18魔法命令writefile和run",[19,96393,96394],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96396,96397],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96399,96400],{},[174,96401],{"alt":44,"src":96402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":44,"searchDepth":59,"depth":59,"links":96404},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96386,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96411,"title":96412,"body":96413,"description":1327,"extension":1328,"meta":96466,"navigation":1330,"path":96467,"seo":96468,"stem":96469,"__hash__":96470},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96414,"toc":96464},[96415,96418,96421,96423,96426,96429,96434,96437,96440,96443,96446,96449,96452,96455,96458,96461],[10,96416,96412],{"id":96417},"_19魔法命令memit",[19,96419,96420],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96422,25848],{},[19,96424,96425],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96427,96428],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96430,96431],{},[174,96432],{"alt":44,"src":96433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96435,96436],{},"补充：",[19,96438,96439],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96441,96442],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96444,96445],{},"解决方法：",[19,96447,96448],{},"1.cmd",[19,96450,96451],{},"2.依次输入以下代码：",[19,96453,96454],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,96456,96457],{},"pip install --upgrade ipython",[19,96459,96460],{},"#升级 memory_profiler 和 setuptools",[19,96462,96463],{},"pip install --upgrade memory_profiler setuptools",{"title":44,"searchDepth":59,"depth":59,"links":96465},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96412,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96472,"title":96473,"body":96474,"description":1327,"extension":1328,"meta":98120,"navigation":1330,"path":98121,"seo":98122,"stem":98123,"__hash__":98124},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96475,"toc":98090},[96476,96479,96483,96487,96548,96551,96556,96560,96565,96570,96575,96580,96583,96588,96592,96596,96629,96632,96635,96638,96690,96693,96729,96732,96774,96778,96799,96801,96838,96840,96845,96847,96852,96856,96859,96887,96891,96895,96948,96952,97044,97048,97052,97055,97060,97064,97089,97094,97098,97101,97104,97107,97110,97113,97116,97119,97131,97135,97139,97142,97174,97177,97200,97203,97229,97232,97258,97261,97295,97298,97360,97364,97367,97371,97374,97400,97403,97406,97411,97414,97483,97485,97490,97551,97554,97565,97571,97576,97580,97583,97596,97600,97615,97617,97640,97642,97668,97671,97674,97677,97725,97727,97732,97736,97740,97767,97771,97798,97801,97806,97811,97901,97905,97963,97968,97971,97974,98016,98020,98076,98081,98084,98087],[10,96477,96473],{"id":96478},"_2创建数组",[14,96480,96482],{"id":96481},"_21-array函数创建数组","2.1 array()函数创建数组",[183,96484,96486],{"id":96485},"_221-函数语句","2.2.1 函数语句",[39,96488,96490],{"className":31626,"code":96489,"language":31628,"meta":44,"style":44},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[46,96491,96492],{"__ignoreMap":44},[49,96493,96494,96497,96500,96502,96504,96506,96508,96510,96513,96515,96518,96520,96523,96525,96527,96529,96532,96534,96537,96539,96542,96544,96546],{"class":51,"line":52},[49,96495,96496],{"class":66},"numpy.array(",[49,96498,96499],{"class":73},"object",[49,96501,13687],{"class":66},[49,96503,94725],{"class":6468},[49,96505,14816],{"class":109},[49,96507,40181],{"class":73},[49,96509,13687],{"class":66},[49,96511,96512],{"class":6468},"copy",[49,96514,14816],{"class":109},[49,96516,96517],{"class":73}," True",[49,96519,13687],{"class":66},[49,96521,96522],{"class":6468},"order",[49,96524,14816],{"class":109},[49,96526,40181],{"class":73},[49,96528,13687],{"class":66},[49,96530,96531],{"class":6468},"subok",[49,96533,14816],{"class":109},[49,96535,96536],{"class":73}," False",[49,96538,13687],{"class":66},[49,96540,96541],{"class":6468},"ndmin",[49,96543,14816],{"class":109},[49,96545,5347],{"class":73},[49,96547,1409],{"class":66},[19,96549,96550],{},"参数：",[19,96552,96553],{},[174,96554],{"alt":44,"src":96555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[183,96557,96559],{"id":96558},"_222-实例","2.2.2 实例",[19,96561,96562],{},[174,96563],{"alt":44,"src":96564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,96566,96567],{},[174,96568],{"alt":44,"src":96569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,96571,96572],{},[174,96573],{"alt":44,"src":96574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,96576,96577],{},[174,96578],{"alt":44,"src":96579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,96581,96582],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,96584,96585],{},[174,96586],{"alt":44,"src":96587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96589,96591],{"id":96590},"_22-随机数创建数组","2.2 随机数创建数组",[183,96593,96595],{"id":96594},"_221-random语句","2.2.1 random语句",[39,96597,96599],{"className":31626,"code":96598,"language":31628,"meta":44,"style":44},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[46,96600,96601,96606,96611,96619,96624],{"__ignoreMap":44},[49,96602,96603],{"class":51,"line":52},[49,96604,96605],{"class":55},"#random.random()\n",[49,96607,96608],{"class":51,"line":59},[49,96609,96610],{"class":55},"#确定随机种子,就是每次运行结果是相同的\n",[49,96612,96613,96615,96617],{"class":51,"line":70},[49,96614,95832],{"class":66},[49,96616,80],{"class":73},[49,96618,1409],{"class":66},[49,96620,96621],{"class":51,"line":86},[49,96622,96623],{"class":66},"np.random.random()\n",[49,96625,96626],{"class":51,"line":98},[49,96627,96628],{"class":55},"#生成一个随机的数目\n",[19,96630,96631],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,96633,96634],{},"可以指定数组形状 size",[19,96636,96637],{},"①生成一维数组",[39,96639,96641],{"className":31626,"code":96640,"language":31628,"meta":44,"style":44},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[46,96642,96643,96648,96661,96666,96682],{"__ignoreMap":44},[49,96644,96645],{"class":51,"line":52},[49,96646,96647],{"class":55},"#random.random(size())\n",[49,96649,96650,96653,96655,96657,96659],{"class":51,"line":59},[49,96651,96652],{"class":66},"np.random.random(",[49,96654,32744],{"class":6468},[49,96656,1448],{"class":109},[49,96658,1711],{"class":73},[49,96660,1409],{"class":66},[49,96662,96663],{"class":51,"line":70},[49,96664,96665],{"class":55},"#生成一位的五个元素\n",[49,96667,96668,96670,96672,96674,96676,96678,96680],{"class":51,"line":86},[49,96669,1630],{"class":66},[49,96671,1448],{"class":109},[49,96673,96652],{"class":66},[49,96675,32744],{"class":6468},[49,96677,1448],{"class":109},[49,96679,1685],{"class":73},[49,96681,1409],{"class":66},[49,96683,96684,96687],{"class":51,"line":98},[49,96685,96686],{"class":66},"a.shape ",[49,96688,96689],{"class":55},"#输出数组形状\n",[19,96691,96692],{},"②生成二维数组",[39,96694,96696],{"className":31626,"code":96695,"language":31628,"meta":44,"style":44},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[46,96697,96698,96702,96724],{"__ignoreMap":44},[49,96699,96700],{"class":51,"line":52},[49,96701,94526],{"class":55},[49,96703,96704,96706,96708,96710,96712,96714,96716,96718,96720,96722],{"class":51,"line":59},[49,96705,94531],{"class":66},[49,96707,1448],{"class":109},[49,96709,96652],{"class":66},[49,96711,32744],{"class":6468},[49,96713,1448],{"class":109},[49,96715,1403],{"class":66},[49,96717,1685],{"class":73},[49,96719,1770],{"class":66},[49,96721,1711],{"class":73},[49,96723,31745],{"class":66},[49,96725,96726],{"class":51,"line":70},[49,96727,96728],{"class":55},"#生成四行五列的数组\n",[19,96730,96731],{},"③生成三维数组",[39,96733,96735],{"className":31626,"code":96734,"language":31628,"meta":44,"style":44},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[46,96736,96737,96742,96769],{"__ignoreMap":44},[49,96738,96739],{"class":51,"line":52},[49,96740,96741],{"class":55},"#三维数组\n",[49,96743,96744,96747,96749,96751,96753,96755,96757,96759,96761,96763,96765,96767],{"class":51,"line":59},[49,96745,96746],{"class":66},"aaa",[49,96748,1448],{"class":109},[49,96750,96652],{"class":66},[49,96752,32744],{"class":6468},[49,96754,1448],{"class":109},[49,96756,1403],{"class":66},[49,96758,1478],{"class":73},[49,96760,1770],{"class":66},[49,96762,1472],{"class":73},[49,96764,1770],{"class":66},[49,96766,1685],{"class":73},[49,96768,31745],{"class":66},[49,96770,96771],{"class":51,"line":70},[49,96772,96773],{"class":66},"aaa.shape\n",[183,96775,96777],{"id":96776},"_222-randint语句","2.2.2 randint语句",[39,96779,96781],{"className":31626,"code":96780,"language":31628,"meta":44,"style":44},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[46,96782,96783,96788],{"__ignoreMap":44},[49,96784,96785],{"class":51,"line":52},[49,96786,96787],{"class":55},"#生成随机的整数 random.randint(low,high,size)\n",[49,96789,96790,96792,96794,96796],{"class":51,"line":59},[49,96791,94339],{"class":66},[49,96793,1711],{"class":73},[49,96795,14966],{"class":66},[49,96797,96798],{"class":55},"#0~5中的随机一个数\n",[19,96800,96637],{},[39,96802,96804],{"className":31626,"code":96803,"language":31628,"meta":44,"style":44},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[46,96805,96806,96811,96833],{"__ignoreMap":44},[49,96807,96808],{"class":51,"line":52},[49,96809,96810],{"class":55},"#一维\n",[49,96812,96813,96815,96817,96819,96821,96823,96825,96827,96829,96831],{"class":51,"line":59},[49,96814,94339],{"class":66},[49,96816,159],{"class":73},[49,96818,1770],{"class":66},[49,96820,1863],{"class":73},[49,96822,1770],{"class":66},[49,96824,32744],{"class":6468},[49,96826,1448],{"class":109},[49,96828,1403],{"class":66},[49,96830,106],{"class":73},[49,96832,31745],{"class":66},[49,96834,96835],{"class":51,"line":70},[49,96836,96837],{"class":55},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96839,96692],{},[19,96841,96842],{},[174,96843],{"alt":44,"src":96844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96846,96731],{},[19,96848,96849],{},[174,96850],{"alt":44,"src":96851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[183,96853,96855],{"id":96854},"_222-rand语句","2.2.2 rand语句",[19,96857,96858],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[39,96860,96862],{"className":31626,"code":96861,"language":31628,"meta":44,"style":44},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[46,96863,96864,96877,96882],{"__ignoreMap":44},[49,96865,96866,96869,96871,96873,96875],{"class":51,"line":52},[49,96867,96868],{"class":66},"np.random.rand(",[49,96870,1703],{"class":73},[49,96872,1770],{"class":66},[49,96874,106],{"class":73},[49,96876,1409],{"class":66},[49,96878,96879],{"class":51,"line":59},[49,96880,96881],{"class":55},"#第一个参数100：行数，表示有100个样本\n",[49,96883,96884],{"class":51,"line":70},[49,96885,96886],{"class":55},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96888,96890],{"id":96889},"_23-arange创建数组","2.3 arange()创建数组",[183,96892,96894],{"id":96893},"_231-函数语句","2.3.1 函数语句",[39,96896,96898],{"className":31626,"code":96897,"language":31628,"meta":44,"style":44},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[46,96899,96900,96914,96919,96924,96929,96934,96939,96944],{"__ignoreMap":44},[49,96901,96902,96905,96907,96909,96912],{"class":51,"line":52},[49,96903,96904],{"class":66},"numpy.arange([start,] stop[, step], ",[49,96906,94725],{"class":6468},[49,96908,1448],{"class":109},[49,96910,96911],{"class":73},"None",[49,96913,1409],{"class":66},[49,96915,96916],{"class":51,"line":59},[49,96917,96918],{"class":55},"#参数\n",[49,96920,96921],{"class":51,"line":70},[49,96922,96923],{"class":1505},"\"\"\"\n",[49,96925,96926],{"class":51,"line":86},[49,96927,96928],{"class":1505},"start:起始值，可选，默认从 0 开始。\n",[49,96930,96931],{"class":51,"line":98},[49,96932,96933],{"class":1505},"stop:结束值（不包含该值）。\n",[49,96935,96936],{"class":51,"line":121},[49,96937,96938],{"class":1505},"step:步长，可选，默认是 1。可以为浮点数。\n",[49,96940,96941],{"class":51,"line":134},[49,96942,96943],{"class":1505},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[49,96945,96946],{"class":51,"line":1085},[49,96947,96923],{"class":1505},[183,96949,96951],{"id":96950},"_232-实例","2.3.2 实例",[39,96953,96955],{"className":31626,"code":96954,"language":31628,"meta":44,"style":44},"#创建一维数组\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",[46,96956,96957,96961,96985,96990,96995,96999,97022,97026,97030,97035,97040],{"__ignoreMap":44},[49,96958,96959],{"class":51,"line":52},[49,96960,94330],{"class":55},[49,96962,96963,96965,96967,96969,96971,96973,96975,96977,96979,96981,96983],{"class":51,"line":59},[49,96964,94227],{"class":66},[49,96966,159],{"class":73},[49,96968,1770],{"class":66},[49,96970,2115],{"class":73},[49,96972,1770],{"class":66},[49,96974,159],{"class":73},[49,96976,1770],{"class":66},[49,96978,94725],{"class":6468},[49,96980,1448],{"class":109},[49,96982,1406],{"class":73},[49,96984,1409],{"class":66},[49,96986,96987],{"class":51,"line":70},[49,96988,96989],{"class":55},"#输出结果：\n",[49,96991,96992],{"class":51,"line":86},[49,96993,96994],{"class":55},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[49,96996,96997],{"class":51,"line":98},[49,96998,95172],{"class":55},[49,97000,97001,97004,97006,97008,97010,97013,97015,97017,97019],{"class":51,"line":121},[49,97002,97003],{"class":66},"np.array([np.arange(",[49,97005,159],{"class":73},[49,97007,1770],{"class":66},[49,97009,1685],{"class":73},[49,97011,97012],{"class":66},"),np.arange(",[49,97014,1685],{"class":73},[49,97016,1770],{"class":66},[49,97018,1761],{"class":73},[49,97020,97021],{"class":66},")])\n",[49,97023,97024],{"class":51,"line":134},[49,97025,94789],{"class":55},[49,97027,97028],{"class":51,"line":1085},[49,97029,96923],{"class":1505},[49,97031,97032],{"class":51,"line":2574},[49,97033,97034],{"class":1505},"array([[1, 2, 3],\n",[49,97036,97037],{"class":51,"line":2586},[49,97038,97039],{"class":1505},"       [4, 5, 6]])\n",[49,97041,97042],{"class":51,"line":2867},[49,97043,96923],{"class":1505},[14,97045,97047],{"id":97046},"_24-生态分布","2.4 生态分布",[183,97049,97051],{"id":97050},"_241-标准正态分布","2.4.1 标准正态分布",[19,97053,97054],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97056,97057],{},[174,97058],{"alt":44,"src":97059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[183,97061,97063],{"id":97062},"_242-常规正态分布","2.4.2 常规正态分布",[39,97065,97067],{"className":31626,"code":97066,"language":31628,"meta":44,"style":44},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[46,97068,97069,97074,97079,97084],{"__ignoreMap":44},[49,97070,97071],{"class":51,"line":52},[49,97072,97073],{"class":66},"random.normal(loc,scale,size)也可以生成正态分布\n",[49,97075,97076],{"class":51,"line":59},[49,97077,97078],{"class":55},"#loc:期望\n",[49,97080,97081],{"class":51,"line":70},[49,97082,97083],{"class":55},"#scale:方差\n",[49,97085,97086],{"class":51,"line":86},[49,97087,97088],{"class":55},"#size:用于确定是几维的数列\n",[19,97090,97091],{},[174,97092],{"alt":44,"src":97093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97095,97097],{"id":97096},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97099,97100],{},"ndim:秩，维度个数",[19,97102,97103],{},"size:数组元素的个数",[19,97105,97106],{},"shape:数组的形状",[19,97108,97109],{},"dtype:数组元素的类型",[19,97111,97112],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97114,97115],{},"他们都是属性，通过数组.属性的形式来确定",[19,97117,97118],{},"如果需要输出多个可以通过以下方式：",[39,97120,97122],{"className":31626,"code":97121,"language":31628,"meta":44,"style":44},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[46,97123,97124],{"__ignoreMap":44},[49,97125,97126,97128],{"class":51,"line":52},[49,97127,31663],{"class":73},[49,97129,97130],{"class":66},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97132,97134],{"id":97133},"_26-其他方式创建数组","2.6 其他方式创建数组",[183,97136,97138],{"id":97137},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97140,97141],{},"①创建一维数组",[39,97143,97145],{"className":31626,"code":97144,"language":31628,"meta":44,"style":44},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[46,97146,97147,97156,97160,97165,97170],{"__ignoreMap":44},[49,97148,97149,97152,97154],{"class":51,"line":52},[49,97150,97151],{"class":66},"np.zeros(",[49,97153,106],{"class":73},[49,97155,1409],{"class":66},[49,97157,97158],{"class":51,"line":59},[49,97159,96923],{"class":1505},[49,97161,97162],{"class":51,"line":70},[49,97163,97164],{"class":1505},"输出结果：\n",[49,97166,97167],{"class":51,"line":86},[49,97168,97169],{"class":1505},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[49,97171,97172],{"class":51,"line":98},[49,97173,96923],{"class":1505},[19,97175,97176],{},"上方代码等价于：",[39,97178,97180],{"className":31626,"code":97179,"language":31628,"meta":44,"style":44},"np.zeros(shape=(10))#创建10个元素的0数组\n",[46,97181,97182],{"__ignoreMap":44},[49,97183,97184,97186,97189,97191,97193,97195,97197],{"class":51,"line":52},[49,97185,97151],{"class":66},[49,97187,97188],{"class":6468},"shape",[49,97190,1448],{"class":109},[49,97192,1403],{"class":66},[49,97194,106],{"class":73},[49,97196,83997],{"class":66},[49,97198,97199],{"class":55},"#创建10个元素的0数组\n",[19,97201,97202],{},"也可以指定类型",[39,97204,97206],{"className":31626,"code":97205,"language":31628,"meta":44,"style":44},"#指定类型\nnp.zeros(5,dtype=int)\n",[46,97207,97208,97213],{"__ignoreMap":44},[49,97209,97210],{"class":51,"line":52},[49,97211,97212],{"class":55},"#指定类型\n",[49,97214,97215,97217,97219,97221,97223,97225,97227],{"class":51,"line":59},[49,97216,97151],{"class":66},[49,97218,1711],{"class":73},[49,97220,1770],{"class":66},[49,97222,94725],{"class":6468},[49,97224,1448],{"class":109},[49,97226,1406],{"class":73},[49,97228,1409],{"class":66},[19,97230,97231],{},"②创建二维数组",[39,97233,97235],{"className":31626,"code":97234,"language":31628,"meta":44,"style":44},"np.zeros((3,4),dtype=int)\n",[46,97236,97237],{"__ignoreMap":44},[49,97238,97239,97242,97244,97246,97248,97250,97252,97254,97256],{"class":51,"line":52},[49,97240,97241],{"class":66},"np.zeros((",[49,97243,1472],{"class":73},[49,97245,1770],{"class":66},[49,97247,1685],{"class":73},[49,97249,43504],{"class":66},[49,97251,94725],{"class":6468},[49,97253,1448],{"class":109},[49,97255,1406],{"class":73},[49,97257,1409],{"class":66},[19,97259,97260],{},"③创建三维数组",[39,97262,97264],{"className":31626,"code":97263,"language":31628,"meta":44,"style":44},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[46,97265,97266,97271],{"__ignoreMap":44},[49,97267,97268],{"class":51,"line":52},[49,97269,97270],{"class":55},"#创建三维数组\n",[49,97272,97273,97275,97277,97279,97281,97283,97285,97287,97289,97291,97293],{"class":51,"line":59},[49,97274,97241],{"class":66},[49,97276,1472],{"class":73},[49,97278,1770],{"class":66},[49,97280,1685],{"class":73},[49,97282,1770],{"class":66},[49,97284,1711],{"class":73},[49,97286,43504],{"class":66},[49,97288,94725],{"class":6468},[49,97290,1448],{"class":109},[49,97292,1406],{"class":73},[49,97294,1409],{"class":66},[19,97296,97297],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[39,97299,97301],{"className":31626,"code":97300,"language":31628,"meta":44,"style":44},"#使用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",[46,97302,97303,97308,97323,97328,97333,97355],{"__ignoreMap":44},[49,97304,97305],{"class":51,"line":52},[49,97306,97307],{"class":55},"#使用zeros_like将创建的一维数组变成全0的数组\n",[49,97309,97310,97312,97314,97316,97318,97320],{"class":51,"line":59},[49,97311,1630],{"class":66},[49,97313,1448],{"class":109},[49,97315,94227],{"class":66},[49,97317,1685],{"class":73},[49,97319,1821],{"class":66},[49,97321,97322],{"class":55},"#这个得到的结果：一维数组0，1，2，3\n",[49,97324,97325],{"class":51,"line":70},[49,97326,97327],{"class":66},"np.zeros_like(a)\n",[49,97329,97330],{"class":51,"line":86},[49,97331,97332],{"class":55},"#使用zeros_like将创建的二维数组变成全0的数组\n",[49,97334,97335,97337,97339,97341,97343,97345,97347,97349,97351,97353],{"class":51,"line":98},[49,97336,94531],{"class":66},[49,97338,1448],{"class":109},[49,97340,96652],{"class":66},[49,97342,32744],{"class":6468},[49,97344,1448],{"class":109},[49,97346,1403],{"class":66},[49,97348,1685],{"class":73},[49,97350,1770],{"class":66},[49,97352,1711],{"class":73},[49,97354,31745],{"class":66},[49,97356,97357],{"class":51,"line":121},[49,97358,97359],{"class":66},"np.zeros_like(aa)\n",[183,97361,97363],{"id":97362},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97365,97366],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[183,97368,97370],{"id":97369},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97372,97373],{},"①empty()用法",[39,97375,97377],{"className":31626,"code":97376,"language":31628,"meta":44,"style":44},"numpy.empty(shape,dtype=float,order='c')\n",[46,97378,97379],{"__ignoreMap":44},[49,97380,97381,97384,97386,97388,97390,97392,97394,97396,97398],{"class":51,"line":52},[49,97382,97383],{"class":66},"numpy.empty(shape,",[49,97385,94725],{"class":6468},[49,97387,1448],{"class":109},[49,97389,1442],{"class":73},[49,97391,1770],{"class":66},[49,97393,96522],{"class":6468},[49,97395,1448],{"class":109},[49,97397,77257],{"class":1505},[49,97399,1409],{"class":66},[19,97401,97402],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97404,97405],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97407,97408],{},[174,97409],{"alt":44,"src":97410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97412,97413],{},"②empty()用法",[39,97415,97417],{"className":31626,"code":97416,"language":31628,"meta":44,"style":44},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[46,97418,97419,97440,97452,97473,97478],{"__ignoreMap":44},[49,97420,97421,97423,97425,97428,97430,97432,97434,97436,97438],{"class":51,"line":52},[49,97422,2235],{"class":66},[49,97424,1448],{"class":109},[49,97426,97427],{"class":66},"np.empty(",[49,97429,106],{"class":73},[49,97431,1770],{"class":66},[49,97433,94725],{"class":6468},[49,97435,1448],{"class":109},[49,97437,1406],{"class":73},[49,97439,1409],{"class":66},[49,97441,97442,97444,97446,97448,97450],{"class":51,"line":59},[49,97443,2210],{"class":66},[49,97445,1448],{"class":109},[49,97447,94227],{"class":66},[49,97449,1711],{"class":73},[49,97451,1409],{"class":66},[49,97453,97454,97457,97459,97462,97464,97466,97469,97471],{"class":51,"line":70},[49,97455,97456],{"class":66},"np.add(",[49,97458,1478],{"class":73},[49,97460,97461],{"class":66},",x,",[49,97463,94279],{"class":6468},[49,97465,1448],{"class":109},[49,97467,97468],{"class":66},"y[:",[49,97470,1711],{"class":73},[49,97472,5911],{"class":66},[49,97474,97475],{"class":51,"line":86},[49,97476,97477],{"class":55},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[49,97479,97480],{"class":51,"line":98},[49,97481,97482],{"class":66},"y\n",[19,97484,12766],{},[19,97486,97487],{},[174,97488],{"alt":44,"src":97489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[39,97491,97493],{"className":31626,"code":97492,"language":31628,"meta":44,"style":44},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[46,97494,97495,97511,97531,97546],{"__ignoreMap":44},[49,97496,97497,97499,97501,97503,97505,97507,97509],{"class":51,"line":52},[49,97498,2210],{"class":66},[49,97500,1448],{"class":109},[49,97502,94227],{"class":66},[49,97504,159],{"class":73},[49,97506,1770],{"class":66},[49,97508,1736],{"class":73},[49,97510,1409],{"class":66},[49,97512,97513,97515,97517,97519,97521,97523,97525,97527,97529],{"class":51,"line":59},[49,97514,2235],{"class":66},[49,97516,1448],{"class":109},[49,97518,97427],{"class":66},[49,97520,1711],{"class":73},[49,97522,1770],{"class":66},[49,97524,94725],{"class":6468},[49,97526,1448],{"class":109},[49,97528,1406],{"class":73},[49,97530,1409],{"class":66},[49,97532,97533,97536,97538,97540,97542,97544],{"class":51,"line":70},[49,97534,97535],{"class":66},"np.add(x,",[49,97537,1478],{"class":73},[49,97539,1770],{"class":66},[49,97541,94279],{"class":6468},[49,97543,1448],{"class":109},[49,97545,94674],{"class":66},[49,97547,97548],{"class":51,"line":86},[49,97549,97550],{"class":55},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,97552,97553],{},"③empty_like()",[19,97555,97556],{},[485,97557,97558,97559,97564],{},"创建一个",[485,97560,97561],{},[485,97562,97563],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,97566,97567,97570],{},[46,97568,97569],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,97572,97573],{},[174,97574],{"alt":44,"src":97575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[183,97577,97579],{"id":97578},"_264-用法","2.6.4 ？？用法",[19,97581,97582],{},"当想查看一个函数的参数时，可以通过？？来实现",[39,97584,97586],{"className":31626,"code":97585,"language":31628,"meta":44,"style":44},"np.full??\n",[46,97587,97588],{"__ignoreMap":44},[49,97589,97590,97593],{"class":51,"line":52},[49,97591,97592],{"class":66},"np.full",[49,97594,97595],{"class":78630},"??\n",[183,97597,97599],{"id":97598},"_265-full创建数组","2.6.5 full()创建数组",[39,97601,97603],{"className":31626,"code":97602,"language":31628,"meta":44,"style":44},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[46,97604,97605,97610],{"__ignoreMap":44},[49,97606,97607],{"class":51,"line":52},[49,97608,97609],{"class":66},"full(shape,fill_value)\n",[49,97611,97612],{"class":51,"line":59},[49,97613,97614],{"class":66},"创建全为某个指定值的数组\n",[19,97616,95755],{},[39,97618,97620],{"className":31626,"code":97619,"language":31628,"meta":44,"style":44},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[46,97621,97622,97627],{"__ignoreMap":44},[49,97623,97624],{"class":51,"line":52},[49,97625,97626],{"class":55},"#创建一个一维数组,以20进行填充\n",[49,97628,97629,97632,97634,97636,97638],{"class":51,"line":59},[49,97630,97631],{"class":66},"np.full(",[49,97633,106],{"class":73},[49,97635,1770],{"class":66},[49,97637,875],{"class":73},[49,97639,1409],{"class":66},[19,97641,94516],{},[39,97643,97645],{"className":31626,"code":97644,"language":31628,"meta":44,"style":44},"#创建二维数组\nnp.full((3,5),11)\n",[46,97646,97647,97651],{"__ignoreMap":44},[49,97648,97649],{"class":51,"line":52},[49,97650,95172],{"class":55},[49,97652,97653,97656,97658,97660,97662,97664,97666],{"class":51,"line":59},[49,97654,97655],{"class":66},"np.full((",[49,97657,1472],{"class":73},[49,97659,1770],{"class":66},[49,97661,1711],{"class":73},[49,97663,43504],{"class":66},[49,97665,1863],{"class":73},[49,97667,1409],{"class":66},[19,97669,97670],{},"③full_like用法",[19,97672,97673],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,97675,97676],{},"这里是指定填充而已",[39,97678,97680],{"className":31626,"code":97679,"language":31628,"meta":44,"style":44},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[46,97681,97682,97687,97711,97716],{"__ignoreMap":44},[49,97683,97684],{"class":51,"line":52},[49,97685,97686],{"class":55},"#创建一个指定形状数组\n",[49,97688,97689,97691,97693,97695,97697,97699,97701,97703,97705,97707,97709],{"class":51,"line":59},[49,97690,1630],{"class":66},[49,97692,1448],{"class":109},[49,97694,94227],{"class":66},[49,97696,159],{"class":73},[49,97698,1770],{"class":66},[49,97700,1717],{"class":73},[49,97702,94232],{"class":66},[49,97704,1685],{"class":73},[49,97706,1770],{"class":66},[49,97708,1812],{"class":73},[49,97710,1409],{"class":66},[49,97712,97713],{"class":51,"line":70},[49,97714,97715],{"class":55},"#进行指定填充\n",[49,97717,97718,97721,97723],{"class":51,"line":86},[49,97719,97720],{"class":66},"np.full_like(a,",[49,97722,106],{"class":73},[49,97724,1409],{"class":66},[19,97726,12766],{},[19,97728,97729],{},[174,97730],{"alt":44,"src":97731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[183,97733,97735],{"id":97734},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[525,97737,97739],{"id":97738},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[39,97741,97743],{"className":31626,"code":97742,"language":31628,"meta":44,"style":44},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[46,97744,97745,97762],{"__ignoreMap":44},[49,97746,97747,97750,97752,97754,97756,97758,97760],{"class":51,"line":52},[49,97748,97749],{"class":66},"np.eye(",[49,97751,1685],{"class":73},[49,97753,1770],{"class":66},[49,97755,94725],{"class":6468},[49,97757,1448],{"class":109},[49,97759,1406],{"class":73},[49,97761,1409],{"class":66},[49,97763,97764],{"class":51,"line":59},[49,97765,97766],{"class":55},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[525,97768,97770],{"id":97769},"_2662-法2identity","2.6.6.2 法2：identity()",[39,97772,97774],{"className":31626,"code":97773,"language":31628,"meta":44,"style":44},"#identity()\nnp.identity(5,dtype=int)\n",[46,97775,97776,97781],{"__ignoreMap":44},[49,97777,97778],{"class":51,"line":52},[49,97779,97780],{"class":55},"#identity()\n",[49,97782,97783,97786,97788,97790,97792,97794,97796],{"class":51,"line":59},[49,97784,97785],{"class":66},"np.identity(",[49,97787,1711],{"class":73},[49,97789,1770],{"class":66},[49,97791,94725],{"class":6468},[49,97793,1448],{"class":109},[49,97795,1406],{"class":73},[49,97797,1409],{"class":66},[19,97799,97800],{},"两个函数是有区别的",[19,97802,97803],{},[174,97804],{"alt":44,"src":97805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97807,97808],{},[174,97809],{"alt":44,"src":97810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[39,97812,97814],{"className":31626,"code":97813,"language":31628,"meta":44,"style":44},"# 创建一个 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",[46,97815,97816,97821,97833,97838,97843,97848,97853,97857,97862,97882,97886,97891,97896],{"__ignoreMap":44},[49,97817,97818],{"class":51,"line":52},[49,97819,97820],{"class":55},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[49,97822,97823,97825,97827,97829,97831],{"class":51,"line":59},[49,97824,97749],{"class":66},[49,97826,1472],{"class":73},[49,97828,13687],{"class":66},[49,97830,1685],{"class":73},[49,97832,1409],{"class":66},[49,97834,97835],{"class":51,"line":70},[49,97836,97837],{"class":55},"# 输出:\n",[49,97839,97840],{"class":51,"line":86},[49,97841,97842],{"class":55},"# [[1. 0. 0. 0.]\n",[49,97844,97845],{"class":51,"line":98},[49,97846,97847],{"class":55},"#  [0. 1. 0. 0.]\n",[49,97849,97850],{"class":51,"line":121},[49,97851,97852],{"class":55},"#  [0. 0. 1. 0.]]\n",[49,97854,97855],{"class":51,"line":134},[49,97856,3654],{"emptyLinePlaceholder":1330},[49,97858,97859],{"class":51,"line":1085},[49,97860,97861],{"class":55},"# 对角线向上偏移1\n",[49,97863,97864,97866,97868,97870,97872,97874,97876,97878,97880],{"class":51,"line":2574},[49,97865,97749],{"class":66},[49,97867,1472],{"class":73},[49,97869,13687],{"class":66},[49,97871,1685],{"class":73},[49,97873,13687],{"class":66},[49,97875,1884],{"class":6468},[49,97877,1448],{"class":109},[49,97879,159],{"class":73},[49,97881,1409],{"class":66},[49,97883,97884],{"class":51,"line":2586},[49,97885,97837],{"class":55},[49,97887,97888],{"class":51,"line":2867},[49,97889,97890],{"class":55},"# [[0. 1. 0. 0.]\n",[49,97892,97893],{"class":51,"line":2872},[49,97894,97895],{"class":55},"#  [0. 0. 1. 0.]\n",[49,97897,97898],{"class":51,"line":2878},[49,97899,97900],{"class":55},"#  [0. 0. 0. 1.]]\n",[183,97902,97904],{"id":97903},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[39,97906,97908],{"className":31626,"code":97907,"language":31628,"meta":44,"style":44},"#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",[46,97909,97910,97915,97919,97924,97929,97934,97939,97944,97949,97954,97959],{"__ignoreMap":44},[49,97911,97912],{"class":51,"line":52},[49,97913,97914],{"class":55},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[49,97916,97917],{"class":51,"line":59},[49,97918,96923],{"class":1505},[49,97920,97921],{"class":51,"line":70},[49,97922,97923],{"class":1505},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[49,97925,97926],{"class":51,"line":86},[49,97927,97928],{"class":1505},"参数介绍：\n",[49,97930,97931],{"class":51,"line":98},[49,97932,97933],{"class":1505},"start：序列的起始值\n",[49,97935,97936],{"class":51,"line":121},[49,97937,97938],{"class":1505},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[49,97940,97941],{"class":51,"line":134},[49,97942,97943],{"class":1505},"num：要生长的等步长的样本数量，默认为50\n",[49,97945,97946],{"class":51,"line":1085},[49,97947,97948],{"class":1505},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[49,97950,97951],{"class":51,"line":2574},[49,97952,97953],{"class":1505},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[49,97955,97956],{"class":51,"line":2586},[49,97957,97958],{"class":1505},"dtype：ndarry的数据类型\n",[49,97960,97961],{"class":51,"line":2867},[49,97962,96923],{"class":1505},[19,97964,97965],{},[174,97966],{"alt":44,"src":97967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97969,97970],{},"这里num=是可以省略的",[19,97972,97973],{},"也就是下方两行代码结果是一模一样的",[39,97975,97977],{"className":31626,"code":97976,"language":31628,"meta":44,"style":44},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[46,97978,97979,97996],{"__ignoreMap":44},[49,97980,97981,97984,97986,97988,97990,97992,97994],{"class":51,"line":52},[49,97982,97983],{"class":66},"np.linspace(",[49,97985,159],{"class":73},[49,97987,1770],{"class":66},[49,97989,1711],{"class":73},[49,97991,1770],{"class":66},[49,97993,1711],{"class":73},[49,97995,1409],{"class":66},[49,97997,97998,98000,98002,98004,98006,98008,98010,98012,98014],{"class":51,"line":59},[49,97999,97983],{"class":66},[49,98001,159],{"class":73},[49,98003,1770],{"class":66},[49,98005,1711],{"class":73},[49,98007,1770],{"class":66},[49,98009,2920],{"class":6468},[49,98011,1448],{"class":109},[49,98013,1711],{"class":73},[49,98015,1409],{"class":66},[183,98017,98019],{"id":98018},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[39,98021,98023],{"className":31626,"code":98022,"language":31628,"meta":44,"style":44},"#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",[46,98024,98025,98030,98034,98039,98044,98049,98054,98058,98063,98068,98072],{"__ignoreMap":44},[49,98026,98027],{"class":51,"line":52},[49,98028,98029],{"class":55},"#logspace函数用于创建一个等比数列，格式如下：\n",[49,98031,98032],{"class":51,"line":59},[49,98033,96923],{"class":1505},[49,98035,98036],{"class":51,"line":70},[49,98037,98038],{"class":1505},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[49,98040,98041],{"class":51,"line":86},[49,98042,98043],{"class":1505},"参数为：\n",[49,98045,98046],{"class":51,"line":98},[49,98047,98048],{"class":1505},"start:序列的起始位置为：base**start\n",[49,98050,98051],{"class":51,"line":121},[49,98052,98053],{"class":1505},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[49,98055,98056],{"class":51,"line":134},[49,98057,97943],{"class":1505},[49,98059,98060],{"class":51,"line":1085},[49,98061,98062],{"class":1505},"endpoint：是否包含 stop 这个值，默认是 True\n",[49,98064,98065],{"class":51,"line":2574},[49,98066,98067],{"class":1505},"base：对数的底数，默认是 10（常见对数）\n",[49,98069,98070],{"class":51,"line":2586},[49,98071,97958],{"class":1505},[49,98073,98074],{"class":51,"line":2867},[49,98075,96923],{"class":1505},[19,98077,98078],{},[174,98079],{"alt":44,"src":98080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98082,98083],{},"logspace()函数中的num参数也是可以不写num=的",[19,98085,98086],{},"endpoint是不可以省略的",[1305,98088,98089],{},"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":44,"searchDepth":59,"depth":59,"links":98091},[98092,98096,98101,98105,98109,98110],{"id":96481,"depth":59,"text":96482,"children":98093},[98094,98095],{"id":96485,"depth":70,"text":96486},{"id":96558,"depth":70,"text":96559},{"id":96590,"depth":59,"text":96591,"children":98097},[98098,98099,98100],{"id":96594,"depth":70,"text":96595},{"id":96776,"depth":70,"text":96777},{"id":96854,"depth":70,"text":96855},{"id":96889,"depth":59,"text":96890,"children":98102},[98103,98104],{"id":96893,"depth":70,"text":96894},{"id":96950,"depth":70,"text":96951},{"id":97046,"depth":59,"text":97047,"children":98106},[98107,98108],{"id":97050,"depth":70,"text":97051},{"id":97062,"depth":70,"text":97063},{"id":97096,"depth":59,"text":97097},{"id":97133,"depth":59,"text":97134,"children":98111},[98112,98113,98114,98115,98116,98117,98118,98119],{"id":97137,"depth":70,"text":97138},{"id":97362,"depth":70,"text":97363},{"id":97369,"depth":70,"text":97370},{"id":97578,"depth":70,"text":97579},{"id":97598,"depth":70,"text":97599},{"id":97734,"depth":70,"text":97735},{"id":97903,"depth":70,"text":97904},{"id":98018,"depth":70,"text":98019},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96473,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98126,"title":98127,"body":98128,"description":1327,"extension":1328,"meta":98221,"navigation":1330,"path":98222,"seo":98223,"stem":98224,"__hash__":98225},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98129,"toc":98219},[98130,98133,98136,98139,98142,98145,98148,98151,98154,98157,98160,98163,98165,98168,98171,98176,98179,98182,98216],[10,98131,98127],{"id":98132},"_20魔法命令mprun",[19,98134,98135],{},"逐行分析数据内存的使用情况",[19,98137,98138],{},"语法格式：",[19,98140,98141],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98143,98144],{},"分析结果列如下：",[19,98146,98147],{},"Line行号",[19,98149,98150],{},"Mem usage内存使用大小",[19,98152,98153],{},"increment内存增量",[19,98155,98156],{},"Line content代码内容",[19,98158,98159],{},"补充说明：",[19,98161,98162],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98164,96428],{},[19,98166,98167],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98169,98170],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98172,98173],{},[174,98174],{"alt":44,"src":98175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98177,98178],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98180,98181],{},"这时候需要重新加载模块",[39,98183,98185],{"className":31626,"code":98184,"language":31628,"meta":44,"style":44},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[46,98186,98187,98192,98199,98204],{"__ignoreMap":44},[49,98188,98189],{"class":51,"line":52},[49,98190,98191],{"class":55},"#重新加载模块\n",[49,98193,98194,98196],{"class":51,"line":59},[49,98195,31640],{"class":109},[49,98197,98198],{"class":66}," importlib\n",[49,98200,98201],{"class":51,"line":70},[49,98202,98203],{"class":66},"importlib.reload(mprun_test)\n",[49,98205,98206,98208,98211,98213],{"class":51,"line":86},[49,98207,1720],{"class":109},[49,98209,98210],{"class":66},"mprun ",[49,98212,1923],{"class":109},[49,98214,98215],{"class":66},"f mprun_test.fun_test mprun_test.fun_test()\n",[1305,98217,98218],{},"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":44,"searchDepth":59,"depth":59,"links":98220},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98127,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98227,"title":98228,"body":98229,"description":1327,"extension":1328,"meta":98246,"navigation":1330,"path":98247,"seo":98248,"stem":98249,"__hash__":98250},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98230,"toc":98244},[98231,98234,98239],[10,98232,98228],{"id":98233},"_3一维数组的索引和切片",[19,98235,98236],{},[174,98237],{"alt":44,"src":98238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98240,98241],{},[174,98242],{"alt":44,"src":98243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":44,"searchDepth":59,"depth":59,"links":98245},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98228,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98252,"title":98253,"body":98254,"description":1327,"extension":1328,"meta":98737,"navigation":1330,"path":98738,"seo":98739,"stem":98740,"__hash__":98741},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98255,"toc":98735},[98256,98259,98262,98267,98300,98303,98341,98344,98378,98381,98486,98489,98526,98529,98630,98633,98684,98687,98729,98732],[10,98257,98253],{"id":98258},"_4二维数组的索引与切片",[19,98260,98261],{},"①获取指定单个元素",[19,98263,98264],{},[174,98265],{"alt":44,"src":98266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[39,98268,98270],{"className":31626,"code":98269,"language":31628,"meta":44,"style":44},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[46,98271,98272,98277,98282,98287],{"__ignoreMap":44},[49,98273,98274],{"class":51,"line":52},[49,98275,98276],{"class":55},"#获取元素9\n",[49,98278,98279],{"class":51,"line":59},[49,98280,98281],{"class":55},"#先获取所在行，再获取所在列\n",[49,98283,98284],{"class":51,"line":70},[49,98285,98286],{"class":55},"#数组[行索引号，列索引号]\n",[49,98288,98289,98292,98294,98296,98298],{"class":51,"line":86},[49,98290,98291],{"class":66},"a[",[49,98293,159],{"class":73},[49,98295,1770],{"class":66},[49,98297,1478],{"class":73},[49,98299,34494],{"class":66},[19,98301,98302],{},"②获取整行元素",[39,98304,98306],{"className":31626,"code":98305,"language":31628,"meta":44,"style":44},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[46,98307,98308,98313,98318,98326,98331],{"__ignoreMap":44},[49,98309,98310],{"class":51,"line":52},[49,98311,98312],{"class":55},"#获取整行 数组[行索引号]\n",[49,98314,98315],{"class":51,"line":59},[49,98316,98317],{"class":55},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[49,98319,98320,98322,98324],{"class":51,"line":70},[49,98321,98291],{"class":66},[49,98323,1478],{"class":73},[49,98325,34494],{"class":66},[49,98327,98328],{"class":51,"line":86},[49,98329,98330],{"class":55},"#也可以负索引获取一行\n",[49,98332,98333,98335,98337,98339],{"class":51,"line":98},[49,98334,98291],{"class":66},[49,98336,1923],{"class":109},[49,98338,159],{"class":73},[49,98340,34494],{"class":66},[19,98342,98343],{},"③获取整列元素",[39,98345,98347],{"className":31626,"code":98346,"language":31628,"meta":44,"style":44},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[46,98348,98349,98354,98363,98368],{"__ignoreMap":44},[49,98350,98351],{"class":51,"line":52},[49,98352,98353],{"class":55},"#获取整列 数组名[:,列索引]\n",[49,98355,98356,98359,98361],{"class":51,"line":59},[49,98357,98358],{"class":66},"a[:,",[49,98360,1478],{"class":73},[49,98362,34494],{"class":66},[49,98364,98365],{"class":51,"line":70},[49,98366,98367],{"class":55},"#也可以负索引获取一列\n",[49,98369,98370,98372,98374,98376],{"class":51,"line":86},[49,98371,98358],{"class":66},[49,98373,1923],{"class":109},[49,98375,159],{"class":73},[49,98377,34494],{"class":66},[19,98379,98380],{},"④部分行部分列的元素",[39,98382,98384],{"className":31626,"code":98383,"language":31628,"meta":44,"style":44},"#部分行部分列 数组名[行切片，列切片]\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",[46,98385,98386,98391,98401,98405,98409,98414,98419,98423,98435,98439,98443,98448,98453,98458,98463,98467,98472],{"__ignoreMap":44},[49,98387,98388],{"class":51,"line":52},[49,98389,98390],{"class":55},"#部分行部分列 数组名[行切片，列切片]\n",[49,98392,98393,98396,98398],{"class":51,"line":59},[49,98394,98395],{"class":66},"a[:",[49,98397,1478],{"class":73},[49,98399,98400],{"class":66},",:]\n",[49,98402,98403],{"class":51,"line":70},[49,98404,94789],{"class":55},[49,98406,98407],{"class":51,"line":86},[49,98408,95153],{"class":1505},[49,98410,98411],{"class":51,"line":98},[49,98412,98413],{"class":1505},"array([[ 1,  2,  3,  4,  5,  6],\n",[49,98415,98416],{"class":51,"line":121},[49,98417,98418],{"class":1505},"       [ 7,  8,  9, 10, 11, 12]])\n",[49,98420,98421],{"class":51,"line":134},[49,98422,95153],{"class":1505},[49,98424,98425,98427,98429,98431,98433],{"class":51,"line":1085},[49,98426,98358],{"class":66},[49,98428,159],{"class":73},[49,98430,2249],{"class":66},[49,98432,1685],{"class":73},[49,98434,34494],{"class":66},[49,98436,98437],{"class":51,"line":2574},[49,98438,94789],{"class":55},[49,98440,98441],{"class":51,"line":2586},[49,98442,95153],{"class":1505},[49,98444,98445],{"class":51,"line":2867},[49,98446,98447],{"class":1505},"array([[ 2,  3,  4],\n",[49,98449,98450],{"class":51,"line":2872},[49,98451,98452],{"class":1505},"       [ 8,  9, 10],\n",[49,98454,98455],{"class":51,"line":2878},[49,98456,98457],{"class":1505},"       [14, 15, 16],\n",[49,98459,98460],{"class":51,"line":2883},[49,98461,98462],{"class":1505},"       [20, 21, 22]])\n",[49,98464,98465],{"class":51,"line":2897},[49,98466,95153],{"class":1505},[49,98468,98469],{"class":51,"line":2902},[49,98470,98471],{"class":55},"#对列行同时进行切片，使用了step参数\n",[49,98473,98474,98477,98479,98482,98484],{"class":51,"line":2908},[49,98475,98476],{"class":66},"a[::",[49,98478,1478],{"class":73},[49,98480,98481],{"class":66},",::",[49,98483,1478],{"class":73},[49,98485,34494],{"class":66},[19,98487,98488],{},"⑤同时获取两个元素",[39,98490,98492],{"className":31626,"code":98491,"language":31628,"meta":44,"style":44},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[46,98493,98494,98499,98504],{"__ignoreMap":44},[49,98495,98496],{"class":51,"line":52},[49,98497,98498],{"class":55},"#同时获取第三行第二列，第四行第一列\n",[49,98500,98501],{"class":51,"line":59},[49,98502,98503],{"class":55},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[49,98505,98506,98509,98511,98513,98515,98517,98519,98521,98523],{"class":51,"line":70},[49,98507,98508],{"class":66},"a[(",[49,98510,1478],{"class":73},[49,98512,1770],{"class":66},[49,98514,1472],{"class":73},[49,98516,43495],{"class":66},[49,98518,159],{"class":73},[49,98520,1770],{"class":66},[49,98522,80],{"class":73},[49,98524,98525],{"class":66},")]\n",[19,98527,98528],{},"⑥切片，对行进行反向获取",[39,98530,98532],{"className":31626,"code":98531,"language":31628,"meta":44,"style":44},"#切片 对所有行进行反向获取\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",[46,98533,98534,98539,98549,98553,98557,98562,98567,98572,98577,98581,98586,98602,98606,98611,98616,98621,98626],{"__ignoreMap":44},[49,98535,98536],{"class":51,"line":52},[49,98537,98538],{"class":55},"#切片 对所有行进行反向获取\n",[49,98540,98541,98543,98545,98547],{"class":51,"line":59},[49,98542,98476],{"class":66},[49,98544,1923],{"class":109},[49,98546,159],{"class":73},[49,98548,34494],{"class":66},[49,98550,98551],{"class":51,"line":70},[49,98552,94789],{"class":55},[49,98554,98555],{"class":51,"line":86},[49,98556,95153],{"class":1505},[49,98558,98559],{"class":51,"line":98},[49,98560,98561],{"class":1505},"array([[19, 20, 21, 22, 23, 24],\n",[49,98563,98564],{"class":51,"line":121},[49,98565,98566],{"class":1505},"       [13, 14, 15, 16, 17, 18],\n",[49,98568,98569],{"class":51,"line":134},[49,98570,98571],{"class":1505},"       [ 7,  8,  9, 10, 11, 12],\n",[49,98573,98574],{"class":51,"line":1085},[49,98575,98576],{"class":1505},"       [ 1,  2,  3,  4,  5,  6]])\n",[49,98578,98579],{"class":51,"line":2574},[49,98580,95153],{"class":1505},[49,98582,98583],{"class":51,"line":2586},[49,98584,98585],{"class":55},"#对行列都进行反向切片获取\n",[49,98587,98588,98590,98592,98594,98596,98598,98600],{"class":51,"line":2867},[49,98589,98476],{"class":66},[49,98591,1923],{"class":109},[49,98593,159],{"class":73},[49,98595,98481],{"class":66},[49,98597,1923],{"class":109},[49,98599,159],{"class":73},[49,98601,34494],{"class":66},[49,98603,98604],{"class":51,"line":2872},[49,98605,95153],{"class":1505},[49,98607,98608],{"class":51,"line":2878},[49,98609,98610],{"class":1505},"array([[24, 23, 22, 21, 20, 19],\n",[49,98612,98613],{"class":51,"line":2883},[49,98614,98615],{"class":1505},"       [18, 17, 16, 15, 14, 13],\n",[49,98617,98618],{"class":51,"line":2897},[49,98619,98620],{"class":1505},"       [12, 11, 10,  9,  8,  7],\n",[49,98622,98623],{"class":51,"line":2902},[49,98624,98625],{"class":1505},"       [ 6,  5,  4,  3,  2,  1]])\n",[49,98627,98628],{"class":51,"line":2908},[49,98629,95153],{"class":1505},[19,98631,98632],{},"⑦修改元素",[39,98634,98636],{"className":31626,"code":98635,"language":31628,"meta":44,"style":44},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[46,98637,98638,98643,98661,98666],{"__ignoreMap":44},[49,98639,98640],{"class":51,"line":52},[49,98641,98642],{"class":55},"#获取前两行和前两列\n",[49,98644,98645,98648,98650,98652,98654,98657,98659],{"class":51,"line":59},[49,98646,98647],{"class":66},"sub_a",[49,98649,1448],{"class":109},[49,98651,98395],{"class":66},[49,98653,1478],{"class":73},[49,98655,98656],{"class":66},",:",[49,98658,1478],{"class":73},[49,98660,34494],{"class":66},[49,98662,98663],{"class":51,"line":70},[49,98664,98665],{"class":55},"#修改sub_a第一个元素的值\n",[49,98667,98668,98671,98673,98675,98677,98679,98681],{"class":51,"line":86},[49,98669,98670],{"class":66},"sub_a[",[49,98672,80],{"class":73},[49,98674,1770],{"class":66},[49,98676,80],{"class":73},[49,98678,2330],{"class":66},[49,98680,1448],{"class":109},[49,98682,98683],{"class":73},"100\n",[19,98685,98686],{},"⑧数组复制copy()",[39,98688,98690],{"className":31626,"code":98689,"language":31628,"meta":44,"style":44},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[46,98691,98692,98697,98707,98712],{"__ignoreMap":44},[49,98693,98694],{"class":51,"line":52},[49,98695,98696],{"class":55},"#数组复制\n",[49,98698,98699,98702,98704],{"class":51,"line":59},[49,98700,98701],{"class":66},"copy_a",[49,98703,1448],{"class":109},[49,98705,98706],{"class":66},"np.copy(sub_a)\n",[49,98708,98709],{"class":51,"line":70},[49,98710,98711],{"class":55},"#修改copy_a后不影响原数组\n",[49,98713,98714,98717,98719,98721,98723,98725,98727],{"class":51,"line":86},[49,98715,98716],{"class":66},"copy_a[",[49,98718,80],{"class":73},[49,98720,1770],{"class":66},[49,98722,80],{"class":73},[49,98724,2330],{"class":66},[49,98726,1448],{"class":109},[49,98728,98683],{"class":73},[19,98730,98731],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1305,98733,98734],{},"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":44,"searchDepth":59,"depth":59,"links":98736},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98253,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98743,"title":98744,"body":98745,"description":1327,"extension":1328,"meta":99237,"navigation":1330,"path":99238,"seo":99239,"stem":99240,"__hash__":99241},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98746,"toc":99229},[98747,98750,98754,98757,98760,98813,98816,98841,98844,98863,98883,98886,98902,98906,98952,98956,98998,99002,99005,99008,99011,99014,99017,99079,99139,99143,99146,99203,99207,99212,99221,99226],[10,98748,98744],{"id":98749},"_5改变数组的维度",[14,98751,98753],{"id":98752},"_51-使用reshape","5.1 使用reshape()",[19,98755,98756],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,98758,98759],{},"①一维数组转换为二维数组",[39,98761,98763],{"className":31626,"code":98762,"language":31628,"meta":44,"style":44},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[46,98764,98765,98781,98786,98791,98796],{"__ignoreMap":44},[49,98766,98767,98769,98771,98773,98775,98777,98779],{"class":51,"line":52},[49,98768,1630],{"class":66},[49,98770,1448],{"class":109},[49,98772,94227],{"class":66},[49,98774,159],{"class":73},[49,98776,1770],{"class":66},[49,98778,1914],{"class":73},[49,98780,1409],{"class":66},[49,98782,98783],{"class":51,"line":59},[49,98784,98785],{"class":55},"#将一维数组进行转换\n",[49,98787,98788],{"class":51,"line":70},[49,98789,98790],{"class":55},"#注意点：元素个数不可以变\n",[49,98792,98793],{"class":51,"line":86},[49,98794,98795],{"class":55},"#转换维度要保持一致，不一致就异常！！！\n",[49,98797,98798,98800,98802,98805,98807,98809,98811],{"class":51,"line":98},[49,98799,94531],{"class":66},[49,98801,1448],{"class":109},[49,98803,98804],{"class":66},"a.reshape(",[49,98806,1478],{"class":73},[49,98808,1770],{"class":66},[49,98810,1736],{"class":73},[49,98812,1409],{"class":66},[19,98814,98815],{},"②一维数组转换为三维数组",[39,98817,98819],{"className":31626,"code":98818,"language":31628,"meta":44,"style":44},"aaa=a.reshape(2,3,2)\n",[46,98820,98821],{"__ignoreMap":44},[49,98822,98823,98825,98827,98829,98831,98833,98835,98837,98839],{"class":51,"line":52},[49,98824,96746],{"class":66},[49,98826,1448],{"class":109},[49,98828,98804],{"class":66},[49,98830,1478],{"class":73},[49,98832,1770],{"class":66},[49,98834,1472],{"class":73},[49,98836,1770],{"class":66},[49,98838,1478],{"class":73},[49,98840,1409],{"class":66},[19,98842,98843],{},"③二维数组转化为一维数组",[39,98845,98847],{"className":31626,"code":98846,"language":31628,"meta":44,"style":44},"#知道元素个数：\naa.reshape(12)\n",[46,98848,98849,98854],{"__ignoreMap":44},[49,98850,98851],{"class":51,"line":52},[49,98852,98853],{"class":55},"#知道元素个数：\n",[49,98855,98856,98859,98861],{"class":51,"line":59},[49,98857,98858],{"class":66},"aa.reshape(",[49,98860,1889],{"class":73},[49,98862,1409],{"class":66},[39,98864,98866],{"className":31626,"code":98865,"language":31628,"meta":44,"style":44},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[46,98867,98868,98873],{"__ignoreMap":44},[49,98869,98870],{"class":51,"line":52},[49,98871,98872],{"class":55},"#不知道元素个数，参数传递-1\n",[49,98874,98875,98877,98879,98881],{"class":51,"line":59},[49,98876,98858],{"class":66},[49,98878,1923],{"class":109},[49,98880,159],{"class":73},[49,98882,1409],{"class":66},[19,98884,98885],{},"④三维数组转换为一维数组",[39,98887,98889],{"className":31626,"code":98888,"language":31628,"meta":44,"style":44},"aaa.reshape(-1)\n",[46,98890,98891],{"__ignoreMap":44},[49,98892,98893,98896,98898,98900],{"class":51,"line":52},[49,98894,98895],{"class":66},"aaa.reshape(",[49,98897,1923],{"class":109},[49,98899,159],{"class":73},[49,98901,1409],{"class":66},[14,98903,98905],{"id":98904},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[39,98907,98909],{"className":31626,"code":98908,"language":31628,"meta":44,"style":44},"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",[46,98910,98911,98938,98943,98947],{"__ignoreMap":44},[49,98912,98913,98915,98917,98919,98921,98923,98925,98927,98929,98931,98933,98935],{"class":51,"line":52},[49,98914,94531],{"class":66},[49,98916,1448],{"class":109},[49,98918,94227],{"class":66},[49,98920,159],{"class":73},[49,98922,1770],{"class":66},[49,98924,1914],{"class":73},[49,98926,94232],{"class":66},[49,98928,1478],{"class":73},[49,98930,1770],{"class":66},[49,98932,1736],{"class":73},[49,98934,1821],{"class":66},[49,98936,98937],{"class":55},"#转换为2行6列的数组\n",[49,98939,98940],{"class":51,"line":59},[49,98941,98942],{"class":66},"aa.revel()\n",[49,98944,98945],{"class":51,"line":70},[49,98946,94789],{"class":55},[49,98948,98949],{"class":51,"line":86},[49,98950,98951],{"class":55},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98953,98955],{"id":98954},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[39,98957,98959],{"className":31626,"code":98958,"language":31628,"meta":44,"style":44},"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",[46,98960,98961,98985,98990,98994],{"__ignoreMap":44},[49,98962,98963,98965,98967,98969,98971,98973,98975,98977,98979,98981,98983],{"class":51,"line":52},[49,98964,94531],{"class":66},[49,98966,1448],{"class":109},[49,98968,94227],{"class":66},[49,98970,159],{"class":73},[49,98972,1770],{"class":66},[49,98974,1914],{"class":73},[49,98976,94232],{"class":66},[49,98978,1478],{"class":73},[49,98980,1770],{"class":66},[49,98982,1736],{"class":73},[49,98984,1409],{"class":66},[49,98986,98987],{"class":51,"line":59},[49,98988,98989],{"class":66},"aa.flatten()\n",[49,98991,98992],{"class":51,"line":70},[49,98993,94789],{"class":55},[49,98995,98996],{"class":51,"line":86},[49,98997,98951],{"class":55},[14,98999,99001],{"id":99000},"_54-使用resize","5.4 使用resize()",[19,99003,99004],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99006,99007],{},"通过resize方法可以改变数组的维度",[19,99009,99010],{},"#resize修改数组维度",[19,99012,99013],{},"#以元组的形式指定形状",[19,99015,99016],{},"#改变的是原数组",[39,99018,99020],{"className":31626,"code":99019,"language":31628,"meta":44,"style":44},"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",[46,99021,99022,99038,99058,99071,99075],{"__ignoreMap":44},[49,99023,99024,99026,99028,99030,99032,99034,99036],{"class":51,"line":52},[49,99025,1630],{"class":66},[49,99027,1448],{"class":109},[49,99029,94227],{"class":66},[49,99031,159],{"class":73},[49,99033,1770],{"class":66},[49,99035,1914],{"class":73},[49,99037,1409],{"class":66},[49,99039,99040,99043,99045,99047,99049,99051,99053,99055],{"class":51,"line":59},[49,99041,99042],{"class":66},"a.shape",[49,99044,1448],{"class":109},[49,99046,1403],{"class":66},[49,99048,1478],{"class":73},[49,99050,1770],{"class":66},[49,99052,1736],{"class":73},[49,99054,1821],{"class":66},[49,99056,99057],{"class":55},"#改变了原数组\n",[49,99059,99060,99062,99064,99067,99069],{"class":51,"line":70},[49,99061,1630],{"class":66},[49,99063,1448],{"class":109},[49,99065,99066],{"class":66},"resize((",[49,99068,1889],{"class":73},[49,99070,31745],{"class":66},[49,99072,99073],{"class":51,"line":86},[49,99074,94789],{"class":55},[49,99076,99077],{"class":51,"line":98},[49,99078,98951],{"class":55},[39,99080,99082],{"className":31626,"code":99081,"language":31628,"meta":44,"style":44},"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",[46,99083,99084,99097,99101,99105,99110,99115,99120,99125,99130,99135],{"__ignoreMap":44},[49,99085,99086,99089,99091,99093,99095],{"class":51,"line":52},[49,99087,99088],{"class":66},"a.resize((",[49,99090,1736],{"class":73},[49,99092,1770],{"class":66},[49,99094,1478],{"class":73},[49,99096,31745],{"class":66},[49,99098,99099],{"class":51,"line":59},[49,99100,94789],{"class":55},[49,99102,99103],{"class":51,"line":70},[49,99104,95153],{"class":1505},[49,99106,99107],{"class":51,"line":86},[49,99108,99109],{"class":1505},"array([[ 1,  2],\n",[49,99111,99112],{"class":51,"line":98},[49,99113,99114],{"class":1505},"       [ 3,  4],\n",[49,99116,99117],{"class":51,"line":121},[49,99118,99119],{"class":1505},"       [ 5,  6],\n",[49,99121,99122],{"class":51,"line":134},[49,99123,99124],{"class":1505},"       [ 7,  8],\n",[49,99126,99127],{"class":51,"line":1085},[49,99128,99129],{"class":1505},"       [ 9, 10],\n",[49,99131,99132],{"class":51,"line":2574},[49,99133,99134],{"class":1505},"       [11, 12]])\n",[49,99136,99137],{"class":51,"line":2586},[49,99138,95153],{"class":1505},[14,99140,99142],{"id":99141},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99144,99145],{},"改变了原数组",[39,99147,99149],{"className":31626,"code":99148,"language":31628,"meta":44,"style":44},"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",[46,99150,99151,99167,99183,99187,99191,99195,99199],{"__ignoreMap":44},[49,99152,99153,99155,99157,99159,99161,99163,99165],{"class":51,"line":52},[49,99154,1630],{"class":66},[49,99156,1448],{"class":109},[49,99158,94227],{"class":66},[49,99160,159],{"class":73},[49,99162,1770],{"class":66},[49,99164,1914],{"class":73},[49,99166,1409],{"class":66},[49,99168,99169,99171,99173,99175,99177,99179,99181],{"class":51,"line":59},[49,99170,99042],{"class":66},[49,99172,1448],{"class":109},[49,99174,1403],{"class":66},[49,99176,1478],{"class":73},[49,99178,1770],{"class":66},[49,99180,1736],{"class":73},[49,99182,1409],{"class":66},[49,99184,99185],{"class":51,"line":70},[49,99186,94789],{"class":55},[49,99188,99189],{"class":51,"line":86},[49,99190,95153],{"class":1505},[49,99192,99193],{"class":51,"line":98},[49,99194,98413],{"class":1505},[49,99196,99197],{"class":51,"line":121},[49,99198,98418],{"class":1505},[49,99200,99201],{"class":51,"line":134},[49,99202,95153],{"class":1505},[14,99204,99206],{"id":99205},"_56-重要比较","5.6 重要比较：",[19,99208,99209],{},[174,99210],{"alt":44,"src":99211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99213,99214,99215,99217,99218,99220],{},"口诀：NumPy 函数要么用 ",[46,99216,97188],{},"，要么用 ",[46,99219,32744],{},"，创建结构用 shape，造数据用 size",[19,99222,99223],{},[174,99224],{"alt":44,"src":99225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1305,99227,99228],{},"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":44,"searchDepth":59,"depth":59,"links":99230},[99231,99232,99233,99234,99235,99236],{"id":98752,"depth":59,"text":98753},{"id":98904,"depth":59,"text":98905},{"id":98954,"depth":59,"text":98955},{"id":99000,"depth":59,"text":99001},{"id":99141,"depth":59,"text":99142},{"id":99205,"depth":59,"text":99206},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98744,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99243,"title":99244,"body":99245,"description":1327,"extension":1328,"meta":100316,"navigation":1330,"path":100317,"seo":100318,"stem":100319,"__hash__":100320},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99246,"toc":100310},[99247,99250,99254,99257,99260,99263,99328,99331,99371,99374,99456,99458,99463,99485,99487,99492,99497,99500,99503,99658,99661,99863,99867,99870,99873,99941,99943,99948,99951,99954,100034,100038,100041,100043,100116,100118,100123,100125,100205,100209,100212,100215,100218,100221,100224,100227,100307],[10,99248,99244],{"id":99249},"_6数组的拼接",[14,99251,99253],{"id":99252},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99255,99256],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99258,99259],{},"函数内部传两个数列构成的数列或者元组",[19,99261,99262],{},"①一维数组的拼接",[39,99264,99266],{"className":31626,"code":99265,"language":31628,"meta":44,"style":44},"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",[46,99267,99268,99288,99308,99313,99318,99323],{"__ignoreMap":44},[49,99269,99270,99272,99274,99276,99278,99280,99282,99284,99286],{"class":51,"line":52},[49,99271,1630],{"class":66},[49,99273,1448],{"class":109},[49,99275,94249],{"class":66},[49,99277,159],{"class":73},[49,99279,1770],{"class":66},[49,99281,1478],{"class":73},[49,99283,1770],{"class":66},[49,99285,1472],{"class":73},[49,99287,5911],{"class":66},[49,99289,99290,99292,99294,99296,99298,99300,99302,99304,99306],{"class":51,"line":59},[49,99291,1655],{"class":66},[49,99293,1448],{"class":109},[49,99295,94249],{"class":66},[49,99297,1685],{"class":73},[49,99299,1770],{"class":66},[49,99301,1711],{"class":73},[49,99303,1770],{"class":66},[49,99305,1736],{"class":73},[49,99307,5911],{"class":66},[49,99309,99310],{"class":51,"line":70},[49,99311,99312],{"class":55},"#调用concatenate进行数组拼接\n",[49,99314,99315],{"class":51,"line":86},[49,99316,99317],{"class":66},"np.concatenate((a,b))\n",[49,99319,99320],{"class":51,"line":98},[49,99321,99322],{"class":55},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[49,99324,99325],{"class":51,"line":121},[49,99326,99327],{"class":55},"#np.concatenate([a,b])\n",[19,99329,99330],{},"②一维多个数组拼接",[39,99332,99334],{"className":31626,"code":99333,"language":31628,"meta":44,"style":44},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[46,99335,99336,99341,99361,99366],{"__ignoreMap":44},[49,99337,99338],{"class":51,"line":52},[49,99339,99340],{"class":55},"#也可以多个数组进行拼接\n",[49,99342,99343,99345,99347,99349,99351,99353,99355,99357,99359],{"class":51,"line":59},[49,99344,1680],{"class":66},[49,99346,1448],{"class":109},[49,99348,94249],{"class":66},[49,99350,106],{"class":73},[49,99352,1770],{"class":66},[49,99354,1863],{"class":73},[49,99356,1770],{"class":66},[49,99358,1914],{"class":73},[49,99360,5911],{"class":66},[49,99362,99363],{"class":51,"line":70},[49,99364,99365],{"class":66},"c\n",[49,99367,99368],{"class":51,"line":86},[49,99369,99370],{"class":66},"np.concatenate((a,b,c))\n",[19,99372,99373],{},"③二维数组拼接",[39,99375,99377],{"className":31626,"code":99376,"language":31628,"meta":44,"style":44},"#二维数组使用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",[46,99378,99379,99384,99408,99433,99438,99443],{"__ignoreMap":44},[49,99380,99381],{"class":51,"line":52},[49,99382,99383],{"class":55},"#二维数组使用concatenate进行拼接\n",[49,99385,99386,99388,99390,99392,99394,99396,99398,99400,99402,99404,99406],{"class":51,"line":59},[49,99387,94531],{"class":66},[49,99389,1448],{"class":109},[49,99391,94227],{"class":66},[49,99393,159],{"class":73},[49,99395,1770],{"class":66},[49,99397,1914],{"class":73},[49,99399,94232],{"class":66},[49,99401,1472],{"class":73},[49,99403,1770],{"class":66},[49,99405,1685],{"class":73},[49,99407,1409],{"class":66},[49,99409,99410,99413,99415,99417,99419,99421,99423,99425,99427,99429,99431],{"class":51,"line":70},[49,99411,99412],{"class":66},"bb",[49,99414,1448],{"class":109},[49,99416,94227],{"class":66},[49,99418,1729],{"class":73},[49,99420,1770],{"class":66},[49,99422,2033],{"class":73},[49,99424,94232],{"class":66},[49,99426,1472],{"class":73},[49,99428,1770],{"class":66},[49,99430,1685],{"class":73},[49,99432,1409],{"class":66},[49,99434,99435],{"class":51,"line":86},[49,99436,99437],{"class":55},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[49,99439,99440],{"class":51,"line":98},[49,99441,99442],{"class":55},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[49,99444,99445,99448,99450,99452,99454],{"class":51,"line":121},[49,99446,99447],{"class":66},"np.concatenate((aa,bb),",[49,99449,48762],{"class":6468},[49,99451,1448],{"class":109},[49,99453,80],{"class":73},[49,99455,1409],{"class":66},[19,99457,417],{},[19,99459,99460],{},[174,99461],{"alt":44,"src":99462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[39,99464,99466],{"className":31626,"code":99465,"language":31628,"meta":44,"style":44},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[46,99467,99468,99473],{"__ignoreMap":44},[49,99469,99470],{"class":51,"line":52},[49,99471,99472],{"class":55},"#指定axis为1进行拼接\n",[49,99474,99475,99477,99479,99481,99483],{"class":51,"line":59},[49,99476,99447],{"class":66},[49,99478,48762],{"class":6468},[49,99480,1448],{"class":109},[49,99482,159],{"class":73},[49,99484,1409],{"class":66},[19,99486,417],{},[19,99488,99489],{},[174,99490],{"alt":44,"src":99491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,99493,99494],{},[485,99495,99496],{},"二维数组总结：0竖着方向，1横着方向",[19,99498,99499],{},"④三维数组拼接",[19,99501,99502],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[39,99504,99506],{"className":31626,"code":99505,"language":31628,"meta":44,"style":44},"#两个三行六列\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",[46,99507,99508,99513,99541,99571,99576,99593,99598,99603,99608,99625,99630,99635,99640,99653],{"__ignoreMap":44},[49,99509,99510],{"class":51,"line":52},[49,99511,99512],{"class":55},"#两个三行六列\n",[49,99514,99515,99517,99519,99521,99523,99525,99527,99529,99531,99533,99535,99537,99539],{"class":51,"line":59},[49,99516,96746],{"class":66},[49,99518,1448],{"class":109},[49,99520,94227],{"class":66},[49,99522,159],{"class":73},[49,99524,1770],{"class":66},[49,99526,1717],{"class":73},[49,99528,94232],{"class":66},[49,99530,1478],{"class":73},[49,99532,1770],{"class":66},[49,99534,1472],{"class":73},[49,99536,1770],{"class":66},[49,99538,1736],{"class":73},[49,99540,1409],{"class":66},[49,99542,99543,99546,99548,99550,99552,99554,99557,99559,99561,99563,99565,99567,99569],{"class":51,"line":70},[49,99544,99545],{"class":66},"bbb",[49,99547,1448],{"class":109},[49,99549,94227],{"class":66},[49,99551,1729],{"class":73},[49,99553,1770],{"class":66},[49,99555,99556],{"class":73},"137",[49,99558,94232],{"class":66},[49,99560,1478],{"class":73},[49,99562,1770],{"class":66},[49,99564,1472],{"class":73},[49,99566,1770],{"class":66},[49,99568,1736],{"class":73},[49,99570,1409],{"class":66},[49,99572,99573],{"class":51,"line":86},[49,99574,99575],{"class":55},"#axis=0\n",[49,99577,99578,99580,99582,99585,99587,99589,99591],{"class":51,"line":98},[49,99579,2086],{"class":66},[49,99581,1448],{"class":109},[49,99583,99584],{"class":66},"np.concatenate((aaa,bbb),",[49,99586,48762],{"class":6468},[49,99588,1448],{"class":109},[49,99590,80],{"class":73},[49,99592,1409],{"class":66},[49,99594,99595],{"class":51,"line":121},[49,99596,99597],{"class":66},"s.shape\n",[49,99599,99600],{"class":51,"line":134},[49,99601,99602],{"class":55},"#输出：(4,3,6)\n",[49,99604,99605],{"class":51,"line":1085},[49,99606,99607],{"class":55},"#axis=1\n",[49,99609,99610,99613,99615,99617,99619,99621,99623],{"class":51,"line":2574},[49,99611,99612],{"class":66},"ss",[49,99614,1448],{"class":109},[49,99616,99584],{"class":66},[49,99618,48762],{"class":6468},[49,99620,1448],{"class":109},[49,99622,159],{"class":73},[49,99624,1409],{"class":66},[49,99626,99627],{"class":51,"line":2586},[49,99628,99629],{"class":66},"ss.shape\n",[49,99631,99632],{"class":51,"line":2867},[49,99633,99634],{"class":55},"#输出：(2,6,6)\n",[49,99636,99637],{"class":51,"line":2872},[49,99638,99639],{"class":55},"#axis=2\n",[49,99641,99642,99644,99646,99648,99650],{"class":51,"line":2878},[49,99643,99584],{"class":66},[49,99645,48762],{"class":6468},[49,99647,1448],{"class":109},[49,99649,1478],{"class":73},[49,99651,99652],{"class":66},").shape\n",[49,99654,99655],{"class":51,"line":2883},[49,99656,99657],{"class":55},"#输出：（2，3，12）\n",[19,99659,99660],{},"⑤四维数组拼接",[39,99662,99664],{"className":31626,"code":99663,"language":31628,"meta":44,"style":44},"#两个三行六列\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",[46,99665,99666,99670,99698,99726,99751,99777,99781,99794,99799,99803,99815,99820,99824,99836,99841,99846,99858],{"__ignoreMap":44},[49,99667,99668],{"class":51,"line":52},[49,99669,99512],{"class":55},[49,99671,99672,99674,99676,99678,99680,99682,99684,99686,99688,99690,99692,99694,99696],{"class":51,"line":59},[49,99673,96746],{"class":66},[49,99675,1448],{"class":109},[49,99677,94227],{"class":66},[49,99679,159],{"class":73},[49,99681,1770],{"class":66},[49,99683,1717],{"class":73},[49,99685,94232],{"class":66},[49,99687,1478],{"class":73},[49,99689,1770],{"class":66},[49,99691,1472],{"class":73},[49,99693,1770],{"class":66},[49,99695,1736],{"class":73},[49,99697,1409],{"class":66},[49,99699,99700,99702,99704,99706,99708,99710,99712,99714,99716,99718,99720,99722,99724],{"class":51,"line":70},[49,99701,99545],{"class":66},[49,99703,1448],{"class":109},[49,99705,94227],{"class":66},[49,99707,1729],{"class":73},[49,99709,1770],{"class":66},[49,99711,99556],{"class":73},[49,99713,94232],{"class":66},[49,99715,1478],{"class":73},[49,99717,1770],{"class":66},[49,99719,1472],{"class":73},[49,99721,1770],{"class":66},[49,99723,1736],{"class":73},[49,99725,1409],{"class":66},[49,99727,99728,99731,99733,99735,99737,99739,99741,99743,99745,99747,99749],{"class":51,"line":86},[49,99729,99730],{"class":66},"aaaa",[49,99732,1448],{"class":109},[49,99734,98895],{"class":66},[49,99736,1478],{"class":73},[49,99738,1770],{"class":66},[49,99740,1472],{"class":73},[49,99742,1770],{"class":66},[49,99744,1472],{"class":73},[49,99746,1770],{"class":66},[49,99748,1478],{"class":73},[49,99750,1409],{"class":66},[49,99752,99753,99756,99758,99761,99763,99765,99767,99769,99771,99773,99775],{"class":51,"line":98},[49,99754,99755],{"class":66},"bbbb",[49,99757,1448],{"class":109},[49,99759,99760],{"class":66},"bbb.reshape(",[49,99762,1478],{"class":73},[49,99764,1770],{"class":66},[49,99766,1472],{"class":73},[49,99768,1770],{"class":66},[49,99770,1472],{"class":73},[49,99772,1770],{"class":66},[49,99774,1478],{"class":73},[49,99776,1409],{"class":66},[49,99778,99779],{"class":51,"line":121},[49,99780,99575],{"class":55},[49,99782,99783,99786,99788,99790,99792],{"class":51,"line":134},[49,99784,99785],{"class":66},"np.concatenate((aaaa,bbbb),",[49,99787,48762],{"class":6468},[49,99789,1448],{"class":109},[49,99791,80],{"class":73},[49,99793,99652],{"class":66},[49,99795,99796],{"class":51,"line":1085},[49,99797,99798],{"class":55},"#结果：（4，3，3，2）\n",[49,99800,99801],{"class":51,"line":2574},[49,99802,99607],{"class":55},[49,99804,99805,99807,99809,99811,99813],{"class":51,"line":2586},[49,99806,99785],{"class":66},[49,99808,48762],{"class":6468},[49,99810,1448],{"class":109},[49,99812,159],{"class":73},[49,99814,99652],{"class":66},[49,99816,99817],{"class":51,"line":2867},[49,99818,99819],{"class":55},"#结果：（2，6，3，2）\n",[49,99821,99822],{"class":51,"line":2872},[49,99823,99639],{"class":55},[49,99825,99826,99828,99830,99832,99834],{"class":51,"line":2878},[49,99827,99785],{"class":66},[49,99829,48762],{"class":6468},[49,99831,1448],{"class":109},[49,99833,1478],{"class":73},[49,99835,99652],{"class":66},[49,99837,99838],{"class":51,"line":2883},[49,99839,99840],{"class":55},"#结果：（2，3，6，2）\n",[49,99842,99843],{"class":51,"line":2897},[49,99844,99845],{"class":55},"#axis=3\n",[49,99847,99848,99850,99852,99854,99856],{"class":51,"line":2902},[49,99849,99785],{"class":66},[49,99851,48762],{"class":6468},[49,99853,1448],{"class":109},[49,99855,1472],{"class":73},[49,99857,99652],{"class":66},[49,99859,99860],{"class":51,"line":2908},[49,99861,99862],{"class":55},"#结果：（2，3，3，4）\n",[14,99864,99866],{"id":99865},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99868,99869],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99871,99872],{},"①二维数组",[39,99874,99876],{"className":31626,"code":99875,"language":31628,"meta":44,"style":44},"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",[46,99877,99878,99902,99926,99931,99936],{"__ignoreMap":44},[49,99879,99880,99882,99884,99886,99888,99890,99892,99894,99896,99898,99900],{"class":51,"line":52},[49,99881,94531],{"class":66},[49,99883,1448],{"class":109},[49,99885,94227],{"class":66},[49,99887,159],{"class":73},[49,99889,1770],{"class":66},[49,99891,1914],{"class":73},[49,99893,94232],{"class":66},[49,99895,1472],{"class":73},[49,99897,1770],{"class":66},[49,99899,1685],{"class":73},[49,99901,1409],{"class":66},[49,99903,99904,99906,99908,99910,99912,99914,99916,99918,99920,99922,99924],{"class":51,"line":59},[49,99905,99412],{"class":66},[49,99907,1448],{"class":109},[49,99909,94227],{"class":66},[49,99911,1729],{"class":73},[49,99913,1770],{"class":66},[49,99915,2033],{"class":73},[49,99917,94232],{"class":66},[49,99919,1472],{"class":73},[49,99921,1770],{"class":66},[49,99923,1685],{"class":73},[49,99925,1409],{"class":66},[49,99927,99928],{"class":51,"line":70},[49,99929,99930],{"class":66},"np.hstack((aa,bb))\n",[49,99932,99933],{"class":51,"line":86},[49,99934,99935],{"class":55},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[49,99937,99938],{"class":51,"line":98},[49,99939,99940],{"class":55},"#np.hstack([aa,bb])\n",[19,99942,417],{},[19,99944,99945],{},[174,99946],{"alt":44,"src":99947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,99949,99950],{},"等效于concatenate()函数中axis=1时的情况",[19,99952,99953],{},"②三维数组",[39,99955,99957],{"className":31626,"code":99956,"language":31628,"meta":44,"style":44},"#两个三行六列\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",[46,99958,99959,99963,99991,100019,100024,100029],{"__ignoreMap":44},[49,99960,99961],{"class":51,"line":52},[49,99962,99512],{"class":55},[49,99964,99965,99967,99969,99971,99973,99975,99977,99979,99981,99983,99985,99987,99989],{"class":51,"line":59},[49,99966,96746],{"class":66},[49,99968,1448],{"class":109},[49,99970,94227],{"class":66},[49,99972,159],{"class":73},[49,99974,1770],{"class":66},[49,99976,1717],{"class":73},[49,99978,94232],{"class":66},[49,99980,1478],{"class":73},[49,99982,1770],{"class":66},[49,99984,1472],{"class":73},[49,99986,1770],{"class":66},[49,99988,1736],{"class":73},[49,99990,1409],{"class":66},[49,99992,99993,99995,99997,99999,100001,100003,100005,100007,100009,100011,100013,100015,100017],{"class":51,"line":70},[49,99994,99545],{"class":66},[49,99996,1448],{"class":109},[49,99998,94227],{"class":66},[49,100000,1729],{"class":73},[49,100002,1770],{"class":66},[49,100004,99556],{"class":73},[49,100006,94232],{"class":66},[49,100008,1478],{"class":73},[49,100010,1770],{"class":66},[49,100012,1472],{"class":73},[49,100014,1770],{"class":66},[49,100016,1736],{"class":73},[49,100018,1409],{"class":66},[49,100020,100021],{"class":51,"line":86},[49,100022,100023],{"class":55},"#使用hstack\n",[49,100025,100026],{"class":51,"line":98},[49,100027,100028],{"class":66},"np.hstack((aaa,bbb)).shape\n",[49,100030,100031],{"class":51,"line":121},[49,100032,100033],{"class":55},"#输出：（2，6，6）\n",[14,100035,100037],{"id":100036},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100039,100040],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100042,99872],{},[39,100044,100046],{"className":31626,"code":100045,"language":31628,"meta":44,"style":44},"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",[46,100047,100048,100072,100096,100101,100106,100111],{"__ignoreMap":44},[49,100049,100050,100052,100054,100056,100058,100060,100062,100064,100066,100068,100070],{"class":51,"line":52},[49,100051,94531],{"class":66},[49,100053,1448],{"class":109},[49,100055,94227],{"class":66},[49,100057,159],{"class":73},[49,100059,1770],{"class":66},[49,100061,1914],{"class":73},[49,100063,94232],{"class":66},[49,100065,1472],{"class":73},[49,100067,1770],{"class":66},[49,100069,1685],{"class":73},[49,100071,1409],{"class":66},[49,100073,100074,100076,100078,100080,100082,100084,100086,100088,100090,100092,100094],{"class":51,"line":59},[49,100075,99412],{"class":66},[49,100077,1448],{"class":109},[49,100079,94227],{"class":66},[49,100081,1729],{"class":73},[49,100083,1770],{"class":66},[49,100085,2033],{"class":73},[49,100087,94232],{"class":66},[49,100089,1472],{"class":73},[49,100091,1770],{"class":66},[49,100093,1685],{"class":73},[49,100095,1409],{"class":66},[49,100097,100098],{"class":51,"line":70},[49,100099,100100],{"class":55},"#vstack 垂直方向进行堆叠\n",[49,100102,100103],{"class":51,"line":86},[49,100104,100105],{"class":66},"np.vstack((aa,bb))\n",[49,100107,100108],{"class":51,"line":98},[49,100109,100110],{"class":55},"#与hstack传的参数类似，等价于：\n",[49,100112,100113],{"class":51,"line":121},[49,100114,100115],{"class":66},"np.vstack([aa,bb])\n",[19,100117,417],{},[19,100119,100120],{},[174,100121],{"alt":44,"src":100122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100124,99953],{},[39,100126,100128],{"className":31626,"code":100127,"language":31628,"meta":44,"style":44},"#两个三行六列\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",[46,100129,100130,100134,100162,100190,100195,100200],{"__ignoreMap":44},[49,100131,100132],{"class":51,"line":52},[49,100133,99512],{"class":55},[49,100135,100136,100138,100140,100142,100144,100146,100148,100150,100152,100154,100156,100158,100160],{"class":51,"line":59},[49,100137,96746],{"class":66},[49,100139,1448],{"class":109},[49,100141,94227],{"class":66},[49,100143,159],{"class":73},[49,100145,1770],{"class":66},[49,100147,1717],{"class":73},[49,100149,94232],{"class":66},[49,100151,1478],{"class":73},[49,100153,1770],{"class":66},[49,100155,1472],{"class":73},[49,100157,1770],{"class":66},[49,100159,1736],{"class":73},[49,100161,1409],{"class":66},[49,100163,100164,100166,100168,100170,100172,100174,100176,100178,100180,100182,100184,100186,100188],{"class":51,"line":70},[49,100165,99545],{"class":66},[49,100167,1448],{"class":109},[49,100169,94227],{"class":66},[49,100171,1729],{"class":73},[49,100173,1770],{"class":66},[49,100175,99556],{"class":73},[49,100177,94232],{"class":66},[49,100179,1478],{"class":73},[49,100181,1770],{"class":66},[49,100183,1472],{"class":73},[49,100185,1770],{"class":66},[49,100187,1736],{"class":73},[49,100189,1409],{"class":66},[49,100191,100192],{"class":51,"line":86},[49,100193,100194],{"class":55},"#使用vstack\n",[49,100196,100197],{"class":51,"line":98},[49,100198,100199],{"class":66},"np.vstack((aaa,bbb)).shape\n",[49,100201,100202],{"class":51,"line":121},[49,100203,100204],{"class":55},"#输出：（4，3，6）\n",[14,100206,100208],{"id":100207},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100210,100211],{},"该方法是三维数组特有的方法",[19,100213,100214],{},"也就是说",[19,100216,100217],{},"一维数组拼接方法用：concatenate()",[19,100219,100220],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100222,100223],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100225,100226],{},"四维数组及多维数组只能用concatenate进行拼接",[39,100228,100230],{"className":31626,"code":100229,"language":31628,"meta":44,"style":44},"#两个三行六列\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",[46,100231,100232,100236,100264,100292,100297,100302],{"__ignoreMap":44},[49,100233,100234],{"class":51,"line":52},[49,100235,99512],{"class":55},[49,100237,100238,100240,100242,100244,100246,100248,100250,100252,100254,100256,100258,100260,100262],{"class":51,"line":59},[49,100239,96746],{"class":66},[49,100241,1448],{"class":109},[49,100243,94227],{"class":66},[49,100245,159],{"class":73},[49,100247,1770],{"class":66},[49,100249,1717],{"class":73},[49,100251,94232],{"class":66},[49,100253,1478],{"class":73},[49,100255,1770],{"class":66},[49,100257,1472],{"class":73},[49,100259,1770],{"class":66},[49,100261,1736],{"class":73},[49,100263,1409],{"class":66},[49,100265,100266,100268,100270,100272,100274,100276,100278,100280,100282,100284,100286,100288,100290],{"class":51,"line":70},[49,100267,99545],{"class":66},[49,100269,1448],{"class":109},[49,100271,94227],{"class":66},[49,100273,1729],{"class":73},[49,100275,1770],{"class":66},[49,100277,99556],{"class":73},[49,100279,94232],{"class":66},[49,100281,1478],{"class":73},[49,100283,1770],{"class":66},[49,100285,1472],{"class":73},[49,100287,1770],{"class":66},[49,100289,1736],{"class":73},[49,100291,1409],{"class":66},[49,100293,100294],{"class":51,"line":86},[49,100295,100296],{"class":55},"#使用dstack\n",[49,100298,100299],{"class":51,"line":98},[49,100300,100301],{"class":66},"np.dstack((aaa,bbb)).shape\n",[49,100303,100304],{"class":51,"line":121},[49,100305,100306],{"class":55},"#结果：（2，3，12）\n",[1305,100308,100309],{},"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":44,"searchDepth":59,"depth":59,"links":100311},[100312,100313,100314,100315],{"id":99252,"depth":59,"text":99253},{"id":99865,"depth":59,"text":99866},{"id":100036,"depth":59,"text":100037},{"id":100207,"depth":59,"text":100208},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99244,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100322,"title":100323,"body":100324,"description":1327,"extension":1328,"meta":100599,"navigation":1330,"path":100600,"seo":100601,"stem":100602,"__hash__":100603},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100325,"toc":100597},[100326,100329,100332,100426,100429,100432,100435,100438,100441,100444,100447,100450,100594],[10,100327,100323],{"id":100328},"_7数组转置",[19,100330,100331],{},"使用transpose()函数",[39,100333,100335],{"className":31626,"code":100334,"language":31628,"meta":44,"style":44},"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",[46,100336,100337,100347,100371,100376,100381,100386,100391,100399,100403,100407,100412,100417,100422],{"__ignoreMap":44},[49,100338,100339,100341,100343,100345],{"class":51,"line":52},[49,100340,31640],{"class":109},[49,100342,32628],{"class":66},[49,100344,32631],{"class":109},[49,100346,32634],{"class":66},[49,100348,100349,100351,100353,100355,100357,100359,100361,100363,100365,100367,100369],{"class":51,"line":59},[49,100350,1630],{"class":66},[49,100352,1448],{"class":109},[49,100354,32965],{"class":66},[49,100356,159],{"class":73},[49,100358,1770],{"class":66},[49,100360,1914],{"class":73},[49,100362,94232],{"class":66},[49,100364,1685],{"class":73},[49,100366,1770],{"class":66},[49,100368,1472],{"class":73},[49,100370,1409],{"class":66},[49,100372,100373],{"class":51,"line":70},[49,100374,100375],{"class":55},"#二维数组转置\n",[49,100377,100378],{"class":51,"line":86},[49,100379,100380],{"class":55},"#调用transpose()函数\n",[49,100382,100383],{"class":51,"line":98},[49,100384,100385],{"class":66},"a.transpose()\n",[49,100387,100388],{"class":51,"line":121},[49,100389,100390],{"class":55},"#对于二维数组也可以采用.T来实现\n",[49,100392,100393,100396],{"class":51,"line":134},[49,100394,100395],{"class":66},"a.T",[49,100397,100398],{"class":55},"#与上述代码一样\n",[49,100400,100401],{"class":51,"line":1085},[49,100402,94789],{"class":55},[49,100404,100405],{"class":51,"line":2574},[49,100406,95153],{"class":1505},[49,100408,100409],{"class":51,"line":2586},[49,100410,100411],{"class":1505},"array([[ 1,  4,  7, 10],\n",[49,100413,100414],{"class":51,"line":2867},[49,100415,100416],{"class":1505},"       [ 2,  5,  8, 11],\n",[49,100418,100419],{"class":51,"line":2872},[49,100420,100421],{"class":1505},"       [ 3,  6,  9, 12]])\n",[49,100423,100424],{"class":51,"line":2878},[49,100425,95153],{"class":1505},[19,100427,100428],{},"也可以使用np.transpose()的形式",[19,100430,100431],{},"#多维数组进行转置 np.transpose()",[19,100433,100434],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100436,100437],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100439,100440],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100442,100443],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100445,100446],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100448,100449],{},"四维及以上的数组也是一样的道理",[39,100451,100453],{"className":31626,"code":100452,"language":31628,"meta":44,"style":44},"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",[46,100454,100455,100483,100488,100493,100498,100516,100521,100553,100558,100563,100568,100589],{"__ignoreMap":44},[49,100456,100457,100459,100461,100463,100465,100467,100469,100471,100473,100475,100477,100479,100481],{"class":51,"line":52},[49,100458,2210],{"class":66},[49,100460,1448],{"class":109},[49,100462,94227],{"class":66},[49,100464,159],{"class":73},[49,100466,1770],{"class":66},[49,100468,1717],{"class":73},[49,100470,94232],{"class":66},[49,100472,1472],{"class":73},[49,100474,1770],{"class":66},[49,100476,1736],{"class":73},[49,100478,1770],{"class":66},[49,100480,1478],{"class":73},[49,100482,1409],{"class":66},[49,100484,100485],{"class":51,"line":59},[49,100486,100487],{"class":66},"x.shape\n",[49,100489,100490],{"class":51,"line":70},[49,100491,100492],{"class":55},"#结果：（3,6,2）\n",[49,100494,100495],{"class":51,"line":86},[49,100496,100497],{"class":55},"#使用np.transpose()进行转置 变为(2,6,3)\n",[49,100499,100500,100503,100505,100507,100509,100511,100513],{"class":51,"line":98},[49,100501,100502],{"class":66},"np.transpose(x,(",[49,100504,1478],{"class":73},[49,100506,1770],{"class":66},[49,100508,159],{"class":73},[49,100510,1770],{"class":66},[49,100512,80],{"class":73},[49,100514,100515],{"class":66},")).shape\n",[49,100517,100518],{"class":51,"line":121},[49,100519,100520],{"class":55},"#结果：(2,6,3)\n",[49,100522,100523,100525,100527,100529,100531,100533,100535,100537,100539,100541,100543,100545,100547,100549,100551],{"class":51,"line":134},[49,100524,99730],{"class":66},[49,100526,1448],{"class":109},[49,100528,94227],{"class":66},[49,100530,159],{"class":73},[49,100532,1770],{"class":66},[49,100534,1717],{"class":73},[49,100536,94232],{"class":66},[49,100538,1472],{"class":73},[49,100540,1770],{"class":66},[49,100542,1478],{"class":73},[49,100544,1770],{"class":66},[49,100546,159],{"class":73},[49,100548,1770],{"class":66},[49,100550,1736],{"class":73},[49,100552,1409],{"class":66},[49,100554,100555],{"class":51,"line":1085},[49,100556,100557],{"class":66},"aaaa.shape\n",[49,100559,100560],{"class":51,"line":2574},[49,100561,100562],{"class":55},"#结果：（3，2，1，6）\n",[49,100564,100565],{"class":51,"line":2586},[49,100566,100567],{"class":55},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[49,100569,100570,100573,100575,100577,100579,100581,100583,100585,100587],{"class":51,"line":2867},[49,100571,100572],{"class":66},"np.transpose(aaaa,(",[49,100574,159],{"class":73},[49,100576,1770],{"class":66},[49,100578,1478],{"class":73},[49,100580,1770],{"class":66},[49,100582,80],{"class":73},[49,100584,1770],{"class":66},[49,100586,1472],{"class":73},[49,100588,100515],{"class":66},[49,100590,100591],{"class":51,"line":2872},[49,100592,100593],{"class":55},"#结果：(2,1,3,6)\n",[1305,100595,100596],{},"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":44,"searchDepth":59,"depth":59,"links":100598},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100323,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100605,"title":100606,"body":100607,"description":1327,"extension":1328,"meta":101341,"navigation":1330,"path":101342,"seo":101343,"stem":101344,"__hash__":101345},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100608,"toc":101339},[100609,100612,100615,100618,100621,100624,100627,100630,100633,100742,100745,100748,101336],[10,100610,100606],{"id":100611},"_8数组分割",[19,100613,100614],{},"split分割",[19,100616,100617],{},"numpy.split(ary,indics_or_sections,axis)",[19,100619,100620],{},"解释：",[19,100622,100623],{},"ary:被分割的数组",[19,100625,100626],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,100628,100629],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,100631,100632],{},"①一维数组的分割",[39,100634,100636],{"className":31626,"code":100635,"language":31628,"meta":44,"style":44},"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",[46,100637,100638,100654,100659,100668,100672,100677,100685,100689,100694,100699,100712,100716,100721,100733,100737],{"__ignoreMap":44},[49,100639,100640,100642,100644,100646,100648,100650,100652],{"class":51,"line":52},[49,100641,1630],{"class":66},[49,100643,1448],{"class":109},[49,100645,94227],{"class":66},[49,100647,159],{"class":73},[49,100649,1770],{"class":66},[49,100651,1812],{"class":73},[49,100653,1409],{"class":66},[49,100655,100656],{"class":51,"line":59},[49,100657,100658],{"class":55},"#如果传入整数，必须能够平分，否则会报错\n",[49,100660,100661,100664,100666],{"class":51,"line":70},[49,100662,100663],{"class":66},"np.split(a,",[49,100665,1478],{"class":73},[49,100667,1409],{"class":66},[49,100669,100670],{"class":51,"line":86},[49,100671,94789],{"class":55},[49,100673,100674],{"class":51,"line":98},[49,100675,100676],{"class":55},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[49,100678,100679,100681,100683],{"class":51,"line":121},[49,100680,100663],{"class":66},[49,100682,1685],{"class":73},[49,100684,1409],{"class":66},[49,100686,100687],{"class":51,"line":134},[49,100688,94789],{"class":55},[49,100690,100691],{"class":51,"line":1085},[49,100692,100693],{"class":55},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[49,100695,100696],{"class":51,"line":2574},[49,100697,100698],{"class":55},"#传入数组\n",[49,100700,100701,100704,100706,100708,100710],{"class":51,"line":2586},[49,100702,100703],{"class":66},"np.split(a,[",[49,100705,1472],{"class":73},[49,100707,1770],{"class":66},[49,100709,1711],{"class":73},[49,100711,5911],{"class":66},[49,100713,100714],{"class":51,"line":2867},[49,100715,94789],{"class":55},[49,100717,100718],{"class":51,"line":2872},[49,100719,100720],{"class":55},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[49,100722,100723,100725,100727,100729,100731],{"class":51,"line":2878},[49,100724,100703],{"class":66},[49,100726,1711],{"class":73},[49,100728,1770],{"class":66},[49,100730,1761],{"class":73},[49,100732,5911],{"class":66},[49,100734,100735],{"class":51,"line":2883},[49,100736,94789],{"class":55},[49,100738,100739],{"class":51,"line":2897},[49,100740,100741],{"class":55},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,100743,100744],{},"②二维数组的分割",[19,100746,100747],{},"使用split()",[39,100749,100751],{"className":31626,"code":100750,"language":31628,"meta":44,"style":44},"#二维数组分割\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",[46,100752,100753,100758,100782,100787,100796,100800,100804,100809,100814,100819,100824,100829,100834,100839,100843,100856,100860,100864,100868,100872,100876,100881,100886,100891,100895,100900,100916,100920,100924,100929,100934,100939,100944,100949,100954,100959,100964,100969,100974,100979,100984,100989,100994,100999,101004,101009,101014,101018,101022,101042,101046,101050,101055,101060,101065,101070,101075,101080,101085,101090,101095,101100,101105,101110,101115,101120,101125,101130,101135,101140,101144,101149,101158,101162,101166,101170,101174,101178,101182,101186,101190,101194,101203,101207,101211,101215,101219,101223,101227,101231,101235,101239,101243,101247,101251,101255,101259,101263,101267,101271,101275,101279,101283,101287,101300,101304,101308,101312,101316,101320,101324,101328,101332],{"__ignoreMap":44},[49,100754,100755],{"class":51,"line":52},[49,100756,100757],{"class":55},"#二维数组分割\n",[49,100759,100760,100762,100764,100766,100768,100770,100772,100774,100776,100778,100780],{"class":51,"line":59},[49,100761,94531],{"class":66},[49,100763,1448],{"class":109},[49,100765,94227],{"class":66},[49,100767,159],{"class":73},[49,100769,1770],{"class":66},[49,100771,1717],{"class":73},[49,100773,94232],{"class":66},[49,100775,1736],{"class":73},[49,100777,1770],{"class":66},[49,100779,1736],{"class":73},[49,100781,1409],{"class":66},[49,100783,100784],{"class":51,"line":70},[49,100785,100786],{"class":55},"#默认axis=0  传入整数平均分,按行来的\n",[49,100788,100789,100792,100794],{"class":51,"line":86},[49,100790,100791],{"class":66},"np.split(aa,",[49,100793,1472],{"class":73},[49,100795,1409],{"class":66},[49,100797,100798],{"class":51,"line":98},[49,100799,96989],{"class":55},[49,100801,100802],{"class":51,"line":121},[49,100803,95153],{"class":1505},[49,100805,100806],{"class":51,"line":134},[49,100807,100808],{"class":1505},"[array([[ 1,  2,  3,  4,  5,  6],\n",[49,100810,100811],{"class":51,"line":1085},[49,100812,100813],{"class":1505},"        [ 7,  8,  9, 10, 11, 12]]),\n",[49,100815,100816],{"class":51,"line":2574},[49,100817,100818],{"class":1505}," array([[13, 14, 15, 16, 17, 18],\n",[49,100820,100821],{"class":51,"line":2586},[49,100822,100823],{"class":1505},"        [19, 20, 21, 22, 23, 24]]),\n",[49,100825,100826],{"class":51,"line":2867},[49,100827,100828],{"class":1505}," array([[25, 26, 27, 28, 29, 30],\n",[49,100830,100831],{"class":51,"line":2872},[49,100832,100833],{"class":1505},"        [31, 32, 33, 34, 35, 36]])]\n",[49,100835,100836],{"class":51,"line":2878},[49,100837,100838],{"class":1505}," '''\n",[49,100840,100841],{"class":51,"line":2883},[49,100842,100698],{"class":55},[49,100844,100845,100848,100850,100852,100854],{"class":51,"line":2897},[49,100846,100847],{"class":66},"np.split(aa,[",[49,100849,1478],{"class":73},[49,100851,1770],{"class":66},[49,100853,1711],{"class":73},[49,100855,5911],{"class":66},[49,100857,100858],{"class":51,"line":2902},[49,100859,96989],{"class":55},[49,100861,100862],{"class":51,"line":2908},[49,100863,95153],{"class":1505},[49,100865,100866],{"class":51,"line":2929},[49,100867,100808],{"class":1505},[49,100869,100870],{"class":51,"line":2934},[49,100871,100813],{"class":1505},[49,100873,100874],{"class":51,"line":2948},[49,100875,100818],{"class":1505},[49,100877,100878],{"class":51,"line":2953},[49,100879,100880],{"class":1505},"        [19, 20, 21, 22, 23, 24],\n",[49,100882,100883],{"class":51,"line":2982},[49,100884,100885],{"class":1505},"        [25, 26, 27, 28, 29, 30]]),\n",[49,100887,100888],{"class":51,"line":2987},[49,100889,100890],{"class":1505}," array([[31, 32, 33, 34, 35, 36]])]\n",[49,100892,100893],{"class":51,"line":3004},[49,100894,95153],{"class":1505},[49,100896,100897],{"class":51,"line":3009},[49,100898,100899],{"class":55},"#axis=1 按照列来分\n",[49,100901,100902,100904,100906,100908,100910,100912,100914],{"class":51,"line":3014},[49,100903,100791],{"class":66},[49,100905,1472],{"class":73},[49,100907,1770],{"class":66},[49,100909,48762],{"class":6468},[49,100911,1448],{"class":109},[49,100913,159],{"class":73},[49,100915,1409],{"class":66},[49,100917,100918],{"class":51,"line":3019},[49,100919,96989],{"class":55},[49,100921,100922],{"class":51,"line":3033},[49,100923,95153],{"class":1505},[49,100925,100926],{"class":51,"line":3038},[49,100927,100928],{"class":1505},"[array([[ 1,  2],\n",[49,100930,100931],{"class":51,"line":3831},[49,100932,100933],{"class":1505},"        [ 7,  8],\n",[49,100935,100936],{"class":51,"line":3845},[49,100937,100938],{"class":1505},"        [13, 14],\n",[49,100940,100941],{"class":51,"line":3853},[49,100942,100943],{"class":1505},"        [19, 20],\n",[49,100945,100946],{"class":51,"line":3858},[49,100947,100948],{"class":1505},"        [25, 26],\n",[49,100950,100951],{"class":51,"line":3864},[49,100952,100953],{"class":1505},"        [31, 32]]),\n",[49,100955,100956],{"class":51,"line":3870},[49,100957,100958],{"class":1505}," array([[ 3,  4],\n",[49,100960,100961],{"class":51,"line":3875},[49,100962,100963],{"class":1505},"        [ 9, 10],\n",[49,100965,100966],{"class":51,"line":9200},[49,100967,100968],{"class":1505},"        [15, 16],\n",[49,100970,100971],{"class":51,"line":9224},[49,100972,100973],{"class":1505},"        [21, 22],\n",[49,100975,100976],{"class":51,"line":9229},[49,100977,100978],{"class":1505},"        [27, 28],\n",[49,100980,100981],{"class":51,"line":9235},[49,100982,100983],{"class":1505},"        [33, 34]]),\n",[49,100985,100986],{"class":51,"line":9262},[49,100987,100988],{"class":1505}," array([[ 5,  6],\n",[49,100990,100991],{"class":51,"line":9267},[49,100992,100993],{"class":1505},"        [11, 12],\n",[49,100995,100996],{"class":51,"line":9273},[49,100997,100998],{"class":1505},"        [17, 18],\n",[49,101000,101001],{"class":51,"line":9285},[49,101002,101003],{"class":1505},"        [23, 24],\n",[49,101005,101006],{"class":51,"line":9297},[49,101007,101008],{"class":1505},"        [29, 30],\n",[49,101010,101011],{"class":51,"line":9309},[49,101012,101013],{"class":1505},"        [35, 36]])]\n",[49,101015,101016],{"class":51,"line":10968},[49,101017,100838],{"class":1505},[49,101019,101020],{"class":51,"line":10993},[49,101021,100698],{"class":55},[49,101023,101024,101026,101028,101030,101032,101034,101036,101038,101040],{"class":51,"line":11016},[49,101025,100847],{"class":66},[49,101027,159],{"class":73},[49,101029,1770],{"class":66},[49,101031,1478],{"class":73},[49,101033,42857],{"class":66},[49,101035,48762],{"class":6468},[49,101037,1448],{"class":109},[49,101039,159],{"class":73},[49,101041,1409],{"class":66},[49,101043,101044],{"class":51,"line":11040},[49,101045,94789],{"class":55},[49,101047,101048],{"class":51,"line":11045},[49,101049,95153],{"class":1505},[49,101051,101052],{"class":51,"line":11050},[49,101053,101054],{"class":1505},"[array([[ 1],\n",[49,101056,101057],{"class":51,"line":11055},[49,101058,101059],{"class":1505},"        [ 7],\n",[49,101061,101062],{"class":51,"line":11064},[49,101063,101064],{"class":1505},"        [13],\n",[49,101066,101067],{"class":51,"line":11069},[49,101068,101069],{"class":1505},"        [19],\n",[49,101071,101072],{"class":51,"line":11075},[49,101073,101074],{"class":1505},"        [25],\n",[49,101076,101077],{"class":51,"line":11096},[49,101078,101079],{"class":1505},"        [31]]),\n",[49,101081,101082],{"class":51,"line":11102},[49,101083,101084],{"class":1505}," array([[ 2],\n",[49,101086,101087],{"class":51,"line":11116},[49,101088,101089],{"class":1505},"        [ 8],\n",[49,101091,101092],{"class":51,"line":11122},[49,101093,101094],{"class":1505},"        [14],\n",[49,101096,101097],{"class":51,"line":11149},[49,101098,101099],{"class":1505},"        [20],\n",[49,101101,101102],{"class":51,"line":11158},[49,101103,101104],{"class":1505},"        [26],\n",[49,101106,101107],{"class":51,"line":11164},[49,101108,101109],{"class":1505},"        [32]]),\n",[49,101111,101112],{"class":51,"line":11172},[49,101113,101114],{"class":1505}," array([[ 3,  4,  5,  6],\n",[49,101116,101117],{"class":51,"line":11177},[49,101118,101119],{"class":1505},"        [ 9, 10, 11, 12],\n",[49,101121,101122],{"class":51,"line":17854},[49,101123,101124],{"class":1505},"        [15, 16, 17, 18],\n",[49,101126,101127],{"class":51,"line":17860},[49,101128,101129],{"class":1505},"        [21, 22, 23, 24],\n",[49,101131,101132],{"class":51,"line":17883},[49,101133,101134],{"class":1505},"        [27, 28, 29, 30],\n",[49,101136,101137],{"class":51,"line":17889},[49,101138,101139],{"class":1505},"        [33, 34, 35, 36]])]\n",[49,101141,101142],{"class":51,"line":17912},[49,101143,95153],{"class":1505},[49,101145,101146],{"class":51,"line":17926},[49,101147,101148],{"class":55},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[49,101150,101151,101154,101156],{"class":51,"line":17946},[49,101152,101153],{"class":66},"np.vsplit(aa,",[49,101155,1472],{"class":73},[49,101157,1409],{"class":66},[49,101159,101160],{"class":51,"line":17952},[49,101161,94789],{"class":55},[49,101163,101164],{"class":51,"line":17963},[49,101165,95153],{"class":1505},[49,101167,101168],{"class":51,"line":17986},[49,101169,100808],{"class":1505},[49,101171,101172],{"class":51,"line":18008},[49,101173,100813],{"class":1505},[49,101175,101176],{"class":51,"line":18013},[49,101177,100818],{"class":1505},[49,101179,101180],{"class":51,"line":18019},[49,101181,100823],{"class":1505},[49,101183,101184],{"class":51,"line":18033},[49,101185,100828],{"class":1505},[49,101187,101188],{"class":51,"line":18046},[49,101189,100833],{"class":1505},[49,101191,101192],{"class":51,"line":18051},[49,101193,95153],{"class":1505},[49,101195,101196,101199,101201],{"class":51,"line":18065},[49,101197,101198],{"class":66},"np.hsplit(aa,",[49,101200,1472],{"class":73},[49,101202,1409],{"class":66},[49,101204,101205],{"class":51,"line":18070},[49,101206,94789],{"class":55},[49,101208,101209],{"class":51,"line":18076},[49,101210,95153],{"class":1505},[49,101212,101213],{"class":51,"line":18081},[49,101214,100928],{"class":1505},[49,101216,101217],{"class":51,"line":18095},[49,101218,100933],{"class":1505},[49,101220,101221],{"class":51,"line":18100},[49,101222,100938],{"class":1505},[49,101224,101225],{"class":51,"line":18105},[49,101226,100943],{"class":1505},[49,101228,101229],{"class":51,"line":18119},[49,101230,100948],{"class":1505},[49,101232,101233],{"class":51,"line":18131},[49,101234,100953],{"class":1505},[49,101236,101237],{"class":51,"line":18136},[49,101238,100958],{"class":1505},[49,101240,101241],{"class":51,"line":18149},[49,101242,100963],{"class":1505},[49,101244,101245],{"class":51,"line":18154},[49,101246,100968],{"class":1505},[49,101248,101249],{"class":51,"line":18159},[49,101250,100973],{"class":1505},[49,101252,101253],{"class":51,"line":18164},[49,101254,100978],{"class":1505},[49,101256,101257],{"class":51,"line":18177},[49,101258,100983],{"class":1505},[49,101260,101261],{"class":51,"line":18182},[49,101262,100988],{"class":1505},[49,101264,101265],{"class":51,"line":33881},[49,101266,100993],{"class":1505},[49,101268,101269],{"class":51,"line":33887},[49,101270,100998],{"class":1505},[49,101272,101273],{"class":51,"line":33893},[49,101274,101003],{"class":1505},[49,101276,101277],{"class":51,"line":33899},[49,101278,101008],{"class":1505},[49,101280,101281],{"class":51,"line":33905},[49,101282,101013],{"class":1505},[49,101284,101285],{"class":51,"line":33916},[49,101286,95153],{"class":1505},[49,101288,101289,101292,101294,101296,101298],{"class":51,"line":33922},[49,101290,101291],{"class":66},"np.vsplit(aa,[",[49,101293,1478],{"class":73},[49,101295,1770],{"class":66},[49,101297,1711],{"class":73},[49,101299,5911],{"class":66},[49,101301,101302],{"class":51,"line":33942},[49,101303,94789],{"class":55},[49,101305,101306],{"class":51,"line":33948},[49,101307,95153],{"class":1505},[49,101309,101310],{"class":51,"line":33959},[49,101311,100808],{"class":1505},[49,101313,101314],{"class":51,"line":33965},[49,101315,100813],{"class":1505},[49,101317,101318],{"class":51,"line":33971},[49,101319,100818],{"class":1505},[49,101321,101322],{"class":51,"line":33977},[49,101323,100880],{"class":1505},[49,101325,101326],{"class":51,"line":33983},[49,101327,100885],{"class":1505},[49,101329,101330],{"class":51,"line":33989},[49,101331,100890],{"class":1505},[49,101333,101334],{"class":51,"line":33995},[49,101335,100838],{"class":1505},[1305,101337,101338],{},"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":44,"searchDepth":59,"depth":59,"links":101340},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100606,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101347,"title":101348,"body":101349,"description":1327,"extension":1328,"meta":101843,"navigation":1330,"path":101844,"seo":101845,"stem":101846,"__hash__":101847},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101350,"toc":101834},[101351,101354,101357,101382,101386,101445,101497,101501,101503,101539,101593,101595,101633,101704,101708,101713,101717,101720,101753,101756,101760,101763,101766,101769,101772,101777,101781,101784,101787,101790,101793,101798,101802,101807,101810,101831],[10,101352,101348],{"id":101353},"_9数学函数",[19,101355,101356],{},"补充回顾：python的列表推导式",[39,101358,101360],{"className":31626,"code":101359,"language":31628,"meta":44,"style":44},"[1\u002Fi for i in a]\n",[46,101361,101362],{"__ignoreMap":44},[49,101363,101364,101366,101368,101370,101373,101375,101377,101379],{"class":51,"line":52},[49,101365,2280],{"class":66},[49,101367,159],{"class":73},[49,101369,1975],{"class":109},[49,101371,101372],{"class":66},"i ",[49,101374,4279],{"class":109},[49,101376,10690],{"class":66},[49,101378,27292],{"class":109},[49,101380,101381],{"class":66}," a]\n",[14,101383,101385],{"id":101384},"_91-求倒数","9.1 求倒数",[39,101387,101389],{"className":31626,"code":101388,"language":31628,"meta":44,"style":44},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[46,101390,101391,101396,101424,101436],{"__ignoreMap":44},[49,101392,101393],{"class":51,"line":52},[49,101394,101395],{"class":55},"#数组求倒数\n",[49,101397,101398,101400,101402,101404,101406,101408,101410,101412,101414,101416,101418,101420,101422],{"class":51,"line":59},[49,101399,1630],{"class":66},[49,101401,1448],{"class":109},[49,101403,2280],{"class":66},[49,101405,159],{"class":73},[49,101407,1770],{"class":66},[49,101409,1478],{"class":73},[49,101411,1770],{"class":66},[49,101413,1472],{"class":73},[49,101415,1770],{"class":66},[49,101417,1685],{"class":73},[49,101419,1770],{"class":66},[49,101421,1711],{"class":73},[49,101423,34494],{"class":66},[49,101425,101426,101428,101430,101433],{"class":51,"line":70},[49,101427,1655],{"class":66},[49,101429,1448],{"class":109},[49,101431,101432],{"class":66},"np.array(a)",[49,101434,101435],{"class":55},"#将列表转换为数组\n",[49,101437,101438,101440,101442],{"class":51,"line":86},[49,101439,159],{"class":73},[49,101441,1975],{"class":109},[49,101443,101444],{"class":66},"b\n",[39,101446,101448],{"className":31626,"code":101447,"language":31628,"meta":44,"style":44},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[46,101449,101450,101478,101487,101492],{"__ignoreMap":44},[49,101451,101452,101454,101456,101458,101460,101462,101464,101466,101468,101470,101472,101474,101476],{"class":51,"line":52},[49,101453,1630],{"class":66},[49,101455,1448],{"class":109},[49,101457,2280],{"class":66},[49,101459,159],{"class":73},[49,101461,1770],{"class":66},[49,101463,1478],{"class":73},[49,101465,1770],{"class":66},[49,101467,1472],{"class":73},[49,101469,1770],{"class":66},[49,101471,1685],{"class":73},[49,101473,1770],{"class":66},[49,101475,1711],{"class":73},[49,101477,34494],{"class":66},[49,101479,101480,101482,101484],{"class":51,"line":59},[49,101481,1655],{"class":66},[49,101483,1448],{"class":109},[49,101485,101486],{"class":66},"np.array(a)\n",[49,101488,101489],{"class":51,"line":70},[49,101490,101491],{"class":55},"#调用numpy中的函数reciprocal()\n",[49,101493,101494],{"class":51,"line":86},[49,101495,101496],{"class":66},"np.reciprocal(b)\n",[14,101498,101500],{"id":101499},"_92-求平方","9.2 求平方",[19,101502,95755],{},[39,101504,101506],{"className":31626,"code":101505,"language":31628,"meta":44,"style":44},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[46,101507,101508,101513,101518,101534],{"__ignoreMap":44},[49,101509,101510],{"class":51,"line":52},[49,101511,101512],{"class":55},"#square()，求平方\n",[49,101514,101515],{"class":51,"line":59},[49,101516,101517],{"class":55},"#一维数组\n",[49,101519,101520,101522,101524,101526,101528,101530,101532],{"class":51,"line":70},[49,101521,1630],{"class":66},[49,101523,1448],{"class":109},[49,101525,94227],{"class":66},[49,101527,159],{"class":73},[49,101529,1770],{"class":66},[49,101531,106],{"class":73},[49,101533,1409],{"class":66},[49,101535,101536],{"class":51,"line":86},[49,101537,101538],{"class":66},"np.square(a)\n",[39,101540,101542],{"className":31626,"code":101541,"language":31628,"meta":44,"style":44},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[46,101543,101544,101549,101554,101575],{"__ignoreMap":44},[49,101545,101546],{"class":51,"line":52},[49,101547,101548],{"class":55},"#或者通过循环遍历的形式来计算\n",[49,101550,101551],{"class":51,"line":59},[49,101552,101553],{"class":55},"#这是一个列表\n",[49,101555,101556,101559,101561,101563,101565,101567,101569,101572],{"class":51,"line":70},[49,101557,101558],{"class":66},"[i",[49,101560,1846],{"class":109},[49,101562,101372],{"class":66},[49,101564,4279],{"class":109},[49,101566,10690],{"class":66},[49,101568,27292],{"class":109},[49,101570,101571],{"class":66}," a]",[49,101573,101574],{"class":55},"#这个求完之后在数列当中\n",[49,101576,101577,101580,101582,101584,101586,101588,101590],{"class":51,"line":86},[49,101578,101579],{"class":66},"np.array([i",[49,101581,1846],{"class":109},[49,101583,101372],{"class":66},[49,101585,4279],{"class":109},[49,101587,10690],{"class":66},[49,101589,27292],{"class":109},[49,101591,101592],{"class":66}," a])\n",[19,101594,94516],{},[39,101596,101598],{"className":31626,"code":101597,"language":31628,"meta":44,"style":44},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[46,101599,101600,101604,101628],{"__ignoreMap":44},[49,101601,101602],{"class":51,"line":52},[49,101603,94526],{"class":55},[49,101605,101606,101608,101610,101612,101614,101616,101618,101620,101622,101624,101626],{"class":51,"line":59},[49,101607,94531],{"class":66},[49,101609,1448],{"class":109},[49,101611,94227],{"class":66},[49,101613,159],{"class":73},[49,101615,1770],{"class":66},[49,101617,1914],{"class":73},[49,101619,94232],{"class":66},[49,101621,1685],{"class":73},[49,101623,1770],{"class":66},[49,101625,1472],{"class":73},[49,101627,1409],{"class":66},[49,101629,101630],{"class":51,"line":70},[49,101631,101632],{"class":66},"np.square(aa)\n",[39,101634,101636],{"className":31626,"code":101635,"language":31628,"meta":44,"style":44},"#传统的方式\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",[46,101637,101638,101643,101652,101668,101684,101699],{"__ignoreMap":44},[49,101639,101640],{"class":51,"line":52},[49,101641,101642],{"class":55},"#传统的方式\n",[49,101644,101645,101647,101649],{"class":51,"line":59},[49,101646,99412],{"class":66},[49,101648,1448],{"class":109},[49,101650,101651],{"class":66},"np.empty_like(aa)\n",[49,101653,101654,101656,101658,101660,101662,101664,101666],{"class":51,"line":70},[49,101655,4279],{"class":109},[49,101657,10690],{"class":66},[49,101659,27292],{"class":109},[49,101661,33691],{"class":73},[49,101663,1403],{"class":66},[49,101665,1685],{"class":73},[49,101667,32034],{"class":66},[49,101669,101670,101672,101674,101676,101678,101680,101682],{"class":51,"line":86},[49,101671,4455],{"class":109},[49,101673,10752],{"class":66},[49,101675,27292],{"class":109},[49,101677,33691],{"class":73},[49,101679,1403],{"class":66},[49,101681,1472],{"class":73},[49,101683,32034],{"class":66},[49,101685,101686,101689,101691,101694,101696],{"class":51,"line":98},[49,101687,101688],{"class":66},"        bb[i,j]",[49,101690,1448],{"class":109},[49,101692,101693],{"class":66},"aa[i,j]",[49,101695,1846],{"class":109},[49,101697,101698],{"class":66},"aa[i,j]\n",[49,101700,101701],{"class":51,"line":121},[49,101702,101703],{"class":66},"bb\n",[14,101705,101707],{"id":101706},"_93-求各元素的符号","9.3 求各元素的符号",[19,101709,101710],{},[174,101711],{"alt":44,"src":101712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101714,101716],{"id":101715},"_94-modf函数","9.4 modf函数",[19,101718,101719],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[39,101721,101723],{"className":31626,"code":101722,"language":31628,"meta":44,"style":44},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[46,101724,101725,101748],{"__ignoreMap":44},[49,101726,101727,101729,101731,101733,101735,101737,101739,101741,101743,101746],{"class":51,"line":52},[49,101728,1630],{"class":66},[49,101730,1448],{"class":109},[49,101732,94227],{"class":66},[49,101734,1923],{"class":109},[49,101736,106],{"class":73},[49,101738,1770],{"class":66},[49,101740,106],{"class":73},[49,101742,1770],{"class":66},[49,101744,101745],{"class":73},"0.3",[49,101747,1409],{"class":66},[49,101749,101750],{"class":51,"line":59},[49,101751,101752],{"class":66},"np.modf(a)\n",[19,101754,101755],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101757,101759],{"id":101758},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,101761,101762],{},"np.cell()",[19,101764,101765],{},"np.floor()",[19,101767,101768],{},"np.rint()",[19,101770,101771],{},"对各元素分别向上取整、向下取整、四舍五入",[19,101773,101774],{},[174,101775],{"alt":44,"src":101776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101778,101780],{"id":101779},"_96-around函数","9.6 around()函数",[19,101782,101783],{},"around()函数也可以实现对数的小数位数进行操作",[19,101785,101786],{},"其中的参数：",[19,101788,101789],{},"1.要传的数组",[19,101791,101792],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,101794,101795],{},[174,101796],{"alt":44,"src":101797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101799,101801],{"id":101800},"_97-三角函数","9.7 三角函数",[19,101803,101804],{},[174,101805],{"alt":44,"src":101806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,101808,101809],{},"引入图像模块非常重要",[39,101811,101813],{"className":31626,"code":101812,"language":31628,"meta":44,"style":44},"from matplotlib import pyplot as plt\n",[46,101814,101815],{"__ignoreMap":44},[49,101816,101817,101819,101822,101824,101827,101829],{"class":51,"line":52},[49,101818,31985],{"class":109},[49,101820,101821],{"class":66}," matplotlib ",[49,101823,31640],{"class":109},[49,101825,101826],{"class":66}," pyplot ",[49,101828,32631],{"class":109},[49,101830,32685],{"class":66},[1305,101832,101833],{},"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":44,"searchDepth":59,"depth":59,"links":101835},[101836,101837,101838,101839,101840,101841,101842],{"id":101384,"depth":59,"text":101385},{"id":101499,"depth":59,"text":101500},{"id":101706,"depth":59,"text":101707},{"id":101715,"depth":59,"text":101716},{"id":101758,"depth":59,"text":101759},{"id":101779,"depth":59,"text":101780},{"id":101800,"depth":59,"text":101801},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101348,"description":1327},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101849,"title":101850,"body":101851,"description":1327,"extension":1328,"meta":101855,"navigation":1330,"path":101856,"seo":101857,"stem":101858,"__hash__":101859},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101852,"toc":101853},[],{"title":44,"searchDepth":59,"depth":59,"links":101854},[],{"category":51668},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101850,"description":1327},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101861,"title":101862,"body":101863,"description":44,"extension":1328,"meta":103871,"navigation":1330,"path":103872,"seo":103873,"stem":103874,"__hash__":103875},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101864,"toc":103847},[101865,101868,101872,101875,101878,101884,101887,101910,101913,101947,101950,101991,101995,101998,102091,102094,102138,102141,102158,102161,102175,102178,102181,102226,102229,102266,102270,102273,102279,102284,102304,102308,102311,102377,102380,102398,102402,102405,102434,102444,102450,102454,102457,102463,102474,102478,102481,102511,102514,102794,102797,102800,102811,102814,102817,102839,102846,102849,102867,102870,102873,102887,102895,102898,102924,102930,102933,102936,102946,102958,102978,102987,103007,103017,103041,103054,103068,103073,103114,103131,103156,103168,103188,103194,103239,103258,103275,103288,103304,103311,103323,103332,103367,103388,103413,103426,103450,103465,103490,103493,103514,103523,103526,103537,103541,103544,103550,103562,103569,103573,103576,103588,103591,103605,103608,103618,103628,103631,103671,103674,103678,103684,103687,103701,103705,103708,103741,103745,103748,103771,103779,103782,103788,103794,103797,103800,103828,103832,103835,103841,103844],[10,101866,101862],{"id":101867},"_1环境安装与第一个-mujoco-程序",[14,101869,101871],{"id":101870},"_1目标说明","1.目标说明",[19,101873,101874],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101876,101877],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[39,101879,101882],{"className":101880,"code":101881,"language":267,"meta":44},[1094],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[46,101883,101881],{"__ignoreMap":44},[19,101885,101886],{},"需要掌握:",[591,101888,101889,101892,101895,101900,101905],{},[26,101890,101891],{},"Fedora 44 下 MuJoCo 的系统依赖",[26,101893,101894],{},"Python 虚拟环境创建",[26,101896,101897],{},[46,101898,101899],{},"mujoco.MjModel",[26,101901,101902],{},[46,101903,101904],{},"mujoco.MjData",[26,101906,101907],{},[46,101908,101909],{},"mujoco.mj_step(model, data)",[19,101911,101912],{},"MuJoCo 中最重要的两个对象:",[293,101914,101915,101925],{},[296,101916,101917],{},[299,101918,101919,101922],{},[302,101920,101921],{"align":304},"对象",[302,101923,101924],{"align":304},"含义",[310,101926,101927,101937],{},[299,101928,101929,101934],{},[315,101930,101931],{"align":304},[46,101932,101933],{},"MjModel",[315,101935,101936],{"align":304},"模型结构，来自 XML，基本不随时间变化",[299,101938,101939,101944],{},[315,101940,101941],{"align":304},[46,101942,101943],{},"MjData",[315,101945,101946],{"align":304},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,101948,101949],{},"可以先用一个类比理解：",[293,101951,101952,101962],{},[296,101953,101954],{},[299,101955,101956,101959],{},[302,101957,101958],{"align":304},"类比",[302,101960,101961],{"align":304},"MuJoCo 对象",[310,101963,101964,101973,101982],{},[299,101965,101966,101969],{},[315,101967,101968],{"align":304},"游戏地图和角色配置",[315,101970,101971],{"align":304},[46,101972,101933],{},[299,101974,101975,101978],{},[315,101976,101977],{"align":304},"游戏运行到当前帧的状态",[315,101979,101980],{"align":304},[46,101981,101943],{},[299,101983,101984,101987],{},[315,101985,101986],{"align":304},"前进一帧",[315,101988,101989],{"align":304},[46,101990,101909],{},[14,101992,101994],{"id":101993},"_2环境与依赖安装","2.环境与依赖安装",[19,101996,101997],{},"Fedora 44 系统依赖:",[39,101999,102001],{"className":25070,"code":102000,"language":25072,"meta":44,"style":44},"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",[46,102002,102003,102015,102028,102041,102051,102061,102080],{"__ignoreMap":44},[49,102004,102005,102007,102009,102011,102013],{"class":51,"line":52},[49,102006,25825],{"class":62},[49,102008,27564],{"class":1505},[49,102010,25082],{"class":1505},[49,102012,27649],{"class":73},[49,102014,25927],{"class":73},[49,102016,102017,102020,102023,102026],{"class":51,"line":59},[49,102018,102019],{"class":1505},"  python3",[49,102021,102022],{"class":1505}," python3-pip",[49,102024,102025],{"class":1505}," python3-virtualenv",[49,102027,25927],{"class":73},[49,102029,102030,102033,102036,102039],{"class":51,"line":70},[49,102031,102032],{"class":1505},"  mesa-libGL",[49,102034,102035],{"class":1505}," mesa-libGLU",[49,102037,102038],{"class":1505}," mesa-dri-drivers",[49,102040,25927],{"class":73},[49,102042,102043,102046,102049],{"class":51,"line":86},[49,102044,102045],{"class":1505},"  libglvnd-glx",[49,102047,102048],{"class":1505}," libglvnd-opengl",[49,102050,25927],{"class":73},[49,102052,102053,102056,102059],{"class":51,"line":98},[49,102054,102055],{"class":1505},"  glfw",[49,102057,102058],{"class":1505}," glfw-devel",[49,102060,25927],{"class":73},[49,102062,102063,102066,102069,102072,102075,102078],{"class":51,"line":121},[49,102064,102065],{"class":1505},"  libX11",[49,102067,102068],{"class":1505}," libXcursor",[49,102070,102071],{"class":1505}," libXi",[49,102073,102074],{"class":1505}," libXinerama",[49,102076,102077],{"class":1505}," libXrandr",[49,102079,25927],{"class":73},[49,102081,102082,102085,102088],{"class":51,"line":134},[49,102083,102084],{"class":1505},"  gcc",[49,102086,102087],{"class":1505}," gcc-c++",[49,102089,102090],{"class":1505}," make\n",[19,102092,102093],{},"创建 Python 环境:",[39,102095,102097],{"className":25070,"code":102096,"language":25072,"meta":44,"style":44},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[46,102098,102099,102113,102121],{"__ignoreMap":44},[49,102100,102101,102104,102107,102110],{"class":51,"line":52},[49,102102,102103],{"class":62},"python3",[49,102105,102106],{"class":73}," -m",[49,102108,102109],{"class":1505}," venv",[49,102111,102112],{"class":1505}," .venv\n",[49,102114,102115,102118],{"class":51,"line":59},[49,102116,102117],{"class":73},"source",[49,102119,102120],{"class":1505}," .venv\u002Fbin\u002Factivate\n",[49,102122,102123,102125,102127,102130,102132,102135],{"class":51,"line":70},[49,102124,31628],{"class":62},[49,102126,102106],{"class":73},[49,102128,102129],{"class":1505}," pip",[49,102131,25082],{"class":1505},[49,102133,102134],{"class":73}," --upgrade",[49,102136,102137],{"class":1505}," pip\n",[19,102139,102140],{},"pip 安装:",[39,102142,102144],{"className":25070,"code":102143,"language":25072,"meta":44,"style":44},"pip install \"mujoco>=2.3\" numpy\n",[46,102145,102146],{"__ignoreMap":44},[49,102147,102148,102150,102152,102155],{"class":51,"line":52},[49,102149,25079],{"class":62},[49,102151,25082],{"class":1505},[49,102153,102154],{"class":1505}," \"mujoco>=2.3\"",[49,102156,102157],{"class":1505}," numpy\n",[19,102159,102160],{},"安装完成后，先做最小检查：",[39,102162,102164],{"className":25070,"code":102163,"language":25072,"meta":44,"style":44},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[46,102165,102166],{"__ignoreMap":44},[49,102167,102168,102170,102172],{"class":51,"line":52},[49,102169,31628],{"class":62},[49,102171,31606],{"class":73},[49,102173,102174],{"class":1505}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102176,102177],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102179,102180],{},"conda 安装:",[39,102182,102184],{"className":25070,"code":102183,"language":25072,"meta":44,"style":44},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[46,102185,102186,102206,102216],{"__ignoreMap":44},[49,102187,102188,102190,102192,102194,102197,102200,102203],{"class":51,"line":52},[49,102189,31578],{"class":62},[49,102191,30424],{"class":1505},[49,102193,26364],{"class":73},[49,102195,102196],{"class":1505}," mujoco-study",[49,102198,102199],{"class":1505}," python=",[49,102201,102202],{"class":73},"3.10",[49,102204,102205],{"class":73}," -y\n",[49,102207,102208,102210,102213],{"class":51,"line":59},[49,102209,31578],{"class":62},[49,102211,102212],{"class":1505}," activate",[49,102214,102215],{"class":1505}," mujoco-study\n",[49,102217,102218,102220,102222,102224],{"class":51,"line":70},[49,102219,25079],{"class":62},[49,102221,25082],{"class":1505},[49,102223,102154],{"class":1505},[49,102225,102157],{"class":1505},[19,102227,102228],{},"版本冲突说明:",[591,102230,102231,102237,102247,102256],{},[26,102232,102233,102234,29633],{},"不要安装 ",[46,102235,102236],{},"mujoco-py",[26,102238,102239,102240,102242,102243,102246],{},"如果旧项目里同时安装了 ",[46,102241,102236],{}," 和 ",[46,102244,102245],{},"mujoco","，建议新建干净虚拟环境。",[26,102248,102249,102252,102253,29633],{},[46,102250,102251],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[46,102254,102255],{},"~\u002F.mujoco\u002Fmujoco210",[26,102257,102258,102259,83765,102262,102265],{},"离屏渲染可能涉及 OpenGL 后端，",[46,102260,102261],{},"MUJOCO_GL=egl",[46,102263,102264],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102267,102269],{"id":102268},"_3核心概念解释","3.核心概念解释",[19,102271,102272],{},"MuJoCo 的基本执行流程:",[39,102274,102277],{"className":102275,"code":102276,"language":267,"meta":44},[1094],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[46,102278,102276],{"__ignoreMap":44},[19,102280,102281,102283],{},[46,102282,101933],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102285,102286,102288,102289,1605,102292,1605,102295,1605,102298,1605,102301,29633],{},[46,102287,101943],{}," 存放仿真运行时状态，例如 ",[46,102290,102291],{},"data.time",[46,102293,102294],{},"data.qpos",[46,102296,102297],{},"data.qvel",[46,102299,102300],{},"data.ctrl",[46,102302,102303],{},"data.xpos",[183,102305,102307],{"id":102306},"xml-是什么","XML 是什么",[19,102309,102310],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[39,102312,102314],{"className":54309,"code":102313,"language":54311,"meta":44,"style":44},"\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",[46,102315,102316,102338,102369],{"__ignoreMap":44},[49,102317,102318,102320,102322,102324,102326,102328,102331,102333,102336],{"class":51,"line":52},[49,102319,2300],{"class":66},[49,102321,53042],{"class":147},[49,102323,16171],{"class":62},[49,102325,1448],{"class":66},[49,102327,54733],{"class":1505},[49,102329,102330],{"class":62}," pos",[49,102332,1448],{"class":66},[49,102334,102335],{"class":1505},"\"0 0 1\"",[49,102337,52554],{"class":66},[49,102339,102340,102342,102345,102347,102349,102352,102354,102356,102358,102361,102363,102366],{"class":51,"line":59},[49,102341,53386],{"class":66},[49,102343,102344],{"class":147},"geom",[49,102346,16171],{"class":62},[49,102348,1448],{"class":66},[49,102350,102351],{"class":1505},"\"box_geom\"",[49,102353,55065],{"class":62},[49,102355,1448],{"class":66},[49,102357,54733],{"class":1505},[49,102359,102360],{"class":62}," size",[49,102362,1448],{"class":66},[49,102364,102365],{"class":1505},"\"0.1 0.1 0.1\"",[49,102367,102368],{"class":66},"\u002F>\n",[49,102370,102371,102373,102375],{"class":51,"line":70},[49,102372,53027],{"class":66},[49,102374,53042],{"class":147},[49,102376,52554],{"class":66},[19,102378,102379],{},"这段意思是：",[591,102381,102382,102388,102395],{},[26,102383,102384,102385,102387],{},"创建一个叫 ",[46,102386,54956],{}," 的刚体。",[26,102389,102390,102391,102394],{},"它初始放在 ",[46,102392,102393],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[26,102396,102397],{},"它里面有一个盒子形状的几何体。",[183,102399,102401],{"id":102400},"timestep-是什么","timestep 是什么",[19,102403,102404],{},"XML 里的：",[39,102406,102408],{"className":54309,"code":102407,"language":54311,"meta":44,"style":44},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[46,102409,102410],{"__ignoreMap":44},[49,102411,102412,102414,102416,102419,102421,102424,102427,102429,102432],{"class":51,"line":52},[49,102413,2300],{"class":66},[49,102415,70401],{"class":147},[49,102417,102418],{"class":62}," timestep",[49,102420,1448],{"class":66},[49,102422,102423],{"class":1505},"\"0.01\"",[49,102425,102426],{"class":62}," gravity",[49,102428,1448],{"class":66},[49,102430,102431],{"class":1505},"\"0 0 -9.81\"",[49,102433,102368],{"class":66},[19,102435,102436,102437,102440,102441,102443],{},"表示每调用一次 ",[46,102438,102439],{},"mj_step","，仿真时间前进 ",[46,102442,40234],{}," 秒。循环 100 次，大约就是 1 秒：",[39,102445,102448],{"className":102446,"code":102447,"language":267,"meta":44},[1094],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[46,102449,102447],{"__ignoreMap":44},[183,102451,102453],{"id":102452},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,102455,102456],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[39,102458,102461],{"className":102459,"code":102460,"language":267,"meta":44},[1094],"x y z qw qx qy qz\n",[46,102462,102460],{"__ignoreMap":44},[19,102464,102465,102466,102469,102470,102473],{},"表示一个自由刚体的位置和姿态。其中 ",[46,102467,102468],{},"x y z"," 是位置，",[46,102471,102472],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102475,102477],{"id":102476},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,102479,102480],{},"新建文件:",[39,102482,102484],{"className":25070,"code":102483,"language":25072,"meta":44,"style":44},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[46,102485,102486,102496,102503],{"__ignoreMap":44},[49,102487,102488,102491,102493],{"class":51,"line":52},[49,102489,102490],{"class":62},"mkdir",[49,102492,30464],{"class":73},[49,102494,102495],{"class":1505}," mujoco_tutorial\n",[49,102497,102498,102501],{"class":51,"line":59},[49,102499,102500],{"class":73},"cd",[49,102502,102495],{"class":1505},[49,102504,102505,102508],{"class":51,"line":70},[49,102506,102507],{"class":62},"touch",[49,102509,102510],{"class":1505}," ch1_first_sim.py\n",[19,102512,102513],{},"写入:",[39,102515,102517],{"className":31626,"code":102516,"language":31628,"meta":44,"style":44},"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",[46,102518,102519,102526,102530,102534,102544,102549,102554,102558,102563,102568,102572,102577,102582,102587,102592,102597,102602,102606,102610,102614,102627,102641,102651,102655,102667,102679,102691,102703,102715,102719,102736,102741,102745,102756,102767,102771,102775,102789],{"__ignoreMap":44},[49,102520,102521,102523],{"class":51,"line":52},[49,102522,31640],{"class":109},[49,102524,102525],{"class":66}," mujoco\n",[49,102527,102528],{"class":51,"line":59},[49,102529,3654],{"emptyLinePlaceholder":1330},[49,102531,102532],{"class":51,"line":70},[49,102533,3654],{"emptyLinePlaceholder":1330},[49,102535,102536,102539,102541],{"class":51,"line":86},[49,102537,102538],{"class":73},"XML",[49,102540,14816],{"class":109},[49,102542,102543],{"class":1505}," \"\"\"\n",[49,102545,102546],{"class":51,"line":98},[49,102547,102548],{"class":1505},"\u003Cmujoco model=\"first_sim\">\n",[49,102550,102551],{"class":51,"line":121},[49,102552,102553],{"class":1505},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[49,102555,102556],{"class":51,"line":134},[49,102557,3654],{"emptyLinePlaceholder":1330},[49,102559,102560],{"class":51,"line":1085},[49,102561,102562],{"class":1505},"  \u003Cworldbody>\n",[49,102564,102565],{"class":51,"line":2574},[49,102566,102567],{"class":1505},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[49,102569,102570],{"class":51,"line":2586},[49,102571,3654],{"emptyLinePlaceholder":1330},[49,102573,102574],{"class":51,"line":2867},[49,102575,102576],{"class":1505},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[49,102578,102579],{"class":51,"line":2872},[49,102580,102581],{"class":1505},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[49,102583,102584],{"class":51,"line":2878},[49,102585,102586],{"class":1505},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[49,102588,102589],{"class":51,"line":2883},[49,102590,102591],{"class":1505},"    \u003C\u002Fbody>\n",[49,102593,102594],{"class":51,"line":2897},[49,102595,102596],{"class":1505},"  \u003C\u002Fworldbody>\n",[49,102598,102599],{"class":51,"line":2902},[49,102600,102601],{"class":1505},"\u003C\u002Fmujoco>\n",[49,102603,102604],{"class":51,"line":2908},[49,102605,96923],{"class":1505},[49,102607,102608],{"class":51,"line":2929},[49,102609,3654],{"emptyLinePlaceholder":1330},[49,102611,102612],{"class":51,"line":2934},[49,102613,3654],{"emptyLinePlaceholder":1330},[49,102615,102616,102618,102620,102623,102625],{"class":51,"line":2948},[49,102617,33195],{"class":109},[49,102619,3227],{"class":62},[49,102621,102622],{"class":66},"() -> ",[49,102624,96911],{"class":73},[49,102626,4993],{"class":66},[49,102628,102629,102632,102634,102637,102639],{"class":51,"line":2953},[49,102630,102631],{"class":66},"    model ",[49,102633,1448],{"class":109},[49,102635,102636],{"class":66}," mujoco.MjModel.from_xml_string(",[49,102638,102538],{"class":73},[49,102640,1409],{"class":66},[49,102642,102643,102646,102648],{"class":51,"line":2982},[49,102644,102645],{"class":66},"    data ",[49,102647,1448],{"class":109},[49,102649,102650],{"class":66}," mujoco.MjData(model)\n",[49,102652,102653],{"class":51,"line":2987},[49,102654,3654],{"emptyLinePlaceholder":1330},[49,102656,102657,102659,102661,102664],{"class":51,"line":3004},[49,102658,32547],{"class":73},[49,102660,1403],{"class":66},[49,102662,102663],{"class":1505},"\"nq:\"",[49,102665,102666],{"class":66},", model.nq)\n",[49,102668,102669,102671,102673,102676],{"class":51,"line":3009},[49,102670,32547],{"class":73},[49,102672,1403],{"class":66},[49,102674,102675],{"class":1505},"\"nv:\"",[49,102677,102678],{"class":66},", model.nv)\n",[49,102680,102681,102683,102685,102688],{"class":51,"line":3014},[49,102682,32547],{"class":73},[49,102684,1403],{"class":66},[49,102686,102687],{"class":1505},"\"nu:\"",[49,102689,102690],{"class":66},", model.nu)\n",[49,102692,102693,102695,102697,102700],{"class":51,"line":3019},[49,102694,32547],{"class":73},[49,102696,1403],{"class":66},[49,102698,102699],{"class":1505},"\"initial time:\"",[49,102701,102702],{"class":66},", data.time)\n",[49,102704,102705,102707,102709,102712],{"class":51,"line":3033},[49,102706,32547],{"class":73},[49,102708,1403],{"class":66},[49,102710,102711],{"class":1505},"\"initial qpos:\"",[49,102713,102714],{"class":66},", data.qpos.copy())\n",[49,102716,102717],{"class":51,"line":3038},[49,102718,3654],{"emptyLinePlaceholder":1330},[49,102720,102721,102723,102726,102728,102730,102732,102734],{"class":51,"line":3831},[49,102722,4455],{"class":109},[49,102724,102725],{"class":66}," _ ",[49,102727,27292],{"class":109},[49,102729,33691],{"class":73},[49,102731,1403],{"class":66},[49,102733,1703],{"class":73},[49,102735,32034],{"class":66},[49,102737,102738],{"class":51,"line":3845},[49,102739,102740],{"class":66},"        mujoco.mj_step(model, data)\n",[49,102742,102743],{"class":51,"line":3853},[49,102744,3654],{"emptyLinePlaceholder":1330},[49,102746,102747,102749,102751,102754],{"class":51,"line":3858},[49,102748,32547],{"class":73},[49,102750,1403],{"class":66},[49,102752,102753],{"class":1505},"\"final time:\"",[49,102755,102702],{"class":66},[49,102757,102758,102760,102762,102765],{"class":51,"line":3864},[49,102759,32547],{"class":73},[49,102761,1403],{"class":66},[49,102763,102764],{"class":1505},"\"final qpos:\"",[49,102766,102714],{"class":66},[49,102768,102769],{"class":51,"line":3870},[49,102770,3654],{"emptyLinePlaceholder":1330},[49,102772,102773],{"class":51,"line":3875},[49,102774,3654],{"emptyLinePlaceholder":1330},[49,102776,102777,102779,102781,102784,102787],{"class":51,"line":9200},[49,102778,2787],{"class":109},[49,102780,32468],{"class":73},[49,102782,102783],{"class":109}," ==",[49,102785,102786],{"class":1505}," \"__main__\"",[49,102788,4993],{"class":66},[49,102790,102791],{"class":51,"line":9224},[49,102792,102793],{"class":66},"    main()\n",[183,102795,102796],{"id":102796},"代码逐段解释",[19,102798,102799],{},"导入库：",[39,102801,102803],{"className":31626,"code":102802,"language":31628,"meta":44,"style":44},"import mujoco\n",[46,102804,102805],{"__ignoreMap":44},[49,102806,102807,102809],{"class":51,"line":52},[49,102808,31640],{"class":109},[49,102810,102525],{"class":66},[19,102812,102813],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,102815,102816],{},"定义 XML：",[39,102818,102820],{"className":31626,"code":102819,"language":31628,"meta":44,"style":44},"XML = \"\"\"\n...\n\"\"\"\n",[46,102821,102822,102830,102835],{"__ignoreMap":44},[49,102823,102824,102826,102828],{"class":51,"line":52},[49,102825,102538],{"class":73},[49,102827,14816],{"class":109},[49,102829,102543],{"class":1505},[49,102831,102832],{"class":51,"line":59},[49,102833,102834],{"class":1505},"...\n",[49,102836,102837],{"class":51,"line":70},[49,102838,96923],{"class":1505},[19,102840,102841,102842,102845],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[46,102843,102844],{},"freejoint"," 的方块。",[19,102847,102848],{},"编译模型：",[39,102850,102852],{"className":31626,"code":102851,"language":31628,"meta":44,"style":44},"model = mujoco.MjModel.from_xml_string(XML)\n",[46,102853,102854],{"__ignoreMap":44},[49,102855,102856,102859,102861,102863,102865],{"class":51,"line":52},[49,102857,102858],{"class":66},"model ",[49,102860,1448],{"class":109},[49,102862,102636],{"class":66},[49,102864,102538],{"class":73},[49,102866,1409],{"class":66},[19,102868,102869],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102871,102872],{},"创建数据：",[39,102874,102876],{"className":31626,"code":102875,"language":31628,"meta":44,"style":44},"data = mujoco.MjData(model)\n",[46,102877,102878],{"__ignoreMap":44},[49,102879,102880,102883,102885],{"class":51,"line":52},[49,102881,102882],{"class":66},"data ",[49,102884,1448],{"class":109},[49,102886,102650],{"class":66},[19,102888,102889,102891,102892,102894],{},[46,102890,34649],{}," 会保存仿真当前状态。刚创建时，时间是 ",[46,102893,80],{},"，方块还在初始位置。",[19,102896,102897],{},"推进仿真：",[39,102899,102901],{"className":31626,"code":102900,"language":31628,"meta":44,"style":44},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[46,102902,102903,102919],{"__ignoreMap":44},[49,102904,102905,102907,102909,102911,102913,102915,102917],{"class":51,"line":52},[49,102906,4279],{"class":109},[49,102908,102725],{"class":66},[49,102910,27292],{"class":109},[49,102912,33691],{"class":73},[49,102914,1403],{"class":66},[49,102916,1703],{"class":73},[49,102918,32034],{"class":66},[49,102920,102921],{"class":51,"line":59},[49,102922,102923],{"class":66},"    mujoco.mj_step(model, data)\n",[19,102925,102926,102927,102929],{},"每次 ",[46,102928,102439],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[183,102931,102932],{"id":102932},"代码逐行细讲",[19,102934,102935],{},"下面把完整代码按新手视角拆开讲。",[39,102937,102938],{"className":31626,"code":102802,"language":31628,"meta":44,"style":44},[46,102939,102940],{"__ignoreMap":44},[49,102941,102942,102944],{"class":51,"line":52},[49,102943,31640],{"class":109},[49,102945,102525],{"class":66},[19,102947,102948,102950,102951,1605,102953,1605,102955,29633],{},[46,102949,31640],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[46,102952,101899],{},[46,102954,101904],{},[46,102956,102957],{},"mujoco.mj_step",[39,102959,102960],{"className":31626,"code":102819,"language":31628,"meta":44,"style":44},[46,102961,102962,102970,102974],{"__ignoreMap":44},[49,102963,102964,102966,102968],{"class":51,"line":52},[49,102965,102538],{"class":73},[49,102967,14816],{"class":109},[49,102969,102543],{"class":1505},[49,102971,102972],{"class":51,"line":59},[49,102973,102834],{"class":1505},[49,102975,102976],{"class":51,"line":70},[49,102977,96923],{"class":1505},[19,102979,102980,102982,102983,102986],{},[46,102981,102538],{}," 是一个变量名。右边的三引号 ",[46,102984,102985],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[39,102988,102989],{"className":54309,"code":102548,"language":54311,"meta":44,"style":44},[46,102990,102991],{"__ignoreMap":44},[49,102992,102993,102995,102997,103000,103002,103005],{"class":51,"line":52},[49,102994,2300],{"class":66},[49,102996,102245],{"class":147},[49,102998,102999],{"class":62}," model",[49,103001,1448],{"class":66},[49,103003,103004],{"class":1505},"\"first_sim\"",[49,103006,52554],{"class":66},[19,103008,103009,103010,103013,103014,29633],{},"这是 XML 的根标签。",[46,103011,103012],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[46,103015,103016],{},"first_sim",[39,103018,103019],{"className":54309,"code":102407,"language":54311,"meta":44,"style":44},[46,103020,103021],{"__ignoreMap":44},[49,103022,103023,103025,103027,103029,103031,103033,103035,103037,103039],{"class":51,"line":52},[49,103024,2300],{"class":66},[49,103026,70401],{"class":147},[49,103028,102418],{"class":62},[49,103030,1448],{"class":66},[49,103032,102423],{"class":1505},[49,103034,102426],{"class":62},[49,103036,1448],{"class":66},[49,103038,102431],{"class":1505},[49,103040,102368],{"class":66},[19,103042,103043,103045,103046,103049,103050,103053],{},[46,103044,70401],{}," 用来设置仿真参数。",[46,103047,103048],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[46,103051,103052],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[39,103055,103057],{"className":54309,"code":103056,"language":54311,"meta":44,"style":44},"\u003Cworldbody>\n",[46,103058,103059],{"__ignoreMap":44},[49,103060,103061,103063,103066],{"class":51,"line":52},[49,103062,2300],{"class":66},[49,103064,103065],{"class":147},"worldbody",[49,103067,52554],{"class":66},[19,103069,103070,103072],{},[46,103071,103065],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[39,103074,103076],{"className":54309,"code":103075,"language":54311,"meta":44,"style":44},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[46,103077,103078],{"__ignoreMap":44},[49,103079,103080,103082,103084,103086,103088,103091,103093,103095,103098,103100,103102,103105,103107,103109,103112],{"class":51,"line":52},[49,103081,2300],{"class":66},[49,103083,102344],{"class":147},[49,103085,16171],{"class":62},[49,103087,1448],{"class":66},[49,103089,103090],{"class":1505},"\"floor\"",[49,103092,55065],{"class":62},[49,103094,1448],{"class":66},[49,103096,103097],{"class":1505},"\"plane\"",[49,103099,102360],{"class":62},[49,103101,1448],{"class":66},[49,103103,103104],{"class":1505},"\"2 2 0.1\"",[49,103106,79994],{"class":62},[49,103108,1448],{"class":66},[49,103110,103111],{"class":1505},"\"0.8 0.8 0.8 1\"",[49,103113,102368],{"class":66},[19,103115,103116,103117,103119,103120,103123,103124,103127,103128,103130],{},"这行创建地面。",[46,103118,102344],{}," 是几何体。",[46,103121,103122],{},"name=\"floor\""," 是名字。",[46,103125,103126],{},"type=\"plane\""," 表示平面。",[46,103129,56349],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[39,103132,103134],{"className":54309,"code":103133,"language":54311,"meta":44,"style":44},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[46,103135,103136],{"__ignoreMap":44},[49,103137,103138,103140,103142,103144,103146,103148,103150,103152,103154],{"class":51,"line":52},[49,103139,2300],{"class":66},[49,103141,53042],{"class":147},[49,103143,16171],{"class":62},[49,103145,1448],{"class":66},[49,103147,54733],{"class":1505},[49,103149,102330],{"class":62},[49,103151,1448],{"class":66},[49,103153,102335],{"class":1505},[49,103155,52554],{"class":66},[19,103157,103158,103159,29633,103161,103164,103165,103167],{},"这行创建一个刚体，名字叫 ",[46,103160,54956],{},[46,103162,103163],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[46,103166,102393],{},"，也就是离地面 1 米高。",[39,103169,103171],{"className":54309,"code":103170,"language":54311,"meta":44,"style":44},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[46,103172,103173],{"__ignoreMap":44},[49,103174,103175,103177,103179,103181,103183,103186],{"class":51,"line":52},[49,103176,2300],{"class":66},[49,103178,102844],{"class":147},[49,103180,16171],{"class":62},[49,103182,1448],{"class":66},[49,103184,103185],{"class":1505},"\"box_free\"",[49,103187,102368],{"class":66},[19,103189,103190,103191,103193],{},"这行很重要。",[46,103192,102844],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[39,103195,103197],{"className":54309,"code":103196,"language":54311,"meta":44,"style":44},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[46,103198,103199],{"__ignoreMap":44},[49,103200,103201,103203,103205,103207,103209,103211,103213,103215,103217,103219,103221,103223,103226,103228,103230,103232,103234,103237],{"class":51,"line":52},[49,103202,2300],{"class":66},[49,103204,102344],{"class":147},[49,103206,16171],{"class":62},[49,103208,1448],{"class":66},[49,103210,102351],{"class":1505},[49,103212,55065],{"class":62},[49,103214,1448],{"class":66},[49,103216,54733],{"class":1505},[49,103218,102360],{"class":62},[49,103220,1448],{"class":66},[49,103222,102365],{"class":1505},[49,103224,103225],{"class":62}," mass",[49,103227,1448],{"class":66},[49,103229,4932],{"class":1505},[49,103231,79994],{"class":62},[49,103233,1448],{"class":66},[49,103235,103236],{"class":1505},"\"1 0 0 1\"",[49,103238,102368],{"class":66},[19,103240,103241,103242,103245,103246,103249,103250,103253,103254,103257],{},"这行给 box body 添加一个盒子形状。",[46,103243,103244],{},"type=\"box\""," 表示形状是盒子。",[46,103247,103248],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[46,103251,103252],{},"mass=\"1\""," 表示质量是 1。",[46,103255,103256],{},"rgba=\"1 0 0 1\""," 表示红色。",[39,103259,103261],{"className":31626,"code":103260,"language":31628,"meta":44,"style":44},"def main() -> None:\n",[46,103262,103263],{"__ignoreMap":44},[49,103264,103265,103267,103269,103271,103273],{"class":51,"line":52},[49,103266,33195],{"class":109},[49,103268,3227],{"class":62},[49,103270,102622],{"class":66},[49,103272,96911],{"class":73},[49,103274,4993],{"class":66},[19,103276,103277,103279,103280,103283,103284,103287],{},[46,103278,33195],{}," 用来定义函数。这里定义了一个叫 ",[46,103281,103282],{},"main"," 的函数。",[46,103285,103286],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[39,103289,103290],{"className":31626,"code":102851,"language":31628,"meta":44,"style":44},[46,103291,103292],{"__ignoreMap":44},[49,103293,103294,103296,103298,103300,103302],{"class":51,"line":52},[49,103295,102858],{"class":66},[49,103297,1448],{"class":109},[49,103299,102636],{"class":66},[49,103301,102538],{"class":73},[49,103303,1409],{"class":66},[19,103305,103306,103307,103310],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[46,103308,103309],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[39,103312,103313],{"className":31626,"code":102875,"language":31628,"meta":44,"style":44},[46,103314,103315],{"__ignoreMap":44},[49,103316,103317,103319,103321],{"class":51,"line":52},[49,103318,102882],{"class":66},[49,103320,1448],{"class":109},[49,103322,102650],{"class":66},[19,103324,103325,103326,103328,103329,103331],{},"这行创建仿真数据。",[46,103327,34649],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[46,103330,34649],{}," 都会变化。",[39,103333,103335],{"className":31626,"code":103334,"language":31628,"meta":44,"style":44},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[46,103336,103337,103347,103357],{"__ignoreMap":44},[49,103338,103339,103341,103343,103345],{"class":51,"line":52},[49,103340,31663],{"class":73},[49,103342,1403],{"class":66},[49,103344,102663],{"class":1505},[49,103346,102666],{"class":66},[49,103348,103349,103351,103353,103355],{"class":51,"line":59},[49,103350,31663],{"class":73},[49,103352,1403],{"class":66},[49,103354,102675],{"class":1505},[49,103356,102678],{"class":66},[49,103358,103359,103361,103363,103365],{"class":51,"line":70},[49,103360,31663],{"class":73},[49,103362,1403],{"class":66},[49,103364,102687],{"class":1505},[49,103366,102690],{"class":66},[19,103368,103369,103371,103372,103375,103376,103379,103380,103383,103384,103387],{},[46,103370,31663],{}," 用来输出信息。",[46,103373,103374],{},"model.nq"," 是位置变量数量，",[46,103377,103378],{},"model.nv"," 是速度变量数量，",[46,103381,103382],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[46,103385,103386],{},"nu"," 是 0。",[39,103389,103391],{"className":31626,"code":103390,"language":31628,"meta":44,"style":44},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[46,103392,103393,103403],{"__ignoreMap":44},[49,103394,103395,103397,103399,103401],{"class":51,"line":52},[49,103396,31663],{"class":73},[49,103398,1403],{"class":66},[49,103400,102699],{"class":1505},[49,103402,102702],{"class":66},[49,103404,103405,103407,103409,103411],{"class":51,"line":59},[49,103406,31663],{"class":73},[49,103408,1403],{"class":66},[49,103410,102711],{"class":1505},[49,103412,102714],{"class":66},[19,103414,103415,103416,103418,103419,103421,103422,103425],{},"这里打印初始时间和初始位置。",[46,103417,102291],{}," 一开始是 0。",[46,103420,102294],{}," 是位置数组。",[46,103423,103424],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[39,103427,103428],{"className":31626,"code":102900,"language":31628,"meta":44,"style":44},[46,103429,103430,103446],{"__ignoreMap":44},[49,103431,103432,103434,103436,103438,103440,103442,103444],{"class":51,"line":52},[49,103433,4279],{"class":109},[49,103435,102725],{"class":66},[49,103437,27292],{"class":109},[49,103439,33691],{"class":73},[49,103441,1403],{"class":66},[49,103443,1703],{"class":73},[49,103445,32034],{"class":66},[49,103447,103448],{"class":51,"line":59},[49,103449,102923],{"class":66},[19,103451,103452,103454,103455,103458,103459,103461,103462,103464],{},[46,103453,4279],{}," 是循环。",[46,103456,103457],{},"range(100)"," 表示循环 100 次。",[46,103460,2381],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[46,103463,102439],{},"，仿真就前进一步。",[39,103466,103468],{"className":31626,"code":103467,"language":31628,"meta":44,"style":44},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[46,103469,103470,103480],{"__ignoreMap":44},[49,103471,103472,103474,103476,103478],{"class":51,"line":52},[49,103473,31663],{"class":73},[49,103475,1403],{"class":66},[49,103477,102753],{"class":1505},[49,103479,102702],{"class":66},[49,103481,103482,103484,103486,103488],{"class":51,"line":59},[49,103483,31663],{"class":73},[49,103485,1403],{"class":66},[49,103487,102764],{"class":1505},[49,103489,102714],{"class":66},[19,103491,103492],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[39,103494,103496],{"className":31626,"code":103495,"language":31628,"meta":44,"style":44},"if __name__ == \"__main__\":\n    main()\n",[46,103497,103498,103510],{"__ignoreMap":44},[49,103499,103500,103502,103504,103506,103508],{"class":51,"line":52},[49,103501,2787],{"class":109},[49,103503,32468],{"class":73},[49,103505,102783],{"class":109},[49,103507,102786],{"class":1505},[49,103509,4993],{"class":66},[49,103511,103512],{"class":51,"line":59},[49,103513,102793],{"class":66},[19,103515,103516,103517,103520,103521,29633],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[46,103518,103519],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[46,103522,103519],{},[19,103524,103525],{},"运行:",[39,103527,103529],{"className":25070,"code":103528,"language":25072,"meta":44,"style":44},"python ch1_first_sim.py\n",[46,103530,103531],{"__ignoreMap":44},[49,103532,103533,103535],{"class":51,"line":52},[49,103534,31628],{"class":62},[49,103536,102510],{"class":1505},[14,103538,103540],{"id":103539},"_5运行结果说明","5.运行结果说明",[19,103542,103543],{},"你应该看到类似输出:",[39,103545,103548],{"className":103546,"code":103547,"language":267,"meta":44},[1094],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[46,103549,103547],{"__ignoreMap":44},[19,103551,103552,103554,103555,103558,103559,29633],{},[46,103553,102844],{}," 有 7 个位置变量: ",[46,103556,103557],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[46,103560,103561],{},"vx vy vz wx wy wz",[19,103563,103564,103565,103568],{},"你还会看到 ",[46,103566,103567],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103570,103572],{"id":103571},"_6验证步骤","6.验证步骤",[19,103574,103575],{},"确认版本:",[39,103577,103578],{"className":25070,"code":102163,"language":25072,"meta":44,"style":44},[46,103579,103580],{"__ignoreMap":44},[49,103581,103582,103584,103586],{"class":51,"line":52},[49,103583,31628],{"class":62},[49,103585,31606],{"class":73},[49,103587,102174],{"class":1505},[19,103589,103590],{},"确认导入的是官方 bindings:",[39,103592,103594],{"className":25070,"code":103593,"language":25072,"meta":44,"style":44},"python -c \"import mujoco; print(mujoco)\"\n",[46,103595,103596],{"__ignoreMap":44},[49,103597,103598,103600,103602],{"class":51,"line":52},[49,103599,31628],{"class":62},[49,103601,31606],{"class":73},[49,103603,103604],{"class":1505}," \"import mujoco; print(mujoco)\"\n",[19,103606,103607],{},"运行程序:",[39,103609,103610],{"className":25070,"code":103528,"language":25072,"meta":44,"style":44},[46,103611,103612],{"__ignoreMap":44},[49,103613,103614,103616],{"class":51,"line":52},[49,103615,31628],{"class":62},[49,103617,102510],{"class":1505},[19,103619,103620,103621,103624,103625,29633],{},"检查 ",[46,103622,103623],{},"final time"," 是否约等于 ",[46,103626,103627],{},"1.0",[19,103629,103630],{},"再做几个小实验：",[591,103632,103633,103643,103651,103664],{},[26,103634,103635,103636,103638,103639,103642],{},"把 ",[46,103637,103163],{}," 改成 ",[46,103640,103641],{},"pos=\"0 0 2\"","，观察初始高度变化。",[26,103644,103635,103645,103638,103647,103650],{},[46,103646,103052],{},[46,103648,103649],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[26,103652,103635,103653,103638,103655,103658,103659,103661,103662,29633],{},[46,103654,103048],{},[46,103656,103657],{},"timestep=\"0.005\"","，观察 100 步后的 ",[46,103660,103623],{}," 是否变成约 ",[46,103663,36577],{},[26,103665,103666,103667,103670],{},"删除 ",[46,103668,103669],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,103672,103673],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103675,103677],{"id":103676},"_7常见错误与解决方案","7.常见错误与解决方案",[183,103679,103681],{"id":103680},"modulenotfounderror-no-module-named-mujoco",[46,103682,103683],{},"ModuleNotFoundError: No module named 'mujoco'",[19,103685,103686],{},"解决:",[39,103688,103690],{"className":25070,"code":103689,"language":25072,"meta":44,"style":44},"pip install \"mujoco>=2.3\"\n",[46,103691,103692],{"__ignoreMap":44},[49,103693,103694,103696,103698],{"class":51,"line":52},[49,103695,25079],{"class":62},[49,103697,25082],{"class":1505},[49,103699,103700],{"class":1505}," \"mujoco>=2.3\"\n",[183,103702,103704],{"id":103703},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103706,103707],{},"先安装系统依赖:",[39,103709,103711],{"className":25070,"code":103710,"language":25072,"meta":44,"style":44},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[46,103712,103713],{"__ignoreMap":44},[49,103714,103715,103717,103719,103721,103723,103726,103728,103731,103733,103736,103738],{"class":51,"line":52},[49,103716,25825],{"class":62},[49,103718,27564],{"class":1505},[49,103720,25082],{"class":1505},[49,103722,27649],{"class":73},[49,103724,103725],{"class":1505}," mesa-libGL",[49,103727,102038],{"class":1505},[49,103729,103730],{"class":1505}," glfw",[49,103732,102058],{"class":1505},[49,103734,103735],{"class":1505}," libX11",[49,103737,102071],{"class":1505},[49,103739,103740],{"class":1505}," libXrandr\n",[183,103742,103744],{"id":103743},"xml-解析失败","XML 解析失败",[19,103746,103747],{},"检查:",[591,103749,103750,103753,103756,103762],{},[26,103751,103752],{},"标签是否闭合",[26,103754,103755],{},"属性是否带引号",[26,103757,103758,103759],{},"根节点是否是 ",[46,103760,103761],{},"\u003Cmujoco>",[26,103763,103764,103766,103767,103770],{},[46,103765,53042],{}," 是否放在 ",[46,103768,103769],{},"\u003Cworldbody>"," 内部",[183,103772,103774,103776,103777],{"id":103773},"final-time-不是严格等于-10",[46,103775,103623],{}," 不是严格等于 ",[46,103778,103627],{},[19,103780,103781],{},"这通常不是错误。浮点数计算可能得到：",[39,103783,103786],{"className":103784,"code":103785,"language":267,"meta":44},[1094],"1.0000000000000007\n",[46,103787,103785],{"__ignoreMap":44},[19,103789,103790,103791,103793],{},"只要接近 ",[46,103792,103627],{}," 就正常。",[183,103795,103796],{"id":103796},"方块没有掉下来",[19,103798,103799],{},"检查：",[591,103801,103802,103808,103814,103819],{},[26,103803,103804,103805],{},"方块 body 里是否有 ",[46,103806,103807],{},"\u003Cfreejoint\u002F>",[26,103809,103810,103811],{},"重力是否是 ",[46,103812,103813],{},"0 0 -9.81",[26,103815,103816,103817],{},"是否真的调用了 ",[46,103818,101909],{},[26,103820,103821,103822,103824,103825],{},"你看的是否是 ",[46,103823,103567],{},"，不是 ",[46,103826,103827],{},"initial qpos",[14,103829,103831],{"id":103830},"_8本章小结","8.本章小结",[19,103833,103834],{},"本章你已经完成了 MuJoCo 的最小闭环：",[39,103836,103839],{"className":103837,"code":103838,"language":267,"meta":44},[1094],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[46,103840,103838],{"__ignoreMap":44},[19,103842,103843],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1305,103845,103846],{},"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":44,"searchDepth":59,"depth":59,"links":103848},[103849,103850,103851,103856,103860,103861,103862,103870],{"id":101870,"depth":59,"text":101871},{"id":101993,"depth":59,"text":101994},{"id":102268,"depth":59,"text":102269,"children":103852},[103853,103854,103855],{"id":102306,"depth":70,"text":102307},{"id":102400,"depth":70,"text":102401},{"id":102452,"depth":70,"text":102453},{"id":102476,"depth":59,"text":102477,"children":103857},[103858,103859],{"id":102796,"depth":70,"text":102796},{"id":102932,"depth":70,"text":102932},{"id":103539,"depth":59,"text":103540},{"id":103571,"depth":59,"text":103572},{"id":103676,"depth":59,"text":103677,"children":103863},[103864,103865,103866,103867,103869],{"id":103680,"depth":70,"text":103683},{"id":103703,"depth":70,"text":103704},{"id":103743,"depth":70,"text":103744},{"id":103773,"depth":70,"text":103868},"final time 不是严格等于 1.0",{"id":103796,"depth":70,"text":103796},{"id":103830,"depth":59,"text":103831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101862,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103877,"title":103878,"body":103879,"description":44,"extension":1328,"meta":105535,"navigation":1330,"path":105536,"seo":105537,"stem":105538,"__hash__":105539},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103880,"toc":105511},[103881,103884,103886,103889,103892,103909,104004,104007,104013,104015,104017,104041,104044,104058,104061,104102,104104,104117,104119,104122,104170,104182,104185,104188,104194,104207,104274,104277,104296,104299,104302,104308,104310,104319,104322,104326,104335,104417,104426,104430,104436,104450,104460,104462,104792,104795,104807,104809,104820,104822,104825,104843,104846,104849,104867,104878,104881,104896,104906,104908,104929,104946,104966,104972,105012,105028,105044,105050,105053,105077,105093,105098,105128,105145,105170,105173,105188,105197,105212,105221,105236,105243,105245,105255,105268,105275,105278,105317,105324,105326,105378,105380,105386,105389,105396,105403,105406,105408,105426,105429,105432,105466,105478,105480,105483,105505,105508],[10,103882,103878],{"id":103883},"_2xml-与-mjcf-物理建模基础",[14,103885,101871],{"id":101870},[19,103887,103888],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103890,103891],{},"本章结束后，你应该能看懂一个简单模型里：",[591,103893,103894,103897,103900,103903,103906],{},[26,103895,103896],{},"地面在哪里。",[26,103898,103899],{},"物体初始位置在哪里。",[26,103901,103902],{},"几何体是什么形状。",[26,103904,103905],{},"哪些 body 可以自由运动。",[26,103907,103908],{},"如何用名字在 Python 里找到 XML 中的对象。",[293,103910,103911,103921],{},[296,103912,103913],{},[299,103914,103915,103918],{},[302,103916,103917],{"align":304},"标签",[302,103919,103920],{"align":304},"作用",[310,103922,103923,103932,103942,103951,103961,103971,103984,103994],{},[299,103924,103925,103929],{},[315,103926,103927],{"align":304},[46,103928,103761],{},[315,103930,103931],{"align":304},"根节点",[299,103933,103934,103939],{},[315,103935,103936],{"align":304},[46,103937,103938],{},"\u003Coption>",[315,103940,103941],{"align":304},"仿真参数",[299,103943,103944,103948],{},[315,103945,103946],{"align":304},[46,103947,103769],{},[315,103949,103950],{"align":304},"世界中的物体",[299,103952,103953,103958],{},[315,103954,103955],{"align":304},[46,103956,103957],{},"\u003Cbody>",[315,103959,103960],{"align":304},"刚体",[299,103962,103963,103968],{},[315,103964,103965],{"align":304},[46,103966,103967],{},"\u003Cgeom>",[315,103969,103970],{"align":304},"几何体、碰撞体、可视体",[299,103972,103973,103981],{},[315,103974,103975,26227,103978],{"align":304},[46,103976,103977],{},"\u003Cjoint>",[46,103979,103980],{},"\u003Cfreejoint>",[315,103982,103983],{"align":304},"关节",[299,103985,103986,103991],{},[315,103987,103988],{"align":304},[46,103989,103990],{},"\u003Csite>",[315,103992,103993],{"align":304},"标记点",[299,103995,103996,104001],{},[315,103997,103998],{"align":304},[46,103999,104000],{},"\u003Cactuator>",[315,104002,104003],{"align":304},"控制器",[19,104005,104006],{},"初学时可以先记住：",[39,104008,104011],{"className":104009,"code":104010,"language":267,"meta":44},[1094],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[46,104012,104010],{"__ignoreMap":44},[14,104014,101994],{"id":101993},[19,104016,101997],{},[39,104018,104020],{"className":25070,"code":104019,"language":25072,"meta":44,"style":44},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[46,104021,104022],{"__ignoreMap":44},[49,104023,104024,104026,104028,104030,104032,104034,104036,104038],{"class":51,"line":52},[49,104025,25825],{"class":62},[49,104027,27564],{"class":1505},[49,104029,25082],{"class":1505},[49,104031,27649],{"class":73},[49,104033,103725],{"class":1505},[49,104035,102038],{"class":1505},[49,104037,103730],{"class":1505},[49,104039,104040],{"class":1505}," glfw-devel\n",[19,104042,104043],{},"pip:",[39,104045,104046],{"className":25070,"code":102143,"language":25072,"meta":44,"style":44},[46,104047,104048],{"__ignoreMap":44},[49,104049,104050,104052,104054,104056],{"class":51,"line":52},[49,104051,25079],{"class":62},[49,104053,25082],{"class":1505},[49,104055,102154],{"class":1505},[49,104057,102157],{"class":1505},[19,104059,104060],{},"conda:",[39,104062,104064],{"className":25070,"code":104063,"language":25072,"meta":44,"style":44},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[46,104065,104066,104083,104092],{"__ignoreMap":44},[49,104067,104068,104070,104072,104074,104077,104079,104081],{"class":51,"line":52},[49,104069,31578],{"class":62},[49,104071,30424],{"class":1505},[49,104073,26364],{"class":73},[49,104075,104076],{"class":1505}," mujoco-xml",[49,104078,102199],{"class":1505},[49,104080,102202],{"class":73},[49,104082,102205],{"class":73},[49,104084,104085,104087,104089],{"class":51,"line":59},[49,104086,31578],{"class":62},[49,104088,102212],{"class":1505},[49,104090,104091],{"class":1505}," mujoco-xml\n",[49,104093,104094,104096,104098,104100],{"class":51,"line":70},[49,104095,25079],{"class":62},[49,104097,25082],{"class":1505},[49,104099,102154],{"class":1505},[49,104101,102157],{"class":1505},[19,104103,102228],{},[591,104105,104106,104109,104114],{},[26,104107,104108],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[26,104110,104111,104112,29633],{},"本章使用基础标签，适用于 ",[46,104113,102251],{},[26,104115,104116],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104118,102269],{"id":102268},[19,104120,104121],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[39,104123,104125],{"className":54309,"code":104124,"language":54311,"meta":44,"style":44},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[46,104126,104127,104141,104149,104154,104162],{"__ignoreMap":44},[49,104128,104129,104131,104133,104135,104137,104139],{"class":51,"line":52},[49,104130,2300],{"class":66},[49,104132,102245],{"class":147},[49,104134,102999],{"class":62},[49,104136,1448],{"class":66},[49,104138,63915],{"class":1505},[49,104140,52554],{"class":66},[49,104142,104143,104145,104147],{"class":51,"line":59},[49,104144,53386],{"class":66},[49,104146,103065],{"class":147},[49,104148,52554],{"class":66},[49,104150,104151],{"class":51,"line":70},[49,104152,104153],{"class":66},"    ...\n",[49,104155,104156,104158,104160],{"class":51,"line":86},[49,104157,53659],{"class":66},[49,104159,103065],{"class":147},[49,104161,52554],{"class":66},[49,104163,104164,104166,104168],{"class":51,"line":98},[49,104165,53027],{"class":66},[49,104167,102245],{"class":147},[49,104169,52554],{"class":66},[19,104171,104172,104174,104175,104177,104178,104181],{},[46,104173,53042],{}," 表示刚体。",[46,104176,102344],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[46,104179,104180],{},"joint"," 表示刚体相对父刚体如何运动。",[183,104183,104184],{"id":104184},"层级结构非常重要",[19,104186,104187],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[39,104189,104192],{"className":104190,"code":104191,"language":267,"meta":44},[1094],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[46,104193,104191],{"__ignoreMap":44},[19,104195,104196,102242,104199,104202,104203,104206],{},[46,104197,104198],{},"red_box_geom",[46,104200,104201],{},"box_center"," 都属于 ",[46,104204,104205],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[39,104208,104210],{"className":54309,"code":104209,"language":54311,"meta":44,"style":44},"\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",[46,104211,104212,104232,104246,104266],{"__ignoreMap":44},[49,104213,104214,104216,104218,104220,104222,104224,104226,104228,104230],{"class":51,"line":52},[49,104215,2300],{"class":66},[49,104217,53042],{"class":147},[49,104219,16171],{"class":62},[49,104221,1448],{"class":66},[49,104223,54733],{"class":1505},[49,104225,102330],{"class":62},[49,104227,1448],{"class":66},[49,104229,102335],{"class":1505},[49,104231,52554],{"class":66},[49,104233,104234,104236,104238,104240,104242,104244],{"class":51,"line":59},[49,104235,53386],{"class":66},[49,104237,102844],{"class":147},[49,104239,16171],{"class":62},[49,104241,1448],{"class":66},[49,104243,103185],{"class":1505},[49,104245,102368],{"class":66},[49,104247,104248,104250,104252,104254,104256,104258,104260,104262,104264],{"class":51,"line":70},[49,104249,53386],{"class":66},[49,104251,102344],{"class":147},[49,104253,55065],{"class":62},[49,104255,1448],{"class":66},[49,104257,54733],{"class":1505},[49,104259,102360],{"class":62},[49,104261,1448],{"class":66},[49,104263,102365],{"class":1505},[49,104265,102368],{"class":66},[49,104267,104268,104270,104272],{"class":51,"line":86},[49,104269,53027],{"class":66},[49,104271,53042],{"class":147},[49,104273,52554],{"class":66},[19,104275,104276],{},"含义:",[591,104278,104279,104285,104290,104293],{},[26,104280,104281,104282,104284],{},"创建名为 ",[46,104283,54956],{}," 的刚体",[26,104286,104287,104288],{},"初始位置在世界坐标 ",[46,104289,102393],{},[26,104291,104292],{},"它有一个自由关节",[26,104294,104295],{},"它有一个盒子几何体",[183,104297,104298],{"id":104298},"坐标怎么理解",[19,104300,104301],{},"MuJoCo 默认使用三维坐标：",[39,104303,104306],{"className":104304,"code":104305,"language":267,"meta":44},[1094],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[46,104307,104305],{"__ignoreMap":44},[19,104309,551],{},[39,104311,104313],{"className":54309,"code":104312,"language":54311,"meta":44,"style":44},"pos=\"0 0 1\"\n",[46,104314,104315],{"__ignoreMap":44},[49,104316,104317],{"class":51,"line":52},[49,104318,104312],{"class":66},[19,104320,104321],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[183,104323,104325],{"id":104324},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104327,104328,104329,83756,104332,104334],{},"不同 ",[46,104330,104331],{},"type",[46,104333,32744],{}," 含义不同：",[293,104336,104337,104352],{},[296,104338,104339],{},[299,104340,104341,104345,104350],{},[302,104342,104343],{"align":304},[46,104344,104331],{},[302,104346,104347,104349],{"align":304},[46,104348,32744],{}," 示例",[302,104351,101924],{"align":304},[310,104353,104354,104368,104383,104402],{},[299,104355,104356,104360,104365],{},[315,104357,104358],{"align":304},[46,104359,54956],{},[315,104361,104362],{"align":304},[46,104363,104364],{},"size=\"0.1 0.2 0.3\"",[315,104366,104367],{"align":304},"x\u002Fy\u002Fz 半边长，不是完整长度",[299,104369,104370,104375,104380],{},[315,104371,104372],{"align":304},[46,104373,104374],{},"sphere",[315,104376,104377],{"align":304},[46,104378,104379],{},"size=\"0.1\"",[315,104381,104382],{"align":304},"球半径",[299,104384,104385,104390,104395],{},[315,104386,104387],{"align":304},[46,104388,104389],{},"capsule",[315,104391,104392],{"align":304},[46,104393,104394],{},"size=\"0.03\"",[315,104396,104397,104398,104401],{"align":304},"胶囊半径，长度常用 ",[46,104399,104400],{},"fromto"," 指定",[299,104403,104404,104409,104414],{},[315,104405,104406],{"align":304},[46,104407,104408],{},"plane",[315,104410,104411],{"align":304},[46,104412,104413],{},"size=\"3 3 0.1\"",[315,104415,104416],{"align":304},"可视平面大小，通常当地面",[19,104418,104419,104420,104422,104423,104425],{},"最容易踩坑的是 box：",[46,104421,103248],{}," 表示边长大约是 ",[46,104424,33285],{},"，因为 MuJoCo 用的是半边长。",[183,104427,104429],{"id":104428},"site-是什么","site 是什么",[19,104431,104432,104435],{},[46,104433,104434],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[591,104437,104438,104441,104444,104447],{},[26,104439,104440],{},"标记机械臂末端。",[26,104442,104443],{},"标记目标位置。",[26,104445,104446],{},"放传感器或相机参考点。",[26,104448,104449],{},"在 Python 中读取某个关键点的世界坐标。",[19,104451,104452,104453,102242,104456,104459],{},"在后面的 Reacher 任务中，",[46,104454,104455],{},"tip",[46,104457,104458],{},"target"," 就会用 site 表示。",[14,104461,102477],{"id":102476},[39,104463,104465],{"className":31626,"code":104464,"language":31628,"meta":44,"style":44},"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",[46,104466,104467,104473,104483,104487,104491,104499,104504,104508,104512,104516,104521,104525,104530,104535,104540,104545,104549,104553,104557,104561,104565,104569,104581,104593,104601,104605,104620,104635,104639,104652,104667,104680,104693,104697,104713,104717,104721,104732,104744,104756,104768,104772,104776,104788],{"__ignoreMap":44},[49,104468,104469,104471],{"class":51,"line":52},[49,104470,31640],{"class":109},[49,104472,102525],{"class":66},[49,104474,104475,104477,104479,104481],{"class":51,"line":59},[49,104476,31640],{"class":109},[49,104478,32628],{"class":66},[49,104480,32631],{"class":109},[49,104482,32634],{"class":66},[49,104484,104485],{"class":51,"line":70},[49,104486,3654],{"emptyLinePlaceholder":1330},[49,104488,104489],{"class":51,"line":86},[49,104490,3654],{"emptyLinePlaceholder":1330},[49,104492,104493,104495,104497],{"class":51,"line":98},[49,104494,102538],{"class":73},[49,104496,14816],{"class":109},[49,104498,102543],{"class":1505},[49,104500,104501],{"class":51,"line":121},[49,104502,104503],{"class":1505},"\u003Cmujoco model=\"xml_basic\">\n",[49,104505,104506],{"class":51,"line":134},[49,104507,102553],{"class":1505},[49,104509,104510],{"class":51,"line":1085},[49,104511,3654],{"emptyLinePlaceholder":1330},[49,104513,104514],{"class":51,"line":2574},[49,104515,102562],{"class":1505},[49,104517,104518],{"class":51,"line":2586},[49,104519,104520],{"class":1505},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[49,104522,104523],{"class":51,"line":2867},[49,104524,3654],{"emptyLinePlaceholder":1330},[49,104526,104527],{"class":51,"line":2872},[49,104528,104529],{"class":1505},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[49,104531,104532],{"class":51,"line":2878},[49,104533,104534],{"class":1505},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[49,104536,104537],{"class":51,"line":2883},[49,104538,104539],{"class":1505},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[49,104541,104542],{"class":51,"line":2897},[49,104543,104544],{"class":1505},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[49,104546,104547],{"class":51,"line":2902},[49,104548,102591],{"class":1505},[49,104550,104551],{"class":51,"line":2908},[49,104552,102596],{"class":1505},[49,104554,104555],{"class":51,"line":2929},[49,104556,102601],{"class":1505},[49,104558,104559],{"class":51,"line":2934},[49,104560,96923],{"class":1505},[49,104562,104563],{"class":51,"line":2948},[49,104564,3654],{"emptyLinePlaceholder":1330},[49,104566,104567],{"class":51,"line":2953},[49,104568,3654],{"emptyLinePlaceholder":1330},[49,104570,104571,104573,104575,104577,104579],{"class":51,"line":2982},[49,104572,33195],{"class":109},[49,104574,3227],{"class":62},[49,104576,102622],{"class":66},[49,104578,96911],{"class":73},[49,104580,4993],{"class":66},[49,104582,104583,104585,104587,104589,104591],{"class":51,"line":2987},[49,104584,102631],{"class":66},[49,104586,1448],{"class":109},[49,104588,102636],{"class":66},[49,104590,102538],{"class":73},[49,104592,1409],{"class":66},[49,104594,104595,104597,104599],{"class":51,"line":3004},[49,104596,102645],{"class":66},[49,104598,1448],{"class":109},[49,104600,102650],{"class":66},[49,104602,104603],{"class":51,"line":3009},[49,104604,3654],{"emptyLinePlaceholder":1330},[49,104606,104607,104610,104612,104615,104618],{"class":51,"line":3014},[49,104608,104609],{"class":66},"    box_body_id ",[49,104611,1448],{"class":109},[49,104613,104614],{"class":66}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[49,104616,104617],{"class":1505},"\"red_box\"",[49,104619,1409],{"class":66},[49,104621,104622,104625,104627,104630,104633],{"class":51,"line":3019},[49,104623,104624],{"class":66},"    site_id ",[49,104626,1448],{"class":109},[49,104628,104629],{"class":66}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[49,104631,104632],{"class":1505},"\"box_center\"",[49,104634,1409],{"class":66},[49,104636,104637],{"class":51,"line":3033},[49,104638,3654],{"emptyLinePlaceholder":1330},[49,104640,104641,104643,104646,104648,104650],{"class":51,"line":3038},[49,104642,4355],{"class":109},[49,104644,104645],{"class":66}," box_body_id ",[49,104647,2300],{"class":109},[49,104649,5347],{"class":73},[49,104651,4993],{"class":66},[49,104653,104654,104657,104660,104662,104665],{"class":51,"line":3831},[49,104655,104656],{"class":109},"        raise",[49,104658,104659],{"class":73}," RuntimeError",[49,104661,1403],{"class":66},[49,104663,104664],{"class":1505},"\"body red_box not found\"",[49,104666,1409],{"class":66},[49,104668,104669,104671,104674,104676,104678],{"class":51,"line":3845},[49,104670,4355],{"class":109},[49,104672,104673],{"class":66}," site_id ",[49,104675,2300],{"class":109},[49,104677,5347],{"class":73},[49,104679,4993],{"class":66},[49,104681,104682,104684,104686,104688,104691],{"class":51,"line":3853},[49,104683,104656],{"class":109},[49,104685,104659],{"class":73},[49,104687,1403],{"class":66},[49,104689,104690],{"class":1505},"\"site box_center not found\"",[49,104692,1409],{"class":66},[49,104694,104695],{"class":51,"line":3858},[49,104696,3654],{"emptyLinePlaceholder":1330},[49,104698,104699,104701,104703,104705,104707,104709,104711],{"class":51,"line":3864},[49,104700,4455],{"class":109},[49,104702,102725],{"class":66},[49,104704,27292],{"class":109},[49,104706,33691],{"class":73},[49,104708,1403],{"class":66},[49,104710,2977],{"class":73},[49,104712,32034],{"class":66},[49,104714,104715],{"class":51,"line":3870},[49,104716,102740],{"class":66},[49,104718,104719],{"class":51,"line":3875},[49,104720,3654],{"emptyLinePlaceholder":1330},[49,104722,104723,104725,104727,104730],{"class":51,"line":9200},[49,104724,32547],{"class":73},[49,104726,1403],{"class":66},[49,104728,104729],{"class":1505},"\"simulation time:\"",[49,104731,102702],{"class":66},[49,104733,104734,104736,104738,104741],{"class":51,"line":9224},[49,104735,32547],{"class":73},[49,104737,1403],{"class":66},[49,104739,104740],{"class":1505},"\"box body position:\"",[49,104742,104743],{"class":66},", data.xpos[box_body_id].copy())\n",[49,104745,104746,104748,104750,104753],{"class":51,"line":9229},[49,104747,32547],{"class":73},[49,104749,1403],{"class":66},[49,104751,104752],{"class":1505},"\"site position:\"",[49,104754,104755],{"class":66},", data.site_xpos[site_id].copy())\n",[49,104757,104758,104760,104762,104765],{"class":51,"line":9235},[49,104759,32547],{"class":73},[49,104761,1403],{"class":66},[49,104763,104764],{"class":1505},"\"box qpos:\"",[49,104766,104767],{"class":66},", np.array(data.qpos))\n",[49,104769,104770],{"class":51,"line":9262},[49,104771,3654],{"emptyLinePlaceholder":1330},[49,104773,104774],{"class":51,"line":9267},[49,104775,3654],{"emptyLinePlaceholder":1330},[49,104777,104778,104780,104782,104784,104786],{"class":51,"line":9273},[49,104779,2787],{"class":109},[49,104781,32468],{"class":73},[49,104783,102783],{"class":109},[49,104785,102786],{"class":1505},[49,104787,4993],{"class":66},[49,104789,104790],{"class":51,"line":9285},[49,104791,102793],{"class":66},[19,104793,104794],{},"保存为：",[39,104796,104798],{"className":25070,"code":104797,"language":25072,"meta":44,"style":44},"touch ch2_xml_basic.py\n",[46,104799,104800],{"__ignoreMap":44},[49,104801,104802,104804],{"class":51,"line":52},[49,104803,102507],{"class":62},[49,104805,104806],{"class":1505}," ch2_xml_basic.py\n",[19,104808,103525],{},[39,104810,104812],{"className":25070,"code":104811,"language":25072,"meta":44,"style":44},"python ch2_xml_basic.py\n",[46,104813,104814],{"__ignoreMap":44},[49,104815,104816,104818],{"class":51,"line":52},[49,104817,31628],{"class":62},[49,104819,104806],{"class":1505},[183,104821,102796],{"id":102796},[19,104823,104824],{},"用名字查找 body：",[39,104826,104828],{"className":31626,"code":104827,"language":31628,"meta":44,"style":44},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[46,104829,104830],{"__ignoreMap":44},[49,104831,104832,104835,104837,104839,104841],{"class":51,"line":52},[49,104833,104834],{"class":66},"box_body_id ",[49,104836,1448],{"class":109},[49,104838,104614],{"class":66},[49,104840,104617],{"class":1505},[49,104842,1409],{"class":66},[19,104844,104845],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104847,104848],{},"用名字查找 site：",[39,104850,104852],{"className":31626,"code":104851,"language":31628,"meta":44,"style":44},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[46,104853,104854],{"__ignoreMap":44},[49,104855,104856,104859,104861,104863,104865],{"class":51,"line":52},[49,104857,104858],{"class":66},"site_id ",[49,104860,1448],{"class":109},[49,104862,104629],{"class":66},[49,104864,104632],{"class":1505},[49,104866,1409],{"class":66},[19,104868,104869,104870,104873,104874,104877],{},"注意第二个参数是对象类型。查 body 就用 ",[46,104871,104872],{},"mjOBJ_BODY","，查 site 就用 ",[46,104875,104876],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104879,104880],{},"读取世界坐标：",[39,104882,104884],{"className":31626,"code":104883,"language":31628,"meta":44,"style":44},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[46,104885,104886,104891],{"__ignoreMap":44},[49,104887,104888],{"class":51,"line":52},[49,104889,104890],{"class":66},"data.xpos[box_body_id]\n",[49,104892,104893],{"class":51,"line":59},[49,104894,104895],{"class":66},"data.site_xpos[site_id]\n",[19,104897,104898,104901,104902,104905],{},[46,104899,104900],{},"xpos"," 是 body 的世界坐标，",[46,104903,104904],{},"site_xpos"," 是 site 的世界坐标。",[183,104907,102932],{"id":102932},[39,104909,104911],{"className":31626,"code":104910,"language":31628,"meta":44,"style":44},"import mujoco\nimport numpy as np\n",[46,104912,104913,104919],{"__ignoreMap":44},[49,104914,104915,104917],{"class":51,"line":52},[49,104916,31640],{"class":109},[49,104918,102525],{"class":66},[49,104920,104921,104923,104925,104927],{"class":51,"line":59},[49,104922,31640],{"class":109},[49,104924,32628],{"class":66},[49,104926,32631],{"class":109},[49,104928,32634],{"class":66},[19,104930,104931,104932,104935,104936,104939,104940,1605,104943,29633],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[46,104933,104934],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[46,104937,104938],{},"as np"," 是习惯写法，后面就可以写 ",[46,104941,104942],{},"np.array(...)",[46,104944,104945],{},"np.round(...)",[39,104947,104948],{"className":31626,"code":102819,"language":31628,"meta":44,"style":44},[46,104949,104950,104958,104962],{"__ignoreMap":44},[49,104951,104952,104954,104956],{"class":51,"line":52},[49,104953,102538],{"class":73},[49,104955,14816],{"class":109},[49,104957,102543],{"class":1505},[49,104959,104960],{"class":51,"line":59},[49,104961,102834],{"class":1505},[49,104963,104964],{"class":51,"line":70},[49,104965,96923],{"class":1505},[19,104967,104968,104969,29633],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[46,104970,104971],{},"mujoco.MjModel.from_xml_string(XML)",[39,104973,104975],{"className":54309,"code":104974,"language":54311,"meta":44,"style":44},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[46,104976,104977],{"__ignoreMap":44},[49,104978,104979,104981,104983,104985,104987,104989,104991,104993,104996,104998,105000,105003,105005,105007,105010],{"class":51,"line":52},[49,104980,2300],{"class":66},[49,104982,104434],{"class":147},[49,104984,16171],{"class":62},[49,104986,1448],{"class":66},[49,104988,104632],{"class":1505},[49,104990,102330],{"class":62},[49,104992,1448],{"class":66},[49,104994,104995],{"class":1505},"\"0 0 0\"",[49,104997,102360],{"class":62},[49,104999,1448],{"class":66},[49,105001,105002],{"class":1505},"\"0.03\"",[49,105004,79994],{"class":62},[49,105006,1448],{"class":66},[49,105008,105009],{"class":1505},"\"0 1 0 1\"",[49,105011,102368],{"class":66},[19,105013,105014,105016,105017,105020,105021,105023,105024,105027],{},[46,105015,104434],{}," 是标记点。",[46,105018,105019],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[46,105022,104394],{}," 表示显示出来的小球大小。",[46,105025,105026],{},"rgba=\"0 1 0 1\""," 表示绿色。",[39,105029,105030],{"className":31626,"code":104827,"language":31628,"meta":44,"style":44},[46,105031,105032],{"__ignoreMap":44},[49,105033,105034,105036,105038,105040,105042],{"class":51,"line":52},[49,105035,104834],{"class":66},[49,105037,1448],{"class":109},[49,105039,104614],{"class":66},[49,105041,104617],{"class":1505},[49,105043,1409],{"class":66},[19,105045,105046,105047,105049],{},"这行的作用是：根据名字 ",[46,105048,104617],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105051,105052],{},"拆开看：",[591,105054,105055,105061,105066,105072],{},[26,105056,105057,105060],{},[46,105058,105059],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[26,105062,105063,105065],{},[46,105064,103309],{}," 是被查询的模型。",[26,105067,105068,105071],{},[46,105069,105070],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[26,105073,105074,105076],{},[46,105075,104617],{}," 是 XML 里写的名字。",[39,105078,105079],{"className":31626,"code":104851,"language":31628,"meta":44,"style":44},[46,105080,105081],{"__ignoreMap":44},[49,105082,105083,105085,105087,105089,105091],{"class":51,"line":52},[49,105084,104858],{"class":66},[49,105086,1448],{"class":109},[49,105088,104629],{"class":66},[49,105090,104632],{"class":1505},[49,105092,1409],{"class":66},[19,105094,105095,105096,29633],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[46,105097,104632],{},[39,105099,105101],{"className":31626,"code":105100,"language":31628,"meta":44,"style":44},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[46,105102,105103,105115],{"__ignoreMap":44},[49,105104,105105,105107,105109,105111,105113],{"class":51,"line":52},[49,105106,2787],{"class":109},[49,105108,104645],{"class":66},[49,105110,2300],{"class":109},[49,105112,5347],{"class":73},[49,105114,4993],{"class":66},[49,105116,105117,105120,105122,105124,105126],{"class":51,"line":59},[49,105118,105119],{"class":109},"    raise",[49,105121,104659],{"class":73},[49,105123,1403],{"class":66},[49,105125,104664],{"class":1505},[49,105127,1409],{"class":66},[19,105129,105130,105132,105133,105136,105137,105140,105141,105144],{},[46,105131,2787],{}," 是条件判断。",[46,105134,105135],{},"mj_name2id"," 找不到对象时会返回 ",[46,105138,105139],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[46,105142,105143],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[39,105146,105148],{"className":31626,"code":105147,"language":31628,"meta":44,"style":44},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[46,105149,105150,105166],{"__ignoreMap":44},[49,105151,105152,105154,105156,105158,105160,105162,105164],{"class":51,"line":52},[49,105153,4279],{"class":109},[49,105155,102725],{"class":66},[49,105157,27292],{"class":109},[49,105159,33691],{"class":73},[49,105161,1403],{"class":66},[49,105163,2977],{"class":73},[49,105165,32034],{"class":66},[49,105167,105168],{"class":51,"line":59},[49,105169,102923],{"class":66},[19,105171,105172],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[39,105174,105176],{"className":31626,"code":105175,"language":31628,"meta":44,"style":44},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[46,105177,105178],{"__ignoreMap":44},[49,105179,105180,105182,105184,105186],{"class":51,"line":52},[49,105181,31663],{"class":73},[49,105183,1403],{"class":66},[49,105185,104740],{"class":1505},[49,105187,104743],{"class":66},[19,105189,105190,105192,105193,105196],{},[46,105191,102303],{}," 保存所有 body 的世界坐标。",[46,105194,105195],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[39,105198,105200],{"className":31626,"code":105199,"language":31628,"meta":44,"style":44},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[46,105201,105202],{"__ignoreMap":44},[49,105203,105204,105206,105208,105210],{"class":51,"line":52},[49,105205,31663],{"class":73},[49,105207,1403],{"class":66},[49,105209,104752],{"class":1505},[49,105211,104755],{"class":66},[19,105213,105214,105217,105218,105220],{},[46,105215,105216],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[46,105219,104201],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[39,105222,105224],{"className":31626,"code":105223,"language":31628,"meta":44,"style":44},"print(\"box qpos:\", np.array(data.qpos))\n",[46,105225,105226],{"__ignoreMap":44},[49,105227,105228,105230,105232,105234],{"class":51,"line":52},[49,105229,31663],{"class":73},[49,105231,1403],{"class":66},[49,105233,104764],{"class":1505},[49,105235,104767],{"class":66},[19,105237,105238,105239,105242],{},"这里打印广义位置数组。",[46,105240,105241],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105244,103540],{"id":103539},[19,105246,105247,105248,105251,105252,29633],{},"程序会输出 ",[46,105249,105250],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[46,105253,105254],{},"qpos",[19,105256,105257,105259,105260,105263,105264,105267],{},[46,105258,105195],{}," 是 body 的世界坐标位置。",[46,105261,105262],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[46,105265,105266],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105269,83448,105270,83756,105272,105274],{},[46,105271,104201],{},[46,105273,105019],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105276,105277],{},"如果你把 site 改成：",[39,105279,105281],{"className":54309,"code":105280,"language":54311,"meta":44,"style":44},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[46,105282,105283],{"__ignoreMap":44},[49,105284,105285,105287,105289,105291,105293,105296,105298,105300,105303,105305,105307,105309,105311,105313,105315],{"class":51,"line":52},[49,105286,2300],{"class":66},[49,105288,104434],{"class":147},[49,105290,16171],{"class":62},[49,105292,1448],{"class":66},[49,105294,105295],{"class":1505},"\"box_top\"",[49,105297,102330],{"class":62},[49,105299,1448],{"class":66},[49,105301,105302],{"class":1505},"\"0 0 0.15\"",[49,105304,102360],{"class":62},[49,105306,1448],{"class":66},[49,105308,105002],{"class":1505},[49,105310,79994],{"class":62},[49,105312,1448],{"class":66},[49,105314,105009],{"class":1505},[49,105316,102368],{"class":66},[19,105318,105319,105320,105323],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[46,105321,105322],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105325,103572],{"id":103571},[591,105327,105328,105337,105340,105347,105353,105364],{},[26,105329,103635,105330,105332,105333,103638,105335,29633],{},[46,105331,104205],{}," 的初始高度从 ",[46,105334,159],{},[46,105336,1478],{},[26,105338,105339],{},"重新运行程序。",[26,105341,105342,105343,105346],{},"观察 ",[46,105344,105345],{},"box qpos"," 和最终位置是否变化。",[26,105348,105349,105350,105352],{},"故意把 ",[46,105351,104434],{}," 名称改错，确认程序能报错。",[26,105354,103635,105355,105357,105358,103638,105360,105363],{},[46,105356,102344],{}," 的颜色 ",[46,105359,103256],{},[46,105361,105362],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[26,105365,103635,105366,83756,105368,103638,105371,105374,105375,105377],{},[46,105367,104201],{},[46,105369,105370],{},"pos",[46,105372,105373],{},"0 0 0.2","，观察 ",[46,105376,105322],{}," 如何变化。",[14,105379,103677],{"id":103676},[183,105381,105383],{"id":105382},"xml-error-schema-violation",[46,105384,105385],{},"XML Error: Schema violation",[19,105387,105388],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[183,105390,105392,82516,105394],{"id":105391},"mj_name2id-返回-1",[46,105393,105135],{},[46,105395,105139],{},[19,105397,105398,105399,105402],{},"说明名字没有找到。检查 XML 中 ",[46,105400,105401],{},"name=\"...\"","，并确认对象类型正确。",[183,105404,105405],{"id":105405},"物体不下落",[19,105407,103747],{},[591,105409,105410,105415,105420],{},[26,105411,105412,105413],{},"body 是否有 ",[46,105414,102844],{},[26,105416,105417,105418],{},"gravity 是否为 ",[46,105419,103813],{},[26,105421,105422,105423,105425],{},"body 是否被固定在 ",[46,105424,103065],{}," 中",[183,105427,105428],{"id":105428},"坐标看起来不符合预期",[19,105430,105431],{},"先区分两种坐标：",[293,105433,105434,105443],{},[296,105435,105436],{},[299,105437,105438,105441],{},[302,105439,105440],{"align":304},"坐标",[302,105442,101924],{"align":304},[310,105444,105445,105455],{},[299,105446,105447,105452],{},[315,105448,105449,105450],{"align":304},"XML 里的 ",[46,105451,105370],{},[315,105453,105454],{"align":304},"相对父 body 的局部坐标",[299,105456,105457,105463],{},[315,105458,105459,26227,105461],{"align":304},[46,105460,102303],{},[46,105462,105216],{},[315,105464,105465],{"align":304},"仿真更新后的世界坐标",[19,105467,105468,105469,105471,105472,83765,105475,105477],{},"如果你修改了 ",[46,105470,102294],{},"，但还没调用 ",[46,105473,105474],{},"mj_forward",[46,105476,102439],{},"，世界坐标可能还没有更新。",[14,105479,103831],{"id":103830},[19,105481,105482],{},"MJCF 建模先掌握四件事：",[591,105484,105485,105490,105495,105500],{},[26,105486,105487,105489],{},[46,105488,53042],{}," 表示刚体层级。",[26,105491,105492,105494],{},[46,105493,102344],{}," 表示形状、碰撞和质量。",[26,105496,105497,105499],{},[46,105498,104180],{}," 决定 body 能不能动、怎么动。",[26,105501,105502,105504],{},[46,105503,104434],{}," 用来标记关键点，方便 Python 读取位置。",[19,105506,105507],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1305,105509,105510],{},"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":44,"searchDepth":59,"depth":59,"links":105512},[105513,105514,105515,105521,105525,105526,105527,105534],{"id":101870,"depth":59,"text":101871},{"id":101993,"depth":59,"text":101994},{"id":102268,"depth":59,"text":102269,"children":105516},[105517,105518,105519,105520],{"id":104184,"depth":70,"text":104184},{"id":104298,"depth":70,"text":104298},{"id":104324,"depth":70,"text":104325},{"id":104428,"depth":70,"text":104429},{"id":102476,"depth":59,"text":102477,"children":105522},[105523,105524],{"id":102796,"depth":70,"text":102796},{"id":102932,"depth":70,"text":102932},{"id":103539,"depth":59,"text":103540},{"id":103571,"depth":59,"text":103572},{"id":103676,"depth":59,"text":103677,"children":105528},[105529,105530,105532,105533],{"id":105382,"depth":70,"text":105385},{"id":105391,"depth":70,"text":105531},"mj_name2id 返回 -1",{"id":105405,"depth":70,"text":105405},{"id":105428,"depth":70,"text":105428},{"id":103830,"depth":59,"text":103831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103878,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105541,"title":105542,"body":105543,"description":44,"extension":1328,"meta":107038,"navigation":1330,"path":107039,"seo":107040,"stem":107041,"__hash__":107042},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105544,"toc":107010},[105545,105548,105550,105553,105556,105594,105597,105603,105606,105608,105610,105637,105639,105653,105655,105696,105698,105722,105724,105727,105736,105745,105748,105757,105765,105774,105777,105787,105790,105842,105849,105855,105863,105911,105914,105933,105936,105944,105948,105957,105990,105992,106340,106342,106354,106356,106367,106369,106372,106393,106399,106402,106427,106437,106440,106448,106451,106454,106475,106486,106488,106508,106511,106532,106541,106560,106566,106591,106594,106608,106615,106639,106642,106650,106659,106675,106687,106695,106704,106706,106709,106733,106738,106741,106763,106765,106804,106806,106813,106815,106823,106826,106829,106841,106882,106889,106900,106907,106910,106959,106962,106965,106971,106973,106978,107004,107007],[10,105546,105542],{"id":105547},"_3python-控制接口读取状态与推进仿真",[14,105549,101871],{"id":101870},[19,105551,105552],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105554,105555],{},"你将学习:",[591,105557,105558,105563,105568,105572,105577,105588],{},[26,105559,105560],{},[46,105561,105562],{},"MjModel.from_xml_string",[26,105564,105565],{},[46,105566,105567],{},"MjData(model)",[26,105569,105570],{},[46,105571,102439],{},[26,105573,105574],{},[46,105575,105576],{},"mj_resetData",[26,105578,105579,105580,1605,105582,1605,105585],{},"读取 ",[46,105581,105254],{},[46,105583,105584],{},"qvel",[46,105586,105587],{},"ctrl",[26,105589,105590,105591],{},"使用 ",[46,105592,105593],{},"model.opt.timestep",[19,105595,105596],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[39,105598,105601],{"className":105599,"code":105600,"language":267,"meta":44},[1094],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[46,105602,105600],{"__ignoreMap":44},[19,105604,105605],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105607,101994],{"id":101993},[19,105609,101997],{},[39,105611,105613],{"className":25070,"code":105612,"language":25072,"meta":44,"style":44},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[46,105614,105615],{"__ignoreMap":44},[49,105616,105617,105619,105621,105623,105625,105628,105630,105632,105634],{"class":51,"line":52},[49,105618,25825],{"class":62},[49,105620,27564],{"class":1505},[49,105622,25082],{"class":1505},[49,105624,27649],{"class":73},[49,105626,105627],{"class":1505}," python3",[49,105629,102022],{"class":1505},[49,105631,103725],{"class":1505},[49,105633,102038],{"class":1505},[49,105635,105636],{"class":1505}," glfw\n",[19,105638,104043],{},[39,105640,105641],{"className":25070,"code":102143,"language":25072,"meta":44,"style":44},[46,105642,105643],{"__ignoreMap":44},[49,105644,105645,105647,105649,105651],{"class":51,"line":52},[49,105646,25079],{"class":62},[49,105648,25082],{"class":1505},[49,105650,102154],{"class":1505},[49,105652,102157],{"class":1505},[19,105654,104060],{},[39,105656,105658],{"className":25070,"code":105657,"language":25072,"meta":44,"style":44},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[46,105659,105660,105677,105686],{"__ignoreMap":44},[49,105661,105662,105664,105666,105668,105671,105673,105675],{"class":51,"line":52},[49,105663,31578],{"class":62},[49,105665,30424],{"class":1505},[49,105667,26364],{"class":73},[49,105669,105670],{"class":1505}," mujoco-python-api",[49,105672,102199],{"class":1505},[49,105674,102202],{"class":73},[49,105676,102205],{"class":73},[49,105678,105679,105681,105683],{"class":51,"line":59},[49,105680,31578],{"class":62},[49,105682,102212],{"class":1505},[49,105684,105685],{"class":1505}," mujoco-python-api\n",[49,105687,105688,105690,105692,105694],{"class":51,"line":70},[49,105689,25079],{"class":62},[49,105691,25082],{"class":1505},[49,105693,102154],{"class":1505},[49,105695,102157],{"class":1505},[19,105697,102228],{},[591,105699,105700,105707,105716],{},[26,105701,105702,102242,105704,105706],{},[46,105703,101899],{},[46,105705,101904],{}," 是官方 Python bindings 的类名。",[26,105708,105709,105710,105713,105714,29633],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[46,105711,105712],{},"mjModel"," 在 Python 中是 ",[46,105715,101933],{},[26,105717,105718,105719,29633],{},"不要使用 ",[46,105720,105721],{},"sim = mujoco_py.MjSim(...)",[14,105723,102269],{"id":102268},[19,105725,105726],{},"仿真推进核心代码:",[39,105728,105730],{"className":31626,"code":105729,"language":31628,"meta":44,"style":44},"mujoco.mj_step(model, data)\n",[46,105731,105732],{"__ignoreMap":44},[49,105733,105734],{"class":51,"line":52},[49,105735,105729],{"class":66},[19,105737,105738,105739,1605,105741,1605,105743,29633],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[46,105740,102294],{},[46,105742,102297],{},[46,105744,102291],{},[19,105746,105747],{},"重置仿真:",[39,105749,105751],{"className":31626,"code":105750,"language":31628,"meta":44,"style":44},"mujoco.mj_resetData(model, data)\n",[46,105752,105753],{"__ignoreMap":44},[49,105754,105755],{"class":51,"line":52},[49,105756,105750],{"class":66},[19,105758,105759,105760,83765,105762,105764],{},"如果手动修改了 ",[46,105761,102294],{},[46,105763,102297],{},"，通常应调用:",[39,105766,105768],{"className":31626,"code":105767,"language":31628,"meta":44,"style":44},"mujoco.mj_forward(model, data)\n",[46,105769,105770],{"__ignoreMap":44},[49,105771,105772],{"class":51,"line":52},[49,105773,105767],{"class":66},[19,105775,105776],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[183,105778,105780,1605,105782,1605,105784,105786],{"id":105779},"qposqvelctrl-是什么",[46,105781,105254],{},[46,105783,105584],{},[46,105785,105587],{}," 是什么",[19,105788,105789],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[293,105791,105792,105804],{},[296,105793,105794],{},[299,105795,105796,105799,105801],{},[302,105797,105798],{"align":304},"字段",[302,105800,101924],{"align":304},[302,105802,105803],{"align":304},"谁来修改",[310,105805,105806,105818,105830],{},[299,105807,105808,105812,105815],{},[315,105809,105810],{"align":304},[46,105811,102294],{},[315,105813,105814],{"align":304},"广义位置，例如小车位置、关节角、自由物体位置姿态",[315,105816,105817],{"align":304},"MuJoCo 更新，也可以手动设置初始状态",[299,105819,105820,105824,105827],{},[315,105821,105822],{"align":304},[46,105823,102297],{},[315,105825,105826],{"align":304},"广义速度，例如小车速度、关节角速度",[315,105828,105829],{"align":304},"MuJoCo 更新，也可以手动清零",[299,105831,105832,105836,105839],{},[315,105833,105834],{"align":304},[46,105835,102300],{},[315,105837,105838],{"align":304},"actuator 的控制输入",[315,105840,105841],{"align":304},"主要由你的控制代码写入",[19,105843,10277,105844,102242,105846,105848],{},[46,105845,105254],{},[46,105847,105584],{}," 不一定同维。自由刚体就是典型例子：",[39,105850,105853],{"className":105851,"code":105852,"language":267,"meta":44},[1094],"freejoint: qpos 7 维，qvel 6 维\n",[46,105854,105852],{"__ignoreMap":44},[183,105856,105858,102242,105860,105862],{"id":105857},"mj_step-和-mj_forward-的区别",[46,105859,102439],{},[46,105861,105474],{}," 的区别",[293,105864,105865,105878],{},[296,105866,105867],{},[299,105868,105869,105872,105875],{},[302,105870,105871],{"align":304},"函数",[302,105873,105874],{"align":304},"是否推进时间",[302,105876,105877],{"align":304},"什么时候用",[310,105879,105880,105893],{},[299,105881,105882,105887,105890],{},[315,105883,105884],{"align":304},[46,105885,105886],{},"mj_step(model, data)",[315,105888,105889],{"align":304},"是",[315,105891,105892],{"align":304},"正常仿真循环，每调用一次前进一步",[299,105894,105895,105900,105903],{},[315,105896,105897],{"align":304},[46,105898,105899],{},"mj_forward(model, data)",[315,105901,105902],{"align":304},"否",[315,105904,105905,105906,1605,105908,105910],{"align":304},"手动改了 ",[46,105907,105254],{},[46,105909,105584],{}," 后，刷新派生量",[19,105912,105913],{},"例如你写：",[39,105915,105917],{"className":31626,"code":105916,"language":31628,"meta":44,"style":44},"data.qpos[2] = 2.0\n",[46,105918,105919],{"__ignoreMap":44},[49,105920,105921,105924,105926,105928,105930],{"class":51,"line":52},[49,105922,105923],{"class":66},"data.qpos[",[49,105925,1478],{"class":73},[49,105927,5697],{"class":66},[49,105929,1448],{"class":109},[49,105931,105932],{"class":73}," 2.0\n",[19,105934,105935],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[39,105937,105938],{"className":31626,"code":105767,"language":31628,"meta":44,"style":44},[46,105939,105940],{"__ignoreMap":44},[49,105941,105942],{"class":51,"line":52},[49,105943,105767],{"class":66},[183,105945,105947],{"id":105946},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,105949,105950,105953,105954,105956],{},[46,105951,105952],{},"mujoco.mj_resetData(model, data)"," 会把 ",[46,105955,34649],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[39,105958,105960],{"className":31626,"code":105959,"language":31628,"meta":44,"style":44},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[46,105961,105962,105966,105976,105986],{"__ignoreMap":44},[49,105963,105964],{"class":51,"line":52},[49,105965,105750],{"class":66},[49,105967,105968,105971,105973],{"class":51,"line":59},[49,105969,105970],{"class":66},"data.qpos[:] ",[49,105972,1448],{"class":109},[49,105974,105975],{"class":66}," random_qpos\n",[49,105977,105978,105981,105983],{"class":51,"line":70},[49,105979,105980],{"class":66},"data.qvel[:] ",[49,105982,1448],{"class":109},[49,105984,105985],{"class":73}," 0.0\n",[49,105987,105988],{"class":51,"line":86},[49,105989,105767],{"class":66},[14,105991,102477],{"id":102476},[39,105993,105995],{"className":31626,"code":105994,"language":31628,"meta":44,"style":44},"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",[46,105996,105997,106003,106013,106017,106021,106029,106034,106038,106042,106046,106051,106055,106060,106065,106070,106074,106078,106082,106086,106090,106094,106113,106120,106132,106143,106159,106175,106179,106183,106195,106207,106215,106219,106230,106234,106250,106254,106258,106267,106271,106276,106285,106289,106302,106307,106316,106320,106324,106336],{"__ignoreMap":44},[49,105998,105999,106001],{"class":51,"line":52},[49,106000,31640],{"class":109},[49,106002,102525],{"class":66},[49,106004,106005,106007,106009,106011],{"class":51,"line":59},[49,106006,31640],{"class":109},[49,106008,32628],{"class":66},[49,106010,32631],{"class":109},[49,106012,32634],{"class":66},[49,106014,106015],{"class":51,"line":70},[49,106016,3654],{"emptyLinePlaceholder":1330},[49,106018,106019],{"class":51,"line":86},[49,106020,3654],{"emptyLinePlaceholder":1330},[49,106022,106023,106025,106027],{"class":51,"line":98},[49,106024,102538],{"class":73},[49,106026,14816],{"class":109},[49,106028,102543],{"class":1505},[49,106030,106031],{"class":51,"line":121},[49,106032,106033],{"class":1505},"\u003Cmujoco model=\"state_api\">\n",[49,106035,106036],{"class":51,"line":134},[49,106037,102553],{"class":1505},[49,106039,106040],{"class":51,"line":1085},[49,106041,3654],{"emptyLinePlaceholder":1330},[49,106043,106044],{"class":51,"line":2574},[49,106045,102562],{"class":1505},[49,106047,106048],{"class":51,"line":2586},[49,106049,106050],{"class":1505},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[49,106052,106053],{"class":51,"line":2867},[49,106054,3654],{"emptyLinePlaceholder":1330},[49,106056,106057],{"class":51,"line":2872},[49,106058,106059],{"class":1505},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[49,106061,106062],{"class":51,"line":2878},[49,106063,106064],{"class":1505},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[49,106066,106067],{"class":51,"line":2883},[49,106068,106069],{"class":1505},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[49,106071,106072],{"class":51,"line":2897},[49,106073,102591],{"class":1505},[49,106075,106076],{"class":51,"line":2902},[49,106077,102596],{"class":1505},[49,106079,106080],{"class":51,"line":2908},[49,106081,102601],{"class":1505},[49,106083,106084],{"class":51,"line":2929},[49,106085,96923],{"class":1505},[49,106087,106088],{"class":51,"line":2934},[49,106089,3654],{"emptyLinePlaceholder":1330},[49,106091,106092],{"class":51,"line":2948},[49,106093,3654],{"emptyLinePlaceholder":1330},[49,106095,106096,106098,106101,106104,106106,106109,106111],{"class":51,"line":2953},[49,106097,33195],{"class":109},[49,106099,106100],{"class":62}," print_state",[49,106102,106103],{"class":66},"(prefix: ",[49,106105,2557],{"class":73},[49,106107,106108],{"class":66},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[49,106110,96911],{"class":73},[49,106112,4993],{"class":66},[49,106114,106115,106117],{"class":51,"line":2982},[49,106116,32547],{"class":73},[49,106118,106119],{"class":66},"(prefix)\n",[49,106121,106122,106124,106126,106129],{"class":51,"line":2987},[49,106123,32547],{"class":73},[49,106125,1403],{"class":66},[49,106127,106128],{"class":1505},"\"  timestep:\"",[49,106130,106131],{"class":66},", model.opt.timestep)\n",[49,106133,106134,106136,106138,106141],{"class":51,"line":3004},[49,106135,32547],{"class":73},[49,106137,1403],{"class":66},[49,106139,106140],{"class":1505},"\"  time:\"",[49,106142,102702],{"class":66},[49,106144,106145,106147,106149,106152,106155,106157],{"class":51,"line":3009},[49,106146,32547],{"class":73},[49,106148,1403],{"class":66},[49,106150,106151],{"class":1505},"\"  qpos:\"",[49,106153,106154],{"class":66},", np.round(data.qpos.copy(), ",[49,106156,1685],{"class":73},[49,106158,31745],{"class":66},[49,106160,106161,106163,106165,106168,106171,106173],{"class":51,"line":3014},[49,106162,32547],{"class":73},[49,106164,1403],{"class":66},[49,106166,106167],{"class":1505},"\"  qvel:\"",[49,106169,106170],{"class":66},", np.round(data.qvel.copy(), ",[49,106172,1685],{"class":73},[49,106174,31745],{"class":66},[49,106176,106177],{"class":51,"line":3019},[49,106178,3654],{"emptyLinePlaceholder":1330},[49,106180,106181],{"class":51,"line":3033},[49,106182,3654],{"emptyLinePlaceholder":1330},[49,106184,106185,106187,106189,106191,106193],{"class":51,"line":3038},[49,106186,33195],{"class":109},[49,106188,3227],{"class":62},[49,106190,102622],{"class":66},[49,106192,96911],{"class":73},[49,106194,4993],{"class":66},[49,106196,106197,106199,106201,106203,106205],{"class":51,"line":3831},[49,106198,102631],{"class":66},[49,106200,1448],{"class":109},[49,106202,102636],{"class":66},[49,106204,102538],{"class":73},[49,106206,1409],{"class":66},[49,106208,106209,106211,106213],{"class":51,"line":3845},[49,106210,102645],{"class":66},[49,106212,1448],{"class":109},[49,106214,102650],{"class":66},[49,106216,106217],{"class":51,"line":3853},[49,106218,3654],{"emptyLinePlaceholder":1330},[49,106220,106221,106224,106227],{"class":51,"line":3858},[49,106222,106223],{"class":66},"    print_state(",[49,106225,106226],{"class":1505},"\"initial\"",[49,106228,106229],{"class":66},", model, data)\n",[49,106231,106232],{"class":51,"line":3864},[49,106233,3654],{"emptyLinePlaceholder":1330},[49,106235,106236,106238,106240,106242,106244,106246,106248],{"class":51,"line":3870},[49,106237,4455],{"class":109},[49,106239,102725],{"class":66},[49,106241,27292],{"class":109},[49,106243,33691],{"class":73},[49,106245,1403],{"class":66},[49,106247,2047],{"class":73},[49,106249,32034],{"class":66},[49,106251,106252],{"class":51,"line":3875},[49,106253,102740],{"class":66},[49,106255,106256],{"class":51,"line":9200},[49,106257,3654],{"emptyLinePlaceholder":1330},[49,106259,106260,106262,106265],{"class":51,"line":9224},[49,106261,106223],{"class":66},[49,106263,106264],{"class":1505},"\"after 50 steps\"",[49,106266,106229],{"class":66},[49,106268,106269],{"class":51,"line":9229},[49,106270,3654],{"emptyLinePlaceholder":1330},[49,106272,106273],{"class":51,"line":9235},[49,106274,106275],{"class":66},"    mujoco.mj_resetData(model, data)\n",[49,106277,106278,106280,106283],{"class":51,"line":9262},[49,106279,106223],{"class":66},[49,106281,106282],{"class":1505},"\"after reset\"",[49,106284,106229],{"class":66},[49,106286,106287],{"class":51,"line":9267},[49,106288,3654],{"emptyLinePlaceholder":1330},[49,106290,106291,106294,106296,106298,106300],{"class":51,"line":9273},[49,106292,106293],{"class":66},"    data.qpos[",[49,106295,1478],{"class":73},[49,106297,5697],{"class":66},[49,106299,1448],{"class":109},[49,106301,105932],{"class":73},[49,106303,106304],{"class":51,"line":9285},[49,106305,106306],{"class":66},"    mujoco.mj_forward(model, data)\n",[49,106308,106309,106311,106314],{"class":51,"line":9297},[49,106310,106223],{"class":66},[49,106312,106313],{"class":1505},"\"after manual qpos edit\"",[49,106315,106229],{"class":66},[49,106317,106318],{"class":51,"line":9309},[49,106319,3654],{"emptyLinePlaceholder":1330},[49,106321,106322],{"class":51,"line":10968},[49,106323,3654],{"emptyLinePlaceholder":1330},[49,106325,106326,106328,106330,106332,106334],{"class":51,"line":10993},[49,106327,2787],{"class":109},[49,106329,32468],{"class":73},[49,106331,102783],{"class":109},[49,106333,102786],{"class":1505},[49,106335,4993],{"class":66},[49,106337,106338],{"class":51,"line":11016},[49,106339,102793],{"class":66},[19,106341,104794],{},[39,106343,106345],{"className":25070,"code":106344,"language":25072,"meta":44,"style":44},"touch ch3_python_state.py\n",[46,106346,106347],{"__ignoreMap":44},[49,106348,106349,106351],{"class":51,"line":52},[49,106350,102507],{"class":62},[49,106352,106353],{"class":1505}," ch3_python_state.py\n",[19,106355,103525],{},[39,106357,106359],{"className":25070,"code":106358,"language":25072,"meta":44,"style":44},"python ch3_python_state.py\n",[46,106360,106361],{"__ignoreMap":44},[49,106362,106363,106365],{"class":51,"line":52},[49,106364,31628],{"class":62},[49,106366,106353],{"class":1505},[183,106368,102796],{"id":102796},[19,106370,106371],{},"打印状态的函数：",[39,106373,106375],{"className":31626,"code":106374,"language":31628,"meta":44,"style":44},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[46,106376,106377],{"__ignoreMap":44},[49,106378,106379,106381,106383,106385,106387,106389,106391],{"class":51,"line":52},[49,106380,33195],{"class":109},[49,106382,106100],{"class":62},[49,106384,106103],{"class":66},[49,106386,2557],{"class":73},[49,106388,106108],{"class":66},[49,106390,96911],{"class":73},[49,106392,4993],{"class":66},[19,106394,106395,106396,106398],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[46,106397,34649],{}," 里发生了什么。",[19,106400,106401],{},"推进 50 步：",[39,106403,106405],{"className":31626,"code":106404,"language":31628,"meta":44,"style":44},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[46,106406,106407,106423],{"__ignoreMap":44},[49,106408,106409,106411,106413,106415,106417,106419,106421],{"class":51,"line":52},[49,106410,4279],{"class":109},[49,106412,102725],{"class":66},[49,106414,27292],{"class":109},[49,106416,33691],{"class":73},[49,106418,1403],{"class":66},[49,106420,2047],{"class":73},[49,106422,32034],{"class":66},[49,106424,106425],{"class":51,"line":59},[49,106426,102923],{"class":66},[19,106428,106429,106430,106433,106434,106436],{},"由于 ",[46,106431,106432],{},"timestep=0.01","，所以 50 步后时间约为 ",[46,106435,36577],{}," 秒。",[19,106438,106439],{},"重置：",[39,106441,106442],{"className":31626,"code":105750,"language":31628,"meta":44,"style":44},[46,106443,106444],{"__ignoreMap":44},[49,106445,106446],{"class":51,"line":52},[49,106447,105750],{"class":66},[19,106449,106450],{},"这会把时间、位置、速度恢复到初始状态。",[19,106452,106453],{},"手动改高度：",[39,106455,106457],{"className":31626,"code":106456,"language":31628,"meta":44,"style":44},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[46,106458,106459,106471],{"__ignoreMap":44},[49,106460,106461,106463,106465,106467,106469],{"class":51,"line":52},[49,106462,105923],{"class":66},[49,106464,1478],{"class":73},[49,106466,5697],{"class":66},[49,106468,1448],{"class":109},[49,106470,105932],{"class":73},[49,106472,106473],{"class":51,"line":59},[49,106474,105767],{"class":66},[19,106476,106477,106478,106481,106482,106485],{},"这个例子里 ",[46,106479,106480],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[46,106483,106484],{},"2.0"," 表示把小球放到更高的位置。",[183,106487,102932],{"id":102932},[39,106489,106490],{"className":31626,"code":106374,"language":31628,"meta":44,"style":44},[46,106491,106492],{"__ignoreMap":44},[49,106493,106494,106496,106498,106500,106502,106504,106506],{"class":51,"line":52},[49,106495,33195],{"class":109},[49,106497,106100],{"class":62},[49,106499,106103],{"class":66},[49,106501,2557],{"class":73},[49,106503,106108],{"class":66},[49,106505,96911],{"class":73},[49,106507,4993],{"class":66},[19,106509,106510],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[591,106512,106513,106522,106527],{},[26,106514,106515,106518,106519,106521],{},[46,106516,106517],{},"prefix","：一段文字，比如 ",[46,106520,106226],{},"，用来说明现在打印的是哪个阶段。",[26,106523,106524,106526],{},[46,106525,103309],{},"：MuJoCo 模型。",[26,106528,106529,106531],{},[46,106530,34649],{},"：MuJoCo 当前状态。",[19,106533,106534,1605,106537,106540],{},[46,106535,106536],{},"prefix: str",[46,106538,106539],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[39,106542,106544],{"className":31626,"code":106543,"language":31628,"meta":44,"style":44},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[46,106545,106546],{"__ignoreMap":44},[49,106547,106548,106550,106552,106554,106556,106558],{"class":51,"line":52},[49,106549,31663],{"class":73},[49,106551,1403],{"class":66},[49,106553,106151],{"class":1505},[49,106555,106154],{"class":66},[49,106557,1685],{"class":73},[49,106559,31745],{"class":66},[19,106561,106562,106565],{},[46,106563,106564],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[39,106567,106569],{"className":31626,"code":106568,"language":31628,"meta":44,"style":44},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[46,106570,106571,106583],{"__ignoreMap":44},[49,106572,106573,106575,106577,106579,106581],{"class":51,"line":52},[49,106574,102858],{"class":66},[49,106576,1448],{"class":109},[49,106578,102636],{"class":66},[49,106580,102538],{"class":73},[49,106582,1409],{"class":66},[49,106584,106585,106587,106589],{"class":51,"line":59},[49,106586,102882],{"class":66},[49,106588,1448],{"class":109},[49,106590,102650],{"class":66},[19,106592,106593],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[39,106595,106597],{"className":31626,"code":106596,"language":31628,"meta":44,"style":44},"print_state(\"initial\", model, data)\n",[46,106598,106599],{"__ignoreMap":44},[49,106600,106601,106604,106606],{"class":51,"line":52},[49,106602,106603],{"class":66},"print_state(",[49,106605,106226],{"class":1505},[49,106607,106229],{"class":66},[19,106609,106610,106611,106614],{},"调用刚才定义的 ",[46,106612,106613],{},"print_state"," 函数，打印初始状态。",[39,106616,106617],{"className":31626,"code":106404,"language":31628,"meta":44,"style":44},[46,106618,106619,106635],{"__ignoreMap":44},[49,106620,106621,106623,106625,106627,106629,106631,106633],{"class":51,"line":52},[49,106622,4279],{"class":109},[49,106624,102725],{"class":66},[49,106626,27292],{"class":109},[49,106628,33691],{"class":73},[49,106630,1403],{"class":66},[49,106632,2047],{"class":73},[49,106634,32034],{"class":66},[49,106636,106637],{"class":51,"line":59},[49,106638,102923],{"class":66},[19,106640,106641],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[39,106643,106644],{"className":31626,"code":105750,"language":31628,"meta":44,"style":44},[46,106645,106646],{"__ignoreMap":44},[49,106647,106648],{"class":51,"line":52},[49,106649,105750],{"class":66},[19,106651,106652,106653,106655,106656,106658],{},"重置 ",[46,106654,34649],{},"。注意它不会重新创建 ",[46,106657,103309],{},"，因为模型结构没有变，只是状态回到初始值。",[39,106660,106661],{"className":31626,"code":105916,"language":31628,"meta":44,"style":44},[46,106662,106663],{"__ignoreMap":44},[49,106664,106665,106667,106669,106671,106673],{"class":51,"line":52},[49,106666,105923],{"class":66},[49,106668,1478],{"class":73},[49,106670,5697],{"class":66},[49,106672,1448],{"class":109},[49,106674,105932],{"class":73},[19,106676,106677,106678,1605,106681,1605,106684,106686],{},"这行是“手动改状态”。在 freejoint 中，",[46,106679,106680],{},"qpos[0]",[46,106682,106683],{},"qpos[1]",[46,106685,106480],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[39,106688,106689],{"className":31626,"code":105767,"language":31628,"meta":44,"style":44},[46,106690,106691],{"__ignoreMap":44},[49,106692,106693],{"class":51,"line":52},[49,106694,105767],{"class":66},[19,106696,106697,106698,106700,106701,106703],{},"手动改完 ",[46,106699,105254],{}," 后，调用 ",[46,106702,105474],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106705,103540],{"id":103539},[19,106707,106708],{},"你会看到:",[591,106710,106711,106716,106721,106724],{},[26,106712,106713,106714],{},"初始时间为 ",[46,106715,80],{},[26,106717,106718,106719],{},"50 步后时间约为 ",[46,106720,36577],{},[26,106722,106723],{},"reset 后状态恢复",[26,106725,106726,106727,106730,106731],{},"手动修改 ",[46,106728,106729],{},"data.qpos[2]"," 后，小球高度变为 ",[46,106732,106484],{},[19,106734,106735,106737],{},[46,106736,106480],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106739,106740],{},"输出里可以重点看三件事：",[591,106742,106743,106751,106756],{},[26,106744,106745,106747,106748,106750],{},[46,106746,3641],{}," 是否随着 ",[46,106749,102439],{}," 增加。",[26,106752,106753,106755],{},[46,106754,105254],{}," 的 z 坐标是否因为下落而变化。",[26,106757,106758,106760,106761,29633],{},[46,106759,105576],{}," 后时间是否回到 ",[46,106762,80],{},[14,106764,103572],{"id":103571},[591,106766,106767,106773,106779,106785,106788,106797],{},[26,106768,106769,106770,29633],{},"修改 timestep 为 ",[46,106771,106772],{},"0.005",[26,106774,106775,106776,29633],{},"重新运行，检查 50 步后时间是否约为 ",[46,106777,106778],{},"0.25",[26,106780,106781,106782,29633],{},"修改重力为 ",[46,106783,106784],{},"0 0 -1.0",[26,106786,106787],{},"观察小球下降速度是否变慢。",[26,106789,103635,106790,103638,106793,106796],{},[46,106791,106792],{},"data.qpos[2] = 2.0",[46,106794,106795],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[26,106798,106799,106800,106803],{},"注释掉 ",[46,106801,106802],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106805,103677],{"id":103676},[183,106807,106809,106810,106812],{"id":106808},"修改-dataqpos-后位置没有更新","修改 ",[46,106811,102294],{}," 后位置没有更新",[19,106814,103686],{},[39,106816,106817],{"className":31626,"code":105767,"language":31628,"meta":44,"style":44},[46,106818,106819],{"__ignoreMap":44},[49,106820,106821],{"class":51,"line":52},[49,106822,105767],{"class":66},[183,106824,106825],{"id":106825},"数组维度看不懂",[19,106827,106828],{},"打印模型维度:",[39,106830,106832],{"className":31626,"code":106831,"language":31628,"meta":44,"style":44},"print(model.nq, model.nv, model.nu)\n",[46,106833,106834],{"__ignoreMap":44},[49,106835,106836,106838],{"class":51,"line":52},[49,106837,31663],{"class":73},[49,106839,106840],{"class":66},"(model.nq, model.nv, model.nu)\n",[293,106842,106843,106851],{},[296,106844,106845],{},[299,106846,106847,106849],{},[302,106848,105798],{"align":304},[302,106850,101924],{"align":304},[310,106852,106853,106863,106873],{},[299,106854,106855,106860],{},[315,106856,106857],{"align":304},[46,106858,106859],{},"nq",[315,106861,106862],{"align":304},"位置变量数量",[299,106864,106865,106870],{},[315,106866,106867],{"align":304},[46,106868,106869],{},"nv",[315,106871,106872],{"align":304},"速度变量数量",[299,106874,106875,106879],{},[315,106876,106877],{"align":304},[46,106878,103386],{},[315,106880,106881],{"align":304},"控制输入数量",[183,106883,106885,106886,106888],{"id":106884},"误以为-qpos-一定等于关节数","误以为 ",[46,106887,105254],{}," 一定等于关节数",[19,106890,106891,106892,83756,106894,106896,106897,106899],{},"不是。例如 ",[46,106893,102844],{},[46,106895,105254],{}," 是 7 维，但 ",[46,106898,105584],{}," 是 6 维。",[183,106901,106903,106904,106906],{"id":106902},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[46,106905,105254],{}," 的第几位",[19,106908,106909],{},"初学时可以先打印：",[39,106911,106913],{"className":31626,"code":106912,"language":31628,"meta":44,"style":44},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[46,106914,106915,106925,106935,106947],{"__ignoreMap":44},[49,106916,106917,106919,106921,106923],{"class":51,"line":52},[49,106918,31663],{"class":73},[49,106920,1403],{"class":66},[49,106922,102663],{"class":1505},[49,106924,102666],{"class":66},[49,106926,106927,106929,106931,106933],{"class":51,"line":59},[49,106928,31663],{"class":73},[49,106930,1403],{"class":66},[49,106932,102675],{"class":1505},[49,106934,102678],{"class":66},[49,106936,106937,106939,106941,106944],{"class":51,"line":70},[49,106938,31663],{"class":73},[49,106940,1403],{"class":66},[49,106942,106943],{"class":1505},"\"qpos:\"",[49,106945,106946],{"class":66},", data.qpos)\n",[49,106948,106949,106951,106953,106956],{"class":51,"line":86},[49,106950,31663],{"class":73},[49,106952,1403],{"class":66},[49,106954,106955],{"class":1505},"\"qvel:\"",[49,106957,106958],{"class":66},", data.qvel)\n",[19,106960,106961],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[183,106963,106964],{"id":106964},"仿真结果每次都一样",[19,106966,106967,106968,106970],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[46,106969,105254],{},"、目标点或控制输入。",[14,106972,103831],{"id":103830},[19,106974,106975,106976,25867],{},"Python 控制 MuJoCo 的核心就是读写 ",[46,106977,34649],{},[591,106979,106980,106988,106993,106998],{},[26,106981,106982,106983,102242,106985,106987],{},"用 ",[46,106984,102294],{},[46,106986,102297],{}," 读取状态。",[26,106989,106982,106990,106992],{},[46,106991,102300],{}," 写入控制。",[26,106994,106982,106995,106997],{},[46,106996,102439],{}," 推进时间。",[26,106999,107000,107001,107003],{},"手动改状态后用 ",[46,107002,105474],{}," 刷新派生量。",[19,107005,107006],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1305,107008,107009],{},"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":44,"searchDepth":59,"depth":59,"links":107011},[107012,107013,107014,107021,107025,107026,107027,107037],{"id":101870,"depth":59,"text":101871},{"id":101993,"depth":59,"text":101994},{"id":102268,"depth":59,"text":102269,"children":107015},[107016,107018,107020],{"id":105779,"depth":70,"text":107017},"qpos、qvel、ctrl 是什么",{"id":105857,"depth":70,"text":107019},"mj_step 和 mj_forward 的区别",{"id":105946,"depth":70,"text":105947},{"id":102476,"depth":59,"text":102477,"children":107022},[107023,107024],{"id":102796,"depth":70,"text":102796},{"id":102932,"depth":70,"text":102932},{"id":103539,"depth":59,"text":103540},{"id":103571,"depth":59,"text":103572},{"id":103676,"depth":59,"text":103677,"children":107028},[107029,107031,107032,107034,107036],{"id":106808,"depth":70,"text":107030},"修改 data.qpos 后位置没有更新",{"id":106825,"depth":70,"text":106825},{"id":106884,"depth":70,"text":107033},"误以为 qpos 一定等于关节数",{"id":106902,"depth":70,"text":107035},"不知道某个元素在 qpos 的第几位",{"id":106964,"depth":70,"text":106964},{"id":103830,"depth":59,"text":103831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105542,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107044,"title":107045,"body":107046,"description":44,"extension":1328,"meta":108736,"navigation":1330,"path":108737,"seo":108738,"stem":108739,"__hash__":108740},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107047,"toc":108712},[107048,107051,107053,107056,107058,107083,107086,107105,107108,107110,107112,107136,107138,107152,107154,107195,107197,107221,107223,107226,107260,107262,107275,107278,107346,107355,107359,107362,107396,107402,107405,107409,107448,107451,107471,107475,107518,107520,107549,107552,107558,107561,107563,107957,107959,107971,107973,107984,107986,107989,108018,108026,108029,108064,108067,108069,108077,108080,108082,108093,108103,108123,108126,108162,108174,108222,108241,108283,108296,108324,108329,108350,108360,108378,108381,108415,108418,108438,108441,108460,108466,108468,108471,108477,108483,108493,108496,108502,108511,108513,108559,108561,108567,108573,108576,108579,108599,108602,108608,108614,108616,108639,108642,108645,108654,108657,108695,108697,108700,108706,108709],[10,107049,107045],{"id":107050},"_4关节actuator-与力控制",[14,107052,101871],{"id":101870},[19,107054,107055],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107057,105555],{},[591,107059,107060,107066,107071,107075,107080],{},[26,107061,107062,107065],{},[46,107063,107064],{},"hinge"," 关节",[26,107067,107068],{},[46,107069,107070],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[26,107072,107073],{},[46,107074,102300],{},[26,107076,107077],{},[46,107078,107079],{},"ctrlrange",[26,107081,107082],{},"读取关节角和角速度",[19,107084,107085],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[39,107087,107089],{"className":31626,"code":107088,"language":31628,"meta":44,"style":44},"data.ctrl[0] = ...\n",[46,107090,107091],{"__ignoreMap":44},[49,107092,107093,107096,107098,107100,107102],{"class":51,"line":52},[49,107094,107095],{"class":66},"data.ctrl[",[49,107097,80],{"class":73},[49,107099,5697],{"class":66},[49,107101,1448],{"class":109},[49,107103,107104],{"class":73}," ...\n",[19,107106,107107],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107109,101994],{"id":101993},[19,107111,101997],{},[39,107113,107114],{"className":25070,"code":105612,"language":25072,"meta":44,"style":44},[46,107115,107116],{"__ignoreMap":44},[49,107117,107118,107120,107122,107124,107126,107128,107130,107132,107134],{"class":51,"line":52},[49,107119,25825],{"class":62},[49,107121,27564],{"class":1505},[49,107123,25082],{"class":1505},[49,107125,27649],{"class":73},[49,107127,105627],{"class":1505},[49,107129,102022],{"class":1505},[49,107131,103725],{"class":1505},[49,107133,102038],{"class":1505},[49,107135,105636],{"class":1505},[19,107137,104043],{},[39,107139,107140],{"className":25070,"code":102143,"language":25072,"meta":44,"style":44},[46,107141,107142],{"__ignoreMap":44},[49,107143,107144,107146,107148,107150],{"class":51,"line":52},[49,107145,25079],{"class":62},[49,107147,25082],{"class":1505},[49,107149,102154],{"class":1505},[49,107151,102157],{"class":1505},[19,107153,104060],{},[39,107155,107157],{"className":25070,"code":107156,"language":25072,"meta":44,"style":44},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[46,107158,107159,107176,107185],{"__ignoreMap":44},[49,107160,107161,107163,107165,107167,107170,107172,107174],{"class":51,"line":52},[49,107162,31578],{"class":62},[49,107164,30424],{"class":1505},[49,107166,26364],{"class":73},[49,107168,107169],{"class":1505}," mujoco-control",[49,107171,102199],{"class":1505},[49,107173,102202],{"class":73},[49,107175,102205],{"class":73},[49,107177,107178,107180,107182],{"class":51,"line":59},[49,107179,31578],{"class":62},[49,107181,102212],{"class":1505},[49,107183,107184],{"class":1505}," mujoco-control\n",[49,107186,107187,107189,107191,107193],{"class":51,"line":70},[49,107188,25079],{"class":62},[49,107190,25082],{"class":1505},[49,107192,102154],{"class":1505},[49,107194,102157],{"class":1505},[19,107196,102228],{},[591,107198,107199,107205,107212,107218],{},[26,107200,107201,107204],{},[46,107202,107203],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[26,107206,107207,107209,107210,29633],{},[46,107208,102300],{}," 长度等于 ",[46,107211,103382],{},[26,107213,83448,107214,107217],{},[46,107215,107216],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[26,107219,107220],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107222,102269],{"id":102268},[19,107224,107225],{},"关节决定 body 如何运动:",[39,107227,107229],{"className":54309,"code":107228,"language":54311,"meta":44,"style":44},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[46,107230,107231],{"__ignoreMap":44},[49,107232,107233,107235,107237,107239,107241,107244,107246,107248,107250,107253,107255,107258],{"class":51,"line":52},[49,107234,2300],{"class":66},[49,107236,104180],{"class":147},[49,107238,16171],{"class":62},[49,107240,1448],{"class":66},[49,107242,107243],{"class":1505},"\"hinge\"",[49,107245,55065],{"class":62},[49,107247,1448],{"class":66},[49,107249,107243],{"class":1505},[49,107251,107252],{"class":62}," axis",[49,107254,1448],{"class":66},[49,107256,107257],{"class":1505},"\"0 1 0\"",[49,107259,102368],{"class":66},[19,107261,104276],{},[591,107263,107264,107269,107272],{},[26,107265,107266,107267],{},"名字是 ",[46,107268,107064],{},[26,107270,107271],{},"类型是旋转关节",[26,107273,107274],{},"绕 y 轴旋转",[19,107276,107277],{},"actuator 决定如何施加控制:",[39,107279,107281],{"className":54309,"code":107280,"language":54311,"meta":44,"style":44},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[46,107282,107283,107292,107338],{"__ignoreMap":44},[49,107284,107285,107287,107290],{"class":51,"line":52},[49,107286,2300],{"class":66},[49,107288,107289],{"class":147},"actuator",[49,107291,52554],{"class":66},[49,107293,107294,107296,107299,107301,107303,107306,107309,107311,107313,107316,107318,107320,107323,107325,107328,107331,107333,107336],{"class":51,"line":59},[49,107295,53386],{"class":66},[49,107297,107298],{"class":147},"motor",[49,107300,16171],{"class":62},[49,107302,1448],{"class":66},[49,107304,107305],{"class":1505},"\"hinge_motor\"",[49,107307,107308],{"class":62}," joint",[49,107310,1448],{"class":66},[49,107312,107243],{"class":1505},[49,107314,107315],{"class":62}," gear",[49,107317,1448],{"class":66},[49,107319,4932],{"class":1505},[49,107321,107322],{"class":62}," ctrlrange",[49,107324,1448],{"class":66},[49,107326,107327],{"class":1505},"\"-2 2\"",[49,107329,107330],{"class":62}," ctrllimited",[49,107332,1448],{"class":66},[49,107334,107335],{"class":1505},"\"true\"",[49,107337,102368],{"class":66},[49,107339,107340,107342,107344],{"class":51,"line":70},[49,107341,53027],{"class":66},[49,107343,107289],{"class":147},[49,107345,52554],{"class":66},[19,107347,107348,107351,107352,29633],{},[46,107349,107350],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[46,107353,107354],{},"[-2, 2]",[183,107356,107358],{"id":107357},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107360,107361],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[293,107363,107364,107374],{},[296,107365,107366],{},[299,107367,107368,107370,107372],{},[302,107369,27002],{"align":304},[302,107371,103920],{"align":304},[302,107373,101958],{"align":304},[310,107375,107376,107386],{},[299,107377,107378,107380,107383],{},[315,107379,104180],{"align":304},[315,107381,107382],{"align":304},"定义能怎么动",[315,107384,107385],{"align":304},"门轴允许门旋转",[299,107387,107388,107390,107393],{},[315,107389,107289],{"align":304},[315,107391,107392],{"align":304},"定义怎么施力或控制",[315,107394,107395],{"align":304},"人推门、马达带动门",[19,107397,107398,107399,107401],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[46,107400,102300],{}," 主动控制它。",[19,107403,107404],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[183,107406,107408],{"id":107407},"hinge-joint","hinge joint",[39,107410,107412],{"className":54309,"code":107411,"language":54311,"meta":44,"style":44},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[46,107413,107414],{"__ignoreMap":44},[49,107415,107416,107418,107420,107422,107424,107426,107428,107430,107432,107434,107436,107438,107441,107443,107446],{"class":51,"line":52},[49,107417,2300],{"class":66},[49,107419,104180],{"class":147},[49,107421,16171],{"class":62},[49,107423,1448],{"class":66},[49,107425,107243],{"class":1505},[49,107427,55065],{"class":62},[49,107429,1448],{"class":66},[49,107431,107243],{"class":1505},[49,107433,107252],{"class":62},[49,107435,1448],{"class":66},[49,107437,107257],{"class":1505},[49,107439,107440],{"class":62}," damping",[49,107442,1448],{"class":66},[49,107444,107445],{"class":1505},"\"0.1\"",[49,107447,102368],{"class":66},[19,107449,107450],{},"含义：",[591,107452,107453,107459,107465],{},[26,107454,107455,107458],{},[46,107456,107457],{},"type=\"hinge\"","：只能绕一个轴旋转。",[26,107460,107461,107464],{},[46,107462,107463],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[26,107466,107467,107470],{},[46,107468,107469],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[183,107472,107474],{"id":107473},"motor-actuator","motor actuator",[39,107476,107478],{"className":54309,"code":107477,"language":54311,"meta":44,"style":44},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[46,107479,107480],{"__ignoreMap":44},[49,107481,107482,107484,107486,107488,107490,107492,107494,107496,107498,107500,107502,107504,107506,107508,107510,107512,107514,107516],{"class":51,"line":52},[49,107483,2300],{"class":66},[49,107485,107298],{"class":147},[49,107487,16171],{"class":62},[49,107489,1448],{"class":66},[49,107491,107305],{"class":1505},[49,107493,107308],{"class":62},[49,107495,1448],{"class":66},[49,107497,107243],{"class":1505},[49,107499,107315],{"class":62},[49,107501,1448],{"class":66},[49,107503,4932],{"class":1505},[49,107505,107322],{"class":62},[49,107507,1448],{"class":66},[49,107509,107327],{"class":1505},[49,107511,107330],{"class":62},[49,107513,1448],{"class":66},[49,107515,107335],{"class":1505},[49,107517,102368],{"class":66},[19,107519,107450],{},[591,107521,107522,107531,107537,107543],{},[26,107523,107524,107527,107528,107530],{},[46,107525,107526],{},"joint=\"hinge\"","：这个电机作用在名为 ",[46,107529,107064],{}," 的关节上。",[26,107532,107533,107536],{},[46,107534,107535],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[26,107538,107539,107542],{},[46,107540,107541],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[26,107544,107545,107548],{},[46,107546,107547],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107550,107551],{},"简单理解：",[39,107553,107556],{"className":107554,"code":107555,"language":267,"meta":44},[1094],"实际施加效果 ≈ data.ctrl[0] * gear\n",[46,107557,107555],{"__ignoreMap":44},[19,107559,107560],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107562,102477],{"id":102476},[39,107564,107566],{"className":31626,"code":107565,"language":31628,"meta":44,"style":44},"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",[46,107567,107568,107575,107579,107585,107595,107599,107603,107611,107616,107621,107625,107629,107634,107639,107643,107648,107653,107658,107663,107667,107671,107675,107680,107685,107690,107694,107698,107702,107706,107718,107730,107738,107742,107752,107762,107772,107776,107789,107802,107806,107823,107837,107872,107876,107880,107891,107906,107921,107933,107937,107941,107953],{"__ignoreMap":44},[49,107569,107570,107572],{"class":51,"line":52},[49,107571,31640],{"class":109},[49,107573,107574],{"class":66}," math\n",[49,107576,107577],{"class":51,"line":59},[49,107578,3654],{"emptyLinePlaceholder":1330},[49,107580,107581,107583],{"class":51,"line":70},[49,107582,31640],{"class":109},[49,107584,102525],{"class":66},[49,107586,107587,107589,107591,107593],{"class":51,"line":86},[49,107588,31640],{"class":109},[49,107590,32628],{"class":66},[49,107592,32631],{"class":109},[49,107594,32634],{"class":66},[49,107596,107597],{"class":51,"line":98},[49,107598,3654],{"emptyLinePlaceholder":1330},[49,107600,107601],{"class":51,"line":121},[49,107602,3654],{"emptyLinePlaceholder":1330},[49,107604,107605,107607,107609],{"class":51,"line":134},[49,107606,102538],{"class":73},[49,107608,14816],{"class":109},[49,107610,102543],{"class":1505},[49,107612,107613],{"class":51,"line":1085},[49,107614,107615],{"class":1505},"\u003Cmujoco model=\"one_link_motor\">\n",[49,107617,107618],{"class":51,"line":2574},[49,107619,107620],{"class":1505},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[49,107622,107623],{"class":51,"line":2586},[49,107624,3654],{"emptyLinePlaceholder":1330},[49,107626,107627],{"class":51,"line":2867},[49,107628,102562],{"class":1505},[49,107630,107631],{"class":51,"line":2872},[49,107632,107633],{"class":1505},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[49,107635,107636],{"class":51,"line":2878},[49,107637,107638],{"class":1505},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[49,107640,107641],{"class":51,"line":2883},[49,107642,3654],{"emptyLinePlaceholder":1330},[49,107644,107645],{"class":51,"line":2897},[49,107646,107647],{"class":1505},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[49,107649,107650],{"class":51,"line":2902},[49,107651,107652],{"class":1505},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[49,107654,107655],{"class":51,"line":2908},[49,107656,107657],{"class":1505},"        \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",[49,107659,107660],{"class":51,"line":2929},[49,107661,107662],{"class":1505},"      \u003C\u002Fbody>\n",[49,107664,107665],{"class":51,"line":2934},[49,107666,102591],{"class":1505},[49,107668,107669],{"class":51,"line":2948},[49,107670,102596],{"class":1505},[49,107672,107673],{"class":51,"line":2953},[49,107674,3654],{"emptyLinePlaceholder":1330},[49,107676,107677],{"class":51,"line":2982},[49,107678,107679],{"class":1505},"  \u003Cactuator>\n",[49,107681,107682],{"class":51,"line":2987},[49,107683,107684],{"class":1505},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[49,107686,107687],{"class":51,"line":3004},[49,107688,107689],{"class":1505},"  \u003C\u002Factuator>\n",[49,107691,107692],{"class":51,"line":3009},[49,107693,102601],{"class":1505},[49,107695,107696],{"class":51,"line":3014},[49,107697,96923],{"class":1505},[49,107699,107700],{"class":51,"line":3019},[49,107701,3654],{"emptyLinePlaceholder":1330},[49,107703,107704],{"class":51,"line":3033},[49,107705,3654],{"emptyLinePlaceholder":1330},[49,107707,107708,107710,107712,107714,107716],{"class":51,"line":3038},[49,107709,33195],{"class":109},[49,107711,3227],{"class":62},[49,107713,102622],{"class":66},[49,107715,96911],{"class":73},[49,107717,4993],{"class":66},[49,107719,107720,107722,107724,107726,107728],{"class":51,"line":3831},[49,107721,102631],{"class":66},[49,107723,1448],{"class":109},[49,107725,102636],{"class":66},[49,107727,102538],{"class":73},[49,107729,1409],{"class":66},[49,107731,107732,107734,107736],{"class":51,"line":3845},[49,107733,102645],{"class":66},[49,107735,1448],{"class":109},[49,107737,102650],{"class":66},[49,107739,107740],{"class":51,"line":3853},[49,107741,3654],{"emptyLinePlaceholder":1330},[49,107743,107744,107746,107748,107750],{"class":51,"line":3858},[49,107745,32547],{"class":73},[49,107747,1403],{"class":66},[49,107749,102663],{"class":1505},[49,107751,102666],{"class":66},[49,107753,107754,107756,107758,107760],{"class":51,"line":3864},[49,107755,32547],{"class":73},[49,107757,1403],{"class":66},[49,107759,102675],{"class":1505},[49,107761,102678],{"class":66},[49,107763,107764,107766,107768,107770],{"class":51,"line":3870},[49,107765,32547],{"class":73},[49,107767,1403],{"class":66},[49,107769,102687],{"class":1505},[49,107771,102690],{"class":66},[49,107773,107774],{"class":51,"line":3875},[49,107775,3654],{"emptyLinePlaceholder":1330},[49,107777,107778,107780,107783,107785,107787],{"class":51,"line":9200},[49,107779,4355],{"class":109},[49,107781,107782],{"class":66}," model.nu ",[49,107784,22198],{"class":109},[49,107786,26367],{"class":73},[49,107788,4993],{"class":66},[49,107790,107791,107793,107795,107797,107800],{"class":51,"line":9224},[49,107792,104656],{"class":109},[49,107794,104659],{"class":73},[49,107796,1403],{"class":66},[49,107798,107799],{"class":1505},"\"expected exactly one actuator\"",[49,107801,1409],{"class":66},[49,107803,107804],{"class":51,"line":9229},[49,107805,3654],{"emptyLinePlaceholder":1330},[49,107807,107808,107810,107812,107814,107816,107818,107821],{"class":51,"line":9235},[49,107809,4455],{"class":109},[49,107811,32864],{"class":66},[49,107813,27292],{"class":109},[49,107815,33691],{"class":73},[49,107817,1403],{"class":66},[49,107819,107820],{"class":73},"2000",[49,107822,32034],{"class":66},[49,107824,107825,107828,107830,107832,107834],{"class":51,"line":9262},[49,107826,107827],{"class":66},"        t ",[49,107829,1448],{"class":109},[49,107831,32864],{"class":66},[49,107833,1846],{"class":109},[49,107835,107836],{"class":66}," model.opt.timestep\n",[49,107838,107839,107842,107844,107846,107848,107851,107853,107856,107858,107860,107863,107865,107867,107869],{"class":51,"line":9267},[49,107840,107841],{"class":66},"        data.ctrl[",[49,107843,80],{"class":73},[49,107845,5697],{"class":66},[49,107847,1448],{"class":109},[49,107849,107850],{"class":73}," 1.5",[49,107852,7770],{"class":109},[49,107854,107855],{"class":66}," math.sin(",[49,107857,106484],{"class":73},[49,107859,7770],{"class":109},[49,107861,107862],{"class":66}," math.pi ",[49,107864,1846],{"class":109},[49,107866,63105],{"class":73},[49,107868,7770],{"class":109},[49,107870,107871],{"class":66}," t)\n",[49,107873,107874],{"class":51,"line":9273},[49,107875,102740],{"class":66},[49,107877,107878],{"class":51,"line":9285},[49,107879,3654],{"emptyLinePlaceholder":1330},[49,107881,107882,107884,107886,107889],{"class":51,"line":9297},[49,107883,32547],{"class":73},[49,107885,1403],{"class":66},[49,107887,107888],{"class":1505},"\"time:\"",[49,107890,102702],{"class":66},[49,107892,107893,107895,107897,107900,107902,107904],{"class":51,"line":9309},[49,107894,32547],{"class":73},[49,107896,1403],{"class":66},[49,107898,107899],{"class":1505},"\"joint qpos:\"",[49,107901,106154],{"class":66},[49,107903,1685],{"class":73},[49,107905,31745],{"class":66},[49,107907,107908,107910,107912,107915,107917,107919],{"class":51,"line":10968},[49,107909,32547],{"class":73},[49,107911,1403],{"class":66},[49,107913,107914],{"class":1505},"\"joint qvel:\"",[49,107916,106170],{"class":66},[49,107918,1685],{"class":73},[49,107920,31745],{"class":66},[49,107922,107923,107925,107927,107930],{"class":51,"line":10993},[49,107924,32547],{"class":73},[49,107926,1403],{"class":66},[49,107928,107929],{"class":1505},"\"last ctrl:\"",[49,107931,107932],{"class":66},", data.ctrl.copy())\n",[49,107934,107935],{"class":51,"line":11016},[49,107936,3654],{"emptyLinePlaceholder":1330},[49,107938,107939],{"class":51,"line":11040},[49,107940,3654],{"emptyLinePlaceholder":1330},[49,107942,107943,107945,107947,107949,107951],{"class":51,"line":11045},[49,107944,2787],{"class":109},[49,107946,32468],{"class":73},[49,107948,102783],{"class":109},[49,107950,102786],{"class":1505},[49,107952,4993],{"class":66},[49,107954,107955],{"class":51,"line":11050},[49,107956,102793],{"class":66},[19,107958,104794],{},[39,107960,107962],{"className":25070,"code":107961,"language":25072,"meta":44,"style":44},"touch ch4_joint_motor.py\n",[46,107963,107964],{"__ignoreMap":44},[49,107965,107966,107968],{"class":51,"line":52},[49,107967,102507],{"class":62},[49,107969,107970],{"class":1505}," ch4_joint_motor.py\n",[19,107972,103525],{},[39,107974,107976],{"className":25070,"code":107975,"language":25072,"meta":44,"style":44},"python ch4_joint_motor.py\n",[46,107977,107978],{"__ignoreMap":44},[49,107979,107980,107982],{"class":51,"line":52},[49,107981,31628],{"class":62},[49,107983,107970],{"class":1505},[183,107985,102796],{"id":102796},[19,107987,107988],{},"检查 actuator 数量：",[39,107990,107992],{"className":31626,"code":107991,"language":31628,"meta":44,"style":44},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[46,107993,107994,108006],{"__ignoreMap":44},[49,107995,107996,107998,108000,108002,108004],{"class":51,"line":52},[49,107997,2787],{"class":109},[49,107999,107782],{"class":66},[49,108001,22198],{"class":109},[49,108003,26367],{"class":73},[49,108005,4993],{"class":66},[49,108007,108008,108010,108012,108014,108016],{"class":51,"line":59},[49,108009,105119],{"class":109},[49,108011,104659],{"class":73},[49,108013,1403],{"class":66},[49,108015,107799],{"class":1505},[49,108017,1409],{"class":66},[19,108019,108020,108022,108023,108025],{},[46,108021,103382],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[46,108024,102300],{}," 长度应该是 1。",[19,108027,108028],{},"产生正弦控制信号：",[39,108030,108032],{"className":31626,"code":108031,"language":31628,"meta":44,"style":44},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[46,108033,108034],{"__ignoreMap":44},[49,108035,108036,108038,108040,108042,108044,108046,108048,108050,108052,108054,108056,108058,108060,108062],{"class":51,"line":52},[49,108037,107095],{"class":66},[49,108039,80],{"class":73},[49,108041,5697],{"class":66},[49,108043,1448],{"class":109},[49,108045,107850],{"class":73},[49,108047,7770],{"class":109},[49,108049,107855],{"class":66},[49,108051,106484],{"class":73},[49,108053,7770],{"class":109},[49,108055,107862],{"class":66},[49,108057,1846],{"class":109},[49,108059,63105],{"class":73},[49,108061,7770],{"class":109},[49,108063,107871],{"class":66},[19,108065,108066],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108068,102897],{},[39,108070,108071],{"className":31626,"code":105729,"language":31628,"meta":44,"style":44},[46,108072,108073],{"__ignoreMap":44},[49,108074,108075],{"class":51,"line":52},[49,108076,105729],{"class":66},[19,108078,108079],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[183,108081,102932],{"id":102932},[39,108083,108085],{"className":31626,"code":108084,"language":31628,"meta":44,"style":44},"import math\n",[46,108086,108087],{"__ignoreMap":44},[49,108088,108089,108091],{"class":51,"line":52},[49,108090,31640],{"class":109},[49,108092,107574],{"class":66},[19,108094,108095,108096,102242,108099,108102],{},"导入 Python 标准库里的数学模块。后面要用 ",[46,108097,108098],{},"math.sin",[46,108100,108101],{},"math.pi"," 生成周期变化的控制信号。",[39,108104,108105],{"className":31626,"code":104910,"language":31628,"meta":44,"style":44},[46,108106,108107,108113],{"__ignoreMap":44},[49,108108,108109,108111],{"class":51,"line":52},[49,108110,31640],{"class":109},[49,108112,102525],{"class":66},[49,108114,108115,108117,108119,108121],{"class":51,"line":59},[49,108116,31640],{"class":109},[49,108118,32628],{"class":66},[49,108120,32631],{"class":109},[49,108122,32634],{"class":66},[19,108124,108125],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[39,108127,108128],{"className":54309,"code":107411,"language":54311,"meta":44,"style":44},[46,108129,108130],{"__ignoreMap":44},[49,108131,108132,108134,108136,108138,108140,108142,108144,108146,108148,108150,108152,108154,108156,108158,108160],{"class":51,"line":52},[49,108133,2300],{"class":66},[49,108135,104180],{"class":147},[49,108137,16171],{"class":62},[49,108139,1448],{"class":66},[49,108141,107243],{"class":1505},[49,108143,55065],{"class":62},[49,108145,1448],{"class":66},[49,108147,107243],{"class":1505},[49,108149,107252],{"class":62},[49,108151,1448],{"class":66},[49,108153,107257],{"class":1505},[49,108155,107440],{"class":62},[49,108157,1448],{"class":66},[49,108159,107445],{"class":1505},[49,108161,102368],{"class":66},[19,108163,108164,108165,108167,108168,108170,108171,108173],{},"这行定义关节。",[46,108166,107064],{}," 表示旋转关节。",[46,108169,107463],{}," 表示绕 y 轴旋转。",[46,108172,107469],{}," 表示有一点阻尼，运动不会完全无损耗。",[39,108175,108177],{"className":54309,"code":108176,"language":54311,"meta":44,"style":44},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[46,108178,108179],{"__ignoreMap":44},[49,108180,108181,108183,108185,108187,108189,108192,108194,108196,108199,108202,108204,108207,108209,108211,108213,108215,108217,108220],{"class":51,"line":52},[49,108182,2300],{"class":66},[49,108184,102344],{"class":147},[49,108186,16171],{"class":62},[49,108188,1448],{"class":66},[49,108190,108191],{"class":1505},"\"link_geom\"",[49,108193,55065],{"class":62},[49,108195,1448],{"class":66},[49,108197,108198],{"class":1505},"\"capsule\"",[49,108200,108201],{"class":62}," fromto",[49,108203,1448],{"class":66},[49,108205,108206],{"class":1505},"\"0 0 0 0 0 0.5\"",[49,108208,102360],{"class":62},[49,108210,1448],{"class":66},[49,108212,105002],{"class":1505},[49,108214,103225],{"class":62},[49,108216,1448],{"class":66},[49,108218,108219],{"class":1505},"\"0.5\"",[49,108221,102368],{"class":66},[19,108223,108224,108225,108227,108228,108230,108231,108234,108235,29633,108238,108240],{},"这行定义摆杆的形状。",[46,108226,104389],{}," 是胶囊体，适合表示杆子。",[46,108229,104400],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[46,108232,108233],{},"(0,0,0)"," 延伸到 ",[46,108236,108237],{},"(0,0,0.5)",[46,108239,104394],{}," 是半径。",[39,108242,108243],{"className":54309,"code":107477,"language":54311,"meta":44,"style":44},[46,108244,108245],{"__ignoreMap":44},[49,108246,108247,108249,108251,108253,108255,108257,108259,108261,108263,108265,108267,108269,108271,108273,108275,108277,108279,108281],{"class":51,"line":52},[49,108248,2300],{"class":66},[49,108250,107298],{"class":147},[49,108252,16171],{"class":62},[49,108254,1448],{"class":66},[49,108256,107305],{"class":1505},[49,108258,107308],{"class":62},[49,108260,1448],{"class":66},[49,108262,107243],{"class":1505},[49,108264,107315],{"class":62},[49,108266,1448],{"class":66},[49,108268,4932],{"class":1505},[49,108270,107322],{"class":62},[49,108272,1448],{"class":66},[49,108274,107327],{"class":1505},[49,108276,107330],{"class":62},[49,108278,1448],{"class":66},[49,108280,107335],{"class":1505},[49,108282,102368],{"class":66},[19,108284,108285,108286,108288,108289,108292,108293,108295],{},"这行定义电机。它作用在 ",[46,108287,107064],{}," 关节上。",[46,108290,108291],{},"gear"," 可以理解成放大倍数。",[46,108294,107079],{}," 限制控制输入范围。",[39,108297,108298],{"className":31626,"code":107991,"language":31628,"meta":44,"style":44},[46,108299,108300,108312],{"__ignoreMap":44},[49,108301,108302,108304,108306,108308,108310],{"class":51,"line":52},[49,108303,2787],{"class":109},[49,108305,107782],{"class":66},[49,108307,22198],{"class":109},[49,108309,26367],{"class":73},[49,108311,4993],{"class":66},[49,108313,108314,108316,108318,108320,108322],{"class":51,"line":59},[49,108315,105119],{"class":109},[49,108317,104659],{"class":73},[49,108319,1403],{"class":66},[49,108321,107799],{"class":1505},[49,108323,1409],{"class":66},[19,108325,108326,108328],{},[46,108327,103382],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[39,108330,108332],{"className":31626,"code":108331,"language":31628,"meta":44,"style":44},"for step in range(2000):\n",[46,108333,108334],{"__ignoreMap":44},[49,108335,108336,108338,108340,108342,108344,108346,108348],{"class":51,"line":52},[49,108337,4279],{"class":109},[49,108339,32864],{"class":66},[49,108341,27292],{"class":109},[49,108343,33691],{"class":73},[49,108345,1403],{"class":66},[49,108347,107820],{"class":73},[49,108349,32034],{"class":66},[19,108351,108352,108353,108355,108356,108359],{},"循环 2000 步。这里没有用 ",[46,108354,2381],{},"，而是用 ",[46,108357,108358],{},"step","，因为后面要用当前步数计算时间。",[39,108361,108363],{"className":31626,"code":108362,"language":31628,"meta":44,"style":44},"t = step * model.opt.timestep\n",[46,108364,108365],{"__ignoreMap":44},[49,108366,108367,108370,108372,108374,108376],{"class":51,"line":52},[49,108368,108369],{"class":66},"t ",[49,108371,1448],{"class":109},[49,108373,32864],{"class":66},[49,108375,1846],{"class":109},[49,108377,107836],{"class":66},[19,108379,108380],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[39,108382,108383],{"className":31626,"code":108031,"language":31628,"meta":44,"style":44},[46,108384,108385],{"__ignoreMap":44},[49,108386,108387,108389,108391,108393,108395,108397,108399,108401,108403,108405,108407,108409,108411,108413],{"class":51,"line":52},[49,108388,107095],{"class":66},[49,108390,80],{"class":73},[49,108392,5697],{"class":66},[49,108394,1448],{"class":109},[49,108396,107850],{"class":73},[49,108398,7770],{"class":109},[49,108400,107855],{"class":66},[49,108402,106484],{"class":73},[49,108404,7770],{"class":109},[49,108406,107862],{"class":66},[49,108408,1846],{"class":109},[49,108410,63105],{"class":73},[49,108412,7770],{"class":109},[49,108414,107871],{"class":66},[19,108416,108417],{},"这行给电机输入一个正弦波。拆开看：",[591,108419,108420,108426,108432],{},[26,108421,108422,108425],{},[46,108423,108424],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[26,108427,108428,108431],{},[46,108429,108430],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[26,108433,108434,108437],{},[46,108435,108436],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108439,108440],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[39,108442,108444],{"className":31626,"code":108443,"language":31628,"meta":44,"style":44},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[46,108445,108446],{"__ignoreMap":44},[49,108447,108448,108450,108452,108454,108456,108458],{"class":51,"line":52},[49,108449,31663],{"class":73},[49,108451,1403],{"class":66},[49,108453,107899],{"class":1505},[49,108455,106154],{"class":66},[49,108457,1685],{"class":73},[49,108459,31745],{"class":66},[19,108461,108462,108463,108465],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[46,108464,102294],{}," 只有一个数。",[14,108467,103540],{"id":103539},[19,108469,108470],{},"输出类似:",[39,108472,108475],{"className":108473,"code":108474,"language":267,"meta":44},[1094],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[46,108476,108474],{"__ignoreMap":44},[19,108478,108479,108480,108482],{},"这里 ",[46,108481,107350],{}," 是电机输入。",[19,108484,108485,108488,108489,108492],{},[46,108486,108487],{},"joint qpos"," 是关节角度，单位通常是弧度。",[46,108490,108491],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108494,108495],{},"角度单位提示：",[39,108497,108500],{"className":108498,"code":108499,"language":267,"meta":44},[1094],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[46,108501,108499],{"__ignoreMap":44},[19,108503,108504,108505,108507,108508,108510],{},"如果你看到 ",[46,108506,105254],{}," 是 ",[46,108509,36577],{},"，大约就是 28.6 度。",[14,108512,103572],{"id":103571},[591,108514,108515,108522,108525,108532,108535,108543,108551],{},[26,108516,103635,108517,103638,108519,29633],{},[46,108518,107535],{},[46,108520,108521],{},"gear=\"5\"",[26,108523,108524],{},"重新运行，观察关节运动是否更剧烈。",[26,108526,103635,108527,103638,108529,29633],{},[46,108528,107079],{},[46,108530,108531],{},"-0.2 0.2",[26,108533,108534],{},"重新运行，观察控制能力是否变弱。",[26,108536,108537,108538,108540,108541,29633],{},"去掉 actuator，确认 ",[46,108539,103382],{}," 变成 ",[46,108542,80],{},[26,108544,103635,108545,103638,108547,108550],{},[46,108546,107469],{},[46,108548,108549],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[26,108552,103635,108553,103638,108555,108558],{},[46,108554,107463],{},[46,108556,108557],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108560,103677],{"id":103676},[183,108562,108564],{"id":108563},"indexerror-index-0-is-out-of-bounds",[46,108565,108566],{},"IndexError: index 0 is out of bounds",[19,108568,108569,108570,108572],{},"原因是 ",[46,108571,107216],{},"，没有 actuator。",[183,108574,108575],{"id":108575},"关节几乎不动",[19,108577,108578],{},"可能原因:",[591,108580,108581,108586,108590,108596],{},[26,108582,108583,108585],{},[46,108584,108291],{}," 太小",[26,108587,108588,108585],{},[46,108589,107079],{},[26,108591,108592,108595],{},[46,108593,108594],{},"damping"," 太大",[26,108597,108598],{},"重力方向导致运动不明显",[183,108600,108601],{"id":108601},"模型编译失败",[19,108603,108604,108605,108607],{},"检查 actuator 引用的 ",[46,108606,107526],{}," 是否存在，joint 名称是否拼写一致。",[183,108609,108611,108613],{"id":108610},"datactrl0-写了但没有效果",[46,108612,107350],{}," 写了但没有效果",[19,108615,103799],{},[591,108617,108618,108623,108626,108631,108636],{},[26,108619,108620,108622],{},[46,108621,103382],{}," 是否大于 0。",[26,108624,108625],{},"motor 是否引用了正确 joint。",[26,108627,108628,108630],{},[46,108629,108291],{}," 是否太小。",[26,108632,108633,108635],{},[46,108634,107079],{}," 是否把输入限制得太小。",[26,108637,108638],{},"body 是否真的有可动 joint。",[183,108640,108641],{"id":108641},"控制输入超过范围会怎样",[19,108643,108644],{},"如果设置了：",[39,108646,108648],{"className":54309,"code":108647,"language":54311,"meta":44,"style":44},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[46,108649,108650],{"__ignoreMap":44},[49,108651,108652],{"class":51,"line":52},[49,108653,108647],{"class":66},[19,108655,108656],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[39,108658,108660],{"className":31626,"code":108659,"language":31628,"meta":44,"style":44},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[46,108661,108662,108682],{"__ignoreMap":44},[49,108663,108664,108667,108669,108672,108674,108676,108678,108680],{"class":51,"line":52},[49,108665,108666],{"class":66},"action ",[49,108668,1448],{"class":109},[49,108670,108671],{"class":66}," np.clip(action, ",[49,108673,1923],{"class":109},[49,108675,106484],{"class":73},[49,108677,13687],{"class":66},[49,108679,106484],{"class":73},[49,108681,1409],{"class":66},[49,108683,108684,108686,108688,108690,108692],{"class":51,"line":59},[49,108685,107095],{"class":66},[49,108687,80],{"class":73},[49,108689,5697],{"class":66},[49,108691,1448],{"class":109},[49,108693,108694],{"class":66}," action\n",[14,108696,103831],{"id":103830},[19,108698,108699],{},"这一章建立了控制任务的基本形式：",[39,108701,108704],{"className":108702,"code":108703,"language":267,"meta":44},[1094],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[46,108705,108703],{"__ignoreMap":44},[19,108707,108708],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1305,108710,108711],{},"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":44,"searchDepth":59,"depth":59,"links":108713},[108714,108715,108716,108721,108725,108726,108727,108735],{"id":101870,"depth":59,"text":101871},{"id":101993,"depth":59,"text":101994},{"id":102268,"depth":59,"text":102269,"children":108717},[108718,108719,108720],{"id":107357,"depth":70,"text":107358},{"id":107407,"depth":70,"text":107408},{"id":107473,"depth":70,"text":107474},{"id":102476,"depth":59,"text":102477,"children":108722},[108723,108724],{"id":102796,"depth":70,"text":102796},{"id":102932,"depth":70,"text":102932},{"id":103539,"depth":59,"text":103540},{"id":103571,"depth":59,"text":103572},{"id":103676,"depth":59,"text":103677,"children":108728},[108729,108730,108731,108732,108734],{"id":108563,"depth":70,"text":108566},{"id":108575,"depth":70,"text":108575},{"id":108601,"depth":70,"text":108601},{"id":108610,"depth":70,"text":108733},"data.ctrl[0] 写了但没有效果",{"id":108641,"depth":70,"text":108641},{"id":103830,"depth":59,"text":103831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107045,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108742,"title":108743,"body":108744,"description":44,"extension":1328,"meta":110653,"navigation":1330,"path":110654,"seo":110655,"stem":110656,"__hash__":110657},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108745,"toc":110629},[108746,108749,108751,108754,108762,108765,108782,108785,108810,108813,108859,108861,108863,108918,108920,108939,108941,108984,108987,109004,109007,109023,109033,109040,109042,109045,109048,109082,109085,109133,109137,109140,109154,109163,109167,109170,109195,109198,109202,109215,109218,109224,109227,109242,109244,109247,109507,109509,109521,109524,109836,109838,109850,109852,109855,109870,109875,109878,109900,109903,109906,109940,109943,109947,109958,109961,109978,109981,109995,110002,110022,110029,110043,110046,110058,110073,110093,110096,110118,110121,110125,110140,110151,110166,110169,110199,110215,110244,110252,110276,110279,110297,110307,110319,110326,110335,110341,110350,110353,110355,110364,110367,110382,110384,110387,110398,110401,110412,110415,110433,110435,110452,110455,110483,110485,110489,110492,110522,110528,110531,110535,110543,110546,110548,110569,110572,110575,110591,110594,110610,110612,110615,110626],[10,108747,108743],{"id":108748},"_5viewer-可视化与-renderer-离屏渲染",[14,108750,101871],{"id":101870},[19,108752,108753],{},"本章掌握两类可视化方式:",[591,108755,108756,108759],{},[26,108757,108758],{},"交互式 viewer: 适合人工观察仿真",[26,108760,108761],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108763,108764],{},"使用官方接口:",[39,108766,108768],{"className":31626,"code":108767,"language":31628,"meta":44,"style":44},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[46,108769,108770,108777],{"__ignoreMap":44},[49,108771,108772,108774],{"class":51,"line":52},[49,108773,31640],{"class":109},[49,108775,108776],{"class":66}," mujoco.viewer\n",[49,108778,108779],{"class":51,"line":59},[49,108780,108781],{"class":66},"mujoco.viewer.launch_passive(model, data)\n",[19,108783,108784],{},"以及:",[39,108786,108788],{"className":31626,"code":108787,"language":31628,"meta":44,"style":44},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[46,108789,108790,108800],{"__ignoreMap":44},[49,108791,108792,108795,108797],{"class":51,"line":52},[49,108793,108794],{"class":66},"renderer ",[49,108796,1448],{"class":109},[49,108798,108799],{"class":66}," mujoco.Renderer(model)\n",[49,108801,108802,108805,108807],{"class":51,"line":59},[49,108803,108804],{"class":66},"image ",[49,108806,1448],{"class":109},[49,108808,108809],{"class":66}," renderer.render()\n",[19,108811,108812],{},"新手建议先理解二者区别：",[293,108814,108815,108831],{},[296,108816,108817],{},[299,108818,108819,108822,108825,108828],{},[302,108820,108821],{"align":304},"工具",[302,108823,108824],{"align":304},"用途",[302,108826,108827],{"align":304},"是否打开窗口",[302,108829,108830],{"align":304},"常见场景",[310,108832,108833,108846],{},[299,108834,108835,108838,108841,108843],{},[315,108836,108837],{"align":304},"Viewer",[315,108839,108840],{"align":304},"人眼实时观察仿真",[315,108842,105889],{"align":304},[315,108844,108845],{"align":304},"调试模型、看控制效果",[299,108847,108848,108851,108854,108856],{},[315,108849,108850],{"align":304},"Renderer",[315,108852,108853],{"align":304},"生成图像数组",[315,108855,105902],{"align":304},[315,108857,108858],{"align":304},"保存图片、训练视觉策略、服务器批量采集",[14,108860,101994],{"id":101993},[19,108862,101997],{},[39,108864,108866],{"className":25070,"code":108865,"language":25072,"meta":44,"style":44},"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",[46,108867,108868,108880,108890,108898,108906],{"__ignoreMap":44},[49,108869,108870,108872,108874,108876,108878],{"class":51,"line":52},[49,108871,25825],{"class":62},[49,108873,27564],{"class":1505},[49,108875,25082],{"class":1505},[49,108877,27649],{"class":73},[49,108879,25927],{"class":73},[49,108881,108882,108884,108886,108888],{"class":51,"line":59},[49,108883,102032],{"class":1505},[49,108885,102035],{"class":1505},[49,108887,102038],{"class":1505},[49,108889,25927],{"class":73},[49,108891,108892,108894,108896],{"class":51,"line":70},[49,108893,102045],{"class":1505},[49,108895,102048],{"class":1505},[49,108897,25927],{"class":73},[49,108899,108900,108902,108904],{"class":51,"line":86},[49,108901,102055],{"class":1505},[49,108903,102058],{"class":1505},[49,108905,25927],{"class":73},[49,108907,108908,108910,108912,108914,108916],{"class":51,"line":98},[49,108909,102065],{"class":1505},[49,108911,102068],{"class":1505},[49,108913,102071],{"class":1505},[49,108915,102074],{"class":1505},[49,108917,103740],{"class":1505},[19,108919,104043],{},[39,108921,108923],{"className":25070,"code":108922,"language":25072,"meta":44,"style":44},"pip install \"mujoco>=2.3\" numpy pillow\n",[46,108924,108925],{"__ignoreMap":44},[49,108926,108927,108929,108931,108933,108936],{"class":51,"line":52},[49,108928,25079],{"class":62},[49,108930,25082],{"class":1505},[49,108932,102154],{"class":1505},[49,108934,108935],{"class":1505}," numpy",[49,108937,108938],{"class":1505}," pillow\n",[19,108940,104060],{},[39,108942,108944],{"className":25070,"code":108943,"language":25072,"meta":44,"style":44},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[46,108945,108946,108963,108972],{"__ignoreMap":44},[49,108947,108948,108950,108952,108954,108957,108959,108961],{"class":51,"line":52},[49,108949,31578],{"class":62},[49,108951,30424],{"class":1505},[49,108953,26364],{"class":73},[49,108955,108956],{"class":1505}," mujoco-render",[49,108958,102199],{"class":1505},[49,108960,102202],{"class":73},[49,108962,102205],{"class":73},[49,108964,108965,108967,108969],{"class":51,"line":59},[49,108966,31578],{"class":62},[49,108968,102212],{"class":1505},[49,108970,108971],{"class":1505}," mujoco-render\n",[49,108973,108974,108976,108978,108980,108982],{"class":51,"line":70},[49,108975,25079],{"class":62},[49,108977,25082],{"class":1505},[49,108979,102154],{"class":1505},[49,108981,108935],{"class":1505},[49,108983,108938],{"class":1505},[19,108985,108986],{},"离屏渲染后端:",[39,108988,108990],{"className":25070,"code":108989,"language":25072,"meta":44,"style":44},"export MUJOCO_GL=egl\n",[46,108991,108992],{"__ignoreMap":44},[49,108993,108994,108996,108999,109001],{"class":51,"line":52},[49,108995,26291],{"class":109},[49,108997,108998],{"class":66}," MUJOCO_GL",[49,109000,1448],{"class":109},[49,109002,109003],{"class":66},"egl\n",[19,109005,109006],{},"或:",[39,109008,109010],{"className":25070,"code":109009,"language":25072,"meta":44,"style":44},"export MUJOCO_GL=osmesa\n",[46,109011,109012],{"__ignoreMap":44},[49,109013,109014,109016,109018,109020],{"class":51,"line":52},[49,109015,26291],{"class":109},[49,109017,108998],{"class":66},[49,109019,1448],{"class":109},[49,109021,109022],{"class":66},"osmesa\n",[19,109024,109025,109026,109029,109030,29633],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[46,109027,109028],{},"egl"," 失败，再尝试 ",[46,109031,109032],{},"osmesa",[19,109034,109035,109036,109039],{},"如果你在本机桌面环境运行，通常先不要设置 ",[46,109037,109038],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109041,102269],{"id":102268},[19,109043,109044],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109046,109047],{},"典型 viewer 流程:",[39,109049,109051],{"className":31626,"code":109050,"language":31628,"meta":44,"style":44},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[46,109052,109053,109066,109073,109077],{"__ignoreMap":44},[49,109054,109055,109058,109061,109063],{"class":51,"line":52},[49,109056,109057],{"class":109},"with",[49,109059,109060],{"class":66}," mujoco.viewer.launch_passive(model, data) ",[49,109062,32631],{"class":109},[49,109064,109065],{"class":66}," viewer:\n",[49,109067,109068,109070],{"class":51,"line":59},[49,109069,3505],{"class":109},[49,109071,109072],{"class":66}," viewer.is_running():\n",[49,109074,109075],{"class":51,"line":70},[49,109076,102740],{"class":66},[49,109078,109079],{"class":51,"line":86},[49,109080,109081],{"class":66},"        viewer.sync()\n",[19,109083,109084],{},"典型 renderer 流程:",[39,109086,109088],{"className":31626,"code":109087,"language":31628,"meta":44,"style":44},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[46,109089,109090,109116,109120,109125],{"__ignoreMap":44},[49,109091,109092,109094,109096,109099,109101,109103,109105,109107,109109,109111,109114],{"class":51,"line":52},[49,109093,108794],{"class":66},[49,109095,1448],{"class":109},[49,109097,109098],{"class":66}," mujoco.Renderer(model, ",[49,109100,26230],{"class":6468},[49,109102,1448],{"class":109},[49,109104,43590],{"class":73},[49,109106,13687],{"class":66},[49,109108,26226],{"class":6468},[49,109110,1448],{"class":109},[49,109112,109113],{"class":73},"640",[49,109115,1409],{"class":66},[49,109117,109118],{"class":51,"line":59},[49,109119,105729],{"class":66},[49,109121,109122],{"class":51,"line":70},[49,109123,109124],{"class":66},"renderer.update_scene(data)\n",[49,109126,109127,109129,109131],{"class":51,"line":86},[49,109128,108804],{"class":66},[49,109130,1448],{"class":109},[49,109132,108809],{"class":66},[183,109134,109136],{"id":109135},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109138,109139],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[39,109141,109143],{"className":31626,"code":109142,"language":31628,"meta":44,"style":44},"mujoco.mj_step(model, data)\nviewer.sync()\n",[46,109144,109145,109149],{"__ignoreMap":44},[49,109146,109147],{"class":51,"line":52},[49,109148,105729],{"class":66},[49,109150,109151],{"class":51,"line":59},[49,109152,109153],{"class":66},"viewer.sync()\n",[19,109155,109156,109158,109159,109162],{},[46,109157,102439],{}," 负责算物理，",[46,109160,109161],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[183,109164,109166],{"id":109165},"为什么要-sleep","为什么要 sleep",[19,109168,109169],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[39,109171,109173],{"className":31626,"code":109172,"language":31628,"meta":44,"style":44},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[46,109174,109175],{"__ignoreMap":44},[49,109176,109177,109180,109182,109185,109187,109190,109192],{"class":51,"line":52},[49,109178,109179],{"class":66},"sleep_time ",[49,109181,1448],{"class":109},[49,109183,109184],{"class":66}," model.opt.timestep ",[49,109186,1923],{"class":109},[49,109188,109189],{"class":66}," (time.time() ",[49,109191,1923],{"class":109},[49,109193,109194],{"class":66}," step_start)\n",[19,109196,109197],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[183,109199,109201],{"id":109200},"renderer-输出是什么","renderer 输出是什么",[39,109203,109205],{"className":31626,"code":109204,"language":31628,"meta":44,"style":44},"image = renderer.render()\n",[46,109206,109207],{"__ignoreMap":44},[49,109208,109209,109211,109213],{"class":51,"line":52},[49,109210,108804],{"class":66},[49,109212,1448],{"class":109},[49,109214,108809],{"class":66},[19,109216,109217],{},"得到的是 NumPy 数组，形状通常是：",[39,109219,109222],{"className":109220,"code":109221,"language":267,"meta":44},[1094],"(height, width, 3)\n",[46,109223,109221],{"__ignoreMap":44},[19,109225,109226],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[39,109228,109230],{"className":31626,"code":109229,"language":31628,"meta":44,"style":44},"Image.fromarray(image).save(\"render_output.png\")\n",[46,109231,109232],{"__ignoreMap":44},[49,109233,109234,109237,109240],{"class":51,"line":52},[49,109235,109236],{"class":66},"Image.fromarray(image).save(",[49,109238,109239],{"class":1505},"\"render_output.png\"",[49,109241,1409],{"class":66},[14,109243,102477],{"id":102476},[19,109245,109246],{},"交互式 Viewer:",[39,109248,109250],{"className":31626,"code":109249,"language":31628,"meta":44,"style":44},"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",[46,109251,109252,109258,109262,109268,109274,109278,109282,109290,109295,109299,109303,109307,109312,109317,109321,109325,109329,109334,109338,109342,109346,109350,109354,109358,109370,109382,109390,109394,109404,109424,109434,109439,109444,109448,109465,109478,109483,109487,109491,109503],{"__ignoreMap":44},[49,109253,109254,109256],{"class":51,"line":52},[49,109255,31640],{"class":109},[49,109257,33077],{"class":66},[49,109259,109260],{"class":51,"line":59},[49,109261,3654],{"emptyLinePlaceholder":1330},[49,109263,109264,109266],{"class":51,"line":70},[49,109265,31640],{"class":109},[49,109267,102525],{"class":66},[49,109269,109270,109272],{"class":51,"line":86},[49,109271,31640],{"class":109},[49,109273,108776],{"class":66},[49,109275,109276],{"class":51,"line":98},[49,109277,3654],{"emptyLinePlaceholder":1330},[49,109279,109280],{"class":51,"line":121},[49,109281,3654],{"emptyLinePlaceholder":1330},[49,109283,109284,109286,109288],{"class":51,"line":134},[49,109285,102538],{"class":73},[49,109287,14816],{"class":109},[49,109289,102543],{"class":1505},[49,109291,109292],{"class":51,"line":1085},[49,109293,109294],{"class":1505},"\u003Cmujoco model=\"viewer_demo\">\n",[49,109296,109297],{"class":51,"line":2574},[49,109298,102553],{"class":1505},[49,109300,109301],{"class":51,"line":2586},[49,109302,3654],{"emptyLinePlaceholder":1330},[49,109304,109305],{"class":51,"line":2867},[49,109306,102562],{"class":1505},[49,109308,109309],{"class":51,"line":2872},[49,109310,109311],{"class":1505},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[49,109313,109314],{"class":51,"line":2878},[49,109315,109316],{"class":1505},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[49,109318,109319],{"class":51,"line":2883},[49,109320,3654],{"emptyLinePlaceholder":1330},[49,109322,109323],{"class":51,"line":2897},[49,109324,102576],{"class":1505},[49,109326,109327],{"class":51,"line":2902},[49,109328,102581],{"class":1505},[49,109330,109331],{"class":51,"line":2908},[49,109332,109333],{"class":1505},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[49,109335,109336],{"class":51,"line":2929},[49,109337,102591],{"class":1505},[49,109339,109340],{"class":51,"line":2934},[49,109341,102596],{"class":1505},[49,109343,109344],{"class":51,"line":2948},[49,109345,102601],{"class":1505},[49,109347,109348],{"class":51,"line":2953},[49,109349,96923],{"class":1505},[49,109351,109352],{"class":51,"line":2982},[49,109353,3654],{"emptyLinePlaceholder":1330},[49,109355,109356],{"class":51,"line":2987},[49,109357,3654],{"emptyLinePlaceholder":1330},[49,109359,109360,109362,109364,109366,109368],{"class":51,"line":3004},[49,109361,33195],{"class":109},[49,109363,3227],{"class":62},[49,109365,102622],{"class":66},[49,109367,96911],{"class":73},[49,109369,4993],{"class":66},[49,109371,109372,109374,109376,109378,109380],{"class":51,"line":3009},[49,109373,102631],{"class":66},[49,109375,1448],{"class":109},[49,109377,102636],{"class":66},[49,109379,102538],{"class":73},[49,109381,1409],{"class":66},[49,109383,109384,109386,109388],{"class":51,"line":3014},[49,109385,102645],{"class":66},[49,109387,1448],{"class":109},[49,109389,102650],{"class":66},[49,109391,109392],{"class":51,"line":3019},[49,109393,3654],{"emptyLinePlaceholder":1330},[49,109395,109396,109398,109400,109402],{"class":51,"line":3033},[49,109397,35426],{"class":109},[49,109399,109060],{"class":66},[49,109401,32631],{"class":109},[49,109403,109065],{"class":66},[49,109405,109406,109409,109412,109414,109417,109419,109422],{"class":51,"line":3038},[49,109407,109408],{"class":109},"        while",[49,109410,109411],{"class":66}," viewer.is_running() ",[49,109413,31710],{"class":109},[49,109415,109416],{"class":66}," data.time ",[49,109418,2300],{"class":109},[49,109420,109421],{"class":73}," 5.0",[49,109423,4993],{"class":66},[49,109425,109426,109429,109431],{"class":51,"line":3831},[49,109427,109428],{"class":66},"            step_start ",[49,109430,1448],{"class":109},[49,109432,109433],{"class":66}," time.time()\n",[49,109435,109436],{"class":51,"line":3845},[49,109437,109438],{"class":66},"            mujoco.mj_step(model, data)\n",[49,109440,109441],{"class":51,"line":3853},[49,109442,109443],{"class":66},"            viewer.sync()\n",[49,109445,109446],{"class":51,"line":3858},[49,109447,3654],{"emptyLinePlaceholder":1330},[49,109449,109450,109453,109455,109457,109459,109461,109463],{"class":51,"line":3864},[49,109451,109452],{"class":66},"            sleep_time ",[49,109454,1448],{"class":109},[49,109456,109184],{"class":66},[49,109458,1923],{"class":109},[49,109460,109189],{"class":66},[49,109462,1923],{"class":109},[49,109464,109194],{"class":66},[49,109466,109467,109469,109472,109474,109476],{"class":51,"line":3870},[49,109468,5896],{"class":109},[49,109470,109471],{"class":66}," sleep_time ",[49,109473,2349],{"class":109},[49,109475,5347],{"class":73},[49,109477,4993],{"class":66},[49,109479,109480],{"class":51,"line":3875},[49,109481,109482],{"class":66},"                time.sleep(sleep_time)\n",[49,109484,109485],{"class":51,"line":9200},[49,109486,3654],{"emptyLinePlaceholder":1330},[49,109488,109489],{"class":51,"line":9224},[49,109490,3654],{"emptyLinePlaceholder":1330},[49,109492,109493,109495,109497,109499,109501],{"class":51,"line":9229},[49,109494,2787],{"class":109},[49,109496,32468],{"class":73},[49,109498,102783],{"class":109},[49,109500,102786],{"class":1505},[49,109502,4993],{"class":66},[49,109504,109505],{"class":51,"line":9235},[49,109506,102793],{"class":66},[19,109508,104794],{},[39,109510,109512],{"className":25070,"code":109511,"language":25072,"meta":44,"style":44},"touch ch5_viewer.py\n",[46,109513,109514],{"__ignoreMap":44},[49,109515,109516,109518],{"class":51,"line":52},[49,109517,102507],{"class":62},[49,109519,109520],{"class":1505}," ch5_viewer.py\n",[19,109522,109523],{},"离屏 Renderer 保存图片:",[39,109525,109527],{"className":31626,"code":109526,"language":31628,"meta":44,"style":44},"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",[46,109528,109529,109541,109545,109551,109561,109565,109569,109577,109582,109586,109590,109594,109598,109603,109607,109611,109615,109619,109623,109627,109631,109635,109639,109643,109647,109659,109671,109679,109704,109708,109724,109728,109732,109747,109756,109760,109774,109779,109784,109788,109800,109812,109816,109820,109832],{"__ignoreMap":44},[49,109530,109531,109533,109536,109538],{"class":51,"line":52},[49,109532,31985],{"class":109},[49,109534,109535],{"class":66}," pathlib ",[49,109537,31640],{"class":109},[49,109539,109540],{"class":66}," Path\n",[49,109542,109543],{"class":51,"line":59},[49,109544,3654],{"emptyLinePlaceholder":1330},[49,109546,109547,109549],{"class":51,"line":70},[49,109548,31640],{"class":109},[49,109550,102525],{"class":66},[49,109552,109553,109555,109557,109559],{"class":51,"line":86},[49,109554,31985],{"class":109},[49,109556,48511],{"class":73},[49,109558,48514],{"class":109},[49,109560,48517],{"class":66},[49,109562,109563],{"class":51,"line":98},[49,109564,3654],{"emptyLinePlaceholder":1330},[49,109566,109567],{"class":51,"line":121},[49,109568,3654],{"emptyLinePlaceholder":1330},[49,109570,109571,109573,109575],{"class":51,"line":134},[49,109572,102538],{"class":73},[49,109574,14816],{"class":109},[49,109576,102543],{"class":1505},[49,109578,109579],{"class":51,"line":1085},[49,109580,109581],{"class":1505},"\u003Cmujoco model=\"renderer_demo\">\n",[49,109583,109584],{"class":51,"line":2574},[49,109585,102553],{"class":1505},[49,109587,109588],{"class":51,"line":2586},[49,109589,3654],{"emptyLinePlaceholder":1330},[49,109591,109592],{"class":51,"line":2867},[49,109593,102562],{"class":1505},[49,109595,109596],{"class":51,"line":2872},[49,109597,109311],{"class":1505},[49,109599,109600],{"class":51,"line":2878},[49,109601,109602],{"class":1505},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[49,109604,109605],{"class":51,"line":2883},[49,109606,109316],{"class":1505},[49,109608,109609],{"class":51,"line":2897},[49,109610,3654],{"emptyLinePlaceholder":1330},[49,109612,109613],{"class":51,"line":2902},[49,109614,102576],{"class":1505},[49,109616,109617],{"class":51,"line":2908},[49,109618,102581],{"class":1505},[49,109620,109621],{"class":51,"line":2929},[49,109622,109333],{"class":1505},[49,109624,109625],{"class":51,"line":2934},[49,109626,102591],{"class":1505},[49,109628,109629],{"class":51,"line":2948},[49,109630,102596],{"class":1505},[49,109632,109633],{"class":51,"line":2953},[49,109634,102601],{"class":1505},[49,109636,109637],{"class":51,"line":2982},[49,109638,96923],{"class":1505},[49,109640,109641],{"class":51,"line":2987},[49,109642,3654],{"emptyLinePlaceholder":1330},[49,109644,109645],{"class":51,"line":3004},[49,109646,3654],{"emptyLinePlaceholder":1330},[49,109648,109649,109651,109653,109655,109657],{"class":51,"line":3009},[49,109650,33195],{"class":109},[49,109652,3227],{"class":62},[49,109654,102622],{"class":66},[49,109656,96911],{"class":73},[49,109658,4993],{"class":66},[49,109660,109661,109663,109665,109667,109669],{"class":51,"line":3014},[49,109662,102631],{"class":66},[49,109664,1448],{"class":109},[49,109666,102636],{"class":66},[49,109668,102538],{"class":73},[49,109670,1409],{"class":66},[49,109672,109673,109675,109677],{"class":51,"line":3019},[49,109674,102645],{"class":66},[49,109676,1448],{"class":109},[49,109678,102650],{"class":66},[49,109680,109681,109684,109686,109688,109690,109692,109694,109696,109698,109700,109702],{"class":51,"line":3033},[49,109682,109683],{"class":66},"    renderer ",[49,109685,1448],{"class":109},[49,109687,109098],{"class":66},[49,109689,26230],{"class":6468},[49,109691,1448],{"class":109},[49,109693,43590],{"class":73},[49,109695,13687],{"class":66},[49,109697,26226],{"class":6468},[49,109699,1448],{"class":109},[49,109701,109113],{"class":73},[49,109703,1409],{"class":66},[49,109705,109706],{"class":51,"line":3038},[49,109707,3654],{"emptyLinePlaceholder":1330},[49,109709,109710,109712,109714,109716,109718,109720,109722],{"class":51,"line":3831},[49,109711,4455],{"class":109},[49,109713,102725],{"class":66},[49,109715,27292],{"class":109},[49,109717,33691],{"class":73},[49,109719,1403],{"class":66},[49,109721,1703],{"class":73},[49,109723,32034],{"class":66},[49,109725,109726],{"class":51,"line":3845},[49,109727,102740],{"class":66},[49,109729,109730],{"class":51,"line":3853},[49,109731,3654],{"emptyLinePlaceholder":1330},[49,109733,109734,109737,109740,109742,109745],{"class":51,"line":3858},[49,109735,109736],{"class":66},"    renderer.update_scene(data, ",[49,109738,109739],{"class":6468},"camera",[49,109741,1448],{"class":109},[49,109743,109744],{"class":1505},"\"fixed_camera\"",[49,109746,1409],{"class":66},[49,109748,109749,109752,109754],{"class":51,"line":3864},[49,109750,109751],{"class":66},"    image ",[49,109753,1448],{"class":109},[49,109755,108809],{"class":66},[49,109757,109758],{"class":51,"line":3870},[49,109759,3654],{"emptyLinePlaceholder":1330},[49,109761,109762,109765,109767,109770,109772],{"class":51,"line":3875},[49,109763,109764],{"class":66},"    output_path ",[49,109766,1448],{"class":109},[49,109768,109769],{"class":66}," Path(",[49,109771,109239],{"class":1505},[49,109773,1409],{"class":66},[49,109775,109776],{"class":51,"line":9200},[49,109777,109778],{"class":66},"    Image.fromarray(image).save(output_path)\n",[49,109780,109781],{"class":51,"line":9224},[49,109782,109783],{"class":66},"    renderer.close()\n",[49,109785,109786],{"class":51,"line":9229},[49,109787,3654],{"emptyLinePlaceholder":1330},[49,109789,109790,109792,109794,109797],{"class":51,"line":9235},[49,109791,32547],{"class":73},[49,109793,1403],{"class":66},[49,109795,109796],{"class":1505},"\"saved:\"",[49,109798,109799],{"class":66},", output_path.resolve())\n",[49,109801,109802,109804,109806,109809],{"class":51,"line":9262},[49,109803,32547],{"class":73},[49,109805,1403],{"class":66},[49,109807,109808],{"class":1505},"\"image shape:\"",[49,109810,109811],{"class":66},", image.shape)\n",[49,109813,109814],{"class":51,"line":9267},[49,109815,3654],{"emptyLinePlaceholder":1330},[49,109817,109818],{"class":51,"line":9273},[49,109819,3654],{"emptyLinePlaceholder":1330},[49,109821,109822,109824,109826,109828,109830],{"class":51,"line":9285},[49,109823,2787],{"class":109},[49,109825,32468],{"class":73},[49,109827,102783],{"class":109},[49,109829,102786],{"class":1505},[49,109831,4993],{"class":66},[49,109833,109834],{"class":51,"line":9297},[49,109835,102793],{"class":66},[19,109837,104794],{},[39,109839,109841],{"className":25070,"code":109840,"language":25072,"meta":44,"style":44},"touch ch5_renderer.py\n",[46,109842,109843],{"__ignoreMap":44},[49,109844,109845,109847],{"class":51,"line":52},[49,109846,102507],{"class":62},[49,109848,109849],{"class":1505}," ch5_renderer.py\n",[183,109851,102796],{"id":102796},[19,109853,109854],{},"viewer 上下文：",[39,109856,109858],{"className":31626,"code":109857,"language":31628,"meta":44,"style":44},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[46,109859,109860],{"__ignoreMap":44},[49,109861,109862,109864,109866,109868],{"class":51,"line":52},[49,109863,109057],{"class":109},[49,109865,109060],{"class":66},[49,109867,32631],{"class":109},[49,109869,109065],{"class":66},[19,109871,109872,109874],{},[46,109873,109057],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109876,109877],{},"窗口循环：",[39,109879,109881],{"className":31626,"code":109880,"language":31628,"meta":44,"style":44},"while viewer.is_running() and data.time \u003C 5.0:\n",[46,109882,109883],{"__ignoreMap":44},[49,109884,109885,109888,109890,109892,109894,109896,109898],{"class":51,"line":52},[49,109886,109887],{"class":109},"while",[49,109889,109411],{"class":66},[49,109891,31710],{"class":109},[49,109893,109416],{"class":66},[49,109895,2300],{"class":109},[49,109897,109421],{"class":73},[49,109899,4993],{"class":66},[19,109901,109902],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109904,109905],{},"固定相机：",[39,109907,109909],{"className":54309,"code":109908,"language":54311,"meta":44,"style":44},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[46,109910,109911],{"__ignoreMap":44},[49,109912,109913,109915,109917,109919,109921,109923,109925,109927,109930,109933,109935,109938],{"class":51,"line":52},[49,109914,2300],{"class":66},[49,109916,109739],{"class":147},[49,109918,16171],{"class":62},[49,109920,1448],{"class":66},[49,109922,109744],{"class":1505},[49,109924,102330],{"class":62},[49,109926,1448],{"class":66},[49,109928,109929],{"class":1505},"\"1.5 -2.0 1.2\"",[49,109931,109932],{"class":62}," xyaxes",[49,109934,1448],{"class":66},[49,109936,109937],{"class":1505},"\"1 0.75 0 0 0 1\"",[49,109939,102368],{"class":66},[19,109941,109942],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[183,109944,109946],{"id":109945},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[39,109948,109950],{"className":31626,"code":109949,"language":31628,"meta":44,"style":44},"import time\n",[46,109951,109952],{"__ignoreMap":44},[49,109953,109954,109956],{"class":51,"line":52},[49,109955,31640],{"class":109},[49,109957,33077],{"class":66},[19,109959,109960],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[39,109962,109964],{"className":31626,"code":109963,"language":31628,"meta":44,"style":44},"import mujoco\nimport mujoco.viewer\n",[46,109965,109966,109972],{"__ignoreMap":44},[49,109967,109968,109970],{"class":51,"line":52},[49,109969,31640],{"class":109},[49,109971,102525],{"class":66},[49,109973,109974,109976],{"class":51,"line":59},[49,109975,31640],{"class":109},[49,109977,108776],{"class":66},[19,109979,109980],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[39,109982,109983],{"className":31626,"code":109857,"language":31628,"meta":44,"style":44},[46,109984,109985],{"__ignoreMap":44},[49,109986,109987,109989,109991,109993],{"class":51,"line":52},[49,109988,109057],{"class":109},[49,109990,109060],{"class":66},[49,109992,32631],{"class":109},[49,109994,109065],{"class":66},[19,109996,109997,109998,110001],{},"打开一个 viewer 窗口。",[46,109999,110000],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[39,110003,110004],{"className":31626,"code":109880,"language":31628,"meta":44,"style":44},[46,110005,110006],{"__ignoreMap":44},[49,110007,110008,110010,110012,110014,110016,110018,110020],{"class":51,"line":52},[49,110009,109887],{"class":109},[49,110011,109411],{"class":66},[49,110013,31710],{"class":109},[49,110015,109416],{"class":66},[49,110017,2300],{"class":109},[49,110019,109421],{"class":73},[49,110021,4993],{"class":66},[19,110023,110024,110025,110028],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[46,110026,110027],{},"viewer.is_running()"," 会变成 false，循环结束。",[39,110030,110032],{"className":31626,"code":110031,"language":31628,"meta":44,"style":44},"step_start = time.time()\n",[46,110033,110034],{"__ignoreMap":44},[49,110035,110036,110039,110041],{"class":51,"line":52},[49,110037,110038],{"class":66},"step_start ",[49,110040,1448],{"class":109},[49,110042,109433],{"class":66},[19,110044,110045],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[39,110047,110048],{"className":31626,"code":109142,"language":31628,"meta":44,"style":44},[46,110049,110050,110054],{"__ignoreMap":44},[49,110051,110052],{"class":51,"line":52},[49,110053,105729],{"class":66},[49,110055,110056],{"class":51,"line":59},[49,110057,109153],{"class":66},[19,110059,110060,110062,110063,110065,110066,110068,110069,110072],{},[46,110061,102439],{}," 推进物理仿真。",[46,110064,109161],{}," 把最新的 ",[46,110067,34649],{}," 同步到窗口里显示。没有 ",[46,110070,110071],{},"sync()","，窗口可能看不到最新状态。",[39,110074,110075],{"className":31626,"code":109172,"language":31628,"meta":44,"style":44},[46,110076,110077],{"__ignoreMap":44},[49,110078,110079,110081,110083,110085,110087,110089,110091],{"class":51,"line":52},[49,110080,109179],{"class":66},[49,110082,1448],{"class":109},[49,110084,109184],{"class":66},[49,110086,1923],{"class":109},[49,110088,109189],{"class":66},[49,110090,1923],{"class":109},[49,110092,109194],{"class":66},[19,110094,110095],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[39,110097,110099],{"className":31626,"code":110098,"language":31628,"meta":44,"style":44},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[46,110100,110101,110113],{"__ignoreMap":44},[49,110102,110103,110105,110107,110109,110111],{"class":51,"line":52},[49,110104,2787],{"class":109},[49,110106,109471],{"class":66},[49,110108,2349],{"class":109},[49,110110,5347],{"class":73},[49,110112,4993],{"class":66},[49,110114,110115],{"class":51,"line":59},[49,110116,110117],{"class":66},"    time.sleep(sleep_time)\n",[19,110119,110120],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[183,110122,110124],{"id":110123},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[39,110126,110128],{"className":31626,"code":110127,"language":31628,"meta":44,"style":44},"from pathlib import Path\n",[46,110129,110130],{"__ignoreMap":44},[49,110131,110132,110134,110136,110138],{"class":51,"line":52},[49,110133,31985],{"class":109},[49,110135,109535],{"class":66},[49,110137,31640],{"class":109},[49,110139,109540],{"class":66},[19,110141,110142,110143,110146,110147,110150],{},"导入 ",[46,110144,110145],{},"Path","，用来处理文件路径。相比直接写字符串，",[46,110148,110149],{},"Path(\"render_output.png\")"," 更清晰。",[39,110152,110154],{"className":31626,"code":110153,"language":31628,"meta":44,"style":44},"from PIL import Image\n",[46,110155,110156],{"__ignoreMap":44},[49,110157,110158,110160,110162,110164],{"class":51,"line":52},[49,110159,31985],{"class":109},[49,110161,48511],{"class":73},[49,110163,48514],{"class":109},[49,110165,48517],{"class":66},[19,110167,110168],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[39,110170,110171],{"className":54309,"code":109908,"language":54311,"meta":44,"style":44},[46,110172,110173],{"__ignoreMap":44},[49,110174,110175,110177,110179,110181,110183,110185,110187,110189,110191,110193,110195,110197],{"class":51,"line":52},[49,110176,2300],{"class":66},[49,110178,109739],{"class":147},[49,110180,16171],{"class":62},[49,110182,1448],{"class":66},[49,110184,109744],{"class":1505},[49,110186,102330],{"class":62},[49,110188,1448],{"class":66},[49,110190,109929],{"class":1505},[49,110192,109932],{"class":62},[49,110194,1448],{"class":66},[49,110196,109937],{"class":1505},[49,110198,102368],{"class":66},[19,110200,110201,110202,110204,110205,110207,110208,110211,110212,110214],{},"定义一个相机。",[46,110203,81036],{}," 是相机名字。",[46,110206,105370],{}," 是相机在世界里的位置。",[46,110209,110210],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[46,110213,105370],{}," 来调视角。",[39,110216,110218],{"className":31626,"code":110217,"language":31628,"meta":44,"style":44},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[46,110219,110220],{"__ignoreMap":44},[49,110221,110222,110224,110226,110228,110230,110232,110234,110236,110238,110240,110242],{"class":51,"line":52},[49,110223,108794],{"class":66},[49,110225,1448],{"class":109},[49,110227,109098],{"class":66},[49,110229,26230],{"class":6468},[49,110231,1448],{"class":109},[49,110233,43590],{"class":73},[49,110235,13687],{"class":66},[49,110237,26226],{"class":6468},[49,110239,1448],{"class":109},[49,110241,109113],{"class":73},[49,110243,1409],{"class":66},[19,110245,110246,110247,102242,110249,110251],{},"创建离屏渲染器。",[46,110248,26230],{},[46,110250,26226],{}," 决定输出图片大小。",[39,110253,110254],{"className":31626,"code":102900,"language":31628,"meta":44,"style":44},[46,110255,110256,110272],{"__ignoreMap":44},[49,110257,110258,110260,110262,110264,110266,110268,110270],{"class":51,"line":52},[49,110259,4279],{"class":109},[49,110261,102725],{"class":66},[49,110263,27292],{"class":109},[49,110265,33691],{"class":73},[49,110267,1403],{"class":66},[49,110269,1703],{"class":73},[49,110271,32034],{"class":66},[49,110273,110274],{"class":51,"line":59},[49,110275,102923],{"class":66},[19,110277,110278],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[39,110280,110282],{"className":31626,"code":110281,"language":31628,"meta":44,"style":44},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[46,110283,110284],{"__ignoreMap":44},[49,110285,110286,110289,110291,110293,110295],{"class":51,"line":52},[49,110287,110288],{"class":66},"renderer.update_scene(data, ",[49,110290,109739],{"class":6468},[49,110292,1448],{"class":109},[49,110294,109744],{"class":1505},[49,110296,1409],{"class":66},[19,110298,110299,110300,110302,110303,110306],{},"告诉 renderer：用当前 ",[46,110301,34649],{}," 的状态更新画面，并使用名为 ",[46,110304,110305],{},"fixed_camera"," 的相机视角。",[39,110308,110309],{"className":31626,"code":109204,"language":31628,"meta":44,"style":44},[46,110310,110311],{"__ignoreMap":44},[49,110312,110313,110315,110317],{"class":51,"line":52},[49,110314,108804],{"class":66},[49,110316,1448],{"class":109},[49,110318,108809],{"class":66},[19,110320,110321,110322,110325],{},"真正渲染出图像。",[46,110323,110324],{},"image"," 是一个 NumPy 数组，不是文件。",[39,110327,110329],{"className":31626,"code":110328,"language":31628,"meta":44,"style":44},"Image.fromarray(image).save(output_path)\n",[46,110330,110331],{"__ignoreMap":44},[49,110332,110333],{"class":51,"line":52},[49,110334,110328],{"class":66},[19,110336,110337,110338,29633],{},"把数组转换成图片，并保存到 ",[46,110339,110340],{},"render_output.png",[39,110342,110344],{"className":31626,"code":110343,"language":31628,"meta":44,"style":44},"renderer.close()\n",[46,110345,110346],{"__ignoreMap":44},[49,110347,110348],{"class":51,"line":52},[49,110349,110343],{"class":66},[19,110351,110352],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110354,103540],{"id":103539},[19,110356,110357,110358,110360,110361,29633],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[46,110359,110340],{},"，并输出图像数组形状，例如 ",[46,110362,110363],{},"(480, 640, 3)",[19,110365,110366],{},"如果图片里看不到方块，先检查：",[591,110368,110369,110372,110375],{},[26,110370,110371],{},"方块是否掉到相机视野外。",[26,110373,110374],{},"camera 位置是否合理。",[26,110376,110377,110378,110381],{},"是否在 ",[46,110379,110380],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110383,103572],{"id":103571},[19,110385,110386],{},"运行 viewer:",[39,110388,110390],{"className":25070,"code":110389,"language":25072,"meta":44,"style":44},"python ch5_viewer.py\n",[46,110391,110392],{"__ignoreMap":44},[49,110393,110394,110396],{"class":51,"line":52},[49,110395,31628],{"class":62},[49,110397,109520],{"class":1505},[19,110399,110400],{},"运行 renderer:",[39,110402,110404],{"className":25070,"code":110403,"language":25072,"meta":44,"style":44},"python ch5_renderer.py\n",[46,110405,110406],{"__ignoreMap":44},[49,110407,110408,110410],{"class":51,"line":52},[49,110409,31628],{"class":62},[49,110411,109849],{"class":1505},[19,110413,110414],{},"如果在服务器上运行:",[39,110416,110418],{"className":25070,"code":110417,"language":25072,"meta":44,"style":44},"MUJOCO_GL=egl python ch5_renderer.py\n",[46,110419,110420],{"__ignoreMap":44},[49,110421,110422,110424,110426,110428,110431],{"class":51,"line":52},[49,110423,109038],{"class":66},[49,110425,1448],{"class":109},[49,110427,109028],{"class":1505},[49,110429,110430],{"class":62}," python",[49,110432,109849],{"class":1505},[19,110434,109006],{},[39,110436,110438],{"className":25070,"code":110437,"language":25072,"meta":44,"style":44},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[46,110439,110440],{"__ignoreMap":44},[49,110441,110442,110444,110446,110448,110450],{"class":51,"line":52},[49,110443,109038],{"class":66},[49,110445,1448],{"class":109},[49,110447,109032],{"class":1505},[49,110449,110430],{"class":62},[49,110451,109849],{"class":1505},[19,110453,110454],{},"再做几个练习：",[591,110456,110457,110464,110467,110473],{},[26,110458,110459,110460,110463],{},"把 renderer 分辨率改成 ",[46,110461,110462],{},"height=240, width=320","，观察输出 shape。",[26,110465,110466],{},"把方块颜色改成蓝色，重新保存图片。",[26,110468,110469,110470,110472],{},"把相机 ",[46,110471,105370],{}," 改远一点，观察画面中物体是否变小。",[26,110474,110475,110476,103638,110479,110482],{},"把 viewer 示例中的 ",[46,110477,110478],{},"data.time \u003C 5.0",[46,110480,110481],{},"data.time \u003C 20.0","，观察更长时间。",[14,110484,103677],{"id":103676},[183,110486,110488],{"id":110487},"viewer-窗口打不开","viewer 窗口打不开",[19,110490,110491],{},"安装:",[39,110493,110495],{"className":25070,"code":110494,"language":25072,"meta":44,"style":44},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[46,110496,110497],{"__ignoreMap":44},[49,110498,110499,110501,110503,110505,110507,110509,110511,110513,110515,110517,110519],{"class":51,"line":52},[49,110500,25825],{"class":62},[49,110502,27564],{"class":1505},[49,110504,25082],{"class":1505},[49,110506,27649],{"class":73},[49,110508,103730],{"class":1505},[49,110510,102058],{"class":1505},[49,110512,103735],{"class":1505},[49,110514,102071],{"class":1505},[49,110516,102077],{"class":1505},[49,110518,102068],{"class":1505},[49,110520,110521],{"class":1505}," libXinerama\n",[183,110523,110525],{"id":110524},"glfwerror",[46,110526,110527],{},"GLFWError",[19,110529,110530],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[183,110532,110534],{"id":110533},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110536,110537,110538,83765,110540,110542],{},"尝试 ",[46,110539,102261],{},[46,110541,102264],{},"。可能存在版本差异。",[183,110544,110545],{"id":110545},"保存图片是黑的",[19,110547,103799],{},[591,110549,110550,110553,110556,110566],{},[26,110551,110552],{},"XML 里是否有 light。",[26,110554,110555],{},"相机是否对着模型。",[26,110557,110558,110559,110562,110563,29633],{},"是否先 ",[46,110560,110561],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[46,110564,110565],{},"renderer.render()",[26,110567,110568],{},"物体是否已经掉出视野。",[183,110570,110571],{"id":110571},"远程服务器没有显示器",[19,110573,110574],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[39,110576,110577],{"className":25070,"code":110417,"language":25072,"meta":44,"style":44},[46,110578,110579],{"__ignoreMap":44},[49,110580,110581,110583,110585,110587,110589],{"class":51,"line":52},[49,110582,109038],{"class":66},[49,110584,1448],{"class":109},[49,110586,109028],{"class":1505},[49,110588,110430],{"class":62},[49,110590,109849],{"class":1505},[19,110592,110593],{},"如果 EGL 不可用，再尝试：",[39,110595,110596],{"className":25070,"code":110437,"language":25072,"meta":44,"style":44},[46,110597,110598],{"__ignoreMap":44},[49,110599,110600,110602,110604,110606,110608],{"class":51,"line":52},[49,110601,109038],{"class":66},[49,110603,1448],{"class":109},[49,110605,109032],{"class":1505},[49,110607,110430],{"class":62},[49,110609,109849],{"class":1505},[14,110611,103831],{"id":103830},[19,110613,110614],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[591,110616,110617,110620,110623],{},[26,110618,110619],{},"先用 viewer 看模型和控制是否正常。",[26,110621,110622],{},"再用 renderer 保存图片或构造视觉观测。",[26,110624,110625],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1305,110627,110628],{},"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":44,"searchDepth":59,"depth":59,"links":110630},[110631,110632,110633,110638,110643,110644,110645,110652],{"id":101870,"depth":59,"text":101871},{"id":101993,"depth":59,"text":101994},{"id":102268,"depth":59,"text":102269,"children":110634},[110635,110636,110637],{"id":109135,"depth":70,"text":109136},{"id":109165,"depth":70,"text":109166},{"id":109200,"depth":70,"text":109201},{"id":102476,"depth":59,"text":102477,"children":110639},[110640,110641,110642],{"id":102796,"depth":70,"text":102796},{"id":109945,"depth":70,"text":109946},{"id":110123,"depth":70,"text":110124},{"id":103539,"depth":59,"text":103540},{"id":103571,"depth":59,"text":103572},{"id":103676,"depth":59,"text":103677,"children":110646},[110647,110648,110649,110650,110651],{"id":110487,"depth":70,"text":110488},{"id":110524,"depth":70,"text":110527},{"id":110533,"depth":70,"text":110534},{"id":110545,"depth":70,"text":110545},{"id":110571,"depth":70,"text":110571},{"id":103830,"depth":59,"text":103831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108743,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110659,"title":110660,"body":110661,"description":44,"extension":1328,"meta":112572,"navigation":1330,"path":112573,"seo":112574,"stem":112575,"__hash__":112576},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110662,"toc":112548},[110663,110666,110668,110671,110673,110692,110695,110701,110704,110706,110708,110732,110734,110748,110750,110791,110793,110804,110806,110809,110815,110818,110852,110855,110887,110890,110922,110926,110929,110969,110972,110978,110981,110987,110991,110994,111000,111003,111007,111010,111050,111052,111065,111068,111070,111652,111654,111666,111669,111680,111682,111685,111704,111716,111719,111740,111743,111746,111789,111792,111795,111815,111822,111824,111842,111857,111860,111866,111869,111875,111892,111899,111930,111941,111975,111986,112003,112012,112020,112025,112039,112042,112063,112069,112083,112088,112118,112128,112153,112161,112184,112187,112203,112206,112214,112220,112242,112255,112276,112285,112324,112335,112337,112340,112346,112349,112352,112358,112361,112381,112384,112386,112425,112427,112430,112438,112441,112444,112471,112474,112484,112490,112493,112499,112501,112507,112511,112514,112516,112519,112543,112546],[10,110664,110660],{"id":110665},"_6控制任务cartpole",[14,110667,101871],{"id":101870},[19,110669,110670],{},"本章搭建一个最小 Cartpole 控制任务。",[19,110672,105555],{},[591,110674,110675,110678,110680,110683,110686,110689],{},[26,110676,110677],{},"slide joint",[26,110679,107408],{},[26,110681,110682],{},"cart force actuator",[26,110684,110685],{},"状态观测",[26,110687,110688],{},"简单控制循环",[26,110690,110691],{},"reward 设计雏形",[19,110693,110694],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[39,110696,110699],{"className":110697,"code":110698,"language":267,"meta":44},[1094],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[46,110700,110698],{"__ignoreMap":44},[19,110702,110703],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110705,101994],{"id":101993},[19,110707,101997],{},[39,110709,110710],{"className":25070,"code":105612,"language":25072,"meta":44,"style":44},[46,110711,110712],{"__ignoreMap":44},[49,110713,110714,110716,110718,110720,110722,110724,110726,110728,110730],{"class":51,"line":52},[49,110715,25825],{"class":62},[49,110717,27564],{"class":1505},[49,110719,25082],{"class":1505},[49,110721,27649],{"class":73},[49,110723,105627],{"class":1505},[49,110725,102022],{"class":1505},[49,110727,103725],{"class":1505},[49,110729,102038],{"class":1505},[49,110731,105636],{"class":1505},[19,110733,104043],{},[39,110735,110736],{"className":25070,"code":102143,"language":25072,"meta":44,"style":44},[46,110737,110738],{"__ignoreMap":44},[49,110739,110740,110742,110744,110746],{"class":51,"line":52},[49,110741,25079],{"class":62},[49,110743,25082],{"class":1505},[49,110745,102154],{"class":1505},[49,110747,102157],{"class":1505},[19,110749,104060],{},[39,110751,110753],{"className":25070,"code":110752,"language":25072,"meta":44,"style":44},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[46,110754,110755,110772,110781],{"__ignoreMap":44},[49,110756,110757,110759,110761,110763,110766,110768,110770],{"class":51,"line":52},[49,110758,31578],{"class":62},[49,110760,30424],{"class":1505},[49,110762,26364],{"class":73},[49,110764,110765],{"class":1505}," mujoco-cartpole",[49,110767,102199],{"class":1505},[49,110769,102202],{"class":73},[49,110771,102205],{"class":73},[49,110773,110774,110776,110778],{"class":51,"line":59},[49,110775,31578],{"class":62},[49,110777,102212],{"class":1505},[49,110779,110780],{"class":1505}," mujoco-cartpole\n",[49,110782,110783,110785,110787,110789],{"class":51,"line":70},[49,110784,25079],{"class":62},[49,110786,25082],{"class":1505},[49,110788,102154],{"class":1505},[49,110790,102157],{"class":1505},[19,110792,102228],{},[591,110794,110795,110798,110801],{},[26,110796,110797],{},"本章不依赖 Gymnasium。",[26,110799,110800],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[26,110802,110803],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110805,102269],{"id":102268},[19,110807,110808],{},"Cartpole 的模型结构:",[39,110810,110813],{"className":110811,"code":110812,"language":267,"meta":44},[1094],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[46,110814,110812],{"__ignoreMap":44},[19,110816,110817],{},"小车通过 slide joint 左右移动:",[39,110819,110821],{"className":54309,"code":110820,"language":54311,"meta":44,"style":44},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[46,110822,110823],{"__ignoreMap":44},[49,110824,110825,110827,110829,110831,110833,110836,110838,110840,110843,110845,110847,110850],{"class":51,"line":52},[49,110826,2300],{"class":66},[49,110828,104180],{"class":147},[49,110830,16171],{"class":62},[49,110832,1448],{"class":66},[49,110834,110835],{"class":1505},"\"cart_x\"",[49,110837,55065],{"class":62},[49,110839,1448],{"class":66},[49,110841,110842],{"class":1505},"\"slide\"",[49,110844,107252],{"class":62},[49,110846,1448],{"class":66},[49,110848,110849],{"class":1505},"\"1 0 0\"",[49,110851,102368],{"class":66},[19,110853,110854],{},"杆子通过 hinge joint 旋转:",[39,110856,110858],{"className":54309,"code":110857,"language":54311,"meta":44,"style":44},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[46,110859,110860],{"__ignoreMap":44},[49,110861,110862,110864,110866,110868,110870,110873,110875,110877,110879,110881,110883,110885],{"class":51,"line":52},[49,110863,2300],{"class":66},[49,110865,104180],{"class":147},[49,110867,16171],{"class":62},[49,110869,1448],{"class":66},[49,110871,110872],{"class":1505},"\"pole_hinge\"",[49,110874,55065],{"class":62},[49,110876,1448],{"class":66},[49,110878,107243],{"class":1505},[49,110880,107252],{"class":62},[49,110882,1448],{"class":66},[49,110884,107257],{"class":1505},[49,110886,102368],{"class":66},[19,110888,110889],{},"控制力作用在小车 slide joint 上:",[39,110891,110893],{"className":54309,"code":110892,"language":54311,"meta":44,"style":44},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[46,110894,110895],{"__ignoreMap":44},[49,110896,110897,110899,110901,110903,110905,110908,110910,110912,110914,110916,110918,110920],{"class":51,"line":52},[49,110898,2300],{"class":66},[49,110900,107298],{"class":147},[49,110902,16171],{"class":62},[49,110904,1448],{"class":66},[49,110906,110907],{"class":1505},"\"cart_motor\"",[49,110909,107308],{"class":62},[49,110911,1448],{"class":66},[49,110913,110835],{"class":1505},[49,110915,107315],{"class":62},[49,110917,1448],{"class":66},[49,110919,55557],{"class":1505},[49,110921,102368],{"class":66},[183,110923,110925],{"id":110924},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110927,110928],{},"这个简化模型有两个关节：",[293,110930,110931,110942],{},[296,110932,110933],{},[299,110934,110935,110937,110939],{},[302,110936,103983],{"align":304},[302,110938,24985],{"align":304},[302,110940,110941],{"align":304},"对应状态",[310,110943,110944,110957],{},[299,110945,110946,110951,110954],{},[315,110947,110948],{"align":304},[46,110949,110950],{},"cart_x",[315,110952,110953],{"align":304},"slide",[315,110955,110956],{"align":304},"小车 x 位置",[299,110958,110959,110964,110966],{},[315,110960,110961],{"align":304},[46,110962,110963],{},"pole_hinge",[315,110965,107064],{"align":304},[315,110967,110968],{"align":304},"杆子角度",[19,110970,110971],{},"所以：",[39,110973,110976],{"className":110974,"code":110975,"language":267,"meta":44},[1094],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[46,110977,110975],{"__ignoreMap":44},[19,110979,110980],{},"把它们拼起来就是观测：",[39,110982,110985],{"className":110983,"code":110984,"language":267,"meta":44},[1094],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[46,110986,110984],{"__ignoreMap":44},[183,110988,110990],{"id":110989},"action-是什么","action 是什么",[19,110992,110993],{},"本章只有一个 actuator：",[39,110995,110998],{"className":110996,"code":110997,"language":267,"meta":44},[1094],"data.ctrl[0] = action\n",[46,110999,110997],{"__ignoreMap":44},[19,111001,111002],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[183,111004,111006],{"id":111005},"reward-是什么","reward 是什么",[19,111008,111009],{},"奖励函数：",[39,111011,111013],{"className":31626,"code":111012,"language":31628,"meta":44,"style":44},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[46,111014,111015],{"__ignoreMap":44},[49,111016,111017,111019,111022,111024,111026,111028,111031,111033,111036,111038,111040,111042,111045,111047],{"class":51,"line":52},[49,111018,18296],{"class":109},[49,111020,111021],{"class":73}," float",[49,111023,1403],{"class":66},[49,111025,103627],{"class":73},[49,111027,53513],{"class":109},[49,111029,111030],{"class":73}," 0.1",[49,111032,7770],{"class":109},[49,111034,111035],{"class":66}," cart_x ",[49,111037,1846],{"class":109},[49,111039,111035],{"class":66},[49,111041,1923],{"class":109},[49,111043,111044],{"class":66}," pole_angle ",[49,111046,1846],{"class":109},[49,111048,111049],{"class":66}," pole_angle)\n",[19,111051,107450],{},[591,111053,111054,111059,111062],{},[26,111055,111056,111057,29633],{},"基础奖励是 ",[46,111058,103627],{},[26,111060,111061],{},"小车离中心越远，扣分越多。",[26,111063,111064],{},"杆子角度越大，扣分越多。",[19,111066,111067],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111069,102477],{"id":102476},[39,111071,111073],{"className":31626,"code":111072,"language":31628,"meta":44,"style":44},"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",[46,111074,111075,111081,111091,111095,111099,111107,111112,111116,111120,111124,111129,111133,111138,111143,111148,111152,111157,111162,111167,111171,111175,111179,111183,111187,111192,111196,111200,111204,111208,111212,111222,111229,111233,111237,111251,111265,111278,111308,111312,111316,111328,111340,111348,111352,111365,111369,111373,111382,111386,111402,111412,111425,111438,111442,111465,111483,111487,111499,111503,111507,111517,111527,111531,111547,111588,111592,111612,111628,111632,111636,111648],{"__ignoreMap":44},[49,111076,111077,111079],{"class":51,"line":52},[49,111078,31640],{"class":109},[49,111080,102525],{"class":66},[49,111082,111083,111085,111087,111089],{"class":51,"line":59},[49,111084,31640],{"class":109},[49,111086,32628],{"class":66},[49,111088,32631],{"class":109},[49,111090,32634],{"class":66},[49,111092,111093],{"class":51,"line":70},[49,111094,3654],{"emptyLinePlaceholder":1330},[49,111096,111097],{"class":51,"line":86},[49,111098,3654],{"emptyLinePlaceholder":1330},[49,111100,111101,111103,111105],{"class":51,"line":98},[49,111102,102538],{"class":73},[49,111104,14816],{"class":109},[49,111106,102543],{"class":1505},[49,111108,111109],{"class":51,"line":121},[49,111110,111111],{"class":1505},"\u003Cmujoco model=\"cartpole\">\n",[49,111113,111114],{"class":51,"line":134},[49,111115,102553],{"class":1505},[49,111117,111118],{"class":51,"line":1085},[49,111119,3654],{"emptyLinePlaceholder":1330},[49,111121,111122],{"class":51,"line":2574},[49,111123,102562],{"class":1505},[49,111125,111126],{"class":51,"line":2586},[49,111127,111128],{"class":1505},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[49,111130,111131],{"class":51,"line":2867},[49,111132,3654],{"emptyLinePlaceholder":1330},[49,111134,111135],{"class":51,"line":2872},[49,111136,111137],{"class":1505},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[49,111139,111140],{"class":51,"line":2878},[49,111141,111142],{"class":1505},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[49,111144,111145],{"class":51,"line":2883},[49,111146,111147],{"class":1505},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[49,111149,111150],{"class":51,"line":2897},[49,111151,3654],{"emptyLinePlaceholder":1330},[49,111153,111154],{"class":51,"line":2902},[49,111155,111156],{"class":1505},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[49,111158,111159],{"class":51,"line":2908},[49,111160,111161],{"class":1505},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[49,111163,111164],{"class":51,"line":2929},[49,111165,111166],{"class":1505},"        \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",[49,111168,111169],{"class":51,"line":2934},[49,111170,107662],{"class":1505},[49,111172,111173],{"class":51,"line":2948},[49,111174,102591],{"class":1505},[49,111176,111177],{"class":51,"line":2953},[49,111178,102596],{"class":1505},[49,111180,111181],{"class":51,"line":2982},[49,111182,3654],{"emptyLinePlaceholder":1330},[49,111184,111185],{"class":51,"line":2987},[49,111186,107679],{"class":1505},[49,111188,111189],{"class":51,"line":3004},[49,111190,111191],{"class":1505},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[49,111193,111194],{"class":51,"line":3009},[49,111195,107689],{"class":1505},[49,111197,111198],{"class":51,"line":3014},[49,111199,102601],{"class":1505},[49,111201,111202],{"class":51,"line":3019},[49,111203,96923],{"class":1505},[49,111205,111206],{"class":51,"line":3033},[49,111207,3654],{"emptyLinePlaceholder":1330},[49,111209,111210],{"class":51,"line":3038},[49,111211,3654],{"emptyLinePlaceholder":1330},[49,111213,111214,111216,111219],{"class":51,"line":3831},[49,111215,33195],{"class":109},[49,111217,111218],{"class":62}," get_observation",[49,111220,111221],{"class":66},"(data: mujoco.MjData) -> np.ndarray:\n",[49,111223,111224,111226],{"class":51,"line":3845},[49,111225,5344],{"class":109},[49,111227,111228],{"class":66}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[49,111230,111231],{"class":51,"line":3853},[49,111232,3654],{"emptyLinePlaceholder":1330},[49,111234,111235],{"class":51,"line":3858},[49,111236,3654],{"emptyLinePlaceholder":1330},[49,111238,111239,111241,111244,111247,111249],{"class":51,"line":3864},[49,111240,33195],{"class":109},[49,111242,111243],{"class":62}," compute_reward",[49,111245,111246],{"class":66},"(obs: np.ndarray) -> ",[49,111248,1442],{"class":73},[49,111250,4993],{"class":66},[49,111252,111253,111256,111258,111261,111263],{"class":51,"line":3870},[49,111254,111255],{"class":66},"    cart_x ",[49,111257,1448],{"class":109},[49,111259,111260],{"class":66}," obs[",[49,111262,80],{"class":73},[49,111264,34494],{"class":66},[49,111266,111267,111270,111272,111274,111276],{"class":51,"line":3875},[49,111268,111269],{"class":66},"    pole_angle ",[49,111271,1448],{"class":109},[49,111273,111260],{"class":66},[49,111275,159],{"class":73},[49,111277,34494],{"class":66},[49,111279,111280,111282,111284,111286,111288,111290,111292,111294,111296,111298,111300,111302,111304,111306],{"class":51,"line":9200},[49,111281,5344],{"class":109},[49,111283,111021],{"class":73},[49,111285,1403],{"class":66},[49,111287,103627],{"class":73},[49,111289,53513],{"class":109},[49,111291,111030],{"class":73},[49,111293,7770],{"class":109},[49,111295,111035],{"class":66},[49,111297,1846],{"class":109},[49,111299,111035],{"class":66},[49,111301,1923],{"class":109},[49,111303,111044],{"class":66},[49,111305,1846],{"class":109},[49,111307,111049],{"class":66},[49,111309,111310],{"class":51,"line":9224},[49,111311,3654],{"emptyLinePlaceholder":1330},[49,111313,111314],{"class":51,"line":9229},[49,111315,3654],{"emptyLinePlaceholder":1330},[49,111317,111318,111320,111322,111324,111326],{"class":51,"line":9235},[49,111319,33195],{"class":109},[49,111321,3227],{"class":62},[49,111323,102622],{"class":66},[49,111325,96911],{"class":73},[49,111327,4993],{"class":66},[49,111329,111330,111332,111334,111336,111338],{"class":51,"line":9262},[49,111331,102631],{"class":66},[49,111333,1448],{"class":109},[49,111335,102636],{"class":66},[49,111337,102538],{"class":73},[49,111339,1409],{"class":66},[49,111341,111342,111344,111346],{"class":51,"line":9267},[49,111343,102645],{"class":66},[49,111345,1448],{"class":109},[49,111347,102650],{"class":66},[49,111349,111350],{"class":51,"line":9273},[49,111351,3654],{"emptyLinePlaceholder":1330},[49,111353,111354,111356,111358,111360,111362],{"class":51,"line":9285},[49,111355,106293],{"class":66},[49,111357,159],{"class":73},[49,111359,5697],{"class":66},[49,111361,1448],{"class":109},[49,111363,111364],{"class":73}," 0.1\n",[49,111366,111367],{"class":51,"line":9297},[49,111368,106306],{"class":66},[49,111370,111371],{"class":51,"line":9309},[49,111372,3654],{"emptyLinePlaceholder":1330},[49,111374,111375,111378,111380],{"class":51,"line":10968},[49,111376,111377],{"class":66},"    total_reward ",[49,111379,1448],{"class":109},[49,111381,105985],{"class":73},[49,111383,111384],{"class":51,"line":10993},[49,111385,3654],{"emptyLinePlaceholder":1330},[49,111387,111388,111390,111392,111394,111396,111398,111400],{"class":51,"line":11016},[49,111389,4455],{"class":109},[49,111391,32864],{"class":66},[49,111393,27292],{"class":109},[49,111395,33691],{"class":73},[49,111397,1403],{"class":66},[49,111399,7662],{"class":73},[49,111401,32034],{"class":66},[49,111403,111404,111407,111409],{"class":51,"line":11040},[49,111405,111406],{"class":66},"        obs ",[49,111408,1448],{"class":109},[49,111410,111411],{"class":66}," get_observation(data)\n",[49,111413,111414,111417,111419,111421,111423],{"class":51,"line":11045},[49,111415,111416],{"class":66},"        pole_angle ",[49,111418,1448],{"class":109},[49,111420,111260],{"class":66},[49,111422,159],{"class":73},[49,111424,34494],{"class":66},[49,111426,111427,111430,111432,111434,111436],{"class":51,"line":11050},[49,111428,111429],{"class":66},"        pole_angular_velocity ",[49,111431,1448],{"class":109},[49,111433,111260],{"class":66},[49,111435,1472],{"class":73},[49,111437,34494],{"class":66},[49,111439,111440],{"class":51,"line":11055},[49,111441,3654],{"emptyLinePlaceholder":1330},[49,111443,111444,111447,111449,111452,111454,111456,111458,111460,111462],{"class":51,"line":11064},[49,111445,111446],{"class":66},"        action ",[49,111448,1448],{"class":109},[49,111450,111451],{"class":73}," 2.0",[49,111453,7770],{"class":109},[49,111455,111044],{"class":66},[49,111457,1872],{"class":109},[49,111459,63105],{"class":73},[49,111461,7770],{"class":109},[49,111463,111464],{"class":66}," pole_angular_velocity\n",[49,111466,111467,111469,111471,111473,111475,111477,111479,111481],{"class":51,"line":11069},[49,111468,111446],{"class":66},[49,111470,1448],{"class":109},[49,111472,108671],{"class":66},[49,111474,1923],{"class":109},[49,111476,103627],{"class":73},[49,111478,13687],{"class":66},[49,111480,103627],{"class":73},[49,111482,1409],{"class":66},[49,111484,111485],{"class":51,"line":11075},[49,111486,3654],{"emptyLinePlaceholder":1330},[49,111488,111489,111491,111493,111495,111497],{"class":51,"line":11096},[49,111490,107841],{"class":66},[49,111492,80],{"class":73},[49,111494,5697],{"class":66},[49,111496,1448],{"class":109},[49,111498,108694],{"class":66},[49,111500,111501],{"class":51,"line":11102},[49,111502,102740],{"class":66},[49,111504,111505],{"class":51,"line":11116},[49,111506,3654],{"emptyLinePlaceholder":1330},[49,111508,111509,111512,111514],{"class":51,"line":11122},[49,111510,111511],{"class":66},"        reward ",[49,111513,1448],{"class":109},[49,111515,111516],{"class":66}," compute_reward(get_observation(data))\n",[49,111518,111519,111522,111524],{"class":51,"line":11149},[49,111520,111521],{"class":66},"        total_reward ",[49,111523,10729],{"class":109},[49,111525,111526],{"class":66}," reward\n",[49,111528,111529],{"class":51,"line":11158},[49,111530,3654],{"emptyLinePlaceholder":1330},[49,111532,111533,111535,111537,111539,111541,111543,111545],{"class":51,"line":11164},[49,111534,3751],{"class":109},[49,111536,32864],{"class":66},[49,111538,1720],{"class":109},[49,111540,7006],{"class":73},[49,111542,102783],{"class":109},[49,111544,5347],{"class":73},[49,111546,4993],{"class":66},[49,111548,111549,111551,111553,111556,111559,111562,111565,111567,111570,111573,111575,111577,111579,111581,111584,111586],{"class":51,"line":11172},[49,111550,35898],{"class":73},[49,111552,1403],{"class":66},[49,111554,111555],{"class":1505},"\"step:\"",[49,111557,111558],{"class":66},", step, ",[49,111560,111561],{"class":1505},"\"obs:\"",[49,111563,111564],{"class":66},", np.round(obs, ",[49,111566,1472],{"class":73},[49,111568,111569],{"class":66},"), ",[49,111571,111572],{"class":1505},"\"action:\"",[49,111574,13687],{"class":66},[49,111576,33266],{"class":73},[49,111578,1403],{"class":66},[49,111580,1442],{"class":73},[49,111582,111583],{"class":66},"(action), ",[49,111585,1472],{"class":73},[49,111587,31745],{"class":66},[49,111589,111590],{"class":51,"line":11177},[49,111591,3654],{"emptyLinePlaceholder":1330},[49,111593,111594,111596,111598,111601,111603,111605,111608,111610],{"class":51,"line":17854},[49,111595,32547],{"class":73},[49,111597,1403],{"class":66},[49,111599,111600],{"class":1505},"\"total_reward:\"",[49,111602,13687],{"class":66},[49,111604,33266],{"class":73},[49,111606,111607],{"class":66},"(total_reward, ",[49,111609,1472],{"class":73},[49,111611,31745],{"class":66},[49,111613,111614,111616,111618,111621,111624,111626],{"class":51,"line":17860},[49,111615,32547],{"class":73},[49,111617,1403],{"class":66},[49,111619,111620],{"class":1505},"\"final obs:\"",[49,111622,111623],{"class":66},", np.round(get_observation(data), ",[49,111625,1472],{"class":73},[49,111627,31745],{"class":66},[49,111629,111630],{"class":51,"line":17883},[49,111631,3654],{"emptyLinePlaceholder":1330},[49,111633,111634],{"class":51,"line":17889},[49,111635,3654],{"emptyLinePlaceholder":1330},[49,111637,111638,111640,111642,111644,111646],{"class":51,"line":17912},[49,111639,2787],{"class":109},[49,111641,32468],{"class":73},[49,111643,102783],{"class":109},[49,111645,102786],{"class":1505},[49,111647,4993],{"class":66},[49,111649,111650],{"class":51,"line":17926},[49,111651,102793],{"class":66},[19,111653,104794],{},[39,111655,111657],{"className":25070,"code":111656,"language":25072,"meta":44,"style":44},"touch ch6_cartpole.py\n",[46,111658,111659],{"__ignoreMap":44},[49,111660,111661,111663],{"class":51,"line":52},[49,111662,102507],{"class":62},[49,111664,111665],{"class":1505}," ch6_cartpole.py\n",[19,111667,111668],{},"运行：",[39,111670,111672],{"className":25070,"code":111671,"language":25072,"meta":44,"style":44},"python ch6_cartpole.py\n",[46,111673,111674],{"__ignoreMap":44},[49,111675,111676,111678],{"class":51,"line":52},[49,111677,31628],{"class":62},[49,111679,111665],{"class":1505},[183,111681,102796],{"id":102796},[19,111683,111684],{},"构造观测：",[39,111686,111688],{"className":31626,"code":111687,"language":31628,"meta":44,"style":44},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[46,111689,111690,111698],{"__ignoreMap":44},[49,111691,111692,111694,111696],{"class":51,"line":52},[49,111693,33195],{"class":109},[49,111695,111218],{"class":62},[49,111697,111221],{"class":66},[49,111699,111700,111702],{"class":51,"line":59},[49,111701,5344],{"class":109},[49,111703,111228],{"class":66},[19,111705,111706,111709,111710,111712,111713,111715],{},[46,111707,111708],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[46,111711,105254],{}," 2 维，",[46,111714,105584],{}," 2 维，所以 obs 是 4 维。",[19,111717,111718],{},"设置初始角度：",[39,111720,111722],{"className":31626,"code":111721,"language":31628,"meta":44,"style":44},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[46,111723,111724,111736],{"__ignoreMap":44},[49,111725,111726,111728,111730,111732,111734],{"class":51,"line":52},[49,111727,105923],{"class":66},[49,111729,159],{"class":73},[49,111731,5697],{"class":66},[49,111733,1448],{"class":109},[49,111735,111364],{"class":73},[49,111737,111738],{"class":51,"line":59},[49,111739,105767],{"class":66},[19,111741,111742],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111744,111745],{},"简单反馈控制：",[39,111747,111749],{"className":31626,"code":111748,"language":31628,"meta":44,"style":44},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[46,111750,111751,111771],{"__ignoreMap":44},[49,111752,111753,111755,111757,111759,111761,111763,111765,111767,111769],{"class":51,"line":52},[49,111754,108666],{"class":66},[49,111756,1448],{"class":109},[49,111758,111451],{"class":73},[49,111760,7770],{"class":109},[49,111762,111044],{"class":66},[49,111764,1872],{"class":109},[49,111766,63105],{"class":73},[49,111768,7770],{"class":109},[49,111770,111464],{"class":66},[49,111772,111773,111775,111777,111779,111781,111783,111785,111787],{"class":51,"line":59},[49,111774,108666],{"class":66},[49,111776,1448],{"class":109},[49,111778,108671],{"class":66},[49,111780,1923],{"class":109},[49,111782,103627],{"class":73},[49,111784,13687],{"class":66},[49,111786,103627],{"class":73},[49,111788,1409],{"class":66},[19,111790,111791],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111793,111794],{},"限制动作：",[39,111796,111798],{"className":31626,"code":111797,"language":31628,"meta":44,"style":44},"np.clip(action, -1.0, 1.0)\n",[46,111799,111800],{"__ignoreMap":44},[49,111801,111802,111805,111807,111809,111811,111813],{"class":51,"line":52},[49,111803,111804],{"class":66},"np.clip(action, ",[49,111806,1923],{"class":109},[49,111808,103627],{"class":73},[49,111810,13687],{"class":66},[49,111812,103627],{"class":73},[49,111814,1409],{"class":66},[19,111816,111817,111818,111821],{},"因为 XML 里 ",[46,111819,111820],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[183,111823,102932],{"id":102932},[39,111825,111826],{"className":31626,"code":111687,"language":31628,"meta":44,"style":44},[46,111827,111828,111836],{"__ignoreMap":44},[49,111829,111830,111832,111834],{"class":51,"line":52},[49,111831,33195],{"class":109},[49,111833,111218],{"class":62},[49,111835,111221],{"class":66},[49,111837,111838,111840],{"class":51,"line":59},[49,111839,5344],{"class":109},[49,111841,111228],{"class":66},[19,111843,111844,111845,111848,111849,111852,111853,111856],{},"这段定义了一个函数，用来获取当前观测。",[46,111846,111847],{},"data.qpos.copy()"," 是位置数组副本，",[46,111850,111851],{},"data.qvel.copy()"," 是速度数组副本。",[46,111854,111855],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111858,111859],{},"在本章模型里：",[39,111861,111864],{"className":111862,"code":111863,"language":267,"meta":44},[1094],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[46,111865,111863],{"__ignoreMap":44},[19,111867,111868],{},"所以返回的 obs 是：",[39,111870,111873],{"className":111871,"code":111872,"language":267,"meta":44},[1094],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[46,111874,111872],{"__ignoreMap":44},[39,111876,111878],{"className":31626,"code":111877,"language":31628,"meta":44,"style":44},"def compute_reward(obs: np.ndarray) -> float:\n",[46,111879,111880],{"__ignoreMap":44},[49,111881,111882,111884,111886,111888,111890],{"class":51,"line":52},[49,111883,33195],{"class":109},[49,111885,111243],{"class":62},[49,111887,111246],{"class":66},[49,111889,1442],{"class":73},[49,111891,4993],{"class":66},[19,111893,111894,111895,111898],{},"这行定义奖励函数。输入是观测 ",[46,111896,111897],{},"obs","，输出是一个浮点数奖励。",[39,111900,111902],{"className":31626,"code":111901,"language":31628,"meta":44,"style":44},"cart_x = obs[0]\npole_angle = obs[1]\n",[46,111903,111904,111917],{"__ignoreMap":44},[49,111905,111906,111909,111911,111913,111915],{"class":51,"line":52},[49,111907,111908],{"class":66},"cart_x ",[49,111910,1448],{"class":109},[49,111912,111260],{"class":66},[49,111914,80],{"class":73},[49,111916,34494],{"class":66},[49,111918,111919,111922,111924,111926,111928],{"class":51,"line":59},[49,111920,111921],{"class":66},"pole_angle ",[49,111923,1448],{"class":109},[49,111925,111260],{"class":66},[49,111927,159],{"class":73},[49,111929,34494],{"class":66},[19,111931,111932,111933,111936,111937,111940],{},"数组索引从 0 开始。",[46,111934,111935],{},"obs[0]"," 是第一个元素，也就是小车位置。",[46,111938,111939],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[39,111942,111943],{"className":31626,"code":111012,"language":31628,"meta":44,"style":44},[46,111944,111945],{"__ignoreMap":44},[49,111946,111947,111949,111951,111953,111955,111957,111959,111961,111963,111965,111967,111969,111971,111973],{"class":51,"line":52},[49,111948,18296],{"class":109},[49,111950,111021],{"class":73},[49,111952,1403],{"class":66},[49,111954,103627],{"class":73},[49,111956,53513],{"class":109},[49,111958,111030],{"class":73},[49,111960,7770],{"class":109},[49,111962,111035],{"class":66},[49,111964,1846],{"class":109},[49,111966,111035],{"class":66},[49,111968,1923],{"class":109},[49,111970,111044],{"class":66},[49,111972,1846],{"class":109},[49,111974,111049],{"class":66},[19,111976,111977,111978,111981,111982,111985],{},"这行计算奖励。",[46,111979,111980],{},"cart_x * cart_x"," 是小车位置的平方，",[46,111983,111984],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[39,111987,111989],{"className":31626,"code":111988,"language":31628,"meta":44,"style":44},"data.qpos[1] = 0.1\n",[46,111990,111991],{"__ignoreMap":44},[49,111992,111993,111995,111997,111999,112001],{"class":51,"line":52},[49,111994,105923],{"class":66},[49,111996,159],{"class":73},[49,111998,5697],{"class":66},[49,112000,1448],{"class":109},[49,112002,111364],{"class":73},[19,112004,112005,112006,112008,112009,112011],{},"手动设置杆子的初始角度。因为 ",[46,112007,106680],{}," 是小车位置，",[46,112010,106683],{}," 是杆子角度，所以这里改的是杆子。",[39,112013,112014],{"className":31626,"code":105767,"language":31628,"meta":44,"style":44},[46,112015,112016],{"__ignoreMap":44},[49,112017,112018],{"class":51,"line":52},[49,112019,105767],{"class":66},[19,112021,106726,112022,112024],{},[46,112023,105254],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[39,112026,112028],{"className":31626,"code":112027,"language":31628,"meta":44,"style":44},"total_reward = 0.0\n",[46,112029,112030],{"__ignoreMap":44},[49,112031,112032,112035,112037],{"class":51,"line":52},[49,112033,112034],{"class":66},"total_reward ",[49,112036,1448],{"class":109},[49,112038,105985],{"class":73},[19,112040,112041],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[39,112043,112045],{"className":31626,"code":112044,"language":31628,"meta":44,"style":44},"for step in range(1000):\n",[46,112046,112047],{"__ignoreMap":44},[49,112048,112049,112051,112053,112055,112057,112059,112061],{"class":51,"line":52},[49,112050,4279],{"class":109},[49,112052,32864],{"class":66},[49,112054,27292],{"class":109},[49,112056,33691],{"class":73},[49,112058,1403],{"class":66},[49,112060,7662],{"class":73},[49,112062,32034],{"class":66},[19,112064,112065,112066,112068],{},"循环 1000 步。",[46,112067,108358],{}," 是当前步数，从 0 到 999。",[39,112070,112072],{"className":31626,"code":112071,"language":31628,"meta":44,"style":44},"obs = get_observation(data)\n",[46,112073,112074],{"__ignoreMap":44},[49,112075,112076,112079,112081],{"class":51,"line":52},[49,112077,112078],{"class":66},"obs ",[49,112080,1448],{"class":109},[49,112082,111411],{"class":66},[19,112084,112085,112086,29633],{},"读取当前状态，保存到 ",[46,112087,111897],{},[39,112089,112091],{"className":31626,"code":112090,"language":31628,"meta":44,"style":44},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[46,112092,112093,112105],{"__ignoreMap":44},[49,112094,112095,112097,112099,112101,112103],{"class":51,"line":52},[49,112096,111921],{"class":66},[49,112098,1448],{"class":109},[49,112100,111260],{"class":66},[49,112102,159],{"class":73},[49,112104,34494],{"class":66},[49,112106,112107,112110,112112,112114,112116],{"class":51,"line":59},[49,112108,112109],{"class":66},"pole_angular_velocity ",[49,112111,1448],{"class":109},[49,112113,111260],{"class":66},[49,112115,1472],{"class":73},[49,112117,34494],{"class":66},[19,112119,112120,112121,112124,112125,29633],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[46,112122,112123],{},"obs[3]","？因为 obs 的顺序是 ",[46,112126,112127],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[39,112129,112131],{"className":31626,"code":112130,"language":31628,"meta":44,"style":44},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[46,112132,112133],{"__ignoreMap":44},[49,112134,112135,112137,112139,112141,112143,112145,112147,112149,112151],{"class":51,"line":52},[49,112136,108666],{"class":66},[49,112138,1448],{"class":109},[49,112140,111451],{"class":73},[49,112142,7770],{"class":109},[49,112144,111044],{"class":66},[49,112146,1872],{"class":109},[49,112148,63105],{"class":73},[49,112150,7770],{"class":109},[49,112152,111464],{"class":66},[19,112154,112155,112156,102242,112158,112160],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[46,112157,106484],{},[46,112159,36577],{}," 是人为设置的系数，不是固定公式。",[39,112162,112164],{"className":31626,"code":112163,"language":31628,"meta":44,"style":44},"action = np.clip(action, -1.0, 1.0)\n",[46,112165,112166],{"__ignoreMap":44},[49,112167,112168,112170,112172,112174,112176,112178,112180,112182],{"class":51,"line":52},[49,112169,108666],{"class":66},[49,112171,1448],{"class":109},[49,112173,108671],{"class":66},[49,112175,1923],{"class":109},[49,112177,103627],{"class":73},[49,112179,13687],{"class":66},[49,112181,103627],{"class":73},[49,112183,1409],{"class":66},[19,112185,112186],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[39,112188,112189],{"className":31626,"code":110997,"language":31628,"meta":44,"style":44},[46,112190,112191],{"__ignoreMap":44},[49,112192,112193,112195,112197,112199,112201],{"class":51,"line":52},[49,112194,107095],{"class":66},[49,112196,80],{"class":73},[49,112198,5697],{"class":66},[49,112200,1448],{"class":109},[49,112202,108694],{"class":66},[19,112204,112205],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[39,112207,112208],{"className":31626,"code":105729,"language":31628,"meta":44,"style":44},[46,112209,112210],{"__ignoreMap":44},[49,112211,112212],{"class":51,"line":52},[49,112213,105729],{"class":66},[19,112215,112216,112217,112219],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[46,112218,107350],{}," 计算小车和杆子的下一刻状态。",[39,112221,112223],{"className":31626,"code":112222,"language":31628,"meta":44,"style":44},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[46,112224,112225,112234],{"__ignoreMap":44},[49,112226,112227,112230,112232],{"class":51,"line":52},[49,112228,112229],{"class":66},"reward ",[49,112231,1448],{"class":109},[49,112233,111516],{"class":66},[49,112235,112236,112238,112240],{"class":51,"line":59},[49,112237,112034],{"class":66},[49,112239,10729],{"class":109},[49,112241,111526],{"class":66},[19,112243,112244,112245,112247,112248,112251,112252,29633],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[46,112246,10729],{}," 是简写，",[46,112249,112250],{},"total_reward += reward"," 等价于 ",[46,112253,112254],{},"total_reward = total_reward + reward",[39,112256,112258],{"className":31626,"code":112257,"language":31628,"meta":44,"style":44},"if step % 100 == 0:\n",[46,112259,112260],{"__ignoreMap":44},[49,112261,112262,112264,112266,112268,112270,112272,112274],{"class":51,"line":52},[49,112263,2787],{"class":109},[49,112265,32864],{"class":66},[49,112267,1720],{"class":109},[49,112269,7006],{"class":73},[49,112271,102783],{"class":109},[49,112273,5347],{"class":73},[49,112275,4993],{"class":66},[19,112277,112278,112280,112281,112284],{},[46,112279,1720],{}," 是取余数。",[46,112282,112283],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[39,112286,112288],{"className":31626,"code":112287,"language":31628,"meta":44,"style":44},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[46,112289,112290],{"__ignoreMap":44},[49,112291,112292,112294,112296,112298,112300,112302,112304,112306,112308,112310,112312,112314,112316,112318,112320,112322],{"class":51,"line":52},[49,112293,31663],{"class":73},[49,112295,1403],{"class":66},[49,112297,111555],{"class":1505},[49,112299,111558],{"class":66},[49,112301,111561],{"class":1505},[49,112303,111564],{"class":66},[49,112305,1472],{"class":73},[49,112307,111569],{"class":66},[49,112309,111572],{"class":1505},[49,112311,13687],{"class":66},[49,112313,33266],{"class":73},[49,112315,1403],{"class":66},[49,112317,1442],{"class":73},[49,112319,111583],{"class":66},[49,112321,1472],{"class":73},[49,112323,31745],{"class":66},[19,112325,112326,112327,112330,112331,112334],{},"打印当前步数、观测和动作。",[46,112328,112329],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[46,112332,112333],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112336,103540],{"id":103539},[19,112338,112339],{},"观测向量:",[39,112341,112344],{"className":112342,"code":112343,"language":267,"meta":44},[1094],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[46,112345,112343],{"__ignoreMap":44},[19,112347,112348],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112350,112351],{},"每隔 100 步会打印一次：",[39,112353,112356],{"className":112354,"code":112355,"language":267,"meta":44},[1094],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[46,112357,112355],{"__ignoreMap":44},[19,112359,112360],{},"重点观察：",[591,112362,112363,112369,112374],{},[26,112364,112365,112368],{},[46,112366,112367],{},"pole_angle"," 是否越来越大。",[26,112370,112371,112373],{},[46,112372,110950],{}," 是否跑得太远。",[26,112375,112376,112377,83765,112379,29633],{},"action 是否经常被 clip 到 ",[46,112378,105139],{},[46,112380,159],{},[19,112382,112383],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112385,103572],{"id":103571},[591,112387,112388,112394,112397,112403,112413,112419,112422],{},[26,112389,112390,112391,29633],{},"把初始角度改为 ",[46,112392,112393],{},"data.qpos[1] = 0.3",[26,112395,112396],{},"重新运行，观察控制是否变差。",[26,112398,112399,112400,112402],{},"把 actuator ",[46,112401,108291],{}," 改小。",[26,112404,112405,112406,112409,112410,29633],{},"打印 ",[46,112407,112408],{},"model.nq, model.nv, model.nu","，应为 ",[46,112411,112412],{},"2 2 1",[26,112414,112415,112416,112418],{},"把 reward 里的 ",[46,112417,111984],{}," 系数改大，观察总奖励变化。",[26,112420,112421],{},"把控制器改成反号，观察杆子是否更容易倒。",[26,112423,112424],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112426,103677],{"id":103676},[183,112428,112429],{"id":112429},"杆子方向和预期不一致",[19,112431,103620,112432,112434,112435,112437],{},[46,112433,107463],{}," 和 capsule 的 ",[46,112436,104400],{},"，必要时用 viewer 可视化确认。",[183,112439,112440],{"id":112440},"控制器越控越倒",[19,112442,112443],{},"说明反馈符号可能反了，尝试:",[39,112445,112447],{"className":31626,"code":112446,"language":31628,"meta":44,"style":44},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[46,112448,112449],{"__ignoreMap":44},[49,112450,112451,112453,112455,112457,112459,112461,112463,112465,112467,112469],{"class":51,"line":52},[49,112452,108666],{"class":66},[49,112454,1448],{"class":109},[49,112456,53513],{"class":109},[49,112458,106484],{"class":73},[49,112460,7770],{"class":109},[49,112462,111044],{"class":66},[49,112464,1923],{"class":109},[49,112466,63105],{"class":73},[49,112468,7770],{"class":109},[49,112470,111464],{"class":66},[183,112472,112473],{"id":112473},"小车飞走",[19,112475,112476,112477,112479,112480,112483],{},"降低 ",[46,112478,108291],{}," 或缩小 ",[46,112481,112482],{},"action"," 的 clip 范围。",[183,112485,112487,112489],{"id":112486},"obs3-为什么是杆子角速度",[46,112488,112123],{}," 为什么是杆子角速度",[19,112491,112492],{},"因为这个模型里：",[39,112494,112497],{"className":112495,"code":112496,"language":267,"meta":44},[1094],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[46,112498,112496],{"__ignoreMap":44},[19,112500,110971],{},[39,112502,112505],{"className":112503,"code":112504,"language":267,"meta":44},[1094],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[46,112506,112504],{"__ignoreMap":44},[183,112508,112510],{"id":112509},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112512,112513],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112515,103831],{"id":103830},[19,112517,112518],{},"一个控制任务通常包含：",[591,112520,112521,112524,112532,112537,112540],{},[26,112522,112523],{},"模型：Cartpole 的 body、joint、actuator。",[26,112525,112526,112527,1605,112529,112531],{},"观测：从 ",[46,112528,105254],{},[46,112530,105584],{}," 里取状态。",[26,112533,112534,112535,29633],{},"动作：写入 ",[46,112536,102300],{},[26,112538,112539],{},"奖励：根据任务目标打分。",[26,112541,112542],{},"循环：obs -> action -> step -> reward。",[19,112544,112545],{},"这就是后面 Gymnasium 环境的基本骨架。",[1305,112547,105510],{},{"title":44,"searchDepth":59,"depth":59,"links":112549},[112550,112551,112552,112557,112561,112562,112563,112571],{"id":101870,"depth":59,"text":101871},{"id":101993,"depth":59,"text":101994},{"id":102268,"depth":59,"text":102269,"children":112553},[112554,112555,112556],{"id":110924,"depth":70,"text":110925},{"id":110989,"depth":70,"text":110990},{"id":111005,"depth":70,"text":111006},{"id":102476,"depth":59,"text":102477,"children":112558},[112559,112560],{"id":102796,"depth":70,"text":102796},{"id":102932,"depth":70,"text":102932},{"id":103539,"depth":59,"text":103540},{"id":103571,"depth":59,"text":103572},{"id":103676,"depth":59,"text":103677,"children":112564},[112565,112566,112567,112568,112570],{"id":112429,"depth":70,"text":112429},{"id":112440,"depth":70,"text":112440},{"id":112473,"depth":70,"text":112473},{"id":112486,"depth":70,"text":112569},"obs[3] 为什么是杆子角速度",{"id":112509,"depth":70,"text":112510},{"id":103830,"depth":59,"text":103831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110660,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112578,"title":112579,"body":112580,"description":44,"extension":1328,"meta":114594,"navigation":1330,"path":114595,"seo":114596,"stem":114597,"__hash__":114598},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112581,"toc":114570},[112582,112585,112587,112590,112592,112609,112612,112615,112621,112624,112626,112628,112652,112654,112668,112670,112711,112713,112731,112733,112736,112742,112745,112773,112777,112783,112808,112811,112842,112849,112852,112855,112861,112864,112870,112873,112879,112883,112886,112911,112914,112916,113676,113678,113690,113692,113703,113705,113708,113725,113728,113730,113741,113744,113746,113792,113795,113808,113811,113893,113896,113898,113914,113924,113937,113940,113979,113989,114000,114010,114023,114026,114055,114058,114068,114071,114077,114094,114105,114107,114113,114130,114141,114162,114165,114177,114180,114201,114204,114212,114220,114237,114240,114309,114316,114324,114327,114340,114347,114349,114352,114358,114361,114364,114370,114376,114378,114418,114420,114426,114435,114438,114440,114460,114463,114466,114472,114476,114478,114505,114508,114511,114538,114544,114547,114550,114552,114555,114558,114564,114567],[10,112583,112579],{"id":112584},"_7控制任务reacher-机械臂到达目标",[14,112586,101871],{"id":101870},[19,112588,112589],{},"本章搭建一个二维两关节 reacher 任务。",[19,112591,105555],{},[591,112593,112594,112597,112600,112603,112606],{},[26,112595,112596],{},"两个 hinge joint",[26,112598,112599],{},"两个 motor actuator",[26,112601,112602],{},"site 作为末端点和目标点",[26,112604,112605],{},"根据末端和目标距离设计 reward",[26,112607,112608],{},"构造机械臂任务的基本形式",[19,112610,112611],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112613,112614],{},"Reacher 任务可以理解为：",[39,112616,112619],{"className":112617,"code":112618,"language":267,"meta":44},[1094],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[46,112620,112618],{"__ignoreMap":44},[19,112622,112623],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112625,101994],{"id":101993},[19,112627,101997],{},[39,112629,112630],{"className":25070,"code":105612,"language":25072,"meta":44,"style":44},[46,112631,112632],{"__ignoreMap":44},[49,112633,112634,112636,112638,112640,112642,112644,112646,112648,112650],{"class":51,"line":52},[49,112635,25825],{"class":62},[49,112637,27564],{"class":1505},[49,112639,25082],{"class":1505},[49,112641,27649],{"class":73},[49,112643,105627],{"class":1505},[49,112645,102022],{"class":1505},[49,112647,103725],{"class":1505},[49,112649,102038],{"class":1505},[49,112651,105636],{"class":1505},[19,112653,104043],{},[39,112655,112656],{"className":25070,"code":102143,"language":25072,"meta":44,"style":44},[46,112657,112658],{"__ignoreMap":44},[49,112659,112660,112662,112664,112666],{"class":51,"line":52},[49,112661,25079],{"class":62},[49,112663,25082],{"class":1505},[49,112665,102154],{"class":1505},[49,112667,102157],{"class":1505},[19,112669,104060],{},[39,112671,112673],{"className":25070,"code":112672,"language":25072,"meta":44,"style":44},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[46,112674,112675,112692,112701],{"__ignoreMap":44},[49,112676,112677,112679,112681,112683,112686,112688,112690],{"class":51,"line":52},[49,112678,31578],{"class":62},[49,112680,30424],{"class":1505},[49,112682,26364],{"class":73},[49,112684,112685],{"class":1505}," mujoco-reacher",[49,112687,102199],{"class":1505},[49,112689,102202],{"class":73},[49,112691,102205],{"class":73},[49,112693,112694,112696,112698],{"class":51,"line":59},[49,112695,31578],{"class":62},[49,112697,102212],{"class":1505},[49,112699,112700],{"class":1505}," mujoco-reacher\n",[49,112702,112703,112705,112707,112709],{"class":51,"line":70},[49,112704,25079],{"class":62},[49,112706,25082],{"class":1505},[49,112708,102154],{"class":1505},[49,112710,102157],{"class":1505},[19,112712,102228],{},[591,112714,112715,112718,112721],{},[26,112716,112717],{},"本章使用低维状态，不使用图像输入。",[26,112719,112720],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[26,112722,112723,112724,1605,112726,1605,112728,112730],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[46,112725,105254],{},[46,112727,105584],{},[46,112729,104904],{}," 的方法一致。",[14,112732,102269],{"id":102268},[19,112734,112735],{},"Reacher 任务核心:",[39,112737,112740],{"className":112738,"code":112739,"language":267,"meta":44},[1094],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[46,112741,112739],{"__ignoreMap":44},[19,112743,112744],{},"读取 site 世界坐标:",[39,112746,112748],{"className":31626,"code":112747,"language":31628,"meta":44,"style":44},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[46,112749,112750,112763],{"__ignoreMap":44},[49,112751,112752,112754,112756,112758,112761],{"class":51,"line":52},[49,112753,104858],{"class":66},[49,112755,1448],{"class":109},[49,112757,104629],{"class":66},[49,112759,112760],{"class":1505},"\"tip\"",[49,112762,1409],{"class":66},[49,112764,112765,112768,112770],{"class":51,"line":59},[49,112766,112767],{"class":66},"tip_pos ",[49,112769,1448],{"class":109},[49,112771,112772],{"class":66}," data.site_xpos[site_id]\n",[183,112774,112776],{"id":112775},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112778,112779,112780,112782],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[46,112781,105254],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[39,112784,112786],{"className":31626,"code":112785,"language":31628,"meta":44,"style":44},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[46,112787,112788,112798],{"__ignoreMap":44},[49,112789,112790,112793,112795],{"class":51,"line":52},[49,112791,112792],{"class":66},"tip ",[49,112794,1448],{"class":109},[49,112796,112797],{"class":66}," data.site_xpos[tip_site_id]\n",[49,112799,112800,112803,112805],{"class":51,"line":59},[49,112801,112802],{"class":66},"target ",[49,112804,1448],{"class":109},[49,112806,112807],{"class":66}," data.site_xpos[target_site_id]\n",[19,112809,112810],{},"这样 reward 就很容易写：",[39,112812,112814],{"className":31626,"code":112813,"language":31628,"meta":44,"style":44},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[46,112815,112816,112831],{"__ignoreMap":44},[49,112817,112818,112821,112823,112826,112828],{"class":51,"line":52},[49,112819,112820],{"class":66},"dist ",[49,112822,1448],{"class":109},[49,112824,112825],{"class":66}," np.linalg.norm(tip ",[49,112827,1923],{"class":109},[49,112829,112830],{"class":66}," target)\n",[49,112832,112833,112835,112837,112839],{"class":51,"line":59},[49,112834,112229],{"class":66},[49,112836,1448],{"class":109},[49,112838,53513],{"class":109},[49,112840,112841],{"class":66},"dist\n",[19,112843,112844,112845,112848],{},"距离越小，",[46,112846,112847],{},"-dist"," 越接近 0，奖励越高。",[183,112850,112851],{"id":112851},"两关节机械臂的状态",[19,112853,112854],{},"这个模型有两个 hinge joint：",[39,112856,112859],{"className":112857,"code":112858,"language":267,"meta":44},[1094],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[46,112860,112858],{"__ignoreMap":44},[19,112862,112863],{},"再加上末端和目标位置：",[39,112865,112868],{"className":112866,"code":112867,"language":267,"meta":44},[1094],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[46,112869,112867],{"__ignoreMap":44},[19,112871,112872],{},"总维度：",[39,112874,112877],{"className":112875,"code":112876,"language":267,"meta":44},[1094],"2 + 2 + 3 + 3 = 10\n",[46,112878,112876],{"__ignoreMap":44},[183,112880,112882],{"id":112881},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112884,112885],{},"本章把重力设为：",[39,112887,112889],{"className":54309,"code":112888,"language":54311,"meta":44,"style":44},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[46,112890,112891],{"__ignoreMap":44},[49,112892,112893,112895,112897,112899,112901,112903,112905,112907,112909],{"class":51,"line":52},[49,112894,2300],{"class":66},[49,112896,70401],{"class":147},[49,112898,102418],{"class":62},[49,112900,1448],{"class":66},[49,112902,102423],{"class":1505},[49,112904,102426],{"class":62},[49,112906,1448],{"class":66},[49,112908,104995],{"class":1505},[49,112910,102368],{"class":66},[19,112912,112913],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112915,102477],{"id":102476},[39,112917,112919],{"className":31626,"code":112918,"language":31628,"meta":44,"style":44},"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",[46,112920,112921,112927,112937,112941,112945,112953,112958,112963,112967,112971,112976,112981,112985,112990,112995,113000,113004,113009,113014,113019,113024,113028,113032,113036,113040,113044,113049,113054,113058,113062,113066,113070,113074,113089,113098,113110,113133,113140,113144,113148,113158,113172,113186,113193,113197,113201,113215,113227,113239,113252,113267,113284,113288,113292,113304,113316,113324,113332,113336,113352,113357,113370,113383,113398,113402,113437,113469,113473,113477,113486,113490,113506,113516,113527,113543,113559,113575,113591,113595,113613,113633,113652,113656,113660,113672],{"__ignoreMap":44},[49,112922,112923,112925],{"class":51,"line":52},[49,112924,31640],{"class":109},[49,112926,102525],{"class":66},[49,112928,112929,112931,112933,112935],{"class":51,"line":59},[49,112930,31640],{"class":109},[49,112932,32628],{"class":66},[49,112934,32631],{"class":109},[49,112936,32634],{"class":66},[49,112938,112939],{"class":51,"line":70},[49,112940,3654],{"emptyLinePlaceholder":1330},[49,112942,112943],{"class":51,"line":86},[49,112944,3654],{"emptyLinePlaceholder":1330},[49,112946,112947,112949,112951],{"class":51,"line":98},[49,112948,102538],{"class":73},[49,112950,14816],{"class":109},[49,112952,102543],{"class":1505},[49,112954,112955],{"class":51,"line":121},[49,112956,112957],{"class":1505},"\u003Cmujoco model=\"two_link_reacher\">\n",[49,112959,112960],{"class":51,"line":134},[49,112961,112962],{"class":1505},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[49,112964,112965],{"class":51,"line":1085},[49,112966,3654],{"emptyLinePlaceholder":1330},[49,112968,112969],{"class":51,"line":2574},[49,112970,102562],{"class":1505},[49,112972,112973],{"class":51,"line":2586},[49,112974,112975],{"class":1505},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[49,112977,112978],{"class":51,"line":2867},[49,112979,112980],{"class":1505},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[49,112982,112983],{"class":51,"line":2872},[49,112984,3654],{"emptyLinePlaceholder":1330},[49,112986,112987],{"class":51,"line":2878},[49,112988,112989],{"class":1505},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[49,112991,112992],{"class":51,"line":2883},[49,112993,112994],{"class":1505},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[49,112996,112997],{"class":51,"line":2897},[49,112998,112999],{"class":1505},"      \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",[49,113001,113002],{"class":51,"line":2902},[49,113003,3654],{"emptyLinePlaceholder":1330},[49,113005,113006],{"class":51,"line":2908},[49,113007,113008],{"class":1505},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[49,113010,113011],{"class":51,"line":2929},[49,113012,113013],{"class":1505},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[49,113015,113016],{"class":51,"line":2934},[49,113017,113018],{"class":1505},"        \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",[49,113020,113021],{"class":51,"line":2948},[49,113022,113023],{"class":1505},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[49,113025,113026],{"class":51,"line":2953},[49,113027,107662],{"class":1505},[49,113029,113030],{"class":51,"line":2982},[49,113031,102591],{"class":1505},[49,113033,113034],{"class":51,"line":2987},[49,113035,102596],{"class":1505},[49,113037,113038],{"class":51,"line":3004},[49,113039,3654],{"emptyLinePlaceholder":1330},[49,113041,113042],{"class":51,"line":3009},[49,113043,107679],{"class":1505},[49,113045,113046],{"class":51,"line":3014},[49,113047,113048],{"class":1505},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[49,113050,113051],{"class":51,"line":3019},[49,113052,113053],{"class":1505},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[49,113055,113056],{"class":51,"line":3033},[49,113057,107689],{"class":1505},[49,113059,113060],{"class":51,"line":3038},[49,113061,102601],{"class":1505},[49,113063,113064],{"class":51,"line":3831},[49,113065,96923],{"class":1505},[49,113067,113068],{"class":51,"line":3845},[49,113069,3654],{"emptyLinePlaceholder":1330},[49,113071,113072],{"class":51,"line":3853},[49,113073,3654],{"emptyLinePlaceholder":1330},[49,113075,113076,113078,113081,113084,113086],{"class":51,"line":3858},[49,113077,33195],{"class":109},[49,113079,113080],{"class":62}," site_position",[49,113082,113083],{"class":66},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[49,113085,2557],{"class":73},[49,113087,113088],{"class":66},") -> np.ndarray:\n",[49,113090,113091,113093,113095],{"class":51,"line":3864},[49,113092,104624],{"class":66},[49,113094,1448],{"class":109},[49,113096,113097],{"class":66}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[49,113099,113100,113102,113104,113106,113108],{"class":51,"line":3870},[49,113101,4355],{"class":109},[49,113103,104673],{"class":66},[49,113105,2300],{"class":109},[49,113107,5347],{"class":73},[49,113109,4993],{"class":66},[49,113111,113112,113114,113116,113118,113120,113123,113125,113127,113129,113131],{"class":51,"line":3875},[49,113113,104656],{"class":109},[49,113115,104659],{"class":73},[49,113117,1403],{"class":66},[49,113119,1454],{"class":109},[49,113121,113122],{"class":1505},"\"site not found: ",[49,113124,2286],{"class":73},[49,113126,81036],{"class":66},[49,113128,620],{"class":73},[49,113130,1643],{"class":1505},[49,113132,1409],{"class":66},[49,113134,113135,113137],{"class":51,"line":9200},[49,113136,5344],{"class":109},[49,113138,113139],{"class":66}," data.site_xpos[site_id].copy()\n",[49,113141,113142],{"class":51,"line":9224},[49,113143,3654],{"emptyLinePlaceholder":1330},[49,113145,113146],{"class":51,"line":9229},[49,113147,3654],{"emptyLinePlaceholder":1330},[49,113149,113150,113152,113155],{"class":51,"line":9235},[49,113151,33195],{"class":109},[49,113153,113154],{"class":62}," get_obs",[49,113156,113157],{"class":66},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[49,113159,113160,113163,113165,113168,113170],{"class":51,"line":9262},[49,113161,113162],{"class":66},"    tip ",[49,113164,1448],{"class":109},[49,113166,113167],{"class":66}," site_position(model, data, ",[49,113169,112760],{"class":1505},[49,113171,1409],{"class":66},[49,113173,113174,113177,113179,113181,113184],{"class":51,"line":9267},[49,113175,113176],{"class":66},"    target ",[49,113178,1448],{"class":109},[49,113180,113167],{"class":66},[49,113182,113183],{"class":1505},"\"target\"",[49,113185,1409],{"class":66},[49,113187,113188,113190],{"class":51,"line":9273},[49,113189,5344],{"class":109},[49,113191,113192],{"class":66}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[49,113194,113195],{"class":51,"line":9285},[49,113196,3654],{"emptyLinePlaceholder":1330},[49,113198,113199],{"class":51,"line":9297},[49,113200,3654],{"emptyLinePlaceholder":1330},[49,113202,113203,113205,113208,113211,113213],{"class":51,"line":9309},[49,113204,33195],{"class":109},[49,113206,113207],{"class":62}," reward",[49,113209,113210],{"class":66},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[49,113212,1442],{"class":73},[49,113214,4993],{"class":66},[49,113216,113217,113219,113221,113223,113225],{"class":51,"line":10968},[49,113218,113162],{"class":66},[49,113220,1448],{"class":109},[49,113222,113167],{"class":66},[49,113224,112760],{"class":1505},[49,113226,1409],{"class":66},[49,113228,113229,113231,113233,113235,113237],{"class":51,"line":10993},[49,113230,113176],{"class":66},[49,113232,1448],{"class":109},[49,113234,113167],{"class":66},[49,113236,113183],{"class":1505},[49,113238,1409],{"class":66},[49,113240,113241,113244,113246,113248,113250],{"class":51,"line":11016},[49,113242,113243],{"class":66},"    dist ",[49,113245,1448],{"class":109},[49,113247,112825],{"class":66},[49,113249,1923],{"class":109},[49,113251,112830],{"class":66},[49,113253,113254,113257,113259,113262,113264],{"class":51,"line":11040},[49,113255,113256],{"class":66},"    control_cost ",[49,113258,1448],{"class":109},[49,113260,113261],{"class":73}," 0.01",[49,113263,7770],{"class":109},[49,113265,113266],{"class":66}," np.sum(np.square(data.ctrl))\n",[49,113268,113269,113271,113273,113275,113277,113279,113281],{"class":51,"line":11045},[49,113270,5344],{"class":109},[49,113272,111021],{"class":73},[49,113274,1403],{"class":66},[49,113276,1923],{"class":109},[49,113278,112820],{"class":66},[49,113280,1923],{"class":109},[49,113282,113283],{"class":66}," control_cost)\n",[49,113285,113286],{"class":51,"line":11050},[49,113287,3654],{"emptyLinePlaceholder":1330},[49,113289,113290],{"class":51,"line":11055},[49,113291,3654],{"emptyLinePlaceholder":1330},[49,113293,113294,113296,113298,113300,113302],{"class":51,"line":11064},[49,113295,33195],{"class":109},[49,113297,3227],{"class":62},[49,113299,102622],{"class":66},[49,113301,96911],{"class":73},[49,113303,4993],{"class":66},[49,113305,113306,113308,113310,113312,113314],{"class":51,"line":11069},[49,113307,102631],{"class":66},[49,113309,1448],{"class":109},[49,113311,102636],{"class":66},[49,113313,102538],{"class":73},[49,113315,1409],{"class":66},[49,113317,113318,113320,113322],{"class":51,"line":11075},[49,113319,102645],{"class":66},[49,113321,1448],{"class":109},[49,113323,102650],{"class":66},[49,113325,113326,113328,113330],{"class":51,"line":11096},[49,113327,111377],{"class":66},[49,113329,1448],{"class":109},[49,113331,105985],{"class":73},[49,113333,113334],{"class":51,"line":11102},[49,113335,3654],{"emptyLinePlaceholder":1330},[49,113337,113338,113340,113342,113344,113346,113348,113350],{"class":51,"line":11116},[49,113339,4455],{"class":109},[49,113341,32864],{"class":66},[49,113343,27292],{"class":109},[49,113345,33691],{"class":73},[49,113347,1403],{"class":66},[49,113349,66309],{"class":73},[49,113351,32034],{"class":66},[49,113353,113354],{"class":51,"line":11122},[49,113355,113356],{"class":66},"        mujoco.mj_forward(model, data)\n",[49,113358,113359,113362,113364,113366,113368],{"class":51,"line":11149},[49,113360,113361],{"class":66},"        tip ",[49,113363,1448],{"class":109},[49,113365,113167],{"class":66},[49,113367,112760],{"class":1505},[49,113369,1409],{"class":66},[49,113371,113372,113375,113377,113379,113381],{"class":51,"line":11158},[49,113373,113374],{"class":66},"        target ",[49,113376,1448],{"class":109},[49,113378,113167],{"class":66},[49,113380,113183],{"class":1505},[49,113382,1409],{"class":66},[49,113384,113385,113388,113390,113393,113395],{"class":51,"line":11164},[49,113386,113387],{"class":66},"        error ",[49,113389,1448],{"class":109},[49,113391,113392],{"class":66}," target ",[49,113394,1923],{"class":109},[49,113396,113397],{"class":66}," tip\n",[49,113399,113400],{"class":51,"line":11172},[49,113401,3654],{"emptyLinePlaceholder":1330},[49,113403,113404,113406,113408,113410,113412,113415,113417,113419,113422,113424,113427,113429,113431,113433,113435],{"class":51,"line":11177},[49,113405,107841],{"class":66},[49,113407,80],{"class":73},[49,113409,5697],{"class":66},[49,113411,1448],{"class":109},[49,113413,113414],{"class":66}," np.clip(",[49,113416,106484],{"class":73},[49,113418,7770],{"class":109},[49,113420,113421],{"class":66}," error[",[49,113423,1478],{"class":73},[49,113425,113426],{"class":66},"], ",[49,113428,1923],{"class":109},[49,113430,103627],{"class":73},[49,113432,13687],{"class":66},[49,113434,103627],{"class":73},[49,113436,1409],{"class":66},[49,113438,113439,113441,113443,113445,113447,113449,113451,113453,113455,113457,113459,113461,113463,113465,113467],{"class":51,"line":17854},[49,113440,107841],{"class":66},[49,113442,159],{"class":73},[49,113444,5697],{"class":66},[49,113446,1448],{"class":109},[49,113448,113414],{"class":66},[49,113450,106484],{"class":73},[49,113452,7770],{"class":109},[49,113454,113421],{"class":66},[49,113456,80],{"class":73},[49,113458,113426],{"class":66},[49,113460,1923],{"class":109},[49,113462,103627],{"class":73},[49,113464,13687],{"class":66},[49,113466,103627],{"class":73},[49,113468,1409],{"class":66},[49,113470,113471],{"class":51,"line":17860},[49,113472,3654],{"emptyLinePlaceholder":1330},[49,113474,113475],{"class":51,"line":17883},[49,113476,102740],{"class":66},[49,113478,113479,113481,113483],{"class":51,"line":17889},[49,113480,111521],{"class":66},[49,113482,10729],{"class":109},[49,113484,113485],{"class":66}," reward(model, data)\n",[49,113487,113488],{"class":51,"line":17912},[49,113489,3654],{"emptyLinePlaceholder":1330},[49,113491,113492,113494,113496,113498,113500,113502,113504],{"class":51,"line":17926},[49,113493,3751],{"class":109},[49,113495,32864],{"class":66},[49,113497,1720],{"class":109},[49,113499,7006],{"class":73},[49,113501,102783],{"class":109},[49,113503,5347],{"class":73},[49,113505,4993],{"class":66},[49,113507,113508,113511,113513],{"class":51,"line":17946},[49,113509,113510],{"class":66},"            obs ",[49,113512,1448],{"class":109},[49,113514,113515],{"class":66}," get_obs(model, data)\n",[49,113517,113518,113520,113522,113524],{"class":51,"line":17952},[49,113519,35898],{"class":73},[49,113521,1403],{"class":66},[49,113523,111555],{"class":1505},[49,113525,113526],{"class":66},", step)\n",[49,113528,113529,113531,113533,113536,113539,113541],{"class":51,"line":17963},[49,113530,35898],{"class":73},[49,113532,1403],{"class":66},[49,113534,113535],{"class":1505},"\"  tip:\"",[49,113537,113538],{"class":66},", np.round(tip, ",[49,113540,1472],{"class":73},[49,113542,31745],{"class":66},[49,113544,113545,113547,113549,113552,113555,113557],{"class":51,"line":17986},[49,113546,35898],{"class":73},[49,113548,1403],{"class":66},[49,113550,113551],{"class":1505},"\"  target:\"",[49,113553,113554],{"class":66},", np.round(target, ",[49,113556,1472],{"class":73},[49,113558,31745],{"class":66},[49,113560,113561,113563,113565,113568,113571,113573],{"class":51,"line":18008},[49,113562,35898],{"class":73},[49,113564,1403],{"class":66},[49,113566,113567],{"class":1505},"\"  ctrl:\"",[49,113569,113570],{"class":66},", np.round(data.ctrl.copy(), ",[49,113572,1472],{"class":73},[49,113574,31745],{"class":66},[49,113576,113577,113579,113581,113584,113587,113589],{"class":51,"line":18013},[49,113578,35898],{"class":73},[49,113580,1403],{"class":66},[49,113582,113583],{"class":1505},"\"  obs_dim:\"",[49,113585,113586],{"class":66},", obs.shape[",[49,113588,80],{"class":73},[49,113590,5911],{"class":66},[49,113592,113593],{"class":51,"line":18019},[49,113594,3654],{"emptyLinePlaceholder":1330},[49,113596,113597,113599,113601,113603,113605,113607,113609,113611],{"class":51,"line":18033},[49,113598,32547],{"class":73},[49,113600,1403],{"class":66},[49,113602,111600],{"class":1505},[49,113604,13687],{"class":66},[49,113606,33266],{"class":73},[49,113608,111607],{"class":66},[49,113610,1472],{"class":73},[49,113612,31745],{"class":66},[49,113614,113615,113617,113619,113622,113625,113627,113629,113631],{"class":51,"line":18046},[49,113616,32547],{"class":73},[49,113618,1403],{"class":66},[49,113620,113621],{"class":1505},"\"final tip:\"",[49,113623,113624],{"class":66},", np.round(site_position(model, data, ",[49,113626,112760],{"class":1505},[49,113628,111569],{"class":66},[49,113630,1472],{"class":73},[49,113632,31745],{"class":66},[49,113634,113635,113637,113639,113642,113644,113646,113648,113650],{"class":51,"line":18051},[49,113636,32547],{"class":73},[49,113638,1403],{"class":66},[49,113640,113641],{"class":1505},"\"target:\"",[49,113643,113624],{"class":66},[49,113645,113183],{"class":1505},[49,113647,111569],{"class":66},[49,113649,1472],{"class":73},[49,113651,31745],{"class":66},[49,113653,113654],{"class":51,"line":18065},[49,113655,3654],{"emptyLinePlaceholder":1330},[49,113657,113658],{"class":51,"line":18070},[49,113659,3654],{"emptyLinePlaceholder":1330},[49,113661,113662,113664,113666,113668,113670],{"class":51,"line":18076},[49,113663,2787],{"class":109},[49,113665,32468],{"class":73},[49,113667,102783],{"class":109},[49,113669,102786],{"class":1505},[49,113671,4993],{"class":66},[49,113673,113674],{"class":51,"line":18081},[49,113675,102793],{"class":66},[19,113677,104794],{},[39,113679,113681],{"className":25070,"code":113680,"language":25072,"meta":44,"style":44},"touch ch7_reacher.py\n",[46,113682,113683],{"__ignoreMap":44},[49,113684,113685,113687],{"class":51,"line":52},[49,113686,102507],{"class":62},[49,113688,113689],{"class":1505}," ch7_reacher.py\n",[19,113691,111668],{},[39,113693,113695],{"className":25070,"code":113694,"language":25072,"meta":44,"style":44},"python ch7_reacher.py\n",[46,113696,113697],{"__ignoreMap":44},[49,113698,113699,113701],{"class":51,"line":52},[49,113700,31628],{"class":62},[49,113702,113689],{"class":1505},[183,113704,102796],{"id":102796},[19,113706,113707],{},"读取 site 坐标：",[39,113709,113711],{"className":31626,"code":113710,"language":31628,"meta":44,"style":44},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[46,113712,113713],{"__ignoreMap":44},[49,113714,113715,113717,113719,113721,113723],{"class":51,"line":52},[49,113716,33195],{"class":109},[49,113718,113080],{"class":62},[49,113720,113083],{"class":66},[49,113722,2557],{"class":73},[49,113724,113088],{"class":66},[19,113726,113727],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113729,111684],{},[39,113731,113733],{"className":31626,"code":113732,"language":31628,"meta":44,"style":44},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[46,113734,113735],{"__ignoreMap":44},[49,113736,113737,113739],{"class":51,"line":52},[49,113738,18296],{"class":109},[49,113740,113192],{"class":66},[19,113742,113743],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113745,111009],{},[39,113747,113749],{"className":31626,"code":113748,"language":31628,"meta":44,"style":44},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[46,113750,113751,113763,113776],{"__ignoreMap":44},[49,113752,113753,113755,113757,113759,113761],{"class":51,"line":52},[49,113754,112820],{"class":66},[49,113756,1448],{"class":109},[49,113758,112825],{"class":66},[49,113760,1923],{"class":109},[49,113762,112830],{"class":66},[49,113764,113765,113768,113770,113772,113774],{"class":51,"line":59},[49,113766,113767],{"class":66},"control_cost ",[49,113769,1448],{"class":109},[49,113771,113261],{"class":73},[49,113773,7770],{"class":109},[49,113775,113266],{"class":66},[49,113777,113778,113780,113782,113784,113786,113788,113790],{"class":51,"line":70},[49,113779,18296],{"class":109},[49,113781,111021],{"class":73},[49,113783,1403],{"class":66},[49,113785,1923],{"class":109},[49,113787,112820],{"class":66},[49,113789,1923],{"class":109},[49,113791,113283],{"class":66},[19,113793,113794],{},"奖励由两部分组成：",[591,113796,113797,113802],{},[26,113798,113799,113801],{},[46,113800,112847],{},"：末端离目标越远，奖励越低。",[26,113803,113804,113807],{},[46,113805,113806],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113809,113810],{},"简单控制器：",[39,113812,113814],{"className":31626,"code":113813,"language":31628,"meta":44,"style":44},"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",[46,113815,113816,113829,113861],{"__ignoreMap":44},[49,113817,113818,113821,113823,113825,113827],{"class":51,"line":52},[49,113819,113820],{"class":66},"error ",[49,113822,1448],{"class":109},[49,113824,113392],{"class":66},[49,113826,1923],{"class":109},[49,113828,113397],{"class":66},[49,113830,113831,113833,113835,113837,113839,113841,113843,113845,113847,113849,113851,113853,113855,113857,113859],{"class":51,"line":59},[49,113832,107095],{"class":66},[49,113834,80],{"class":73},[49,113836,5697],{"class":66},[49,113838,1448],{"class":109},[49,113840,113414],{"class":66},[49,113842,106484],{"class":73},[49,113844,7770],{"class":109},[49,113846,113421],{"class":66},[49,113848,1478],{"class":73},[49,113850,113426],{"class":66},[49,113852,1923],{"class":109},[49,113854,103627],{"class":73},[49,113856,13687],{"class":66},[49,113858,103627],{"class":73},[49,113860,1409],{"class":66},[49,113862,113863,113865,113867,113869,113871,113873,113875,113877,113879,113881,113883,113885,113887,113889,113891],{"class":51,"line":70},[49,113864,107095],{"class":66},[49,113866,159],{"class":73},[49,113868,5697],{"class":66},[49,113870,1448],{"class":109},[49,113872,113414],{"class":66},[49,113874,106484],{"class":73},[49,113876,7770],{"class":109},[49,113878,113421],{"class":66},[49,113880,80],{"class":73},[49,113882,113426],{"class":66},[49,113884,1923],{"class":109},[49,113886,103627],{"class":73},[49,113888,13687],{"class":66},[49,113890,103627],{"class":73},[49,113892,1409],{"class":66},[19,113894,113895],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[183,113897,102932],{"id":102932},[39,113899,113900],{"className":31626,"code":113710,"language":31628,"meta":44,"style":44},[46,113901,113902],{"__ignoreMap":44},[49,113903,113904,113906,113908,113910,113912],{"class":51,"line":52},[49,113905,33195],{"class":109},[49,113907,113080],{"class":62},[49,113909,113083],{"class":66},[49,113911,2557],{"class":73},[49,113913,113088],{"class":66},[19,113915,113916,113917,113919,113920,83765,113922,29633],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[46,113918,81036],{}," 是 site 的名字，比如 ",[46,113921,112760],{},[46,113923,113183],{},[39,113925,113927],{"className":31626,"code":113926,"language":31628,"meta":44,"style":44},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[46,113928,113929],{"__ignoreMap":44},[49,113930,113931,113933,113935],{"class":51,"line":52},[49,113932,104858],{"class":66},[49,113934,1448],{"class":109},[49,113936,113097],{"class":66},[19,113938,113939],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[39,113941,113943],{"className":31626,"code":113942,"language":31628,"meta":44,"style":44},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[46,113944,113945,113957],{"__ignoreMap":44},[49,113946,113947,113949,113951,113953,113955],{"class":51,"line":52},[49,113948,2787],{"class":109},[49,113950,104673],{"class":66},[49,113952,2300],{"class":109},[49,113954,5347],{"class":73},[49,113956,4993],{"class":66},[49,113958,113959,113961,113963,113965,113967,113969,113971,113973,113975,113977],{"class":51,"line":59},[49,113960,105119],{"class":109},[49,113962,104659],{"class":73},[49,113964,1403],{"class":66},[49,113966,1454],{"class":109},[49,113968,113122],{"class":1505},[49,113970,2286],{"class":73},[49,113972,81036],{"class":66},[49,113974,620],{"class":73},[49,113976,1643],{"class":1505},[49,113978,1409],{"class":66},[19,113980,113981,113982,113985,113986,113988],{},"如果 site 没找到，就主动报错。",[46,113983,113984],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[46,113987,81036],{}," 的值放进字符串里。",[39,113990,113992],{"className":31626,"code":113991,"language":31628,"meta":44,"style":44},"return data.site_xpos[site_id].copy()\n",[46,113993,113994],{"__ignoreMap":44},[49,113995,113996,113998],{"class":51,"line":52},[49,113997,18296],{"class":109},[49,113999,113139],{"class":66},[19,114001,114002,114003,114005,114006,114009],{},"返回这个 site 的世界坐标。",[46,114004,104904],{}," 里的每一行都是一个 site 的 ",[46,114007,114008],{},"(x, y, z)"," 坐标。",[39,114011,114013],{"className":31626,"code":114012,"language":31628,"meta":44,"style":44},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[46,114014,114015],{"__ignoreMap":44},[49,114016,114017,114019,114021],{"class":51,"line":52},[49,114018,33195],{"class":109},[49,114020,113154],{"class":62},[49,114022,113157],{"class":66},[19,114024,114025],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[39,114027,114029],{"className":31626,"code":114028,"language":31628,"meta":44,"style":44},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[46,114030,114031,114043],{"__ignoreMap":44},[49,114032,114033,114035,114037,114039,114041],{"class":51,"line":52},[49,114034,112792],{"class":66},[49,114036,1448],{"class":109},[49,114038,113167],{"class":66},[49,114040,112760],{"class":1505},[49,114042,1409],{"class":66},[49,114044,114045,114047,114049,114051,114053],{"class":51,"line":59},[49,114046,112802],{"class":66},[49,114048,1448],{"class":109},[49,114050,113167],{"class":66},[49,114052,113183],{"class":1505},[49,114054,1409],{"class":66},[19,114056,114057],{},"分别读取末端点和目标点的世界坐标。",[39,114059,114060],{"className":31626,"code":113732,"language":31628,"meta":44,"style":44},[46,114061,114062],{"__ignoreMap":44},[49,114063,114064,114066],{"class":51,"line":52},[49,114065,18296],{"class":109},[49,114067,113192],{"class":66},[19,114069,114070],{},"把四部分拼成一个观测数组：",[39,114072,114075],{"className":114073,"code":114074,"language":267,"meta":44},[1094],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[46,114076,114074],{"__ignoreMap":44},[39,114078,114080],{"className":31626,"code":114079,"language":31628,"meta":44,"style":44},"dist = np.linalg.norm(tip - target)\n",[46,114081,114082],{"__ignoreMap":44},[49,114083,114084,114086,114088,114090,114092],{"class":51,"line":52},[49,114085,112820],{"class":66},[49,114087,1448],{"class":109},[49,114089,112825],{"class":66},[49,114091,1923],{"class":109},[49,114093,112830],{"class":66},[19,114095,114096,114097,114100,114101,114104],{},"计算 tip 到 target 的距离。",[46,114098,114099],{},"tip - target"," 得到一个三维向量，",[46,114102,114103],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114106,551],{},[39,114108,114111],{"className":114109,"code":114110,"language":267,"meta":44},[1094],"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",[46,114112,114110],{"__ignoreMap":44},[39,114114,114116],{"className":31626,"code":114115,"language":31628,"meta":44,"style":44},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[46,114117,114118],{"__ignoreMap":44},[49,114119,114120,114122,114124,114126,114128],{"class":51,"line":52},[49,114121,113767],{"class":66},[49,114123,1448],{"class":109},[49,114125,113261],{"class":73},[49,114127,7770],{"class":109},[49,114129,113266],{"class":66},[19,114131,114132,114133,114136,114137,114140],{},"计算动作惩罚。",[46,114134,114135],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[46,114138,114139],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[39,114142,114144],{"className":31626,"code":114143,"language":31628,"meta":44,"style":44},"return float(-dist - control_cost)\n",[46,114145,114146],{"__ignoreMap":44},[49,114147,114148,114150,114152,114154,114156,114158,114160],{"class":51,"line":52},[49,114149,18296],{"class":109},[49,114151,111021],{"class":73},[49,114153,1403],{"class":66},[49,114155,1923],{"class":109},[49,114157,112820],{"class":66},[49,114159,1923],{"class":109},[49,114161,113283],{"class":66},[19,114163,114164],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[39,114166,114167],{"className":31626,"code":112027,"language":31628,"meta":44,"style":44},[46,114168,114169],{"__ignoreMap":44},[49,114170,114171,114173,114175],{"class":51,"line":52},[49,114172,112034],{"class":66},[49,114174,1448],{"class":109},[49,114176,105985],{"class":73},[19,114178,114179],{},"累计奖励变量，记录整个运行过程的总分。",[39,114181,114183],{"className":31626,"code":114182,"language":31628,"meta":44,"style":44},"for step in range(500):\n",[46,114184,114185],{"__ignoreMap":44},[49,114186,114187,114189,114191,114193,114195,114197,114199],{"class":51,"line":52},[49,114188,4279],{"class":109},[49,114190,32864],{"class":66},[49,114192,27292],{"class":109},[49,114194,33691],{"class":73},[49,114196,1403],{"class":66},[49,114198,66309],{"class":73},[49,114200,32034],{"class":66},[19,114202,114203],{},"运行 500 个控制步。",[39,114205,114206],{"className":31626,"code":105767,"language":31628,"meta":44,"style":44},[46,114207,114208],{"__ignoreMap":44},[49,114209,114210],{"class":51,"line":52},[49,114211,105767],{"class":66},[19,114213,114214,114215,102242,114217,114219],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[46,114216,104455],{},[46,114218,104458],{}," 是当前状态下的坐标。",[39,114221,114223],{"className":31626,"code":114222,"language":31628,"meta":44,"style":44},"error = target - tip\n",[46,114224,114225],{"__ignoreMap":44},[49,114226,114227,114229,114231,114233,114235],{"class":51,"line":52},[49,114228,113820],{"class":66},[49,114230,1448],{"class":109},[49,114232,113392],{"class":66},[49,114234,1923],{"class":109},[49,114236,113397],{"class":66},[19,114238,114239],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[39,114241,114243],{"className":31626,"code":114242,"language":31628,"meta":44,"style":44},"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",[46,114244,114245,114277],{"__ignoreMap":44},[49,114246,114247,114249,114251,114253,114255,114257,114259,114261,114263,114265,114267,114269,114271,114273,114275],{"class":51,"line":52},[49,114248,107095],{"class":66},[49,114250,80],{"class":73},[49,114252,5697],{"class":66},[49,114254,1448],{"class":109},[49,114256,113414],{"class":66},[49,114258,106484],{"class":73},[49,114260,7770],{"class":109},[49,114262,113421],{"class":66},[49,114264,1478],{"class":73},[49,114266,113426],{"class":66},[49,114268,1923],{"class":109},[49,114270,103627],{"class":73},[49,114272,13687],{"class":66},[49,114274,103627],{"class":73},[49,114276,1409],{"class":66},[49,114278,114279,114281,114283,114285,114287,114289,114291,114293,114295,114297,114299,114301,114303,114305,114307],{"class":51,"line":59},[49,114280,107095],{"class":66},[49,114282,159],{"class":73},[49,114284,5697],{"class":66},[49,114286,1448],{"class":109},[49,114288,113414],{"class":66},[49,114290,106484],{"class":73},[49,114292,7770],{"class":109},[49,114294,113421],{"class":66},[49,114296,80],{"class":73},[49,114298,113426],{"class":66},[49,114300,1923],{"class":109},[49,114302,103627],{"class":73},[49,114304,13687],{"class":66},[49,114306,103627],{"class":73},[49,114308,1409],{"class":66},[19,114310,114311,114312,114315],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[46,114313,114314],{},"error -> ctrl -> step"," 的流程。",[39,114317,114318],{"className":31626,"code":105729,"language":31628,"meta":44,"style":44},[46,114319,114320],{"__ignoreMap":44},[49,114321,114322],{"class":51,"line":52},[49,114323,105729],{"class":66},[19,114325,114326],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[39,114328,114330],{"className":31626,"code":114329,"language":31628,"meta":44,"style":44},"obs = get_obs(model, data)\n",[46,114331,114332],{"__ignoreMap":44},[49,114333,114334,114336,114338],{"class":51,"line":52},[49,114335,112078],{"class":66},[49,114337,1448],{"class":109},[49,114339,113515],{"class":66},[19,114341,114342,114343,114346],{},"读取最新观测。后面打印 ",[46,114344,114345],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114348,103540],{"id":103539},[19,114350,114351],{},"观测维度为:",[39,114353,114356],{"className":114354,"code":114355,"language":267,"meta":44},[1094],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[46,114357,114355],{"__ignoreMap":44},[19,114359,114360],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114362,114363],{},"程序每 100 步打印：",[39,114365,114368],{"className":114366,"code":114367,"language":267,"meta":44},[1094],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[46,114369,114367],{"__ignoreMap":44},[19,114371,114372,114373,114375],{},"如果控制有效，你应该看到最终 ",[46,114374,104455],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114377,103572],{"id":103571},[591,114379,114380,114383,114386,114392,114398,114405,114415],{},[26,114381,114382],{},"修改目标点位置。",[26,114384,114385],{},"重新运行，观察最终 tip 是否变化。",[26,114387,114388,114389,114391],{},"把 gravity 改成 ",[46,114390,103813],{},"，观察控制是否变差。",[26,114393,112405,114394,112409,114396,29633],{},[46,114395,103382],{},[46,114397,1478],{},[26,114399,103635,114400,103638,114402,114404],{},[46,114401,111820],{},[46,114403,108531],{},"，观察机械臂是否更难移动。",[26,114406,103635,114407,83756,114409,103638,114411,114414],{},[46,114408,104458],{},[46,114410,105370],{},[46,114412,114413],{},"0.2 0 0.6","，观察 reward 和 final tip。",[26,114416,114417],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114419,103677],{"id":103676},[183,114421,114423],{"id":114422},"site-not-found",[46,114424,114425],{},"site not found",[19,114427,114428,114429,102242,114432,29633],{},"检查 XML 中是否有 ",[46,114430,114431],{},"site name=\"tip\"",[46,114433,114434],{},"site name=\"target\"",[183,114436,114437],{"id":114437},"机械臂完全不动",[19,114439,103747],{},[591,114441,114442,114447,114450,114455],{},[26,114443,114444,114446],{},[46,114445,103382],{}," 是否为 2",[26,114448,114449],{},"actuator 是否引用正确 joint",[26,114451,114452,114454],{},[46,114453,102300],{}," 是否被赋值",[26,114456,114457,114458],{},"是否执行了 ",[46,114459,101909],{},[183,114461,114462],{"id":114462},"控制效果不好",[19,114464,114465],{},"正常。本章重点不是控制器最优，而是任务结构:",[39,114467,114470],{"className":114468,"code":114469,"language":267,"meta":44},[1094],"obs → action → mj_step → reward → next_obs\n",[46,114471,114469],{"__ignoreMap":44},[183,114473,114475],{"id":114474},"tip-坐标不变化","tip 坐标不变化",[19,114477,103799],{},[591,114479,114480,114485,114493,114502],{},[26,114481,114482,114483,29633],{},"是否每步调用了 ",[46,114484,101909],{},[26,114486,114487,114488,102242,114490,29633],{},"是否写入了 ",[46,114489,107350],{},[46,114491,114492],{},"data.ctrl[1]",[26,114494,114495,114496,1605,114499,29633],{},"actuator 是否正确引用 ",[46,114497,114498],{},"joint1",[46,114500,114501],{},"joint2",[26,114503,114504],{},"控制输入是否太小。",[183,114506,114507],{"id":114507},"目标点不会动",[19,114509,114510],{},"本章的 target 是固定 site：",[39,114512,114514],{"className":54309,"code":114513,"language":54311,"meta":44,"style":44},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[46,114515,114516],{"__ignoreMap":44},[49,114517,114518,114520,114522,114524,114526,114528,114530,114532,114535],{"class":51,"line":52},[49,114519,2300],{"class":66},[49,114521,104434],{"class":147},[49,114523,16171],{"class":62},[49,114525,1448],{"class":66},[49,114527,113183],{"class":1505},[49,114529,102330],{"class":62},[49,114531,1448],{"class":66},[49,114533,114534],{"class":1505},"\"0.5 0 0.4\"",[49,114536,114537],{"class":66}," ...\u002F>\n",[19,114539,114540,114541,114543],{},"它直接挂在 ",[46,114542,103065],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[183,114545,114546],{"id":114546},"机械臂不像真实机械臂",[19,114548,114549],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114551,103831],{"id":103830},[19,114553,114554],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114556,114557],{},"核心公式：",[39,114559,114562],{"className":114560,"code":114561,"language":267,"meta":44},[1094],"distance = ||tip - target||\nreward = -distance - action_cost\n",[46,114563,114561],{"__ignoreMap":44},[19,114565,114566],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1305,114568,114569],{},"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":44,"searchDepth":59,"depth":59,"links":114571},[114572,114573,114574,114579,114583,114584,114585,114593],{"id":101870,"depth":59,"text":101871},{"id":101993,"depth":59,"text":101994},{"id":102268,"depth":59,"text":102269,"children":114575},[114576,114577,114578],{"id":112775,"depth":70,"text":112776},{"id":112851,"depth":70,"text":112851},{"id":112881,"depth":70,"text":112882},{"id":102476,"depth":59,"text":102477,"children":114580},[114581,114582],{"id":102796,"depth":70,"text":102796},{"id":102932,"depth":70,"text":102932},{"id":103539,"depth":59,"text":103540},{"id":103571,"depth":59,"text":103572},{"id":103676,"depth":59,"text":103677,"children":114586},[114587,114588,114589,114590,114591,114592],{"id":114422,"depth":70,"text":114425},{"id":114437,"depth":70,"text":114437},{"id":114462,"depth":70,"text":114462},{"id":114474,"depth":70,"text":114475},{"id":114507,"depth":70,"text":114507},{"id":114546,"depth":70,"text":114546},{"id":103830,"depth":59,"text":103831},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112579,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114600,"title":114601,"body":114602,"description":44,"extension":1328,"meta":118064,"navigation":1330,"path":118065,"seo":118066,"stem":118067,"__hash__":118068},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114603,"toc":118035},[114604,114607,114609,114612,114615,114640,114643,114649,114652,114658,114660,114662,114686,114688,114706,114708,114751,114753,114780,114782,114785,114837,114840,114846,114855,114858,114896,114899,114938,114941,114949,114956,114959,114965,114967,115021,115028,115073,115076,115080,115096,115106,115108,116369,116371,116383,116385,116396,116398,116401,116422,116425,116428,116461,116467,116470,116503,116506,116509,116550,116555,116569,116572,116585,116590,116613,116615,116630,116640,116655,116662,116682,116697,116715,116718,116735,116743,116759,116765,116797,116810,116842,116852,116887,116901,116947,116961,117003,117014,117027,117033,117066,117069,117096,117106,117146,117156,117173,117180,117198,117201,117242,117255,117270,117273,117296,117299,117311,117314,117333,117338,117359,117362,117377,117380,117414,117426,117441,117444,117469,117472,117491,117494,117526,117529,117553,117559,117589,117596,117609,117612,117614,117616,117622,117625,117628,117640,117643,117645,117699,117701,117705,117711,117720,117723,117730,117732,117755,117758,117762,117764,117782,117788,117790,117823,117826,117832,117836,117839,117859,117864,117868,117875,117895,117900,117904,117907,117927,117930,118016,118020,118023,118029,118032],[10,114605,114601],{"id":114606},"_8gymnasium-风格强化学习接口基础",[14,114608,101871],{"id":101870},[19,114610,114611],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114613,114614],{},"你将实现:",[39,114616,114618],{"className":31626,"code":114617,"language":31628,"meta":44,"style":44},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[46,114619,114620,114630],{"__ignoreMap":44},[49,114621,114622,114625,114627],{"class":51,"line":52},[49,114623,114624],{"class":66},"obs, info ",[49,114626,1448],{"class":109},[49,114628,114629],{"class":66}," env.reset()\n",[49,114631,114632,114635,114637],{"class":51,"line":59},[49,114633,114634],{"class":66},"obs, reward, terminated, truncated, info ",[49,114636,1448],{"class":109},[49,114638,114639],{"class":66}," env.step(action)\n",[19,114641,114642],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114644,114645,114646,114648],{},"前面章节的代码都是“脚本式”的：在 ",[46,114647,103519],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114650,114651],{},"可以先记住 Gymnasium 环境的核心交互：",[39,114653,114656],{"className":114654,"code":114655,"language":267,"meta":44},[1094],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[46,114657,114655],{"__ignoreMap":44},[14,114659,101994],{"id":101993},[19,114661,101997],{},[39,114663,114664],{"className":25070,"code":105612,"language":25072,"meta":44,"style":44},[46,114665,114666],{"__ignoreMap":44},[49,114667,114668,114670,114672,114674,114676,114678,114680,114682,114684],{"class":51,"line":52},[49,114669,25825],{"class":62},[49,114671,27564],{"class":1505},[49,114673,25082],{"class":1505},[49,114675,27649],{"class":73},[49,114677,105627],{"class":1505},[49,114679,102022],{"class":1505},[49,114681,103725],{"class":1505},[49,114683,102038],{"class":1505},[49,114685,105636],{"class":1505},[19,114687,104043],{},[39,114689,114691],{"className":25070,"code":114690,"language":25072,"meta":44,"style":44},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[46,114692,114693],{"__ignoreMap":44},[49,114694,114695,114697,114699,114701,114703],{"class":51,"line":52},[49,114696,25079],{"class":62},[49,114698,25082],{"class":1505},[49,114700,102154],{"class":1505},[49,114702,108935],{"class":1505},[49,114704,114705],{"class":1505}," gymnasium\n",[19,114707,104060],{},[39,114709,114711],{"className":25070,"code":114710,"language":25072,"meta":44,"style":44},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[46,114712,114713,114730,114739],{"__ignoreMap":44},[49,114714,114715,114717,114719,114721,114724,114726,114728],{"class":51,"line":52},[49,114716,31578],{"class":62},[49,114718,30424],{"class":1505},[49,114720,26364],{"class":73},[49,114722,114723],{"class":1505}," mujoco-gym-api",[49,114725,102199],{"class":1505},[49,114727,102202],{"class":73},[49,114729,102205],{"class":73},[49,114731,114732,114734,114736],{"class":51,"line":59},[49,114733,31578],{"class":62},[49,114735,102212],{"class":1505},[49,114737,114738],{"class":1505}," mujoco-gym-api\n",[49,114740,114741,114743,114745,114747,114749],{"class":51,"line":70},[49,114742,25079],{"class":62},[49,114744,25082],{"class":1505},[49,114746,102154],{"class":1505},[49,114748,108935],{"class":1505},[49,114750,114705],{"class":1505},[19,114752,102228],{},[591,114754,114755,114765,114768,114774],{},[26,114756,114757,114758,114761,114762,29633],{},"本章使用 ",[46,114759,114760],{},"gymnasium","，不是旧版 ",[46,114763,114764],{},"gym",[26,114766,114767],{},"Gymnasium API 与旧 Gym API 有差异。",[26,114769,114770,114771,29633],{},"旧 Gym 常见返回值是 4 个: ",[46,114772,114773],{},"obs, reward, done, info",[26,114775,114776,114777,29633],{},"Gymnasium 返回值是 5 个: ",[46,114778,114779],{},"obs, reward, terminated, truncated, info",[14,114781,102269],{"id":102268},[19,114783,114784],{},"强化学习环境接口包含:",[293,114786,114787,114796],{},[296,114788,114789],{},[299,114790,114791,114794],{},[302,114792,114793],{"align":304},"方法",[302,114795,103920],{"align":304},[310,114797,114798,114808,114818,114828],{},[299,114799,114800,114805],{},[315,114801,114802],{"align":304},[46,114803,114804],{},"reset()",[315,114806,114807],{"align":304},"重置环境",[299,114809,114810,114815],{},[315,114811,114812],{"align":304},[46,114813,114814],{},"step(action)",[315,114816,114817],{"align":304},"执行动作",[299,114819,114820,114825],{},[315,114821,114822],{"align":304},[46,114823,114824],{},"observation_space",[315,114826,114827],{"align":304},"观测空间",[299,114829,114830,114835],{},[315,114831,114832],{"align":304},[46,114833,114834],{},"action_space",[315,114836,24903],{"align":304},[19,114838,114839],{},"一个最小环境需要完成:",[39,114841,114844],{"className":114842,"code":114843,"language":267,"meta":44},[1094],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[46,114845,114843],{"__ignoreMap":44},[183,114847,114849,102242,114852,105862],{"id":114848},"terminated-和-truncated-的区别",[46,114850,114851],{},"terminated",[46,114853,114854],{},"truncated",[19,114856,114857],{},"Gymnasium 把“结束”拆成两个概念：",[293,114859,114860,114870],{},[296,114861,114862],{},[299,114863,114864,114866,114868],{},[302,114865,105798],{"align":304},[302,114867,101924],{"align":304},[302,114869,22437],{"align":304},[310,114871,114872,114884],{},[299,114873,114874,114878,114881],{},[315,114875,114876],{"align":304},[46,114877,114851],{},[315,114879,114880],{"align":304},"任务自然结束",[315,114882,114883],{"align":304},"机械臂到达目标、机器人摔倒",[299,114885,114886,114890,114893],{},[315,114887,114888],{"align":304},[46,114889,114854],{},[315,114891,114892],{"align":304},"因外部限制截断",[315,114894,114895],{"align":304},"达到最大步数、时间限制",[19,114897,114898],{},"本章中：",[39,114900,114902],{"className":31626,"code":114901,"language":31628,"meta":44,"style":44},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[46,114903,114904,114919],{"__ignoreMap":44},[49,114905,114906,114909,114911,114914,114916],{"class":51,"line":52},[49,114907,114908],{"class":66},"terminated ",[49,114910,1448],{"class":109},[49,114912,114913],{"class":66}," dist ",[49,114915,2300],{"class":109},[49,114917,114918],{"class":73}," 0.05\n",[49,114920,114921,114924,114926,114928,114931,114933,114935],{"class":51,"line":59},[49,114922,114923],{"class":66},"truncated ",[49,114925,1448],{"class":109},[49,114927,40121],{"class":73},[49,114929,114930],{"class":66},".steps ",[49,114932,2965],{"class":109},[49,114934,40121],{"class":73},[49,114936,114937],{"class":66},".max_steps\n",[19,114939,114940],{},"也就是：",[591,114942,114943,114946],{},[26,114944,114945],{},"末端距离目标小于 0.05，任务成功结束。",[26,114947,114948],{},"步数超过上限，episode 被截断。",[183,114950,114952,102242,114954],{"id":114951},"observation_space-和-action_space",[46,114953,114824],{},[46,114955,114834],{},[19,114957,114958],{},"这两个对象告诉算法：",[39,114960,114963],{"className":114961,"code":114962,"language":267,"meta":44},[1094],"观测长什么样\n动作允许多大\n",[46,114964,114962],{"__ignoreMap":44},[19,114966,551],{},[39,114968,114970],{"className":31626,"code":114969,"language":31628,"meta":44,"style":44},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[46,114971,114972],{"__ignoreMap":44},[49,114973,114974,114976,114979,114981,114984,114987,114990,114992,114994,114997,114999,115001,115003,115005,115007,115009,115011,115014,115016,115018],{"class":51,"line":52},[49,114975,32071],{"class":73},[49,114977,114978],{"class":66},".action_space ",[49,114980,1448],{"class":109},[49,114982,114983],{"class":66}," spaces.Box(",[49,114985,114986],{"class":6468},"low",[49,114988,114989],{"class":109},"=-",[49,114991,103627],{"class":73},[49,114993,13687],{"class":66},[49,114995,114996],{"class":6468},"high",[49,114998,1448],{"class":109},[49,115000,103627],{"class":73},[49,115002,13687],{"class":66},[49,115004,97188],{"class":6468},[49,115006,1448],{"class":109},[49,115008,1403],{"class":66},[49,115010,1478],{"class":73},[49,115012,115013],{"class":66},",), ",[49,115015,94725],{"class":6468},[49,115017,1448],{"class":109},[49,115019,115020],{"class":66},"np.float32)\n",[19,115022,115023,115024,115027],{},"表示动作是 2 维数组，每个值都在 ",[46,115025,115026],{},"[-1, 1]"," 范围内。",[39,115029,115031],{"className":31626,"code":115030,"language":31628,"meta":44,"style":44},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[46,115032,115033],{"__ignoreMap":44},[49,115034,115035,115037,115040,115042,115044,115046,115048,115051,115053,115055,115057,115059,115061,115063,115065,115067,115069,115071],{"class":51,"line":52},[49,115036,32071],{"class":73},[49,115038,115039],{"class":66},".observation_space ",[49,115041,1448],{"class":109},[49,115043,114983],{"class":66},[49,115045,114986],{"class":6468},[49,115047,114989],{"class":109},[49,115049,115050],{"class":66},"np.inf, ",[49,115052,114996],{"class":6468},[49,115054,1448],{"class":109},[49,115056,115050],{"class":66},[49,115058,97188],{"class":6468},[49,115060,1448],{"class":109},[49,115062,1403],{"class":66},[49,115064,106],{"class":73},[49,115066,115013],{"class":66},[49,115068,94725],{"class":6468},[49,115070,1448],{"class":109},[49,115072,115020],{"class":66},[19,115074,115075],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[183,115077,115079],{"id":115078},"frame_skip-是什么","frame_skip 是什么",[39,115081,115083],{"className":31626,"code":115082,"language":31628,"meta":44,"style":44},"self.frame_skip = 5\n",[46,115084,115085],{"__ignoreMap":44},[49,115086,115087,115089,115092,115094],{"class":51,"line":52},[49,115088,32071],{"class":73},[49,115090,115091],{"class":66},".frame_skip ",[49,115093,1448],{"class":109},[49,115095,55668],{"class":73},[19,115097,115098,115099,115102,115103,115105],{},"表示外部调用一次 ",[46,115100,115101],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[46,115104,102439],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115107,102477],{"id":102476},[39,115109,115111],{"className":31626,"code":115110,"language":31628,"meta":44,"style":44},"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",[46,115112,115113,115125,115131,115141,115152,115156,115160,115168,115173,115177,115181,115185,115189,115193,115197,115201,115206,115210,115214,115218,115223,115227,115231,115235,115239,115243,115247,115251,115255,115259,115263,115267,115271,115275,115293,115308,115312,115325,115335,115350,115367,115371,115392,115411,115436,115450,115454,115464,115476,115486,115490,115532,115570,115574,115584,115600,115615,115634,115641,115645,115658,115673,115688,115701,115720,115736,115740,115781,115796,115811,115815,115854,115865,115878,115882,115892,115901,115905,115915,115930,115948,115952,115963,115980,115993,115997,116007,116011,116022,116033,116037,116051,116065,116081,116085,116098,116115,116130,116137,116141,116145,116157,116167,116185,116197,116209,116213,116221,116237,116246,116255,116263,116305,116318,116323,116327,116345,116349,116353,116365],{"__ignoreMap":44},[49,115114,115115,115117,115120,115122],{"class":51,"line":52},[49,115116,31640],{"class":109},[49,115118,115119],{"class":66}," gymnasium ",[49,115121,32631],{"class":109},[49,115123,115124],{"class":66}," gym\n",[49,115126,115127,115129],{"class":51,"line":59},[49,115128,31640],{"class":109},[49,115130,102525],{"class":66},[49,115132,115133,115135,115137,115139],{"class":51,"line":70},[49,115134,31640],{"class":109},[49,115136,32628],{"class":66},[49,115138,32631],{"class":109},[49,115140,32634],{"class":66},[49,115142,115143,115145,115147,115149],{"class":51,"line":86},[49,115144,31985],{"class":109},[49,115146,115119],{"class":66},[49,115148,31640],{"class":109},[49,115150,115151],{"class":66}," spaces\n",[49,115153,115154],{"class":51,"line":98},[49,115155,3654],{"emptyLinePlaceholder":1330},[49,115157,115158],{"class":51,"line":121},[49,115159,3654],{"emptyLinePlaceholder":1330},[49,115161,115162,115164,115166],{"class":51,"line":134},[49,115163,102538],{"class":73},[49,115165,14816],{"class":109},[49,115167,102543],{"class":1505},[49,115169,115170],{"class":51,"line":1085},[49,115171,115172],{"class":1505},"\u003Cmujoco model=\"gym_reacher\">\n",[49,115174,115175],{"class":51,"line":2574},[49,115176,112962],{"class":1505},[49,115178,115179],{"class":51,"line":2586},[49,115180,3654],{"emptyLinePlaceholder":1330},[49,115182,115183],{"class":51,"line":2867},[49,115184,102562],{"class":1505},[49,115186,115187],{"class":51,"line":2872},[49,115188,112980],{"class":1505},[49,115190,115191],{"class":51,"line":2878},[49,115192,3654],{"emptyLinePlaceholder":1330},[49,115194,115195],{"class":51,"line":2883},[49,115196,112989],{"class":1505},[49,115198,115199],{"class":51,"line":2897},[49,115200,112994],{"class":1505},[49,115202,115203],{"class":51,"line":2902},[49,115204,115205],{"class":1505},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[49,115207,115208],{"class":51,"line":2908},[49,115209,3654],{"emptyLinePlaceholder":1330},[49,115211,115212],{"class":51,"line":2929},[49,115213,113008],{"class":1505},[49,115215,115216],{"class":51,"line":2934},[49,115217,113013],{"class":1505},[49,115219,115220],{"class":51,"line":2948},[49,115221,115222],{"class":1505},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[49,115224,115225],{"class":51,"line":2953},[49,115226,113023],{"class":1505},[49,115228,115229],{"class":51,"line":2982},[49,115230,107662],{"class":1505},[49,115232,115233],{"class":51,"line":2987},[49,115234,102591],{"class":1505},[49,115236,115237],{"class":51,"line":3004},[49,115238,102596],{"class":1505},[49,115240,115241],{"class":51,"line":3009},[49,115242,3654],{"emptyLinePlaceholder":1330},[49,115244,115245],{"class":51,"line":3014},[49,115246,107679],{"class":1505},[49,115248,115249],{"class":51,"line":3019},[49,115250,113048],{"class":1505},[49,115252,115253],{"class":51,"line":3033},[49,115254,113053],{"class":1505},[49,115256,115257],{"class":51,"line":3038},[49,115258,107689],{"class":1505},[49,115260,115261],{"class":51,"line":3831},[49,115262,102601],{"class":1505},[49,115264,115265],{"class":51,"line":3845},[49,115266,96923],{"class":1505},[49,115268,115269],{"class":51,"line":3853},[49,115270,3654],{"emptyLinePlaceholder":1330},[49,115272,115273],{"class":51,"line":3858},[49,115274,3654],{"emptyLinePlaceholder":1330},[49,115276,115277,115279,115282,115284,115286,115288,115291],{"class":51,"line":3864},[49,115278,15945],{"class":109},[49,115280,115281],{"class":62}," ReacherEnv",[49,115283,1403],{"class":66},[49,115285,114764],{"class":62},[49,115287,1949],{"class":66},[49,115289,115290],{"class":62},"Env",[49,115292,32034],{"class":66},[49,115294,115295,115298,115300,115302,115305],{"class":51,"line":3870},[49,115296,115297],{"class":66},"    metadata ",[49,115299,1448],{"class":109},[49,115301,5702],{"class":66},[49,115303,115304],{"class":1505},"\"render_modes\"",[49,115306,115307],{"class":66},": []}\n",[49,115309,115310],{"class":51,"line":3875},[49,115311,3654],{"emptyLinePlaceholder":1330},[49,115313,115314,115316,115318,115321,115323],{"class":51,"line":9200},[49,115315,32049],{"class":109},[49,115317,32052],{"class":73},[49,115319,115320],{"class":66},"(self) -> ",[49,115322,96911],{"class":73},[49,115324,4993],{"class":66},[49,115326,115327,115329,115331,115333],{"class":51,"line":9224},[49,115328,32065],{"class":73},[49,115330,18511],{"class":66},[49,115332,32077],{"class":73},[49,115334,3230],{"class":66},[49,115336,115337,115339,115342,115344,115346,115348],{"class":51,"line":9229},[49,115338,32093],{"class":73},[49,115340,115341],{"class":66},".model ",[49,115343,1448],{"class":109},[49,115345,102636],{"class":66},[49,115347,102538],{"class":73},[49,115349,1409],{"class":66},[49,115351,115352,115354,115357,115359,115362,115364],{"class":51,"line":9235},[49,115353,32093],{"class":73},[49,115355,115356],{"class":66},".data ",[49,115358,1448],{"class":109},[49,115360,115361],{"class":66}," mujoco.MjData(",[49,115363,32071],{"class":73},[49,115365,115366],{"class":66},".model)\n",[49,115368,115369],{"class":51,"line":9262},[49,115370,3654],{"emptyLinePlaceholder":1330},[49,115372,115373,115375,115378,115380,115383,115385,115388,115390],{"class":51,"line":9267},[49,115374,32093],{"class":73},[49,115376,115377],{"class":66},".tip_site_id ",[49,115379,1448],{"class":109},[49,115381,115382],{"class":66}," mujoco.mj_name2id(",[49,115384,32071],{"class":73},[49,115386,115387],{"class":66},".model, mujoco.mjtObj.mjOBJ_SITE, ",[49,115389,112760],{"class":1505},[49,115391,1409],{"class":66},[49,115393,115394,115396,115399,115401,115403,115405,115407,115409],{"class":51,"line":9273},[49,115395,32093],{"class":73},[49,115397,115398],{"class":66},".target_site_id ",[49,115400,1448],{"class":109},[49,115402,115382],{"class":66},[49,115404,32071],{"class":73},[49,115406,115387],{"class":66},[49,115408,113183],{"class":1505},[49,115410,1409],{"class":66},[49,115412,115413,115415,115417,115419,115421,115423,115426,115428,115430,115432,115434],{"class":51,"line":9285},[49,115414,3751],{"class":109},[49,115416,40121],{"class":73},[49,115418,115377],{"class":66},[49,115420,2300],{"class":109},[49,115422,5347],{"class":73},[49,115424,115425],{"class":109}," or",[49,115427,40121],{"class":73},[49,115429,115398],{"class":66},[49,115431,2300],{"class":109},[49,115433,5347],{"class":73},[49,115435,4993],{"class":66},[49,115437,115438,115441,115443,115445,115448],{"class":51,"line":9297},[49,115439,115440],{"class":109},"            raise",[49,115442,104659],{"class":73},[49,115444,1403],{"class":66},[49,115446,115447],{"class":1505},"\"required sites not found\"",[49,115449,1409],{"class":66},[49,115451,115452],{"class":51,"line":9309},[49,115453,3654],{"emptyLinePlaceholder":1330},[49,115455,115456,115458,115460,115462],{"class":51,"line":10968},[49,115457,32093],{"class":73},[49,115459,115091],{"class":66},[49,115461,1448],{"class":109},[49,115463,55668],{"class":73},[49,115465,115466,115468,115471,115473],{"class":51,"line":10993},[49,115467,32093],{"class":73},[49,115469,115470],{"class":66},".max_steps ",[49,115472,1448],{"class":109},[49,115474,115475],{"class":73}," 200\n",[49,115477,115478,115480,115482,115484],{"class":51,"line":11016},[49,115479,32093],{"class":73},[49,115481,114930],{"class":66},[49,115483,1448],{"class":109},[49,115485,48581],{"class":73},[49,115487,115488],{"class":51,"line":11040},[49,115489,3654],{"emptyLinePlaceholder":1330},[49,115491,115492,115494,115496,115498,115500,115502,115504,115506,115508,115510,115512,115514,115516,115518,115520,115522,115524,115526,115528,115530],{"class":51,"line":11045},[49,115493,32093],{"class":73},[49,115495,114978],{"class":66},[49,115497,1448],{"class":109},[49,115499,114983],{"class":66},[49,115501,114986],{"class":6468},[49,115503,114989],{"class":109},[49,115505,103627],{"class":73},[49,115507,13687],{"class":66},[49,115509,114996],{"class":6468},[49,115511,1448],{"class":109},[49,115513,103627],{"class":73},[49,115515,13687],{"class":66},[49,115517,97188],{"class":6468},[49,115519,1448],{"class":109},[49,115521,1403],{"class":66},[49,115523,1478],{"class":73},[49,115525,115013],{"class":66},[49,115527,94725],{"class":6468},[49,115529,1448],{"class":109},[49,115531,115020],{"class":66},[49,115533,115534,115536,115538,115540,115542,115544,115546,115548,115550,115552,115554,115556,115558,115560,115562,115564,115566,115568],{"class":51,"line":11050},[49,115535,32093],{"class":73},[49,115537,115039],{"class":66},[49,115539,1448],{"class":109},[49,115541,114983],{"class":66},[49,115543,114986],{"class":6468},[49,115545,114989],{"class":109},[49,115547,115050],{"class":66},[49,115549,114996],{"class":6468},[49,115551,1448],{"class":109},[49,115553,115050],{"class":66},[49,115555,97188],{"class":6468},[49,115557,1448],{"class":109},[49,115559,1403],{"class":66},[49,115561,106],{"class":73},[49,115563,115013],{"class":66},[49,115565,94725],{"class":6468},[49,115567,1448],{"class":109},[49,115569,115020],{"class":66},[49,115571,115572],{"class":51,"line":11055},[49,115573,3654],{"emptyLinePlaceholder":1330},[49,115575,115576,115578,115581],{"class":51,"line":11064},[49,115577,32049],{"class":109},[49,115579,115580],{"class":62}," _get_obs",[49,115582,115583],{"class":66},"(self) -> np.ndarray:\n",[49,115585,115586,115588,115590,115592,115595,115597],{"class":51,"line":11069},[49,115587,113361],{"class":66},[49,115589,1448],{"class":109},[49,115591,40121],{"class":73},[49,115593,115594],{"class":66},".data.site_xpos[",[49,115596,32071],{"class":73},[49,115598,115599],{"class":66},".tip_site_id].copy()\n",[49,115601,115602,115604,115606,115608,115610,115612],{"class":51,"line":11075},[49,115603,113374],{"class":66},[49,115605,1448],{"class":109},[49,115607,40121],{"class":73},[49,115609,115594],{"class":66},[49,115611,32071],{"class":73},[49,115613,115614],{"class":66},".target_site_id].copy()\n",[49,115616,115617,115619,115621,115624,115626,115629,115631],{"class":51,"line":11096},[49,115618,111406],{"class":66},[49,115620,1448],{"class":109},[49,115622,115623],{"class":66}," np.concatenate([",[49,115625,32071],{"class":73},[49,115627,115628],{"class":66},".data.qpos.copy(), ",[49,115630,32071],{"class":73},[49,115632,115633],{"class":66},".data.qvel.copy(), tip, target])\n",[49,115635,115636,115638],{"class":51,"line":11102},[49,115637,16003],{"class":109},[49,115639,115640],{"class":66}," obs.astype(np.float32)\n",[49,115642,115643],{"class":51,"line":11116},[49,115644,3654],{"emptyLinePlaceholder":1330},[49,115646,115647,115649,115652,115654,115656],{"class":51,"line":11122},[49,115648,32049],{"class":109},[49,115650,115651],{"class":62}," _get_reward",[49,115653,115320],{"class":66},[49,115655,1442],{"class":73},[49,115657,4993],{"class":66},[49,115659,115660,115662,115664,115666,115668,115670],{"class":51,"line":11149},[49,115661,113361],{"class":66},[49,115663,1448],{"class":109},[49,115665,40121],{"class":73},[49,115667,115594],{"class":66},[49,115669,32071],{"class":73},[49,115671,115672],{"class":66},".tip_site_id]\n",[49,115674,115675,115677,115679,115681,115683,115685],{"class":51,"line":11158},[49,115676,113374],{"class":66},[49,115678,1448],{"class":109},[49,115680,40121],{"class":73},[49,115682,115594],{"class":66},[49,115684,32071],{"class":73},[49,115686,115687],{"class":66},".target_site_id]\n",[49,115689,115690,115693,115695,115697,115699],{"class":51,"line":11164},[49,115691,115692],{"class":66},"        dist ",[49,115694,1448],{"class":109},[49,115696,112825],{"class":66},[49,115698,1923],{"class":109},[49,115700,112830],{"class":66},[49,115702,115703,115706,115708,115710,115712,115715,115717],{"class":51,"line":11172},[49,115704,115705],{"class":66},"        control_cost ",[49,115707,1448],{"class":109},[49,115709,113261],{"class":73},[49,115711,7770],{"class":109},[49,115713,115714],{"class":66}," np.sum(np.square(",[49,115716,32071],{"class":73},[49,115718,115719],{"class":66},".data.ctrl))\n",[49,115721,115722,115724,115726,115728,115730,115732,115734],{"class":51,"line":11177},[49,115723,16003],{"class":109},[49,115725,111021],{"class":73},[49,115727,1403],{"class":66},[49,115729,1923],{"class":109},[49,115731,112820],{"class":66},[49,115733,1923],{"class":109},[49,115735,113283],{"class":66},[49,115737,115738],{"class":51,"line":17854},[49,115739,3654],{"emptyLinePlaceholder":1330},[49,115741,115742,115744,115747,115750,115752,115755,115757,115759,115761,115763,115765,115768,115771,115773,115775,115777,115779],{"class":51,"line":17860},[49,115743,32049],{"class":109},[49,115745,115746],{"class":62}," reset",[49,115748,115749],{"class":66},"(self, ",[49,115751,1846],{"class":109},[49,115753,115754],{"class":66},", seed: ",[49,115756,1406],{"class":73},[49,115758,26358],{"class":109},[49,115760,40181],{"class":73},[49,115762,14816],{"class":109},[49,115764,40181],{"class":73},[49,115766,115767],{"class":66},", options: ",[49,115769,115770],{"class":73},"dict",[49,115772,26358],{"class":109},[49,115774,40181],{"class":73},[49,115776,14816],{"class":109},[49,115778,40181],{"class":73},[49,115780,32034],{"class":66},[49,115782,115783,115785,115788,115791,115793],{"class":51,"line":17883},[49,115784,32065],{"class":73},[49,115786,115787],{"class":66},"().reset(",[49,115789,115790],{"class":6468},"seed",[49,115792,1448],{"class":109},[49,115794,115795],{"class":66},"seed)\n",[49,115797,115798,115801,115803,115806,115808],{"class":51,"line":17889},[49,115799,115800],{"class":66},"        mujoco.mj_resetData(",[49,115802,32071],{"class":73},[49,115804,115805],{"class":66},".model, ",[49,115807,32071],{"class":73},[49,115809,115810],{"class":66},".data)\n",[49,115812,115813],{"class":51,"line":17912},[49,115814,3654],{"emptyLinePlaceholder":1330},[49,115816,115817,115819,115822,115824,115826,115829,115831,115833,115835,115837,115839,115841,115843,115845,115847,115849,115851],{"class":51,"line":17926},[49,115818,32093],{"class":73},[49,115820,115821],{"class":66},".data.qpos[:] ",[49,115823,1448],{"class":109},[49,115825,40121],{"class":73},[49,115827,115828],{"class":66},".np_random.uniform(",[49,115830,114986],{"class":6468},[49,115832,114989],{"class":109},[49,115834,87435],{"class":73},[49,115836,13687],{"class":66},[49,115838,114996],{"class":6468},[49,115840,1448],{"class":109},[49,115842,87435],{"class":73},[49,115844,13687],{"class":66},[49,115846,32744],{"class":6468},[49,115848,1448],{"class":109},[49,115850,32071],{"class":73},[49,115852,115853],{"class":66},".model.nq)\n",[49,115855,115856,115858,115861,115863],{"class":51,"line":17946},[49,115857,32093],{"class":73},[49,115859,115860],{"class":66},".data.qvel[:] ",[49,115862,1448],{"class":109},[49,115864,105985],{"class":73},[49,115866,115867,115870,115872,115874,115876],{"class":51,"line":17952},[49,115868,115869],{"class":66},"        mujoco.mj_forward(",[49,115871,32071],{"class":73},[49,115873,115805],{"class":66},[49,115875,32071],{"class":73},[49,115877,115810],{"class":66},[49,115879,115880],{"class":51,"line":17963},[49,115881,3654],{"emptyLinePlaceholder":1330},[49,115883,115884,115886,115888,115890],{"class":51,"line":17986},[49,115885,32093],{"class":73},[49,115887,114930],{"class":66},[49,115889,1448],{"class":109},[49,115891,48581],{"class":73},[49,115893,115894,115896,115898],{"class":51,"line":18008},[49,115895,16003],{"class":109},[49,115897,40121],{"class":73},[49,115899,115900],{"class":66},"._get_obs(), {}\n",[49,115902,115903],{"class":51,"line":18013},[49,115904,3654],{"emptyLinePlaceholder":1330},[49,115906,115907,115909,115912],{"class":51,"line":18019},[49,115908,32049],{"class":109},[49,115910,115911],{"class":62}," step",[49,115913,115914],{"class":66},"(self, action):\n",[49,115916,115917,115919,115921,115924,115926,115928],{"class":51,"line":18033},[49,115918,111446],{"class":66},[49,115920,1448],{"class":109},[49,115922,115923],{"class":66}," np.asarray(action, ",[49,115925,94725],{"class":6468},[49,115927,1448],{"class":109},[49,115929,115020],{"class":66},[49,115931,115932,115934,115936,115938,115940,115943,115945],{"class":51,"line":18046},[49,115933,111446],{"class":66},[49,115935,1448],{"class":109},[49,115937,108671],{"class":66},[49,115939,32071],{"class":73},[49,115941,115942],{"class":66},".action_space.low, ",[49,115944,32071],{"class":73},[49,115946,115947],{"class":66},".action_space.high)\n",[49,115949,115950],{"class":51,"line":18051},[49,115951,3654],{"emptyLinePlaceholder":1330},[49,115953,115954,115956,115959,115961],{"class":51,"line":18065},[49,115955,32093],{"class":73},[49,115957,115958],{"class":66},".data.ctrl[:] ",[49,115960,1448],{"class":109},[49,115962,108694],{"class":66},[49,115964,115965,115967,115969,115971,115973,115975,115977],{"class":51,"line":18070},[49,115966,4657],{"class":109},[49,115968,102725],{"class":66},[49,115970,27292],{"class":109},[49,115972,33691],{"class":73},[49,115974,1403],{"class":66},[49,115976,32071],{"class":73},[49,115978,115979],{"class":66},".frame_skip):\n",[49,115981,115982,115985,115987,115989,115991],{"class":51,"line":18076},[49,115983,115984],{"class":66},"            mujoco.mj_step(",[49,115986,32071],{"class":73},[49,115988,115805],{"class":66},[49,115990,32071],{"class":73},[49,115992,115810],{"class":66},[49,115994,115995],{"class":51,"line":18081},[49,115996,3654],{"emptyLinePlaceholder":1330},[49,115998,115999,116001,116003,116005],{"class":51,"line":18095},[49,116000,32093],{"class":73},[49,116002,114930],{"class":66},[49,116004,10729],{"class":109},[49,116006,56938],{"class":73},[49,116008,116009],{"class":51,"line":18100},[49,116010,3654],{"emptyLinePlaceholder":1330},[49,116012,116013,116015,116017,116019],{"class":51,"line":18105},[49,116014,111406],{"class":66},[49,116016,1448],{"class":109},[49,116018,40121],{"class":73},[49,116020,116021],{"class":66},"._get_obs()\n",[49,116023,116024,116026,116028,116030],{"class":51,"line":18119},[49,116025,111511],{"class":66},[49,116027,1448],{"class":109},[49,116029,40121],{"class":73},[49,116031,116032],{"class":66},"._get_reward()\n",[49,116034,116035],{"class":51,"line":18131},[49,116036,3654],{"emptyLinePlaceholder":1330},[49,116038,116039,116041,116043,116045,116047,116049],{"class":51,"line":18136},[49,116040,113361],{"class":66},[49,116042,1448],{"class":109},[49,116044,40121],{"class":73},[49,116046,115594],{"class":66},[49,116048,32071],{"class":73},[49,116050,115672],{"class":66},[49,116052,116053,116055,116057,116059,116061,116063],{"class":51,"line":18149},[49,116054,113374],{"class":66},[49,116056,1448],{"class":109},[49,116058,40121],{"class":73},[49,116060,115594],{"class":66},[49,116062,32071],{"class":73},[49,116064,115687],{"class":66},[49,116066,116067,116069,116071,116073,116076,116078],{"class":51,"line":18154},[49,116068,115692],{"class":66},[49,116070,1448],{"class":109},[49,116072,111021],{"class":73},[49,116074,116075],{"class":66},"(np.linalg.norm(tip ",[49,116077,1923],{"class":109},[49,116079,116080],{"class":66}," target))\n",[49,116082,116083],{"class":51,"line":18159},[49,116084,3654],{"emptyLinePlaceholder":1330},[49,116086,116087,116090,116092,116094,116096],{"class":51,"line":18164},[49,116088,116089],{"class":66},"        terminated ",[49,116091,1448],{"class":109},[49,116093,114913],{"class":66},[49,116095,2300],{"class":109},[49,116097,114918],{"class":73},[49,116099,116100,116103,116105,116107,116109,116111,116113],{"class":51,"line":18177},[49,116101,116102],{"class":66},"        truncated ",[49,116104,1448],{"class":109},[49,116106,40121],{"class":73},[49,116108,114930],{"class":66},[49,116110,2965],{"class":109},[49,116112,40121],{"class":73},[49,116114,114937],{"class":66},[49,116116,116117,116120,116122,116124,116127],{"class":51,"line":18182},[49,116118,116119],{"class":66},"        info ",[49,116121,1448],{"class":109},[49,116123,5702],{"class":66},[49,116125,116126],{"class":1505},"\"distance\"",[49,116128,116129],{"class":66},": dist}\n",[49,116131,116132,116134],{"class":51,"line":33881},[49,116133,16003],{"class":109},[49,116135,116136],{"class":66}," obs, reward, terminated, truncated, info\n",[49,116138,116139],{"class":51,"line":33887},[49,116140,3654],{"emptyLinePlaceholder":1330},[49,116142,116143],{"class":51,"line":33893},[49,116144,3654],{"emptyLinePlaceholder":1330},[49,116146,116147,116149,116151,116153,116155],{"class":51,"line":33899},[49,116148,33195],{"class":109},[49,116150,3227],{"class":62},[49,116152,102622],{"class":66},[49,116154,96911],{"class":73},[49,116156,4993],{"class":66},[49,116158,116159,116162,116164],{"class":51,"line":33905},[49,116160,116161],{"class":66},"    env ",[49,116163,1448],{"class":109},[49,116165,116166],{"class":66}," ReacherEnv()\n",[49,116168,116169,116172,116174,116177,116179,116181,116183],{"class":51,"line":33916},[49,116170,116171],{"class":66},"    obs, info ",[49,116173,1448],{"class":109},[49,116175,116176],{"class":66}," env.reset(",[49,116178,115790],{"class":6468},[49,116180,1448],{"class":109},[49,116182,80],{"class":73},[49,116184,1409],{"class":66},[49,116186,116187,116189,116191,116194],{"class":51,"line":33922},[49,116188,32547],{"class":73},[49,116190,1403],{"class":66},[49,116192,116193],{"class":1505},"\"initial obs shape:\"",[49,116195,116196],{"class":66},", obs.shape)\n",[49,116198,116199,116201,116203,116206],{"class":51,"line":33942},[49,116200,32547],{"class":73},[49,116202,1403],{"class":66},[49,116204,116205],{"class":1505},"\"initial info:\"",[49,116207,116208],{"class":66},", info)\n",[49,116210,116211],{"class":51,"line":33948},[49,116212,3654],{"emptyLinePlaceholder":1330},[49,116214,116215,116217,116219],{"class":51,"line":33959},[49,116216,111377],{"class":66},[49,116218,1448],{"class":109},[49,116220,105985],{"class":73},[49,116222,116223,116225,116227,116229,116231,116233,116235],{"class":51,"line":33965},[49,116224,4455],{"class":109},[49,116226,32864],{"class":66},[49,116228,27292],{"class":109},[49,116230,33691],{"class":73},[49,116232,1403],{"class":66},[49,116234,875],{"class":73},[49,116236,32034],{"class":66},[49,116238,116239,116241,116243],{"class":51,"line":33971},[49,116240,111446],{"class":66},[49,116242,1448],{"class":109},[49,116244,116245],{"class":66}," env.action_space.sample()\n",[49,116247,116248,116251,116253],{"class":51,"line":33977},[49,116249,116250],{"class":66},"        obs, reward, terminated, truncated, info ",[49,116252,1448],{"class":109},[49,116254,114639],{"class":66},[49,116256,116257,116259,116261],{"class":51,"line":33983},[49,116258,111521],{"class":66},[49,116260,10729],{"class":109},[49,116262,111526],{"class":66},[49,116264,116265,116267,116269,116271,116273,116276,116278,116280,116283,116285,116287,116290,116292,116294,116297,116299,116301,116303],{"class":51,"line":33989},[49,116266,33699],{"class":73},[49,116268,1403],{"class":66},[49,116270,111555],{"class":1505},[49,116272,111558],{"class":66},[49,116274,116275],{"class":1505},"\"reward:\"",[49,116277,13687],{"class":66},[49,116279,33266],{"class":73},[49,116281,116282],{"class":66},"(reward, ",[49,116284,1472],{"class":73},[49,116286,111569],{"class":66},[49,116288,116289],{"class":1505},"\"distance:\"",[49,116291,13687],{"class":66},[49,116293,33266],{"class":73},[49,116295,116296],{"class":66},"(info[",[49,116298,116126],{"class":1505},[49,116300,113426],{"class":66},[49,116302,1472],{"class":73},[49,116304,31745],{"class":66},[49,116306,116307,116309,116312,116315],{"class":51,"line":33995},[49,116308,3751],{"class":109},[49,116310,116311],{"class":66}," terminated ",[49,116313,116314],{"class":109},"or",[49,116316,116317],{"class":66}," truncated:\n",[49,116319,116320],{"class":51,"line":34001},[49,116321,116322],{"class":109},"            break\n",[49,116324,116325],{"class":51,"line":34021},[49,116326,3654],{"emptyLinePlaceholder":1330},[49,116328,116329,116331,116333,116335,116337,116339,116341,116343],{"class":51,"line":34027},[49,116330,32547],{"class":73},[49,116332,1403],{"class":66},[49,116334,111600],{"class":1505},[49,116336,13687],{"class":66},[49,116338,33266],{"class":73},[49,116340,111607],{"class":66},[49,116342,1472],{"class":73},[49,116344,31745],{"class":66},[49,116346,116347],{"class":51,"line":34043},[49,116348,3654],{"emptyLinePlaceholder":1330},[49,116350,116351],{"class":51,"line":34049},[49,116352,3654],{"emptyLinePlaceholder":1330},[49,116354,116355,116357,116359,116361,116363],{"class":51,"line":34063},[49,116356,2787],{"class":109},[49,116358,32468],{"class":73},[49,116360,102783],{"class":109},[49,116362,102786],{"class":1505},[49,116364,4993],{"class":66},[49,116366,116367],{"class":51,"line":34069},[49,116368,102793],{"class":66},[19,116370,104794],{},[39,116372,116374],{"className":25070,"code":116373,"language":25072,"meta":44,"style":44},"touch ch8_gym_env.py\n",[46,116375,116376],{"__ignoreMap":44},[49,116377,116378,116380],{"class":51,"line":52},[49,116379,102507],{"class":62},[49,116381,116382],{"class":1505}," ch8_gym_env.py\n",[19,116384,111668],{},[39,116386,116388],{"className":25070,"code":116387,"language":25072,"meta":44,"style":44},"python ch8_gym_env.py\n",[46,116389,116390],{"__ignoreMap":44},[49,116391,116392,116394],{"class":51,"line":52},[49,116393,31628],{"class":62},[49,116395,116382],{"class":1505},[183,116397,102796],{"id":102796},[19,116399,116400],{},"继承 Gymnasium 环境：",[39,116402,116404],{"className":31626,"code":116403,"language":31628,"meta":44,"style":44},"class ReacherEnv(gym.Env):\n",[46,116405,116406],{"__ignoreMap":44},[49,116407,116408,116410,116412,116414,116416,116418,116420],{"class":51,"line":52},[49,116409,15945],{"class":109},[49,116411,115281],{"class":62},[49,116413,1403],{"class":66},[49,116415,114764],{"class":62},[49,116417,1949],{"class":66},[49,116419,115290],{"class":62},[49,116421,32034],{"class":66},[19,116423,116424],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116426,116427],{},"初始化模型：",[39,116429,116431],{"className":31626,"code":116430,"language":31628,"meta":44,"style":44},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[46,116432,116433,116447],{"__ignoreMap":44},[49,116434,116435,116437,116439,116441,116443,116445],{"class":51,"line":52},[49,116436,32071],{"class":73},[49,116438,115341],{"class":66},[49,116440,1448],{"class":109},[49,116442,102636],{"class":66},[49,116444,102538],{"class":73},[49,116446,1409],{"class":66},[49,116448,116449,116451,116453,116455,116457,116459],{"class":51,"line":59},[49,116450,32071],{"class":73},[49,116452,115356],{"class":66},[49,116454,1448],{"class":109},[49,116456,115361],{"class":66},[49,116458,32071],{"class":73},[49,116460,115366],{"class":66},[19,116462,116463,116464,116466],{},"这和前面章节一样，只是现在放到了类的 ",[46,116465,32077],{}," 里。",[19,116468,116469],{},"缓存 site ID：",[39,116471,116473],{"className":31626,"code":116472,"language":31628,"meta":44,"style":44},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[46,116474,116475,116489],{"__ignoreMap":44},[49,116476,116477,116479,116481,116483,116485,116487],{"class":51,"line":52},[49,116478,32071],{"class":73},[49,116480,115377],{"class":66},[49,116482,1448],{"class":109},[49,116484,115382],{"class":66},[49,116486,90779],{"class":73},[49,116488,1409],{"class":66},[49,116490,116491,116493,116495,116497,116499,116501],{"class":51,"line":59},[49,116492,32071],{"class":73},[49,116494,115398],{"class":66},[49,116496,1448],{"class":109},[49,116498,115382],{"class":66},[49,116500,90779],{"class":73},[49,116502,1409],{"class":66},[19,116504,116505],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116507,116508],{},"reset：",[39,116510,116512],{"className":31626,"code":116511,"language":31628,"meta":44,"style":44},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[46,116513,116514],{"__ignoreMap":44},[49,116515,116516,116518,116520,116522,116524,116526,116528,116530,116532,116534,116536,116538,116540,116542,116544,116546,116548],{"class":51,"line":52},[49,116517,33195],{"class":109},[49,116519,115746],{"class":62},[49,116521,115749],{"class":66},[49,116523,1846],{"class":109},[49,116525,115754],{"class":66},[49,116527,1406],{"class":73},[49,116529,26358],{"class":109},[49,116531,40181],{"class":73},[49,116533,14816],{"class":109},[49,116535,40181],{"class":73},[49,116537,115767],{"class":66},[49,116539,115770],{"class":73},[49,116541,26358],{"class":109},[49,116543,40181],{"class":73},[49,116545,14816],{"class":109},[49,116547,40181],{"class":73},[49,116549,32034],{"class":66},[19,116551,116552,116554],{},[46,116553,71291],{}," 做四件事：",[591,116556,116557,116560,116563,116566],{},[26,116558,116559],{},"设置随机种子。",[26,116561,116562],{},"重置 MuJoCo data。",[26,116564,116565],{},"随机初始化关节角。",[26,116567,116568],{},"返回初始观测和 info。",[19,116570,116571],{},"step：",[39,116573,116575],{"className":31626,"code":116574,"language":31628,"meta":44,"style":44},"def step(self, action):\n",[46,116576,116577],{"__ignoreMap":44},[49,116578,116579,116581,116583],{"class":51,"line":52},[49,116580,33195],{"class":109},[49,116582,115911],{"class":62},[49,116584,115914],{"class":66},[19,116586,116587,116589],{},[46,116588,108358],{}," 做六件事：",[591,116591,116592,116595,116601,116604,116607,116610],{},[26,116593,116594],{},"检查并裁剪 action。",[26,116596,116597,116598,29633],{},"写入 ",[46,116599,116600],{},"self.data.ctrl",[26,116602,116603],{},"连续推进若干个 MuJoCo 物理步。",[26,116605,116606],{},"计算新观测。",[26,116608,116609],{},"计算奖励和结束条件。",[26,116611,116612],{},"返回 Gymnasium 标准五元组。",[183,116614,102932],{"id":102932},[39,116616,116618],{"className":31626,"code":116617,"language":31628,"meta":44,"style":44},"import gymnasium as gym\n",[46,116619,116620],{"__ignoreMap":44},[49,116621,116622,116624,116626,116628],{"class":51,"line":52},[49,116623,31640],{"class":109},[49,116625,115119],{"class":66},[49,116627,32631],{"class":109},[49,116629,115124],{"class":66},[19,116631,116632,116633,116635,116636,116639],{},"导入 Gymnasium，并起别名 ",[46,116634,114764],{},"。后面写 ",[46,116637,116638],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[39,116641,116643],{"className":31626,"code":116642,"language":31628,"meta":44,"style":44},"from gymnasium import spaces\n",[46,116644,116645],{"__ignoreMap":44},[49,116646,116647,116649,116651,116653],{"class":51,"line":52},[49,116648,31985],{"class":109},[49,116650,115119],{"class":66},[49,116652,31640],{"class":109},[49,116654,115151],{"class":66},[19,116656,116657,116658,116661],{},"导入空间定义工具。",[46,116659,116660],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[39,116663,116664],{"className":31626,"code":116403,"language":31628,"meta":44,"style":44},[46,116665,116666],{"__ignoreMap":44},[49,116667,116668,116670,116672,116674,116676,116678,116680],{"class":51,"line":52},[49,116669,15945],{"class":109},[49,116671,115281],{"class":62},[49,116673,1403],{"class":66},[49,116675,114764],{"class":62},[49,116677,1949],{"class":66},[49,116679,115290],{"class":62},[49,116681,32034],{"class":66},[19,116683,116684,116685,116688,116689,116691,116692,102242,116694,116696],{},"定义一个类，名字叫 ",[46,116686,116687],{},"ReacherEnv","。括号里的 ",[46,116690,116638],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[46,116693,71291],{},[46,116695,108358],{}," 这两个核心方法。",[39,116698,116700],{"className":31626,"code":116699,"language":31628,"meta":44,"style":44},"metadata = {\"render_modes\": []}\n",[46,116701,116702],{"__ignoreMap":44},[49,116703,116704,116707,116709,116711,116713],{"class":51,"line":52},[49,116705,116706],{"class":66},"metadata ",[49,116708,1448],{"class":109},[49,116710,5702],{"class":66},[49,116712,115304],{"class":1505},[49,116714,115307],{"class":66},[19,116716,116717],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[39,116719,116721],{"className":31626,"code":116720,"language":31628,"meta":44,"style":44},"def __init__(self) -> None:\n",[46,116722,116723],{"__ignoreMap":44},[49,116724,116725,116727,116729,116731,116733],{"class":51,"line":52},[49,116726,33195],{"class":109},[49,116728,32052],{"class":73},[49,116730,115320],{"class":66},[49,116732,96911],{"class":73},[49,116734,4993],{"class":66},[19,116736,116737,116739,116740,29633],{},[46,116738,32077],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[46,116741,116742],{},"env = ReacherEnv()",[39,116744,116746],{"className":31626,"code":116745,"language":31628,"meta":44,"style":44},"super().__init__()\n",[46,116747,116748],{"__ignoreMap":44},[49,116749,116750,116753,116755,116757],{"class":51,"line":52},[49,116751,116752],{"class":73},"super",[49,116754,18511],{"class":66},[49,116756,32077],{"class":73},[49,116758,3230],{"class":66},[19,116760,116761,116762,116764],{},"调用父类 ",[46,116763,116638],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[39,116766,116767],{"className":31626,"code":116430,"language":31628,"meta":44,"style":44},[46,116768,116769,116783],{"__ignoreMap":44},[49,116770,116771,116773,116775,116777,116779,116781],{"class":51,"line":52},[49,116772,32071],{"class":73},[49,116774,115341],{"class":66},[49,116776,1448],{"class":109},[49,116778,102636],{"class":66},[49,116780,102538],{"class":73},[49,116782,1409],{"class":66},[49,116784,116785,116787,116789,116791,116793,116795],{"class":51,"line":59},[49,116786,32071],{"class":73},[49,116788,115356],{"class":66},[49,116790,1448],{"class":109},[49,116792,115361],{"class":66},[49,116794,32071],{"class":73},[49,116796,115366],{"class":66},[19,116798,116799,116800,116802,116803,102242,116806,116809],{},"把 MuJoCo 模型和状态保存到 ",[46,116801,32071],{}," 上。",[46,116804,116805],{},"self.model",[46,116807,116808],{},"self.data"," 表示这个环境对象自己的模型和状态。",[39,116811,116812],{"className":31626,"code":116472,"language":31628,"meta":44,"style":44},[46,116813,116814,116828],{"__ignoreMap":44},[49,116815,116816,116818,116820,116822,116824,116826],{"class":51,"line":52},[49,116817,32071],{"class":73},[49,116819,115377],{"class":66},[49,116821,1448],{"class":109},[49,116823,115382],{"class":66},[49,116825,90779],{"class":73},[49,116827,1409],{"class":66},[49,116829,116830,116832,116834,116836,116838,116840],{"class":51,"line":59},[49,116831,32071],{"class":73},[49,116833,115398],{"class":66},[49,116835,1448],{"class":109},[49,116837,115382],{"class":66},[49,116839,90779],{"class":73},[49,116841,1409],{"class":66},[19,116843,116844,116845,102242,116848,116851],{},"提前查好 tip 和 target 的 site ID。这样 ",[46,116846,116847],{},"_get_obs",[46,116849,116850],{},"_get_reward"," 里就不用每次按名字查找。",[39,116853,116855],{"className":31626,"code":116854,"language":31628,"meta":44,"style":44},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[46,116856,116857,116867,116877],{"__ignoreMap":44},[49,116858,116859,116861,116863,116865],{"class":51,"line":52},[49,116860,32071],{"class":73},[49,116862,115091],{"class":66},[49,116864,1448],{"class":109},[49,116866,55668],{"class":73},[49,116868,116869,116871,116873,116875],{"class":51,"line":59},[49,116870,32071],{"class":73},[49,116872,115470],{"class":66},[49,116874,1448],{"class":109},[49,116876,115475],{"class":73},[49,116878,116879,116881,116883,116885],{"class":51,"line":70},[49,116880,32071],{"class":73},[49,116882,114930],{"class":66},[49,116884,1448],{"class":109},[49,116886,48581],{"class":73},[19,116888,116889,116892,116893,116896,116897,116900],{},[46,116890,116891],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[46,116894,116895],{},"max_steps"," 是一个 episode 最多运行多少步。",[46,116898,116899],{},"steps"," 记录当前 episode 已经走了多少步。",[39,116902,116903],{"className":31626,"code":114969,"language":31628,"meta":44,"style":44},[46,116904,116905],{"__ignoreMap":44},[49,116906,116907,116909,116911,116913,116915,116917,116919,116921,116923,116925,116927,116929,116931,116933,116935,116937,116939,116941,116943,116945],{"class":51,"line":52},[49,116908,32071],{"class":73},[49,116910,114978],{"class":66},[49,116912,1448],{"class":109},[49,116914,114983],{"class":66},[49,116916,114986],{"class":6468},[49,116918,114989],{"class":109},[49,116920,103627],{"class":73},[49,116922,13687],{"class":66},[49,116924,114996],{"class":6468},[49,116926,1448],{"class":109},[49,116928,103627],{"class":73},[49,116930,13687],{"class":66},[49,116932,97188],{"class":6468},[49,116934,1448],{"class":109},[49,116936,1403],{"class":66},[49,116938,1478],{"class":73},[49,116940,115013],{"class":66},[49,116942,94725],{"class":6468},[49,116944,1448],{"class":109},[49,116946,115020],{"class":66},[19,116948,116949,116950,116953,116954,102242,116957,116960],{},"定义动作空间。",[46,116951,116952],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[46,116955,116956],{},"low=-1.0",[46,116958,116959],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[39,116962,116963],{"className":31626,"code":115030,"language":31628,"meta":44,"style":44},[46,116964,116965],{"__ignoreMap":44},[49,116966,116967,116969,116971,116973,116975,116977,116979,116981,116983,116985,116987,116989,116991,116993,116995,116997,116999,117001],{"class":51,"line":52},[49,116968,32071],{"class":73},[49,116970,115039],{"class":66},[49,116972,1448],{"class":109},[49,116974,114983],{"class":66},[49,116976,114986],{"class":6468},[49,116978,114989],{"class":109},[49,116980,115050],{"class":66},[49,116982,114996],{"class":6468},[49,116984,1448],{"class":109},[49,116986,115050],{"class":66},[49,116988,97188],{"class":6468},[49,116990,1448],{"class":109},[49,116992,1403],{"class":66},[49,116994,106],{"class":73},[49,116996,115013],{"class":66},[49,116998,94725],{"class":6468},[49,117000,1448],{"class":109},[49,117002,115020],{"class":66},[19,117004,117005,117006,117009,117010,117013],{},"定义观测空间。",[46,117007,117008],{},"shape=(10,)"," 表示观测是 10 个数。",[46,117011,117012],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[39,117015,117017],{"className":31626,"code":117016,"language":31628,"meta":44,"style":44},"def _get_obs(self) -> np.ndarray:\n",[46,117018,117019],{"__ignoreMap":44},[49,117020,117021,117023,117025],{"class":51,"line":52},[49,117022,33195],{"class":109},[49,117024,115580],{"class":62},[49,117026,115583],{"class":66},[19,117028,117029,117030,117032],{},"定义内部函数，用来生成观测。函数名前面的 ",[46,117031,2381],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[39,117034,117036],{"className":31626,"code":117035,"language":31628,"meta":44,"style":44},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[46,117037,117038,117052],{"__ignoreMap":44},[49,117039,117040,117042,117044,117046,117048,117050],{"class":51,"line":52},[49,117041,112792],{"class":66},[49,117043,1448],{"class":109},[49,117045,40121],{"class":73},[49,117047,115594],{"class":66},[49,117049,32071],{"class":73},[49,117051,115599],{"class":66},[49,117053,117054,117056,117058,117060,117062,117064],{"class":51,"line":59},[49,117055,112802],{"class":66},[49,117057,1448],{"class":109},[49,117059,40121],{"class":73},[49,117061,115594],{"class":66},[49,117063,32071],{"class":73},[49,117065,115614],{"class":66},[19,117067,117068],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[39,117070,117072],{"className":31626,"code":117071,"language":31628,"meta":44,"style":44},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[46,117073,117074,117090],{"__ignoreMap":44},[49,117075,117076,117078,117080,117082,117084,117086,117088],{"class":51,"line":52},[49,117077,112078],{"class":66},[49,117079,1448],{"class":109},[49,117081,115623],{"class":66},[49,117083,32071],{"class":73},[49,117085,115628],{"class":66},[49,117087,32071],{"class":73},[49,117089,115633],{"class":66},[49,117091,117092,117094],{"class":51,"line":59},[49,117093,18296],{"class":109},[49,117095,115640],{"class":66},[19,117097,117098,117099,117102,117103,117105],{},"拼接观测，并转换成 ",[46,117100,117101],{},"float32","。很多强化学习库默认使用 ",[46,117104,117101],{},"，所以这里主动转换。",[39,117107,117108],{"className":31626,"code":116511,"language":31628,"meta":44,"style":44},[46,117109,117110],{"__ignoreMap":44},[49,117111,117112,117114,117116,117118,117120,117122,117124,117126,117128,117130,117132,117134,117136,117138,117140,117142,117144],{"class":51,"line":52},[49,117113,33195],{"class":109},[49,117115,115746],{"class":62},[49,117117,115749],{"class":66},[49,117119,1846],{"class":109},[49,117121,115754],{"class":66},[49,117123,1406],{"class":73},[49,117125,26358],{"class":109},[49,117127,40181],{"class":73},[49,117129,14816],{"class":109},[49,117131,40181],{"class":73},[49,117133,115767],{"class":66},[49,117135,115770],{"class":73},[49,117137,26358],{"class":109},[49,117139,40181],{"class":73},[49,117141,14816],{"class":109},[49,117143,40181],{"class":73},[49,117145,32034],{"class":66},[19,117147,117148,117149,117151,117152,117155],{},"定义 reset。",[46,117150,115790],{}," 用来控制随机数，保证实验可以复现。",[46,117153,117154],{},"options"," 用来接收额外配置，本章暂时不用。",[39,117157,117159],{"className":31626,"code":117158,"language":31628,"meta":44,"style":44},"super().reset(seed=seed)\n",[46,117160,117161],{"__ignoreMap":44},[49,117162,117163,117165,117167,117169,117171],{"class":51,"line":52},[49,117164,116752],{"class":73},[49,117166,115787],{"class":66},[49,117168,115790],{"class":6468},[49,117170,1448],{"class":109},[49,117172,115795],{"class":66},[19,117174,117175,117176,117179],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[46,117177,117178],{},"self.np_random"," 生成可复现的随机数。",[39,117181,117183],{"className":31626,"code":117182,"language":31628,"meta":44,"style":44},"mujoco.mj_resetData(self.model, self.data)\n",[46,117184,117185],{"__ignoreMap":44},[49,117186,117187,117190,117192,117194,117196],{"class":51,"line":52},[49,117188,117189],{"class":66},"mujoco.mj_resetData(",[49,117191,32071],{"class":73},[49,117193,115805],{"class":66},[49,117195,32071],{"class":73},[49,117197,115810],{"class":66},[19,117199,117200],{},"把 MuJoCo 状态重置到默认状态。",[39,117202,117204],{"className":31626,"code":117203,"language":31628,"meta":44,"style":44},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[46,117205,117206],{"__ignoreMap":44},[49,117207,117208,117210,117212,117214,117216,117218,117220,117222,117224,117226,117228,117230,117232,117234,117236,117238,117240],{"class":51,"line":52},[49,117209,32071],{"class":73},[49,117211,115821],{"class":66},[49,117213,1448],{"class":109},[49,117215,40121],{"class":73},[49,117217,115828],{"class":66},[49,117219,114986],{"class":6468},[49,117221,114989],{"class":109},[49,117223,87435],{"class":73},[49,117225,13687],{"class":66},[49,117227,114996],{"class":6468},[49,117229,1448],{"class":109},[49,117231,87435],{"class":73},[49,117233,13687],{"class":66},[49,117235,32744],{"class":6468},[49,117237,1448],{"class":109},[49,117239,32071],{"class":73},[49,117241,115853],{"class":66},[19,117243,116565,117244,117247,117248,117251,117252,117254],{},[46,117245,117246],{},"[:]"," 表示修改整个数组。",[46,117249,117250],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[46,117253,103374],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[39,117256,117258],{"className":31626,"code":117257,"language":31628,"meta":44,"style":44},"self.data.qvel[:] = 0.0\n",[46,117259,117260],{"__ignoreMap":44},[49,117261,117262,117264,117266,117268],{"class":51,"line":52},[49,117263,32071],{"class":73},[49,117265,115860],{"class":66},[49,117267,1448],{"class":109},[49,117269,105985],{"class":73},[19,117271,117272],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[39,117274,117276],{"className":31626,"code":117275,"language":31628,"meta":44,"style":44},"self.steps = 0\nreturn self._get_obs(), {}\n",[46,117277,117278,117288],{"__ignoreMap":44},[49,117279,117280,117282,117284,117286],{"class":51,"line":52},[49,117281,32071],{"class":73},[49,117283,114930],{"class":66},[49,117285,1448],{"class":109},[49,117287,48581],{"class":73},[49,117289,117290,117292,117294],{"class":51,"line":59},[49,117291,18296],{"class":109},[49,117293,40121],{"class":73},[49,117295,115900],{"class":66},[19,117297,117298],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[39,117300,117301],{"className":31626,"code":116574,"language":31628,"meta":44,"style":44},[46,117302,117303],{"__ignoreMap":44},[49,117304,117305,117307,117309],{"class":51,"line":52},[49,117306,33195],{"class":109},[49,117308,115911],{"class":62},[49,117310,115914],{"class":66},[19,117312,117313],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[39,117315,117317],{"className":31626,"code":117316,"language":31628,"meta":44,"style":44},"action = np.asarray(action, dtype=np.float32)\n",[46,117318,117319],{"__ignoreMap":44},[49,117320,117321,117323,117325,117327,117329,117331],{"class":51,"line":52},[49,117322,108666],{"class":66},[49,117324,1448],{"class":109},[49,117326,115923],{"class":66},[49,117328,94725],{"class":6468},[49,117330,1448],{"class":109},[49,117332,115020],{"class":66},[19,117334,117335,117336,29633],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[46,117337,117101],{},[39,117339,117341],{"className":31626,"code":117340,"language":31628,"meta":44,"style":44},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[46,117342,117343],{"__ignoreMap":44},[49,117344,117345,117347,117349,117351,117353,117355,117357],{"class":51,"line":52},[49,117346,108666],{"class":66},[49,117348,1448],{"class":109},[49,117350,108671],{"class":66},[49,117352,32071],{"class":73},[49,117354,115942],{"class":66},[49,117356,32071],{"class":73},[49,117358,115947],{"class":66},[19,117360,117361],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[39,117363,117365],{"className":31626,"code":117364,"language":31628,"meta":44,"style":44},"self.data.ctrl[:] = action\n",[46,117366,117367],{"__ignoreMap":44},[49,117368,117369,117371,117373,117375],{"class":51,"line":52},[49,117370,32071],{"class":73},[49,117372,115958],{"class":66},[49,117374,1448],{"class":109},[49,117376,108694],{"class":66},[19,117378,117379],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[39,117381,117383],{"className":31626,"code":117382,"language":31628,"meta":44,"style":44},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[46,117384,117385,117401],{"__ignoreMap":44},[49,117386,117387,117389,117391,117393,117395,117397,117399],{"class":51,"line":52},[49,117388,4279],{"class":109},[49,117390,102725],{"class":66},[49,117392,27292],{"class":109},[49,117394,33691],{"class":73},[49,117396,1403],{"class":66},[49,117398,32071],{"class":73},[49,117400,115979],{"class":66},[49,117402,117403,117406,117408,117410,117412],{"class":51,"line":59},[49,117404,117405],{"class":66},"    mujoco.mj_step(",[49,117407,32071],{"class":73},[49,117409,115805],{"class":66},[49,117411,32071],{"class":73},[49,117413,115810],{"class":66},[19,117415,117416,117417,117420,117421,117423,117424,29633],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[46,117418,117419],{},"frame_skip=5","，所以外部调用一次 ",[46,117422,115101],{},"，内部实际执行 5 次 ",[46,117425,102439],{},[39,117427,117429],{"className":31626,"code":117428,"language":31628,"meta":44,"style":44},"self.steps += 1\n",[46,117430,117431],{"__ignoreMap":44},[49,117432,117433,117435,117437,117439],{"class":51,"line":52},[49,117434,32071],{"class":73},[49,117436,114930],{"class":66},[49,117438,10729],{"class":109},[49,117440,56938],{"class":73},[19,117442,117443],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[39,117445,117447],{"className":31626,"code":117446,"language":31628,"meta":44,"style":44},"obs = self._get_obs()\nreward = self._get_reward()\n",[46,117448,117449,117459],{"__ignoreMap":44},[49,117450,117451,117453,117455,117457],{"class":51,"line":52},[49,117452,112078],{"class":66},[49,117454,1448],{"class":109},[49,117456,40121],{"class":73},[49,117458,116021],{"class":66},[49,117460,117461,117463,117465,117467],{"class":51,"line":59},[49,117462,112229],{"class":66},[49,117464,1448],{"class":109},[49,117466,40121],{"class":73},[49,117468,116032],{"class":66},[19,117470,117471],{},"计算新的观测和奖励。",[39,117473,117475],{"className":31626,"code":117474,"language":31628,"meta":44,"style":44},"dist = float(np.linalg.norm(tip - target))\n",[46,117476,117477],{"__ignoreMap":44},[49,117478,117479,117481,117483,117485,117487,117489],{"class":51,"line":52},[49,117480,112820],{"class":66},[49,117482,1448],{"class":109},[49,117484,111021],{"class":73},[49,117486,116075],{"class":66},[49,117488,1923],{"class":109},[49,117490,116080],{"class":66},[19,117492,117493],{},"计算末端到目标的距离，并转换成 Python float。",[39,117495,117496],{"className":31626,"code":114901,"language":31628,"meta":44,"style":44},[46,117497,117498,117510],{"__ignoreMap":44},[49,117499,117500,117502,117504,117506,117508],{"class":51,"line":52},[49,117501,114908],{"class":66},[49,117503,1448],{"class":109},[49,117505,114913],{"class":66},[49,117507,2300],{"class":109},[49,117509,114918],{"class":73},[49,117511,117512,117514,117516,117518,117520,117522,117524],{"class":51,"line":59},[49,117513,114923],{"class":66},[49,117515,1448],{"class":109},[49,117517,40121],{"class":73},[49,117519,114930],{"class":66},[49,117521,2965],{"class":109},[49,117523,40121],{"class":73},[49,117525,114937],{"class":66},[19,117527,117528],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[39,117530,117532],{"className":31626,"code":117531,"language":31628,"meta":44,"style":44},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[46,117533,117534,117547],{"__ignoreMap":44},[49,117535,117536,117539,117541,117543,117545],{"class":51,"line":52},[49,117537,117538],{"class":66},"info ",[49,117540,1448],{"class":109},[49,117542,5702],{"class":66},[49,117544,116126],{"class":1505},[49,117546,116129],{"class":66},[49,117548,117549,117551],{"class":51,"line":59},[49,117550,18296],{"class":109},[49,117552,116136],{"class":66},[19,117554,117555,117558],{},[46,117556,117557],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[39,117560,117562],{"className":31626,"code":117561,"language":31628,"meta":44,"style":44},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[46,117563,117564,117573],{"__ignoreMap":44},[49,117565,117566,117569,117571],{"class":51,"line":52},[49,117567,117568],{"class":66},"env ",[49,117570,1448],{"class":109},[49,117572,116166],{"class":66},[49,117574,117575,117577,117579,117581,117583,117585,117587],{"class":51,"line":59},[49,117576,114624],{"class":66},[49,117578,1448],{"class":109},[49,117580,116176],{"class":66},[49,117582,115790],{"class":6468},[49,117584,1448],{"class":109},[49,117586,80],{"class":73},[49,117588,1409],{"class":66},[19,117590,117591,117592,117595],{},"创建环境并重置。",[46,117593,117594],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[39,117597,117599],{"className":31626,"code":117598,"language":31628,"meta":44,"style":44},"action = env.action_space.sample()\n",[46,117600,117601],{"__ignoreMap":44},[49,117602,117603,117605,117607],{"class":51,"line":52},[49,117604,108666],{"class":66},[49,117606,1448],{"class":109},[49,117608,116245],{"class":66},[19,117610,117611],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117613,103540],{"id":103539},[19,117615,106708],{},[39,117617,117620],{"className":117618,"code":117619,"language":267,"meta":44},[1094],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[46,117621,117619],{"__ignoreMap":44},[19,117623,117624],{},"这个环境已经具备强化学习环境的基本结构。",[19,117626,117627],{},"主函数里使用随机动作：",[39,117629,117630],{"className":31626,"code":117598,"language":31628,"meta":44,"style":44},[46,117631,117632],{"__ignoreMap":44},[49,117633,117634,117636,117638],{"class":51,"line":52},[49,117635,108666],{"class":66},[49,117637,1448],{"class":109},[49,117639,116245],{"class":66},[19,117641,117642],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117644,103572],{"id":103571},[591,117646,117647,117650,117656,117665,117674,117683,117689],{},[26,117648,117649],{},"运行程序。",[26,117651,117652,117653,29633],{},"确认 ",[46,117654,117655],{},"obs.shape == (10,)",[26,117657,112405,117658,117661,117662,29633],{},[46,117659,117660],{},"env.action_space","，应类似 ",[46,117663,117664],{},"Box(-1.0, 1.0, (2,), float32)",[26,117666,106809,117667,117670,117671,29633],{},[46,117668,117669],{},"self.max_steps = 10","，确认环境会更快 ",[46,117672,117673],{},"truncated=True",[26,117675,103635,117676,103638,117679,117682],{},[46,117677,117678],{},"terminated = dist \u003C 0.05",[46,117680,117681],{},"dist \u003C 0.2","，观察是否更容易结束。",[26,117684,103635,117685,117688],{},[46,117686,117687],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[26,117690,117691,117692,117694,117695,117698],{},"在 ",[46,117693,117557],{}," 里加入 ",[46,117696,117697],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117700,103677],{"id":103676},[183,117702,117704],{"id":117703},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117706,117707,117708,117710],{},"Gymnasium 的 ",[46,117709,108358],{}," 返回 5 个值:",[39,117712,117714],{"className":31626,"code":117713,"language":31628,"meta":44,"style":44},"obs, reward, terminated, truncated, info\n",[46,117715,117716],{"__ignoreMap":44},[49,117717,117718],{"class":51,"line":52},[49,117719,117713],{"class":66},[19,117721,117722],{},"不是旧 Gym 的 4 个值。",[183,117724,117726,117729],{"id":117725},"datactrl-action-维度错误",[46,117727,117728],{},"data.ctrl[:] = action"," 维度错误",[19,117731,103747],{},[39,117733,117735],{"className":31626,"code":117734,"language":31628,"meta":44,"style":44},"print(self.model.nu)\nprint(action.shape)\n",[46,117736,117737,117748],{"__ignoreMap":44},[49,117738,117739,117741,117743,117745],{"class":51,"line":52},[49,117740,31663],{"class":73},[49,117742,1403],{"class":66},[49,117744,32071],{"class":73},[49,117746,117747],{"class":66},".model.nu)\n",[49,117749,117750,117752],{"class":51,"line":59},[49,117751,31663],{"class":73},[49,117753,117754],{"class":66},"(action.shape)\n",[19,117756,117757],{},"两者必须匹配。",[183,117759,117761],{"id":117760},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117763,103686],{},[39,117765,117767],{"className":31626,"code":117766,"language":31628,"meta":44,"style":44},"mujoco.mj_forward(self.model, self.data)\n",[46,117768,117769],{"__ignoreMap":44},[49,117770,117771,117774,117776,117778,117780],{"class":51,"line":52},[49,117772,117773],{"class":66},"mujoco.mj_forward(",[49,117775,32071],{"class":73},[49,117777,115805],{"class":66},[49,117779,32071],{"class":73},[49,117781,115810],{"class":66},[183,117783,117785,117787],{"id":117784},"observation_space-维度和-obs-不一致",[46,117786,114824],{}," 维度和 obs 不一致",[19,117789,103799],{},[39,117791,117793],{"className":31626,"code":117792,"language":31628,"meta":44,"style":44},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[46,117794,117795,117805,117812],{"__ignoreMap":44},[49,117796,117797,117799,117801,117803],{"class":51,"line":52},[49,117798,112078],{"class":66},[49,117800,1448],{"class":109},[49,117802,40121],{"class":73},[49,117804,116021],{"class":66},[49,117806,117807,117809],{"class":51,"line":59},[49,117808,31663],{"class":73},[49,117810,117811],{"class":66},"(obs.shape)\n",[49,117813,117814,117816,117818,117820],{"class":51,"line":70},[49,117815,31663],{"class":73},[49,117817,1403],{"class":66},[49,117819,32071],{"class":73},[49,117821,117822],{"class":66},".observation_space.shape)\n",[19,117824,117825],{},"两者必须一致。本章观测是：",[39,117827,117830],{"className":117828,"code":117829,"language":267,"meta":44},[1094],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[46,117831,117829],{"__ignoreMap":44},[183,117833,117835],{"id":117834},"action-超过范围","action 超过范围",[19,117837,117838],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[39,117840,117841],{"className":31626,"code":117340,"language":31628,"meta":44,"style":44},[46,117842,117843],{"__ignoreMap":44},[49,117844,117845,117847,117849,117851,117853,117855,117857],{"class":51,"line":52},[49,117846,108666],{"class":66},[49,117848,1448],{"class":109},[49,117850,108671],{"class":66},[49,117852,32071],{"class":73},[49,117854,115942],{"class":66},[49,117856,32071],{"class":73},[49,117858,115947],{"class":66},[19,117860,117861,117862,29633],{},"这能避免无效动作直接写入 ",[46,117863,102300],{},[183,117865,117867],{"id":117866},"忘记返回-info","忘记返回 info",[19,117869,117707,117870,102242,117872,117874],{},[46,117871,71291],{},[46,117873,108358],{}," 都会返回 info：",[39,117876,117877],{"className":31626,"code":114617,"language":31628,"meta":44,"style":44},[46,117878,117879,117887],{"__ignoreMap":44},[49,117880,117881,117883,117885],{"class":51,"line":52},[49,117882,114624],{"class":66},[49,117884,1448],{"class":109},[49,117886,114629],{"class":66},[49,117888,117889,117891,117893],{"class":51,"line":59},[49,117890,114634],{"class":66},[49,117892,1448],{"class":109},[49,117894,114639],{"class":66},[19,117896,117897,117898,29633],{},"即使暂时没有额外信息，也返回 ",[46,117899,33707],{},[14,117901,117903],{"id":117902},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117905,117906],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[591,117908,117909,117912,117915,117918,117921,117924],{},[26,117910,117911],{},"更稳定的 reward。",[26,117913,117914],{},"合理的 episode 长度。",[26,117916,117917],{},"可重复的随机目标采样。",[26,117919,117920],{},"render 接口。",[26,117922,117923],{},"环境注册代码。",[26,117925,117926],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117928,117929],{},"如果只是自己写训练循环，最小形式是：",[39,117931,117933],{"className":31626,"code":117932,"language":31628,"meta":44,"style":44},"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",[46,117934,117935,117943,117959,117963,117979,117988,117997,118007],{"__ignoreMap":44},[49,117936,117937,117939,117941],{"class":51,"line":52},[49,117938,117568],{"class":66},[49,117940,1448],{"class":109},[49,117942,116166],{"class":66},[49,117944,117945,117947,117949,117951,117953,117955,117957],{"class":51,"line":59},[49,117946,114624],{"class":66},[49,117948,1448],{"class":109},[49,117950,116176],{"class":66},[49,117952,115790],{"class":6468},[49,117954,1448],{"class":109},[49,117956,80],{"class":73},[49,117958,1409],{"class":66},[49,117960,117961],{"class":51,"line":70},[49,117962,3654],{"emptyLinePlaceholder":1330},[49,117964,117965,117967,117969,117971,117973,117975,117977],{"class":51,"line":86},[49,117966,4279],{"class":109},[49,117968,102725],{"class":66},[49,117970,27292],{"class":109},[49,117972,33691],{"class":73},[49,117974,1403],{"class":66},[49,117976,7662],{"class":73},[49,117978,32034],{"class":66},[49,117980,117981,117984,117986],{"class":51,"line":98},[49,117982,117983],{"class":66},"    action ",[49,117985,1448],{"class":109},[49,117987,116245],{"class":66},[49,117989,117990,117993,117995],{"class":51,"line":121},[49,117991,117992],{"class":66},"    obs, reward, terminated, truncated, info ",[49,117994,1448],{"class":109},[49,117996,114639],{"class":66},[49,117998,117999,118001,118003,118005],{"class":51,"line":134},[49,118000,4355],{"class":109},[49,118002,116311],{"class":66},[49,118004,116314],{"class":109},[49,118006,116317],{"class":66},[49,118008,118009,118012,118014],{"class":51,"line":1085},[49,118010,118011],{"class":66},"        obs, info ",[49,118013,1448],{"class":109},[49,118015,114629],{"class":66},[14,118017,118019],{"id":118018},"_9本章小结","9.本章小结",[19,118021,118022],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[39,118024,118027],{"className":118025,"code":118026,"language":267,"meta":44},[1094],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[46,118028,118026],{"__ignoreMap":44},[19,118030,118031],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1305,118033,118034],{},"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":44,"searchDepth":59,"depth":59,"links":118036},[118037,118038,118039,118046,118050,118051,118052,118062,118063],{"id":101870,"depth":59,"text":101871},{"id":101993,"depth":59,"text":101994},{"id":102268,"depth":59,"text":102269,"children":118040},[118041,118043,118045],{"id":114848,"depth":70,"text":118042},"terminated 和 truncated 的区别",{"id":114951,"depth":70,"text":118044},"observation_space 和 action_space",{"id":115078,"depth":70,"text":115079},{"id":102476,"depth":59,"text":102477,"children":118047},[118048,118049],{"id":102796,"depth":70,"text":102796},{"id":102932,"depth":70,"text":102932},{"id":103539,"depth":59,"text":103540},{"id":103571,"depth":59,"text":103572},{"id":103676,"depth":59,"text":103677,"children":118053},[118054,118055,118057,118058,118060,118061],{"id":117703,"depth":70,"text":117704},{"id":117725,"depth":70,"text":118056},"data.ctrl[:] = action 维度错误",{"id":117760,"depth":70,"text":117761},{"id":117784,"depth":70,"text":118059},"observation_space 维度和 obs 不一致",{"id":117834,"depth":70,"text":117835},{"id":117866,"depth":70,"text":117867},{"id":117902,"depth":59,"text":117903},{"id":118018,"depth":59,"text":118019},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114601,"description":44},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118070,"title":118071,"body":118072,"description":118495,"extension":1328,"meta":118496,"navigation":1330,"path":118497,"seo":118498,"stem":118499,"__hash__":118500},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118073,"toc":118485},[118074,118078,118081,118084,118104,118110,118116,118126,118129,118132,118152,118155,118159,118162,118168,118171,118185,118188,118191,118265,118268,118274,118277,118300,118303,118353,118356,118362,118365,118368,118371,118390,118393,118399,118402,118405,118408,118428,118431,118434,118437,118482],[10,118075,118077],{"id":118076},"mujoco-学习","MuJoCo 学习",[19,118079,118080],{},"初版",[19,118082,118083],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[591,118085,118086,118089,118092,118101],{},[26,118087,118088],{},"MuJoCo 模型文件在描述什么。",[26,118090,118091],{},"Python 代码怎样读取和推进仿真。",[26,118093,118094,1605,118096,1605,118098,118100],{},[46,118095,105254],{},[46,118097,105584],{},[46,118099,105587],{}," 这些数组为什么重要。",[26,118102,118103],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118105,118106,118107,118109],{},"默认环境为 Fedora 44、Python >= 3.10、",[46,118108,102251],{}," 官方 Python bindings。",[19,118111,118112,118113,118115],{},"注意：本文禁止使用 ",[46,118114,102236],{},"。所有示例均使用：",[39,118117,118118],{"className":31626,"code":102802,"language":31628,"meta":44,"style":44},[46,118119,118120],{"__ignoreMap":44},[49,118121,118122,118124],{"class":51,"line":52},[49,118123,31640],{"class":109},[49,118125,102525],{"class":66},[14,118127,118128],{"id":118128},"适合谁阅读",[19,118130,118131],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[591,118133,118134,118137,118140,118143],{},[26,118135,118136],{},"没学过 MuJoCo，只会一点 Python。",[26,118138,118139],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[26,118141,118142],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[26,118144,118145,118146,118148,118149,118151],{},"以前接触过 ",[46,118147,102236],{},"，现在想迁移到官方 ",[46,118150,102245],{}," Python bindings。",[19,118153,118154],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118156,118158],{"id":118157},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118160,118161],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[39,118163,118166],{"className":118164,"code":118165,"language":267,"meta":44},[1094],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[46,118167,118165],{"__ignoreMap":44},[19,118169,118170],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[591,118172,118173,118176,118179,118182],{},[26,118174,118175],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[26,118177,118178],{},"快速测试控制算法，不必一开始就上真实机器人。",[26,118180,118181],{},"生成强化学习环境。",[26,118183,118184],{},"采集状态、动作、图像、奖励等训练数据。",[14,118186,118187],{"id":118187},"学习前的心智模型",[19,118189,118190],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[293,118192,118193,118205],{},[296,118194,118195],{},[299,118196,118197,118200,118203],{},[302,118198,118199],{"align":304},"部分",[302,118201,118202],{"align":304},"负责什么",[302,118204,22437],{"align":304},[310,118206,118207,118218,118230,118242,118254],{},[299,118208,118209,118212,118215],{},[315,118210,118211],{"align":304},"MJCF XML",[315,118213,118214],{"align":304},"定义世界和机器人结构",[315,118216,118217],{"align":304},"地面、盒子、关节、电机、摄像头",[299,118219,118220,118224,118227],{},[315,118221,118222],{"align":304},[46,118223,101933],{},[315,118225,118226],{"align":304},"编译后的静态模型",[315,118228,118229],{"align":304},"有几个关节、有几个电机、时间步长是多少",[299,118231,118232,118236,118239],{},[315,118233,118234],{"align":304},[46,118235,101943],{},[315,118237,118238],{"align":304},"运行中的动态状态",[315,118240,118241],{"align":304},"当前时间、位置、速度、电机输入",[299,118243,118244,118248,118251],{},[315,118245,118246],{"align":304},[46,118247,102439],{},[315,118249,118250],{"align":304},"推进一步物理仿真",[315,118252,118253],{"align":304},"根据重力、力、碰撞更新状态",[299,118255,118256,118259,118262],{},[315,118257,118258],{"align":304},"Viewer \u002F Renderer",[315,118260,118261],{"align":304},"把仿真显示出来",[315,118263,118264],{"align":304},"打开窗口或保存图片",[19,118266,118267],{},"一句话总结：",[39,118269,118272],{"className":118270,"code":118271,"language":267,"meta":44},[1094],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[46,118273,118271],{"__ignoreMap":44},[19,118275,118276],{},"参考来源：",[23,118278,118279,118286,118293],{},[26,118280,118281,118282],{},"MuJoCo Python 官方文档：",[1630,118283,118284],{"href":118284,"rel":118285},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25113],[26,118287,118288,118289],{},"MuJoCo XML Reference：",[1630,118290,118291],{"href":118291,"rel":118292},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25113],[26,118294,118295,118296],{},"MuJoCo Overview：",[1630,118297,118298],{"href":118298,"rel":118299},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25113],[14,118301,118302],{"id":118302},"章节目录",[591,118304,118305,118311,118317,118323,118329,118335,118341,118347],{},[26,118306,118307],{},[1630,118308,118310],{"href":118309},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[26,118312,118313],{},[1630,118314,118316],{"href":118315},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[26,118318,118319],{},[1630,118320,118322],{"href":118321},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[26,118324,118325],{},[1630,118326,118328],{"href":118327},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[26,118330,118331],{},[1630,118332,118334],{"href":118333},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[26,118336,118337],{},[1630,118338,118340],{"href":118339},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[26,118342,118343],{},[1630,118344,118346],{"href":118345},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[26,118348,118349],{},[1630,118350,118352],{"href":118351},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118354,118355],{"id":118355},"推荐学习路线",[39,118357,118360],{"className":118358,"code":118359,"language":267,"meta":44},[1094],"环境安装\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",[46,118361,118359],{"__ignoreMap":44},[19,118363,118364],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118366,118367],{"id":118367},"建议的目录结构",[19,118369,118370],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[39,118372,118374],{"className":25070,"code":118373,"language":25072,"meta":44,"style":44},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[46,118375,118376,118384],{"__ignoreMap":44},[49,118377,118378,118380,118382],{"class":51,"line":52},[49,118379,102490],{"class":62},[49,118381,30464],{"class":73},[49,118383,102495],{"class":1505},[49,118385,118386,118388],{"class":51,"line":59},[49,118387,102500],{"class":73},[49,118389,102495],{"class":1505},[19,118391,118392],{},"每一章的代码都单独保存：",[39,118394,118397],{"className":118395,"code":118396,"language":267,"meta":44},[1094],"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",[46,118398,118396],{"__ignoreMap":44},[19,118400,118401],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118403,118404],{"id":118404},"学习方法",[19,118406,118407],{},"每章建议按这个顺序操作：",[591,118409,118410,118413,118416,118419,118422,118425],{},[26,118411,118412],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[26,118414,118415],{},"复制最小可运行代码，保存成指定文件。",[26,118417,118418],{},"运行代码，确认没有报错。",[26,118420,118421],{},"对照“运行结果说明”理解输出。",[26,118423,118424],{},"做“验证步骤”，主动改一两个参数。",[26,118426,118427],{},"遇到报错先看“常见错误与解决方案”。",[19,118429,118430],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118432,118433],{"id":118433},"全局排错顺序",[19,118435,118436],{},"遇到问题时，按下面顺序查：",[591,118438,118439,118445,118451,118456,118459,118462,118469,118479],{},[26,118440,118441,118442],{},"Python 环境是否激活：",[46,118443,118444],{},"which python",[26,118446,118447,118448],{},"MuJoCo 是否能导入：",[46,118449,118450],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[26,118452,118453,118454],{},"是否误装了 ",[46,118455,102236],{},[26,118457,118458],{},"XML 标签是否闭合、属性是否拼写正确",[26,118460,118461],{},"actuator 引用的 joint 名字是否存在",[26,118463,118464,118466,118467],{},[46,118465,102300],{}," 的长度是否等于 ",[46,118468,103382],{},[26,118470,106809,118471,83765,118473,118475,118476],{},[46,118472,105254],{},[46,118474,105584],{}," 后是否调用了 ",[46,118477,118478],{},"mujoco.mj_forward",[26,118480,118481],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1305,118483,118484],{},"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":44,"searchDepth":59,"depth":59,"links":118486},[118487,118488,118489,118490,118491,118492,118493,118494],{"id":118128,"depth":59,"text":118128},{"id":118157,"depth":59,"text":118158},{"id":118187,"depth":59,"text":118187},{"id":118302,"depth":59,"text":118302},{"id":118355,"depth":59,"text":118355},{"id":118367,"depth":59,"text":118367},{"id":118404,"depth":59,"text":118404},{"id":118433,"depth":59,"text":118433},"仿真搭建。",{"category":24627},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118071,"description":118495},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118502,"title":118503,"body":118504,"description":1327,"extension":1328,"meta":118959,"navigation":1330,"path":118960,"seo":118961,"stem":118962,"__hash__":118963},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118505,"toc":118957},[118506,118509,118512,118518,118954],[10,118507,118503],{"id":118508},"_1-最常用的基本操作更新",[19,118510,118511],{},"装linux系统教程：",[19,118513,118514],{},[1630,118515,118516],{"href":118516,"rel":118517},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25113],[39,118519,118523],{"className":118520,"code":118521,"language":118522,"meta":44,"style":44},"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",[46,118524,118525,118530,118535,118544,118549,118558,118563,118583,118588,118599,118604,118613,118618,118646,118651,118670,118675,118694,118698,118703,118719,118723,118728,118758,118762,118767,118783,118787,118792,118807,118811,118816,118832,118836,118841,118853,118865,118869,118874,118891,118895,118900,118918,118922,118927,118936,118940,118945],{"__ignoreMap":44},[49,118526,118527],{"class":51,"line":52},[49,118528,118529],{"class":55},"#更新相关的知识\n",[49,118531,118532],{"class":51,"line":59},[49,118533,118534],{"class":55},"# 更新软件包列表（从服务器获取最新软件信息）\n",[49,118536,118537,118539,118542],{"class":51,"line":70},[49,118538,25825],{"class":62},[49,118540,118541],{"class":1505}," apt",[49,118543,27491],{"class":1505},[49,118545,118546],{"class":51,"line":86},[49,118547,118548],{"class":55},"# 升级所有可更新的软件包（不删除旧包）\n",[49,118550,118551,118553,118555],{"class":51,"line":98},[49,118552,25825],{"class":62},[49,118554,118541],{"class":1505},[49,118556,118557],{"class":1505}," upgrade\n",[49,118559,118560],{"class":51,"line":121},[49,118561,118562],{"class":55},"#更新和升级软件包\n",[49,118564,118565,118567,118569,118572,118574,118576,118578,118581],{"class":51,"line":134},[49,118566,25825],{"class":62},[49,118568,118541],{"class":1505},[49,118570,118571],{"class":1505}," update",[49,118573,27439],{"class":66},[49,118575,25825],{"class":62},[49,118577,118541],{"class":1505},[49,118579,118580],{"class":1505}," upgrade",[49,118582,102205],{"class":73},[49,118584,118585],{"class":51,"line":1085},[49,118586,118587],{"class":55},"#列出可更新的软件包及版本信息\n",[49,118589,118590,118593,118596],{"class":51,"line":2574},[49,118591,118592],{"class":62},"apt",[49,118594,118595],{"class":1505}," list",[49,118597,118598],{"class":73}," --upgradable\n",[49,118600,118601],{"class":51,"line":2586},[49,118602,118603],{"class":55},"#彻底升级（处理依赖关系，可能删除旧包）\n",[49,118605,118606,118608,118610],{"class":51,"line":2867},[49,118607,25825],{"class":62},[49,118609,118541],{"class":1505},[49,118611,118612],{"class":1505}," full-upgrade\n",[49,118614,118615],{"class":51,"line":2872},[49,118616,118617],{"class":55},"#设置指定版本\n",[49,118619,118620,118622,118624,118626,118628,118631,118633,118635,118637,118639,118642,118644],{"class":51,"line":2878},[49,118621,25825],{"class":62},[49,118623,118541],{"class":1505},[49,118625,25082],{"class":1505},[49,118627,30150],{"class":109},[49,118629,118630],{"class":1505},"package_nam",[49,118632,1475],{"class":66},[49,118634,2349],{"class":109},[49,118636,1448],{"class":1505},[49,118638,2300],{"class":109},[49,118640,118641],{"class":1505},"version_numbe",[49,118643,2061],{"class":66},[49,118645,52554],{"class":109},[49,118647,118648],{"class":51,"line":2883},[49,118649,118650],{"class":55},"#只安装软件包不升级\n",[49,118652,118653,118655,118657,118659,118661,118663,118665,118667],{"class":51,"line":2897},[49,118654,25825],{"class":62},[49,118656,118541],{"class":1505},[49,118658,25082],{"class":1505},[49,118660,30150],{"class":109},[49,118662,118630],{"class":1505},[49,118664,1475],{"class":66},[49,118666,2349],{"class":109},[49,118668,118669],{"class":73}," --no-upgrade\n",[49,118671,118672],{"class":51,"line":2902},[49,118673,118674],{"class":55},"#只升级，不存在就不安装\n",[49,118676,118677,118679,118681,118683,118685,118687,118689,118691],{"class":51,"line":2908},[49,118678,25825],{"class":62},[49,118680,118541],{"class":1505},[49,118682,25082],{"class":1505},[49,118684,30150],{"class":109},[49,118686,118630],{"class":1505},[49,118688,1475],{"class":66},[49,118690,2349],{"class":109},[49,118692,118693],{"class":73}," --only-upgrade\n",[49,118695,118696],{"class":51,"line":2929},[49,118697,3654],{"emptyLinePlaceholder":1330},[49,118699,118700],{"class":51,"line":2934},[49,118701,118702],{"class":55},"#安装指定的软件命令\n",[49,118704,118705,118707,118709,118711,118713,118715,118717],{"class":51,"line":2948},[49,118706,25825],{"class":62},[49,118708,118541],{"class":1505},[49,118710,25082],{"class":1505},[49,118712,30150],{"class":109},[49,118714,118630],{"class":1505},[49,118716,1475],{"class":66},[49,118718,52554],{"class":109},[49,118720,118721],{"class":51,"line":2953},[49,118722,3654],{"emptyLinePlaceholder":1330},[49,118724,118725],{"class":51,"line":2982},[49,118726,118727],{"class":55},"#安装多个软件包\n",[49,118729,118730,118732,118734,118736,118738,118741,118744,118746,118748,118751,118753,118755],{"class":51,"line":2987},[49,118731,25825],{"class":62},[49,118733,118541],{"class":1505},[49,118735,25082],{"class":1505},[49,118737,30150],{"class":109},[49,118739,118740],{"class":1505},"package_",[49,118742,118743],{"class":109},"1>",[49,118745,30150],{"class":109},[49,118747,118740],{"class":1505},[49,118749,118750],{"class":109},"2>",[49,118752,30150],{"class":109},[49,118754,118740],{"class":1505},[49,118756,118757],{"class":109},"3>\n",[49,118759,118760],{"class":51,"line":3004},[49,118761,3654],{"emptyLinePlaceholder":1330},[49,118763,118764],{"class":51,"line":3009},[49,118765,118766],{"class":55},"#更新指定的软件命令\n",[49,118768,118769,118771,118773,118775,118777,118779,118781],{"class":51,"line":3014},[49,118770,25825],{"class":62},[49,118772,118541],{"class":1505},[49,118774,118571],{"class":1505},[49,118776,30150],{"class":109},[49,118778,118630],{"class":1505},[49,118780,1475],{"class":66},[49,118782,52554],{"class":109},[49,118784,118785],{"class":51,"line":3019},[49,118786,3654],{"emptyLinePlaceholder":1330},[49,118788,118789],{"class":51,"line":3033},[49,118790,118791],{"class":55},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[49,118793,118794,118796,118799,118801,118803,118805],{"class":51,"line":3038},[49,118795,118592],{"class":62},[49,118797,118798],{"class":1505}," show",[49,118800,30150],{"class":109},[49,118802,118630],{"class":1505},[49,118804,1475],{"class":66},[49,118806,52554],{"class":109},[49,118808,118809],{"class":51,"line":3831},[49,118810,3654],{"emptyLinePlaceholder":1330},[49,118812,118813],{"class":51,"line":3845},[49,118814,118815],{"class":55},"#删除软件包命令\n",[49,118817,118818,118820,118822,118824,118826,118828,118830],{"class":51,"line":3853},[49,118819,25825],{"class":62},[49,118821,118541],{"class":1505},[49,118823,27328],{"class":1505},[49,118825,30150],{"class":109},[49,118827,118630],{"class":1505},[49,118829,1475],{"class":66},[49,118831,52554],{"class":109},[49,118833,118834],{"class":51,"line":3858},[49,118835,3654],{"emptyLinePlaceholder":1330},[49,118837,118838],{"class":51,"line":3864},[49,118839,118840],{"class":55},"# 清理旧版本和缓存（释放磁盘空间）\n",[49,118842,118843,118845,118847,118850],{"class":51,"line":3870},[49,118844,25825],{"class":62},[49,118846,118541],{"class":1505},[49,118848,118849],{"class":1505}," autoremove",[49,118851,118852],{"class":55},"  # 删除不再需要的依赖和库文件\n",[49,118854,118855,118857,118859,118862],{"class":51,"line":3875},[49,118856,25825],{"class":62},[49,118858,118541],{"class":1505},[49,118860,118861],{"class":1505}," clean",[49,118863,118864],{"class":55},"       # 清理下载的缓存包\n",[49,118866,118867],{"class":51,"line":9200},[49,118868,3654],{"emptyLinePlaceholder":1330},[49,118870,118871],{"class":51,"line":9224},[49,118872,118873],{"class":55},"#移除软件包及配置文件\n",[49,118875,118876,118878,118880,118883,118885,118887,118889],{"class":51,"line":9229},[49,118877,25825],{"class":62},[49,118879,118541],{"class":1505},[49,118881,118882],{"class":1505}," purge",[49,118884,30150],{"class":109},[49,118886,118630],{"class":1505},[49,118888,1475],{"class":66},[49,118890,52554],{"class":109},[49,118892,118893],{"class":51,"line":9235},[49,118894,3654],{"emptyLinePlaceholder":1330},[49,118896,118897],{"class":51,"line":9262},[49,118898,118899],{"class":55},"#查找软件包命令\n",[49,118901,118902,118904,118906,118909,118911,118914,118916],{"class":51,"line":9267},[49,118903,25825],{"class":62},[49,118905,118541],{"class":1505},[49,118907,118908],{"class":1505}," search",[49,118910,30150],{"class":109},[49,118912,118913],{"class":1505},"keywor",[49,118915,1706],{"class":66},[49,118917,52554],{"class":109},[49,118919,118920],{"class":51,"line":9273},[49,118921,3654],{"emptyLinePlaceholder":1330},[49,118923,118924],{"class":51,"line":9285},[49,118925,118926],{"class":55},"#列出所有已安装的包\n",[49,118928,118929,118931,118933],{"class":51,"line":9297},[49,118930,118592],{"class":62},[49,118932,118595],{"class":1505},[49,118934,118935],{"class":73}," --installed\n",[49,118937,118938],{"class":51,"line":9309},[49,118939,3654],{"emptyLinePlaceholder":1330},[49,118941,118942],{"class":51,"line":10968},[49,118943,118944],{"class":55},"#列出所有已安装的包的版本信息\n",[49,118946,118947,118949,118951],{"class":51,"line":10993},[49,118948,118592],{"class":62},[49,118950,118595],{"class":1505},[49,118952,118953],{"class":73}," --all-versions\n",[1305,118955,118956],{},"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":44,"searchDepth":59,"depth":59,"links":118958},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118503,"description":1327},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118965,"title":118966,"body":118967,"description":1327,"extension":1328,"meta":119708,"navigation":1330,"path":119709,"seo":119710,"stem":119711,"__hash__":119712},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118968,"toc":119695},[118969,118972,118976,118979,118985,118989,118993,118999,119004,119009,119014,119019,119024,119027,119030,119033,119036,119040,119043,119048,119051,119056,119059,119064,119071,119074,119077,119080,119083,119086,119097,119101,119105,119110,119115,119119,119124,119128,119133,119137,119141,119146,119149,119194,119199,119203,119207,119212,119218,119223,119233,119238,119248,119253,119258,119285,119289,119292,119297,119300,119325,119329,119334,119337,119342,119347,119367,119372,119375,119390,119394,119447,119450,119455,119459,119462,119477,119480,119483,119488,119492,119496,119499,119503,119507,119510,119515,119520,119524,119531,119539,119542,119549,119554,119559,119562,119567,119574,119579,119586,119590,119592,119597,119601,119604,119607,119612,119615,119620,119623,119628,119633,119638,119642,119647,119651,119692],[10,118970,118966],{"id":118971},"_2-linux装机教程",[14,118973,118975],{"id":118974},"_21-实体机","2.1 实体机",[19,118977,118978],{},"使用清华源：（Ubuntu24.04）",[19,118980,118981],{},[1630,118982,118983],{"href":118983,"rel":118984},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25113],[14,118986,118988],{"id":118987},"_22-普通虚拟机","2.2 普通虚拟机",[183,118990,118992],{"id":118991},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,118994,118995],{},[1630,118996,118997],{"href":118997,"rel":118998},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25113],[19,119000,119001],{},[174,119002],{"alt":44,"src":119003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119005,119006],{},[174,119007],{"alt":44,"src":119008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119010,119011],{},[174,119012],{"alt":44,"src":119013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119015,119016],{},[174,119017],{"alt":44,"src":119018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119020,119021],{},[174,119022],{"alt":44,"src":119023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119025,119026],{},"内存4G（4096MB）；",[19,119028,119029],{},"CPU给4个核；",[19,119031,119032],{},"硬盘动态分配60G；",[19,119034,119035],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[183,119037,119039],{"id":119038},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119041,119042],{},"按照1.1的步骤下载Ubuntu",[19,119044,119045],{},[174,119046],{"alt":44,"src":119047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119049,119050],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119052,119053],{},[174,119054],{"alt":44,"src":119055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119057,119058],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119060,119061],{},[174,119062],{"alt":44,"src":119063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119065,119066,119067,119070],{},"选择“正常安装”(找不到都用Alt+F7)， ",[485,119068,119069],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119072,119073],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119075,119076],{},"将改动写入磁盘吗 继续",[19,119078,119079],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119081,119082],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119084,119085],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119087,119088,119089,119092,119093,119096],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[485,119090,119091],{},"除了"," 选不发送系统信息与不升级之外， ",[485,119094,119095],{},"其它"," 都跳过或前进）",[183,119098,119100],{"id":119099},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[525,119102,119104],{"id":119103},"_2231-全屏","2.2.3.1 全屏",[19,119106,119107],{},[174,119108],{"alt":44,"src":119109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119111,119112],{},[174,119113],{"alt":44,"src":119114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[525,119116,119118],{"id":119117},"_2232-文件交换","2.2.3.2 文件交换",[19,119120,119121],{},[174,119122],{"alt":44,"src":119123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[525,119125,119127],{"id":119126},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119129,119130],{},[174,119131],{"alt":44,"src":119132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119134,119136],{"id":119135},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[183,119138,119140],{"id":119139},"_231-简介与优缺点","2.3.1 简介与优缺点",[591,119142,119143],{},[26,119144,119145],{},"什么情况下推荐？",[19,119147,119148],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[591,119150,119151],{"start":59},[26,119152,119153,119154],{},"优缺点：",[591,119155,119156,119186],{},[26,119157,119158,119159],{},"优点：",[591,119160,119161,119164,119171,119174,119177,119180,119183],{},[26,119162,119163],{},"WSL2是最好的Linux发行版;(bushi)",[26,119165,119166,119167,119170],{},"性能损耗极低。且比在Windows上跑深度性能 ",[485,119168,119169],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[26,119172,119173],{},"非常方便调用USB设备，可以USB直通;",[26,119175,119176],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[26,119178,119179],{},"非常方便Win与WSL2互相传文件等协同操作;",[26,119181,119182],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[26,119184,119185],{},"非常方便使用Windows的VScode远程开发;",[26,119187,119188,119189],{},"缺点：",[591,119190,119191],{},[26,119192,119193],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119195,119196],{},[174,119197],{"alt":44,"src":119198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[183,119200,119202],{"id":119201},"_232-安装教程","2.3.2 安装教程",[525,119204,119206],{"id":119205},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[591,119208,119209],{},[26,119210,119211],{},"方法一(图形界面)",[19,119213,119214,119215,25867],{},"用Win+R输入",[46,119216,119217],{},"appwiz.cpl",[19,119219,119220],{},[174,119221],{"alt":44,"src":119222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119224,119225,119226,119229,119230,27722],{},"点击OK进入 ",[485,119227,119228],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[485,119231,119232],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119234,119235],{},[174,119236],{"alt":44,"src":119237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119239,119240,119241,102242,119244,119247],{},"选择 ",[485,119242,119243],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[485,119245,119246],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119249,119250],{},[174,119251],{"alt":44,"src":119252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[591,119254,119255],{"start":59},[26,119256,119257],{},"方法二(命令行)",[39,119259,119263],{"className":119260,"code":119261,"language":119262,"meta":44,"style":44},"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",[46,119264,119265,119270,119275,119280],{"__ignoreMap":44},[49,119266,119267],{"class":51,"line":52},[49,119268,119269],{},"# 开启 Linux 子系统\n",[49,119271,119272],{"class":51,"line":59},[49,119273,119274],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[49,119276,119277],{"class":51,"line":70},[49,119278,119279],{},"# 开启虚拟机平台\n",[49,119281,119282],{"class":51,"line":86},[49,119283,119284],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[525,119286,119288],{"id":119287},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119290,119291],{},"用管理员权限打开powershell",[19,119293,119294],{},[174,119295],{"alt":44,"src":119296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119298,119299],{},"升级WSL并设置默认版本为WSL2",[39,119301,119303],{"className":119260,"code":119302,"language":119262,"meta":44,"style":44},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[46,119304,119305,119310,119315,119320],{"__ignoreMap":44},[49,119306,119307],{"class":51,"line":52},[49,119308,119309],{},"# 更新 wsl\n",[49,119311,119312],{"class":51,"line":59},[49,119313,119314],{},"wsl --update\n",[49,119316,119317],{"class":51,"line":70},[49,119318,119319],{},"# 将 wsl 版本设置为 wsl2\n",[49,119321,119322],{"class":51,"line":86},[49,119323,119324],{},"wsl --set-default-version 2\n",[525,119326,119328],{"id":119327},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[591,119330,119331],{},[26,119332,119333],{},"方式一(商店下载)",[19,119335,119336],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119338,119339],{},[174,119340],{"alt":44,"src":119341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[591,119343,119344],{"start":59},[26,119345,119346],{},"方式二(命令行安装)",[39,119348,119350],{"className":119260,"code":119349,"language":119262,"meta":44,"style":44},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[46,119351,119352,119357,119362],{"__ignoreMap":44},[49,119353,119354],{"class":51,"line":52},[49,119355,119356],{},"# 列出可安装的 Linux 版本\n",[49,119358,119359],{"class":51,"line":59},[49,119360,119361],{},"#（需要科学手段）\n",[49,119363,119364],{"class":51,"line":70},[49,119365,119366],{},"wsl --list --online\n",[19,119368,119369],{},[174,119370],{"alt":44,"src":119371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119373,119374],{},"选择对应发行版并安装",[39,119376,119378],{"className":119260,"code":119377,"language":119262,"meta":44,"style":44},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[46,119379,119380,119385],{"__ignoreMap":44},[49,119381,119382],{"class":51,"line":52},[49,119383,119384],{},"# Ubuntu安装完毕后需要重启系统\n",[49,119386,119387],{"class":51,"line":59},[49,119388,119389],{},"wsl --install -d Ubuntu-24.04\n",[525,119391,119393],{"id":119392},"_2324-查看系统状态","2.3.2.4 查看系统状态",[39,119395,119397],{"className":119260,"code":119396,"language":119262,"meta":44,"style":44},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[46,119398,119399,119404,119409,119414,119419,119423,119427,119432,119437,119442],{"__ignoreMap":44},[49,119400,119401],{"class":51,"line":52},[49,119402,119403],{},"# 查看 wsl\n",[49,119405,119406],{"class":51,"line":59},[49,119407,119408],{},"wsl -l\n",[49,119410,119411],{"class":51,"line":70},[49,119412,119413],{},"# 查看 wsl 运行版本或模式\n",[49,119415,119416],{"class":51,"line":86},[49,119417,119418],{},"wsl -l -v\n",[49,119420,119421],{"class":51,"line":98},[49,119422,3654],{"emptyLinePlaceholder":1330},[49,119424,119425],{"class":51,"line":121},[49,119426,3654],{"emptyLinePlaceholder":1330},[49,119428,119429],{"class":51,"line":134},[49,119430,119431],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[49,119433,119434],{"class":51,"line":1085},[49,119435,119436],{},"wsl --set-version \u003Cdistro> 2\n",[49,119438,119439],{"class":51,"line":2574},[49,119440,119441],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[49,119443,119444],{"class":51,"line":2586},[49,119445,119446],{},"wsl --unregister \u003Cdistro>\n",[19,119448,119449],{},"输出Version为2即正常",[19,119451,119452],{},[174,119453],{"alt":44,"src":119454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[525,119456,119458],{"id":119457},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119460,119461],{},"直接在Powershell里输入wsl命令进入子系统",[39,119463,119465],{"className":119260,"code":119464,"language":119262,"meta":44,"style":44},"# 进入子系统\nwsl\n",[46,119466,119467,119472],{"__ignoreMap":44},[49,119468,119469],{"class":51,"line":52},[49,119470,119471],{},"# 进入子系统\n",[49,119473,119474],{"class":51,"line":59},[49,119475,119476],{},"wsl\n",[19,119478,119479],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119481,119482],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119484,119485],{},[174,119486],{"alt":44,"src":119487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[183,119489,119491],{"id":119490},"_233-配置各种环境","2.3.3 配置各种环境",[525,119493,119495],{"id":119494},"_2331-换源","2.3.3.1 换源",[19,119497,119498],{},"(同实体机LINUX，往下找教程)",[525,119500,119502],{"id":119501},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24159,119504,119506],{"id":119505},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119508,119509],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119511,119512],{},[174,119513],{"alt":44,"src":119514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119516,119517],{},[174,119518],{"alt":44,"src":119519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24159,119521,119523],{"id":119522},"_23322-cuda","2.3.3.2.2 CUDA",[19,119525,119526,119527],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[1630,119528,119529],{"href":119529,"rel":119530},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25113],[19,119532,119533,119536],{},[174,119534],{"alt":44,"src":119535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[174,119537],{"alt":44,"src":119538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119540,119541],{},"在下方的网站，选择合适的版本。",[19,119543,119544,119545],{},"WSL2 专属 CUDA 指南：",[1630,119546,119547],{"href":119547,"rel":119548},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25113],[19,119550,119551],{},[485,119552,119553],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119555,119556],{},[174,119557],{"alt":44,"src":119558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119560,119561],{},"挨行敲一遍",[19,119563,119564],{},[174,119565],{"alt":44,"src":119566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119568,119569,119570,119573],{},"敲完后，输入",[46,119571,119572],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119575,119576],{},[174,119577],{"alt":44,"src":119578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119580,119581,119582,119585],{},"（请详看下方教程的",[485,119583,119584],{},"安装CUDA的配置环境来看","如何配置环境）",[24159,119587,119589],{"id":119588},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119591,119498],{},[19,119593,119594],{},[174,119595],{"alt":44,"src":119596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[525,119598,119600],{"id":119599},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119602,119603],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119605,119606],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119608,119609],{},[174,119610],{"alt":44,"src":119611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119613,119614],{},"连接WSL2",[19,119616,119617],{},[174,119618],{"alt":44,"src":119619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119621,119622],{},"远程开发成功。",[19,119624,119625],{},[174,119626],{"alt":44,"src":119627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119629,119630],{},[174,119631],{"alt":44,"src":119632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,119634,119635],{},[174,119636],{"alt":44,"src":119637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[525,119639,119641],{"id":119640},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,119643,119644],{},[174,119645],{"alt":44,"src":119646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[525,119648,119650],{"id":119649},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[39,119652,119654],{"className":118520,"code":119653,"language":118522,"meta":44,"style":44},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[46,119655,119656,119664,119672,119683,119687],{"__ignoreMap":44},[49,119657,119658,119660,119662],{"class":51,"line":52},[49,119659,25825],{"class":62},[49,119661,118541],{"class":1505},[49,119663,27491],{"class":1505},[49,119665,119666,119668,119670],{"class":51,"line":59},[49,119667,25825],{"class":62},[49,119669,118541],{"class":1505},[49,119671,118557],{"class":1505},[49,119673,119674,119676,119678,119680],{"class":51,"line":70},[49,119675,25825],{"class":62},[49,119677,118541],{"class":1505},[49,119679,25082],{"class":1505},[49,119681,119682],{"class":1505}," mesa-utils\n",[49,119684,119685],{"class":51,"line":86},[49,119686,3654],{"emptyLinePlaceholder":1330},[49,119688,119689],{"class":51,"line":98},[49,119690,119691],{"class":55},"#然后重启wsl2即可\n",[1305,119693,119694],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":44,"searchDepth":59,"depth":59,"links":119696},[119697,119698,119703],{"id":118974,"depth":59,"text":118975},{"id":118987,"depth":59,"text":118988,"children":119699},[119700,119701,119702],{"id":118991,"depth":70,"text":118992},{"id":119038,"depth":70,"text":119039},{"id":119099,"depth":70,"text":119100},{"id":119135,"depth":59,"text":119136,"children":119704},[119705,119706,119707],{"id":119139,"depth":70,"text":119140},{"id":119201,"depth":70,"text":119202},{"id":119490,"depth":70,"text":119491},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118966,"description":1327},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119714,"title":119715,"body":119716,"description":1327,"extension":1328,"meta":122652,"navigation":1330,"path":122653,"seo":122654,"stem":122655,"__hash__":122656},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119717,"toc":122624},[119718,119721,119725,119731,119735,119741,119745,119933,119936,119941,119945,119949,119952,119955,119961,119966,119969,119972,119977,120010,120015,120019,120096,120099,120104,120108,120111,120150,120153,120162,120180,120185,120192,120309,120314,120317,120344,120349,120353,120362,120412,120419,120423,120426,120440,120447,120481,120486,120490,120513,120516,120521,120525,120528,120531,120534,120576,120580,120583,120586,120627,120631,120635,120638,120643,120648,120651,120674,120677,120685,120690,120693,120698,120703,120706,120711,120715,120720,120743,120748,120810,120818,120823,120828,120831,120836,120839,120844,120849,120867,120872,120878,120883,120897,120901,120904,120907,120910,120953,120956,120961,121062,121065,121070,121074,121078,121115,121119,121123,121127,121173,121177,121222,121226,121233,121241,121296,121299,121376,121379,121402,121406,121409,121414,121419,121427,121430,121435,121440,121445,121448,121453,121462,121465,121470,121473,121544,121549,121552,121557,121560,121565,121568,121573,121576,121581,121586,121589,121664,121667,121680,121685,121688,121702,121705,121734,121739,121768,121771,121776,121780,121785,121794,121797,121802,121805,121810,121813,121816,121821,121824,121829,121834,121837,121842,121845,121970,121975,122005,122008,122013,122018,122035,122038,122081,122084,122111,122116,122129,122272,122276,122281,122295,122298,122349,122352,122382,122385,122401,122406,122420,122423,122490,122495,122504,122509,122512,122524,122529,122536,122560,122563,122568,122571,122590,122595,122602,122614,122621],[10,119719,119715],{"id":119720},"_3-安装必备配置",[14,119722,119724],{"id":119723},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[39,119726,119729],{"className":119727,"code":119728,"language":267},[1094],"  打开下方网站（注意，该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",[46,119730,119728],{"__ignoreMap":44},[183,119732,119734],{"id":119733},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[39,119736,119739],{"className":119737,"code":119738,"language":267},[1094],"  输入以下命令\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",[46,119740,119738],{"__ignoreMap":44},[183,119742,119744],{"id":119743},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[39,119746,119750],{"className":119747,"code":119748,"language":119749,"meta":44,"style":44},"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",[46,119751,119752,119760,119771,119783,119797,119801,119811,119816,119820,119824,119829,119833,119845,119849,119854,119858,119869,119873,119889,119893,119904,119908,119913,119917,119925],{"__ignoreMap":44},[49,119753,119754,119756,119758],{"class":51,"line":52},[49,119755,25825],{"class":62},[49,119757,118541],{"class":1505},[49,119759,27491],{"class":1505},[49,119761,119762,119764,119766,119768],{"class":51,"line":59},[49,119763,25825],{"class":62},[49,119765,118541],{"class":1505},[49,119767,25082],{"class":1505},[49,119769,119770],{"class":1505}," vim\n",[49,119772,119773,119775,119778,119780],{"class":51,"line":70},[49,119774,25825],{"class":62},[49,119776,119777],{"class":1505}," rm",[49,119779,26574],{"class":73},[49,119781,119782],{"class":1505}," \u002Fetc\u002Fapt\u002Fsources.list\n",[49,119784,119785,119787,119789,119791,119794],{"class":51,"line":86},[49,119786,25825],{"class":62},[49,119788,119777],{"class":1505},[49,119790,26574],{"class":73},[49,119792,119793],{"class":1505}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[49,119795,119796],{"class":73},"**\n",[49,119798,119799],{"class":51,"line":98},[49,119800,3654],{"emptyLinePlaceholder":1330},[49,119802,119803,119805,119808],{"class":51,"line":121},[49,119804,25825],{"class":62},[49,119806,119807],{"class":1505}," vim",[49,119809,119810],{"class":1505}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[49,119812,119813],{"class":51,"line":134},[49,119814,119815],{"class":1505},"```\n",[49,119817,119818],{"class":51,"line":1085},[49,119819,3654],{"emptyLinePlaceholder":1330},[49,119821,119822],{"class":51,"line":2574},[49,119823,3654],{"emptyLinePlaceholder":1330},[49,119825,119826],{"class":51,"line":2586},[49,119827,119828],{"class":62},"选择好Ubuntu版本后，复制下方的内容。\n",[49,119830,119831],{"class":51,"line":2867},[49,119832,3654],{"emptyLinePlaceholder":1330},[49,119834,119835,119837,119840,119843],{"class":51,"line":2872},[49,119836,1618],{"class":109},[49,119838,119839],{"class":1505},"[](",[49,119841,119842],{"class":62},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[49,119844,1409],{"class":1505},[49,119846,119847],{"class":51,"line":2878},[49,119848,3654],{"emptyLinePlaceholder":1330},[49,119850,119851],{"class":51,"line":2883},[49,119852,119853],{"class":62},"粘贴进去\n",[49,119855,119856],{"class":51,"line":2897},[49,119857,3654],{"emptyLinePlaceholder":1330},[49,119859,119860,119862,119864,119867],{"class":51,"line":2902},[49,119861,1618],{"class":109},[49,119863,119839],{"class":1505},[49,119865,119866],{"class":62},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[49,119868,1409],{"class":1505},[49,119870,119871],{"class":51,"line":2908},[49,119872,3654],{"emptyLinePlaceholder":1330},[49,119874,119875,119878,119881,119884,119886],{"class":51,"line":2929},[49,119876,119877],{"class":62},"按一下ESC，然后英文冒号，输入",[49,119879,119880],{"class":1505}," `",[49,119882,119883],{"class":62},":wq!",[49,119885,2361],{"class":1505},[49,119887,119888],{"class":62},"然后回车\n",[49,119890,119891],{"class":51,"line":2934},[49,119892,3654],{"emptyLinePlaceholder":1330},[49,119894,119895,119897,119899,119902],{"class":51,"line":2948},[49,119896,1618],{"class":109},[49,119898,119839],{"class":1505},[49,119900,119901],{"class":62},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[49,119903,1409],{"class":1505},[49,119905,119906],{"class":51,"line":2953},[49,119907,3654],{"emptyLinePlaceholder":1330},[49,119909,119910],{"class":51,"line":2982},[49,119911,119912],{"class":62},"输入以下命令\n",[49,119914,119915],{"class":51,"line":2987},[49,119916,3654],{"emptyLinePlaceholder":1330},[49,119918,119919,119922],{"class":51,"line":3004},[49,119920,119921],{"class":1505},"```",[49,119923,119924],{"class":62},"Bash\n",[49,119926,119927,119929,119931],{"class":51,"line":3009},[49,119928,25825],{"class":62},[49,119930,118541],{"class":1505},[49,119932,27491],{"class":1505},[19,119934,119935],{},"这里被替换成对应学校则成功",[19,119937,119938],{},[174,119939],{"alt":44,"src":119940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119942,119944],{"id":119943},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[183,119946,119948],{"id":119947},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119950,119951],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119953,119954],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119956,119957],{},[1630,119958,119959],{"href":119959,"rel":119960},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25113],[19,119962,119963],{},[174,119964],{"alt":44,"src":119965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119967,119968],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119970,119971],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119973,119974],{},[174,119975],{"alt":44,"src":119976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[39,119978,119980],{"className":118520,"code":119979,"language":118522,"meta":44,"style":44},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[46,119981,119982,119987,119994,119999],{"__ignoreMap":44},[49,119983,119984],{"class":51,"line":52},[49,119985,119986],{"class":55},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[49,119988,119989,119991],{"class":51,"line":59},[49,119990,102500],{"class":73},[49,119992,119993],{"class":1505}," ~\u002FDownloads\n",[49,119995,119996],{"class":51,"line":70},[49,119997,119998],{"class":55},"#下方chrome安装包名不一定是这个，根据名字来看\n",[49,120000,120001,120003,120005,120007],{"class":51,"line":86},[49,120002,25825],{"class":62},[49,120004,118541],{"class":1505},[49,120006,25082],{"class":1505},[49,120008,120009],{"class":1505}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120011,120012],{},[174,120013],{"alt":44,"src":120014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[183,120016,120018],{"id":120017},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[39,120020,120022],{"className":118520,"code":120021,"language":118522,"meta":44,"style":44},"# 老版\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",[46,120023,120024,120029,120037,120048,120053,120057,120062,120072,120080,120091],{"__ignoreMap":44},[49,120025,120026],{"class":51,"line":52},[49,120027,120028],{"class":55},"# 老版\n",[49,120030,120031,120033,120035],{"class":51,"line":59},[49,120032,25825],{"class":62},[49,120034,118541],{"class":1505},[49,120036,27491],{"class":1505},[49,120038,120039,120041,120043,120045],{"class":51,"line":70},[49,120040,25825],{"class":62},[49,120042,118541],{"class":1505},[49,120044,25082],{"class":1505},[49,120046,120047],{"class":1505}," neofetch\n",[49,120049,120050],{"class":51,"line":86},[49,120051,120052],{"class":62},"neofetch\n",[49,120054,120055],{"class":51,"line":98},[49,120056,3654],{"emptyLinePlaceholder":1330},[49,120058,120059],{"class":51,"line":121},[49,120060,120061],{"class":55},"# 新版\n",[49,120063,120064,120066,120069],{"class":51,"line":134},[49,120065,25825],{"class":62},[49,120067,120068],{"class":1505}," add-apt-repository",[49,120070,120071],{"class":1505}," ppa:zhangsongcui3371\u002Ffastfetch\n",[49,120073,120074,120076,120078],{"class":51,"line":1085},[49,120075,25825],{"class":62},[49,120077,118541],{"class":1505},[49,120079,27491],{"class":1505},[49,120081,120082,120084,120086,120088],{"class":51,"line":2574},[49,120083,25825],{"class":62},[49,120085,118541],{"class":1505},[49,120087,25082],{"class":1505},[49,120089,120090],{"class":1505}," fastfetch\n",[49,120092,120093],{"class":51,"line":2586},[49,120094,120095],{"class":62},"fastfetch\n",[19,120097,120098],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120100,120101],{},[174,120102],{"alt":44,"src":120103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[183,120105,120107],{"id":120106},"_323-移除snap应用","3.2.3 移除snap应用",[19,120109,120110],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[39,120112,120114],{"className":118520,"code":120113,"language":118522,"meta":44,"style":44},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[46,120115,120116,120128,120139],{"__ignoreMap":44},[49,120117,120118,120120,120122,120125],{"class":51,"line":52},[49,120119,25825],{"class":62},[49,120121,27762],{"class":1505},[49,120123,120124],{"class":1505}," disable",[49,120126,120127],{"class":1505}," snapd.service\n",[49,120129,120130,120132,120134,120136],{"class":51,"line":59},[49,120131,25825],{"class":62},[49,120133,27762],{"class":1505},[49,120135,120124],{"class":1505},[49,120137,120138],{"class":1505}," snapd.socket\n",[49,120140,120141,120143,120145,120147],{"class":51,"line":70},[49,120142,25825],{"class":62},[49,120144,27762],{"class":1505},[49,120146,120124],{"class":1505},[49,120148,120149],{"class":1505}," snapd.seeded.service\n",[19,120151,120152],{},"然后查看snap应用列表",[19,120154,120155,120156,120161],{},"根据你安装的选择不同（最小安装或普通安装），有",[1630,120157,120160],{"href":120158,"rel":120159},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25113],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[39,120163,120165],{"className":118520,"code":120164,"language":118522,"meta":44,"style":44},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[46,120166,120167,120172],{"__ignoreMap":44},[49,120168,120169],{"class":51,"line":52},[49,120170,120171],{"class":55},"# 查询当前系统上snap安装了哪些app\n",[49,120173,120174,120177],{"class":51,"line":59},[49,120175,120176],{"class":62},"snap",[49,120178,120179],{"class":1505}," list\n",[19,120181,120182],{},[174,120183],{"alt":44,"src":120184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120186,120187,120188,120191],{},"卸载掉图中所有应用，按照 ",[485,120189,120190],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[39,120193,120195],{"className":118520,"code":120194,"language":118522,"meta":44,"style":44},"#移除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",[46,120196,120197,120202,120214,120219,120230,120235,120246,120251,120262,120267,120271,120276,120287,120298],{"__ignoreMap":44},[49,120198,120199],{"class":51,"line":52},[49,120200,120201],{"class":55},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[49,120203,120204,120206,120209,120211],{"class":51,"line":59},[49,120205,25825],{"class":62},[49,120207,120208],{"class":1505}," snap",[49,120210,27328],{"class":1505},[49,120212,120213],{"class":1505}," snap-store\n",[49,120215,120216],{"class":51,"line":70},[49,120217,120218],{"class":55},"#移除firefox浏览器\n",[49,120220,120221,120223,120225,120227],{"class":51,"line":86},[49,120222,25825],{"class":62},[49,120224,120208],{"class":1505},[49,120226,27328],{"class":1505},[49,120228,120229],{"class":1505}," firefox\n",[49,120231,120232],{"class":51,"line":98},[49,120233,120234],{"class":55},"#移除gnome-42-2204\n",[49,120236,120237,120239,120241,120243],{"class":51,"line":121},[49,120238,25825],{"class":62},[49,120240,120208],{"class":1505},[49,120242,27328],{"class":1505},[49,120244,120245],{"class":1505}," gnome-42-2204\n",[49,120247,120248],{"class":51,"line":134},[49,120249,120250],{"class":55},"#移除gtk-common-themes\n",[49,120252,120253,120255,120257,120259],{"class":51,"line":1085},[49,120254,25825],{"class":62},[49,120256,120208],{"class":1505},[49,120258,27328],{"class":1505},[49,120260,120261],{"class":1505}," gtk-common-themes\n",[49,120263,120264],{"class":51,"line":2574},[49,120265,120266],{"class":55},"#移除其它...\n",[49,120268,120269],{"class":51,"line":2586},[49,120270,3928],{"class":66},[49,120272,120273],{"class":51,"line":2867},[49,120274,120275],{"class":55},"#移除core22,bare以及snapd\n",[49,120277,120278,120280,120282,120284],{"class":51,"line":2872},[49,120279,25825],{"class":62},[49,120281,120208],{"class":1505},[49,120283,27328],{"class":1505},[49,120285,120286],{"class":1505}," core22\n",[49,120288,120289,120291,120293,120295],{"class":51,"line":2878},[49,120290,25825],{"class":62},[49,120292,120208],{"class":1505},[49,120294,27328],{"class":1505},[49,120296,120297],{"class":1505}," bare\n",[49,120299,120300,120302,120304,120306],{"class":51,"line":2883},[49,120301,25825],{"class":62},[49,120303,120208],{"class":1505},[49,120305,27328],{"class":1505},[49,120307,120308],{"class":1505}," snapd\n",[19,120310,120311],{},[174,120312],{"alt":44,"src":120313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120315,120316],{},"输入以下命令查看是否还有snap包",[39,120318,120320],{"className":118520,"code":120319,"language":118522,"meta":44,"style":44},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[46,120321,120322,120328,120332,120336,120340],{"__ignoreMap":44},[49,120323,120324,120326],{"class":51,"line":52},[49,120325,120176],{"class":62},[49,120327,120179],{"class":1505},[49,120329,120330],{"class":51,"line":59},[49,120331,120028],{"class":55},[49,120333,120334],{"class":51,"line":70},[49,120335,120052],{"class":62},[49,120337,120338],{"class":51,"line":86},[49,120339,120061],{"class":55},[49,120341,120342],{"class":51,"line":98},[49,120343,120095],{"class":62},[19,120345,120346],{},[174,120347],{"alt":44,"src":120348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[183,120350,120352],{"id":120351},"_324-移除snap","3.2.4 移除snap",[19,120354,120355,120356,120361],{},"在删除掉",[1630,120357,120360],{"href":120358,"rel":120359},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25113],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[39,120363,120365],{"className":118520,"code":120364,"language":118522,"meta":44,"style":44}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[46,120366,120367,120372,120385,120390,120401],{"__ignoreMap":44},[49,120368,120369],{"class":51,"line":52},[49,120370,120371],{"class":55}," #使用apt移除掉snap\n",[49,120373,120374,120376,120378,120380,120383],{"class":51,"line":59},[49,120375,25825],{"class":62},[49,120377,118541],{"class":1505},[49,120379,118849],{"class":1505},[49,120381,120382],{"class":73}," --purge",[49,120384,120308],{"class":1505},[49,120386,120387],{"class":51,"line":70},[49,120388,120389],{"class":55},"#移除snapd的一些目录\n",[49,120391,120392,120394,120396,120398],{"class":51,"line":86},[49,120393,25825],{"class":62},[49,120395,119777],{"class":1505},[49,120397,26574],{"class":73},[49,120399,120400],{"class":1505}," \u002Fvar\u002Fcache\u002Fsnapd\n",[49,120402,120403,120405,120407,120409],{"class":51,"line":98},[49,120404,25825],{"class":62},[49,120406,119777],{"class":1505},[49,120408,26574],{"class":73},[49,120410,120411],{"class":1505}," ~\u002Fsnap\n",[19,120413,120414,120415,120418],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[46,120416,120417],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[183,120420,120422],{"id":120421},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120424,120425],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[39,120427,120429],{"className":118520,"code":120428,"language":118522,"meta":44,"style":44},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[46,120430,120431],{"__ignoreMap":44},[49,120432,120433,120435,120437],{"class":51,"line":52},[49,120434,25825],{"class":62},[49,120436,119807],{"class":1505},[49,120438,120439],{"class":1505}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120441,120442,120443,120446],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[46,120444,120445],{},":wq"," 回车",[39,120448,120450],{"className":118520,"code":120449,"language":118522,"meta":44,"style":44},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[46,120451,120452,120459,120473],{"__ignoreMap":44},[49,120453,120454,120457],{"class":51,"line":52},[49,120455,120456],{"class":62},"Package:",[49,120458,120308],{"class":1505},[49,120460,120461,120464,120467,120470],{"class":51,"line":59},[49,120462,120463],{"class":62},"Pin:",[49,120465,120466],{"class":1505}," release",[49,120468,120469],{"class":1505}," a=",[49,120471,120472],{"class":73},"*\n",[49,120474,120475,120478],{"class":51,"line":70},[49,120476,120477],{"class":62},"Pin-Priority:",[49,120479,120480],{"class":73}," -10\n",[19,120482,120483],{},[174,120484],{"alt":44,"src":120485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[183,120487,120489],{"id":120488},"_326-测试是否成功","3.2.6 测试是否成功",[39,120491,120493],{"className":118520,"code":120492,"language":118522,"meta":44,"style":44},"sudo apt update\nsudo apt install firefox\n",[46,120494,120495,120503],{"__ignoreMap":44},[49,120496,120497,120499,120501],{"class":51,"line":52},[49,120498,25825],{"class":62},[49,120500,118541],{"class":1505},[49,120502,27491],{"class":1505},[49,120504,120505,120507,120509,120511],{"class":51,"line":59},[49,120506,25825],{"class":62},[49,120508,118541],{"class":1505},[49,120510,25082],{"class":1505},[49,120512,120229],{"class":1505},[19,120514,120515],{},"这里提示snapd无法被安装，就证明成功了",[19,120517,120518],{},[174,120519],{"alt":44,"src":120520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[183,120522,120524],{"id":120523},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120526,120527],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120529,120530],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120532,120533],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[39,120535,120537],{"className":118520,"code":120536,"language":118522,"meta":44,"style":44},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[46,120538,120539,120544,120553,120558,120566],{"__ignoreMap":44},[49,120540,120541],{"class":51,"line":52},[49,120542,120543],{"class":55},"# 添加Mozilla提供的源\n",[49,120545,120546,120548,120550],{"class":51,"line":59},[49,120547,25825],{"class":62},[49,120549,120068],{"class":1505},[49,120551,120552],{"class":1505}," ppa:mozillateam\u002Fppa\n",[49,120554,120555],{"class":51,"line":70},[49,120556,120557],{"class":55},"# 安装Firefox\n",[49,120559,120560,120562,120564],{"class":51,"line":86},[49,120561,25825],{"class":62},[49,120563,118541],{"class":1505},[49,120565,27491],{"class":1505},[49,120567,120568,120570,120572,120574],{"class":51,"line":98},[49,120569,25825],{"class":62},[49,120571,118541],{"class":1505},[49,120573,25082],{"class":1505},[49,120575,120229],{"class":1505},[183,120577,120579],{"id":120578},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120581,120582],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120584,120585],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[39,120587,120589],{"className":118520,"code":120588,"language":118522,"meta":44,"style":44},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[46,120590,120591,120596,120606,120614,120618],{"__ignoreMap":44},[49,120592,120593],{"class":51,"line":52},[49,120594,120595],{"class":55},"#删掉禁止安装snap的配置文件\n",[49,120597,120598,120600,120602,120604],{"class":51,"line":59},[49,120599,25825],{"class":62},[49,120601,119777],{"class":1505},[49,120603,26574],{"class":73},[49,120605,120439],{"class":1505},[49,120607,120608,120610,120612],{"class":51,"line":70},[49,120609,25825],{"class":62},[49,120611,118541],{"class":1505},[49,120613,27491],{"class":1505},[49,120615,120616],{"class":51,"line":86},[49,120617,3654],{"emptyLinePlaceholder":1330},[49,120619,120620,120622,120624],{"class":51,"line":98},[49,120621,25825],{"class":62},[49,120623,118541],{"class":1505},[49,120625,120626],{"class":1505}," dist-update\n",[14,120628,120630],{"id":120629},"_33-中文输入法","3.3 中文输入法",[183,120632,120634],{"id":120633},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,120636,120637],{},"官网下载搜狗输入法",[19,120639,120640],{},[174,120641],{"alt":44,"src":120642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,120644,120645],{},[174,120646],{"alt":44,"src":120647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,120649,120650],{},"打开终端输入如下",[39,120652,120654],{"className":118520,"code":120653,"language":118522,"meta":44,"style":44},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[46,120655,120656,120663],{"__ignoreMap":44},[49,120657,120658,120660],{"class":51,"line":52},[49,120659,102500],{"class":73},[49,120661,120662],{"class":1505}," ~\u002FDownloads\u002F\n",[49,120664,120665,120667,120669,120671],{"class":51,"line":59},[49,120666,25825],{"class":62},[49,120668,118541],{"class":1505},[49,120670,25082],{"class":1505},[49,120672,120673],{"class":1505}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,120675,120676],{},"打开Fcitx",[19,120678,120679,120682],{},[174,120680],{"alt":44,"src":120681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[174,120683],{"alt":44,"src":120684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,120686,120687],{},[174,120688],{"alt":44,"src":120689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120691,120692],{},"添加搜狗输入法",[19,120694,120695],{},[174,120696],{"alt":44,"src":120697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120699,120700],{},[174,120701],{"alt":44,"src":120702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120704,120705],{},"将搜狗输入法设置为唯一输入法",[19,120707,120708],{},[174,120709],{"alt":44,"src":120710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[183,120712,120714],{"id":120713},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[591,120716,120717],{},[26,120718,120719],{},"卸载旧输入法",[39,120721,120723],{"className":119747,"code":120722,"language":119749,"meta":44,"style":44},"sudo apt purge fcitx* ibus*\n",[46,120724,120725],{"__ignoreMap":44},[49,120726,120727,120729,120731,120733,120736,120738,120741],{"class":51,"line":52},[49,120728,25825],{"class":62},[49,120730,118541],{"class":1505},[49,120732,118882],{"class":1505},[49,120734,120735],{"class":1505}," fcitx",[49,120737,1846],{"class":73},[49,120739,120740],{"class":1505}," ibus",[49,120742,120472],{"class":73},[591,120744,120745],{"start":59},[26,120746,120747],{},"安装Fcitx5",[39,120749,120751],{"className":118520,"code":120750,"language":118522,"meta":44,"style":44},"# 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",[46,120752,120753,120758,120772,120776,120781,120790,120798],{"__ignoreMap":44},[49,120754,120755],{"class":51,"line":52},[49,120756,120757],{"class":55},"# Ubuntu22.04及以上、Debian12及以上\n",[49,120759,120760,120762,120764,120766,120769],{"class":51,"line":59},[49,120761,25825],{"class":62},[49,120763,118541],{"class":1505},[49,120765,25082],{"class":1505},[49,120767,120768],{"class":1505}," fcitx5",[49,120770,120771],{"class":1505}," fcitx5-chinese-addons\n",[49,120773,120774],{"class":51,"line":70},[49,120775,3654],{"emptyLinePlaceholder":1330},[49,120777,120778],{"class":51,"line":86},[49,120779,120780],{"class":55},"# Ubuntu20.04\n",[49,120782,120783,120785,120787],{"class":51,"line":98},[49,120784,25825],{"class":62},[49,120786,120068],{"class":1505},[49,120788,120789],{"class":1505}," ppa:zhsj\u002Ffcitx5\n",[49,120791,120792,120794,120796],{"class":51,"line":121},[49,120793,25825],{"class":62},[49,120795,118541],{"class":1505},[49,120797,27491],{"class":1505},[49,120799,120800,120802,120804,120806,120808],{"class":51,"line":134},[49,120801,25825],{"class":62},[49,120803,118541],{"class":1505},[49,120805,25082],{"class":1505},[49,120807,120768],{"class":1505},[49,120809,120771],{"class":1505},[591,120811,120812,120815],{"start":70},[26,120813,120814],{},"Reboot System",[26,120816,120817],{},"启动Fcitx5",[19,120819,120820],{},[174,120821],{"alt":44,"src":120822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[591,120824,120825],{"start":98},[26,120826,120827],{},"修改一些设置",[19,120829,120830],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120832,120833],{},[174,120834],{"alt":44,"src":120835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120837,120838],{},"添加快捷键以便于更好切换中英文",[19,120840,120841],{},[174,120842],{"alt":44,"src":120843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[591,120845,120846],{"start":121},[26,120847,120848],{},"重启",[39,120850,120852],{"className":119747,"code":120851,"language":119749,"meta":44,"style":44},"sudo shutdown -r now\n",[46,120853,120854],{"__ignoreMap":44},[49,120855,120856,120858,120861,120864],{"class":51,"line":52},[49,120857,25825],{"class":62},[49,120859,120860],{"class":1505}," shutdown",[49,120862,120863],{"class":73}," -r",[49,120865,120866],{"class":1505}," now\n",[591,120868,120869],{"start":134},[26,120870,120871],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120873,120874],{},[1630,120875,120876],{"href":120876,"rel":120877},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25113],[591,120879,120880],{"start":1085},[26,120881,120882],{},"再重启",[39,120884,120885],{"className":119747,"code":120851,"language":119749,"meta":44,"style":44},[46,120886,120887],{"__ignoreMap":44},[49,120888,120889,120891,120893,120895],{"class":51,"line":52},[49,120890,25825],{"class":62},[49,120892,120860],{"class":1505},[49,120894,120863],{"class":73},[49,120896,120866],{"class":1505},[14,120898,120900],{"id":120899},"_34-pip3源替换","3.4 pip3源替换",[19,120902,120903],{},"非Debian系发行版需要做。",[19,120905,120906],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120908,120909],{},"使用dnf的系统也可能不用做。",[39,120911,120913],{"className":118520,"code":120912,"language":118522,"meta":44,"style":44},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[46,120914,120915,120920,120927,120932,120937],{"__ignoreMap":44},[49,120916,120917],{"class":51,"line":52},[49,120918,120919],{"class":55},"# 检查是否已安装 pip\n",[49,120921,120922,120925],{"class":51,"line":59},[49,120923,120924],{"class":62},"pip3",[49,120926,27542],{"class":73},[49,120928,120929],{"class":51,"line":70},[49,120930,120931],{"class":55},"# 如果未安装，先安装 pip3（见下方）\n",[49,120933,120934],{"class":51,"line":86},[49,120935,120936],{"class":55},"# 配置 pip 使用清华源\n",[49,120938,120939,120941,120944,120947,120950],{"class":51,"line":98},[49,120940,120924],{"class":62},[49,120942,120943],{"class":1505}," config",[49,120945,120946],{"class":1505}," set",[49,120948,120949],{"class":1505}," global.index-url",[49,120951,120952],{"class":1505}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120954,120955],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120957,120958],{},[174,120959],{"alt":44,"src":120960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[39,120962,120964],{"className":118520,"code":120963,"language":118522,"meta":44,"style":44},"#安装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",[46,120965,120966,120971,120979,120990,120994,120999,121018,121022,121027,121039,121043,121048],{"__ignoreMap":44},[49,120967,120968],{"class":51,"line":52},[49,120969,120970],{"class":55},"#安装pip3\n",[49,120972,120973,120975,120977],{"class":51,"line":59},[49,120974,25825],{"class":62},[49,120976,118541],{"class":1505},[49,120978,27491],{"class":1505},[49,120980,120981,120983,120985,120987],{"class":51,"line":70},[49,120982,25825],{"class":62},[49,120984,27325],{"class":1505},[49,120986,25082],{"class":1505},[49,120988,120989],{"class":1505}," python3-pip\n",[49,120991,120992],{"class":51,"line":86},[49,120993,3654],{"emptyLinePlaceholder":1330},[49,120995,120996],{"class":51,"line":98},[49,120997,120998],{"class":55},"#更新pip3\n",[49,121000,121001,121003,121005,121007,121009,121011,121014,121016],{"class":51,"line":121},[49,121002,102103],{"class":62},[49,121004,102106],{"class":73},[49,121006,102129],{"class":1505},[49,121008,25082],{"class":1505},[49,121010,27679],{"class":73},[49,121012,121013],{"class":1505}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[49,121015,102134],{"class":73},[49,121017,102137],{"class":1505},[49,121019,121020],{"class":51,"line":134},[49,121021,3654],{"emptyLinePlaceholder":1330},[49,121023,121024],{"class":51,"line":1085},[49,121025,121026],{"class":55},"#设置pip源为清华源\n",[49,121028,121029,121031,121033,121035,121037],{"class":51,"line":2574},[49,121030,120924],{"class":62},[49,121032,120943],{"class":1505},[49,121034,120946],{"class":1505},[49,121036,120949],{"class":1505},[49,121038,120952],{"class":1505},[49,121040,121041],{"class":51,"line":2586},[49,121042,3654],{"emptyLinePlaceholder":1330},[49,121044,121045],{"class":51,"line":2867},[49,121046,121047],{"class":55},"#测试\n",[49,121049,121050,121052,121054,121056,121058,121060],{"class":51,"line":2872},[49,121051,102103],{"class":62},[49,121053,102106],{"class":73},[49,121055,102129],{"class":1505},[49,121057,25082],{"class":1505},[49,121059,102134],{"class":73},[49,121061,102137],{"class":1505},[19,121063,121064],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121066,121067],{},[174,121068],{"alt":44,"src":121069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121071,121073],{"id":121072},"_35-显卡驱动安装","3.5 显卡驱动安装",[183,121075,121077],{"id":121076},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[39,121079,121081],{"className":119747,"code":121080,"language":119749,"meta":44,"style":44},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[46,121082,121083,121088,121103,121108],{"__ignoreMap":44},[49,121084,121085],{"class":51,"line":52},[49,121086,121087],{"class":55},"# 如果是使用apt安装的驱动\n",[49,121089,121090,121092,121094,121096,121098,121101],{"class":51,"line":59},[49,121091,25825],{"class":62},[49,121093,27325],{"class":1505},[49,121095,27328],{"class":1505},[49,121097,120382],{"class":73},[49,121099,121100],{"class":1505}," nvidia",[49,121102,120472],{"class":73},[49,121104,121105],{"class":51,"line":70},[49,121106,121107],{"class":55},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[49,121109,121110,121112],{"class":51,"line":86},[49,121111,25825],{"class":62},[49,121113,121114],{"class":1505}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[183,121116,121118],{"id":121117},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[525,121120,121122],{"id":121121},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24159,121124,121126],{"id":121125},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[39,121128,121130],{"className":119747,"code":121129,"language":119749,"meta":44,"style":44},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[46,121131,121132,121137,121148,121153,121163,121168],{"__ignoreMap":44},[49,121133,121134],{"class":51,"line":52},[49,121135,121136],{"class":55},"# 安装英伟达驱动\n",[49,121138,121139,121141,121143,121145],{"class":51,"line":59},[49,121140,25825],{"class":62},[49,121142,118541],{"class":1505},[49,121144,25082],{"class":1505},[49,121146,121147],{"class":1505}," nvidia-driver-版本号\n",[49,121149,121150],{"class":51,"line":70},[49,121151,121152],{"class":55},"# 重启 \n",[49,121154,121155,121157,121159,121161],{"class":51,"line":86},[49,121156,25825],{"class":62},[49,121158,120860],{"class":1505},[49,121160,120863],{"class":73},[49,121162,120866],{"class":1505},[49,121164,121165],{"class":51,"line":98},[49,121166,121167],{"class":55},"# 检查驱动是否安装成功\n",[49,121169,121170],{"class":51,"line":121},[49,121171,121172],{"class":62},"nvidia-smi\n",[24159,121174,121176],{"id":121175},"_35212-debian","3.5.2.1.2 Debian",[39,121178,121180],{"className":119747,"code":121179,"language":119749,"meta":44,"style":44},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[46,121181,121182,121186,121200,121204,121214,121218],{"__ignoreMap":44},[49,121183,121184],{"class":51,"line":52},[49,121185,121136],{"class":55},[49,121187,121188,121190,121192,121194,121197],{"class":51,"line":59},[49,121189,25825],{"class":62},[49,121191,118541],{"class":1505},[49,121193,25082],{"class":1505},[49,121195,121196],{"class":1505}," nvidia-driver",[49,121198,121199],{"class":1505}," nvidia-settings\n",[49,121201,121202],{"class":51,"line":70},[49,121203,121152],{"class":55},[49,121205,121206,121208,121210,121212],{"class":51,"line":86},[49,121207,25825],{"class":62},[49,121209,120860],{"class":1505},[49,121211,120863],{"class":73},[49,121213,120866],{"class":1505},[49,121215,121216],{"class":51,"line":98},[49,121217,121167],{"class":55},[49,121219,121220],{"class":51,"line":121},[49,121221,121172],{"class":62},[525,121223,121225],{"id":121224},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121227,121228,121229,121232],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[485,121230,121231],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121234,121235,121236],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24802,121237,121238],{},[485,121239,121240],{},"（也可以不禁用桌面环境，直接进行下一步。）",[39,121242,121244],{"className":119747,"code":121243,"language":119749,"meta":44,"style":44},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[46,121245,121246,121251,121261,121266,121279,121284],{"__ignoreMap":44},[49,121247,121248],{"class":51,"line":52},[49,121249,121250],{"class":55},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[49,121252,121253,121255,121258],{"class":51,"line":59},[49,121254,25825],{"class":62},[49,121256,121257],{"class":1505}," telinit",[49,121259,121260],{"class":73}," 3\n",[49,121262,121263],{"class":51,"line":70},[49,121264,121265],{"class":55},"# ubuntu 使用下方命令\n",[49,121267,121268,121270,121273,121276],{"class":51,"line":86},[49,121269,25825],{"class":62},[49,121271,121272],{"class":1505}," service",[49,121274,121275],{"class":1505}," lightdm",[49,121277,121278],{"class":1505}," stop\n",[49,121280,121281],{"class":51,"line":98},[49,121282,121283],{"class":55},"# Fedora 使用下方命令\n",[49,121285,121286,121288,121290,121293],{"class":51,"line":121},[49,121287,25825],{"class":62},[49,121289,27762],{"class":1505},[49,121291,121292],{"class":1505}," isolate",[49,121294,121295],{"class":1505}," multi-user.target\n",[19,121297,121298],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[39,121300,121302],{"className":119747,"code":121301,"language":119749,"meta":44,"style":44},"# 编译环境+准备工作\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",[46,121303,121304,121309,121320,121325,121332,121337,121349,121354,121361,121366],{"__ignoreMap":44},[49,121305,121306],{"class":51,"line":52},[49,121307,121308],{"class":55},"# 编译环境+准备工作\n",[49,121310,121311,121313,121315,121317],{"class":51,"line":59},[49,121312,25825],{"class":62},[49,121314,118541],{"class":1505},[49,121316,25082],{"class":1505},[49,121318,121319],{"class":1505}," build-essential\n",[49,121321,121322],{"class":51,"line":70},[49,121323,121324],{"class":55},"# 进入到.run目录中\n",[49,121326,121327,121329],{"class":51,"line":86},[49,121328,102500],{"class":73},[49,121330,121331],{"class":1505}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[49,121333,121334],{"class":51,"line":98},[49,121335,121336],{"class":55},"# 给驱动文件增加可执行权限：\n",[49,121338,121339,121341,121343,121346],{"class":51,"line":121},[49,121340,25825],{"class":62},[49,121342,25828],{"class":1505},[49,121344,121345],{"class":1505}," a+x",[49,121347,121348],{"class":1505}," NVIDIA-Linux-x86_64-550.107.02.run\n",[49,121350,121351],{"class":51,"line":134},[49,121352,121353],{"class":55},"# 然后执行安装：\n",[49,121355,121356,121358],{"class":51,"line":1085},[49,121357,25825],{"class":62},[49,121359,121360],{"class":1505}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[49,121362,121363],{"class":51,"line":2574},[49,121364,121365],{"class":55},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[49,121367,121368,121370,121373],{"class":51,"line":2586},[49,121369,25825],{"class":62},[49,121371,121372],{"class":1505}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[49,121374,121375],{"class":73},"  --no-opengl-files\n",[19,121377,121378],{},"安装完毕重启即可",[39,121380,121382],{"className":119747,"code":121381,"language":119749,"meta":44,"style":44},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[46,121383,121384,121388,121394,121398],{"__ignoreMap":44},[49,121385,121386],{"class":51,"line":52},[49,121387,121152],{"class":55},[49,121389,121390,121392],{"class":51,"line":59},[49,121391,25825],{"class":62},[49,121393,27896],{"class":1505},[49,121395,121396],{"class":51,"line":70},[49,121397,121167],{"class":55},[49,121399,121400],{"class":51,"line":86},[49,121401,121172],{"class":62},[183,121403,121405],{"id":121404},"_353-安装cuda","3.5.3 安装CUDA",[19,121407,121408],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121410,121411],{},[174,121412],{"alt":44,"src":121413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[591,121415,121416],{},[26,121417,121418],{},"先查看显卡驱动所支持的最高CUDA版本",[39,121420,121421],{"className":119747,"code":121172,"language":119749,"meta":44,"style":44},[46,121422,121423],{"__ignoreMap":44},[49,121424,121425],{"class":51,"line":52},[49,121426,121172],{"class":62},[19,121428,121429],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121431,121432],{},[174,121433],{"alt":44,"src":121434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[591,121436,121437],{"start":59},[26,121438,121439],{},"下载CUDA并安装CUDA",[19,121441,119526,121442],{},[1630,121443,119529],{"href":119529,"rel":121444},[25113],[19,121446,121447],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121449,121450],{},[174,121451],{"alt":44,"src":121452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121454,121455,121456,121461],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[1630,121457,121460],{"href":121458,"rel":121459},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25113],"Vinci机器人队单片机教程","）",[19,121463,121464],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121466,121467],{},[174,121468],{"alt":44,"src":121469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121471,121472],{},"将最下方框框里的命令敲入终端",[39,121474,121476],{"className":119747,"code":121475,"language":119749,"meta":44,"style":44},"# 在当前文件夹下创建一个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",[46,121477,121478,121483,121492,121497,121504,121509,121517,121522,121533,121538],{"__ignoreMap":44},[49,121479,121480],{"class":51,"line":52},[49,121481,121482],{"class":55},"# 在当前文件夹下创建一个ttt的子文件夹\n",[49,121484,121485,121487,121489],{"class":51,"line":59},[49,121486,102490],{"class":62},[49,121488,30464],{"class":73},[49,121490,121491],{"class":1505}," .\u002Fttt\n",[49,121493,121494],{"class":51,"line":70},[49,121495,121496],{"class":55},"# 进入ttt文件夹\n",[49,121498,121499,121501],{"class":51,"line":86},[49,121500,102500],{"class":73},[49,121502,121503],{"class":1505}," ttt\n",[49,121505,121506],{"class":51,"line":98},[49,121507,121508],{"class":55},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[49,121510,121511,121514],{"class":51,"line":121},[49,121512,121513],{"class":62},"wget",[49,121515,121516],{"class":1505}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[49,121518,121519],{"class":51,"line":134},[49,121520,121521],{"class":55},"# 给予权限\n",[49,121523,121524,121526,121528,121530],{"class":51,"line":1085},[49,121525,25825],{"class":62},[49,121527,25828],{"class":1505},[49,121529,121345],{"class":1505},[49,121531,121532],{"class":1505}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[49,121534,121535],{"class":51,"line":2574},[49,121536,121537],{"class":55},"# 运行脚本\n",[49,121539,121540,121542],{"class":51,"line":2586},[49,121541,25825],{"class":62},[49,121543,121532],{"class":1505},[19,121545,121546],{},[174,121547],{"alt":44,"src":121548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121550,121551],{},"正在安装中：",[19,121553,121554],{},[174,121555],{"alt":44,"src":121556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121558,121559],{},"输入accept接受即可",[19,121561,121562],{},[174,121563],{"alt":44,"src":121564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121566,121567],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121569,121570],{},[174,121571],{"alt":44,"src":121572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121574,121575],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121577,121578],{},[174,121579],{"alt":44,"src":121580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[591,121582,121583],{"start":70},[26,121584,121585],{},"配置环境",[19,121587,121588],{},"根据上方确认一下路径，比如我上面红色框起来的为",[39,121590,121592],{"className":119747,"code":121591,"language":119749,"meta":44,"style":44},"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",[46,121593,121594,121610,121625],{"__ignoreMap":44},[49,121595,121596,121599,121602,121605,121608],{"class":51,"line":52},[49,121597,121598],{"class":62},"Please",[49,121600,121601],{"class":1505}," make",[49,121603,121604],{"class":1505}," sure",[49,121606,121607],{"class":1505}," that",[49,121609,3928],{"class":66},[49,121611,121612,121614,121617,121620,121623],{"class":51,"line":59},[49,121613,53513],{"class":62},[49,121615,121616],{"class":1505},"   PATH",[49,121618,121619],{"class":1505}," includes",[49,121621,121622],{"class":1505}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[49,121624,3928],{"class":66},[49,121626,121627,121629,121632,121634,121637,121640,121642,121645,121648,121651,121654,121656,121659,121661],{"class":51,"line":70},[49,121628,53513],{"class":62},[49,121630,121631],{"class":1505},"   LD_LIBRARY_PATH",[49,121633,121619],{"class":1505},[49,121635,121636],{"class":1505}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[49,121638,121639],{"class":1505}," or,",[49,121641,6461],{"class":1505},[49,121643,121644],{"class":1505}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[49,121646,121647],{"class":1505}," to",[49,121649,121650],{"class":1505}," \u002Fetc\u002Fld.so.conf",[49,121652,121653],{"class":1505}," and",[49,121655,28479],{"class":1505},[49,121657,121658],{"class":1505}," ldconfig",[49,121660,65839],{"class":1505},[49,121662,121663],{"class":1505}," root\n",[19,121665,121666],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[39,121668,121670],{"className":119747,"code":121669,"language":119749,"meta":44,"style":44},"which nvcc\n",[46,121671,121672],{"__ignoreMap":44},[49,121673,121674,121677],{"class":51,"line":52},[49,121675,121676],{"class":73},"which",[49,121678,121679],{"class":1505}," nvcc\n",[19,121681,121682],{},[174,121683],{"alt":44,"src":121684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,121686,121687],{},"所以我进行以下操作：",[39,121689,121691],{"className":119747,"code":121690,"language":119749,"meta":44,"style":44},"sudo vim ~\u002F.bashrc\n",[46,121692,121693],{"__ignoreMap":44},[49,121694,121695,121697,121699],{"class":51,"line":52},[49,121696,25825],{"class":62},[49,121698,119807],{"class":1505},[49,121700,121701],{"class":1505}," ~\u002F.bashrc\n",[19,121703,121704],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[39,121706,121708],{"className":119747,"code":121707,"language":119749,"meta":44,"style":44},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[46,121709,121710,121722],{"__ignoreMap":44},[49,121711,121712,121714,121717,121719],{"class":51,"line":52},[49,121713,26291],{"class":109},[49,121715,121716],{"class":66}," PATH",[49,121718,1448],{"class":109},[49,121720,121721],{"class":66},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[49,121723,121724,121726,121729,121731],{"class":51,"line":59},[49,121725,26291],{"class":109},[49,121727,121728],{"class":66}," LD_LIBRARY_PATH",[49,121730,1448],{"class":109},[49,121732,121733],{"class":66},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121735,121736],{},[174,121737],{"alt":44,"src":121738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[39,121740,121742],{"className":119747,"code":121741,"language":119749,"meta":44,"style":44},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[46,121743,121744,121749,121755,121760],{"__ignoreMap":44},[49,121745,121746],{"class":51,"line":52},[49,121747,121748],{"class":55},"# 刷新当前终端的环境变量\n",[49,121750,121751,121753],{"class":51,"line":59},[49,121752,102117],{"class":73},[49,121754,121701],{"class":1505},[49,121756,121757],{"class":51,"line":70},[49,121758,121759],{"class":55},"# 验证CUDA是否安装成功\n",[49,121761,121762,121765],{"class":51,"line":86},[49,121763,121764],{"class":62},"nvcc",[49,121766,121767],{"class":73}," -V\n",[19,121769,121770],{},"出现下图这种则安装成功。",[19,121772,121773],{},[174,121774],{"alt":44,"src":121775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[183,121777,121779],{"id":121778},"_354-安装cudnn","3.5.4 安装cuDNN",[591,121781,121782],{},[26,121783,121784],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121786,121787,121788,121793],{},"前往 NVIDIA cuDNN 下载页面：",[1630,121789,121792],{"href":121790,"rel":121791},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25113],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121795,121796],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121798,121799],{},[174,121800],{"alt":44,"src":121801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121803,121804],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121806,121807],{},[174,121808],{"alt":44,"src":121809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121811,121812],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121814,121815],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121817,121818],{},[485,121819,121820],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121822,121823],{},"下载好的：",[19,121825,121826],{},[174,121827],{"alt":44,"src":121828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[591,121830,121831],{"start":59},[26,121832,121833],{},"安装cuDNN",[19,121835,121836],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121838,121839],{},[174,121840],{"alt":44,"src":121841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121843,121844],{},"解压文件，并复制到对应位置完成安装",[39,121846,121848],{"className":119747,"code":121847,"language":119749,"meta":44,"style":44},"# 解压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",[46,121849,121850,121855,121866,121871,121878,121883,121899,121913,121918,121929,121938,121942,121958],{"__ignoreMap":44},[49,121851,121852],{"class":51,"line":52},[49,121853,121854],{"class":55},"# 解压cuDNN文件\n",[49,121856,121857,121860,121863],{"class":51,"line":59},[49,121858,121859],{"class":62},"tar",[49,121861,121862],{"class":73}," -xvf",[49,121864,121865],{"class":1505}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[49,121867,121868],{"class":51,"line":70},[49,121869,121870],{"class":55},"# cd进文件夹\n",[49,121872,121873,121875],{"class":51,"line":86},[49,121874,102500],{"class":73},[49,121876,121877],{"class":1505}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[49,121879,121880],{"class":51,"line":98},[49,121881,121882],{"class":55},"# 复制cuDNN文件到CUDA目录\n",[49,121884,121885,121887,121889,121892,121894,121897],{"class":51,"line":121},[49,121886,25825],{"class":62},[49,121888,29109],{"class":1505},[49,121890,121891],{"class":1505}," include\u002Fcudnn",[49,121893,1846],{"class":73},[49,121895,121896],{"class":1505},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[49,121898,3928],{"class":66},[49,121900,121901,121903,121905,121908,121910],{"class":51,"line":134},[49,121902,25825],{"class":62},[49,121904,29109],{"class":1505},[49,121906,121907],{"class":1505}," lib\u002Flibcudnn",[49,121909,1846],{"class":73},[49,121911,121912],{"class":1505},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[49,121914,121915],{"class":51,"line":1085},[49,121916,121917],{"class":55},"# 对比一下有没有缺文件\n",[49,121919,121920,121922,121925,121927],{"class":51,"line":2574},[49,121921,28010],{"class":62},[49,121923,121924],{"class":1505}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[49,121926,1846],{"class":73},[49,121928,3928],{"class":66},[49,121930,121931,121933,121936],{"class":51,"line":2586},[49,121932,28010],{"class":62},[49,121934,121935],{"class":1505}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[49,121937,120472],{"class":73},[49,121939,121940],{"class":51,"line":2867},[49,121941,121521],{"class":55},[49,121943,121944,121946,121948,121951,121953,121955],{"class":51,"line":2872},[49,121945,25825],{"class":62},[49,121947,25828],{"class":1505},[49,121949,121950],{"class":1505}," a+r",[49,121952,121924],{"class":1505},[49,121954,1846],{"class":73},[49,121956,121957],{"class":66},"   \n",[49,121959,121960,121962,121964,121966,121968],{"class":51,"line":2878},[49,121961,25825],{"class":62},[49,121963,25828],{"class":1505},[49,121965,121950],{"class":1505},[49,121967,121935],{"class":1505},[49,121969,120472],{"class":73},[591,121971,121972],{"start":70},[26,121973,121974],{},"检查是否安装成功",[39,121976,121978],{"className":119747,"code":121977,"language":119749,"meta":44,"style":44},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[46,121979,121980,121985],{"__ignoreMap":44},[49,121981,121982],{"class":51,"line":52},[49,121983,121984],{"class":55},"# 检查cuDNN版本命令\n",[49,121986,121987,121990,121993,121995,121997,122000,122003],{"class":51,"line":59},[49,121988,121989],{"class":62},"cat",[49,121991,121992],{"class":1505}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[49,121994,26358],{"class":109},[49,121996,31484],{"class":62},[49,121998,121999],{"class":1505}," CUDNN_MAJOR",[49,122001,122002],{"class":73}," -A",[49,122004,48971],{"class":73},[19,122006,122007],{},"出现下图这样的就是安装成功了",[19,122009,122010],{},[174,122011],{"alt":44,"src":122012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[591,122014,122015],{"start":86},[26,122016,122017],{},"软链接(一般不需要)",[39,122019,122021],{"className":119747,"code":122020,"language":119749,"meta":44,"style":44},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[46,122022,122023,122028],{"__ignoreMap":44},[49,122024,122025],{"class":51,"line":52},[49,122026,122027],{"class":55},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[49,122029,122030,122032],{"class":51,"line":59},[49,122031,25825],{"class":62},[49,122033,122034],{"class":1505}," ldconfig\n",[19,122036,122037],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[39,122039,122044],{"className":122040,"code":122041,"language":122042,"meta":122043,"style":44},"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",[46,122045,122046,122051,122056,122061,122066,122071,122076],{"__ignoreMap":44},[49,122047,122048],{"class":51,"line":52},[49,122049,122050],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[49,122052,122053],{"class":51,"line":59},[49,122054,122055],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[49,122057,122058],{"class":51,"line":70},[49,122059,122060],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[49,122062,122063],{"class":51,"line":86},[49,122064,122065],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[49,122067,122068],{"class":51,"line":98},[49,122069,122070],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[49,122072,122073],{"class":51,"line":121},[49,122074,122075],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[49,122077,122078],{"class":51,"line":134},[49,122079,122080],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122082,122083],{},"运行下方的命令",[39,122085,122087],{"className":119747,"code":122086,"language":119749,"meta":44,"style":44},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[46,122088,122089,122094,122101,122106],{"__ignoreMap":44},[49,122090,122091],{"class":51,"line":52},[49,122092,122093],{"class":55},"# cd进入CUDA路径\n",[49,122095,122096,122098],{"class":51,"line":59},[49,122097,102500],{"class":73},[49,122099,122100],{"class":1505}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[49,122102,122103],{"class":51,"line":70},[49,122104,122105],{"class":55}," # 查看本路径下的需要软链接的文件名\n",[49,122107,122108],{"class":51,"line":86},[49,122109,122110],{"class":62}," ls\n",[19,122112,122113],{},[174,122114],{"alt":44,"src":122115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122117,122118,122119,19660,122122,19660,122125,122128],{},"如上图，我需要将",[46,122120,122121],{},"libcudnn_xxx_xxxxx.so.8.9.7",[46,122123,122124],{},"libcudnn_xxx_xxxxx.so.8",[46,122126,122127],{},"libcudnn_xxx_xxxxx.so","软链接",[39,122130,122132],{"className":119747,"code":122131,"language":119749,"meta":44,"style":44},"# 创建符号链接。对于每个 .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",[46,122133,122134,122139,122155,122169,122183,122197,122211,122225,122239,122244,122250,122255],{"__ignoreMap":44},[49,122135,122136],{"class":51,"line":52},[49,122137,122138],{"class":55},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[49,122140,122141,122143,122146,122149,122152],{"class":51,"line":59},[49,122142,25825],{"class":62},[49,122144,122145],{"class":1505}," ln",[49,122147,122148],{"class":73}," -sf",[49,122150,122151],{"class":1505}," libcudnn_cnn_train.so.8.9.7",[49,122153,122154],{"class":1505}," libcudnn_cnn_train.so.8\n",[49,122156,122157,122159,122161,122163,122166],{"class":51,"line":70},[49,122158,25825],{"class":62},[49,122160,122145],{"class":1505},[49,122162,122148],{"class":73},[49,122164,122165],{"class":1505}," libcudnn_adv_infer.so.8.9.7",[49,122167,122168],{"class":1505}," libcudnn_adv_infer.so.8\n",[49,122170,122171,122173,122175,122177,122180],{"class":51,"line":86},[49,122172,25825],{"class":62},[49,122174,122145],{"class":1505},[49,122176,122148],{"class":73},[49,122178,122179],{"class":1505}," libcudnn_adv_train.so.8.9.7",[49,122181,122182],{"class":1505}," libcudnn_adv_train.so.8\n",[49,122184,122185,122187,122189,122191,122194],{"class":51,"line":98},[49,122186,25825],{"class":62},[49,122188,122145],{"class":1505},[49,122190,122148],{"class":73},[49,122192,122193],{"class":1505}," libcudnn_cnn_infer.so.8.9.7",[49,122195,122196],{"class":1505}," libcudnn_cnn_infer.so.8\n",[49,122198,122199,122201,122203,122205,122208],{"class":51,"line":121},[49,122200,25825],{"class":62},[49,122202,122145],{"class":1505},[49,122204,122148],{"class":73},[49,122206,122207],{"class":1505}," libcudnn.so.8.9.7",[49,122209,122210],{"class":1505}," libcudnn.so.8\n",[49,122212,122213,122215,122217,122219,122222],{"class":51,"line":134},[49,122214,25825],{"class":62},[49,122216,122145],{"class":1505},[49,122218,122148],{"class":73},[49,122220,122221],{"class":1505}," libcudnn_ops_infer.so.8.9.7",[49,122223,122224],{"class":1505}," libcudnn_ops_infer.so.8\n",[49,122226,122227,122229,122231,122233,122236],{"class":51,"line":1085},[49,122228,25825],{"class":62},[49,122230,122145],{"class":1505},[49,122232,122148],{"class":73},[49,122234,122235],{"class":1505}," libcudnn_ops_train.so.8.9.7",[49,122237,122238],{"class":1505}," libcudnn_ops_train.so.8\n",[49,122240,122241],{"class":51,"line":2574},[49,122242,122243],{"class":55},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[49,122245,122246,122248],{"class":51,"line":2586},[49,122247,25825],{"class":62},[49,122249,122034],{"class":1505},[49,122251,122252],{"class":51,"line":2867},[49,122253,122254],{"class":55},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[49,122256,122257,122259,122262,122265,122267,122270],{"class":51,"line":2872},[49,122258,28010],{"class":62},[49,122260,122261],{"class":73}," -l",[49,122263,122264],{"class":1505}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[49,122266,1846],{"class":73},[49,122268,122269],{"class":1505},".so",[49,122271,120472],{"class":73},[183,122273,122275],{"id":122274},"_355-常见问题","3.5.5 常见问题",[591,122277,122278],{},[26,122279,122280],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[39,122282,122284],{"className":119747,"code":122283,"language":119749,"meta":44,"style":44},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[46,122285,122286],{"__ignoreMap":44},[49,122287,122288,122290,122292],{"class":51,"line":52},[49,122289,25825],{"class":62},[49,122291,119807],{"class":1505},[49,122293,122294],{"class":1505}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122296,122297],{},"blacklist-nouveau.conf文件内容如下：",[39,122299,122301],{"className":119747,"code":122300,"language":119749,"meta":44,"style":44},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[46,122302,122303,122311,122318,122330,122340],{"__ignoreMap":44},[49,122304,122305,122308],{"class":51,"line":52},[49,122306,122307],{"class":62},"blacklist",[49,122309,122310],{"class":1505}," nouveau\n",[49,122312,122313,122315],{"class":51,"line":59},[49,122314,122307],{"class":62},[49,122316,122317],{"class":1505}," lbm-nouveau\n",[49,122319,122320,122322,122325,122328],{"class":51,"line":70},[49,122321,117154],{"class":62},[49,122323,122324],{"class":1505}," nouveau",[49,122326,122327],{"class":1505}," modeset=",[49,122329,4339],{"class":73},[49,122331,122332,122335,122337],{"class":51,"line":86},[49,122333,122334],{"class":73},"alias",[49,122336,122324],{"class":1505},[49,122338,122339],{"class":1505}," off\n",[49,122341,122342,122344,122347],{"class":51,"line":98},[49,122343,122334],{"class":73},[49,122345,122346],{"class":1505}," lbm-nouveau",[49,122348,122339],{"class":1505},[19,122350,122351],{},"接着运行下方命令",[39,122353,122355],{"className":119747,"code":122354,"language":119749,"meta":44,"style":44},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[46,122356,122357,122367,122372],{"__ignoreMap":44},[49,122358,122359,122361,122364],{"class":51,"line":52},[49,122360,25825],{"class":62},[49,122362,122363],{"class":1505}," update-initramfs",[49,122365,122366],{"class":73}," -u\n",[49,122368,122369],{"class":51,"line":59},[49,122370,122371],{"class":62},"或者\n",[49,122373,122374,122376,122379],{"class":51,"line":70},[49,122375,25825],{"class":62},[49,122377,122378],{"class":1505}," dracut",[49,122380,122381],{"class":73}," --force\n",[19,122383,122384],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[39,122386,122388],{"className":119747,"code":122387,"language":119749,"meta":44,"style":44},"lsmod | grep nouveau\n",[46,122389,122390],{"__ignoreMap":44},[49,122391,122392,122395,122397,122399],{"class":51,"line":52},[49,122393,122394],{"class":62},"lsmod",[49,122396,26358],{"class":109},[49,122398,31484],{"class":62},[49,122400,122310],{"class":1505},[591,122402,122403],{"start":59},[26,122404,122405],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[39,122407,122409],{"className":119747,"code":122408,"language":119749,"meta":44,"style":44},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[46,122410,122411],{"__ignoreMap":44},[49,122412,122413,122415,122417],{"class":51,"line":52},[49,122414,25825],{"class":62},[49,122416,119807],{"class":1505},[49,122418,122419],{"class":1505}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122421,122422],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[39,122424,122426],{"className":119747,"code":122425,"language":119749,"meta":44,"style":44},"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",[46,122427,122428,122436,122444,122452,122459,122467,122477,122485],{"__ignoreMap":44},[49,122429,122430,122433],{"class":51,"line":52},[49,122431,122432],{"class":62},"Section",[49,122434,122435],{"class":1505}," \"OutputClass\"\n",[49,122437,122438,122441],{"class":51,"line":59},[49,122439,122440],{"class":62},"   Identifier",[49,122442,122443],{"class":1505}," \"nvidia\"\n",[49,122445,122446,122449],{"class":51,"line":70},[49,122447,122448],{"class":62},"   MatchDriver",[49,122450,122451],{"class":1505}," \"nvidia-drm\"\n",[49,122453,122454,122457],{"class":51,"line":86},[49,122455,122456],{"class":62},"   Driver",[49,122458,122443],{"class":1505},[49,122460,122461,122464],{"class":51,"line":98},[49,122462,122463],{"class":62},"   Option",[49,122465,122466],{"class":1505}," \"AllowEmptyInitialConfiguration\"\n",[49,122468,122469,122471,122474],{"class":51,"line":121},[49,122470,122463],{"class":62},[49,122472,122473],{"class":1505}," \"PrimaryGPU\"",[49,122475,122476],{"class":1505}," \"yes\"\n",[49,122478,122479,122482],{"class":51,"line":134},[49,122480,122481],{"class":62},"   ModulePath",[49,122483,122484],{"class":1505}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[49,122486,122487],{"class":51,"line":1085},[49,122488,122489],{"class":62},"EndSection\n",[591,122491,122492],{"start":70},[26,122493,122494],{},"安装N卡驱动提示错误",[39,122496,122498],{"className":122040,"code":122497,"language":122042,"meta":122043,"style":44},"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",[46,122499,122500],{"__ignoreMap":44},[49,122501,122502],{"class":51,"line":52},[49,122503,122497],{},[591,122505,122506],{},[26,122507,122508],{},"检查当前运行的内核版本：",[19,122510,122511],{},"运行以下命令以查看你当前正在使用的内核版本：",[39,122513,122515],{"className":118520,"code":122514,"language":118522,"meta":44,"style":44},"uname -r\n",[46,122516,122517],{"__ignoreMap":44},[49,122518,122519,122521],{"class":51,"line":52},[49,122520,71439],{"class":62},[49,122522,122523],{"class":73}," -r\n",[591,122525,122526],{"start":59},[26,122527,122528],{},"安装内核开发文件：",[19,122530,122531,122532,122535],{},"确保你已经安装了与当前内核版本相匹配的 ",[46,122533,122534],{},"kernel-devel"," 包。运行以下命令来安装：",[39,122537,122539],{"className":118520,"code":122538,"language":118522,"meta":44,"style":44},"sudo dnf install kernel-devel-$(uname -r)\n",[46,122540,122541],{"__ignoreMap":44},[49,122542,122543,122545,122547,122549,122552,122554,122556,122558],{"class":51,"line":52},[49,122544,25825],{"class":62},[49,122546,27564],{"class":1505},[49,122548,25082],{"class":1505},[49,122550,122551],{"class":1505}," kernel-devel-",[49,122553,26348],{"class":66},[49,122555,71439],{"class":62},[49,122557,120863],{"class":73},[49,122559,1409],{"class":66},[19,122561,122562],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[591,122564,122565],{"start":70},[26,122566,122567],{},"安装内核源代码（如果需要）：",[19,122569,122570],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[39,122572,122574],{"className":118520,"code":122573,"language":118522,"meta":44,"style":44},"sudo dnf install kernel-headers kernel-source\n",[46,122575,122576],{"__ignoreMap":44},[49,122577,122578,122580,122582,122584,122587],{"class":51,"line":52},[49,122579,25825],{"class":62},[49,122581,27564],{"class":1505},[49,122583,25082],{"class":1505},[49,122585,122586],{"class":1505}," kernel-headers",[49,122588,122589],{"class":1505}," kernel-source\n",[591,122591,122592],{"start":86},[26,122593,122594],{},"检查安装：",[19,122596,122597,122598,122601],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[46,122599,122600],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[39,122603,122605],{"className":118520,"code":122604,"language":118522,"meta":44,"style":44},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[46,122606,122607],{"__ignoreMap":44},[49,122608,122609,122611],{"class":51,"line":52},[49,122610,28010],{"class":62},[49,122612,122613],{"class":1505}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122615,122616,122617,122620],{},"如果仍然遇到问题，可以通过 ",[46,122618,122619],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1305,122622,122623],{},"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":44,"searchDepth":59,"depth":59,"links":122625},[122626,122630,122640,122644,122645],{"id":119723,"depth":59,"text":119724,"children":122627},[122628,122629],{"id":119733,"depth":70,"text":119734},{"id":119743,"depth":70,"text":119744},{"id":119943,"depth":59,"text":119944,"children":122631},[122632,122633,122634,122635,122636,122637,122638,122639],{"id":119947,"depth":70,"text":119948},{"id":120017,"depth":70,"text":120018},{"id":120106,"depth":70,"text":120107},{"id":120351,"depth":70,"text":120352},{"id":120421,"depth":70,"text":120422},{"id":120488,"depth":70,"text":120489},{"id":120523,"depth":70,"text":120524},{"id":120578,"depth":70,"text":120579},{"id":120629,"depth":59,"text":120630,"children":122641},[122642,122643],{"id":120633,"depth":70,"text":120634},{"id":120713,"depth":70,"text":120714},{"id":120899,"depth":59,"text":120900},{"id":121072,"depth":59,"text":121073,"children":122646},[122647,122648,122649,122650,122651],{"id":121076,"depth":70,"text":121077},{"id":121117,"depth":70,"text":121118},{"id":121404,"depth":70,"text":121405},{"id":121778,"depth":70,"text":121779},{"id":122274,"depth":70,"text":122275},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119715,"description":1327},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122658,"title":122659,"body":122660,"description":1327,"extension":1328,"meta":123000,"navigation":1330,"path":123001,"seo":123002,"stem":123003,"__hash__":123004},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122661,"toc":122998},[122662,122665,122670,122673,122919,122924,122927,122963,122966,122995],[10,122663,122659],{"id":122664},"_4-命令教程长期积累",[591,122666,122667],{},[26,122668,122669],{},"大多数命令",[19,122671,122672],{},"常用 Linux 命令速查：",[39,122674,122676],{"className":118520,"code":122675,"language":118522,"meta":44,"style":44},"# 文件与目录\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",[46,122677,122678,122683,122690,122697,122705,122712,122719,122727,122735,122742,122749,122757,122761,122766,122773,122781,122788,122792,122797,122804,122812,122820,122828,122836,122840,122845,122853,122860,122867,122875,122883,122887,122892,122901,122910],{"__ignoreMap":44},[49,122679,122680],{"class":51,"line":52},[49,122681,122682],{"class":55},"# 文件与目录\n",[49,122684,122685,122687],{"class":51,"line":59},[49,122686,28010],{"class":62},[49,122688,122689],{"class":55},"        # 列出目录内容\n",[49,122691,122692,122694],{"class":51,"line":70},[49,122693,102500],{"class":73},[49,122695,122696],{"class":55},"        # 切换目录\n",[49,122698,122699,122702],{"class":51,"line":86},[49,122700,122701],{"class":73},"pwd",[49,122703,122704],{"class":55},"       # 显示当前路径\n",[49,122706,122707,122709],{"class":51,"line":98},[49,122708,102490],{"class":62},[49,122710,122711],{"class":55},"     # 创建目录\n",[49,122713,122714,122716],{"class":51,"line":121},[49,122715,26571],{"class":62},[49,122717,122718],{"class":55},"        # 删除文件或目录\n",[49,122720,122721,122724],{"class":51,"line":134},[49,122722,122723],{"class":62},"cp",[49,122725,122726],{"class":55},"        # 复制文件或目录\n",[49,122728,122729,122732],{"class":51,"line":1085},[49,122730,122731],{"class":62},"mv",[49,122733,122734],{"class":55},"        # 移动\u002F重命名文件或目录\n",[49,122736,122737,122739],{"class":51,"line":2574},[49,122738,102507],{"class":62},[49,122740,122741],{"class":55},"     # 创建空文件\n",[49,122743,122744,122746],{"class":51,"line":2586},[49,122745,121989],{"class":62},[49,122747,122748],{"class":55},"       # 查看文件内容\n",[49,122750,122751,122754],{"class":51,"line":2867},[49,122752,122753],{"class":62},"head\u002Ftail",[49,122755,122756],{"class":55}," # 查看文件头部\u002F尾部\n",[49,122758,122759],{"class":51,"line":2872},[49,122760,3654],{"emptyLinePlaceholder":1330},[49,122762,122763],{"class":51,"line":2878},[49,122764,122765],{"class":55},"# 权限管理\n",[49,122767,122768,122770],{"class":51,"line":2883},[49,122769,25860],{"class":62},[49,122771,122772],{"class":55},"     # 修改文件权限\n",[49,122774,122775,122778],{"class":51,"line":2897},[49,122776,122777],{"class":62},"chown",[49,122779,122780],{"class":55},"     # 修改文件所有者\n",[49,122782,122783,122785],{"class":51,"line":2902},[49,122784,25825],{"class":62},[49,122786,122787],{"class":55},"      # 以管理员身份执行\n",[49,122789,122790],{"class":51,"line":2908},[49,122791,3654],{"emptyLinePlaceholder":1330},[49,122793,122794],{"class":51,"line":2929},[49,122795,122796],{"class":55},"# 系统信息\n",[49,122798,122799,122801],{"class":51,"line":2934},[49,122800,71439],{"class":62},[49,122802,122803],{"class":55},"     # 系统信息\n",[49,122805,122806,122809],{"class":51,"line":2948},[49,122807,122808],{"class":62},"df",[49,122810,122811],{"class":55},"        # 磁盘使用情况\n",[49,122813,122814,122817],{"class":51,"line":2953},[49,122815,122816],{"class":62},"free",[49,122818,122819],{"class":55},"      # 内存使用情况\n",[49,122821,122822,122825],{"class":51,"line":2982},[49,122823,122824],{"class":62},"top\u002Fhtop",[49,122826,122827],{"class":55},"  # 进程监控\n",[49,122829,122830,122833],{"class":51,"line":2987},[49,122831,122832],{"class":62},"ps",[49,122834,122835],{"class":55},"        # 查看进程\n",[49,122837,122838],{"class":51,"line":3004},[49,122839,3654],{"emptyLinePlaceholder":1330},[49,122841,122842],{"class":51,"line":3009},[49,122843,122844],{"class":55},"# 网络\n",[49,122846,122847,122850],{"class":51,"line":3014},[49,122848,122849],{"class":62},"ping",[49,122851,122852],{"class":55},"      # 测试网络连通性\n",[49,122854,122855,122857],{"class":51,"line":3019},[49,122856,28098],{"class":62},[49,122858,122859],{"class":55},"      # 发送 HTTP 请求\n",[49,122861,122862,122864],{"class":51,"line":3033},[49,122863,121513],{"class":62},[49,122865,122866],{"class":55},"      # 下载文件\n",[49,122868,122869,122872],{"class":51,"line":3038},[49,122870,122871],{"class":62},"ssh",[49,122873,122874],{"class":55},"       # 远程登录\n",[49,122876,122877,122880],{"class":51,"line":3831},[49,122878,122879],{"class":62},"scp",[49,122881,122882],{"class":55},"       # 远程文件传输\n",[49,122884,122885],{"class":51,"line":3845},[49,122886,3654],{"emptyLinePlaceholder":1330},[49,122888,122889],{"class":51,"line":3853},[49,122890,122891],{"class":55},"# 包管理（Debian\u002FUbuntu）\n",[49,122893,122894,122896,122898],{"class":51,"line":3858},[49,122895,118592],{"class":62},[49,122897,118571],{"class":1505},[49,122899,122900],{"class":55},"   # 更新软件源\n",[49,122902,122903,122905,122907],{"class":51,"line":3864},[49,122904,118592],{"class":62},[49,122906,25082],{"class":1505},[49,122908,122909],{"class":55},"  # 安装软件包\n",[49,122911,122912,122914,122916],{"class":51,"line":3870},[49,122913,118592],{"class":62},[49,122915,27328],{"class":1505},[49,122917,122918],{"class":55},"   # 卸载软件包\n",[591,122920,122921],{"start":59},[26,122922,122923],{},"KDE Dolphin 以root打开",[19,122925,122926],{},"kde5",[39,122928,122930],{"className":118520,"code":122929,"language":118522,"meta":44,"style":44},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[46,122931,122932],{"__ignoreMap":44},[49,122933,122934,122937,122940,122943,122945,122947,122950,122953,122955,122958,122960],{"class":51,"line":52},[49,122935,122936],{"class":62},"pkexec",[49,122938,122939],{"class":1505}," env",[49,122941,122942],{"class":1505}," DISPLAY=",[49,122944,29391],{"class":66},[49,122946,29449],{"class":1505},[49,122948,122949],{"class":66},"$XAUTHORITY ",[49,122951,122952],{"class":1505},"KDE_SESSION_VERSION=",[49,122954,1711],{"class":73},[49,122956,122957],{"class":1505}," KDE_FULL_SESSION=",[49,122959,2619],{"class":73},[49,122961,122962],{"class":1505}," dolphin\n",[19,122964,122965],{},"kde6",[39,122967,122969],{"className":118520,"code":122968,"language":118522,"meta":44,"style":44},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[46,122970,122971],{"__ignoreMap":44},[49,122972,122973,122975,122977,122979,122981,122983,122985,122987,122989,122991,122993],{"class":51,"line":52},[49,122974,122936],{"class":62},[49,122976,122939],{"class":1505},[49,122978,122942],{"class":1505},[49,122980,29391],{"class":66},[49,122982,29449],{"class":1505},[49,122984,122949],{"class":66},[49,122986,122952],{"class":1505},[49,122988,1736],{"class":73},[49,122990,122957],{"class":1505},[49,122992,2619],{"class":73},[49,122994,122962],{"class":1505},[1305,122996,122997],{},"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":44,"searchDepth":59,"depth":59,"links":122999},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122659,"description":1327},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123006,"title":123007,"body":123008,"description":1327,"extension":1328,"meta":123022,"navigation":1330,"path":123023,"seo":123024,"stem":123025,"__hash__":123026},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123009,"toc":123020},[123010,123013],[10,123011,123007],{"id":123012},"_5-各种环境配置",[19,123014,123015],{},[1630,123016,123019],{"href":123017,"rel":123018},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25113],"电控组环境搭建大全",{"title":44,"searchDepth":59,"depth":59,"links":123021},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123007,"description":1327},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123028,"title":123029,"body":123030,"description":1327,"extension":1328,"meta":123378,"navigation":1330,"path":123379,"seo":123380,"stem":123381,"__hash__":123382},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123031,"toc":123370},[123032,123035,123039,123043,123047,123052,123059,123063,123356,123360,123367],[10,123033,123029],{"id":123034},"_6-拓展功能",[14,123036,123038],{"id":123037},"_61-wine","6.1 Wine",[14,123040,123042],{"id":123041},"_62-android","6.2 Android",[183,123044,123046],{"id":123045},"_621-i卡a卡","6.2.1 I卡、A卡",[591,123048,123049],{},[26,123050,123051],{},"Wayland-Waydroid(体验超级好)",[19,123053,123054,123055],{},"Waydroid 官网与安装指南：",[1630,123056,123057],{"href":123057,"rel":123058},"https:\u002F\u002Fwaydro.id\u002F",[25113],[183,123060,123062],{"id":123061},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[591,123064,123065],{},[26,123066,123067,123068,123070,123071,123075,123077,123080,123085,123282],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54958,123069],{},"BlissOS 官网下载：",[1630,123072,123073],{"href":123073,"rel":123074},"https:\u002F\u002Fblissos.org\u002F",[25113],[54958,123076],{},[174,123078],{"alt":44,"src":123079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[591,123081,123082],{"start":70},[26,123083,123084],{},"比较推荐的配置",[39,123086,123088],{"className":118520,"code":123087,"language":118522,"meta":44,"style":44},"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",[46,123089,123090,123097,123107,123117,123127,123139,123149,123156,123166,123175,123184,123194,123204,123213,123223,123233,123245,123255,123264,123274],{"__ignoreMap":44},[49,123091,123092,123095],{"class":51,"line":52},[49,123093,123094],{"class":62},"qemu-system-x86_64",[49,123096,25927],{"class":73},[49,123098,123099,123102,123105],{"class":51,"line":59},[49,123100,123101],{"class":73},"        -M",[49,123103,123104],{"class":1505}," q35,vmport=off",[49,123106,25927],{"class":73},[49,123108,123109,123112,123115],{"class":51,"line":70},[49,123110,123111],{"class":73},"        -accel",[49,123113,123114],{"class":1505}," kvm",[49,123116,25927],{"class":73},[49,123118,123119,123122,123125],{"class":51,"line":86},[49,123120,123121],{"class":73},"        -cpu",[49,123123,123124],{"class":1505}," qemu64,+sse3,+sse4.2",[49,123126,25927],{"class":73},[49,123128,123129,123132,123135,123137],{"class":51,"line":98},[49,123130,123131],{"class":73},"        -smp",[49,123133,123134],{"class":1505}," 8,cores=",[49,123136,1685],{"class":73},[49,123138,25927],{"class":73},[49,123140,123141,123144,123147],{"class":51,"line":121},[49,123142,123143],{"class":73},"        -m",[49,123145,123146],{"class":1505}," 6G",[49,123148,25927],{"class":73},[49,123150,123151,123154],{"class":51,"line":134},[49,123152,123153],{"class":73},"        -usb",[49,123155,25927],{"class":73},[49,123157,123158,123161,123164],{"class":51,"line":1085},[49,123159,123160],{"class":73},"        -device",[49,123162,123163],{"class":1505}," virtio-tablet",[49,123165,25927],{"class":73},[49,123167,123168,123170,123173],{"class":51,"line":2574},[49,123169,123160],{"class":73},[49,123171,123172],{"class":1505}," virtio-keyboard",[49,123174,25927],{"class":73},[49,123176,123177,123179,123182],{"class":51,"line":2586},[49,123178,123160],{"class":73},[49,123180,123181],{"class":1505}," usb-tablet",[49,123183,25927],{"class":73},[49,123185,123186,123189,123192],{"class":51,"line":2867},[49,123187,123188],{"class":73},"        -bios",[49,123190,123191],{"class":1505}," OVMF-pure-efi64.fd",[49,123193,25927],{"class":73},[49,123195,123196,123199,123202],{"class":51,"line":2872},[49,123197,123198],{"class":73},"        -net",[49,123200,123201],{"class":1505}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[49,123203,25927],{"class":73},[49,123205,123206,123208,123211],{"class":51,"line":2878},[49,123207,123198],{"class":73},[49,123209,123210],{"class":1505}," nic,model=virtio",[49,123212,25927],{"class":73},[49,123214,123215,123218,123221],{"class":51,"line":2883},[49,123216,123217],{"class":73},"        -audio",[49,123219,123220],{"class":1505}," sdl,model=hda",[49,123222,25927],{"class":73},[49,123224,123225,123228,123231],{"class":51,"line":2897},[49,123226,123227],{"class":73},"        -display",[49,123229,123230],{"class":1505}," sdl,gl=on,show-cursor=on",[49,123232,25927],{"class":73},[49,123234,123235,123237,123240,123243],{"class":51,"line":2902},[49,123236,123160],{"class":73},[49,123238,123239],{"class":1505}," virtio-vga-gl,xres=1920,yres=",[49,123241,123242],{"class":73},"1080",[49,123244,25927],{"class":73},[49,123246,123247,123250,123253],{"class":51,"line":2908},[49,123248,123249],{"class":73},"        -drive",[49,123251,123252],{"class":1505}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[49,123254,25927],{"class":73},[49,123256,123257,123259,123262],{"class":51,"line":2929},[49,123258,123249],{"class":73},[49,123260,123261],{"class":1505}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[49,123263,25927],{"class":73},[49,123265,123266,123269,123272],{"class":51,"line":2934},[49,123267,123268],{"class":73},"        -monitor",[49,123270,123271],{"class":1505}," stdio",[49,123273,25927],{"class":73},[49,123275,123276,123279],{"class":51,"line":2948},[49,123277,123278],{"class":73},"        -serial",[49,123280,123281],{"class":1505}," none\n",[591,123283,123284],{"start":98},[26,123285,123286,123287],{},"常用操作：",[591,123288,123289,123292,123348],{},[26,123290,123291],{},"全屏：Ctrl+Alt+F",[26,123293,123294,123295,123300],{},"adb调试",[591,123296,123297],{},[26,123298,123299],{},"使Linux与Android用ADB连接。",[39,123301,123303],{"className":118520,"code":123302,"language":118522,"meta":44,"style":44},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[46,123304,123305,123310,123321,123326,123338,123343],{"__ignoreMap":44},[49,123306,123307],{"class":51,"line":52},[49,123308,123309],{"class":55},"# 连接安卓\n",[49,123311,123312,123315,123318],{"class":51,"line":59},[49,123313,123314],{"class":62},"adb",[49,123316,123317],{"class":1505}," connect",[49,123319,123320],{"class":73}," 127.0.0.1\n",[49,123322,123323],{"class":51,"line":70},[49,123324,123325],{"class":55},"# 打开shell\n",[49,123327,123328,123330,123332,123335],{"class":51,"line":86},[49,123329,123314],{"class":62},[49,123331,28132],{"class":73},[49,123333,123334],{"class":1505}," 127.0.0.1:5555",[49,123336,123337],{"class":1505}," shell\n",[49,123339,123340],{"class":51,"line":98},[49,123341,123342],{"class":55},"# 使用root权限\n",[49,123344,123345],{"class":51,"line":121},[49,123346,123347],{"class":62},"su\n",[26,123349,123350,123351],{},"中文输入法",[591,123352,123353],{},[26,123354,123355],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123357,123359],{"id":123358},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123361,123362,123363],{},"rEFInd 官网与文档：",[1630,123364,123365],{"href":123365,"rel":123366},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25113],[1305,123368,123369],{},"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":44,"searchDepth":59,"depth":59,"links":123371},[123372,123373,123377],{"id":123037,"depth":59,"text":123038},{"id":123041,"depth":59,"text":123042,"children":123374},[123375,123376],{"id":123045,"depth":70,"text":123046},{"id":123061,"depth":70,"text":123062},{"id":123358,"depth":59,"text":123359},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123029,"description":1327},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123384,"title":123385,"body":123386,"description":1327,"extension":1328,"meta":126685,"navigation":1330,"path":126686,"seo":126687,"stem":126688,"__hash__":126689},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123387,"toc":126659},[123388,123391,123395,123398,123405,123655,123658,123730,123733,123737,123741,123746,123749,123752,123755,123760,123763,123766,123769,123774,123777,123782,123785,123788,123793,123796,123801,123804,123808,123812,123815,123820,123823,123837,123840,123843,123852,123855,123864,123867,123870,123879,123882,123891,123894,123897,123906,123909,123912,123927,123930,123933,123942,123947,123950,123953,123962,123965,123974,123977,123986,123989,123998,124003,124006,124014,124019,124022,124031,124034,124042,124047,124050,124059,124062,124065,124069,124072,124077,124080,124085,124099,124104,124109,124120,124125,124131,124136,124151,124156,124159,124164,124169,124174,124182,124187,124194,124199,124210,124215,124218,124222,124225,124228,124233,124236,124255,124260,124263,124272,124277,124280,124302,124305,124335,124338,124343,124346,124360,124365,124384,124387,124390,124395,124407,124412,124417,124420,124425,124428,124443,124446,124451,124456,124460,124465,124505,124508,124512,124518,124524,124529,124532,124539,124544,124551,124554,124557,124564,124578,124581,124641,124644,124658,124670,124673,124676,124679,124743,124746,124749,124752,124772,124775,124780,124787,124791,124794,124798,124803,124808,124812,124815,124818,124860,124865,124868,124890,124905,124907,124912,124924,124984,124986,124988,125042,125044,125046,125052,125057,125060,125065,125069,125072,125134,125139,125142,125144,125148,125160,125242,125244,125246,125300,125306,125308,125312,125317,125319,125324,125328,125348,125383,125387,125390,125393,125396,125403,125406,125418,125421,125436,125439,125458,125506,125509,125526,125529,125543,125548,125551,125560,125575,125587,125625,125630,125639,125644,125649,125675,125684,125688,125692,125697,125700,125704,125708,125713,125716,125721,125724,125729,125732,125737,125740,125744,125749,125752,125757,125760,125764,125769,125772,125777,125780,125785,125788,125792,125797,125800,125805,125808,125813,125816,125820,125825,125828,125833,125836,125841,125844,125849,125852,125857,125860,125865,125868,125872,125877,125880,125885,125892,125896,125901,125904,125909,125912,125916,125921,125924,125927,125930,125933,125936,125940,125943,125953,125958,125963,125985,125990,125995,126002,126006,126011,126014,126017,126022,126025,126028,126031,126034,126037,126040,126043,126046,126049,126052,126055,126058,126063,126068,126073,126078,126083,126088,126093,126096,126100,126103,126107,126112,126117,126122,126127,126131,126137,126145,126150,126153,126158,126173,126176,126181,126215,126230,126233,126288,126314,126326,126329,126338,126341,126356,126361,126364,126370,126375,126378,126383,126386,126391,126396,126403,126406,126421,126424,126459,126464,126472,126510,126513,126516,126521,126524,126529,126540,126574,126579,126582,126591,126596,126602,126605,126610,126619,126624,126627,126630,126635,126643,126646,126651,126656],[10,123389,123385],{"id":123390},"_7-其他操作",[14,123392,123394],{"id":123393},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123396,123397],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123399,123400,123401,123404],{},"进入工控机的硬盘目录，进入",[46,123402,123403],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[39,123406,123410],{"className":123407,"code":123408,"language":123409,"meta":44,"style":44},"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",[46,123411,123412,123420,123431,123438,123445,123457,123464,123476,123487,123498,123505,123512,123519,123531,123543,123550,123562,123574,123581,123593,123605,123617,123628,123635,123646],{"__ignoreMap":44},[49,123413,123414,123417],{"class":51,"line":52},[49,123415,123416],{"class":147},"network",[49,123418,123419],{"class":66},": \n",[49,123421,123422,123425,123427,123429],{"class":51,"line":59},[49,123423,123424],{"class":147},"  version",[49,123426,77],{"class":66},[49,123428,1478],{"class":73},[49,123430,3928],{"class":66},[49,123432,123433,123436],{"class":51,"line":70},[49,123434,123435],{"class":147},"  wifis",[49,123437,123419],{"class":66},[49,123439,123440,123443],{"class":51,"line":86},[49,123441,123442],{"class":147},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[49,123444,123419],{"class":66},[49,123446,123447,123450,123452,123455],{"class":51,"line":98},[49,123448,123449],{"class":147},"      renderer",[49,123451,77],{"class":66},[49,123453,123454],{"class":1505},"NetworkManager",[49,123456,3928],{"class":66},[49,123458,123459,123462],{"class":51,"line":121},[49,123460,123461],{"class":147},"      match",[49,123463,123419],{"class":66},[49,123465,123466,123469,123471,123474],{"class":51,"line":134},[49,123467,123468],{"class":147},"        name",[49,123470,77],{"class":66},[49,123472,123473],{"class":1505},"\"wlan0\"",[49,123475,3928],{"class":66},[49,123477,123478,123481,123483,123485],{"class":51,"line":1085},[49,123479,123480],{"class":147},"      dhcp4",[49,123482,77],{"class":66},[49,123484,2619],{"class":73},[49,123486,3928],{"class":66},[49,123488,123489,123492,123494,123496],{"class":51,"line":2574},[49,123490,123491],{"class":147},"      dhcp6",[49,123493,77],{"class":66},[49,123495,2619],{"class":73},[49,123497,3928],{"class":66},[49,123499,123500,123503],{"class":51,"line":2586},[49,123501,123502],{"class":147},"      access-points",[49,123504,123419],{"class":66},[49,123506,123507,123510],{"class":51,"line":2867},[49,123508,123509],{"class":1505},"        \"EMIS_Vinci_Robocon_5G\"",[49,123511,123419],{"class":66},[49,123513,123514,123517],{"class":51,"line":2872},[49,123515,123516],{"class":147},"          auth",[49,123518,123419],{"class":66},[49,123520,123521,123524,123526,123529],{"class":51,"line":2878},[49,123522,123523],{"class":147},"            key-management",[49,123525,77],{"class":66},[49,123527,123528],{"class":1505},"\"psk\"",[49,123530,3928],{"class":66},[49,123532,123533,123536,123538,123541],{"class":51,"line":2883},[49,123534,123535],{"class":147},"            password",[49,123537,77],{"class":66},[49,123539,123540],{"class":1505},"\"vinci666\"",[49,123542,3928],{"class":66},[49,123544,123545,123548],{"class":51,"line":2897},[49,123546,123547],{"class":147},"          networkmanager",[49,123549,123419],{"class":66},[49,123551,123552,123555,123557,123560],{"class":51,"line":2902},[49,123553,123554],{"class":147},"            uuid",[49,123556,77],{"class":66},[49,123558,123559],{"class":1505},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[49,123561,3928],{"class":66},[49,123563,123564,123567,123569,123572],{"class":51,"line":2908},[49,123565,123566],{"class":147},"            name",[49,123568,77],{"class":66},[49,123570,123571],{"class":1505},"\"EMIS_Vinci_Robocon_5G\"",[49,123573,3928],{"class":66},[49,123575,123576,123579],{"class":51,"line":2929},[49,123577,123578],{"class":147},"            passthrough",[49,123580,123419],{"class":66},[49,123582,123583,123586,123588,123591],{"class":51,"line":2934},[49,123584,123585],{"class":147},"              wifi-security.auth-alg",[49,123587,77],{"class":66},[49,123589,123590],{"class":1505},"\"open\"",[49,123592,3928],{"class":66},[49,123594,123595,123598,123600,123603],{"class":51,"line":2948},[49,123596,123597],{"class":147},"              ipv6.addr-gen-mode",[49,123599,77],{"class":66},[49,123601,123602],{"class":1505},"\"default\"",[49,123604,3928],{"class":66},[49,123606,123607,123610,123612,123615],{"class":51,"line":2953},[49,123608,123609],{"class":147},"              ipv6.ip6-privacy",[49,123611,77],{"class":66},[49,123613,123614],{"class":1505},"\"-1\"",[49,123616,3928],{"class":66},[49,123618,123619,123622,123624,123626],{"class":51,"line":2982},[49,123620,123621],{"class":147},"              proxy._",[49,123623,77],{"class":66},[49,123625,8904],{"class":1505},[49,123627,3928],{"class":66},[49,123629,123630,123633],{"class":51,"line":2987},[49,123631,123632],{"class":147},"      networkmanager",[49,123634,123419],{"class":66},[49,123636,123637,123640,123642,123644],{"class":51,"line":3004},[49,123638,123639],{"class":147},"        uuid",[49,123641,77],{"class":66},[49,123643,123559],{"class":1505},[49,123645,3928],{"class":66},[49,123647,123648,123650,123652],{"class":51,"line":3009},[49,123649,123468],{"class":147},[49,123651,77],{"class":66},[49,123653,123654],{"class":1505},"\"EMIS_Vinci_Robocon_5G\"\n",[19,123656,123657],{},"将其改为新wifi的名和密码：",[39,123659,123661],{"className":123407,"code":123660,"language":123409,"meta":44,"style":44},"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",[46,123662,123663,123669,123678,123684,123691,123700,123708,123714,123720],{"__ignoreMap":44},[49,123664,123665,123667],{"class":51,"line":52},[49,123666,123416],{"class":147},[49,123668,4993],{"class":66},[49,123670,123671,123673,123675],{"class":51,"line":59},[49,123672,123424],{"class":147},[49,123674,77],{"class":66},[49,123676,123677],{"class":73},"2\n",[49,123679,123680,123682],{"class":51,"line":70},[49,123681,123435],{"class":147},[49,123683,4993],{"class":66},[49,123685,123686,123689],{"class":51,"line":86},[49,123687,123688],{"class":147},"    wlan0",[49,123690,4993],{"class":66},[49,123692,123693,123695,123697],{"class":51,"line":98},[49,123694,123480],{"class":147},[49,123696,77],{"class":66},[49,123698,123699],{"class":73},"true\n",[49,123701,123702,123704,123706],{"class":51,"line":121},[49,123703,123491],{"class":147},[49,123705,77],{"class":66},[49,123707,123699],{"class":73},[49,123709,123710,123712],{"class":51,"line":134},[49,123711,123502],{"class":147},[49,123713,4993],{"class":66},[49,123715,123716,123718],{"class":51,"line":1085},[49,123717,123509],{"class":1505},[49,123719,4993],{"class":66},[49,123721,123722,123725,123727],{"class":51,"line":2574},[49,123723,123724],{"class":147},"          password",[49,123726,77],{"class":66},[49,123728,123729],{"class":1505},"\"vinci666\"\n",[19,123731,123732],{},"工控机开机即可连上网。",[14,123734,123736],{"id":123735},"_72-ssh远程开发","7.2 SSH远程开发",[183,123738,123740],{"id":123739},"_721-环境准备","7.2.1 环境准备",[19,123742,123743],{},[485,123744,123745],{},"1.硬件准备",[19,123747,123748],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123750,123751],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123753,123754],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123756,123757],{},[485,123758,123759],{},"2.设置固定IP",[19,123761,123762],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123764,123765],{},"1.进入设置界面",[19,123767,123768],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123770,123771],{},[174,123772],{"alt":44,"src":123773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123775,123776],{},"2.配置所连接的网络",[19,123778,123779],{},[174,123780],{"alt":44,"src":123781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123783,123784],{},"3.设置固定IP",[19,123786,123787],{},"查看当前IP地址。",[19,123789,123790],{},[174,123791],{"alt":44,"src":123792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123794,123795],{},"设置固定IP。",[19,123797,123798],{},[174,123799],{"alt":44,"src":123800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123802,123803],{},"至此，IP配置完毕。",[183,123805,123807],{"id":123806},"_722-环境搭建","7.2.2 环境搭建",[19,123809,123810],{},[485,123811,27002],{},[19,123813,123814],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123816,123817],{},[485,123818,123819],{},"实现",[19,123821,123822],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[591,123824,123825,123828,123831,123834],{},[26,123826,123827],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[26,123829,123830],{},"远程主机启动SSH服务；",[26,123832,123833],{},"本地主机登陆远程主机；",[26,123835,123836],{},"实现数据传输。",[19,123838,123839],{},"1.安装SSH客户端与服务端",[19,123841,123842],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[39,123844,123846],{"className":122040,"code":123845,"language":122042,"meta":122043,"style":44}," sudo apt install openssh-server\n",[46,123847,123848],{"__ignoreMap":44},[49,123849,123850],{"class":51,"line":52},[49,123851,123845],{},[19,123853,123854],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[39,123856,123858],{"className":122040,"code":123857,"language":122042,"meta":122043,"style":44},"sudo apt install openssh-client\n",[46,123859,123860],{"__ignoreMap":44},[49,123861,123862],{"class":51,"line":52},[49,123863,123857],{},[19,123865,123866],{},"2.远程主机启动SSH服务",[19,123868,123869],{},"远程主机启动 ssh 服务命令如下：",[39,123871,123873],{"className":122040,"code":123872,"language":122042,"meta":122043,"style":44},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[46,123874,123875],{"__ignoreMap":44},[49,123876,123877],{"class":51,"line":52},[49,123878,123872],{},[19,123880,123881],{},"启动后可使用如下命令查看服务是否正常运行：",[39,123883,123885],{"className":122040,"code":123884,"language":122042,"meta":122043,"style":44},"ps -e | grep ssh\n",[46,123886,123887],{"__ignoreMap":44},[49,123888,123889],{"class":51,"line":52},[49,123890,123884],{},[19,123892,123893],{},"如果启动成功，会包含 sshd 程序。",[19,123895,123896],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[39,123898,123900],{"className":122040,"code":123899,"language":122042,"meta":122043,"style":44},"sudo systemctl enable ssh\n",[46,123901,123902],{"__ignoreMap":44},[49,123903,123904],{"class":51,"line":52},[49,123905,123899],{},[19,123907,123908],{},"3.本地远程登录",[19,123910,123911],{},"登录远程主机可以调用如下命令:",[39,123913,123915],{"className":118520,"code":123914,"language":118522,"meta":44,"style":44},"ssh -X 用户名@ip地址\n",[46,123916,123917],{"__ignoreMap":44},[49,123918,123919,123921,123924],{"class":51,"line":52},[49,123920,122871],{"class":62},[49,123922,123923],{"class":73}," -X",[49,123925,123926],{"class":1505}," 用户名@ip地址\n",[19,123928,123929],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123931,123932],{},"如果退出，可以调用exit命令：",[39,123934,123936],{"className":122040,"code":123935,"language":122042,"meta":122043,"style":44},"exit\n",[46,123937,123938],{"__ignoreMap":44},[49,123939,123940],{"class":51,"line":52},[49,123941,123935],{},[19,123943,123944],{},[485,123945,123946],{},"4.实现数据传输",[19,123948,123949],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123951,123952],{},"上传文件指令格式如下：",[39,123954,123956],{"className":122040,"code":123955,"language":122042,"meta":122043,"style":44},"scp 本地文件路径 账号@ip:路径\n",[46,123957,123958],{"__ignoreMap":44},[49,123959,123960],{"class":51,"line":52},[49,123961,123955],{},[19,123963,123964],{},"上传文件夹指令格式如下：",[39,123966,123968],{"className":122040,"code":123967,"language":122042,"meta":122043,"style":44},"scp -r 本地文件夹路径 账号@ip:路径\n",[46,123969,123970],{"__ignoreMap":44},[49,123971,123972],{"class":51,"line":52},[49,123973,123967],{},[19,123975,123976],{},"下载文件指令格式如下：",[39,123978,123980],{"className":122040,"code":123979,"language":122042,"meta":122043,"style":44},"scp 账号@ip:路径 本地文件夹路径\n",[46,123981,123982],{"__ignoreMap":44},[49,123983,123984],{"class":51,"line":52},[49,123985,123979],{},[19,123987,123988],{},"下载文件夹指令格式如下：",[39,123990,123992],{"className":122040,"code":123991,"language":122042,"meta":122043,"style":44},"scp -r 账号@ip:路径 本地文件夹路径\n",[46,123993,123994],{"__ignoreMap":44},[49,123995,123996],{"class":51,"line":52},[49,123997,123991],{},[19,123999,124000],{},[485,124001,124002],{},"优化",[19,124004,124005],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[591,124007,124008,124011],{},[26,124009,124010],{},"本地生成密钥对；",[26,124012,124013],{},"将公钥上传至远程主机。",[19,124015,124016],{},[485,124017,124018],{},"1.生成密钥对",[19,124020,124021],{},"本地客户端生成公私钥：（一路回车默认即可）",[39,124023,124025],{"className":122040,"code":124024,"language":122042,"meta":122043,"style":44},"ssh-keygen\n",[46,124026,124027],{"__ignoreMap":44},[49,124028,124029],{"class":51,"line":52},[49,124030,124024],{},[19,124032,124033],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[591,124035,124036,124039],{},[26,124037,124038],{},"id_rsa （私钥）；",[26,124040,124041],{},"id_rsa.pub (公钥)。",[19,124043,124044],{},[485,124045,124046],{},"2.公钥上传",[19,124048,124049],{},"上传指令如下：",[39,124051,124053],{"className":122040,"code":124052,"language":122042,"meta":122043,"style":44},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[46,124054,124055],{"__ignoreMap":44},[49,124056,124057],{"class":51,"line":52},[49,124058,124052],{},[19,124060,124061],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124063,124064],{},"以后再远程登录就无需录入密码了。",[183,124066,124068],{"id":124067},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124070,124071],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124073,124074],{},[485,124075,124076],{},"1.准备工作",[19,124078,124079],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124081,124082],{},[485,124083,124084],{},"2.为VScode安装远程开发插件",[19,124086,124087,124088,124091,124092,124095,124096,29633],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[46,124089,124090],{},"扩展：商店","的搜索栏输入",[46,124093,124094],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[46,124097,124098],{},"安装",[19,124100,124101],{},[174,124102],{"alt":44,"src":124103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124105,124106],{},[485,124107,124108],{},"3.配置远程连接",[19,124110,124111,124112,124115,124116,124119],{},"步骤1：使用快捷键",[46,124113,124114],{},"ctrl + shift + p","打开命令输入窗口，并输入",[46,124117,124118],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124121,124122],{},[174,124123],{"alt":44,"src":124124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124126,124127,124128,29633],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[46,124129,124130],{},"Add New SSH Host",[19,124132,124133],{},[174,124134],{"alt":44,"src":124135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124137,124138,124139,124142,124143,124146,124147,124150],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[46,124140,124141],{},"ssh +X ubuntu@192.168.43.164","，其中，",[46,124144,124145],{},"ubuntu","需要替换为你的登录用户名，",[46,124148,124149],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124152,124153],{},[174,124154],{"alt":44,"src":124155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124157,124158],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124160,124161],{},[174,124162],{"alt":44,"src":124163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124165,124166],{},[174,124167],{"alt":44,"src":124168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124170,124171],{},[485,124172,124173],{},"4.使用",[19,124175,124176,124177,124115,124179,124181],{},"步骤1：继续使用快捷键",[46,124178,124114],{},[46,124180,124118],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124183,124184],{},[174,124185],{"alt":44,"src":124186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124188,124189,124190,124193],{},"或者，也可以点击侧边栏的",[46,124191,124192],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124195,124196],{},[174,124197],{"alt":44,"src":124198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124200,124201,124202,124205,124206,124209],{},"步骤2：选择菜单栏的",[46,124203,124204],{},"文件","下的",[46,124207,124208],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124211,124212],{},[174,124213],{"alt":44,"src":124214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124216,124217],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124219,124221],{"id":124220},"_73-远程桌面","7.3 远程桌面",[19,124223,124224],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124226,124227],{},"我们选择使用VNC来看。",[591,124229,124230],{},[26,124231,124232],{},"安装VNC服务器：",[19,124234,124235],{},"这里以TigerVNC为例进行安装：",[39,124237,124239],{"className":118520,"code":124238,"language":118522,"meta":44,"style":44},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[46,124240,124241],{"__ignoreMap":44},[49,124242,124243,124245,124247,124249,124252],{"class":51,"line":52},[49,124244,25825],{"class":62},[49,124246,118541],{"class":1505},[49,124248,25082],{"class":1505},[49,124250,124251],{"class":1505}," tigervnc-standalone-server",[49,124253,124254],{"class":1505}," tigervnc-common\n",[591,124256,124257],{"start":59},[26,124258,124259],{},"设置VNC密码：",[19,124261,124262],{},"为VNC用户设置密码，运行以下命令：",[39,124264,124266],{"className":118520,"code":124265,"language":118522,"meta":44,"style":44},"vncpasswd\n",[46,124267,124268],{"__ignoreMap":44},[49,124269,124270],{"class":51,"line":52},[49,124271,124265],{"class":62},[591,124273,124274],{"start":70},[26,124275,124276],{},"配置VNC启动脚本:",[19,124278,124279],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[39,124281,124283],{"className":118520,"code":124282,"language":118522,"meta":44,"style":44},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[46,124284,124285,124294],{"__ignoreMap":44},[49,124286,124287,124289,124291],{"class":51,"line":52},[49,124288,102490],{"class":62},[49,124290,30464],{"class":73},[49,124292,124293],{"class":1505}," ~\u002F.vnc\n",[49,124295,124296,124299],{"class":51,"line":59},[49,124297,124298],{"class":62},"nano",[49,124300,124301],{"class":1505}," ~\u002F.vnc\u002Fxstartup\n",[19,124303,124304],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[39,124306,124308],{"className":118520,"code":124307,"language":118522,"meta":44,"style":44},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[46,124309,124310,124315,124323,124330],{"__ignoreMap":44},[49,124311,124312],{"class":51,"line":52},[49,124313,124314],{"class":55},"#!\u002Fbin\u002Fsh\n",[49,124316,124317,124320],{"class":51,"line":59},[49,124318,124319],{"class":73},"unset",[49,124321,124322],{"class":1505}," SESSION_MANAGER\n",[49,124324,124325,124327],{"class":51,"line":70},[49,124326,124319],{"class":73},[49,124328,124329],{"class":1505}," DBUS_SESSION_BUS_ADDRESS\n",[49,124331,124332],{"class":51,"line":86},[49,124333,124334],{"class":62},"gnome-session\n",[19,124336,124337],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[591,124339,124340],{"start":86},[26,124341,124342],{},"给予执行权限：",[19,124344,124345],{},"为xstartup文件设置执行权限：",[39,124347,124349],{"className":118520,"code":124348,"language":118522,"meta":44,"style":44},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[46,124350,124351],{"__ignoreMap":44},[49,124352,124353,124355,124358],{"class":51,"line":52},[49,124354,25860],{"class":62},[49,124356,124357],{"class":1505}," +x",[49,124359,124301],{"class":1505},[591,124361,124362],{"start":98},[26,124363,124364],{},"启动VNC服务器：",[39,124366,124368],{"className":118520,"code":124367,"language":118522,"meta":44,"style":44},"vncserver -geometry 1920x1080 -localhost=0\n",[46,124369,124370],{"__ignoreMap":44},[49,124371,124372,124375,124378,124381],{"class":51,"line":52},[49,124373,124374],{"class":62},"vncserver",[49,124376,124377],{"class":73}," -geometry",[49,124379,124380],{"class":1505}," 1920x1080",[49,124382,124383],{"class":73}," -localhost=0\n",[19,124385,124386],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124388,124389],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[591,124391,124392],{"start":121},[26,124393,124394],{},"查看已开启的VNC服务器：",[39,124396,124398],{"className":118520,"code":124397,"language":118522,"meta":44,"style":44},"vncserver -list\n",[46,124399,124400],{"__ignoreMap":44},[49,124401,124402,124404],{"class":51,"line":52},[49,124403,124374],{"class":62},[49,124405,124406],{"class":73}," -list\n",[19,124408,124409],{},[174,124410],{"alt":44,"src":124411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[591,124413,124414],{"start":134},[26,124415,124416],{},"连接到VNC服务器：",[19,124418,124419],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[591,124421,124422],{"start":1085},[26,124423,124424],{},"停止VNC服务器：",[19,124426,124427],{},"如果需要停止VNC服务器，可以使用以下命令：",[39,124429,124431],{"className":118520,"code":124430,"language":118522,"meta":44,"style":44},"vncserver -kill :1\n",[46,124432,124433],{"__ignoreMap":44},[49,124434,124435,124437,124440],{"class":51,"line":52},[49,124436,124374],{"class":62},[49,124438,124439],{"class":73}," -kill",[49,124441,124442],{"class":1505}," :1\n",[19,124444,124445],{},"将:1替换为你实际使用的显示编号。",[19,124447,124448],{},[174,124449],{"alt":44,"src":124450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124452,124453],{},[174,124454],{"alt":44,"src":124455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124457,124459],{"id":124458},"_74-usb端口设置","7.4 USB端口设置",[19,124461,124462],{},[485,124463,124464],{},"首先先配置好权限",[39,124466,124468],{"className":118520,"code":124467,"language":118522,"meta":44,"style":44},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[46,124469,124470,124475,124488,124495,124500],{"__ignoreMap":44},[49,124471,124472],{"class":51,"line":52},[49,124473,124474],{"class":55},"# 将用户权限提高\n",[49,124476,124477,124479,124481,124483,124486],{"class":51,"line":59},[49,124478,25825],{"class":62},[49,124480,27823],{"class":1505},[49,124482,27826],{"class":73},[49,124484,124485],{"class":1505}," dialout",[49,124487,27831],{"class":66},[49,124489,124490,124492],{"class":51,"line":70},[49,124491,27850],{"class":62},[49,124493,124494],{"class":1505}," dialout\n",[49,124496,124497],{"class":51,"line":86},[49,124498,124499],{"class":55},"# 查看下面命令是否输出dialout（若输出才正常）\n",[49,124501,124502],{"class":51,"line":98},[49,124503,124504],{"class":62},"groups\n",[19,124506,124507],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[183,124509,124511],{"id":124510},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124513,124514,124517],{},[485,124515,124516],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124519,124520,124523],{},[485,124521,124522],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124525,124526],{},[485,124527,124528],{},"流程如下：",[19,124530,124531],{},"（1）.查找设备idVendor和idProduct",[19,124533,124534,124535,124538],{},"接入两个USB设备，在终端调用指令",[46,124536,124537],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124540,124541],{},[174,124542],{"alt":44,"src":124543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124545,124546,124547,124550],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[46,124548,124549],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124552,124553],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124555,124556],{},"（2）.编写映射规则",[19,124558,124559,124560,124563],{},"在",[46,124561,124562],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[39,124565,124567],{"className":118520,"code":124566,"language":118522,"meta":44,"style":44},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[46,124568,124569],{"__ignoreMap":44},[49,124570,124571,124573,124575],{"class":51,"line":52},[49,124572,25825],{"class":62},[49,124574,119807],{"class":1505},[49,124576,124577],{"class":1505}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124579,124580],{},"输入如下内容：",[39,124582,124584],{"className":118520,"code":124583,"language":118522,"meta":44,"style":44},"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",[46,124585,124586,124616],{"__ignoreMap":44},[49,124587,124588,124591,124593,124596,124599,124602,124605,124607,124610,124613],{"class":51,"line":52},[49,124589,124590],{"class":66},"KERNEL",[49,124592,1448],{"class":109},[49,124594,124595],{"class":1505},"=\"ttyUSB*\",",[49,124597,124598],{"class":62}," ATTRS",[49,124600,124601],{"class":1505},"{idVendor}==",[49,124603,124604],{"class":62},"\"10c4\"",[49,124606,1770],{"class":62},[49,124608,124609],{"class":1505}," ATTRS{idProduct}==\"ea60\",",[49,124611,124612],{"class":1505}," MODE:=\"0777\",",[49,124614,124615],{"class":1505}," SYMLINK+=\"mylidar\"\n",[49,124617,124618,124620,124622,124624,124626,124628,124631,124633,124636,124638],{"class":51,"line":59},[49,124619,124590],{"class":66},[49,124621,1448],{"class":109},[49,124623,124595],{"class":1505},[49,124625,124598],{"class":62},[49,124627,124601],{"class":1505},[49,124629,124630],{"class":62},"\"1a86\"",[49,124632,1770],{"class":62},[49,124634,124635],{"class":1505}," ATTRS{idProduct}==\"7523\",",[49,124637,124612],{"class":1505},[49,124639,124640],{"class":1505}," SYMLINK+=\"mycar\"\n",[19,124642,124643],{},"代码解释：",[23,124645,124646,124649,124652,124655],{},[26,124647,124648],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[26,124650,124651],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[26,124653,124654],{},"SYMLINK是符号连接，即绑定的别名；",[26,124656,124657],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,124659,124660,124661,124664,124667],{},"***小提示：***",[24802,124662,124663],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[46,124665,124666],{},"\u002Fetc\u002Fudev\u002Frule.d",[24802,124668,124669],{},"目录即可。",[19,124671,124672],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,124674,124675],{},"（3）.使规则生效",[19,124677,124678],{},"在终端下输入如下指令：",[39,124680,124682],{"className":118520,"code":124681,"language":118522,"meta":44,"style":44},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[46,124683,124684,124689,124701,124712,124716,124721,124734],{"__ignoreMap":44},[49,124685,124686],{"class":51,"line":52},[49,124687,124688],{"class":55},"# Ubuntu用下方命令\n",[49,124690,124691,124693,124695,124698],{"class":51,"line":59},[49,124692,25825],{"class":62},[49,124694,121272],{"class":1505},[49,124696,124697],{"class":1505}," udev",[49,124699,124700],{"class":1505}," reload\n",[49,124702,124703,124705,124707,124709],{"class":51,"line":70},[49,124704,25825],{"class":62},[49,124706,121272],{"class":1505},[49,124708,124697],{"class":1505},[49,124710,124711],{"class":1505}," restart\n",[49,124713,124714],{"class":51,"line":86},[49,124715,3654],{"emptyLinePlaceholder":1330},[49,124717,124718],{"class":51,"line":98},[49,124719,124720],{"class":55},"#Fedora用下方命令\n",[49,124722,124723,124725,124728,124731],{"class":51,"line":121},[49,124724,25825],{"class":62},[49,124726,124727],{"class":1505}," udevadm",[49,124729,124730],{"class":1505}," control",[49,124732,124733],{"class":73}," --reload\n",[49,124735,124736,124738,124740],{"class":51,"line":134},[49,124737,25825],{"class":62},[49,124739,124727],{"class":1505},[49,124741,124742],{"class":1505}," trigger\n",[19,124744,124745],{},"再重新插拔设备即可。",[19,124747,124748],{},"（4）.测试",[19,124750,124751],{},"终端下输入如下指令",[39,124753,124755],{"className":118520,"code":124754,"language":118522,"meta":44,"style":44},"ll \u002Fdev | grep ttyUSB\n",[46,124756,124757],{"__ignoreMap":44},[49,124758,124759,124762,124765,124767,124769],{"class":51,"line":52},[49,124760,124761],{"class":62},"ll",[49,124763,124764],{"class":1505}," \u002Fdev",[49,124766,26358],{"class":109},[49,124768,31484],{"class":62},[49,124770,124771],{"class":1505}," ttyUSB\n",[19,124773,124774],{},"运行结果如下：",[19,124776,124777],{},[174,124778],{"alt":44,"src":124779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124781,124782,124783,124786],{},"也可以多次插拔USB设备，会发现设备端口",[46,124784,124785],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124788,124789],{},[485,124790,119188],{},[19,124792,124793],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[183,124795,124797],{"id":124796},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124799,124800,124802],{},[485,124801,124516],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124804,124805,124807],{},[485,124806,124522],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124809,124810],{},[485,124811,124528],{},[19,124813,124814],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124816,124817],{},"调用如下指令查看第一台雷达的USB信息：",[39,124819,124821],{"className":118520,"code":124820,"language":118522,"meta":44,"style":44},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[46,124822,124823,124843],{"__ignoreMap":44},[49,124824,124825,124828,124830,124833,124836,124838,124840],{"class":51,"line":52},[49,124826,124827],{"class":62},"udevadm",[49,124829,71056],{"class":1505},[49,124831,124832],{"class":73}," --attribute-walk",[49,124834,124835],{"class":73}," --name=\u002Fdev\u002FttyUSB0",[49,124837,26358],{"class":109},[49,124839,31484],{"class":62},[49,124841,124842],{"class":1505}," KERNELS\n",[49,124844,124845,124847,124849,124851,124854,124856,124858],{"class":51,"line":59},[49,124846,124827],{"class":62},[49,124848,71056],{"class":1505},[49,124850,124832],{"class":73},[49,124852,124853],{"class":73}," --name=\u002Fdev\u002FttyACM0",[49,124855,26358],{"class":109},[49,124857,31484],{"class":62},[49,124859,124842],{"class":1505},[19,124861,124862],{},[174,124863],{"alt":44,"src":124864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124866,124867],{},"调用如下指令查看第二台雷达的USB信息：",[39,124869,124871],{"className":118520,"code":124870,"language":118522,"meta":44,"style":44},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[46,124872,124873],{"__ignoreMap":44},[49,124874,124875,124877,124879,124881,124884,124886,124888],{"class":51,"line":52},[49,124876,124827],{"class":62},[49,124878,71056],{"class":1505},[49,124880,124832],{"class":73},[49,124882,124883],{"class":73}," --name=\u002Fdev\u002FttyUSB1",[49,124885,26358],{"class":109},[49,124887,31484],{"class":62},[49,124889,124842],{"class":1505},[19,124891,124892,124893,124896,124897,124900,124901,124904],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[46,124894,124895],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[46,124898,124899],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[485,124902,124903],{},"唯一性标识","”。",[19,124906,124556],{},[19,124908,124559,124909,124911],{},[46,124910,124562],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[39,124913,124914],{"className":118520,"code":124566,"language":118522,"meta":44,"style":44},[46,124915,124916],{"__ignoreMap":44},[49,124917,124918,124920,124922],{"class":51,"line":52},[49,124919,25825],{"class":62},[49,124921,119807],{"class":1505},[49,124923,124577],{"class":1505},[39,124925,124927],{"className":118520,"code":124926,"language":118522,"meta":44,"style":44},"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",[46,124928,124929,124958],{"__ignoreMap":44},[49,124930,124931,124933,124935,124937,124940,124942,124945,124948,124950,124953,124955],{"class":51,"line":52},[49,124932,124590],{"class":66},[49,124934,1448],{"class":109},[49,124936,124595],{"class":1505},[49,124938,124939],{"class":66}," KERNELS",[49,124941,1448],{"class":109},[49,124943,124944],{"class":1505},"=\"1-1.3:1.0\",",[49,124946,124947],{"class":62}," MODE:",[49,124949,1448],{"class":1505},[49,124951,124952],{"class":62},"\"0777\"",[49,124954,1770],{"class":62},[49,124956,124957],{"class":1505}," SYMLINK+=\"rplidar_front\"\n",[49,124959,124960,124962,124964,124966,124968,124970,124973,124975,124977,124979,124981],{"class":51,"line":59},[49,124961,124590],{"class":66},[49,124963,1448],{"class":109},[49,124965,124595],{"class":1505},[49,124967,124939],{"class":66},[49,124969,1448],{"class":109},[49,124971,124972],{"class":1505},"=\"1-1.4:1.0\",",[49,124974,124947],{"class":62},[49,124976,1448],{"class":1505},[49,124978,124952],{"class":62},[49,124980,1770],{"class":62},[49,124982,124983],{"class":1505}," SYMLINK+=\"rplidar_back\"\n",[19,124985,124675],{},[19,124987,124678],{},[39,124989,124990],{"className":118520,"code":124681,"language":118522,"meta":44,"style":44},[46,124991,124992,124996,125006,125016,125020,125024,125034],{"__ignoreMap":44},[49,124993,124994],{"class":51,"line":52},[49,124995,124688],{"class":55},[49,124997,124998,125000,125002,125004],{"class":51,"line":59},[49,124999,25825],{"class":62},[49,125001,121272],{"class":1505},[49,125003,124697],{"class":1505},[49,125005,124700],{"class":1505},[49,125007,125008,125010,125012,125014],{"class":51,"line":70},[49,125009,25825],{"class":62},[49,125011,121272],{"class":1505},[49,125013,124697],{"class":1505},[49,125015,124711],{"class":1505},[49,125017,125018],{"class":51,"line":86},[49,125019,3654],{"emptyLinePlaceholder":1330},[49,125021,125022],{"class":51,"line":98},[49,125023,124720],{"class":55},[49,125025,125026,125028,125030,125032],{"class":51,"line":121},[49,125027,25825],{"class":62},[49,125029,124727],{"class":1505},[49,125031,124730],{"class":1505},[49,125033,124733],{"class":73},[49,125035,125036,125038,125040],{"class":51,"line":134},[49,125037,25825],{"class":62},[49,125039,124727],{"class":1505},[49,125041,124742],{"class":1505},[19,125043,124745],{},[19,125045,124748],{},[19,125047,124751,125048,125051],{},[46,125049,125050],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125053,125054],{},[174,125055],{"alt":44,"src":125056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125058,125059],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125061,125062,125064],{},[485,125063,119188],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[183,125066,125068],{"id":125067},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125070,125071],{},"（1）.查看所连接的主机USB接口的信息",[39,125073,125075],{"className":118520,"code":125074,"language":118522,"meta":44,"style":44},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[46,125076,125077,125107],{"__ignoreMap":44},[49,125078,125079,125081,125083,125086,125088,125090,125092,125094,125097,125100,125102,125105],{"class":51,"line":52},[49,125080,124827],{"class":62},[49,125082,71056],{"class":1505},[49,125084,125085],{"class":73}," -a",[49,125087,30464],{"class":73},[49,125089,29670],{"class":66},[49,125091,124827],{"class":62},[49,125093,71056],{"class":1505},[49,125095,125096],{"class":73}," -q",[49,125098,125099],{"class":1505}," path",[49,125101,26364],{"class":73},[49,125103,125104],{"class":1505}," \u002Fdev\u002FttyACM0",[49,125106,1409],{"class":66},[49,125108,125109,125111,125113,125115,125117,125119,125121,125123,125125,125127,125129,125132],{"class":51,"line":59},[49,125110,124827],{"class":62},[49,125112,71056],{"class":1505},[49,125114,125085],{"class":73},[49,125116,30464],{"class":73},[49,125118,29670],{"class":66},[49,125120,124827],{"class":62},[49,125122,71056],{"class":1505},[49,125124,125096],{"class":73},[49,125126,125099],{"class":1505},[49,125128,26364],{"class":73},[49,125130,125131],{"class":1505}," \u002Fdev\u002FttyUSB0",[49,125133,1409],{"class":66},[19,125135,125136],{},[174,125137],{"alt":44,"src":125138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125140,125141],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125143,124556],{},[19,125145,124559,125146,124911],{},[46,125147,124562],{},[39,125149,125150],{"className":118520,"code":124566,"language":118522,"meta":44,"style":44},[46,125151,125152],{"__ignoreMap":44},[49,125153,125154,125156,125158],{"class":51,"line":52},[49,125155,25825],{"class":62},[49,125157,119807],{"class":1505},[49,125159,124577],{"class":1505},[39,125161,125163],{"className":118520,"code":125162,"language":118522,"meta":44,"style":44},"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",[46,125164,125165,125193,125219],{"__ignoreMap":44},[49,125166,125167,125169,125171,125174,125176,125178,125180,125182,125185,125188,125190],{"class":51,"line":52},[49,125168,124590],{"class":66},[49,125170,1448],{"class":109},[49,125172,125173],{"class":1505},"=\"ttyACM*\",",[49,125175,124598],{"class":62},[49,125177,124601],{"class":1505},[49,125179,124630],{"class":62},[49,125181,1770],{"class":62},[49,125183,125184],{"class":1505}," ATTRS{idProduct}==\"55d4\",",[49,125186,125187],{"class":1505}," ATTRS{serial}==\"0001\",",[49,125189,124612],{"class":1505},[49,125191,125192],{"class":1505}," SYMLINK+=\"ttyACM_MCU\"\n",[49,125194,125195,125197,125199,125201,125203,125205,125207,125209,125211,125214,125216],{"class":51,"line":59},[49,125196,124590],{"class":66},[49,125198,1448],{"class":109},[49,125200,125173],{"class":1505},[49,125202,124598],{"class":62},[49,125204,124601],{"class":1505},[49,125206,124630],{"class":62},[49,125208,1770],{"class":62},[49,125210,125184],{"class":1505},[49,125212,125213],{"class":1505}," ATTRS{serial}==\"0002\",",[49,125215,124612],{"class":1505},[49,125217,125218],{"class":1505}," SYMLINK+=\"ttyACM_Lidar\"\n",[49,125220,125221,125223,125225,125227,125229,125231,125233,125235,125237,125239],{"class":51,"line":70},[49,125222,124590],{"class":66},[49,125224,1448],{"class":109},[49,125226,124595],{"class":1505},[49,125228,124598],{"class":62},[49,125230,124601],{"class":1505},[49,125232,124630],{"class":62},[49,125234,1770],{"class":62},[49,125236,124635],{"class":1505},[49,125238,124612],{"class":1505},[49,125240,125241],{"class":1505}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125243,124675],{},[19,125245,124678],{},[39,125247,125248],{"className":118520,"code":124681,"language":118522,"meta":44,"style":44},[46,125249,125250,125254,125264,125274,125278,125282,125292],{"__ignoreMap":44},[49,125251,125252],{"class":51,"line":52},[49,125253,124688],{"class":55},[49,125255,125256,125258,125260,125262],{"class":51,"line":59},[49,125257,25825],{"class":62},[49,125259,121272],{"class":1505},[49,125261,124697],{"class":1505},[49,125263,124700],{"class":1505},[49,125265,125266,125268,125270,125272],{"class":51,"line":70},[49,125267,25825],{"class":62},[49,125269,121272],{"class":1505},[49,125271,124697],{"class":1505},[49,125273,124711],{"class":1505},[49,125275,125276],{"class":51,"line":86},[49,125277,3654],{"emptyLinePlaceholder":1330},[49,125279,125280],{"class":51,"line":98},[49,125281,124720],{"class":55},[49,125283,125284,125286,125288,125290],{"class":51,"line":121},[49,125285,25825],{"class":62},[49,125287,124727],{"class":1505},[49,125289,124730],{"class":1505},[49,125291,124733],{"class":73},[49,125293,125294,125296,125298],{"class":51,"line":134},[49,125295,25825],{"class":62},[49,125297,124727],{"class":1505},[49,125299,124742],{"class":1505},[19,125301,125302,125303],{},"再重新插拔设备即可，或者 ",[485,125304,125305],{},"直接重启系统。",[19,125307,124748],{},[19,125309,124751,125310,125051],{},[46,125311,125050],{},[19,125313,125314],{},[174,125315],{"alt":44,"src":125316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125318,125059],{},[19,125320,125321,125323],{},[485,125322,119188],{}," 一些设备可能没有串口号等。",[183,125325,125327],{"id":125326},"_744-其他注意事项","7.4.4 其他注意事项",[19,125329,125330,125331,125333,125334,125337,125338,19660,125341,125344,125345,125347],{},"并非所有的USB设备端口号都是",[46,125332,124785],{},"的格式，比如Arduino的端口号可能是",[46,125335,125336],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[46,125339,125340],{},"videon",[46,125342,125343],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[46,125346,125340],{},"端口，绑定时需要关联的也是该接口。",[19,125349,125350,125351,125354,125355,125358,125359,125361,125362,125365,125366,125369,125370,125373,125374,125373,125377,125373,125380,29633],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[46,125352,125353],{},"KERNEL==\"ttyUSB*\"","修改为",[46,125356,125357],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[46,125360,125353],{},"修改为类似于",[46,125363,125364],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[46,125367,125368],{},"video[0,2,4,6]","表示可以绑定的端口为",[46,125371,125372],{},"video0","或",[46,125375,125376],{},"video2",[46,125378,125379],{},"video4",[46,125381,125382],{},"video6",[14,125384,125386],{"id":125385},"_75-挂载内网网页","7.5 挂载内网网页",[19,125388,125389],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125391,125392],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125394,125395],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125397,125398,125399],{},"Termux 下载地址（F-Droid）：",[1630,125400,125401],{"href":125401,"rel":125402},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25113],[19,125404,125405],{},"首先打开app后，先更新软件缓存：",[39,125407,125409],{"className":118520,"code":125408,"language":118522,"meta":44,"style":44},"pkg update\n",[46,125410,125411],{"__ignoreMap":44},[49,125412,125413,125416],{"class":51,"line":52},[49,125414,125415],{"class":62},"pkg",[49,125417,27491],{"class":1505},[19,125419,125420],{},"然后换源",[39,125422,125424],{"className":118520,"code":125423,"language":118522,"meta":44,"style":44},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[46,125425,125426],{"__ignoreMap":44},[49,125427,125428,125430,125433],{"class":51,"line":52},[49,125429,124298],{"class":62},[49,125431,125432],{"class":66}," $PREFIX",[49,125434,125435],{"class":1505},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125437,125438],{},"将该文件内容替换为下面：",[39,125440,125442],{"className":118520,"code":125441,"language":118522,"meta":44,"style":44},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[46,125443,125444],{"__ignoreMap":44},[49,125445,125446,125449,125452,125455],{"class":51,"line":52},[49,125447,125448],{"class":62},"deb",[49,125450,125451],{"class":1505}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[49,125453,125454],{"class":1505}," stable",[49,125456,125457],{"class":1505}," main\n",[23,125459,125460,125487],{},[26,125461,125462,125463,125465,125466],{},"如果你使用的是",[46,125464,124298],{},"编辑器：",[23,125467,125468,125475,125481],{},[26,125469,125470,125471,125474],{},"按 ",[46,125472,125473],{},"Ctrl+O"," 保存文件。",[26,125476,125470,125477,125480],{},[46,125478,125479],{},"Enter"," 确认文件名。",[26,125482,125470,125483,125486],{},[46,125484,125485],{},"Ctrl+X"," 退出编辑器。",[26,125488,125462,125489,125465,125492],{},[46,125490,125491],{},"vim",[23,125493,125494,125500],{},[26,125495,125470,125496,125499],{},[46,125497,125498],{},"Esc"," 退出编辑模式。",[26,125501,125502,125503,125505],{},"输入 ",[46,125504,120445],{}," 保存并退出。",[19,125507,125508],{},"接下来重新更新软件源：",[39,125510,125512],{"className":118520,"code":125511,"language":118522,"meta":44,"style":44},"pkg update && pkg upgrade\n",[46,125513,125514],{"__ignoreMap":44},[49,125515,125516,125518,125520,125522,125524],{"class":51,"line":52},[49,125517,125415],{"class":62},[49,125519,118571],{"class":1505},[49,125521,27439],{"class":66},[49,125523,125415],{"class":62},[49,125525,118557],{"class":1505},[19,125527,125528],{},"安装python：",[39,125530,125532],{"className":118520,"code":125531,"language":118522,"meta":44,"style":44},"pkg install python\n",[46,125533,125534],{"__ignoreMap":44},[49,125535,125536,125538,125540],{"class":51,"line":52},[49,125537,125415],{"class":62},[49,125539,25082],{"class":1505},[49,125541,125542],{"class":1505}," python\n",[19,125544,125545,27722],{},[485,125546,125547],{},"通过Termux访问设备存储",[19,125549,125550],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[39,125552,125554],{"className":118520,"code":125553,"language":118522,"meta":44,"style":44},"termux-setup-storage\n",[46,125555,125556],{"__ignoreMap":44},[49,125557,125558],{"class":51,"line":52},[49,125559,125553],{"class":62},[591,125561,125562],{},[26,125563,125564,27722,125567],{},[485,125565,125566],{},"进入HTML文件所在的目录",[591,125568,125569],{},[26,125570,125571,125572,125574],{},"使用",[46,125573,102500],{},"命令进入HTML文件所在的目录：",[39,125576,125578],{"className":118520,"code":125577,"language":118522,"meta":44,"style":44},"cd ~\u002Fyour_html_folder\n",[46,125579,125580],{"__ignoreMap":44},[49,125581,125582,125584],{"class":51,"line":52},[49,125583,102500],{"class":73},[49,125585,125586],{"class":1505}," ~\u002Fyour_html_folder\n",[591,125588,125589],{"start":59},[26,125590,125591,27722,125594,125599,125616],{},[485,125592,125593],{},"启动Python HTTP服务器",[591,125595,125596],{},[26,125597,125598],{},"运行以下命令启动一个简单的HTTP服务器：",[39,125600,125602],{"className":118520,"code":125601,"language":118522,"meta":44,"style":44},"python -m http.server 8000\n",[46,125603,125604],{"__ignoreMap":44},[49,125605,125606,125608,125610,125613],{"class":51,"line":52},[49,125607,31628],{"class":62},[49,125609,102106],{"class":73},[49,125611,125612],{"class":1505}," http.server",[49,125614,125615],{"class":73}," 8000\n",[591,125617,125618],{"start":70},[26,125619,125620,125621,125624],{},"这会在端口",[46,125622,125623],{},"8000","上启动一个Web服务器。",[23,125626,125627],{},[26,125628,125629],{},"启动服务器后，Termux会显示日志信息，例如：",[39,125631,125633],{"className":122040,"code":125632,"language":122042,"meta":122043,"style":44},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[46,125634,125635],{"__ignoreMap":44},[49,125636,125637],{"class":51,"line":52},[49,125638,125632],{},[23,125640,125641],{},[26,125642,125643],{},"这表示服务器已成功启动。",[19,125645,125646],{},[485,125647,125648],{},"在浏览器中访问HTML文件",[591,125650,125651],{},[26,125652,125653,27722,125656,125661],{},[485,125654,125655],{},"在同一设备上访问",[591,125657,125658],{},[26,125659,125660],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[39,125662,125665],{"className":125663,"code":125664,"language":72894,"meta":44,"style":44},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[46,125666,125667],{"__ignoreMap":44},[49,125668,125669,125672],{"class":51,"line":52},[49,125670,125671],{"class":66},"http:",[49,125673,125674],{"class":55},"\u002F\u002Flocalhost:8000\n",[23,125676,125677],{},[26,125678,125679,125680,125683],{},"如果HTML文件中有",[46,125681,125682],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125685,125687],{"id":125686},"_76-linux重点知识","7.6 Linux重点知识",[183,125689,125691],{"id":125690},"_761-关于点的说明","7.6.1 关于点的说明",[19,125693,125694],{},[174,125695],{"alt":44,"src":125696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125698,125699],{},"一点本目录，两点上目录",[183,125701,125703],{"id":125702},"_762-目录","7.6.2 目录",[525,125705,125707],{"id":125706},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125709,125710],{},[485,125711,125712],{},"\u002Fboot:",[19,125714,125715],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125717,125718],{},[485,125719,125720],{},"\u002Fetc:",[19,125722,125723],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125725,125726],{},[485,125727,125728],{},"\u002Flib：",[19,125730,125731],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125733,125734],{},[485,125735,125736],{},"\u002Fsys:",[19,125738,125739],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[525,125741,125743],{"id":125742},"_7622-指令集合","7.6.2.2 指令集合",[19,125745,125746],{},[485,125747,125748],{},"\u002Fbin:",[19,125750,125751],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125753,125754],{},[485,125755,125756],{},"\u002Fsbin:",[19,125758,125759],{},"只有系统管理员才能使用的程序和指令",[525,125761,125763],{"id":125762},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125765,125766],{},[485,125767,125768],{},"\u002Fdev:",[19,125770,125771],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125773,125774],{},[485,125775,125776],{},"\u002Fmedia:",[19,125778,125779],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125781,125782],{},[485,125783,125784],{},"\u002Fmnt:",[19,125786,125787],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[525,125789,125791],{"id":125790},"_7624-临时文件","7.6.2.4 临时文件",[19,125793,125794],{},[485,125795,125796],{},"\u002Frun:",[19,125798,125799],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125801,125802],{},[485,125803,125804],{},"\u002Flost+found:",[19,125806,125807],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125809,125810],{},[485,125811,125812],{},"\u002Ftmp:",[19,125814,125815],{},"这个目录是用来存放一些临时文件的",[525,125817,125819],{"id":125818},"_7625-账户","7.6.2.5 账户",[19,125821,125822],{},[485,125823,125824],{},"\u002Froot：",[19,125826,125827],{},"系统管理员的用户主目录",[19,125829,125830,27722],{},[485,125831,125832],{},"\u002Fhome",[19,125834,125835],{},"用户的主目录，以用户的账号命名的",[19,125837,125838,27722],{},[485,125839,125840],{},"\u002Fusr",[19,125842,125843],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125845,125846],{},[485,125847,125848],{},"\u002Fusr\u002Fbin：",[19,125850,125851],{},"系统用户使用的应用程序与指令",[19,125853,125854],{},[485,125855,125856],{},"\u002Fusr\u002Fsbin：",[19,125858,125859],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125861,125862],{},[485,125863,125864],{},"\u002Fusr\u002Fsrc：",[19,125866,125867],{},"内核源代码默认的放置目录",[525,125869,125871],{"id":125870},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125873,125874],{},[485,125875,125876],{},"\u002Fvar：",[19,125878,125879],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125881,125882],{},[485,125883,125884],{},"\u002Fproc:",[19,125886,125887,125888,125891],{},"管理 ",[485,125889,125890],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[525,125893,125895],{"id":125894},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125897,125898],{},[485,125899,125900],{},"\u002Fopt:",[19,125902,125903],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125905,125906],{},[485,125907,125908],{},"\u002Fsrv:",[19,125910,125911],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[183,125913,125915],{"id":125914},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125917,125918],{},[174,125919],{"alt":44,"src":125920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125922,125923],{},"windows-->linux:",[19,125925,125926],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125928,125929],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125931,125932],{},"linux传输文件到windows",[19,125934,125935],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[183,125937,125939],{"id":125938},"_764-易忘知识","7.6.4 易忘知识",[19,125941,125942],{},"操作系统内核查看",[39,125944,125945],{"className":118520,"code":122514,"language":118522,"meta":44,"style":44},[46,125946,125947],{"__ignoreMap":44},[49,125948,125949,125951],{"class":51,"line":52},[49,125950,71439],{"class":62},[49,125952,122523],{"class":73},[19,125954,125955],{},[174,125956],{"alt":44,"src":125957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125959,125960],{},[174,125961],{"alt":44,"src":125962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[39,125964,125966],{"className":118520,"code":125965,"language":118522,"meta":44,"style":44},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[46,125967,125968,125980],{"__ignoreMap":44},[49,125969,125970,125972,125975,125978],{"class":51,"line":52},[49,125971,122731],{"class":62},[49,125973,125974],{"class":1505}," mvtest",[49,125976,125977],{"class":1505}," mvtest2",[49,125979,3928],{"class":66},[49,125981,125982],{"class":51,"line":59},[49,125983,125984],{"class":62},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125986,125987],{},[174,125988],{"alt":44,"src":125989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125991,125992],{},[174,125993],{"alt":44,"src":125994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125996,125997,125998,126001],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[46,125999,126000],{},"du -a"," 可以快速查看磁盘使用细节。",[183,126003,126005],{"id":126004},"_765-vim","7.6.5 Vim",[19,126007,126008],{},[174,126009],{"alt":44,"src":126010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126012,126013],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126015,126016],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126018,126019],{},[485,126020,126021],{},"1.命令模式：",[19,126023,126024],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126026,126027],{},"x 删除当前光标所在处的字符",[19,126029,126030],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126032,126033],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126035,126036],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126038,126039],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126041,126042],{},"dd 剪切当前行",[19,126044,126045],{},"yy 复制当前行",[19,126047,126048],{},"p 粘贴剪贴板内容到光标下方",[19,126050,126051],{},"P 粘贴剪贴板内容到光标上方",[19,126053,126054],{},"u 撤销上一次操作",[19,126056,126057],{},"ctrl+r 重做上一次操作",[19,126059,126060,126062],{},[2185,126061],{}," 保存文件",[19,126064,126065,126067],{},[2036,126066],{}," 退出Vim编辑器",[19,126069,126070,126072],{},[2036,126071],{},"! 强制退出Vim编辑器，不保存修改",[19,126074,126075],{},[485,126076,126077],{},"2.输入模式：",[19,126079,126080],{},[174,126081],{"alt":44,"src":126082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126084,126085],{},[485,126086,126087],{},"3.底线命令模式：",[19,126089,126090],{},[174,126091],{"alt":44,"src":126092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126094,126095],{},"按下esc可以退出底线命令模式",[183,126097,126099],{"id":126098},"_766-apt","7.6.6 apt",[19,126101,126102],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[183,126104,126106],{"id":126105},"_767-home与root的区别","7.6.7 home与root的区别",[19,126108,126109],{},[174,126110],{"alt":44,"src":126111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126113,126114],{},[174,126115],{"alt":44,"src":126116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126118,126119],{},[174,126120],{"alt":44,"src":126121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126123,126124],{},[174,126125],{"alt":44,"src":126126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[183,126128,126130],{"id":126129},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126132,126133],{},[1630,126134,126135],{"href":126135,"rel":126136},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25113],[591,126138,126139,126142],{},[26,126140,126141],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[26,126143,126144],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126146,126147],{},[174,126148],{"alt":44,"src":126149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126151,126152],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126154,126155],{},[174,126156],{"alt":44,"src":126157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[39,126159,126161],{"className":122040,"code":126160,"language":122042,"meta":122043,"style":44},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[46,126162,126163,126168],{"__ignoreMap":44},[49,126164,126165],{"class":51,"line":52},[49,126166,126167],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[49,126169,126170],{"class":51,"line":59},[49,126171,126172],{},".\u002Fpycharm.sh\n",[19,126174,126175],{},"3️⃣创建.desktop文件",[19,126177,126178],{},[485,126179,126180],{},"原理：",[23,126182,126183,126193],{},[26,126184,126185,126186,126192],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[485,126187,126188,126191],{},[46,126189,126190],{},".desktop"," 文件"," 来识别应用。",[26,126194,126195,126197,126198],{},[46,126196,126190],{}," 文件相当于一个“应用注册表”，告诉系统：",[23,126199,126200,126203,126206,126209,126212],{},[26,126201,126202],{},"应用名字（Name）",[26,126204,126205],{},"图标（Icon）",[26,126207,126208],{},"执行命令（Exec）",[26,126210,126211],{},"分类（Categories）",[26,126213,126214],{},"是否需要终端（Terminal）",[39,126216,126218],{"className":122040,"code":126217,"language":122042,"meta":122043,"style":44},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[46,126219,126220,126225],{"__ignoreMap":44},[49,126221,126222],{"class":51,"line":52},[49,126223,126224],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[49,126226,126227],{"class":51,"line":59},[49,126228,126229],{},"nano pycharm.desktop\n",[19,126231,126232],{},"nano是一个命令行下的编辑器，也可以使用vim",[39,126234,126236],{"className":122040,"code":126235,"language":122042,"meta":122043,"style":44},"[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",[46,126237,126238,126243,126248,126253,126258,126263,126268,126273,126278,126283],{"__ignoreMap":44},[49,126239,126240],{"class":51,"line":52},[49,126241,126242],{},"[Desktop Entry]\n",[49,126244,126245],{"class":51,"line":59},[49,126246,126247],{},"Version=1.0\n",[49,126249,126250],{"class":51,"line":70},[49,126251,126252],{},"Type=Application\n",[49,126254,126255],{"class":51,"line":86},[49,126256,126257],{},"Name=PyCharm\n",[49,126259,126260],{"class":51,"line":98},[49,126261,126262],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[49,126264,126265],{"class":51,"line":121},[49,126266,126267],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[49,126269,126270],{"class":51,"line":134},[49,126271,126272],{},"Comment=JetBrains PyCharm IDE\n",[49,126274,126275],{"class":51,"line":1085},[49,126276,126277],{},"Categories=Development;IDE;\n",[49,126279,126280],{"class":51,"line":2574},[49,126281,126282],{},"Terminal=false\n",[49,126284,126285],{"class":51,"line":2586},[49,126286,126287],{},"StartupWMClass=jetbrains-pycharm\n",[23,126289,126290,126296,126302,126308],{},[26,126291,126292,126295],{},[46,126293,126294],{},"Exec"," → 点击图标时执行的命令",[26,126297,126298,126301],{},[46,126299,126300],{},"Icon"," → 显示在菜单和桌面上的图标",[26,126303,126304,126307],{},[46,126305,126306],{},"Terminal=false"," → 不打开终端",[26,126309,126310,126313],{},[46,126311,126312],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126315,126316,126317],"blockquote",{},[19,126318,126319,126320,126322,126323],{},"可以理解成 ",[46,126321,126190],{}," 文件是 Linux 的 ",[485,126324,126325],{},"快捷方式配置文件",[19,126327,126328],{},"4️⃣设置可执行权限",[39,126330,126332],{"className":122040,"code":126331,"language":122042,"meta":122043,"style":44},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[46,126333,126334],{"__ignoreMap":44},[49,126335,126336],{"class":51,"line":52},[49,126337,126331],{},[19,126339,126340],{},"5️⃣桌面图标启动的话如下：",[39,126342,126344],{"className":122040,"code":126343,"language":122042,"meta":122043,"style":44},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[46,126345,126346,126351],{"__ignoreMap":44},[49,126347,126348],{"class":51,"line":52},[49,126349,126350],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[49,126352,126353],{"class":51,"line":59},[49,126354,126355],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[591,126357,126358],{"start":70},[26,126359,126360],{},"下载Appimage文件实现软件的安装",[19,126362,126363],{},"1️⃣先下载appimage",[19,126365,126366],{},[1630,126367,126368],{"href":126368,"rel":126369},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25113],[19,126371,126372],{},[174,126373],{"alt":44,"src":126374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126376,126377],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126379,126380],{},[174,126381],{"alt":44,"src":126382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126384,126385],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126387,126388],{},[174,126389],{"alt":44,"src":126390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126392,126393],{},[174,126394],{"alt":44,"src":126395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126397,126398,126399,126402],{},"3️⃣给他们放在",[46,126400,126401],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126404,126405],{},"4️⃣给软件执行权限",[39,126407,126409],{"className":122040,"code":126408,"language":122042,"meta":122043,"style":44},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[46,126410,126411,126416],{"__ignoreMap":44},[49,126412,126413],{"class":51,"line":52},[49,126414,126415],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[49,126417,126418],{"class":51,"line":59},[49,126419,126420],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126422,126423],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[39,126425,126427],{"className":118520,"code":126426,"language":118522,"meta":44,"style":44},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[46,126428,126429,126436,126443,126449],{"__ignoreMap":44},[49,126430,126431,126433],{"class":51,"line":52},[49,126432,102500],{"class":73},[49,126434,126435],{"class":1505}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[49,126437,126438,126440],{"class":51,"line":59},[49,126439,102507],{"class":62},[49,126441,126442],{"class":1505}," .\u002Fqqmusic.desktop\n",[49,126444,126445,126447],{"class":51,"line":70},[49,126446,125491],{"class":62},[49,126448,126442],{"class":1505},[49,126450,126451,126453,126455,126457],{"class":51,"line":86},[49,126452,25825],{"class":62},[49,126454,25828],{"class":1505},[49,126456,124357],{"class":1505},[49,126458,126442],{"class":1505},[19,126460,126461,126463],{},[46,126462,102507],{},"：一个 Linux 命令，主要功能是：",[23,126465,126466,126469],{},[26,126467,126468],{},"如果文件不存在，就创建一个新的空文件",[26,126470,126471],{},"如果文件已存在，就更新该文件的最后修改时间",[39,126473,126475],{"className":122040,"code":126474,"language":122042,"meta":122043,"style":44},"[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",[46,126476,126477,126481,126486,126491,126496,126500,126505],{"__ignoreMap":44},[49,126478,126479],{"class":51,"line":52},[49,126480,126242],{},[49,126482,126483],{"class":51,"line":59},[49,126484,126485],{},"Name=QQ音乐\n",[49,126487,126488],{"class":51,"line":70},[49,126489,126490],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[49,126492,126493],{"class":51,"line":86},[49,126494,126495],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[49,126497,126498],{"class":51,"line":98},[49,126499,126252],{},[49,126501,126502],{"class":51,"line":121},[49,126503,126504],{},"Categories=Audio;Music;Player;\n",[49,126506,126507],{"class":51,"line":134},[49,126508,126509],{},"Comment=QQ Music Client for Linux\n",[19,126511,126512],{},"将文件复制进去",[19,126514,126515],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126517,126518],{},[174,126519],{"alt":44,"src":126520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126522,126523],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126525,126526],{},[174,126527],{"alt":44,"src":126528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126530,126531,126532,126535,126536,126539],{},"如果你用的不是KDE，那么也可以直接修改",[46,126533,126534],{},"qqmuic.desktop","：在exec的末尾加上",[46,126537,126538],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[39,126541,126543],{"className":122040,"code":126542,"language":122042,"meta":122043,"style":44},"[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",[46,126544,126545,126549,126553,126558,126562,126566,126570],{"__ignoreMap":44},[49,126546,126547],{"class":51,"line":52},[49,126548,126242],{},[49,126550,126551],{"class":51,"line":59},[49,126552,126485],{},[49,126554,126555],{"class":51,"line":70},[49,126556,126557],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[49,126559,126560],{"class":51,"line":86},[49,126561,126495],{},[49,126563,126564],{"class":51,"line":98},[49,126565,126252],{},[49,126567,126568],{"class":51,"line":121},[49,126569,126504],{},[49,126571,126572],{"class":51,"line":134},[49,126573,126509],{},[19,126575,126576],{},[174,126577],{"alt":44,"src":126578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126580,126581],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[39,126583,126585],{"className":122040,"code":126584,"language":122042,"meta":122043,"style":44},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[46,126586,126587],{"__ignoreMap":44},[49,126588,126589],{"class":51,"line":52},[49,126590,126584],{},[591,126592,126593],{"start":86},[26,126594,126595],{},"去Flathub上安装软件",[19,126597,126598],{},[1630,126599,126600],{"href":126600,"rel":126601},"https:\u002F\u002Fflathub.org\u002F",[25113],[19,126603,126604],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126606,126607],{},[174,126608],{"alt":44,"src":126609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[39,126611,126613],{"className":122040,"code":126612,"language":122042,"meta":122043,"style":44},"flatpak install flathub com.obsproject.Studio\n",[46,126614,126615],{"__ignoreMap":44},[49,126616,126617],{"class":51,"line":52},[49,126618,126612],{},[19,126620,126621],{},[174,126622],{"alt":44,"src":126623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126625,126626],{},"2️⃣运行软件",[19,126628,126629],{},"a.官方方式：",[19,126631,126632],{},[174,126633],{"alt":44,"src":126634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[39,126636,126637],{"className":122040,"code":126612,"language":122042,"meta":122043,"style":44},[46,126638,126639],{"__ignoreMap":44},[49,126640,126641],{"class":51,"line":52},[49,126642,126612],{},[19,126644,126645],{},"b.当普通软件运行：",[19,126647,126648],{},[174,126649],{"alt":44,"src":126650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,126652,126653],{},[174,126654],{"alt":44,"src":126655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1305,126657,126658],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":44,"searchDepth":59,"depth":59,"links":126660},[126661,126662,126667,126668,126674,126675],{"id":123393,"depth":59,"text":123394},{"id":123735,"depth":59,"text":123736,"children":126663},[126664,126665,126666],{"id":123739,"depth":70,"text":123740},{"id":123806,"depth":70,"text":123807},{"id":124067,"depth":70,"text":124068},{"id":124220,"depth":59,"text":124221},{"id":124458,"depth":59,"text":124459,"children":126669},[126670,126671,126672,126673],{"id":124510,"depth":70,"text":124511},{"id":124796,"depth":70,"text":124797},{"id":125067,"depth":70,"text":125068},{"id":125326,"depth":70,"text":125327},{"id":125385,"depth":59,"text":125386},{"id":125686,"depth":59,"text":125687,"children":126676},[126677,126678,126679,126680,126681,126682,126683,126684],{"id":125690,"depth":70,"text":125691},{"id":125702,"depth":70,"text":125703},{"id":125914,"depth":70,"text":125915},{"id":125938,"depth":70,"text":125939},{"id":126004,"depth":70,"text":126005},{"id":126098,"depth":70,"text":126099},{"id":126105,"depth":70,"text":126106},{"id":126129,"depth":70,"text":126130},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123385,"description":1327},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126691,"title":126692,"body":126693,"description":1327,"extension":1328,"meta":126697,"navigation":1330,"path":126698,"seo":126699,"stem":126700,"__hash__":126701},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126694,"toc":126695},[],{"title":44,"searchDepth":59,"depth":59,"links":126696},[],{"category":31511},"\u002Fwiki\u002F2025-01-27-linux",{"title":126692,"description":1327},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126703,"title":126704,"body":126705,"description":126709,"extension":1328,"meta":127100,"navigation":1330,"path":127101,"seo":127102,"stem":127103,"__hash__":127104},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126706,"toc":127098},[126707,126710,126714,126731,126734,126787,126791,126793,126833,126842,126846,126849,127090,127095],[19,126708,126709],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126711,126713],{"id":126712},"_1ubuntu环境配置","1.Ubuntu环境配置",[591,126715,126716,126719,126722,126725,126728],{},[26,126717,126718],{},"ubuntu环境换源",[26,126720,126721],{},"安装cuda",[26,126723,126724],{},"安装miniconda",[26,126726,126727],{},"安装pytorch",[26,126729,126730],{},"安装genesis",[19,126732,126733],{},"参考链接：",[39,126735,126737],{"className":25070,"code":126736,"language":25072,"meta":44,"style":44},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[46,126738,126739],{"__ignoreMap":44},[49,126740,126741,126744,126747,126750,126752,126755,126758,126760,126763,126766,126768,126771,126774,126776,126779,126782,126784],{"class":51,"line":52},[49,126742,126743],{"class":62},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[49,126745,126746],{"class":1505},"=blogdetail",[49,126748,126749],{"class":66},"&sharetype",[49,126751,1448],{"class":109},[49,126753,126754],{"class":1505},"blogdetail",[49,126756,126757],{"class":66},"&sharerId",[49,126759,1448],{"class":109},[49,126761,126762],{"class":1505},"144728092",[49,126764,126765],{"class":66},"&sharerefer",[49,126767,1448],{"class":109},[49,126769,126770],{"class":1505},"PC",[49,126772,126773],{"class":66},"&sharesource",[49,126775,1448],{"class":109},[49,126777,126778],{"class":1505},"qq_69379513",[49,126780,126781],{"class":66},"&sharefrom",[49,126783,1448],{"class":109},[49,126785,126786],{"class":1505},"from_link\n",[10,126788,126790],{"id":126789},"_2genesis-报错issue","2.Genesis 报错issue",[19,126792,126733],{},[39,126794,126795],{"className":25070,"code":126736,"language":25072,"meta":44,"style":44},[46,126796,126797],{"__ignoreMap":44},[49,126798,126799,126801,126803,126805,126807,126809,126811,126813,126815,126817,126819,126821,126823,126825,126827,126829,126831],{"class":51,"line":52},[49,126800,126743],{"class":62},[49,126802,126746],{"class":1505},[49,126804,126749],{"class":66},[49,126806,1448],{"class":109},[49,126808,126754],{"class":1505},[49,126810,126757],{"class":66},[49,126812,1448],{"class":109},[49,126814,126762],{"class":1505},[49,126816,126765],{"class":66},[49,126818,1448],{"class":109},[49,126820,126770],{"class":1505},[49,126822,126773],{"class":66},[49,126824,1448],{"class":109},[49,126826,126778],{"class":1505},[49,126828,126781],{"class":66},[49,126830,1448],{"class":109},[49,126832,126786],{"class":1505},[39,126834,126836],{"className":25070,"code":126835,"language":25072,"meta":44,"style":44},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[46,126837,126838],{"__ignoreMap":44},[49,126839,126840],{"class":51,"line":52},[49,126841,126835],{"class":62},[10,126843,126845],{"id":126844},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126847,126848],{},"hello_robot.py",[39,126850,126852],{"className":31626,"code":126851,"language":31628,"meta":44,"style":44},"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",[46,126853,126854,126860,126875,126879,126891,126903,126907,126920,126924,126943,126953,126963,126977,126981,126985,126990,126994,127004,127011,127025,127032,127042,127047,127051,127069,127074,127078,127085],{"__ignoreMap":44},[49,126855,126856,126858],{"class":51,"line":52},[49,126857,31640],{"class":109},[49,126859,46553],{"class":66},[49,126861,126862,126865,126868,126870,126872],{"class":51,"line":59},[49,126863,126864],{"class":66},"os.environ[",[49,126866,126867],{"class":1505},"'PYOPENGL_PLATFORM'",[49,126869,5697],{"class":66},[49,126871,1448],{"class":109},[49,126873,126874],{"class":1505}," 'glx'\n",[49,126876,126877],{"class":51,"line":70},[49,126878,3654],{"emptyLinePlaceholder":1330},[49,126880,126881,126883,126886,126888],{"class":51,"line":86},[49,126882,31640],{"class":109},[49,126884,126885],{"class":66}," genesis ",[49,126887,32631],{"class":109},[49,126889,126890],{"class":66}," gs\n",[49,126892,126893,126895,126898,126900],{"class":51,"line":98},[49,126894,31985],{"class":109},[49,126896,126897],{"class":66}," pynput ",[49,126899,31640],{"class":109},[49,126901,126902],{"class":66}," keyboard\n",[49,126904,126905],{"class":51,"line":121},[49,126906,3654],{"emptyLinePlaceholder":1330},[49,126908,126909,126912,126915,126917],{"class":51,"line":134},[49,126910,126911],{"class":66},"gs.init(",[49,126913,126914],{"class":6468},"backend",[49,126916,1448],{"class":109},[49,126918,126919],{"class":66},"gs.gpu)\n",[49,126921,126922],{"class":51,"line":1085},[49,126923,3654],{"emptyLinePlaceholder":1330},[49,126925,126926,126929,126931,126934,126937,126939,126941],{"class":51,"line":2574},[49,126927,126928],{"class":66},"scene ",[49,126930,1448],{"class":109},[49,126932,126933],{"class":66}," gs.Scene(",[49,126935,126936],{"class":6468},"show_viewer",[49,126938,1448],{"class":109},[49,126940,32724],{"class":73},[49,126942,1409],{"class":66},[49,126944,126945,126948,126950],{"class":51,"line":2586},[49,126946,126947],{"class":66},"plane ",[49,126949,1448],{"class":109},[49,126951,126952],{"class":66}," scene.add_entity(gs.morphs.Plane())\n",[49,126954,126955,126958,126960],{"class":51,"line":2867},[49,126956,126957],{"class":66},"franka ",[49,126959,1448],{"class":109},[49,126961,126962],{"class":66}," scene.add_entity(\n",[49,126964,126965,126968,126970,126972,126975],{"class":51,"line":2872},[49,126966,126967],{"class":66},"    gs.morphs.MJCF(",[49,126969,46602],{"class":6468},[49,126971,1448],{"class":109},[49,126973,126974],{"class":1505},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[49,126976,39295],{"class":66},[49,126978,126979],{"class":51,"line":2878},[49,126980,1409],{"class":66},[49,126982,126983],{"class":51,"line":2883},[49,126984,3654],{"emptyLinePlaceholder":1330},[49,126986,126987],{"class":51,"line":2897},[49,126988,126989],{"class":66},"scene.build()\n",[49,126991,126992],{"class":51,"line":2902},[49,126993,3654],{"emptyLinePlaceholder":1330},[49,126995,126996,126998,127001],{"class":51,"line":2908},[49,126997,33195],{"class":109},[49,126999,127000],{"class":62}," on_press",[49,127002,127003],{"class":66},"(key):\n",[49,127005,127006,127009],{"class":51,"line":2929},[49,127007,127008],{"class":109},"    try",[49,127010,4993],{"class":66},[49,127012,127013,127015,127018,127020,127023],{"class":51,"line":2934},[49,127014,3751],{"class":109},[49,127016,127017],{"class":66}," key.char ",[49,127019,4203],{"class":109},[49,127021,127022],{"class":1505}," 'q'",[49,127024,4993],{"class":66},[49,127026,127027,127029],{"class":51,"line":2948},[49,127028,16982],{"class":109},[49,127030,127031],{"class":73}," False\n",[49,127033,127034,127037,127040],{"class":51,"line":2953},[49,127035,127036],{"class":109},"    except",[49,127038,127039],{"class":73}," AttributeError",[49,127041,4993],{"class":66},[49,127043,127044],{"class":51,"line":2982},[49,127045,127046],{"class":109},"        pass\n",[49,127048,127049],{"class":51,"line":2987},[49,127050,3654],{"emptyLinePlaceholder":1330},[49,127052,127053,127056,127058,127061,127064,127066],{"class":51,"line":3004},[49,127054,127055],{"class":66},"listener ",[49,127057,1448],{"class":109},[49,127059,127060],{"class":66}," keyboard.Listener(",[49,127062,127063],{"class":6468},"on_press",[49,127065,1448],{"class":109},[49,127067,127068],{"class":66},"on_press)\n",[49,127070,127071],{"class":51,"line":3009},[49,127072,127073],{"class":66},"listener.start()\n",[49,127075,127076],{"class":51,"line":3014},[49,127077,3654],{"emptyLinePlaceholder":1330},[49,127079,127080,127082],{"class":51,"line":3019},[49,127081,109887],{"class":109},[49,127083,127084],{"class":66}," listener.running:\n",[49,127086,127087],{"class":51,"line":3033},[49,127088,127089],{"class":66},"    scene.step()\n",[19,127091,127092],{},[174,127093],{"alt":44,"src":127094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1305,127096,127097],{},"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":44,"searchDepth":59,"depth":59,"links":127099},[],{"category":24627},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126704,"description":126709},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127106,"title":127107,"body":127108,"description":1327,"extension":1328,"meta":127123,"navigation":1330,"path":127124,"seo":127125,"stem":127126,"__hash__":127127},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127109,"toc":127120},[127110,127113,127117],[10,127111,127107],{"id":127112},"_1-基础知识",[14,127114,127116],{"id":127115},"_11-js的组成","1.1 js的组成",[19,127118,127119],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":44,"searchDepth":59,"depth":59,"links":127121},[127122],{"id":127115,"depth":59,"text":127116},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127107,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127129,"title":127130,"body":127131,"description":1327,"extension":1328,"meta":127270,"navigation":1330,"path":127271,"seo":127272,"stem":127273,"__hash__":127274},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127132,"toc":127258},[127133,127136,127140,127143,127147,127157,127161,127164,127167,127170,127174,127181,127187,127191,127197,127208,127212,127215,127219,127222,127226,127229,127233,127236,127240,127243,127246,127249,127252,127255],[10,127134,127130],{"id":127135},"_2-vscode必备内容",[14,127137,127139],{"id":127138},"_21-标签分类","2.1 标签分类",[19,127141,127142],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127144,127146],{"id":127145},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127148,127149,127150,127152,127153,127156],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[46,127151,1618],{}," 然后按 ",[46,127154,127155],{},"Tab","，快速自动生成基本结构。",[14,127158,127160],{"id":127159},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127162,127163],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127165,127166],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127168,127169],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127171,127173],{"id":127172},"_24-视图缩放","2.4 视图缩放",[19,127175,127176,127177,127180],{},"缩放视图 ",[46,127178,127179],{},"ctrl+"," 可实现代码增大。",[19,127182,127183,127186],{},[46,127184,127185],{},"ctrl-"," 可实现代码减小。",[14,127188,127190],{"id":127189},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127192,127193,127194,29633],{},"VSCode 新建文件快捷键为 ",[46,127195,127196],{},"ctrl+N",[19,127198,127199,127200,127203,127204,127207],{},"保存快捷键为 ",[46,127201,127202],{},"ctrl+S","，将文本保存为 ",[46,127205,127206],{},".html"," 文件。",[14,127209,127211],{"id":127210},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127213,127214],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127216,127218],{"id":127217},"_27-vscode-icons","2.7 vscode-icons",[19,127220,127221],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127223,127225],{"id":127224},"_28-easy-less","2.8 Easy LESS",[19,127227,127228],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127230,127232],{"id":127231},"_29-会了吧插件","2.9 会了吧插件",[19,127234,127235],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127237,127239],{"id":127238},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127241,127242],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127244,127245],{},"②选定多个相同的单词:ctrl+D",[19,127247,127248],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127250,127251],{},"④全局替换某些单词:ctrl+h",[19,127253,127254],{},"⑤快速定位到某一行:ctrl+g",[19,127256,127257],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":44,"searchDepth":59,"depth":59,"links":127259},[127260,127261,127262,127263,127264,127265,127266,127267,127268,127269],{"id":127138,"depth":59,"text":127139},{"id":127145,"depth":59,"text":127146},{"id":127159,"depth":59,"text":127160},{"id":127172,"depth":59,"text":127173},{"id":127189,"depth":59,"text":127190},{"id":127210,"depth":59,"text":127211},{"id":127217,"depth":59,"text":127218},{"id":127224,"depth":59,"text":127225},{"id":127231,"depth":59,"text":127232},{"id":127238,"depth":59,"text":127239},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127130,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127276,"title":127277,"body":127278,"description":1327,"extension":1328,"meta":127437,"navigation":1330,"path":127438,"seo":127439,"stem":127440,"__hash__":127441},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127279,"toc":127429},[127280,127283,127287,127297,127303,127309,127313,127322,127326,127331,127334,127337,127341,127344,127354,127363,127372,127381,127391,127398,127403,127408,127421],[10,127281,127277],{"id":127282},"_3-html文本与容器标签",[14,127284,127286],{"id":127285},"_31-标题标签","3.1 标题标签",[19,127288,127289,127292,127293,127296],{},[46,127290,127291],{},"\u003Ch1>","我是一级标签",[46,127294,127295],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127298,127299,127292,127301],{},[46,127300,127291],{},[46,127302,127295],{},[19,127304,124559,127305,127308],{},[46,127306,127307],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127310,127312],{"id":127311},"_32-段落标签","3.2 段落标签",[19,127314,127315,127318,127319],{},[46,127316,127317],{},"\u003Cp>","....",[46,127320,127321],{},"\u003C\u002Fp>",[14,127323,127325],{"id":127324},"_33-换行标签","3.3 换行标签",[19,127327,127328],{},[46,127329,127330],{},"\u003Cbr \u002F>",[19,127332,127333],{},"具有强制换行的作用",[19,127335,127336],{},"单标签",[14,127338,127340],{"id":127339},"_34-文本格式化标签","3.4 文本格式化标签",[19,127342,127343],{},"提供粗体、斜体和下划线等效果",[19,127345,127346,127347,83765,127350,127353],{},"加粗：",[46,127348,127349],{},"\u003Cstrong>...\u003C\u002Fstrong>",[46,127351,127352],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127355,127356,127357,83765,127360,127353],{},"斜体：",[46,127358,127359],{},"\u003Cem>...\u003C\u002Fem>",[46,127361,127362],{},"\u003Ci>...\u003C\u002Fi>",[19,127364,127365,127366,83765,127369,127353],{},"删除线：",[46,127367,127368],{},"\u003Cdel>...\u003C\u002Fdel>",[46,127370,127371],{},"\u003Cs>...\u003C\u002Fs>",[19,127373,127374,127375,83765,127378,127353],{},"下划线：",[46,127376,127377],{},"\u003Cins>...\u003C\u002Fins>",[46,127379,127380],{},"\u003Cu>...\u003C\u002Fu>",[14,127382,127384,127385,19660,127388,103917],{"id":127383},"_35-div和span标签","3.5 ",[46,127386,127387],{},"\u003Cdiv>",[46,127389,127390],{},"\u003Cspan>",[19,127392,127393,102242,127395,127397],{},[46,127394,127387],{},[46,127396,127390],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127399,127400],{},[46,127401,127402],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127404,127405],{},[46,127406,127407],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127409,127410,127411,127413,127414,127416,127417,127420],{},"两者特点：①",[46,127412,127387],{}," 标签用来布局，但一行通常只放一个 ",[46,127415,127387],{},"。可以理解为一个大盒子，独占一行，在 ",[46,127418,127419],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127422,1271,127423,127425,127426,127428],{},[46,127424,127390],{}," 标签也可用于布局，一行可以放多个 ",[46,127427,127390],{},"，可理解为小盒子。",{"title":44,"searchDepth":59,"depth":59,"links":127430},[127431,127432,127433,127434,127435],{"id":127285,"depth":59,"text":127286},{"id":127311,"depth":59,"text":127312},{"id":127324,"depth":59,"text":127325},{"id":127339,"depth":59,"text":127340},{"id":127383,"depth":59,"text":127436},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127277,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127443,"title":127444,"body":127445,"description":1327,"extension":1328,"meta":127641,"navigation":1330,"path":127642,"seo":127643,"stem":127644,"__hash__":127645},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127446,"toc":127633},[127447,127450,127454,127457,127463,127470,127476,127482,127485,127488,127491,127494,127497,127500,127503,127507,127510,127513,127516,127522,127528,127534,127541,127545,127551,127557,127560,127563,127569,127575,127581,127584,127587,127591,127594,127604,127610,127614,127623,127627,127630],[10,127448,127444],{"id":127449},"_4-html图像与链接",[14,127451,127453],{"id":127452},"_41-图像标签","4.1 图像标签",[19,127455,127456],{},"（1）标签",[19,127458,127459,127462],{},[46,127460,127461],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127464,127465,127466,127469],{},"src是",[46,127467,127468],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127471,127472,127473],{},"alt:文本，替换文本。图像不能显示的文字 ",[46,127474,127475],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127477,127478,127479],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[46,127480,127481],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127483,127484],{},"width:像素，设置图像的宽度",[19,127486,127487],{},"height:像素，设置图像的高度",[19,127489,127490],{},"border：像素，设置图像的边框粗细",[19,127492,127493],{},"（2）图像标签属性的注意点：",[19,127495,127496],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127498,127499],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127501,127502],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127504,127506],{"id":127505},"_42-路径注意要点","4.2 路径注意要点：",[19,127508,127509],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127511,127512],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127514,127515],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127517,127518,127519],{},"①同一级路径：图像文件位于HTML文件同一级，如",[46,127520,127521],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127523,127524,127525],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[46,127526,127527],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127529,127530,127531],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[46,127532,127533],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127535,127536,127537,1643],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[1630,127538,127539],{"href":127539,"rel":127540},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25113],[14,127542,127544],{"id":127543},"_43-超链接标签","4.3 超链接标签",[19,127546,127547,127550],{},[46,127548,127549],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127552,127553,127554],{},"①语法格式：",[46,127555,127556],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127558,127559],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127561,127562],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127564,127565,127566],{},"③链接分类：外部链接：",[46,127567,127568],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127570,127571,127572],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[46,127573,127574],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127576,127577,127578],{},"空链接：如果当时没有确定链接目标时，",[46,127579,127580],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127582,127583],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127585,127586],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127588,127590],{"id":127589},"_44-锚点链接","4.4 锚点链接",[19,127592,127593],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127595,127596,127597,127600,127601],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[46,127598,127599],{},"\u003Ca href=\"#two\">","第二级",[46,127602,127603],{},"\u003C\u002Fa>",[19,127605,127606,127607],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[46,127608,127609],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127611,127613],{"id":127612},"_45-注释标签","4.5 注释标签",[19,127615,127616,127619,127620],{},[46,127617,127618],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[46,127621,127622],{},"ctrl+\u002F",[14,127624,127626],{"id":127625},"_46-特殊字符","4.6 特殊字符",[19,127628,127629],{},"可以实现添加多个空格",[174,127631],{"style":176,"src":127632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":44,"searchDepth":59,"depth":59,"links":127634},[127635,127636,127637,127638,127639,127640],{"id":127452,"depth":59,"text":127453},{"id":127505,"depth":59,"text":127506},{"id":127543,"depth":59,"text":127544},{"id":127589,"depth":59,"text":127590},{"id":127612,"depth":59,"text":127613},{"id":127625,"depth":59,"text":127626},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127444,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127647,"title":127648,"body":127649,"description":1327,"extension":1328,"meta":127940,"navigation":1330,"path":127941,"seo":127942,"stem":127943,"__hash__":127944},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127650,"toc":127931},[127651,127654,127658,127661,127664,127667,127670,127673,127676,127679,127682,127685,127705,127711,127715,127718,127721,127724,127727,127730,127733,127737,127740,127743,127746,127749,127762,127767,127770,127773,127786,127789,127792,127795,127798,127801,127805,127808,127815,127818,127821,127824,127827,127830,127836,127839,127842,127848,127851,127854,127857,127863,127866,127869,127883,127890,127893,127896,127903,127912,127915,127918,127921,127925,127928],[10,127652,127648],{"id":127653},"_5-html表格列表与表单",[14,127655,127657],{"id":127656},"_51-表格标签","5.1 表格标签",[19,127659,127660],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,127662,127663],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,127665,127666],{},"②表格基本语法：",[174,127668],{"style":176,"src":127669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,127671,127672],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[174,127674],{"style":176,"src":127675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,127677,127678],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[174,127680],{"style":176,"src":127681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,127683,127684],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127686,127687,127690,127691,127693,127694,127697,127698,127700,127701,127704],{},[46,127688,127689],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[46,127692,127689],{},"内部必须拥有",[46,127695,127696],{},"\u003Ctr>","标签，一般位于第一行，",[46,127699,127689],{},"比",[46,127702,127703],{},"\u003Cth>","范围广",[19,127706,127707,127710],{},[46,127708,127709],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127712,127714],{"id":127713},"_52-合并单元格","5.2 合并单元格",[19,127716,127717],{},"（1）合并单元格方式：",[19,127719,127720],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127722,127723],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127725,127726],{},"（2）目标单元格：",[19,127728,127729],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127731,127732],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127734,127736],{"id":127735},"_53-列表标签","5.3 列表标签",[19,127738,127739],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127741,127742],{},"①无序列表：",[174,127744],{"style":176,"src":127745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127747,127748],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127750,127751,127754,127755,127758,127759,127761],{},[46,127752,127753],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[46,127756,127757],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[46,127760,127753],{},"中输入其他标签或文字是不对的",[19,127763,127764,127766],{},[46,127765,127757],{},"之间相当于一个容器，可以容纳所有元素",[19,127768,127769],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127771,127772],{},"在css中去除前边的小圆点采用如下代码:",[39,127774,127776],{"className":41,"code":127775,"language":43,"meta":44,"style":44},"list-style: none;\n",[46,127777,127778],{"__ignoreMap":44},[49,127779,127780,127783],{"class":51,"line":52},[49,127781,127782],{"class":147},"list-style",[49,127784,127785],{"class":66},": none;\n",[19,127787,127788],{},"②有序列表：",[174,127790],{"style":176,"src":127791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127793,127794],{},"③自定义列表：",[174,127796],{"style":176,"src":127797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[174,127799],{"style":176,"src":127800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127802,127804],{"id":127803},"_54-表单标签","5.4 表单标签",[19,127806,127807],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127809,127810,127811,127814],{},"（1）表单域：包含单元素的区域，",[46,127812,127813],{},"\u003Cform>","标签可以实现信息的收集和传递。",[174,127816],{"style":176,"src":127817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127819,127820],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127822,127823],{},"表单元素提交必须有name属性",[19,127825,127826],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127828,127829],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127831,1265,127832,127835],{},[46,127833,127834],{},"\u003Cinput>","输入表单元素",[174,127837],{"style":176,"src":127838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[174,127840],{"style":176,"src":127841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127843,127844,127845],{},"单选按钮：",[46,127846,127847],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[174,127849],{"style":176,"src":127850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127852,127853],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[174,127855],{"style":176,"src":127856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127858,127859,127862],{},[485,127860,127861],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127864,127865],{},"②select下拉表单元素：可以节约页面控件",[174,127867],{"style":176,"src":127868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127870,127871,15047,127873,127876,127877,127879,127880,127882],{},[485,127872,1432],{},[46,127874,127875],{},"\u003Cselect>","中至少包含一对",[46,127878,103938],{},"；在",[46,127881,103938],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127884,127885,127886,127889],{},"③",[46,127887,127888],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[174,127891],{"style":176,"src":127892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127894,127895],{},"3行20列",[14,127897,127899,127900,103917],{"id":127898},"_55-lable标签","5.5 ",[46,127901,127902],{},"\u003Clable>",[19,127904,127905,127906,127908,127909,127911],{},"它不是表单标签，但常常与表单标签搭配使用，",[46,127907,127902],{},"标签用于绑定一个表单标签，当点击",[46,127910,127902],{},"标签内的文本",[19,127913,127914],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[174,127916],{"style":176,"src":127917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[174,127919],{"style":176,"src":127920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127922,127924],{"id":127923},"_56-实例","5.6 实例",[174,127926],{"style":176,"src":127927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1305,127929,127930],{},"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":44,"searchDepth":59,"depth":59,"links":127932},[127933,127934,127935,127936,127937,127939],{"id":127656,"depth":59,"text":127657},{"id":127713,"depth":59,"text":127714},{"id":127735,"depth":59,"text":127736},{"id":127803,"depth":59,"text":127804},{"id":127898,"depth":59,"text":127938},"5.5 \u003Clable>标签",{"id":127923,"depth":59,"text":127924},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127648,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127946,"title":127947,"body":127948,"description":1327,"extension":1328,"meta":128496,"navigation":1330,"path":128497,"seo":128498,"stem":128499,"__hash__":128500},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127949,"toc":128471},[127950,127953,127957,127960,127963,127967,127970,127973,127976,127979,127982,127985,127988,127992,127995,127999,128002,128005,128008,128012,128015,128018,128021,128027,128030,128033,128036,128039,128042,128045,128048,128081,128085,128088,128091,128094,128098,128101,128104,128107,128110,128113,128117,128120,128123,128126,128130,128133,128137,128140,128144,128147,128152,128156,128159,128163,128166,128169,128172,128175,128202,128205,128209,128212,128215,128220,128223,128226,128230,128233,128237,128240,128243,128246,128250,128253,128256,128259,128263,128266,128269,128272,128276,128280,128283,128323,128326,128330,128337,128340,128344,128347,128393,128397,128400,128403,128406,128434,128438,128441,128468],[10,127951,127947],{"id":127952},"_6-css语法与文本样式",[14,127954,127956],{"id":127955},"_61-css语法规范","6.1 css语法规范",[19,127958,127959],{},"由两部分组成，选择器及一条或多条声明",[174,127961],{"style":176,"src":127962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,127964,127965],{},[485,127966,1432],{},[19,127968,127969],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,127971,127972],{},"②属性与属性值以“键值对”的形式出现",[19,127974,127975],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,127977,127978],{},"④属性和属性值之间用英文“;”分开",[174,127980],{"style":176,"src":127981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[174,127983],{"style":176,"src":127984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[174,127986],{"style":176,"src":127987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127989,127991],{"id":127990},"_62-css选择器","6.2 css选择器",[19,127993,127994],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[183,127996,127998],{"id":127997},"_621-标签选择器","6.2.1 标签选择器",[19,128000,128001],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128003,128004],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[174,128006],{"style":176,"src":128007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[183,128009,128011],{"id":128010},"_622-类选择器","6.2.2 类选择器",[19,128013,128014],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128016,128017],{},"②样例",[174,128019],{"style":176,"src":128020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128022,128023,128024,128026],{},"③ ",[485,128025,127861],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128028,128029],{},"可以理解为给这个标签起了个名字，来表示；",[19,128031,128032],{},"长名称或词组可以使用横线来为选择器命名；",[19,128034,128035],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128037,128038],{},"命名要有意义；",[174,128040],{"style":176,"src":128041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128043,128044],{},"类选择器也可以指定特殊的元素p.center{}",[19,128046,128047],{},"p.center和.center都对",[39,128049,128051],{"className":41,"code":128050,"language":43,"meta":44,"style":44},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[46,128052,128053,128058,128067,128077],{"__ignoreMap":44},[49,128054,128055],{"class":51,"line":52},[49,128056,128057],{"class":55},"\u002F* 类选择器指定特殊元素 *\u002F\n",[49,128059,128060,128062,128065],{"class":51,"line":59},[49,128061,19],{"class":147},[49,128063,128064],{"class":62},".center",[49,128066,67],{"class":66},[49,128068,128069,128071,128073,128075],{"class":51,"line":70},[49,128070,71760],{"class":73},[49,128072,77],{"class":66},[49,128074,52835],{"class":73},[49,128076,83],{"class":66},[49,128078,128079],{"class":51,"line":86},[49,128080,137],{"class":66},[183,128082,128084],{"id":128083},"_623-多类名使用","6.2.3 多类名使用",[19,128086,128087],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[174,128089],{"style":176,"src":128090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128092,128093],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[183,128095,128097],{"id":128096},"_624-id选择器","6.2.4 id选择器",[19,128099,128100],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128102,128103],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[174,128105],{"style":176,"src":128106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128108,128109],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128111,128112],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[183,128114,128116],{"id":128115},"_625-通配符选择器","6.2.5 通配符选择器",[19,128118,128119],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128121,128122],{},"* {",[19,128124,128125],{},"color=\"red\"}",[183,128127,128129],{"id":128128},"_626-总结","6.2.6 总结",[174,128131],{"style":176,"src":128132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128134,128136],{"id":128135},"_63-css字体属性","6.3 css字体属性",[19,128138,128139],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[183,128141,128143],{"id":128142},"_631-字体系列","6.3.1 字体系列",[19,128145,128146],{},"font-family: '宋体';",[19,128148,128149,128151],{},[485,128150,1432],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[183,128153,128155],{"id":128154},"_632-字体大小","6.3.2 字体大小",[19,128157,128158],{},"font-size: 20px",[19,128160,128161,27722],{},[485,128162,127861],{},[19,128164,128165],{},"①px（像素）大小是网页的最常用单位",[19,128167,128168],{},"②谷歌浏览器默认为16px",[19,128170,128171],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128173,128174],{},"④可以给body指定整个页面的大小：会自动引用",[39,128176,128178],{"className":41,"code":128177,"language":43,"meta":44,"style":44},"body {\n  font-size: 16px;\n}\n",[46,128179,128180,128186,128198],{"__ignoreMap":44},[49,128181,128182,128184],{"class":51,"line":52},[49,128183,53042],{"class":147},[49,128185,67],{"class":66},[49,128187,128188,128190,128192,128194,128196],{"class":51,"line":59},[49,128189,71859],{"class":73},[49,128191,77],{"class":66},[49,128193,1992],{"class":73},[49,128195,110],{"class":109},[49,128197,83],{"class":66},[49,128199,128200],{"class":51,"line":70},[49,128201,137],{"class":66},[19,128203,128204],{},"⑤标题标签比较特殊，需要单独指定大小",[183,128206,128208],{"id":128207},"_633-字体粗细","6.3.3 字体粗细",[19,128210,128211],{},"font-weight: bold;",[19,128213,128214],{},"font-weight: 100；",[19,128216,128217,128219],{},[485,128218,1432],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128221,128222],{},"font-weight= 400;",[19,128224,128225],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[183,128227,128229],{"id":128228},"_634-文字样式","6.3.4 文字样式",[19,128231,128232],{},"font-style: normal；",[19,128234,128235,27722],{},[485,128236,305],{},[19,128238,128239],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128241,128242],{},"②italic：浏览器会显示斜体的字体样式",[174,128244],{"style":176,"src":128245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[183,128247,128249],{"id":128248},"_635-字体符合属性","6.3.5 字体符合属性",[174,128251],{"style":176,"src":128252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[174,128254],{"style":176,"src":128255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128257,128258],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128260,128261,27722],{},[485,128262,127861],{},[19,128264,128265],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128267,128268],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128270,128271],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128273,128275],{"id":128274},"_64-css-test文本属性","6.4 css test文本属性",[183,128277,128279],{"id":128278},"_641-文本颜色","6.4.1 文本颜色",[19,128281,128282],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[39,128284,128286],{"className":41,"code":128285,"language":43,"meta":44,"style":44},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[46,128287,128288,128293,128299,128309,128314,128319],{"__ignoreMap":44},[49,128289,128290],{"class":51,"line":52},[49,128291,128292],{"class":55},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[49,128294,128295,128297],{"class":51,"line":59},[49,128296,19],{"class":147},[49,128298,67],{"class":66},[49,128300,128301,128303,128305,128307],{"class":51,"line":70},[49,128302,72135],{"class":73},[49,128304,77],{"class":66},[49,128306,58660],{"class":73},[49,128308,83],{"class":66},[49,128310,128311],{"class":51,"line":86},[49,128312,128313],{"class":55},"  \u002F* color: #ff0000; *\u002F\n",[49,128315,128316],{"class":51,"line":98},[49,128317,128318],{"class":55},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[49,128320,128321],{"class":51,"line":121},[49,128322,137],{"class":66},[174,128324],{"style":176,"src":128325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[183,128327,128329],{"id":128328},"_642-对齐文本","6.4.2 对齐文本",[19,128331,128332,128333,128336],{},"text-align属于用于设置元素内文本内容的 ",[485,128334,128335],{},"水平对齐"," 方式",[19,128338,128339],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[183,128341,128343],{"id":128342},"_643-装饰文本","6.4.3 装饰文本",[19,128345,128346],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[39,128348,128350],{"className":41,"code":128349,"language":43,"meta":44,"style":44},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[46,128351,128352,128358,128368,128372,128378,128389],{"__ignoreMap":44},[49,128353,128354,128356],{"class":51,"line":52},[49,128355,1630],{"class":147},[49,128357,67],{"class":66},[49,128359,128360,128362,128364,128366],{"class":51,"line":59},[49,128361,71736],{"class":73},[49,128363,77],{"class":66},[49,128365,460],{"class":73},[49,128367,83],{"class":66},[49,128369,128370],{"class":51,"line":70},[49,128371,137],{"class":66},[49,128373,128374,128376],{"class":51,"line":86},[49,128375,19],{"class":147},[49,128377,67],{"class":66},[49,128379,128380,128382,128384,128387],{"class":51,"line":98},[49,128381,71736],{"class":73},[49,128383,77],{"class":66},[49,128385,128386],{"class":73},"underline",[49,128388,83],{"class":66},[49,128390,128391],{"class":51,"line":121},[49,128392,137],{"class":66},[183,128394,128396],{"id":128395},"_644-文本缩进","6.4.4 文本缩进",[19,128398,128399],{},"实现文本的第一行首行缩进自己指定的距离",[19,128401,128402],{},"20px往右边走；-20px往左边走",[19,128404,128405],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[39,128407,128409],{"className":41,"code":128408,"language":43,"meta":44,"style":44},"p {\n  text-indent: 2em;\n}\n",[46,128410,128411,128417,128430],{"__ignoreMap":44},[49,128412,128413,128415],{"class":51,"line":52},[49,128414,19],{"class":147},[49,128416,67],{"class":66},[49,128418,128419,128422,128424,128426,128428],{"class":51,"line":59},[49,128420,128421],{"class":73},"  text-indent",[49,128423,77],{"class":66},[49,128425,1478],{"class":73},[49,128427,24802],{"class":109},[49,128429,83],{"class":66},[49,128431,128432],{"class":51,"line":70},[49,128433,137],{"class":66},[183,128435,128437],{"id":128436},"_645-行间距","6.4.5 行间距",[19,128439,128440],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[39,128442,128444],{"className":41,"code":128443,"language":43,"meta":44,"style":44},"p {\n  line-height: 1.6;\n}\n",[46,128445,128446,128452,128464],{"__ignoreMap":44},[49,128447,128448,128450],{"class":51,"line":52},[49,128449,19],{"class":147},[49,128451,67],{"class":66},[49,128453,128454,128457,128459,128462],{"class":51,"line":59},[49,128455,128456],{"class":73},"  line-height",[49,128458,77],{"class":66},[49,128460,128461],{"class":73},"1.6",[49,128463,83],{"class":66},[49,128465,128466],{"class":51,"line":70},[49,128467,137],{"class":66},[1305,128469,128470],{},"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":44,"searchDepth":59,"depth":59,"links":128472},[128473,128474,128482,128489],{"id":127955,"depth":59,"text":127956},{"id":127990,"depth":59,"text":127991,"children":128475},[128476,128477,128478,128479,128480,128481],{"id":127997,"depth":70,"text":127998},{"id":128010,"depth":70,"text":128011},{"id":128083,"depth":70,"text":128084},{"id":128096,"depth":70,"text":128097},{"id":128115,"depth":70,"text":128116},{"id":128128,"depth":70,"text":128129},{"id":128135,"depth":59,"text":128136,"children":128483},[128484,128485,128486,128487,128488],{"id":128142,"depth":70,"text":128143},{"id":128154,"depth":70,"text":128155},{"id":128207,"depth":70,"text":128208},{"id":128228,"depth":70,"text":128229},{"id":128248,"depth":70,"text":128249},{"id":128274,"depth":59,"text":128275,"children":128490},[128491,128492,128493,128494,128495],{"id":128278,"depth":70,"text":128279},{"id":128328,"depth":70,"text":128329},{"id":128342,"depth":70,"text":128343},{"id":128395,"depth":70,"text":128396},{"id":128436,"depth":70,"text":128437},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127947,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128502,"title":128503,"body":128504,"description":1327,"extension":1328,"meta":129153,"navigation":1330,"path":129154,"seo":129155,"stem":129156,"__hash__":129157},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128505,"toc":129134},[128506,128509,128513,128517,128577,128581,128591,128594,128597,128601,128626,128630,128633,128636,128639,128642,128645,128649,128652,128655,128697,128700,128726,128732,128735,128739,128743,128749,128752,128755,128758,128761,128764,128767,128812,128816,128819,128822,128826,128830,128859,128862,128867,128870,128873,128876,128879,128883,128887,128890,128892,128895,128899,128902,128906,128909,128912,128915,128919,128923,128929,128939,128942,128945,128948,128951,128954,129077,129085,129093,129131],[10,128507,128503],{"id":128508},"_7-css引入方式与选择器进阶",[14,128510,128512],{"id":128511},"_71-css引入方式","7.1 css引入方式",[183,128514,128516],{"id":128515},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[39,128518,128522],{"className":128519,"code":128520,"language":128521,"meta":44,"style":44},"language-Html shiki shiki-themes github-light github-dark","\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n","Html",[46,128523,128524,128532,128539,128551,128564,128569],{"__ignoreMap":44},[49,128525,128526,128528,128530],{"class":51,"line":52},[49,128527,2300],{"class":66},[49,128529,1305],{"class":147},[49,128531,52554],{"class":66},[49,128533,128534,128537],{"class":51,"line":59},[49,128535,128536],{"class":147},"  h1",[49,128538,67],{"class":66},[49,128540,128541,128544,128546,128549],{"class":51,"line":70},[49,128542,128543],{"class":73},"    color",[49,128545,77],{"class":66},[49,128547,128548],{"class":73},"blue",[49,128550,83],{"class":66},[49,128552,128553,128556,128558,128560,128562],{"class":51,"line":86},[49,128554,128555],{"class":73},"    font-size",[49,128557,77],{"class":66},[49,128559,2190],{"class":73},[49,128561,110],{"class":109},[49,128563,83],{"class":66},[49,128565,128566],{"class":51,"line":98},[49,128567,128568],{"class":66},"  }\n",[49,128570,128571,128573,128575],{"class":51,"line":121},[49,128572,53027],{"class":66},[49,128574,1305],{"class":147},[49,128576,52554],{"class":66},[19,128578,128579,27722],{},[485,128580,127861],{},[19,128582,1265,128583,128586,128587,128590],{},[46,128584,128585],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[46,128588,128589],{},"\u003Chead>","标签中",[19,128592,128593],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128595,128596],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[183,128598,128600],{"id":128599},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[39,128602,128604],{"className":128519,"code":128603,"language":128521,"meta":44,"style":44},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[46,128605,128606],{"__ignoreMap":44},[49,128607,128608,128610,128612,128614,128616,128619,128622,128624],{"class":51,"line":52},[49,128609,2300],{"class":66},[49,128611,19],{"class":147},[49,128613,63862],{"class":62},[49,128615,1448],{"class":66},[49,128617,128618],{"class":1505},"\"color: red; font-size: 16px;\"",[49,128620,128621],{"class":66},">这是一个段落\u003C\u002F",[49,128623,19],{"class":147},[49,128625,52554],{"class":66},[19,128627,128628,27722],{},[485,128629,127861],{},[19,128631,128632],{},"①style其实就是标签的属性",[19,128634,128635],{},"②在双引号中间，写法要符合css规范",[19,128637,128638],{},"③可以控制当前的标签设置样式",[19,128640,128641],{},"④书写繁琐，简单时才用",[19,128643,128644],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[183,128646,128648],{"id":128647},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,128650,128651],{},"使用最多，单独建一个css文件，然后html引用",[19,128653,128654],{},"①css文件部分： style.css",[39,128656,128658],{"className":41,"code":128657,"language":43,"meta":44,"style":44},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[46,128659,128660,128665,128671,128681,128693],{"__ignoreMap":44},[49,128661,128662],{"class":51,"line":52},[49,128663,128664],{"class":55},"\u002F* style.css *\u002F\n",[49,128666,128667,128669],{"class":51,"line":59},[49,128668,10],{"class":147},[49,128670,67],{"class":66},[49,128672,128673,128675,128677,128679],{"class":51,"line":70},[49,128674,72135],{"class":73},[49,128676,77],{"class":66},[49,128678,128548],{"class":73},[49,128680,83],{"class":66},[49,128682,128683,128685,128687,128689,128691],{"class":51,"line":86},[49,128684,71859],{"class":73},[49,128686,77],{"class":66},[49,128688,2190],{"class":73},[49,128690,110],{"class":109},[49,128692,83],{"class":66},[49,128694,128695],{"class":51,"line":98},[49,128696,137],{"class":66},[19,128698,128699],{},"②html部分",[39,128701,128703],{"className":128519,"code":128702,"language":128521,"meta":44,"style":44},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[46,128704,128705],{"__ignoreMap":44},[49,128706,128707,128709,128711,128713,128715,128717,128719,128721,128724],{"class":51,"line":52},[49,128708,2300],{"class":66},[49,128710,70240],{"class":147},[49,128712,70243],{"class":62},[49,128714,1448],{"class":66},[49,128716,70248],{"class":1505},[49,128718,62295],{"class":62},[49,128720,1448],{"class":66},[49,128722,128723],{"class":1505},"\"style.css\"",[49,128725,52554],{"class":66},[19,128727,128728,128731],{},[46,128729,128730],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128733,128734],{},"ctrl+0回到页面原来大小",[14,128736,128738],{"id":128737},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[183,128740,128742],{"id":128741},"_721-快速生成html","7.2.1 快速生成html",[19,128744,128745,128746],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[46,128747,128748],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128750,128751],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128753,128754],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128756,128757],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128759,128760],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128762,128763],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128765,128766],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[39,128768,128770],{"className":128519,"code":128769,"language":128521,"meta":44,"style":44},"\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",[46,128771,128772,128777,128782,128787,128792,128797,128802,128807],{"__ignoreMap":44},[49,128773,128774],{"class":51,"line":52},[49,128775,128776],{"class":55},"\u003C!-- Emmet 语法示例 -->\n",[49,128778,128779],{"class":51,"line":59},[49,128780,128781],{"class":55},"\u003C!-- div*3        → 生成3个div -->\n",[49,128783,128784],{"class":51,"line":70},[49,128785,128786],{"class":55},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[49,128788,128789],{"class":51,"line":86},[49,128790,128791],{"class":55},"\u003C!-- div+p        → 兄弟div和p -->\n",[49,128793,128794],{"class":51,"line":98},[49,128795,128796],{"class":55},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[49,128798,128799],{"class":51,"line":121},[49,128800,128801],{"class":55},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[49,128803,128804],{"class":51,"line":134},[49,128805,128806],{"class":55},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[49,128808,128809],{"class":51,"line":1085},[49,128810,128811],{"class":55},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[183,128813,128815],{"id":128814},"_722-快速生成css","7.2.2 快速生成css",[19,128817,128818],{},"简写开头",[19,128820,128821],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128823,128825],{"id":128824},"_73-css复合选择器","7.3 css复合选择器",[183,128827,128829],{"id":128828},"_731-后代选择器","7.3.1 后代选择器",[39,128831,128833],{"className":41,"code":128832,"language":43,"meta":44,"style":44},".parent .child {\n  color: blue;\n}\n",[46,128834,128835,128845,128855],{"__ignoreMap":44},[49,128836,128837,128840,128843],{"class":51,"line":52},[49,128838,128839],{"class":62},".parent",[49,128841,128842],{"class":62}," .child",[49,128844,67],{"class":66},[49,128846,128847,128849,128851,128853],{"class":51,"line":59},[49,128848,72135],{"class":73},[49,128850,77],{"class":66},[49,128852,128548],{"class":73},[49,128854,83],{"class":66},[49,128856,128857],{"class":51,"line":70},[49,128858,137],{"class":66},[19,128860,128861],{},"元素1 元素2 {样式声明}",[19,128863,128864],{},[485,128865,128866],{},"注意点:",[19,128868,128869],{},"①元素1和元素2中间用空格隔开",[19,128871,128872],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128874,128875],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128877,128878],{},"④元素1和元素2可以是任意基础选择器",[183,128880,128882],{"id":128881},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128884,128885],{},[485,128886,128866],{},[19,128888,128889],{},"①元素1和元素2中间用大于号隔开",[19,128891,128872],{},[19,128893,128894],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[183,128896,128898],{"id":128897},"_733-并集选择器","7.3.3 并集选择器",[19,128900,128901],{},"元素1，元素2 {样式声明}",[19,128903,128904],{},[485,128905,128866],{},[19,128907,128908],{},"①元素1和元素2中间用逗号隔开",[19,128910,128911],{},"②逗号可以理解为和的意思",[19,128913,128914],{},"③并集选择器通常用于集体声明",[183,128916,128918],{"id":128917},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128920,128921],{},[485,128922,128866],{},[19,128924,128925,128926,128928],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70240,128927],{},"－:visited－:hover－:active。",[19,128930,128931,128932,128935,128936,26989],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128933,128934],"hover",{}," 、 ",[128937,128938],"first-child",{},[19,128940,128941],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128943,128944],{},"link对没访问的进行设置",[19,128946,128947],{},"vistied对已访问的进行改变",[19,128949,128950],{},"hover鼠标经过就会变",[19,128952,128953],{},"active常按(点)就会变",[39,128955,128957],{"className":41,"code":128956,"language":43,"meta":44,"style":44},"\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",[46,128958,128959,128964,128973,128983,128993,128997,129006,129017,129021,129029,129039,129049,129053,129062,129073],{"__ignoreMap":44},[49,128960,128961],{"class":51,"line":52},[49,128962,128963],{"class":55},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[49,128965,128966,128968,128971],{"class":51,"line":59},[49,128967,1630],{"class":147},[49,128969,128970],{"class":62},":link",[49,128972,67],{"class":66},[49,128974,128975,128977,128979,128981],{"class":51,"line":70},[49,128976,72135],{"class":73},[49,128978,77],{"class":66},[49,128980,129],{"class":73},[49,128982,83],{"class":66},[49,128984,128985,128987,128989,128991],{"class":51,"line":86},[49,128986,71736],{"class":73},[49,128988,77],{"class":66},[49,128990,460],{"class":73},[49,128992,83],{"class":66},[49,128994,128995],{"class":51,"line":98},[49,128996,137],{"class":66},[49,128998,128999,129001,129004],{"class":51,"line":121},[49,129000,1630],{"class":147},[49,129002,129003],{"class":62},":visited",[49,129005,67],{"class":66},[49,129007,129008,129010,129012,129015],{"class":51,"line":134},[49,129009,72135],{"class":73},[49,129011,77],{"class":66},[49,129013,129014],{"class":73},"purple",[49,129016,83],{"class":66},[49,129018,129019],{"class":51,"line":1085},[49,129020,137],{"class":66},[49,129022,129023,129025,129027],{"class":51,"line":2574},[49,129024,1630],{"class":147},[49,129026,62178],{"class":62},[49,129028,67],{"class":66},[49,129030,129031,129033,129035,129037],{"class":51,"line":2586},[49,129032,72135],{"class":73},[49,129034,77],{"class":66},[49,129036,56128],{"class":73},[49,129038,83],{"class":66},[49,129040,129041,129043,129045,129047],{"class":51,"line":2867},[49,129042,71736],{"class":73},[49,129044,77],{"class":66},[49,129046,128386],{"class":73},[49,129048,83],{"class":66},[49,129050,129051],{"class":51,"line":2872},[49,129052,137],{"class":66},[49,129054,129055,129057,129060],{"class":51,"line":2878},[49,129056,1630],{"class":147},[49,129058,129059],{"class":62},":active",[49,129061,67],{"class":66},[49,129063,129064,129066,129068,129071],{"class":51,"line":2883},[49,129065,72135],{"class":73},[49,129067,77],{"class":66},[49,129069,129070],{"class":73},"green",[49,129072,83],{"class":66},[49,129074,129075],{"class":51,"line":2897},[49,129076,137],{"class":66},[183,129078,129080,129081,129084],{"id":129079},"_735-伪类选择器","7.3.5 ",[129082,129083],"focus",{},"伪类选择器",[19,129086,129087,129089,129090,129092],{},[129082,129088],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[46,129091,127834],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[39,129094,129096],{"className":41,"code":129095,"language":43,"meta":44,"style":44},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[46,129097,129098,129106,129117,129127],{"__ignoreMap":44},[49,129099,129100,129102,129104],{"class":51,"line":52},[49,129101,448],{"class":147},[49,129103,63138],{"class":62},[49,129105,67],{"class":66},[49,129107,129108,129111,129113,129115],{"class":51,"line":59},[49,129109,129110],{"class":73},"  border-color",[49,129112,77],{"class":66},[49,129114,56128],{"class":73},[49,129116,83],{"class":66},[49,129118,129119,129121,129123,129125],{"class":51,"line":70},[49,129120,455],{"class":73},[49,129122,77],{"class":66},[49,129124,460],{"class":73},[49,129126,83],{"class":66},[49,129128,129129],{"class":51,"line":86},[49,129130,137],{"class":66},[1305,129132,129133],{},"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":44,"searchDepth":59,"depth":59,"links":129135},[129136,129141,129145],{"id":128511,"depth":59,"text":128512,"children":129137},[129138,129139,129140],{"id":128515,"depth":70,"text":128516},{"id":128599,"depth":70,"text":128600},{"id":128647,"depth":70,"text":128648},{"id":128737,"depth":59,"text":128738,"children":129142},[129143,129144],{"id":128741,"depth":70,"text":128742},{"id":128814,"depth":70,"text":128815},{"id":128824,"depth":59,"text":128825,"children":129146},[129147,129148,129149,129150,129151],{"id":128828,"depth":70,"text":128829},{"id":128881,"depth":70,"text":128882},{"id":128897,"depth":70,"text":128898},{"id":128917,"depth":70,"text":128918},{"id":129079,"depth":70,"text":129152},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128503,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129159,"title":129160,"body":129161,"description":1327,"extension":1328,"meta":131083,"navigation":1330,"path":131084,"seo":131085,"stem":131086,"__hash__":131087},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129162,"toc":131057},[129163,129166,129170,129179,129183,129209,129214,129217,129220,129223,129226,129230,129233,129243,129251,129255,129290,129295,129298,129301,129304,129307,129311,129314,129323,129327,129340,129345,129348,129351,129354,129358,129361,129365,129368,129422,129425,129456,129459,129513,129517,129520,129686,129809,129812,129815,129818,129821,129825,129828,129832,129835,129838,129842,129845,129876,129903,129931,129934,129938,129964,130007,130011,130105,130108,130135,130138,130141,130144,130147,130150,130153,130156,130159,130162,130166,130223,130250,130254,130302,130306,130347,130349,130352,130355,130358,130361,130365,130457,130460,130463,130466,130470,130593,130794,130798,130802,130805,130808,130811,130815,130818,130821,130846,130849,130852,130855,130858,130861,130865,130873,130935,130938,130996,130999,131002,131005,131008,131011,131014,131017,131054],[10,129164,129160],{"id":129165},"_8-css显示模式与背景特性",[14,129167,129169],{"id":129168},"_81-css元素显示模式","8.1 css元素显示模式",[19,129171,129172,129173,129175,129176,129178],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[46,129174,127387],{},"自己占一行，比如一行可以放多个",[46,129177,127390],{},"，HTML 元素一般分为块元素和行内元素两种类型",[183,129180,129182],{"id":129181},"_811-块元素","8.1.1 块元素",[19,129184,129185,129186,129188,129189,1605,129192,1605,129194,1605,129196,1605,129199,1605,129202,129205,129206,129208],{},"常见的块元素有",[46,129187,127291],{},"~",[46,129190,129191],{},"\u003Ch6>",[46,129193,127317],{},[46,129195,127387],{},[46,129197,129198],{},"\u003Cul>",[46,129200,129201],{},"\u003Col>",[46,129203,129204],{},"\u003Cli>","等，其中 ",[46,129207,127387],{}," 标签是最典型的块元素",[19,129210,129211],{},[485,129212,129213],{},"块级元素的特点：",[19,129215,129216],{},"① 比较霸道，自己独占一行。",[19,129218,129219],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129221,129222],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129224,129225],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129227,129228],{},[485,129229,1432],{},[19,129231,129232],{},"①文字类的元素内不能使用块级元素",[19,129234,1271,129235,129237,129238,129240,129241],{},[46,129236,127317],{}," 标签主要用于存放文字，因此 ",[46,129239,127317],{}," 里面不能放块级元素，特别是不能放",[46,129242,127387],{},[19,129244,129245,129246,129188,129248,129250],{},"⑥同理， ",[46,129247,127291],{},[46,129249,129191],{},"等都是文字类块级标签，里面也不能放其他块级元素",[183,129252,129254],{"id":129253},"_812-行内元素","8.1.2 行内元素",[19,129256,129257,129258,1605,129260,1605,129263,1605,129266,1605,129269,1605,129272,1605,129275,1605,129278,1605,129281,1605,129284,129286,129287,129289],{},"常见的行内元素有 ",[46,129259,127549],{},[46,129261,129262],{},"\u003Cstrong>",[46,129264,129265],{},"\u003Cb>",[46,129267,129268],{},"\u003Cem>",[46,129270,129271],{},"\u003Ci>",[46,129273,129274],{},"\u003Cdel>",[46,129276,129277],{},"\u003Cs>",[46,129279,129280],{},"\u003Cins>",[46,129282,129283],{},"\u003Cu>",[46,129285,127390],{}," 等，其中 ",[46,129288,127390],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129291,129292],{},[485,129293,129294],{},"特点：",[19,129296,129297],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129299,129300],{},"② 高、宽直接设置是无效的。",[19,129302,129303],{},"③ 默认宽度就是它本身内容的宽度。",[19,129305,129306],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129308,129309],{},[485,129310,1432],{},[19,129312,129313],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129315,129316,129317,129319,129320,129322],{},"②特殊情况链接 ",[46,129318,127549],{}," 里面可以放块级元素，但是给 ",[46,129321,127549],{}," 转换一下块级模式最安全",[183,129324,129326],{"id":129325},"_813-行内块元素","8.1.3 行内块元素",[19,129328,129329,129330,1605,129333,1605,129336,129339],{},"在行内元素中有几个特殊的标签 —— ",[46,129331,129332],{},"\u003Cimg \u002F>",[46,129334,129335],{},"\u003Cinput \u002F>",[46,129337,129338],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129341,129342],{},[485,129343,129344],{},"行内块元素的特点：",[19,129346,129347],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129349,129350],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129352,129353],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[183,129355,129357],{"id":129356},"_814-总结","8.1.4 总结",[174,129359],{"style":176,"src":129360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[183,129362,129364],{"id":129363},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129366,129367],{},"①转换为块元素：display:block;",[39,129369,129371],{"className":41,"code":129370,"language":43,"meta":44,"style":44},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[46,129372,129373,129378,129384,129394,129406,129418],{"__ignoreMap":44},[49,129374,129375],{"class":51,"line":52},[49,129376,129377],{"class":55},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[49,129379,129380,129382],{"class":51,"line":59},[49,129381,1630],{"class":147},[49,129383,67],{"class":66},[49,129385,129386,129388,129390,129392],{"class":51,"line":70},[49,129387,669],{"class":73},[49,129389,77],{"class":66},[49,129391,674],{"class":73},[49,129393,83],{"class":66},[49,129395,129396,129398,129400,129402,129404],{"class":51,"line":86},[49,129397,74],{"class":73},[49,129399,77],{"class":66},[49,129401,1703],{"class":73},[49,129403,110],{"class":109},[49,129405,83],{"class":66},[49,129407,129408,129410,129412,129414,129416],{"class":51,"line":98},[49,129409,89],{"class":73},[49,129411,77],{"class":66},[49,129413,1793],{"class":73},[49,129415,110],{"class":109},[49,129417,83],{"class":66},[49,129419,129420],{"class":51,"line":121},[49,129421,137],{"class":66},[19,129423,129424],{},"②转换为行内元素：display:inline;",[39,129426,129428],{"className":41,"code":129427,"language":43,"meta":44,"style":44},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[46,129429,129430,129435,129441,129452],{"__ignoreMap":44},[49,129431,129432],{"class":51,"line":52},[49,129433,129434],{"class":55},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[49,129436,129437,129439],{"class":51,"line":59},[49,129438,148],{"class":147},[49,129440,67],{"class":66},[49,129442,129443,129445,129447,129450],{"class":51,"line":70},[49,129444,669],{"class":73},[49,129446,77],{"class":66},[49,129448,129449],{"class":73},"inline",[49,129451,83],{"class":66},[49,129453,129454],{"class":51,"line":86},[49,129455,137],{"class":66},[19,129457,129458],{},"③转换为行内块：display:inline-block;",[39,129460,129462],{"className":41,"code":129461,"language":43,"meta":44,"style":44},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[46,129463,129464,129469,129475,129485,129497,129509],{"__ignoreMap":44},[49,129465,129466],{"class":51,"line":52},[49,129467,129468],{"class":55},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[49,129470,129471,129473],{"class":51,"line":59},[49,129472,49],{"class":147},[49,129474,67],{"class":66},[49,129476,129477,129479,129481,129483],{"class":51,"line":70},[49,129478,669],{"class":73},[49,129480,77],{"class":66},[49,129482,73613],{"class":73},[49,129484,83],{"class":66},[49,129486,129487,129489,129491,129493,129495],{"class":51,"line":86},[49,129488,74],{"class":73},[49,129490,77],{"class":66},[49,129492,2003],{"class":73},[49,129494,110],{"class":109},[49,129496,83],{"class":66},[49,129498,129499,129501,129503,129505,129507],{"class":51,"line":98},[49,129500,89],{"class":73},[49,129502,77],{"class":66},[49,129504,2340],{"class":73},[49,129506,110],{"class":109},[49,129508,83],{"class":66},[49,129510,129511],{"class":51,"line":121},[49,129512,137],{"class":66},[183,129514,129516],{"id":129515},"_816-小米侧边栏","8.1.6 小米侧边栏",[174,129518],{"style":176,"src":129519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[39,129521,129523],{"className":128519,"code":129522,"language":128521,"meta":44,"style":44},"\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",[46,129524,129525,129530,129545,129564,129583,129602,129621,129640,129659,129678],{"__ignoreMap":44},[49,129526,129527],{"class":51,"line":52},[49,129528,129529],{"class":55},"\u003C!-- 小米侧边栏案例 -->\n",[49,129531,129532,129534,129536,129538,129540,129543],{"class":51,"line":59},[49,129533,2300],{"class":66},[49,129535,148],{"class":147},[49,129537,54728],{"class":62},[49,129539,1448],{"class":66},[49,129541,129542],{"class":1505},"\"sidebar\"",[49,129544,52554],{"class":66},[49,129546,129547,129549,129551,129553,129555,129557,129560,129562],{"class":51,"line":70},[49,129548,53386],{"class":66},[49,129550,1630],{"class":147},[49,129552,62295],{"class":62},[49,129554,1448],{"class":66},[49,129556,62300],{"class":1505},[49,129558,129559],{"class":66},">手机 电话卡\u003C\u002F",[49,129561,1630],{"class":147},[49,129563,52554],{"class":66},[49,129565,129566,129568,129570,129572,129574,129576,129579,129581],{"class":51,"line":86},[49,129567,53386],{"class":66},[49,129569,1630],{"class":147},[49,129571,62295],{"class":62},[49,129573,1448],{"class":66},[49,129575,62300],{"class":1505},[49,129577,129578],{"class":66},">电视 盒子\u003C\u002F",[49,129580,1630],{"class":147},[49,129582,52554],{"class":66},[49,129584,129585,129587,129589,129591,129593,129595,129598,129600],{"class":51,"line":98},[49,129586,53386],{"class":66},[49,129588,1630],{"class":147},[49,129590,62295],{"class":62},[49,129592,1448],{"class":66},[49,129594,62300],{"class":1505},[49,129596,129597],{"class":66},">笔记本 平板\u003C\u002F",[49,129599,1630],{"class":147},[49,129601,52554],{"class":66},[49,129603,129604,129606,129608,129610,129612,129614,129617,129619],{"class":51,"line":121},[49,129605,53386],{"class":66},[49,129607,1630],{"class":147},[49,129609,62295],{"class":62},[49,129611,1448],{"class":66},[49,129613,62300],{"class":1505},[49,129615,129616],{"class":66},">出行 穿戴\u003C\u002F",[49,129618,1630],{"class":147},[49,129620,52554],{"class":66},[49,129622,129623,129625,129627,129629,129631,129633,129636,129638],{"class":51,"line":134},[49,129624,53386],{"class":66},[49,129626,1630],{"class":147},[49,129628,62295],{"class":62},[49,129630,1448],{"class":66},[49,129632,62300],{"class":1505},[49,129634,129635],{"class":66},">智能 路由器\u003C\u002F",[49,129637,1630],{"class":147},[49,129639,52554],{"class":66},[49,129641,129642,129644,129646,129648,129650,129652,129655,129657],{"class":51,"line":1085},[49,129643,53386],{"class":66},[49,129645,1630],{"class":147},[49,129647,62295],{"class":62},[49,129649,1448],{"class":66},[49,129651,62300],{"class":1505},[49,129653,129654],{"class":66},">健康 儿童\u003C\u002F",[49,129656,1630],{"class":147},[49,129658,52554],{"class":66},[49,129660,129661,129663,129665,129667,129669,129671,129674,129676],{"class":51,"line":2574},[49,129662,53386],{"class":66},[49,129664,1630],{"class":147},[49,129666,62295],{"class":62},[49,129668,1448],{"class":66},[49,129670,62300],{"class":1505},[49,129672,129673],{"class":66},">耳机 音响\u003C\u002F",[49,129675,1630],{"class":147},[49,129677,52554],{"class":66},[49,129679,129680,129682,129684],{"class":51,"line":2586},[49,129681,53027],{"class":66},[49,129683,148],{"class":147},[49,129685,52554],{"class":66},[39,129687,129689],{"className":41,"code":129688,"language":43,"meta":44,"style":44},".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",[46,129690,129691,129700,129710,129723,129735,129747,129759,129769,129780,129784,129794,129805],{"__ignoreMap":44},[49,129692,129693,129696,129698],{"class":51,"line":52},[49,129694,129695],{"class":62},".sidebar",[49,129697,2655],{"class":147},[49,129699,67],{"class":66},[49,129701,129702,129704,129706,129708],{"class":51,"line":59},[49,129703,669],{"class":73},[49,129705,77],{"class":66},[49,129707,674],{"class":73},[49,129709,83],{"class":66},[49,129711,129712,129714,129716,129719,129721],{"class":51,"line":70},[49,129713,74],{"class":73},[49,129715,77],{"class":66},[49,129717,129718],{"class":73},"234",[49,129720,110],{"class":109},[49,129722,83],{"class":66},[49,129724,129725,129727,129729,129731,129733],{"class":51,"line":86},[49,129726,89],{"class":73},[49,129728,77],{"class":66},[49,129730,1843],{"class":73},[49,129732,110],{"class":109},[49,129734,83],{"class":66},[49,129736,129737,129739,129741,129743,129745],{"class":51,"line":98},[49,129738,128456],{"class":73},[49,129740,77],{"class":66},[49,129742,1843],{"class":73},[49,129744,110],{"class":109},[49,129746,83],{"class":66},[49,129748,129749,129751,129753,129755,129757],{"class":51,"line":121},[49,129750,72054],{"class":73},[49,129752,77],{"class":66},[49,129754,2340],{"class":73},[49,129756,110],{"class":109},[49,129758,83],{"class":66},[49,129760,129761,129763,129765,129767],{"class":51,"line":134},[49,129762,72135],{"class":73},[49,129764,77],{"class":66},[49,129766,62081],{"class":73},[49,129768,83],{"class":66},[49,129770,129771,129773,129775,129778],{"class":51,"line":1085},[49,129772,72109],{"class":73},[49,129774,77],{"class":66},[49,129776,129777],{"class":73},"#55585a",[49,129779,83],{"class":66},[49,129781,129782],{"class":51,"line":2574},[49,129783,137],{"class":66},[49,129785,129786,129788,129790,129792],{"class":51,"line":2586},[49,129787,129695],{"class":62},[49,129789,2655],{"class":147},[49,129791,62178],{"class":62},[49,129793,67],{"class":66},[49,129795,129796,129798,129800,129803],{"class":51,"line":2867},[49,129797,72109],{"class":73},[49,129799,77],{"class":66},[49,129801,129802],{"class":73},"#ff6700",[49,129804,83],{"class":66},[49,129806,129807],{"class":51,"line":2872},[49,129808,137],{"class":66},[174,129810],{"style":176,"src":129811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129813,129814],{},"行高=盒子高度：实现文字的垂直居中",[19,129816,129817],{},"原理讲解：",[174,129819],{"style":176,"src":129820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129822,129824],{"id":129823},"_82-css背景","8.2 css背景",[19,129826,129827],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[183,129829,129831],{"id":129830},"_821-背景颜色","8.2.1 背景颜色",[19,129833,129834],{},"background-color:颜色值;",[19,129836,129837],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[183,129839,129841],{"id":129840},"_822-背景图片","8.2.2 背景图片",[19,129843,129844],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[39,129846,129848],{"className":41,"code":129847,"language":43,"meta":44,"style":44},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[46,129849,129850,129856,129872],{"__ignoreMap":44},[49,129851,129852,129854],{"class":51,"line":52},[49,129853,148],{"class":147},[49,129855,67],{"class":66},[49,129857,129858,129861,129863,129865,129867,129870],{"class":51,"line":59},[49,129859,129860],{"class":73},"  background-image",[49,129862,77],{"class":66},[49,129864,62964],{"class":73},[49,129866,1403],{"class":66},[49,129868,129869],{"class":6468},"images\u002Fbg.png",[49,129871,3973],{"class":66},[49,129873,129874],{"class":51,"line":70},[49,129875,137],{"class":66},[293,129877,129878,129887],{},[296,129879,129880],{},[299,129881,129882,129885],{},[302,129883,129884],{"align":304},"参数值",[302,129886,103920],{"align":304},[310,129888,129889,129896],{},[299,129890,129891,129893],{},[315,129892,460],{"align":304},[315,129894,129895],{"align":304},"无背景图（默认的）",[299,129897,129898,129900],{},[315,129899,62964],{"align":304},[315,129901,129902],{"align":304},"使用绝对或相对地址指定背景图像",[39,129904,129905],{"className":41,"code":129847,"language":43,"meta":44,"style":44},[46,129906,129907,129913,129927],{"__ignoreMap":44},[49,129908,129909,129911],{"class":51,"line":52},[49,129910,148],{"class":147},[49,129912,67],{"class":66},[49,129914,129915,129917,129919,129921,129923,129925],{"class":51,"line":59},[49,129916,129860],{"class":73},[49,129918,77],{"class":66},[49,129920,62964],{"class":73},[49,129922,1403],{"class":66},[49,129924,129869],{"class":6468},[49,129926,3973],{"class":66},[49,129928,129929],{"class":51,"line":70},[49,129930,137],{"class":66},[19,129932,129933],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[183,129935,129937],{"id":129936},"_823-背景平铺","8.2.3 背景平铺",[39,129939,129941],{"className":41,"code":129940,"language":43,"meta":44,"style":44},"div {\n  background-repeat: no-repeat;\n}\n",[46,129942,129943,129949,129960],{"__ignoreMap":44},[49,129944,129945,129947],{"class":51,"line":52},[49,129946,148],{"class":147},[49,129948,67],{"class":66},[49,129950,129951,129954,129956,129958],{"class":51,"line":59},[49,129952,129953],{"class":73},"  background-repeat",[49,129955,77],{"class":66},[49,129957,62974],{"class":73},[49,129959,83],{"class":66},[49,129961,129962],{"class":51,"line":70},[49,129963,137],{"class":66},[293,129965,129966,129974],{},[296,129967,129968],{},[299,129969,129970,129972],{},[302,129971,129884],{"align":304},[302,129973,103920],{"align":304},[310,129975,129976,129984,129991,129999],{},[299,129977,129978,129981],{},[315,129979,129980],{"align":304},"repeat",[315,129982,129983],{"align":304},"背景图像在纵向和横向上平铺（默认的）",[299,129985,129986,129988],{},[315,129987,62974],{"align":304},[315,129989,129990],{"align":304},"背景图像不平铺",[299,129992,129993,129996],{},[315,129994,129995],{"align":304},"repeat-x",[315,129997,129998],{"align":304},"背景图像在横向上平铺",[299,130000,130001,130004],{},[315,130002,130003],{"align":304},"repeat-y",[315,130005,130006],{"align":304},"背景图像在纵向平铺",[183,130008,130010],{"id":130009},"_824-背景图片位置","8.2.4 背景图片位置",[39,130012,130014],{"className":41,"code":130013,"language":43,"meta":44,"style":44},"\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",[46,130015,130016,130021,130027,130041,130045,130050,130056,130072,130076,130081,130087,130101],{"__ignoreMap":44},[49,130017,130018],{"class":51,"line":52},[49,130019,130020],{"class":55},"\u002F* 方位名词 *\u002F\n",[49,130022,130023,130025],{"class":51,"line":59},[49,130024,148],{"class":147},[49,130026,67],{"class":66},[49,130028,130029,130032,130034,130036,130039],{"class":51,"line":70},[49,130030,130031],{"class":73},"  background-position",[49,130033,77],{"class":66},[49,130035,52835],{"class":73},[49,130037,130038],{"class":73}," top",[49,130040,83],{"class":66},[49,130042,130043],{"class":51,"line":86},[49,130044,137],{"class":66},[49,130046,130047],{"class":51,"line":98},[49,130048,130049],{"class":55},"\u002F* 精确单位 *\u002F\n",[49,130051,130052,130054],{"class":51,"line":121},[49,130053,148],{"class":147},[49,130055,67],{"class":66},[49,130057,130058,130060,130062,130064,130066,130068,130070],{"class":51,"line":134},[49,130059,130031],{"class":73},[49,130061,77],{"class":66},[49,130063,875],{"class":73},[49,130065,110],{"class":109},[49,130067,58743],{"class":73},[49,130069,110],{"class":109},[49,130071,83],{"class":66},[49,130073,130074],{"class":51,"line":1085},[49,130075,137],{"class":66},[49,130077,130078],{"class":51,"line":2574},[49,130079,130080],{"class":55},"\u002F* 混合单位 *\u002F\n",[49,130082,130083,130085],{"class":51,"line":2586},[49,130084,148],{"class":147},[49,130086,67],{"class":66},[49,130088,130089,130091,130093,130095,130097,130099],{"class":51,"line":2867},[49,130090,130031],{"class":73},[49,130092,77],{"class":66},[49,130094,875],{"class":73},[49,130096,110],{"class":109},[49,130098,18394],{"class":73},[49,130100,83],{"class":66},[49,130102,130103],{"class":51,"line":2872},[49,130104,137],{"class":66},[19,130106,130107],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[293,130109,130110,130118],{},[296,130111,130112],{},[299,130113,130114,130116],{},[302,130115,129884],{"align":304},[302,130117,27118],{"align":304},[310,130119,130120,130127],{},[299,130121,130122,130124],{},[315,130123,53210],{"align":304},[315,130125,130126],{"align":304},"百分数|由浮点数和单位标识符组成的长度值",[299,130128,130129,130132],{},[315,130130,130131],{"align":304},"position",[315,130133,130134],{"align":304},"top|center|bottom|left|center|right 方位名词",[19,130136,130137],{},"其他说明：",[19,130139,130140],{},"①参数是方位名词",[19,130142,130143],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130145,130146],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130148,130149],{},"②参数是精确单位",[19,130151,130152],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130154,130155],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130157,130158],{},"③参数是混合单位",[19,130160,130161],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[183,130163,130165],{"id":130164},"_825-背景图片固定","8.2.5 背景图片固定",[39,130167,130169],{"className":41,"code":130168,"language":43,"meta":44,"style":44},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[46,130170,130171,130176,130182,130194,130198,130203,130209,130219],{"__ignoreMap":44},[49,130172,130173],{"class":51,"line":52},[49,130174,130175],{"class":55},"\u002F* 背景滚动（默认） *\u002F\n",[49,130177,130178,130180],{"class":51,"line":59},[49,130179,148],{"class":147},[49,130181,67],{"class":66},[49,130183,130184,130187,130189,130192],{"class":51,"line":70},[49,130185,130186],{"class":73},"  background-attachment",[49,130188,77],{"class":66},[49,130190,130191],{"class":73},"scroll",[49,130193,83],{"class":66},[49,130195,130196],{"class":51,"line":86},[49,130197,137],{"class":66},[49,130199,130200],{"class":51,"line":98},[49,130201,130202],{"class":55},"\u002F* 背景固定 *\u002F\n",[49,130204,130205,130207],{"class":51,"line":121},[49,130206,148],{"class":147},[49,130208,67],{"class":66},[49,130210,130211,130213,130215,130217],{"class":51,"line":134},[49,130212,130186],{"class":73},[49,130214,77],{"class":66},[49,130216,87458],{"class":73},[49,130218,83],{"class":66},[49,130220,130221],{"class":51,"line":1085},[49,130222,137],{"class":66},[293,130224,130225,130234],{},[296,130226,130227],{},[299,130228,130229,130232],{},[302,130230,130231],{"align":304},"参数",[302,130233,103920],{"align":304},[310,130235,130236,130243],{},[299,130237,130238,130240],{},[315,130239,130191],{"align":304},[315,130241,130242],{"align":304},"背景图像是随对象内容滚动",[299,130244,130245,130247],{},[315,130246,87458],{"align":304},[315,130248,130249],{"align":304},"背景图像固定",[183,130251,130253],{"id":130252},"_826-背景样式合写","8.2.6 背景样式合写",[39,130255,130257],{"className":41,"code":130256,"language":43,"meta":44,"style":44},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[46,130258,130259,130264,130270,130298],{"__ignoreMap":44},[49,130260,130261],{"class":51,"line":52},[49,130262,130263],{"class":55},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[49,130265,130266,130268],{"class":51,"line":59},[49,130267,148],{"class":147},[49,130269,67],{"class":66},[49,130271,130272,130274,130276,130278,130281,130283,130285,130287,130289,130292,130294,130296],{"class":51,"line":70},[49,130273,71844],{"class":73},[49,130275,77],{"class":66},[49,130277,62081],{"class":73},[49,130279,130280],{"class":73}," url",[49,130282,1403],{"class":66},[49,130284,129869],{"class":6468},[49,130286,14966],{"class":66},[49,130288,62974],{"class":73},[49,130290,130291],{"class":73}," fixed",[49,130293,18394],{"class":73},[49,130295,130038],{"class":73},[49,130297,83],{"class":66},[49,130299,130300],{"class":51,"line":86},[49,130301,137],{"class":66},[183,130303,130305],{"id":130304},"_827-背景色半透明","8.2.7 背景色半透明",[39,130307,130309],{"className":41,"code":130308,"language":43,"meta":44,"style":44},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[46,130310,130311,130317,130343],{"__ignoreMap":44},[49,130312,130313,130315],{"class":51,"line":52},[49,130314,148],{"class":147},[49,130316,67],{"class":66},[49,130318,130319,130321,130323,130325,130327,130329,130331,130333,130335,130337,130339,130341],{"class":51,"line":59},[49,130320,71844],{"class":73},[49,130322,77],{"class":66},[49,130324,56349],{"class":73},[49,130326,1403],{"class":66},[49,130328,80],{"class":73},[49,130330,13687],{"class":66},[49,130332,80],{"class":73},[49,130334,13687],{"class":66},[49,130336,80],{"class":73},[49,130338,13687],{"class":66},[49,130340,101745],{"class":73},[49,130342,3973],{"class":66},[49,130344,130345],{"class":51,"line":70},[49,130346,137],{"class":66},[19,130348,100620],{},[19,130350,130351],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130353,130354],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130356,130357],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130359,130360],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[183,130362,130364],{"id":130363},"_828-总结","8.2.8 总结",[293,130366,130367,130378],{},[296,130368,130369],{},[299,130370,130371,130374,130376],{},[302,130372,130373],{"align":304},"属性",[302,130375,103920],{"align":304},[302,130377,1548],{"align":304},[310,130379,130380,130391,130402,130413,130424,130435,130446],{},[299,130381,130382,130385,130388],{},[315,130383,130384],{"align":304},"background-color",[315,130386,130387],{"align":304},"背景颜色",[315,130389,130390],{"align":304},"预定义的颜色值\u002F十六进制\u002FRGB代码",[299,130392,130393,130396,130399],{},[315,130394,130395],{"align":304},"background-image",[315,130397,130398],{"align":304},"背景图片",[315,130400,130401],{"align":304},"url(图片路径)",[299,130403,130404,130407,130410],{},[315,130405,130406],{"align":304},"background-repeat",[315,130408,130409],{"align":304},"是否平铺",[315,130411,130412],{"align":304},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[299,130414,130415,130418,130421],{},[315,130416,130417],{"align":304},"background-position",[315,130419,130420],{"align":304},"背景位置",[315,130422,130423],{"align":304},"length\u002Fposition 分别是x和y坐标",[299,130425,130426,130429,130432],{},[315,130427,130428],{"align":304},"background-attachment",[315,130430,130431],{"align":304},"背景附着",[315,130433,130434],{"align":304},"scroll(背景滚动) \u002Ffixed (背景固定)",[299,130436,130437,130440,130443],{},[315,130438,130439],{"align":304},"背景简写",[315,130441,130442],{"align":304},"书写更简单",[315,130444,130445],{"align":304},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[299,130447,130448,130451,130454],{},[315,130449,130450],{"align":304},"背景半透明",[315,130452,130453],{"align":304},"背景颜色半透明",[315,130455,130456],{"align":304},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130458,130459],{},"颜色渐变：",[174,130461],{"style":176,"src":130462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[174,130464],{"style":176,"src":130465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[183,130467,130469],{"id":130468},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[39,130471,130473],{"className":128519,"code":130472,"language":128521,"meta":44,"style":44},"\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",[46,130474,130475,130490,130509,130528,130547,130566,130585],{"__ignoreMap":44},[49,130476,130477,130479,130481,130483,130485,130488],{"class":51,"line":52},[49,130478,2300],{"class":66},[49,130480,148],{"class":147},[49,130482,54728],{"class":62},[49,130484,1448],{"class":66},[49,130486,130487],{"class":1505},"\"nav\"",[49,130489,52554],{"class":66},[49,130491,130492,130494,130496,130498,130500,130502,130505,130507],{"class":51,"line":59},[49,130493,53386],{"class":66},[49,130495,1630],{"class":147},[49,130497,62295],{"class":62},[49,130499,1448],{"class":66},[49,130501,62300],{"class":1505},[49,130503,130504],{"class":66},">五彩导航1\u003C\u002F",[49,130506,1630],{"class":147},[49,130508,52554],{"class":66},[49,130510,130511,130513,130515,130517,130519,130521,130524,130526],{"class":51,"line":70},[49,130512,53386],{"class":66},[49,130514,1630],{"class":147},[49,130516,62295],{"class":62},[49,130518,1448],{"class":66},[49,130520,62300],{"class":1505},[49,130522,130523],{"class":66},">五彩导航2\u003C\u002F",[49,130525,1630],{"class":147},[49,130527,52554],{"class":66},[49,130529,130530,130532,130534,130536,130538,130540,130543,130545],{"class":51,"line":86},[49,130531,53386],{"class":66},[49,130533,1630],{"class":147},[49,130535,62295],{"class":62},[49,130537,1448],{"class":66},[49,130539,62300],{"class":1505},[49,130541,130542],{"class":66},">五彩导航3\u003C\u002F",[49,130544,1630],{"class":147},[49,130546,52554],{"class":66},[49,130548,130549,130551,130553,130555,130557,130559,130562,130564],{"class":51,"line":98},[49,130550,53386],{"class":66},[49,130552,1630],{"class":147},[49,130554,62295],{"class":62},[49,130556,1448],{"class":66},[49,130558,62300],{"class":1505},[49,130560,130561],{"class":66},">五彩导航4\u003C\u002F",[49,130563,1630],{"class":147},[49,130565,52554],{"class":66},[49,130567,130568,130570,130572,130574,130576,130578,130581,130583],{"class":51,"line":121},[49,130569,53386],{"class":66},[49,130571,1630],{"class":147},[49,130573,62295],{"class":62},[49,130575,1448],{"class":66},[49,130577,62300],{"class":1505},[49,130579,130580],{"class":66},">五彩导航5\u003C\u002F",[49,130582,1630],{"class":147},[49,130584,52554],{"class":66},[49,130586,130587,130589,130591],{"class":51,"line":134},[49,130588,53027],{"class":66},[49,130590,148],{"class":147},[49,130592,52554],{"class":66},[39,130594,130596],{"className":41,"code":130595,"language":43,"meta":44,"style":44},".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",[46,130597,130598,130607,130617,130629,130641,130651,130663,130673,130677,130702,130725,130748,130771],{"__ignoreMap":44},[49,130599,130600,130603,130605],{"class":51,"line":52},[49,130601,130602],{"class":62},".nav",[49,130604,2655],{"class":147},[49,130606,67],{"class":66},[49,130608,130609,130611,130613,130615],{"class":51,"line":59},[49,130610,669],{"class":73},[49,130612,77],{"class":66},[49,130614,73613],{"class":73},[49,130616,83],{"class":66},[49,130618,130619,130621,130623,130625,130627],{"class":51,"line":70},[49,130620,74],{"class":73},[49,130622,77],{"class":66},[49,130624,2207],{"class":73},[49,130626,110],{"class":109},[49,130628,83],{"class":66},[49,130630,130631,130633,130635,130637,130639],{"class":51,"line":86},[49,130632,89],{"class":73},[49,130634,77],{"class":66},[49,130636,2246],{"class":73},[49,130638,110],{"class":109},[49,130640,83],{"class":66},[49,130642,130643,130645,130647,130649],{"class":51,"line":98},[49,130644,71760],{"class":73},[49,130646,77],{"class":66},[49,130648,52835],{"class":73},[49,130650,83],{"class":66},[49,130652,130653,130655,130657,130659,130661],{"class":51,"line":121},[49,130654,128456],{"class":73},[49,130656,77],{"class":66},[49,130658,2246],{"class":73},[49,130660,110],{"class":109},[49,130662,83],{"class":66},[49,130664,130665,130667,130669,130671],{"class":51,"line":134},[49,130666,72135],{"class":73},[49,130668,77],{"class":66},[49,130670,62081],{"class":73},[49,130672,83],{"class":66},[49,130674,130675],{"class":51,"line":1085},[49,130676,137],{"class":66},[49,130678,130679,130681,130683,130686,130688,130690,130693,130695,130697,130699],{"class":51,"line":2574},[49,130680,130602],{"class":62},[49,130682,2655],{"class":147},[49,130684,130685],{"class":62},":nth-child",[49,130687,1403],{"class":66},[49,130689,159],{"class":73},[49,130691,130692],{"class":66},") { ",[49,130694,130384],{"class":73},[49,130696,77],{"class":66},[49,130698,129802],{"class":73},[49,130700,130701],{"class":66},"; }\n",[49,130703,130704,130706,130708,130710,130712,130714,130716,130718,130720,130723],{"class":51,"line":2586},[49,130705,130602],{"class":62},[49,130707,2655],{"class":147},[49,130709,130685],{"class":62},[49,130711,1403],{"class":66},[49,130713,1478],{"class":73},[49,130715,130692],{"class":66},[49,130717,130384],{"class":73},[49,130719,77],{"class":66},[49,130721,130722],{"class":73},"#ff0000",[49,130724,130701],{"class":66},[49,130726,130727,130729,130731,130733,130735,130737,130739,130741,130743,130746],{"class":51,"line":2867},[49,130728,130602],{"class":62},[49,130730,2655],{"class":147},[49,130732,130685],{"class":62},[49,130734,1403],{"class":66},[49,130736,1472],{"class":73},[49,130738,130692],{"class":66},[49,130740,130384],{"class":73},[49,130742,77],{"class":66},[49,130744,130745],{"class":73},"#00a4ff",[49,130747,130701],{"class":66},[49,130749,130750,130752,130754,130756,130758,130760,130762,130764,130766,130769],{"class":51,"line":2872},[49,130751,130602],{"class":62},[49,130753,2655],{"class":147},[49,130755,130685],{"class":62},[49,130757,1403],{"class":66},[49,130759,1685],{"class":73},[49,130761,130692],{"class":66},[49,130763,130384],{"class":73},[49,130765,77],{"class":66},[49,130767,130768],{"class":73},"#ff00ff",[49,130770,130701],{"class":66},[49,130772,130773,130775,130777,130779,130781,130783,130785,130787,130789,130792],{"class":51,"line":2878},[49,130774,130602],{"class":62},[49,130776,2655],{"class":147},[49,130778,130685],{"class":62},[49,130780,1403],{"class":66},[49,130782,1711],{"class":73},[49,130784,130692],{"class":66},[49,130786,130384],{"class":73},[49,130788,77],{"class":66},[49,130790,130791],{"class":73},"#00ff00",[49,130793,130701],{"class":66},[14,130795,130797],{"id":130796},"_83-css三大特性","8.3 css三大特性",[183,130799,130801],{"id":130800},"_831-层叠性","8.3.1 层叠性",[19,130803,130804],{},"为了解决样式冲突问题",[19,130806,130807],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130809,130810],{},"   ②样式不冲突，不会层叠",[183,130812,130814],{"id":130813},"_832-继承性","8.3.2 继承性",[19,130816,130817],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130819,130820],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[39,130822,130824],{"className":41,"code":130823,"language":43,"meta":44,"style":44},"p {\n  color: #333;\n}\n",[46,130825,130826,130832,130842],{"__ignoreMap":44},[49,130827,130828,130830],{"class":51,"line":52},[49,130829,19],{"class":147},[49,130831,67],{"class":66},[49,130833,130834,130836,130838,130840],{"class":51,"line":59},[49,130835,72135],{"class":73},[49,130837,77],{"class":66},[49,130839,129],{"class":73},[49,130841,83],{"class":66},[49,130843,130844],{"class":51,"line":70},[49,130845,137],{"class":66},[174,130847],{"style":176,"src":130848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130850,130851],{},"解释：①行高可以跟单位也可以不跟单位",[19,130853,130854],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130856,130857],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130859,130860],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[183,130862,130864],{"id":130863},"_833-优先级","8.3.3 优先级",[591,130866,130867,130870],{},[26,130868,130869],{},"选择器相同，则执行层叠性",[26,130871,130872],{},"选择器不同，则根据选择器权重执行",[293,130874,130875,130885],{},[296,130876,130877],{},[299,130878,130879,130882],{},[302,130880,130881],{"align":304},"选择器",[302,130883,130884],{"align":304},"选择器权重",[310,130886,130887,130895,130903,130911,130919,130927],{},[299,130888,130889,130892],{},[315,130890,130891],{"align":304},"继承 或者*",[315,130893,130894],{"align":304},"0，0，0，0",[299,130896,130897,130900],{},[315,130898,130899],{"align":304},"标签选择器",[315,130901,130902],{"align":304},"0，0，0，1",[299,130904,130905,130908],{},[315,130906,130907],{"align":304},"类选择器，伪类选择器",[315,130909,130910],{"align":304},"0，0，1，0",[299,130912,130913,130916],{},[315,130914,130915],{"align":304},"ID选择器",[315,130917,130918],{"align":304},"0，1，0，0",[299,130920,130921,130924],{},[315,130922,130923],{"align":304},"行内样式",[315,130925,130926],{"align":304},"1，0，0，0",[299,130928,130929,130932],{},[315,130930,130931],{"align":304},"！important",[315,130933,130934],{"align":304},"无穷大",[19,130936,130937],{},"! important用法：",[39,130939,130941],{"className":41,"code":130940,"language":43,"meta":44,"style":44},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[46,130942,130943,130948,130954,130967,130971,130976,130982,130992],{"__ignoreMap":44},[49,130944,130945],{"class":51,"line":52},[49,130946,130947],{"class":55},"\u002F* !important 拥有最高优先级 *\u002F\n",[49,130949,130950,130952],{"class":51,"line":59},[49,130951,148],{"class":147},[49,130953,67],{"class":66},[49,130955,130956,130958,130960,130962,130965],{"class":51,"line":70},[49,130957,72135],{"class":73},[49,130959,77],{"class":66},[49,130961,52887],{"class":73},[49,130963,130964],{"class":109}," !important",[49,130966,83],{"class":66},[49,130968,130969],{"class":51,"line":86},[49,130970,137],{"class":66},[49,130972,130973],{"class":51,"line":98},[49,130974,130975],{"class":55},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[49,130977,130978,130980],{"class":51,"line":121},[49,130979,148],{"class":147},[49,130981,67],{"class":66},[49,130983,130984,130986,130988,130990],{"class":51,"line":134},[49,130985,72135],{"class":73},[49,130987,77],{"class":66},[49,130989,58660],{"class":73},[49,130991,83],{"class":66},[49,130993,130994],{"class":51,"line":1085},[49,130995,137],{"class":66},[19,130997,130998],{},"优先级注意点：",[19,131000,131001],{},"①权重是有4组数字组成,但是不会有进位",[19,131003,131004],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131006,131007],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131009,131010],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131012,131013],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131015,131016],{},"⑥复合选择器",[293,131018,131019,131029],{},[296,131020,131021],{},[299,131022,131023,131026],{},[302,131024,131025],{"align":304},"div ul li",[302,131027,131028],{"align":304},"0,0,0,3",[310,131030,131031,131039,131047],{},[299,131032,131033,131036],{},[315,131034,131035],{"align":304},".nav ul li",[315,131037,131038],{"align":304},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[299,131040,131041,131044],{},[315,131042,131043],{"align":304},"a:hover",[315,131045,131046],{"align":304},"0,0,1,1",[299,131048,131049,131052],{},[315,131050,131051],{"align":304},".nav a",[315,131053,131046],{"align":304},[1305,131055,131056],{},"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":44,"searchDepth":59,"depth":59,"links":131058},[131059,131067,131078],{"id":129168,"depth":59,"text":129169,"children":131060},[131061,131062,131063,131064,131065,131066],{"id":129181,"depth":70,"text":129182},{"id":129253,"depth":70,"text":129254},{"id":129325,"depth":70,"text":129326},{"id":129356,"depth":70,"text":129357},{"id":129363,"depth":70,"text":129364},{"id":129515,"depth":70,"text":129516},{"id":129823,"depth":59,"text":129824,"children":131068},[131069,131070,131071,131072,131073,131074,131075,131076,131077],{"id":129830,"depth":70,"text":129831},{"id":129840,"depth":70,"text":129841},{"id":129936,"depth":70,"text":129937},{"id":130009,"depth":70,"text":130010},{"id":130164,"depth":70,"text":130165},{"id":130252,"depth":70,"text":130253},{"id":130304,"depth":70,"text":130305},{"id":130363,"depth":70,"text":130364},{"id":130468,"depth":70,"text":130469},{"id":130796,"depth":59,"text":130797,"children":131079},[131080,131081,131082],{"id":130800,"depth":70,"text":130801},{"id":130813,"depth":70,"text":130814},{"id":130863,"depth":70,"text":130864},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129160,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131089,"title":131090,"body":131091,"description":1327,"extension":1328,"meta":132668,"navigation":1330,"path":132669,"seo":132670,"stem":132671,"__hash__":132672},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131092,"toc":132647},[131093,131096,131100,131103,131106,131109,131112,131115,131118,131121,131125,131133,131167,131203,131206,131220,131225,131259,131262,131355,131360,131363,131393,131396,131401,131409,131413,131420,131466,131510,131515,131518,131521,131524,131527,131530,131533,131535,131538,131542,131547,131591,131596,131599,131602,131634,131639,131642,131645,131648,131651,131683,131686,131689,131692,131724,131727,131730,131733,131737,131740,131772,131775,131779,131799,131802,131810,131813,131817,131822,131825,131857,131862,131865,131903,131907,131912,131915,131918,131948,131951,131968,131973,132025,132085,132090,132144,132182,132186,132190,132193,132197,132205,132208,132210,132221,132226,132270,132304,132307,132310,132313,132316,132360,132363,132366,132369,132372,132375,132378,132422,132425,132428,132431,132434,132437,132440,132446,132449,132493,132496,132499,132502,132505,132508,132552,132555,132557,132560,132564,132568,132606,132610,132613,132616,132620,132628,132632,132635,132638,132641,132644],[10,131094,131090],{"id":131095},"_9-css盒模型浮动与切图",[14,131097,131099],{"id":131098},"_91-盒子模型","9.1 盒子模型",[19,131101,131102],{},"利用盒子来设计网页",[19,131104,131105],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131107,131108],{},"网页布局设置：",[19,131110,131111],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131113,131114],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131116,131117],{},"③往盒子里装内容",[174,131119],{"style":176,"src":131120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[183,131122,131124],{"id":131123},"_911-边框border","9.1.1 边框（border）",[591,131126,131127,131130],{},[26,131128,131129],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[26,131131,131132],{},"语法",[39,131134,131135],{"className":41,"code":360,"language":43,"meta":44,"style":44},[46,131136,131137,131141,131147,131163],{"__ignoreMap":44},[49,131138,131139],{"class":51,"line":52},[49,131140,367],{"class":55},[49,131142,131143,131145],{"class":51,"line":59},[49,131144,148],{"class":147},[49,131146,67],{"class":66},[49,131148,131149,131151,131153,131155,131157,131159,131161],{"class":51,"line":70},[49,131150,101],{"class":73},[49,131152,77],{"class":66},[49,131154,159],{"class":73},[49,131156,110],{"class":109},[49,131158,113],{"class":73},[49,131160,166],{"class":73},[49,131162,83],{"class":66},[49,131164,131165],{"class":51,"line":86},[49,131166,137],{"class":66},[293,131168,131169,131177],{},[296,131170,131171],{},[299,131172,131173,131175],{},[302,131174,130373],{"align":304},[302,131176,103920],{"align":304},[310,131178,131179,131187,131195],{},[299,131180,131181,131184],{},[315,131182,131183],{"align":304},"border-width",[315,131185,131186],{"align":304},"定义边框粗细，单位是px",[299,131188,131189,131192],{},[315,131190,131191],{"align":304},"border-style",[315,131193,131194],{"align":304},"边框的样式",[299,131196,131197,131200],{},[315,131198,131199],{"align":304},"border-color",[315,131201,131202],{"align":304},"边框的颜色",[19,131204,131205],{},"边框样式 border-style 可以设置如下值：",[23,131207,131208,131211,131214,131217],{},[26,131209,131210],{},"none：没有边框即忽略所有边框的宽度（默认值）",[26,131212,131213],{},"solid：边框为单实线(最为常用的)",[26,131215,131216],{},"dashed：边框为虚线",[26,131218,131219],{},"dotted：边框为点线",[591,131221,131222],{"start":70},[26,131223,131224],{},"边框的合写分写",[39,131226,131227],{"className":41,"code":360,"language":43,"meta":44,"style":44},[46,131228,131229,131233,131239,131255],{"__ignoreMap":44},[49,131230,131231],{"class":51,"line":52},[49,131232,367],{"class":55},[49,131234,131235,131237],{"class":51,"line":59},[49,131236,148],{"class":147},[49,131238,67],{"class":66},[49,131240,131241,131243,131245,131247,131249,131251,131253],{"class":51,"line":70},[49,131242,101],{"class":73},[49,131244,77],{"class":66},[49,131246,159],{"class":73},[49,131248,110],{"class":109},[49,131250,113],{"class":73},[49,131252,166],{"class":73},[49,131254,83],{"class":66},[49,131256,131257],{"class":51,"line":86},[49,131258,137],{"class":66},[19,131260,131261],{},"边框分开写法：",[39,131263,131265],{"className":41,"code":131264,"language":43,"meta":44,"style":44},"\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",[46,131266,131267,131272,131278,131296,131314,131333,131351],{"__ignoreMap":44},[49,131268,131269],{"class":51,"line":52},[49,131270,131271],{"class":55},"\u002F* 边框分开写法 *\u002F\n",[49,131273,131274,131276],{"class":51,"line":59},[49,131275,148],{"class":147},[49,131277,67],{"class":66},[49,131279,131280,131283,131285,131287,131289,131291,131294],{"class":51,"line":70},[49,131281,131282],{"class":73},"  border-top",[49,131284,77],{"class":66},[49,131286,159],{"class":73},[49,131288,110],{"class":109},[49,131290,113],{"class":73},[49,131292,131293],{"class":73}," #000",[49,131295,83],{"class":66},[49,131297,131298,131301,131303,131305,131307,131309,131312],{"class":51,"line":86},[49,131299,131300],{"class":73},"  border-right",[49,131302,77],{"class":66},[49,131304,1478],{"class":73},[49,131306,110],{"class":109},[49,131308,63478],{"class":73},[49,131310,131311],{"class":73}," #333",[49,131313,83],{"class":66},[49,131315,131316,131319,131321,131323,131325,131328,131331],{"class":51,"line":98},[49,131317,131318],{"class":73},"  border-bottom",[49,131320,77],{"class":66},[49,131322,1472],{"class":73},[49,131324,110],{"class":109},[49,131326,131327],{"class":73}," dotted",[49,131329,131330],{"class":73}," #666",[49,131332,83],{"class":66},[49,131334,131335,131338,131340,131342,131344,131346,131349],{"class":51,"line":121},[49,131336,131337],{"class":73},"  border-left",[49,131339,77],{"class":66},[49,131341,159],{"class":73},[49,131343,110],{"class":109},[49,131345,113],{"class":73},[49,131347,131348],{"class":73}," #999",[49,131350,83],{"class":66},[49,131352,131353],{"class":51,"line":134},[49,131354,137],{"class":66},[591,131356,131357],{"start":86},[26,131358,131359],{},"表格的细线边框",[19,131361,131362],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[39,131364,131366],{"className":41,"code":131365,"language":43,"meta":44,"style":44},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[46,131367,131368,131373,131379,131389],{"__ignoreMap":44},[49,131369,131370],{"class":51,"line":52},[49,131371,131372],{"class":55},"\u002F* 表格细线边框合并 *\u002F\n",[49,131374,131375,131377],{"class":51,"line":59},[49,131376,293],{"class":147},[49,131378,67],{"class":66},[49,131380,131381,131383,131385,131387],{"class":51,"line":70},[49,131382,71811],{"class":73},[49,131384,77],{"class":66},[49,131386,66270],{"class":73},[49,131388,83],{"class":66},[49,131390,131391],{"class":51,"line":86},[49,131392,137],{"class":66},[19,131394,131395],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[591,131397,131398],{"start":98},[26,131399,131400],{},"解决边框额外增加盒子的实际大小的方法：",[23,131402,131403,131406],{},[26,131404,131405],{},"测量盒子大小的时候,不量边框",[26,131407,131408],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[183,131410,131412],{"id":131411},"_912-内边距","9.1.2 内边距",[591,131414,131415,131418],{},[26,131416,131417],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[26,131419,131132],{},[293,131421,131422,131432],{},[296,131423,131424],{},[299,131425,131426,131429],{},[302,131427,131428],{"align":304},"值的个数",[302,131430,131431],{"align":304},"表达意思",[310,131433,131434,131442,131450,131458],{},[299,131435,131436,131439],{},[315,131437,131438],{"align":304},"padding: 5px;",[315,131440,131441],{"align":304},"1个值，代表上下左右都有5个元素",[299,131443,131444,131447],{},[315,131445,131446],{"align":304},"padding: 5px 10px;",[315,131448,131449],{"align":304},"2个值，代表上下内边距为5像素，左右内边距为10像素",[299,131451,131452,131455],{},[315,131453,131454],{"align":304},"padding: 5px 10px 20px;",[315,131456,131457],{"align":304},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[299,131459,131460,131463],{},[315,131461,131462],{"align":304},"padding: 5px 10px 20px 30px;",[315,131464,131465],{"align":304},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[293,131467,131468,131476],{},[296,131469,131470],{},[299,131471,131472,131474],{},[302,131473,130373],{"align":304},[302,131475,103920],{"align":304},[310,131477,131478,131486,131494,131502],{},[299,131479,131480,131483],{},[315,131481,131482],{"align":304},"padding-left",[315,131484,131485],{"align":304},"左内边距",[299,131487,131488,131491],{},[315,131489,131490],{"align":304},"padding-right",[315,131492,131493],{"align":304},"右内边距",[299,131495,131496,131499],{},[315,131497,131498],{"align":304},"padding-top",[315,131500,131501],{"align":304},"上内边距",[299,131503,131504,131507],{},[315,131505,131506],{"align":304},"padding-bottom",[315,131508,131509],{"align":304},"下内边距",[591,131511,131512],{"start":70},[26,131513,131514],{},"内边距会影响盒子的实际大小",[19,131516,131517],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131519,131520],{},"①内容和边框有了距离，添加了内边距",[19,131522,131523],{},"②padding影响了盒子实际大小",[19,131525,131526],{},"内边距对盒子大小的影响：",[19,131528,131529],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131531,131532],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131534,96445],{},[19,131536,131537],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[183,131539,131541],{"id":131540},"_913-外边距","9.1.3 外边距",[591,131543,131544],{},[26,131545,131546],{},"控制盒子与盒子之间的距离",[293,131548,131549,131557],{},[296,131550,131551],{},[299,131552,131553,131555],{},[302,131554,130373],{"align":304},[302,131556,103920],{"align":304},[310,131558,131559,131567,131575,131583],{},[299,131560,131561,131564],{},[315,131562,131563],{"align":304},"margin-left",[315,131565,131566],{"align":304},"左外边距",[299,131568,131569,131572],{},[315,131570,131571],{"align":304},"margin-right",[315,131573,131574],{"align":304},"右外边距",[299,131576,131577,131580],{},[315,131578,131579],{"align":304},"margin-top",[315,131581,131582],{"align":304},"上外边距",[299,131584,131585,131588],{},[315,131586,131587],{"align":304},"margin-bottom",[315,131589,131590],{"align":304},"下外边距",[591,131592,131593],{"start":59},[26,131594,131595],{},"外边距可以让块级盒子水平居中的两个条件：",[19,131597,131598],{},"①盒子必须指定了宽度（width）",[19,131600,131601],{},"②盒子左右的外边距都设置为 auto",[39,131603,131604],{"className":41,"code":1106,"language":43,"meta":44,"style":44},[46,131605,131606,131610,131616,131630],{"__ignoreMap":44},[49,131607,131608],{"class":51,"line":52},[49,131609,1059],{"class":55},[49,131611,131612,131614],{"class":51,"line":59},[49,131613,838],{"class":62},[49,131615,67],{"class":66},[49,131617,131618,131620,131622,131624,131626,131628],{"class":51,"line":70},[49,131619,1070],{"class":73},[49,131621,77],{"class":66},[49,131623,80],{"class":73},[49,131625,1077],{"class":73},[49,131627,463],{"class":66},[49,131629,1082],{"class":55},[49,131631,131632],{"class":51,"line":86},[49,131633,137],{"class":66},[591,131635,131636],{"start":70},[26,131637,131638],{},"外边距塌陷问题",[19,131640,131641],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[174,131643],{"style":176,"src":131644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,131646,131647],{},"解决方案：",[19,131649,131650],{},"①可以为父亲元素定义上边距",[39,131652,131653],{"className":41,"code":1106,"language":43,"meta":44,"style":44},[46,131654,131655,131659,131665,131679],{"__ignoreMap":44},[49,131656,131657],{"class":51,"line":52},[49,131658,1059],{"class":55},[49,131660,131661,131663],{"class":51,"line":59},[49,131662,838],{"class":62},[49,131664,67],{"class":66},[49,131666,131667,131669,131671,131673,131675,131677],{"class":51,"line":70},[49,131668,1070],{"class":73},[49,131670,77],{"class":66},[49,131672,80],{"class":73},[49,131674,1077],{"class":73},[49,131676,463],{"class":66},[49,131678,1082],{"class":55},[49,131680,131681],{"class":51,"line":86},[49,131682,137],{"class":66},[19,131684,131685],{},"②可以为父亲元素定义上内边距",[19,131687,131688],{},"③可以为父亲元素添加overflow:hidden",[174,131690],{"style":176,"src":131691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[39,131693,131694],{"className":41,"code":1106,"language":43,"meta":44,"style":44},[46,131695,131696,131700,131706,131720],{"__ignoreMap":44},[49,131697,131698],{"class":51,"line":52},[49,131699,1059],{"class":55},[49,131701,131702,131704],{"class":51,"line":59},[49,131703,838],{"class":62},[49,131705,67],{"class":66},[49,131707,131708,131710,131712,131714,131716,131718],{"class":51,"line":70},[49,131709,1070],{"class":73},[49,131711,77],{"class":66},[49,131713,80],{"class":73},[49,131715,1077],{"class":73},[49,131717,463],{"class":66},[49,131719,1082],{"class":55},[49,131721,131722],{"class":51,"line":86},[49,131723,137],{"class":66},[174,131725],{"style":176,"src":131726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131728,131729],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131731,131732],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[183,131734,131736],{"id":131735},"_914-清除内外边距","9.1.4 清除内外边距",[19,131738,131739],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[39,131741,131742],{"className":41,"code":1106,"language":43,"meta":44,"style":44},[46,131743,131744,131748,131754,131768],{"__ignoreMap":44},[49,131745,131746],{"class":51,"line":52},[49,131747,1059],{"class":55},[49,131749,131750,131752],{"class":51,"line":59},[49,131751,838],{"class":62},[49,131753,67],{"class":66},[49,131755,131756,131758,131760,131762,131764,131766],{"class":51,"line":70},[49,131757,1070],{"class":73},[49,131759,77],{"class":66},[49,131761,80],{"class":73},[49,131763,1077],{"class":73},[49,131765,463],{"class":66},[49,131767,1082],{"class":55},[49,131769,131770],{"class":51,"line":86},[49,131771,137],{"class":66},[19,131773,131774],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[183,131776,131778],{"id":131777},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[23,131780,131781,131784,131787,131790,131793,131796],{},[26,131782,131783],{},"文件→打开 ：可以打开我们要测量的图片",[26,131785,131786],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[26,131788,131789],{},"右击标尺，把里面的单位改为像素",[26,131791,131792],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[26,131794,131795],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[26,131797,131798],{},"用选区拖动 可以测量大小",[174,131800],{"style":176,"src":131801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[23,131803,131804,131807],{},[26,131805,131806],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[26,131808,131809],{},"吸管取色工具",[174,131811],{"style":176,"src":131812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[183,131814,131816],{"id":131815},"_916-案例","9.1.6 案例",[591,131818,131819],{},[26,131820,131821],{},"小米商品",[174,131823],{"style":176,"src":131824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[39,131826,131827],{"className":41,"code":1106,"language":43,"meta":44,"style":44},[46,131828,131829,131833,131839,131853],{"__ignoreMap":44},[49,131830,131831],{"class":51,"line":52},[49,131832,1059],{"class":55},[49,131834,131835,131837],{"class":51,"line":59},[49,131836,838],{"class":62},[49,131838,67],{"class":66},[49,131840,131841,131843,131845,131847,131849,131851],{"class":51,"line":70},[49,131842,1070],{"class":73},[49,131844,77],{"class":66},[49,131846,80],{"class":73},[49,131848,1077],{"class":73},[49,131850,463],{"class":66},[49,131852,1082],{"class":55},[49,131854,131855],{"class":51,"line":86},[49,131856,137],{"class":66},[591,131858,131859],{"start":59},[26,131860,131861],{},"快报模块",[174,131863],{"style":176,"src":131864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[39,131866,131868],{"className":128519,"code":131867,"language":128521,"meta":44,"style":44},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[46,131869,131870,131875,131890,131895],{"__ignoreMap":44},[49,131871,131872],{"class":51,"line":52},[49,131873,131874],{"class":55},"\u003C!-- HTML 代码示例 -->\n",[49,131876,131877,131879,131881,131883,131885,131888],{"class":51,"line":59},[49,131878,2300],{"class":66},[49,131880,148],{"class":147},[49,131882,54728],{"class":62},[49,131884,1448],{"class":66},[49,131886,131887],{"class":1505},"\"example\"",[49,131889,52554],{"class":66},[49,131891,131892],{"class":51,"line":70},[49,131893,131894],{"class":66},"  示例内容\n",[49,131896,131897,131899,131901],{"class":51,"line":86},[49,131898,53027],{"class":66},[49,131900,148],{"class":147},[49,131902,52554],{"class":66},[183,131904,131906],{"id":131905},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[591,131908,131909],{},[26,131910,131911],{},"圆角边框",[19,131913,131914],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[174,131916],{"style":176,"src":131917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[39,131919,131920],{"className":41,"code":140,"language":43,"meta":44,"style":44},[46,131921,131922,131928,131944],{"__ignoreMap":44},[49,131923,131924,131926],{"class":51,"line":52},[49,131925,148],{"class":147},[49,131927,67],{"class":66},[49,131929,131930,131932,131934,131936,131938,131940,131942],{"class":51,"line":59},[49,131931,101],{"class":73},[49,131933,77],{"class":66},[49,131935,159],{"class":73},[49,131937,110],{"class":109},[49,131939,113],{"class":73},[49,131941,166],{"class":73},[49,131943,83],{"class":66},[49,131945,131946],{"class":51,"line":70},[49,131947,137],{"class":66},[19,131949,131950],{},"解释:",[23,131952,131953,131956,131959,131962,131965],{},[26,131954,131955],{},"参数值可以为数值或百分比的形式",[26,131957,131958],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[26,131960,131961],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[26,131963,131964],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[26,131966,131967],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[591,131969,131970],{"start":59},[26,131971,131972],{},"盒子阴影",[39,131974,131976],{"className":41,"code":131975,"language":43,"meta":44,"style":44},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[46,131977,131978,131984,132021],{"__ignoreMap":44},[49,131979,131980,131982],{"class":51,"line":52},[49,131981,148],{"class":147},[49,131983,67],{"class":66},[49,131985,131986,131989,131991,131993,131995,131997,131999,132001,132003,132005,132007,132009,132011,132013,132015,132017,132019],{"class":51,"line":59},[49,131987,131988],{"class":73},"  box-shadow",[49,131990,77],{"class":66},[49,131992,80],{"class":73},[49,131994,16006],{"class":73},[49,131996,110],{"class":109},[49,131998,3292],{"class":73},[49,132000,110],{"class":109},[49,132002,79994],{"class":73},[49,132004,1403],{"class":66},[49,132006,80],{"class":73},[49,132008,13687],{"class":66},[49,132010,80],{"class":73},[49,132012,13687],{"class":66},[49,132014,80],{"class":73},[49,132016,13687],{"class":66},[49,132018,87435],{"class":73},[49,132020,3973],{"class":66},[49,132022,132023],{"class":51,"line":70},[49,132024,137],{"class":66},[293,132026,132027,132035],{},[296,132028,132029],{},[299,132030,132031,132033],{},[302,132032,1548],{"align":304},[302,132034,308],{"align":304},[310,132036,132037,132045,132053,132061,132069,132077],{},[299,132038,132039,132042],{},[315,132040,132041],{"align":304},"h-shadow",[315,132043,132044],{"align":304},"必需,水平阴影的位置,允许负值",[299,132046,132047,132050],{},[315,132048,132049],{"align":304},"v-shadow",[315,132051,132052],{"align":304},"必需,垂直阴影的位置,允许负值",[299,132054,132055,132058],{},[315,132056,132057],{"align":304},"blur",[315,132059,132060],{"align":304},"可选,模糊距离,就是影子的虚实",[299,132062,132063,132066],{},[315,132064,132065],{"align":304},"spread",[315,132067,132068],{"align":304},"可选,阴影尺寸",[299,132070,132071,132074],{},[315,132072,132073],{"align":304},"color",[315,132075,132076],{"align":304},"可选,阴影的颜色",[299,132078,132079,132082],{},[315,132080,132081],{"align":304},"inset",[315,132083,132084],{"align":304},"可选,将外部阴影(outset)改为内部阴影",[591,132086,132087],{"start":70},[26,132088,132089],{},"文字阴影",[39,132091,132093],{"className":41,"code":132092,"language":43,"meta":44,"style":44},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[46,132094,132095,132101,132140],{"__ignoreMap":44},[49,132096,132097,132099],{"class":51,"line":52},[49,132098,19],{"class":147},[49,132100,67],{"class":66},[49,132102,132103,132106,132108,132110,132112,132114,132116,132118,132120,132122,132124,132126,132128,132130,132132,132134,132136,132138],{"class":51,"line":59},[49,132104,132105],{"class":73},"  text-shadow",[49,132107,77],{"class":66},[49,132109,159],{"class":73},[49,132111,110],{"class":109},[49,132113,26367],{"class":73},[49,132115,110],{"class":109},[49,132117,16006],{"class":73},[49,132119,110],{"class":109},[49,132121,79994],{"class":73},[49,132123,1403],{"class":66},[49,132125,80],{"class":73},[49,132127,13687],{"class":66},[49,132129,80],{"class":73},[49,132131,13687],{"class":66},[49,132133,80],{"class":73},[49,132135,13687],{"class":66},[49,132137,101745],{"class":73},[49,132139,3973],{"class":66},[49,132141,132142],{"class":51,"line":70},[49,132143,137],{"class":66},[293,132145,132146,132154],{},[296,132147,132148],{},[299,132149,132150,132152],{},[302,132151,1548],{"align":304},[302,132153,308],{"align":304},[310,132155,132156,132162,132169,132176],{},[299,132157,132158,132160],{},[315,132159,132041],{"align":304},[315,132161,132044],{"align":304},[299,132163,132164,132166],{},[315,132165,132049],{"align":304},[315,132167,132168],{"align":304},"必需,垂直阴影位置,允许负值",[299,132170,132171,132173],{},[315,132172,132057],{"align":304},[315,132174,132175],{"align":304},"可选,模糊的距离",[299,132177,132178,132180],{},[315,132179,132073],{"align":304},[315,132181,132076],{"align":304},[14,132183,132185],{"id":132184},"_92-浮动","9.2 浮动",[183,132187,132189],{"id":132188},"_921-浮动介绍","9.2.1 浮动介绍",[19,132191,132192],{},"在16.2中详细介绍",[183,132194,132196],{"id":132195},"_922-清除浮动","9.2.2 清除浮动",[591,132198,132199,132202],{},[26,132200,132201],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[26,132203,132204],{},"清除浮动的本质",[19,132206,132207],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132209,10277],{},[23,132211,132212,132215,132218],{},[26,132213,132214],{},"如果父盒子本身有高度，则不需要清除浮动",[26,132216,132217],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[26,132219,132220],{},"父级有了高度，就不会影响下面的标准流了",[591,132222,132223],{"start":70},[26,132224,132225],{},"清除浮动样式",[39,132227,132228],{"className":41,"code":1192,"language":43,"meta":44,"style":44},[46,132229,132230,132236,132246,132250,132256,132266],{"__ignoreMap":44},[49,132231,132232,132234],{"class":51,"line":52},[49,132233,1199],{"class":62},[49,132235,67],{"class":66},[49,132237,132238,132240,132242,132244],{"class":51,"line":59},[49,132239,1039],{"class":73},[49,132241,77],{"class":66},[49,132243,304],{"class":73},[49,132245,83],{"class":66},[49,132247,132248],{"class":51,"line":70},[49,132249,137],{"class":66},[49,132251,132252,132254],{"class":51,"line":86},[49,132253,1220],{"class":62},[49,132255,67],{"class":66},[49,132257,132258,132260,132262,132264],{"class":51,"line":98},[49,132259,1039],{"class":73},[49,132261,77],{"class":66},[49,132263,1231],{"class":73},[49,132265,83],{"class":66},[49,132267,132268],{"class":51,"line":121},[49,132269,137],{"class":66},[293,132271,132272,132280],{},[296,132273,132274],{},[299,132275,132276,132278],{},[302,132277,305],{"align":304},[302,132279,308],{"align":304},[310,132281,132282,132289,132296],{},[299,132283,132284,132286],{},[315,132285,304],{"align":304},[315,132287,132288],{"align":304},"不允许左侧有浮动元素（清除左侧浮动的影响）",[299,132290,132291,132293],{},[315,132292,1231],{"align":304},[315,132294,132295],{"align":304},"不允许右侧有浮动元素（清除右侧浮动的影响）",[299,132297,132298,132301],{},[315,132299,132300],{"align":304},"both",[315,132302,132303],{"align":304},"同时清除左右侧浮动的影响",[19,132305,132306],{},"法一",[19,132308,132309],{},"额外标签法也称为隔墙法",[19,132311,132312],{},"使用方式：",[19,132314,132315],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[39,132317,132318],{"className":41,"code":1192,"language":43,"meta":44,"style":44},[46,132319,132320,132326,132336,132340,132346,132356],{"__ignoreMap":44},[49,132321,132322,132324],{"class":51,"line":52},[49,132323,1199],{"class":62},[49,132325,67],{"class":66},[49,132327,132328,132330,132332,132334],{"class":51,"line":59},[49,132329,1039],{"class":73},[49,132331,77],{"class":66},[49,132333,304],{"class":73},[49,132335,83],{"class":66},[49,132337,132338],{"class":51,"line":70},[49,132339,137],{"class":66},[49,132341,132342,132344],{"class":51,"line":86},[49,132343,1220],{"class":62},[49,132345,67],{"class":66},[49,132347,132348,132350,132352,132354],{"class":51,"line":98},[49,132349,1039],{"class":73},[49,132351,77],{"class":66},[49,132353,1231],{"class":73},[49,132355,83],{"class":66},[49,132357,132358],{"class":51,"line":121},[49,132359,137],{"class":66},[19,132361,132362],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132364,132365],{},"优点： 通俗易懂，书写方便",[19,132367,132368],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132370,132371],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132373,132374],{},"法二",[19,132376,132377],{},"父级添加overflow属性",[39,132379,132380],{"className":41,"code":1192,"language":43,"meta":44,"style":44},[46,132381,132382,132388,132398,132402,132408,132418],{"__ignoreMap":44},[49,132383,132384,132386],{"class":51,"line":52},[49,132385,1199],{"class":62},[49,132387,67],{"class":66},[49,132389,132390,132392,132394,132396],{"class":51,"line":59},[49,132391,1039],{"class":73},[49,132393,77],{"class":66},[49,132395,304],{"class":73},[49,132397,83],{"class":66},[49,132399,132400],{"class":51,"line":70},[49,132401,137],{"class":66},[49,132403,132404,132406],{"class":51,"line":86},[49,132405,1220],{"class":62},[49,132407,67],{"class":66},[49,132409,132410,132412,132414,132416],{"class":51,"line":98},[49,132411,1039],{"class":73},[49,132413,77],{"class":66},[49,132415,1231],{"class":73},[49,132417,83],{"class":66},[49,132419,132420],{"class":51,"line":121},[49,132421,137],{"class":66},[19,132423,132424],{},"overflow: hidden;",[19,132426,132427],{},"优点：代码简洁",[19,132429,132430],{},"缺点：无法显示溢出的部分",[19,132432,132433],{},"注意：是给父元素添加代码",[19,132435,132436],{},"法三",[19,132438,132439],{},"父级添加after伪元素",[19,132441,132442,132445],{},[132443,132444],"after",{}," 方式是额外标签法的升级版",[19,132447,132448],{},"使用的时候复制就可以",[39,132450,132451],{"className":41,"code":1192,"language":43,"meta":44,"style":44},[46,132452,132453,132459,132469,132473,132479,132489],{"__ignoreMap":44},[49,132454,132455,132457],{"class":51,"line":52},[49,132456,1199],{"class":62},[49,132458,67],{"class":66},[49,132460,132461,132463,132465,132467],{"class":51,"line":59},[49,132462,1039],{"class":73},[49,132464,77],{"class":66},[49,132466,304],{"class":73},[49,132468,83],{"class":66},[49,132470,132471],{"class":51,"line":70},[49,132472,137],{"class":66},[49,132474,132475,132477],{"class":51,"line":86},[49,132476,1220],{"class":62},[49,132478,67],{"class":66},[49,132480,132481,132483,132485,132487],{"class":51,"line":98},[49,132482,1039],{"class":73},[49,132484,77],{"class":66},[49,132486,1231],{"class":73},[49,132488,83],{"class":66},[49,132490,132491],{"class":51,"line":121},[49,132492,137],{"class":66},[19,132494,132495],{},"优点：没有增加标签，结构更简单",[19,132497,132498],{},"缺点：照顾低版本浏览器",[19,132500,132501],{},"代表网站： 百度、淘宝网、网易等",[19,132503,132504],{},"法四",[19,132506,132507],{},"父级添加双伪元素",[39,132509,132510],{"className":41,"code":1192,"language":43,"meta":44,"style":44},[46,132511,132512,132518,132528,132532,132538,132548],{"__ignoreMap":44},[49,132513,132514,132516],{"class":51,"line":52},[49,132515,1199],{"class":62},[49,132517,67],{"class":66},[49,132519,132520,132522,132524,132526],{"class":51,"line":59},[49,132521,1039],{"class":73},[49,132523,77],{"class":66},[49,132525,304],{"class":73},[49,132527,83],{"class":66},[49,132529,132530],{"class":51,"line":70},[49,132531,137],{"class":66},[49,132533,132534,132536],{"class":51,"line":86},[49,132535,1220],{"class":62},[49,132537,67],{"class":66},[49,132539,132540,132542,132544,132546],{"class":51,"line":98},[49,132541,1039],{"class":73},[49,132543,77],{"class":66},[49,132545,1231],{"class":73},[49,132547,83],{"class":66},[49,132549,132550],{"class":51,"line":121},[49,132551,137],{"class":66},[19,132553,132554],{},"优点：代码更简洁",[19,132556,132498],{},[19,132558,132559],{},"代表网站：小米、腾讯等",[14,132561,132563],{"id":132562},"_93-ps切图","9.3 PS切图",[183,132565,132567],{"id":132566},"_931-常见图片格式","9.3.1 常见图片格式",[293,132569,132570,132580],{},[296,132571,132572],{},[299,132573,132574,132577],{},[302,132575,132576],{"align":304},"jpg图像格式",[302,132578,132579],{"align":304},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[310,132581,132582,132590,132598],{},[299,132583,132584,132587],{},[315,132585,132586],{"align":304},"gif图像格式",[315,132588,132589],{"align":304},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[299,132591,132592,132595],{},[315,132593,132594],{"align":304},"png图像格式",[315,132596,132597],{"align":304},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[299,132599,132600,132603],{},[315,132601,132602],{"align":304},"PSD图像格式",[315,132604,132605],{"align":304},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[183,132607,132609],{"id":132608},"_932-图层切图","9.3.2 图层切图",[19,132611,132612],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,132614,132615],{},"按住shift选中两个图层->图层菜单->合并图层",[183,132617,132619],{"id":132618},"_933-切片切图","9.3.3 切片切图",[23,132621,132622,132625],{},[26,132623,132624],{},"利用切片工具手动划出",[26,132626,132627],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[183,132629,132631],{"id":132630},"_934-切图步骤","9.3.4 切图步骤",[19,132633,132634],{},"用切片工具选中：",[174,132636],{"style":176,"src":132637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,132639,132640],{},"文件 -> 导出",[174,132642],{"style":176,"src":132643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1305,132645,132646],{},"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":44,"searchDepth":59,"depth":59,"links":132648},[132649,132658,132662],{"id":131098,"depth":59,"text":131099,"children":132650},[132651,132652,132653,132654,132655,132656,132657],{"id":131123,"depth":70,"text":131124},{"id":131411,"depth":70,"text":131412},{"id":131540,"depth":70,"text":131541},{"id":131735,"depth":70,"text":131736},{"id":131777,"depth":70,"text":131778},{"id":131815,"depth":70,"text":131816},{"id":131905,"depth":70,"text":131906},{"id":132184,"depth":59,"text":132185,"children":132659},[132660,132661],{"id":132188,"depth":70,"text":132189},{"id":132195,"depth":70,"text":132196},{"id":132562,"depth":59,"text":132563,"children":132663},[132664,132665,132666,132667],{"id":132566,"depth":70,"text":132567},{"id":132608,"depth":70,"text":132609},{"id":132618,"depth":70,"text":132619},{"id":132630,"depth":70,"text":132631},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131090,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132674,"title":132675,"body":132676,"description":1327,"extension":1328,"meta":133317,"navigation":1330,"path":133318,"seo":133319,"stem":133320,"__hash__":133321},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132677,"toc":133305},[132678,132681,132685,132711,132745,132749,132753,132756,132798,132805,132815,132823,132825,132828,132831,132834,132841,132855,132859,132862,132891,132895,132898,132912,132916,132919,132947,132951,132954,132980,132984,132989,133022,133027,133055,133059,133076,133122,133127,133171,133188,133295,133303],[10,132679,132675],{"id":132680},"_10-css规范与学成在线案例",[14,132682,132684],{"id":132683},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[591,132686,132687,132693,132699,132705],{},[26,132688,132689,132692],{},[485,132690,132691],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[26,132694,132695,132698],{},[485,132696,132697],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[26,132700,132701,132704],{},[485,132702,132703],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[26,132706,132707,132710],{},[485,132708,132709],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[39,132712,132713],{"className":41,"code":360,"language":43,"meta":44,"style":44},[46,132714,132715,132719,132725,132741],{"__ignoreMap":44},[49,132716,132717],{"class":51,"line":52},[49,132718,367],{"class":55},[49,132720,132721,132723],{"class":51,"line":59},[49,132722,148],{"class":147},[49,132724,67],{"class":66},[49,132726,132727,132729,132731,132733,132735,132737,132739],{"class":51,"line":70},[49,132728,101],{"class":73},[49,132730,77],{"class":66},[49,132732,159],{"class":73},[49,132734,110],{"class":109},[49,132736,113],{"class":73},[49,132738,166],{"class":73},[49,132740,83],{"class":66},[49,132742,132743],{"class":51,"line":86},[49,132744,137],{"class":66},[14,132746,132748],{"id":132747},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[183,132750,132752],{"id":132751},"_1021-header头部制作","10.2.1 header头部制作",[174,132754],{"style":176,"src":132755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[23,132757,132758,132765,132772,132778,132785,132792],{},[26,132759,132760,132761,132764],{},"1号是版心盒子 ",[485,132762,132763],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[26,132766,132767,132768,132771],{},"版心盒子 里面包含 2号盒子 ",[485,132769,132770],{},"logo"," 图标",[26,132773,132774,132775,132777],{},"版心盒子 里面包含 3号盒子 ",[485,132776,54955],{}," 导航栏",[26,132779,132780,132781,132784],{},"版心盒子 里面包含 4号盒子 ",[485,132782,132783],{},"search"," 搜索框",[26,132786,132787,132788,132791],{},"版心盒子 里面包含 5号盒子 ",[485,132789,132790],{},"user"," 个人信息",[26,132793,132794,132795],{},"注意，要求里面的 ",[485,132796,132797],{},"4个子盒子 必须都浮动",[591,132799,132800],{},[26,132801,132802],{},[485,132803,132804],{},"导航栏注意点:",[19,132806,132807,132808,132811,132812],{},"实际开发中， ",[485,132809,132810],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[485,132813,132814],{},"用 li 包含链接(li+a)的做法",[23,132816,132817,132820],{},[26,132818,132819],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[26,132821,132822],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132824,10277],{},[19,132826,132827],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132829,132830],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132832,132833],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[591,132835,132836],{"start":59},[26,132837,132838],{},[485,132839,132840],{},"4号盒子search的细节：",[23,132842,132843,132846,132849],{},[26,132844,132845],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[26,132847,132848],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[26,132850,132851,132854],{},[46,132852,132853],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[183,132856,132858],{"id":132857},"_1022-banner制作","10.2.2 banner制作",[174,132860],{"style":176,"src":132861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[23,132863,132864,132871,132877,132884],{},[26,132865,132866,132867,132870],{},"1号盒子是通栏的大盒子 ",[485,132868,132869],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[26,132872,132873,132874,132876],{},"2号盒子是版心 ",[485,132875,2185],{}," ， 要水平居中对齐",[26,132878,132879,132880,132883],{},"3号盒子版心内，左对齐 ",[485,132881,132882],{},"subnav"," 侧导航栏",[26,132885,132886,132887,132890],{},"4号盒子版心内，右对齐 ",[485,132888,132889],{},"course"," 课程",[183,132892,132894],{"id":132893},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[174,132896],{"style":176,"src":132897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[23,132899,132900,132903,132906,132909],{},[26,132901,132902],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[26,132904,132905],{},"1号盒子是标题 H3 左侧浮动",[26,132907,132908],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[26,132910,132911],{},"3号盒子 右浮动 mod 修改",[183,132913,132915],{"id":132914},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[174,132917],{"style":176,"src":132918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[23,132920,132921,132927,132934,132941,132944],{},[26,132922,132923,132924,132926],{},"1号盒子为最大的盒子 ",[485,132925,54956],{}," 版心水平居中对齐",[26,132928,132929,132930,132933],{},"2号盒子为上面部分 ",[485,132931,132932],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[26,132935,132936,132937,132940],{},"3号盒子为底下部分 ",[485,132938,132939],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[26,132942,132943],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[26,132945,132946],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[183,132948,132950],{"id":132949},"_1025-底部模块制作","10.2.5 底部模块制作",[174,132952],{"style":176,"src":132953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[23,132955,132956,132963,132966,132973],{},[26,132957,132958,132959,132962],{},"1号盒子通栏大盒子 底部 ",[485,132960,132961],{},"footer"," 给高度 底色是白色",[26,132964,132965],{},"2号盒子版心水平居中",[26,132967,132968,132969,132972],{},"3号盒子版权 ",[485,132970,132971],{},"copyright"," 左对齐",[26,132974,132975,132976,132979],{},"4号盒子 链接组 ",[485,132977,132978],{},"links"," 右对齐",[183,132981,132983],{"id":132982},"_1026-代码模块","10.2.6 代码模块",[591,132985,132986],{},[26,132987,132988],{},"html部分",[39,132990,132992],{"className":128519,"code":132991,"language":128521,"meta":44,"style":44},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[46,132993,132994],{"__ignoreMap":44},[49,132995,132996,132998,133000,133002,133004,133007,133010,133012,133015,133018,133020],{"class":51,"line":52},[49,132997,2300],{"class":66},[49,132999,1630],{"class":147},[49,133001,62295],{"class":62},[49,133003,1448],{"class":66},[49,133005,133006],{"class":1505},"\"https:\u002F\u002Fexample.com\"",[49,133008,133009],{"class":62}," target",[49,133011,1448],{"class":66},[49,133013,133014],{"class":1505},"\"_blank\"",[49,133016,133017],{"class":66},">链接文字\u003C\u002F",[49,133019,1630],{"class":147},[49,133021,52554],{"class":66},[591,133023,133024],{"start":59},[26,133025,133026],{},"css部分",[39,133028,133029],{"className":128519,"code":132991,"language":128521,"meta":44,"style":44},[46,133030,133031],{"__ignoreMap":44},[49,133032,133033,133035,133037,133039,133041,133043,133045,133047,133049,133051,133053],{"class":51,"line":52},[49,133034,2300],{"class":66},[49,133036,1630],{"class":147},[49,133038,62295],{"class":62},[49,133040,1448],{"class":66},[49,133042,133006],{"class":1505},[49,133044,133009],{"class":62},[49,133046,1448],{"class":66},[49,133048,133014],{"class":1505},[49,133050,133017],{"class":66},[49,133052,1630],{"class":147},[49,133054,52554],{"class":66},[183,133056,133058],{"id":133057},"_1027-收获","10.2.7 收获",[591,133060,133061,133064,133067,133070,133073],{},[26,133062,133063],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[26,133065,133066],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[26,133068,133069],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[26,133071,133072],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[26,133074,133075],{},"遗忘代码",[39,133077,133079],{"className":41,"code":133078,"language":43,"meta":44,"style":44},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[46,133080,133081,133103,133108,133118],{"__ignoreMap":44},[49,133082,133083,133085,133087,133089,133091,133093,133095,133097,133099,133101],{"class":51,"line":52},[49,133084,148],{"class":147},[49,133086,13687],{"class":66},[49,133088,19],{"class":147},[49,133090,13687],{"class":66},[49,133092,10],{"class":147},[49,133094,13687],{"class":66},[49,133096,23],{"class":147},[49,133098,13687],{"class":66},[49,133100,26],{"class":147},[49,133102,67],{"class":66},[49,133104,133105],{"class":51,"line":59},[49,133106,133107],{"class":55},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[49,133109,133110,133112,133114,133116],{"class":51,"line":70},[49,133111,669],{"class":73},[49,133113,77],{"class":66},[49,133115,674],{"class":73},[49,133117,83],{"class":66},[49,133119,133120],{"class":51,"line":86},[49,133121,137],{"class":66},[591,133123,133124],{"start":121},[26,133125,133126],{},"html引css的程序",[39,133128,133129],{"className":41,"code":133078,"language":43,"meta":44,"style":44},[46,133130,133131,133153,133157,133167],{"__ignoreMap":44},[49,133132,133133,133135,133137,133139,133141,133143,133145,133147,133149,133151],{"class":51,"line":52},[49,133134,148],{"class":147},[49,133136,13687],{"class":66},[49,133138,19],{"class":147},[49,133140,13687],{"class":66},[49,133142,10],{"class":147},[49,133144,13687],{"class":66},[49,133146,23],{"class":147},[49,133148,13687],{"class":66},[49,133150,26],{"class":147},[49,133152,67],{"class":66},[49,133154,133155],{"class":51,"line":59},[49,133156,133107],{"class":55},[49,133158,133159,133161,133163,133165],{"class":51,"line":70},[49,133160,669],{"class":73},[49,133162,77],{"class":66},[49,133164,674],{"class":73},[49,133166,83],{"class":66},[49,133168,133169],{"class":51,"line":86},[49,133170,137],{"class":66},[591,133172,133173,133176,133179,133182,133185],{"start":134},[26,133174,133175],{},"浮动的盒子不会有外边距合并问题",[26,133177,133178],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[26,133180,133181],{},"ctrl+g快速定位行；shift+alt多个光标",[26,133183,133184],{},"学习上方各个模块的选择器起名方法，以后就这样用",[26,133186,133187],{},"在写选择器时尽量写全一些，例如",[39,133189,133191],{"className":41,"code":133190,"language":43,"meta":44,"style":44},"\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",[46,133192,133193,133198,133214,133219,133234,133239,133254,133259,133274,133279],{"__ignoreMap":44},[49,133194,133195],{"class":51,"line":52},[49,133196,133197],{"class":55},"\u002F* 静态定位（默认） *\u002F\n",[49,133199,133200,133203,133205,133207,133209,133212],{"class":51,"line":59},[49,133201,133202],{"class":62},".static",[49,133204,203],{"class":66},[49,133206,130131],{"class":73},[49,133208,77],{"class":66},[49,133210,133211],{"class":73},"static",[49,133213,130701],{"class":66},[49,133215,133216],{"class":51,"line":70},[49,133217,133218],{"class":55},"\u002F* 相对定位 *\u002F\n",[49,133220,133221,133224,133226,133228,133230,133232],{"class":51,"line":86},[49,133222,133223],{"class":62},".relative",[49,133225,203],{"class":66},[49,133227,130131],{"class":73},[49,133229,77],{"class":66},[49,133231,850],{"class":73},[49,133233,130701],{"class":66},[49,133235,133236],{"class":51,"line":98},[49,133237,133238],{"class":55},"\u002F* 绝对定位 *\u002F\n",[49,133240,133241,133244,133246,133248,133250,133252],{"class":51,"line":121},[49,133242,133243],{"class":62},".absolute",[49,133245,203],{"class":66},[49,133247,130131],{"class":73},[49,133249,77],{"class":66},[49,133251,56070],{"class":73},[49,133253,130701],{"class":66},[49,133255,133256],{"class":51,"line":134},[49,133257,133258],{"class":55},"\u002F* 固定定位 *\u002F\n",[49,133260,133261,133264,133266,133268,133270,133272],{"class":51,"line":1085},[49,133262,133263],{"class":62},".fixed",[49,133265,203],{"class":66},[49,133267,130131],{"class":73},[49,133269,77],{"class":66},[49,133271,87458],{"class":73},[49,133273,130701],{"class":66},[49,133275,133276],{"class":51,"line":2574},[49,133277,133278],{"class":55},"\u002F* 粘性定位 *\u002F\n",[49,133280,133281,133284,133286,133288,133290,133293],{"class":51,"line":2586},[49,133282,133283],{"class":62},".sticky",[49,133285,203],{"class":66},[49,133287,130131],{"class":73},[49,133289,77],{"class":66},[49,133291,133292],{"class":73},"sticky",[49,133294,130701],{"class":66},[591,133296,133297,133300],{"start":2872},[26,133298,133299],{},"一定要用好注释",[26,133301,133302],{},"浮动的盒子不会有外边距合并的问题",[1305,133304,132646],{},{"title":44,"searchDepth":59,"depth":59,"links":133306},[133307,133308],{"id":132683,"depth":59,"text":132684},{"id":132747,"depth":59,"text":132748,"children":133309},[133310,133311,133312,133313,133314,133315,133316],{"id":132751,"depth":70,"text":132752},{"id":132857,"depth":70,"text":132858},{"id":132893,"depth":70,"text":132894},{"id":132914,"depth":70,"text":132915},{"id":132949,"depth":70,"text":132950},{"id":132982,"depth":70,"text":132983},{"id":133057,"depth":70,"text":133058},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132675,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133323,"title":133324,"body":133325,"description":1327,"extension":1328,"meta":134808,"navigation":1330,"path":134809,"seo":134810,"stem":134811,"__hash__":134812},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133326,"toc":134800},[133327,133330,133334,133338,133349,133353,133370,133414,133447,133450,133467,133470,133473,133517,133521,133525,133528,133531,133535,133538,133549,133609,133650,133653,133668,133722,133730,133733,133744,133798,133824,133827,133840,133894,133926,133980,134003,134057,134060,134063,134070,134124,134145,134199,134202,134205,134290,134298,134355,134378,134382,134385,134403,134407,134426,134480,134518,134522,134525,134528,134550,134554,134562,134565,134570,134581,134584,134588,134602,134646,134649,134653,134656,134661,134687,134692,134769,134772,134776,134779,134782,134785,134788,134791,134794,134797],[10,133328,133324],{"id":133329},"_11-传统布局与定位体系",[14,133331,133333],{"id":133332},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[183,133335,133337],{"id":133336},"_1111-普通流标准流","11.1.1 普通流（标准流）",[23,133339,133340,133343,133346],{},[26,133341,133342],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[26,133344,133345],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[26,133347,133348],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[183,133350,133352],{"id":133351},"_1112-浮动","11.1.2 浮动",[23,133354,133355,133358,133361,133364,133367],{},[26,133356,133357],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[26,133359,133360],{},"浮动可以改变元素标签默认的排列方式",[26,133362,133363],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[26,133365,133366],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[26,133368,133369],{},"在使用行内块转换时盒子之间是有空隙的",[39,133371,133372],{"className":41,"code":1192,"language":43,"meta":44,"style":44},[46,133373,133374,133380,133390,133394,133400,133410],{"__ignoreMap":44},[49,133375,133376,133378],{"class":51,"line":52},[49,133377,1199],{"class":62},[49,133379,67],{"class":66},[49,133381,133382,133384,133386,133388],{"class":51,"line":59},[49,133383,1039],{"class":73},[49,133385,77],{"class":66},[49,133387,304],{"class":73},[49,133389,83],{"class":66},[49,133391,133392],{"class":51,"line":70},[49,133393,137],{"class":66},[49,133395,133396,133398],{"class":51,"line":86},[49,133397,1220],{"class":62},[49,133399,67],{"class":66},[49,133401,133402,133404,133406,133408],{"class":51,"line":98},[49,133403,1039],{"class":73},[49,133405,77],{"class":66},[49,133407,1231],{"class":73},[49,133409,83],{"class":66},[49,133411,133412],{"class":51,"line":121},[49,133413,137],{"class":66},[293,133415,133416,133424],{},[296,133417,133418],{},[299,133419,133420,133422],{},[302,133421,305],{"align":304},[302,133423,308],{"align":304},[310,133425,133426,133433,133440],{},[299,133427,133428,133430],{},[315,133429,460],{"align":304},[315,133431,133432],{"align":304},"元素不浮动（默认值）",[299,133434,133435,133437],{},[315,133436,304],{"align":304},[315,133438,133439],{"align":304},"元素向左浮动",[299,133441,133442,133444],{},[315,133443,1231],{"align":304},[315,133445,133446],{"align":304},"元素向右浮动",[19,133448,133449],{},"浮动重点：",[23,133451,133452,133455,133458,133461,133464],{},[26,133453,133454],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[26,133456,133457],{},"浮动的元素会一行内显示并且元素顶部对齐",[26,133459,133460],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[26,133462,133463],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[26,133465,133466],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133468,133469],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133471,133472],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[39,133474,133475],{"className":41,"code":1192,"language":43,"meta":44,"style":44},[46,133476,133477,133483,133493,133497,133503,133513],{"__ignoreMap":44},[49,133478,133479,133481],{"class":51,"line":52},[49,133480,1199],{"class":62},[49,133482,67],{"class":66},[49,133484,133485,133487,133489,133491],{"class":51,"line":59},[49,133486,1039],{"class":73},[49,133488,77],{"class":66},[49,133490,304],{"class":73},[49,133492,83],{"class":66},[49,133494,133495],{"class":51,"line":70},[49,133496,137],{"class":66},[49,133498,133499,133501],{"class":51,"line":86},[49,133500,1220],{"class":62},[49,133502,67],{"class":66},[49,133504,133505,133507,133509,133511],{"class":51,"line":98},[49,133506,1039],{"class":73},[49,133508,77],{"class":66},[49,133510,1231],{"class":73},[49,133512,83],{"class":66},[49,133514,133515],{"class":51,"line":121},[49,133516,137],{"class":66},[183,133518,133520],{"id":133519},"_1113-定位","11.1.3 定位",[525,133522,133524],{"id":133523},"_11131-使用场景","11.1.3.1 使用场景",[19,133526,133527],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133529,133530],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[525,133532,133534],{"id":133533},"_11132-定位组成","11.1.3.2 定位组成",[19,133536,133537],{},"定位 = 定位模式 + 边偏移",[591,133539,133540],{},[26,133541,133542,133545,133546],{},[485,133543,133544],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[485,133547,133548],{},"定位模式",[39,133550,133552],{"className":41,"code":133551,"language":43,"meta":44,"style":44},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[46,133553,133554,133560,133573,133589,133605],{"__ignoreMap":44},[49,133555,133556,133558],{"class":51,"line":52},[49,133557,838],{"class":62},[49,133559,67],{"class":66},[49,133561,133562,133564,133566,133568,133570],{"class":51,"line":59},[49,133563,845],{"class":73},[49,133565,77],{"class":66},[49,133567,850],{"class":73},[49,133569,463],{"class":66},[49,133571,133572],{"class":55},"\u002F* 定位模式 *\u002F\n",[49,133574,133575,133577,133579,133581,133583,133586],{"class":51,"line":70},[49,133576,857],{"class":73},[49,133578,77],{"class":66},[49,133580,106],{"class":73},[49,133582,110],{"class":109},[49,133584,133585],{"class":66},";           ",[49,133587,133588],{"class":55},"\u002F* 边偏移：上 *\u002F\n",[49,133590,133591,133593,133595,133597,133599,133602],{"class":51,"line":86},[49,133592,870],{"class":73},[49,133594,77],{"class":66},[49,133596,875],{"class":73},[49,133598,110],{"class":109},[49,133600,133601],{"class":66},";          ",[49,133603,133604],{"class":55},"\u002F* 边偏移：左 *\u002F\n",[49,133606,133607],{"class":51,"line":98},[49,133608,137],{"class":66},[293,133610,133611,133620],{},[296,133612,133613],{},[299,133614,133615,133617],{},[302,133616,1548],{"align":304},[302,133618,133619],{"align":304},"语义",[310,133621,133622,133629,133636,133643],{},[299,133623,133624,133626],{},[315,133625,133211],{"align":304},[315,133627,133628],{"align":304},"静态定位",[299,133630,133631,133633],{},[315,133632,850],{"align":304},[315,133634,133635],{"align":304},"相对定位",[299,133637,133638,133640],{},[315,133639,56070],{"align":304},[315,133641,133642],{"align":304},"绝对定位",[299,133644,133645,133647],{},[315,133646,87458],{"align":304},[315,133648,133649],{"align":304},"固定定位",[19,133651,133652],{},"（1）静态定位：",[23,133654,133655,133666],{},[26,133656,133657,133658,133661,133662,133665],{},"静态定位是元素的 ",[485,133659,133660],{},"默认定位方式"," ， ",[485,133663,133664],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[26,133667,6435],{},[39,133669,133670],{"className":41,"code":133551,"language":43,"meta":44,"style":44},[46,133671,133672,133678,133690,133704,133718],{"__ignoreMap":44},[49,133673,133674,133676],{"class":51,"line":52},[49,133675,838],{"class":62},[49,133677,67],{"class":66},[49,133679,133680,133682,133684,133686,133688],{"class":51,"line":59},[49,133681,845],{"class":73},[49,133683,77],{"class":66},[49,133685,850],{"class":73},[49,133687,463],{"class":66},[49,133689,133572],{"class":55},[49,133691,133692,133694,133696,133698,133700,133702],{"class":51,"line":70},[49,133693,857],{"class":73},[49,133695,77],{"class":66},[49,133697,106],{"class":73},[49,133699,110],{"class":109},[49,133701,133585],{"class":66},[49,133703,133588],{"class":55},[49,133705,133706,133708,133710,133712,133714,133716],{"class":51,"line":86},[49,133707,870],{"class":73},[49,133709,77],{"class":66},[49,133711,875],{"class":73},[49,133713,110],{"class":109},[49,133715,133601],{"class":66},[49,133717,133604],{"class":55},[49,133719,133720],{"class":51,"line":98},[49,133721,137],{"class":66},[23,133723,133724,133727],{},[26,133725,133726],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[26,133728,133729],{},"静态定位在布局时我们几乎不用的",[19,133731,133732],{},"（2）相对定位",[23,133734,133735,133742],{},[26,133736,133737,133738,133741],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[485,133739,133740],{},"原来的位置"," 来说的（自恋型）",[26,133743,6435],{},[39,133745,133746],{"className":41,"code":133551,"language":43,"meta":44,"style":44},[46,133747,133748,133754,133766,133780,133794],{"__ignoreMap":44},[49,133749,133750,133752],{"class":51,"line":52},[49,133751,838],{"class":62},[49,133753,67],{"class":66},[49,133755,133756,133758,133760,133762,133764],{"class":51,"line":59},[49,133757,845],{"class":73},[49,133759,77],{"class":66},[49,133761,850],{"class":73},[49,133763,463],{"class":66},[49,133765,133572],{"class":55},[49,133767,133768,133770,133772,133774,133776,133778],{"class":51,"line":70},[49,133769,857],{"class":73},[49,133771,77],{"class":66},[49,133773,106],{"class":73},[49,133775,110],{"class":109},[49,133777,133585],{"class":66},[49,133779,133588],{"class":55},[49,133781,133782,133784,133786,133788,133790,133792],{"class":51,"line":86},[49,133783,870],{"class":73},[49,133785,77],{"class":66},[49,133787,875],{"class":73},[49,133789,110],{"class":109},[49,133791,133601],{"class":66},[49,133793,133604],{"class":55},[49,133795,133796],{"class":51,"line":98},[49,133797,137],{"class":66},[23,133799,133800],{},[26,133801,133802,133803,133805,133806,133808,133809,133812,133813,133816,133817,133819,133820,133823],{},"相对定位的特点：",[54958,133804],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54958,133807],{},"  ② ",[485,133810,133811],{},"原来"," 在标准流的 ",[485,133814,133815],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54958,133818],{},"  ③因此， ",[485,133821,133822],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133825,133826],{},"（3）绝对定位",[23,133828,133829,133838],{},[26,133830,133831,133833,133834,133837],{},[485,133832,133642],{}," 是元素在移动位置的时候，是相对于它 ",[485,133835,133836],{},"祖先元素"," 来说的（拼爹型）",[26,133839,6435],{},[39,133841,133842],{"className":41,"code":133551,"language":43,"meta":44,"style":44},[46,133843,133844,133850,133862,133876,133890],{"__ignoreMap":44},[49,133845,133846,133848],{"class":51,"line":52},[49,133847,838],{"class":62},[49,133849,67],{"class":66},[49,133851,133852,133854,133856,133858,133860],{"class":51,"line":59},[49,133853,845],{"class":73},[49,133855,77],{"class":66},[49,133857,850],{"class":73},[49,133859,463],{"class":66},[49,133861,133572],{"class":55},[49,133863,133864,133866,133868,133870,133872,133874],{"class":51,"line":70},[49,133865,857],{"class":73},[49,133867,77],{"class":66},[49,133869,106],{"class":73},[49,133871,110],{"class":109},[49,133873,133585],{"class":66},[49,133875,133588],{"class":55},[49,133877,133878,133880,133882,133884,133886,133888],{"class":51,"line":86},[49,133879,870],{"class":73},[49,133881,77],{"class":66},[49,133883,875],{"class":73},[49,133885,110],{"class":109},[49,133887,133601],{"class":66},[49,133889,133604],{"class":55},[49,133891,133892],{"class":51,"line":98},[49,133893,137],{"class":66},[23,133895,133896,133911,133920,133923],{},[26,133897,133898,133899,133901,133902,133904,133905,133907,133908,133910],{},"绝对定位的特点：",[54958,133900],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54958,133903],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54958,133906],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54958,133909],{},"  (4)固定定位",[26,133912,133913,133915,133916,133919],{},[485,133914,133649],{}," 是元素 ",[485,133917,133918],{},"固定于浏览器可视区的位置"," 。（认死理型）",[26,133921,133922],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[26,133924,133925],{},"语法:",[39,133927,133928],{"className":41,"code":133551,"language":43,"meta":44,"style":44},[46,133929,133930,133936,133948,133962,133976],{"__ignoreMap":44},[49,133931,133932,133934],{"class":51,"line":52},[49,133933,838],{"class":62},[49,133935,67],{"class":66},[49,133937,133938,133940,133942,133944,133946],{"class":51,"line":59},[49,133939,845],{"class":73},[49,133941,77],{"class":66},[49,133943,850],{"class":73},[49,133945,463],{"class":66},[49,133947,133572],{"class":55},[49,133949,133950,133952,133954,133956,133958,133960],{"class":51,"line":70},[49,133951,857],{"class":73},[49,133953,77],{"class":66},[49,133955,106],{"class":73},[49,133957,110],{"class":109},[49,133959,133585],{"class":66},[49,133961,133588],{"class":55},[49,133963,133964,133966,133968,133970,133972,133974],{"class":51,"line":86},[49,133965,870],{"class":73},[49,133967,77],{"class":66},[49,133969,875],{"class":73},[49,133971,110],{"class":109},[49,133973,133601],{"class":66},[49,133975,133604],{"class":55},[49,133977,133978],{"class":51,"line":98},[49,133979,137],{"class":66},[23,133981,133982,133991],{},[26,133983,133984,133985,133987,133988,133990],{},"特点:",[54958,133986],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54958,133989],{},"  ②固定定位不再占有原先的位置,完全脱标",[26,133992,133993,133994,133996,133997,133999,134000,134002],{},"固定在版心位置的方法:",[54958,133995],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54958,133998],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54958,134001],{},"  实例：",[39,134004,134005],{"className":41,"code":133551,"language":43,"meta":44,"style":44},[46,134006,134007,134013,134025,134039,134053],{"__ignoreMap":44},[49,134008,134009,134011],{"class":51,"line":52},[49,134010,838],{"class":62},[49,134012,67],{"class":66},[49,134014,134015,134017,134019,134021,134023],{"class":51,"line":59},[49,134016,845],{"class":73},[49,134018,77],{"class":66},[49,134020,850],{"class":73},[49,134022,463],{"class":66},[49,134024,133572],{"class":55},[49,134026,134027,134029,134031,134033,134035,134037],{"class":51,"line":70},[49,134028,857],{"class":73},[49,134030,77],{"class":66},[49,134032,106],{"class":73},[49,134034,110],{"class":109},[49,134036,133585],{"class":66},[49,134038,133588],{"class":55},[49,134040,134041,134043,134045,134047,134049,134051],{"class":51,"line":86},[49,134042,870],{"class":73},[49,134044,77],{"class":66},[49,134046,875],{"class":73},[49,134048,110],{"class":109},[49,134050,133601],{"class":66},[49,134052,133604],{"class":55},[49,134054,134055],{"class":51,"line":98},[49,134056,137],{"class":66},[174,134058],{"style":176,"src":134059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134061,134062],{},"(5)粘性定位",[23,134064,134065,134068],{},[26,134066,134067],{},"粘性定位可以被认为是相对定位和固定定位的混合",[26,134069,6435],{},[39,134071,134072],{"className":41,"code":133551,"language":43,"meta":44,"style":44},[46,134073,134074,134080,134092,134106,134120],{"__ignoreMap":44},[49,134075,134076,134078],{"class":51,"line":52},[49,134077,838],{"class":62},[49,134079,67],{"class":66},[49,134081,134082,134084,134086,134088,134090],{"class":51,"line":59},[49,134083,845],{"class":73},[49,134085,77],{"class":66},[49,134087,850],{"class":73},[49,134089,463],{"class":66},[49,134091,133572],{"class":55},[49,134093,134094,134096,134098,134100,134102,134104],{"class":51,"line":70},[49,134095,857],{"class":73},[49,134097,77],{"class":66},[49,134099,106],{"class":73},[49,134101,110],{"class":109},[49,134103,133585],{"class":66},[49,134105,133588],{"class":55},[49,134107,134108,134110,134112,134114,134116,134118],{"class":51,"line":86},[49,134109,870],{"class":73},[49,134111,77],{"class":66},[49,134113,875],{"class":73},[49,134115,110],{"class":109},[49,134117,133601],{"class":66},[49,134119,133604],{"class":55},[49,134121,134122],{"class":51,"line":98},[49,134123,137],{"class":66},[23,134125,134126],{},[26,134127,134128,134129,134131,134132,134134,134135,134137,134138,134141,134142,134144],{},"粘性定位的特点：",[54958,134130],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54958,134133],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54958,134136],{},"  ③必须添加 top 、left、right、bottom ",[485,134139,134140],{},"其中一个"," 才有效",[54958,134143],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[39,134146,134147],{"className":41,"code":133551,"language":43,"meta":44,"style":44},[46,134148,134149,134155,134167,134181,134195],{"__ignoreMap":44},[49,134150,134151,134153],{"class":51,"line":52},[49,134152,838],{"class":62},[49,134154,67],{"class":66},[49,134156,134157,134159,134161,134163,134165],{"class":51,"line":59},[49,134158,845],{"class":73},[49,134160,77],{"class":66},[49,134162,850],{"class":73},[49,134164,463],{"class":66},[49,134166,133572],{"class":55},[49,134168,134169,134171,134173,134175,134177,134179],{"class":51,"line":70},[49,134170,857],{"class":73},[49,134172,77],{"class":66},[49,134174,106],{"class":73},[49,134176,110],{"class":109},[49,134178,133585],{"class":66},[49,134180,133588],{"class":55},[49,134182,134183,134185,134187,134189,134191,134193],{"class":51,"line":86},[49,134184,870],{"class":73},[49,134186,77],{"class":66},[49,134188,875],{"class":73},[49,134190,110],{"class":109},[49,134192,133601],{"class":66},[49,134194,133604],{"class":55},[49,134196,134197],{"class":51,"line":98},[49,134198,137],{"class":66},[174,134200],{"style":176,"src":134201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134203,134204],{},"(6)总结",[293,134206,134207,134222],{},[296,134208,134209],{},[299,134210,134211,134213,134216,134219],{},[302,134212,133548],{"align":304},[302,134214,134215],{"align":304},"是否脱标",[302,134217,134218],{"align":304},"移动位置",[302,134220,134221],{"align":304},"是否常用",[310,134223,134224,134237,134251,134265,134278],{},[299,134225,134226,134229,134231,134234],{},[315,134227,134228],{"align":304},"Static 静态定位",[315,134230,105902],{"align":304},[315,134232,134233],{"align":304},"不能使用边偏移",[315,134235,134236],{"align":304},"很少",[299,134238,134239,134242,134245,134248],{},[315,134240,134241],{"align":304},"Relative 相对定位",[315,134243,134244],{"align":304},"否(占有位置)",[315,134246,134247],{"align":304},"相对于自身位置移动",[315,134249,134250],{"align":304},"基本单独使用",[299,134252,134253,134256,134259,134262],{},[315,134254,134255],{"align":304},"Absolute 绝对定位",[315,134257,134258],{"align":304},"是(不占有位置)",[315,134260,134261],{"align":304},"带有定位的父级",[315,134263,134264],{"align":304},"要和定位父级元素搭配使用",[299,134266,134267,134270,134272,134275],{},[315,134268,134269],{"align":304},"Fixed 固定定位",[315,134271,134258],{"align":304},[315,134273,134274],{"align":304},"浏览器可视区",[315,134276,134277],{"align":304},"单独使用,不需要父级",[299,134279,134280,134283,134285,134287],{},[315,134281,134282],{"align":304},"Sticky 粘性定位",[315,134284,134244],{"align":304},[315,134286,134274],{"align":304},[315,134288,134289],{"align":304},"当前阶段少",[591,134291,134292],{"start":59},[26,134293,134294,134297],{},[485,134295,134296],{},"边偏移"," 则决定了该元素的最终位置",[293,134299,134300,134311],{},[296,134301,134302],{},[299,134303,134304,134307,134309],{},[302,134305,134306],{"align":304},"边偏移属性",[302,134308,28740],{"align":304},[302,134310,308],{"align":304},[310,134312,134313,134324,134335,134345],{},[299,134314,134315,134318,134321],{},[315,134316,134317],{"align":304},"top",[315,134319,134320],{"align":304},"top: 80px;",[315,134322,134323],{"align":304},"顶端偏移量，定义元素相对于父元素上边线的距离",[299,134325,134326,134329,134332],{},[315,134327,134328],{"align":304},"bottom",[315,134330,134331],{"align":304},"bottom: 80px ;",[315,134333,134334],{"align":304},"底部偏移量，定义元素相对于其父元素下边线的距离",[299,134336,134337,134339,134342],{},[315,134338,304],{"align":304},[315,134340,134341],{"align":304},"left: 80px ;",[315,134343,134344],{"align":304},"左侧偏移量，定义元素相对于其父元素左边线的距离",[299,134346,134347,134349,134352],{},[315,134348,1231],{"align":304},[315,134350,134351],{"align":304},"right: 80px ;",[315,134353,134354],{"align":304},"右侧偏移量，定义元素相对于其父元素右边线的距离",[23,134356,134357],{},[26,134358,10277,134359,134361,134362,134364,134365,134367,134368,134371,134372,134374,134375,134377],{},[54958,134360],{},"  ① ",[485,134363,134296],{}," 需要和 ",[485,134366,133548],{}," 联合使用， ",[485,134369,134370],{},"单独使用无效"," ；",[54958,134373],{},"  ②top和bottom不要同时使用",[54958,134376],{},"  ③left和right不要同时使用",[525,134379,134381],{"id":134380},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134383,134384],{},"子级是绝对定位的话，父级要用相对定位",[23,134386,134387,134390,134393,134396],{},[26,134388,134389],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[26,134391,134392],{},"父盒子需要加定位限制子盒子在父盒子内显示",[26,134394,134395],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[26,134397,134398,134399,134402],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[485,134400,134401],{},"子绝父绝"," 也会遇到",[525,134404,134406],{"id":134405},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[23,134408,134409,134424],{},[26,134410,134411,134412,134415,134416,134419,134420,134423],{},"在使用 ",[485,134413,134414],{},"定位"," 布局时，可能会 ",[485,134417,134418],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[485,134421,134422],{},"z-index"," 来控制盒子的前后次序 (z轴)",[26,134425,6435],{},[39,134427,134428],{"className":41,"code":133551,"language":43,"meta":44,"style":44},[46,134429,134430,134436,134448,134462,134476],{"__ignoreMap":44},[49,134431,134432,134434],{"class":51,"line":52},[49,134433,838],{"class":62},[49,134435,67],{"class":66},[49,134437,134438,134440,134442,134444,134446],{"class":51,"line":59},[49,134439,845],{"class":73},[49,134441,77],{"class":66},[49,134443,850],{"class":73},[49,134445,463],{"class":66},[49,134447,133572],{"class":55},[49,134449,134450,134452,134454,134456,134458,134460],{"class":51,"line":70},[49,134451,857],{"class":73},[49,134453,77],{"class":66},[49,134455,106],{"class":73},[49,134457,110],{"class":109},[49,134459,133585],{"class":66},[49,134461,133588],{"class":55},[49,134463,134464,134466,134468,134470,134472,134474],{"class":51,"line":86},[49,134465,870],{"class":73},[49,134467,77],{"class":66},[49,134469,875],{"class":73},[49,134471,110],{"class":109},[49,134473,133601],{"class":66},[49,134475,133604],{"class":55},[49,134477,134478],{"class":51,"line":98},[49,134479,137],{"class":66},[23,134481,134482],{},[26,134483,134484,134485,134361,134487,134489,134490,128935,134493,83765,134496,134498,134499,134501,134502,134505,134506,134371,134509,134511,134512,134515,134517],{},"z-index的特性",[54958,134486],{},[485,134488,305],{}," ： ",[485,134491,134492],{},"正整数",[485,134494,134495],{},"负整数",[485,134497,80],{}," ，默认值是 0，数值越大，盒子越靠上；",[54958,134500],{},"  ②如果 ",[485,134503,134504],{},"属性值相同"," ，则按照书写顺序， ",[485,134507,134508],{},"后来居上",[54958,134510],{},"  ③数字后面 ",[485,134513,134514],{},"不能加单位",[54958,134516],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[525,134519,134521],{"id":134520},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134523,134524],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134526,134527],{},"方法:",[23,134529,134530,134540],{},[26,134531,134532,134533,134536,134537],{},"left: 50%; 让 ",[485,134534,134535],{},"盒子的左侧"," 移动到 ",[485,134538,134539],{},"父级元素的水平中心位置",[26,134541,134542,134543,134546,134547],{},"margin-left: -100px; 让盒子 ",[485,134544,134545],{},"向左"," 移动 ",[485,134548,134549],{},"自身宽度的一半",[525,134551,134553],{"id":134552},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[591,134555,134556,134559],{},[26,134557,134558],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[26,134560,134561],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134563,134564],{},"也就是说绝对定位和固定定位和浮动类似",[591,134566,134567],{"start":70},[26,134568,134569],{},"display 是显示模式， 可以改变显示模式有以下方式:",[23,134571,134572,134575,134578],{},[26,134573,134574],{},"可以用inline-block 转换为行内块",[26,134576,134577],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[26,134579,134580],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134582,134583],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[525,134585,134587],{"id":134586},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[591,134589,134590,134593,134596,134599],{},[26,134591,134592],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[26,134594,134595],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[26,134597,134598],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[26,134600,134601],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[39,134603,134604],{"className":41,"code":1192,"language":43,"meta":44,"style":44},[46,134605,134606,134612,134622,134626,134632,134642],{"__ignoreMap":44},[49,134607,134608,134610],{"class":51,"line":52},[49,134609,1199],{"class":62},[49,134611,67],{"class":66},[49,134613,134614,134616,134618,134620],{"class":51,"line":59},[49,134615,1039],{"class":73},[49,134617,77],{"class":66},[49,134619,304],{"class":73},[49,134621,83],{"class":66},[49,134623,134624],{"class":51,"line":70},[49,134625,137],{"class":66},[49,134627,134628,134630],{"class":51,"line":86},[49,134629,1220],{"class":62},[49,134631,67],{"class":66},[49,134633,134634,134636,134638,134640],{"class":51,"line":98},[49,134635,1039],{"class":73},[49,134637,77],{"class":66},[49,134639,1231],{"class":73},[49,134641,83],{"class":66},[49,134643,134644],{"class":51,"line":121},[49,134645,137],{"class":66},[174,134647],{"style":176,"src":134648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[525,134650,134652],{"id":134651},"_11138-轮播图","11.1.3.8 轮播图",[174,134654],{"style":176,"src":134655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[591,134657,134658],{},[26,134659,134660],{},"制作顺序:",[23,134662,134663,134666,134669,134678],{},[26,134664,134665],{},"大盒子我们类名为： tb-promo 淘宝广告",[26,134667,134668],{},"里面先放一张图片",[26,134670,134671,134672,134674,134675,134677],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54958,134673],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54958,134676],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[26,134679,134680,134681,134683,134684,134686],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54958,134682],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54958,134685],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[591,134688,134689],{"start":59},[26,134690,134691],{},"代码模块",[39,134693,134695],{"className":41,"code":134694,"language":43,"meta":44,"style":44},"\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",[46,134696,134697,134702,134709,134719,134729,134739,134743,134748,134755,134765],{"__ignoreMap":44},[49,134698,134699],{"class":51,"line":52},[49,134700,134701],{"class":55},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[49,134703,134704,134707],{"class":51,"line":59},[49,134705,134706],{"class":62},".son",[49,134708,67],{"class":66},[49,134710,134711,134713,134715,134717],{"class":51,"line":70},[49,134712,845],{"class":73},[49,134714,77],{"class":66},[49,134716,56070],{"class":73},[49,134718,83],{"class":66},[49,134720,134721,134723,134725,134727],{"class":51,"line":86},[49,134722,857],{"class":73},[49,134724,77],{"class":66},[49,134726,80],{"class":73},[49,134728,83],{"class":66},[49,134730,134731,134733,134735,134737],{"class":51,"line":98},[49,134732,870],{"class":73},[49,134734,77],{"class":66},[49,134736,80],{"class":73},[49,134738,83],{"class":66},[49,134740,134741],{"class":51,"line":121},[49,134742,137],{"class":66},[49,134744,134745],{"class":51,"line":134},[49,134746,134747],{"class":55},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[49,134749,134750,134753],{"class":51,"line":1085},[49,134751,134752],{"class":62},".father",[49,134754,67],{"class":66},[49,134756,134757,134759,134761,134763],{"class":51,"line":2574},[49,134758,845],{"class":73},[49,134760,77],{"class":66},[49,134762,850],{"class":73},[49,134764,83],{"class":66},[49,134766,134767],{"class":51,"line":2586},[49,134768,137],{"class":66},[19,134770,134771],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[183,134773,134775],{"id":134774},"_1114-定位数值的移动","11.1.4 定位数值的移动",[174,134777],{"style":176,"src":134778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134780,134781],{},"✨ 黄金口诀：",[19,134783,134784],{},"\"TOP正下负上，LEFT正右负左\"",[19,134786,134787],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134789,134790],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134792,134793],{},"✨ 简单记：",[19,134795,134796],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1305,134798,134799],{},"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":44,"searchDepth":59,"depth":59,"links":134801},[134802],{"id":133332,"depth":59,"text":133333,"children":134803},[134804,134805,134806,134807],{"id":133336,"depth":70,"text":133337},{"id":133351,"depth":70,"text":133352},{"id":133519,"depth":70,"text":133520},{"id":134774,"depth":70,"text":134775},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133324,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134814,"title":134815,"body":134816,"description":1327,"extension":1328,"meta":136239,"navigation":1330,"path":136240,"seo":136241,"stem":136242,"__hash__":136243},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134817,"toc":136218},[134818,134821,134825,134833,134837,134842,134850,134862,134866,134871,134879,134890,134894,134899,134940,134948,134952,134955,134958,134961,135055,135058,135152,135155,135249,135252,135255,135290,135293,135296,135326,135329,135332,135335,135338,135341,135344,135347,135417,135420,135424,135428,135469,135473,135479,135482,135485,135489,135492,135495,135498,135579,135582,135585,135589,135593,135596,135599,135602,135605,135608,135614,135623,135627,135646,135650,135660,135663,135666,135669,135672,135675,135678,135681,135684,135693,135697,135706,135709,135714,135767,135772,135938,135941,135944,135949,135952,135955,135958,135961,135966,136114,136117,136120,136125,136128,136133,136167,136170,136173,136177,136180,136187,136190,136193,136196,136199,136202,136205,136208,136212,136215],[10,134819,134815],{"id":134820},"_12-显示隐藏与图形资源",[14,134822,134824],{"id":134823},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[23,134826,134827,134830],{},[26,134828,134829],{},"目的:让一个元素在页面中消失或者显示出来",[26,134831,134832],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[183,134834,134836],{"id":134835},"_1211-display-显示","12.1.1 display 显示",[591,134838,134839],{},[26,134840,134841],{},"display 设置或检索对象是否及如何显示",[23,134843,134844,134847],{},[26,134845,134846],{},"display: none;隐藏对象",[26,134848,134849],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[591,134851,134852,134859],{"start":59},[26,134853,134854,134855,134858],{},"特点： display 隐藏元素后， ",[485,134856,134857],{},"不再占"," 有原来的位置",[26,134860,134861],{},"在js中使用非常的广泛",[183,134863,134865],{"id":134864},"_1212-visibility可见性","12.1.2 visibility可见性",[591,134867,134868],{},[26,134869,134870],{},"visibility 属性用于指定一个元素应可见还是隐藏",[23,134872,134873,134876],{},[26,134874,134875],{},"visibility： visible；元素可见",[26,134877,134878],{},"visibility：hidden；元素隐藏",[591,134880,134881,134884,134887],{"start":59},[26,134882,134883],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[26,134885,134886],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[26,134888,134889],{},"隐藏后继续占有原有位置",[183,134891,134893],{"id":134892},"_1213-overflow溢出","12.1.3 overflow溢出",[23,134895,134896],{},[26,134897,134898],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[293,134900,134901,134909],{},[296,134902,134903],{},[299,134904,134905,134907],{},[302,134906,305],{"align":304},[302,134908,308],{"align":304},[310,134910,134911,134919,134926,134933],{},[299,134912,134913,134916],{},[315,134914,134915],{"align":304},"visible",[315,134917,134918],{"align":304},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[299,134920,134921,134923],{},[315,134922,62952],{"align":304},[315,134924,134925],{"align":304},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[299,134927,134928,134930],{},[315,134929,130191],{"align":304},[315,134931,134932],{"align":304},"不管超出内容否，总是显示滚动条",[299,134934,134935,134937],{},[315,134936,73892],{"align":304},[315,134938,134939],{"align":304},"超出自动显示滚动条，不超出不显示滚动条",[23,134941,134942,134945],{},[26,134943,134944],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[26,134946,134947],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[183,134949,134951],{"id":134950},"_1214-案例收获","12.1.4 案例收获",[174,134953],{"style":176,"src":134954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134956,134957],{},"问题：没做出来动态效果，使用hover没实现",[19,134959,134960],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[39,134962,134963],{"className":41,"code":133190,"language":43,"meta":44,"style":44},[46,134964,134965,134969,134983,134987,135001,135005,135019,135023,135037,135041],{"__ignoreMap":44},[49,134966,134967],{"class":51,"line":52},[49,134968,133197],{"class":55},[49,134970,134971,134973,134975,134977,134979,134981],{"class":51,"line":59},[49,134972,133202],{"class":62},[49,134974,203],{"class":66},[49,134976,130131],{"class":73},[49,134978,77],{"class":66},[49,134980,133211],{"class":73},[49,134982,130701],{"class":66},[49,134984,134985],{"class":51,"line":70},[49,134986,133218],{"class":55},[49,134988,134989,134991,134993,134995,134997,134999],{"class":51,"line":86},[49,134990,133223],{"class":62},[49,134992,203],{"class":66},[49,134994,130131],{"class":73},[49,134996,77],{"class":66},[49,134998,850],{"class":73},[49,135000,130701],{"class":66},[49,135002,135003],{"class":51,"line":98},[49,135004,133238],{"class":55},[49,135006,135007,135009,135011,135013,135015,135017],{"class":51,"line":121},[49,135008,133243],{"class":62},[49,135010,203],{"class":66},[49,135012,130131],{"class":73},[49,135014,77],{"class":66},[49,135016,56070],{"class":73},[49,135018,130701],{"class":66},[49,135020,135021],{"class":51,"line":134},[49,135022,133258],{"class":55},[49,135024,135025,135027,135029,135031,135033,135035],{"class":51,"line":1085},[49,135026,133263],{"class":62},[49,135028,203],{"class":66},[49,135030,130131],{"class":73},[49,135032,77],{"class":66},[49,135034,87458],{"class":73},[49,135036,130701],{"class":66},[49,135038,135039],{"class":51,"line":2574},[49,135040,133278],{"class":55},[49,135042,135043,135045,135047,135049,135051,135053],{"class":51,"line":2586},[49,135044,133283],{"class":62},[49,135046,203],{"class":66},[49,135048,130131],{"class":73},[49,135050,77],{"class":66},[49,135052,133292],{"class":73},[49,135054,130701],{"class":66},[19,135056,135057],{},"完整代码：",[39,135059,135060],{"className":41,"code":133190,"language":43,"meta":44,"style":44},[46,135061,135062,135066,135080,135084,135098,135102,135116,135120,135134,135138],{"__ignoreMap":44},[49,135063,135064],{"class":51,"line":52},[49,135065,133197],{"class":55},[49,135067,135068,135070,135072,135074,135076,135078],{"class":51,"line":59},[49,135069,133202],{"class":62},[49,135071,203],{"class":66},[49,135073,130131],{"class":73},[49,135075,77],{"class":66},[49,135077,133211],{"class":73},[49,135079,130701],{"class":66},[49,135081,135082],{"class":51,"line":70},[49,135083,133218],{"class":55},[49,135085,135086,135088,135090,135092,135094,135096],{"class":51,"line":86},[49,135087,133223],{"class":62},[49,135089,203],{"class":66},[49,135091,130131],{"class":73},[49,135093,77],{"class":66},[49,135095,850],{"class":73},[49,135097,130701],{"class":66},[49,135099,135100],{"class":51,"line":98},[49,135101,133238],{"class":55},[49,135103,135104,135106,135108,135110,135112,135114],{"class":51,"line":121},[49,135105,133243],{"class":62},[49,135107,203],{"class":66},[49,135109,130131],{"class":73},[49,135111,77],{"class":66},[49,135113,56070],{"class":73},[49,135115,130701],{"class":66},[49,135117,135118],{"class":51,"line":134},[49,135119,133258],{"class":55},[49,135121,135122,135124,135126,135128,135130,135132],{"class":51,"line":1085},[49,135123,133263],{"class":62},[49,135125,203],{"class":66},[49,135127,130131],{"class":73},[49,135129,77],{"class":66},[49,135131,87458],{"class":73},[49,135133,130701],{"class":66},[49,135135,135136],{"class":51,"line":2574},[49,135137,133278],{"class":55},[49,135139,135140,135142,135144,135146,135148,135150],{"class":51,"line":2586},[49,135141,133283],{"class":62},[49,135143,203],{"class":66},[49,135145,130131],{"class":73},[49,135147,77],{"class":66},[49,135149,133292],{"class":73},[49,135151,130701],{"class":66},[19,135153,135154],{},"分布思路重点详解：",[39,135156,135157],{"className":41,"code":133190,"language":43,"meta":44,"style":44},[46,135158,135159,135163,135177,135181,135195,135199,135213,135217,135231,135235],{"__ignoreMap":44},[49,135160,135161],{"class":51,"line":52},[49,135162,133197],{"class":55},[49,135164,135165,135167,135169,135171,135173,135175],{"class":51,"line":59},[49,135166,133202],{"class":62},[49,135168,203],{"class":66},[49,135170,130131],{"class":73},[49,135172,77],{"class":66},[49,135174,133211],{"class":73},[49,135176,130701],{"class":66},[49,135178,135179],{"class":51,"line":70},[49,135180,133218],{"class":55},[49,135182,135183,135185,135187,135189,135191,135193],{"class":51,"line":86},[49,135184,133223],{"class":62},[49,135186,203],{"class":66},[49,135188,130131],{"class":73},[49,135190,77],{"class":66},[49,135192,850],{"class":73},[49,135194,130701],{"class":66},[49,135196,135197],{"class":51,"line":98},[49,135198,133238],{"class":55},[49,135200,135201,135203,135205,135207,135209,135211],{"class":51,"line":121},[49,135202,133243],{"class":62},[49,135204,203],{"class":66},[49,135206,130131],{"class":73},[49,135208,77],{"class":66},[49,135210,56070],{"class":73},[49,135212,130701],{"class":66},[49,135214,135215],{"class":51,"line":134},[49,135216,133258],{"class":55},[49,135218,135219,135221,135223,135225,135227,135229],{"class":51,"line":1085},[49,135220,133263],{"class":62},[49,135222,203],{"class":66},[49,135224,130131],{"class":73},[49,135226,77],{"class":66},[49,135228,87458],{"class":73},[49,135230,130701],{"class":66},[49,135232,135233],{"class":51,"line":2574},[49,135234,133278],{"class":55},[49,135236,135237,135239,135241,135243,135245,135247],{"class":51,"line":2586},[49,135238,133283],{"class":62},[49,135240,203],{"class":66},[49,135242,130131],{"class":73},[49,135244,77],{"class":66},[49,135246,133292],{"class":73},[49,135248,130701],{"class":66},[174,135250],{"style":176,"src":135251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135253,135254],{},"图片太大，盒子太小，此时需要修改图片的大小",[39,135256,135258],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[46,135259,135260],{"__ignoreMap":44},[49,135261,135262,135264,135266,135268,135270,135273,135275,135277,135280,135283,135285,135288],{"class":51,"line":52},[49,135263,2300],{"class":66},[49,135265,174],{"class":147},[49,135267,56478],{"class":62},[49,135269,1448],{"class":66},[49,135271,135272],{"class":1505},"\"images\u002Fpic.jpg\"",[49,135274,56486],{"class":62},[49,135276,1448],{"class":66},[49,135278,135279],{"class":1505},"\"描述文字\"",[49,135281,135282],{"class":62}," title",[49,135284,1448],{"class":66},[49,135286,135287],{"class":1505},"\"悬停提示\"",[49,135289,52554],{"class":66},[174,135291],{"style":176,"src":135292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135294,135295],{},"制造遮罩层",[39,135297,135298],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,135299,135300],{"__ignoreMap":44},[49,135301,135302,135304,135306,135308,135310,135312,135314,135316,135318,135320,135322,135324],{"class":51,"line":52},[49,135303,2300],{"class":66},[49,135305,174],{"class":147},[49,135307,56478],{"class":62},[49,135309,1448],{"class":66},[49,135311,135272],{"class":1505},[49,135313,56486],{"class":62},[49,135315,1448],{"class":66},[49,135317,135279],{"class":1505},[49,135319,135282],{"class":62},[49,135321,1448],{"class":66},[49,135323,135287],{"class":1505},[49,135325,52554],{"class":66},[19,135327,135328],{},"此时是这样的为标准流",[174,135330],{"style":176,"src":135331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135333,135334],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135336,135337],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135339,135340],{},"让他在中间，用center(background-position)",[19,135342,135343],{},"将需要变的尽可能放到一个盒子中",[19,135345,135346],{},"放大盒子上内部盒子发生变化",[39,135348,135350],{"className":41,"code":135349,"language":43,"meta":44,"style":44},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[46,135351,135352,135358,135368,135372,135379,135389,135401,135413],{"__ignoreMap":44},[49,135353,135354,135356],{"class":51,"line":52},[49,135355,128839],{"class":62},[49,135357,67],{"class":66},[49,135359,135360,135362,135364,135366],{"class":51,"line":59},[49,135361,845],{"class":73},[49,135363,77],{"class":66},[49,135365,850],{"class":73},[49,135367,83],{"class":66},[49,135369,135370],{"class":51,"line":70},[49,135371,137],{"class":66},[49,135373,135374,135377],{"class":51,"line":86},[49,135375,135376],{"class":62},".child",[49,135378,67],{"class":66},[49,135380,135381,135383,135385,135387],{"class":51,"line":98},[49,135382,845],{"class":73},[49,135384,77],{"class":66},[49,135386,56070],{"class":73},[49,135388,83],{"class":66},[49,135390,135391,135393,135395,135397,135399],{"class":51,"line":121},[49,135392,857],{"class":73},[49,135394,77],{"class":66},[49,135396,2047],{"class":73},[49,135398,1720],{"class":109},[49,135400,83],{"class":66},[49,135402,135403,135405,135407,135409,135411],{"class":51,"line":134},[49,135404,870],{"class":73},[49,135406,77],{"class":66},[49,135408,2047],{"class":73},[49,135410,1720],{"class":109},[49,135412,83],{"class":66},[49,135414,135415],{"class":51,"line":1085},[49,135416,137],{"class":66},[19,135418,135419],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135421,135423],{"id":135422},"_122-精灵图","12.2 精灵图",[183,135425,135427],{"id":135426},"_1221-理解","12.2.1 理解",[591,135429,135430,135448],{},[26,135431,135432,135433,133661,135436,135439,135440,135443,135444,135447],{},"目的： ",[485,135434,135435],{},"为了有效地减少服务器接收和发送请求的次数",[485,135437,135438],{},"提高"," 页面的 ",[485,135441,135442],{},"加载速度"," ，出现了 ",[485,135445,135446],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[26,135449,135450,135451,135453,135454,135456,135457,135459,135460,135462,135463,135465,135466,135468],{},"使用精灵图核心：",[54958,135452],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54958,135455],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54958,135458],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54958,135461],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54958,135464],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54958,135467],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[183,135470,135472],{"id":135471},"_1222-扒图","12.2.2 扒图",[39,135474,135477],{"className":135475,"code":135476,"language":267},[1094],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[46,135478,135476],{"__ignoreMap":44},[174,135480],{"style":176,"src":135481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[174,135483],{"style":176,"src":135484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[183,135486,135488],{"id":135487},"_1223-精灵图的实现","12.2.3 精灵图的实现",[174,135490],{"style":176,"src":135491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135493,135494],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[174,135496],{"style":176,"src":135497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[39,135499,135501],{"className":41,"code":135500,"language":43,"meta":44,"style":44},"\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",[46,135502,135503,135508,135515,135527,135539,135558,135575],{"__ignoreMap":44},[49,135504,135505],{"class":51,"line":52},[49,135506,135507],{"class":55},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[49,135509,135510,135513],{"class":51,"line":59},[49,135511,135512],{"class":62},".icon",[49,135514,67],{"class":66},[49,135516,135517,135519,135521,135523,135525],{"class":51,"line":70},[49,135518,74],{"class":73},[49,135520,77],{"class":66},[49,135522,875],{"class":73},[49,135524,110],{"class":109},[49,135526,83],{"class":66},[49,135528,135529,135531,135533,135535,135537],{"class":51,"line":86},[49,135530,89],{"class":73},[49,135532,77],{"class":66},[49,135534,875],{"class":73},[49,135536,110],{"class":109},[49,135538,83],{"class":66},[49,135540,135541,135543,135545,135547,135549,135552,135554,135556],{"class":51,"line":98},[49,135542,71844],{"class":73},[49,135544,77],{"class":66},[49,135546,62964],{"class":73},[49,135548,1403],{"class":66},[49,135550,135551],{"class":6468},"sprites.png",[49,135553,14966],{"class":66},[49,135555,62974],{"class":73},[49,135557,83],{"class":66},[49,135559,135560,135562,135564,135566,135568,135571,135573],{"class":51,"line":121},[49,135561,130031],{"class":73},[49,135563,77],{"class":66},[49,135565,53005],{"class":73},[49,135567,110],{"class":109},[49,135569,135570],{"class":73}," -20",[49,135572,110],{"class":109},[49,135574,83],{"class":66},[49,135576,135577],{"class":51,"line":134},[49,135578,137],{"class":66},[174,135580],{"style":176,"src":135581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135583,135584],{},"在前端中坐标轴的正方向是右和下",[14,135586,135588],{"id":135587},"_123-字体图标","12.3 字体图标",[183,135590,135592],{"id":135591},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135594,135595],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135597,135598],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135600,135601],{},"1.图片文件还是比较大的。",[19,135603,135604],{},"2.图片本身放大和缩小会失真。",[19,135606,135607],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135609,135610,135611,26989],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[485,135612,135613],{},"字体图标 iconfont",[19,135615,135616,135619,135620,29633],{},[485,135617,135618],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[485,135621,135622],{},"展示的是图标，本质属于字体",[183,135624,135626],{"id":135625},"_1232-字体图标的优点","12.3.2 字体图标的优点",[23,135628,135629,135634,135637,135640,135643],{},[26,135630,135631,135633],{},[485,135632,27125],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[26,135635,135636],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[26,135638,135639],{},"兼容性：几乎支持所有的浏览器，请放心使用",[26,135641,135642],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[26,135644,135645],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[183,135647,135649],{"id":135648},"_1233-字体库下载网站","12.3.3 字体库下载网站",[23,135651,135652],{},[26,135653,135654,135655],{},"icomoon字体库：",[1630,135656,135659],{"href":135657,"rel":135658},"http:\u002F\u002Ficomoon.io\u002F",[25113],"http:\u002F\u002Ficomoon.io",[19,135661,135662],{},"进去之后点icomoon app",[174,135664],{"style":176,"src":135665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135667,135668],{},"可以对其编辑：",[174,135670],{"style":176,"src":135671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135673,135674],{},"生成字体：",[174,135676],{"style":176,"src":135677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135679,135680],{},"下载：",[174,135682],{"style":176,"src":135683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[23,135685,135686],{},[26,135687,135688,135689],{},"阿里iconfont字体库： ",[1630,135690,135691],{"href":135691,"rel":135692},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25113],[183,135694,135696],{"id":135695},"_1234-字体图标的引入","12.3.4 字体图标的引入",[591,135698,135699],{},[26,135700,135701,135702,135705],{},"把下载包里面的 ",[485,135703,135704],{},"fonts"," 文件夹放入页面根目录下",[174,135707],{"style":176,"src":135708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[591,135710,135711],{"start":59},[26,135712,135713],{},"字体文件格式",[293,135715,135716,135725],{},[296,135717,135718],{},[299,135719,135720,135723],{},[302,135721,135722],{"align":304},"格式",[302,135724,24988],{"align":304},[310,135726,135727,135737,135747,135757],{},[299,135728,135729,135734],{},[315,135730,135731],{"align":304},[485,135732,135733],{},".ttf",[315,135735,135736],{"align":304},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[299,135738,135739,135744],{},[315,135740,135741],{"align":304},[485,135742,135743],{},".woff",[315,135745,135746],{"align":304},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[299,135748,135749,135754],{},[315,135750,135751],{"align":304},[485,135752,135753],{},".eot",[315,135755,135756],{"align":304},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[299,135758,135759,135764],{},[315,135760,135761],{"align":304},[485,135762,135763],{},"svg",[315,135765,135766],{"align":304},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[591,135768,135769],{"start":70},[26,135770,135771],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[39,135773,135775],{"className":41,"code":135774,"language":43,"meta":44,"style":44},"\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",[46,135776,135777,135782,135789,135801,135817,135842,135863,135883,135903,135907,135913,135923,135934],{"__ignoreMap":44},[49,135778,135779],{"class":51,"line":52},[49,135780,135781],{"class":55},"\u002F* 引入字体图标 *\u002F\n",[49,135783,135784,135787],{"class":51,"line":59},[49,135785,135786],{"class":109},"@font-face",[49,135788,67],{"class":66},[49,135790,135791,135794,135796,135799],{"class":51,"line":70},[49,135792,135793],{"class":73},"  font-family",[49,135795,77],{"class":66},[49,135797,135798],{"class":1505},"'icomoon'",[49,135800,83],{"class":66},[49,135802,135803,135806,135808,135810,135812,135815],{"class":51,"line":86},[49,135804,135805],{"class":73},"  src",[49,135807,77],{"class":66},[49,135809,62964],{"class":73},[49,135811,1403],{"class":66},[49,135813,135814],{"class":1505},"'fonts\u002Ficomoon.eot'",[49,135816,3973],{"class":66},[49,135818,135819,135821,135823,135825,135827,135830,135832,135835,135837,135840],{"class":51,"line":98},[49,135820,135805],{"class":73},[49,135822,77],{"class":66},[49,135824,62964],{"class":73},[49,135826,1403],{"class":66},[49,135828,135829],{"class":1505},"'fonts\u002Ficomoon.eot?#iefix'",[49,135831,14966],{"class":66},[49,135833,135834],{"class":73},"format",[49,135836,1403],{"class":66},[49,135838,135839],{"class":1505},"'embedded-opentype'",[49,135841,39295],{"class":66},[49,135843,135844,135847,135849,135852,135854,135856,135858,135861],{"class":51,"line":121},[49,135845,135846],{"class":73},"       url",[49,135848,1403],{"class":66},[49,135850,135851],{"class":1505},"'fonts\u002Ficomoon.woff'",[49,135853,14966],{"class":66},[49,135855,135834],{"class":73},[49,135857,1403],{"class":66},[49,135859,135860],{"class":1505},"'woff'",[49,135862,39295],{"class":66},[49,135864,135865,135867,135869,135872,135874,135876,135878,135881],{"class":51,"line":134},[49,135866,135846],{"class":73},[49,135868,1403],{"class":66},[49,135870,135871],{"class":1505},"'fonts\u002Ficomoon.ttf'",[49,135873,14966],{"class":66},[49,135875,135834],{"class":73},[49,135877,1403],{"class":66},[49,135879,135880],{"class":1505},"'truetype'",[49,135882,39295],{"class":66},[49,135884,135885,135887,135889,135892,135894,135896,135898,135901],{"class":51,"line":1085},[49,135886,135846],{"class":73},[49,135888,1403],{"class":66},[49,135890,135891],{"class":1505},"'fonts\u002Ficomoon.svg#icomoon'",[49,135893,14966],{"class":66},[49,135895,135834],{"class":73},[49,135897,1403],{"class":66},[49,135899,135900],{"class":1505},"'svg'",[49,135902,3973],{"class":66},[49,135904,135905],{"class":51,"line":2574},[49,135906,137],{"class":66},[49,135908,135909,135911],{"class":51,"line":2586},[49,135910,135512],{"class":62},[49,135912,67],{"class":66},[49,135914,135915,135917,135919,135921],{"class":51,"line":2867},[49,135916,135793],{"class":73},[49,135918,77],{"class":66},[49,135920,135798],{"class":1505},[49,135922,83],{"class":66},[49,135924,135925,135928,135930,135932],{"class":51,"line":2872},[49,135926,135927],{"class":73},"  font-style",[49,135929,77],{"class":66},[49,135931,65077],{"class":73},[49,135933,83],{"class":66},[49,135935,135936],{"class":51,"line":2878},[49,135937,137],{"class":66},[19,135939,135940],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[174,135942],{"style":176,"src":135943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[591,135945,135946],{"start":86},[26,135947,135948],{},"添加字体",[174,135950],{"style":176,"src":135951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135953,135954],{},"复制：",[174,135956],{"style":176,"src":135957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135959,135960],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[591,135962,135963],{"start":98},[26,135964,135965],{},"代码展示：",[39,135967,135968],{"className":41,"code":135774,"language":43,"meta":44,"style":44},[46,135969,135970,135974,135980,135990,136004,136026,136044,136062,136080,136084,136090,136100,136110],{"__ignoreMap":44},[49,135971,135972],{"class":51,"line":52},[49,135973,135781],{"class":55},[49,135975,135976,135978],{"class":51,"line":59},[49,135977,135786],{"class":109},[49,135979,67],{"class":66},[49,135981,135982,135984,135986,135988],{"class":51,"line":70},[49,135983,135793],{"class":73},[49,135985,77],{"class":66},[49,135987,135798],{"class":1505},[49,135989,83],{"class":66},[49,135991,135992,135994,135996,135998,136000,136002],{"class":51,"line":86},[49,135993,135805],{"class":73},[49,135995,77],{"class":66},[49,135997,62964],{"class":73},[49,135999,1403],{"class":66},[49,136001,135814],{"class":1505},[49,136003,3973],{"class":66},[49,136005,136006,136008,136010,136012,136014,136016,136018,136020,136022,136024],{"class":51,"line":98},[49,136007,135805],{"class":73},[49,136009,77],{"class":66},[49,136011,62964],{"class":73},[49,136013,1403],{"class":66},[49,136015,135829],{"class":1505},[49,136017,14966],{"class":66},[49,136019,135834],{"class":73},[49,136021,1403],{"class":66},[49,136023,135839],{"class":1505},[49,136025,39295],{"class":66},[49,136027,136028,136030,136032,136034,136036,136038,136040,136042],{"class":51,"line":121},[49,136029,135846],{"class":73},[49,136031,1403],{"class":66},[49,136033,135851],{"class":1505},[49,136035,14966],{"class":66},[49,136037,135834],{"class":73},[49,136039,1403],{"class":66},[49,136041,135860],{"class":1505},[49,136043,39295],{"class":66},[49,136045,136046,136048,136050,136052,136054,136056,136058,136060],{"class":51,"line":134},[49,136047,135846],{"class":73},[49,136049,1403],{"class":66},[49,136051,135871],{"class":1505},[49,136053,14966],{"class":66},[49,136055,135834],{"class":73},[49,136057,1403],{"class":66},[49,136059,135880],{"class":1505},[49,136061,39295],{"class":66},[49,136063,136064,136066,136068,136070,136072,136074,136076,136078],{"class":51,"line":1085},[49,136065,135846],{"class":73},[49,136067,1403],{"class":66},[49,136069,135891],{"class":1505},[49,136071,14966],{"class":66},[49,136073,135834],{"class":73},[49,136075,1403],{"class":66},[49,136077,135900],{"class":1505},[49,136079,3973],{"class":66},[49,136081,136082],{"class":51,"line":2574},[49,136083,137],{"class":66},[49,136085,136086,136088],{"class":51,"line":2586},[49,136087,135512],{"class":62},[49,136089,67],{"class":66},[49,136091,136092,136094,136096,136098],{"class":51,"line":2867},[49,136093,135793],{"class":73},[49,136095,77],{"class":66},[49,136097,135798],{"class":1505},[49,136099,83],{"class":66},[49,136101,136102,136104,136106,136108],{"class":51,"line":2872},[49,136103,135927],{"class":73},[49,136105,77],{"class":66},[49,136107,65077],{"class":73},[49,136109,83],{"class":66},[49,136111,136112],{"class":51,"line":2878},[49,136113,137],{"class":66},[174,136115],{"style":176,"src":136116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136118,136119],{},"更加细节展示：",[591,136121,136122],{},[26,136123,136124],{},"html 标签内添加小图标",[174,136126],{"style":176,"src":136127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[591,136129,136130],{"start":59},[26,136131,136132],{},"给标签定义字体",[39,136134,136135],{"className":128519,"code":131867,"language":128521,"meta":44,"style":44},[46,136136,136137,136141,136155,136159],{"__ignoreMap":44},[49,136138,136139],{"class":51,"line":52},[49,136140,131874],{"class":55},[49,136142,136143,136145,136147,136149,136151,136153],{"class":51,"line":59},[49,136144,2300],{"class":66},[49,136146,148],{"class":147},[49,136148,54728],{"class":62},[49,136150,1448],{"class":66},[49,136152,131887],{"class":1505},[49,136154,52554],{"class":66},[49,136156,136157],{"class":51,"line":70},[49,136158,131894],{"class":66},[49,136160,136161,136163,136165],{"class":51,"line":86},[49,136162,53027],{"class":66},[49,136164,148],{"class":147},[49,136166,52554],{"class":66},[19,136168,136169],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[174,136171],{"style":176,"src":136172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[183,136174,136176],{"id":136175},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136178,136179],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136181,136182,136183,136186],{},"把压缩包里面的 ",[485,136184,136185],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136188,136189],{},"打开网站，点下方：",[174,136191],{"style":176,"src":136192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[174,136194],{"style":176,"src":136195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[174,136197],{"style":176,"src":136198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136200,136201],{},"点yes重新加载",[19,136203,136204],{},"然后重复之前的操作就可以实现了",[19,136206,136207],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[183,136209,136211],{"id":136210},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[174,136213],{"style":176,"src":136214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1305,136216,136217],{},"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":44,"searchDepth":59,"depth":59,"links":136219},[136220,136226,136231],{"id":134823,"depth":59,"text":134824,"children":136221},[136222,136223,136224,136225],{"id":134835,"depth":70,"text":134836},{"id":134864,"depth":70,"text":134865},{"id":134892,"depth":70,"text":134893},{"id":134950,"depth":70,"text":134951},{"id":135422,"depth":59,"text":135423,"children":136227},[136228,136229,136230],{"id":135426,"depth":70,"text":135427},{"id":135471,"depth":70,"text":135472},{"id":135487,"depth":70,"text":135488},{"id":135587,"depth":59,"text":135588,"children":136232},[136233,136234,136235,136236,136237,136238],{"id":135591,"depth":70,"text":135592},{"id":135625,"depth":70,"text":135626},{"id":135648,"depth":70,"text":135649},{"id":135695,"depth":70,"text":135696},{"id":136175,"depth":70,"text":136176},{"id":136210,"depth":70,"text":136211},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134815,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":4,"title":5,"body":136245,"description":1327,"extension":1328,"meta":137299,"navigation":1330,"path":1331,"seo":137300,"stem":1333,"__hash__":1334},{"type":7,"value":136246,"toc":137280},[136247,136249,136251,136253,136263,136327,136357,136359,136361,136363,136451,136493,136495,136497,136499,136533,136535,136537,136539,136541,136543,136545,136547,136549,136551,136553,136555,136557,136559,136561,136563,136589,136591,136593,136595,136599,136601,136603,136629,136631,136633,136635,136637,136641,136643,136645,136647,136675,136677,136679,136687,136691,136693,136695,136697,136699,136701,136703,136705,136707,136749,136751,136753,136755,136759,136801,136803,136805,136809,136819,136821,136823,136825,136827,136829,136831,136865,136867,136869,136921,136923,136925,136927,136929,136981,136983,136985,137033,137035,137037,137039,137041,137043,137045,137047,137103,137105,137110,137112,137114,137146,137148,137150,137152,137154,137186,137188,137190,137234,137236,137238,137240,137242,137244,137246,137248,137250,137252,137254,137256,137258,137260,137262,137264,137268,137270,137272,137274,137276,137278],[10,136248,5],{"id":12},[14,136250,17],{"id":16},[19,136252,21],{},[23,136254,136255,136257,136259,136261],{},[26,136256,28],{},[26,136258,31],{},[26,136260,34],{},[26,136262,37],{},[39,136264,136265],{"className":41,"code":42,"language":43,"meta":44,"style":44},[46,136266,136267,136271,136277,136287,136297,136313,136323],{"__ignoreMap":44},[49,136268,136269],{"class":51,"line":52},[49,136270,56],{"class":55},[49,136272,136273,136275],{"class":51,"line":59},[49,136274,63],{"class":62},[49,136276,67],{"class":66},[49,136278,136279,136281,136283,136285],{"class":51,"line":70},[49,136280,74],{"class":73},[49,136282,77],{"class":66},[49,136284,80],{"class":73},[49,136286,83],{"class":66},[49,136288,136289,136291,136293,136295],{"class":51,"line":86},[49,136290,89],{"class":73},[49,136292,77],{"class":66},[49,136294,80],{"class":73},[49,136296,83],{"class":66},[49,136298,136299,136301,136303,136305,136307,136309,136311],{"class":51,"line":98},[49,136300,101],{"class":73},[49,136302,77],{"class":66},[49,136304,106],{"class":73},[49,136306,110],{"class":109},[49,136308,113],{"class":73},[49,136310,116],{"class":73},[49,136312,83],{"class":66},[49,136314,136315,136317,136319,136321],{"class":51,"line":121},[49,136316,124],{"class":73},[49,136318,77],{"class":66},[49,136320,129],{"class":73},[49,136322,83],{"class":66},[49,136324,136325],{"class":51,"line":134},[49,136326,137],{"class":66},[39,136328,136329],{"className":41,"code":140,"language":43,"meta":44,"style":44},[46,136330,136331,136337,136353],{"__ignoreMap":44},[49,136332,136333,136335],{"class":51,"line":52},[49,136334,148],{"class":147},[49,136336,67],{"class":66},[49,136338,136339,136341,136343,136345,136347,136349,136351],{"class":51,"line":59},[49,136340,101],{"class":73},[49,136342,77],{"class":66},[49,136344,159],{"class":73},[49,136346,110],{"class":109},[49,136348,113],{"class":73},[49,136350,166],{"class":73},[49,136352,83],{"class":66},[49,136354,136355],{"class":51,"line":70},[49,136356,137],{"class":66},[174,136358],{"style":176,"src":177},[14,136360,181],{"id":180},[183,136362,186],{"id":185},[39,136364,136365],{"className":41,"code":189,"language":43,"meta":44,"style":44},[46,136366,136367,136371,136387,136403,136419,136435],{"__ignoreMap":44},[49,136368,136369],{"class":51,"line":52},[49,136370,196],{"class":55},[49,136372,136373,136375,136377,136379,136381,136383,136385],{"class":51,"line":59},[49,136374,148],{"class":147},[49,136376,203],{"class":66},[49,136378,206],{"class":73},[49,136380,77],{"class":66},[49,136382,211],{"class":73},[49,136384,214],{"class":66},[49,136386,217],{"class":55},[49,136388,136389,136391,136393,136395,136397,136399,136401],{"class":51,"line":70},[49,136390,148],{"class":147},[49,136392,203],{"class":66},[49,136394,206],{"class":73},[49,136396,77],{"class":66},[49,136398,230],{"class":73},[49,136400,214],{"class":66},[49,136402,235],{"class":55},[49,136404,136405,136407,136409,136411,136413,136415,136417],{"class":51,"line":86},[49,136406,148],{"class":147},[49,136408,203],{"class":66},[49,136410,206],{"class":73},[49,136412,77],{"class":66},[49,136414,248],{"class":73},[49,136416,251],{"class":66},[49,136418,254],{"class":55},[49,136420,136421,136423,136425,136427,136429,136431,136433],{"class":51,"line":98},[49,136422,148],{"class":147},[49,136424,203],{"class":66},[49,136426,206],{"class":73},[49,136428,77],{"class":66},[49,136430,267],{"class":73},[49,136432,251],{"class":66},[49,136434,272],{"class":55},[49,136436,136437,136439,136441,136443,136445,136447,136449],{"class":51,"line":121},[49,136438,148],{"class":147},[49,136440,203],{"class":66},[49,136442,206],{"class":73},[49,136444,77],{"class":66},[49,136446,285],{"class":73},[49,136448,288],{"class":66},[49,136450,291],{"class":55},[293,136452,136453,136461],{},[296,136454,136455],{},[299,136456,136457,136459],{},[302,136458,305],{"align":304},[302,136460,308],{"align":304},[310,136462,136463,136469,136475,136481,136487],{},[299,136464,136465,136467],{},[315,136466,230],{"align":304},[315,136468,319],{"align":304},[299,136470,136471,136473],{},[315,136472,211],{"align":304},[315,136474,326],{"align":304},[299,136476,136477,136479],{},[315,136478,248],{"align":304},[315,136480,333],{"align":304},[299,136482,136483,136485],{},[315,136484,267],{"align":304},[315,136486,340],{"align":304},[299,136488,136489,136491],{},[315,136490,285],{"align":304},[315,136492,347],{"align":304},[183,136494,351],{"id":350},[19,136496,354],{},[19,136498,357],{},[39,136500,136501],{"className":41,"code":360,"language":43,"meta":44,"style":44},[46,136502,136503,136507,136513,136529],{"__ignoreMap":44},[49,136504,136505],{"class":51,"line":52},[49,136506,367],{"class":55},[49,136508,136509,136511],{"class":51,"line":59},[49,136510,148],{"class":147},[49,136512,67],{"class":66},[49,136514,136515,136517,136519,136521,136523,136525,136527],{"class":51,"line":70},[49,136516,101],{"class":73},[49,136518,77],{"class":66},[49,136520,159],{"class":73},[49,136522,110],{"class":109},[49,136524,113],{"class":73},[49,136526,166],{"class":73},[49,136528,83],{"class":66},[49,136530,136531],{"class":51,"line":86},[49,136532,137],{"class":66},[19,136534,396],{},[174,136536],{"style":176,"src":399},[19,136538,402],{},[174,136540],{"style":176,"src":405},[19,136542,408],{},[174,136544],{"style":176,"src":411},[19,136546,414],{},[19,136548,417],{},[174,136550],{"style":176,"src":420},[19,136552,423],{},[19,136554,426],{},[174,136556],{"style":176,"src":429},[19,136558,432],{},[174,136560],{"style":176,"src":435},[19,136562,438],{},[39,136564,136565],{"className":41,"code":441,"language":43,"meta":44,"style":44},[46,136566,136567,136573,136585],{"__ignoreMap":44},[49,136568,136569,136571],{"class":51,"line":52},[49,136570,448],{"class":147},[49,136572,67],{"class":66},[49,136574,136575,136577,136579,136581,136583],{"class":51,"line":59},[49,136576,455],{"class":73},[49,136578,77],{"class":66},[49,136580,460],{"class":73},[49,136582,463],{"class":66},[49,136584,466],{"class":55},[49,136586,136587],{"class":51,"line":70},[49,136588,137],{"class":66},[19,136590,473],{},[183,136592,477],{"id":476},[19,136594,480],{},[19,136596,483,136597,488],{},[485,136598,487],{},[19,136600,491],{},[174,136602],{"style":176,"src":494},[39,136604,136605],{"className":41,"code":441,"language":43,"meta":44,"style":44},[46,136606,136607,136613,136625],{"__ignoreMap":44},[49,136608,136609,136611],{"class":51,"line":52},[49,136610,448],{"class":147},[49,136612,67],{"class":66},[49,136614,136615,136617,136619,136621,136623],{"class":51,"line":59},[49,136616,455],{"class":73},[49,136618,77],{"class":66},[49,136620,460],{"class":73},[49,136622,463],{"class":66},[49,136624,466],{"class":55},[49,136626,136627],{"class":51,"line":70},[49,136628,137],{"class":66},[174,136630],{"style":176,"src":523},[525,136632,528],{"id":527},[19,136634,531],{},[174,136636],{"style":176,"src":534},[19,136638,537,136639,541],{},[485,136640,540],{},[525,136642,545],{"id":544},[19,136644,548],{},[19,136646,551],{},[39,136648,136649],{"className":41,"code":554,"language":43,"meta":44,"style":44},[46,136650,136651,136655,136661,136671],{"__ignoreMap":44},[49,136652,136653],{"class":51,"line":52},[49,136654,561],{"class":55},[49,136656,136657,136659],{"class":51,"line":59},[49,136658,174],{"class":147},[49,136660,67],{"class":66},[49,136662,136663,136665,136667,136669],{"class":51,"line":70},[49,136664,572],{"class":73},[49,136666,77],{"class":66},[49,136668,577],{"class":73},[49,136670,83],{"class":66},[49,136672,136673],{"class":51,"line":86},[49,136674,137],{"class":66},[174,136676],{"style":176,"src":586},[19,136678,589],{},[591,136680,136681],{},[26,136682,136683,598,136685,602],{},[485,136684,597],{},[485,136686,601],{},[19,136688,605,136689],{},[485,136690,608],{},[19,136692,611],{},[19,136694,614],{},[19,136696,617],{},[19,136698,620],{},[183,136700,624],{"id":623},[19,136702,627],{},[174,136704],{"style":176,"src":630},[19,136706,633],{},[39,136708,136709],{"className":41,"code":636,"language":43,"meta":44,"style":44},[46,136710,136711,136715,136721,136731,136735,136745],{"__ignoreMap":44},[49,136712,136713],{"class":51,"line":52},[49,136714,643],{"class":55},[49,136716,136717,136719],{"class":51,"line":59},[49,136718,174],{"class":147},[49,136720,67],{"class":66},[49,136722,136723,136725,136727,136729],{"class":51,"line":70},[49,136724,572],{"class":73},[49,136726,77],{"class":66},[49,136728,577],{"class":73},[49,136730,83],{"class":66},[49,136732,136733],{"class":51,"line":86},[49,136734,664],{"class":55},[49,136736,136737,136739,136741,136743],{"class":51,"line":98},[49,136738,669],{"class":73},[49,136740,77],{"class":66},[49,136742,674],{"class":73},[49,136744,83],{"class":66},[49,136746,136747],{"class":51,"line":121},[49,136748,137],{"class":66},[183,136750,684],{"id":683},[19,136752,627],{},[174,136754],{"style":176,"src":689},[19,136756,692,136757,696],{},[485,136758,695],{},[39,136760,136761],{"className":41,"code":636,"language":43,"meta":44,"style":44},[46,136762,136763,136767,136773,136783,136787,136797],{"__ignoreMap":44},[49,136764,136765],{"class":51,"line":52},[49,136766,643],{"class":55},[49,136768,136769,136771],{"class":51,"line":59},[49,136770,174],{"class":147},[49,136772,67],{"class":66},[49,136774,136775,136777,136779,136781],{"class":51,"line":70},[49,136776,572],{"class":73},[49,136778,77],{"class":66},[49,136780,577],{"class":73},[49,136782,83],{"class":66},[49,136784,136785],{"class":51,"line":86},[49,136786,664],{"class":55},[49,136788,136789,136791,136793,136795],{"class":51,"line":98},[49,136790,669],{"class":73},[49,136792,77],{"class":66},[49,136794,674],{"class":73},[49,136796,83],{"class":66},[49,136798,136799],{"class":51,"line":121},[49,136800,137],{"class":66},[19,136802,741],{},[14,136804,745],{"id":744},[19,136806,136807],{},[485,136808,750],{},[591,136810,136811,136813,136815,136817],{},[26,136812,755],{},[26,136814,758],{},[26,136816,761],{},[26,136818,764],{},[183,136820,768],{"id":767},[19,136822,771],{},[174,136824],{"style":176,"src":774},[174,136826],{"style":176,"src":777},[19,136828,780],{},[19,136830,783],{},[39,136832,136833],{"className":41,"code":360,"language":43,"meta":44,"style":44},[46,136834,136835,136839,136845,136861],{"__ignoreMap":44},[49,136836,136837],{"class":51,"line":52},[49,136838,367],{"class":55},[49,136840,136841,136843],{"class":51,"line":59},[49,136842,148],{"class":147},[49,136844,67],{"class":66},[49,136846,136847,136849,136851,136853,136855,136857,136859],{"class":51,"line":70},[49,136848,101],{"class":73},[49,136850,77],{"class":66},[49,136852,159],{"class":73},[49,136854,110],{"class":109},[49,136856,113],{"class":73},[49,136858,166],{"class":73},[49,136860,83],{"class":66},[49,136862,136863],{"class":51,"line":86},[49,136864,137],{"class":66},[174,136866],{"style":176,"src":820},[19,136868,823],{},[39,136870,136871],{"className":41,"code":826,"language":43,"meta":44,"style":44},[46,136872,136873,136877,136883,136893,136905,136917],{"__ignoreMap":44},[49,136874,136875],{"class":51,"line":52},[49,136876,833],{"class":55},[49,136878,136879,136881],{"class":51,"line":59},[49,136880,838],{"class":62},[49,136882,67],{"class":66},[49,136884,136885,136887,136889,136891],{"class":51,"line":70},[49,136886,845],{"class":73},[49,136888,77],{"class":66},[49,136890,850],{"class":73},[49,136892,83],{"class":66},[49,136894,136895,136897,136899,136901,136903],{"class":51,"line":86},[49,136896,857],{"class":73},[49,136898,77],{"class":66},[49,136900,106],{"class":73},[49,136902,110],{"class":109},[49,136904,83],{"class":66},[49,136906,136907,136909,136911,136913,136915],{"class":51,"line":98},[49,136908,870],{"class":73},[49,136910,77],{"class":66},[49,136912,875],{"class":73},[49,136914,110],{"class":109},[49,136916,83],{"class":66},[49,136918,136919],{"class":51,"line":121},[49,136920,137],{"class":66},[19,136922,886],{},[174,136924],{"style":176,"src":889},[19,136926,892],{},[19,136928,895],{},[39,136930,136931],{"className":41,"code":826,"language":43,"meta":44,"style":44},[46,136932,136933,136937,136943,136953,136965,136977],{"__ignoreMap":44},[49,136934,136935],{"class":51,"line":52},[49,136936,833],{"class":55},[49,136938,136939,136941],{"class":51,"line":59},[49,136940,838],{"class":62},[49,136942,67],{"class":66},[49,136944,136945,136947,136949,136951],{"class":51,"line":70},[49,136946,845],{"class":73},[49,136948,77],{"class":66},[49,136950,850],{"class":73},[49,136952,83],{"class":66},[49,136954,136955,136957,136959,136961,136963],{"class":51,"line":86},[49,136956,857],{"class":73},[49,136958,77],{"class":66},[49,136960,106],{"class":73},[49,136962,110],{"class":109},[49,136964,83],{"class":66},[49,136966,136967,136969,136971,136973,136975],{"class":51,"line":98},[49,136968,870],{"class":73},[49,136970,77],{"class":66},[49,136972,875],{"class":73},[49,136974,110],{"class":109},[49,136976,83],{"class":66},[49,136978,136979],{"class":51,"line":121},[49,136980,137],{"class":66},[19,136982,950],{},[19,136984,953],{},[39,136986,136987],{"className":41,"code":956,"language":43,"meta":44,"style":44},[46,136988,136989,136995,137005,137017,137029],{"__ignoreMap":44},[49,136990,136991,136993],{"class":51,"line":52},[49,136992,148],{"class":147},[49,136994,67],{"class":66},[49,136996,136997,136999,137001,137003],{"class":51,"line":59},[49,136998,845],{"class":73},[49,137000,77],{"class":66},[49,137002,850],{"class":73},[49,137004,83],{"class":66},[49,137006,137007,137009,137011,137013,137015],{"class":51,"line":70},[49,137008,857],{"class":73},[49,137010,77],{"class":66},[49,137012,106],{"class":73},[49,137014,110],{"class":109},[49,137016,83],{"class":66},[49,137018,137019,137021,137023,137025,137027],{"class":51,"line":86},[49,137020,870],{"class":73},[49,137022,77],{"class":66},[49,137024,875],{"class":73},[49,137026,110],{"class":109},[49,137028,83],{"class":66},[49,137030,137031],{"class":51,"line":98},[49,137032,137],{"class":66},[183,137034,1006],{"id":1005},[19,137036,771],{},[174,137038],{"style":176,"src":1011},[19,137040,1014],{},[174,137042],{"style":176,"src":1017},[19,137044,1020],{},[19,137046,1023],{},[39,137048,137049],{"className":41,"code":1026,"language":43,"meta":44,"style":44},[46,137050,137051,137057,137067,137071,137075,137079,137085,137099],{"__ignoreMap":44},[49,137052,137053,137055],{"class":51,"line":52},[49,137054,838],{"class":62},[49,137056,67],{"class":66},[49,137058,137059,137061,137063,137065],{"class":51,"line":59},[49,137060,1039],{"class":73},[49,137062,77],{"class":66},[49,137064,304],{"class":73},[49,137066,83],{"class":66},[49,137068,137069],{"class":51,"line":70},[49,137070,137],{"class":66},[49,137072,137073],{"class":51,"line":86},[49,137074,1054],{"class":66},[49,137076,137077],{"class":51,"line":98},[49,137078,1059],{"class":55},[49,137080,137081,137083],{"class":51,"line":121},[49,137082,838],{"class":62},[49,137084,67],{"class":66},[49,137086,137087,137089,137091,137093,137095,137097],{"class":51,"line":134},[49,137088,1070],{"class":73},[49,137090,77],{"class":66},[49,137092,80],{"class":73},[49,137094,1077],{"class":73},[49,137096,463],{"class":66},[49,137098,1082],{"class":55},[49,137100,137101],{"class":51,"line":1085},[49,137102,137],{"class":66},[19,137104,1090],{},[39,137106,137108],{"className":137107,"code":1095,"language":267},[1094],[46,137109,1095],{"__ignoreMap":44},[174,137111],{"style":176,"src":1100},[19,137113,1103],{},[39,137115,137116],{"className":41,"code":1106,"language":43,"meta":44,"style":44},[46,137117,137118,137122,137128,137142],{"__ignoreMap":44},[49,137119,137120],{"class":51,"line":52},[49,137121,1059],{"class":55},[49,137123,137124,137126],{"class":51,"line":59},[49,137125,838],{"class":62},[49,137127,67],{"class":66},[49,137129,137130,137132,137134,137136,137138,137140],{"class":51,"line":70},[49,137131,1070],{"class":73},[49,137133,77],{"class":66},[49,137135,80],{"class":73},[49,137137,1077],{"class":73},[49,137139,463],{"class":66},[49,137141,1082],{"class":55},[49,137143,137144],{"class":51,"line":86},[49,137145,137],{"class":66},[174,137147],{"style":176,"src":1139},[14,137149,1143],{"id":1142},[183,137151,1147],{"id":1146},[174,137153],{"style":176,"src":1150},[39,137155,137156],{"className":41,"code":1106,"language":43,"meta":44,"style":44},[46,137157,137158,137162,137168,137182],{"__ignoreMap":44},[49,137159,137160],{"class":51,"line":52},[49,137161,1059],{"class":55},[49,137163,137164,137166],{"class":51,"line":59},[49,137165,838],{"class":62},[49,137167,67],{"class":66},[49,137169,137170,137172,137174,137176,137178,137180],{"class":51,"line":70},[49,137171,1070],{"class":73},[49,137173,77],{"class":66},[49,137175,80],{"class":73},[49,137177,1077],{"class":73},[49,137179,463],{"class":66},[49,137181,1082],{"class":55},[49,137183,137184],{"class":51,"line":86},[49,137185,137],{"class":66},[183,137187,1186],{"id":1185},[174,137189],{"style":176,"src":1189},[39,137191,137192],{"className":41,"code":1192,"language":43,"meta":44,"style":44},[46,137193,137194,137200,137210,137214,137220,137230],{"__ignoreMap":44},[49,137195,137196,137198],{"class":51,"line":52},[49,137197,1199],{"class":62},[49,137199,67],{"class":66},[49,137201,137202,137204,137206,137208],{"class":51,"line":59},[49,137203,1039],{"class":73},[49,137205,77],{"class":66},[49,137207,304],{"class":73},[49,137209,83],{"class":66},[49,137211,137212],{"class":51,"line":70},[49,137213,137],{"class":66},[49,137215,137216,137218],{"class":51,"line":86},[49,137217,1220],{"class":62},[49,137219,67],{"class":66},[49,137221,137222,137224,137226,137228],{"class":51,"line":98},[49,137223,1039],{"class":73},[49,137225,77],{"class":66},[49,137227,1231],{"class":73},[49,137229,83],{"class":66},[49,137231,137232],{"class":51,"line":121},[49,137233,137],{"class":66},[14,137235,1241],{"id":1240},[19,137237,1244],{},[19,137239,1247],{},[19,137241,1250],{},[19,137243,1253],{},[19,137245,1256],{},[19,137247,1259],{},[19,137249,1262],{},[19,137251,1265],{},[174,137253],{"style":176,"src":1268},[19,137255,1271],{},[174,137257],{"style":176,"src":1274},[19,137259,1277],{},[174,137261],{"style":176,"src":1280},[19,137263,1283],{},[19,137265,137266],{},[485,137267,1288],{},[19,137269,1291],{},[19,137271,1294],{},[19,137273,1297],{},[19,137275,1300],{},[19,137277,1303],{},[1305,137279,1307],{},{"title":44,"searchDepth":59,"depth":59,"links":137281},[137282,137283,137290,137294,137298],{"id":16,"depth":59,"text":17},{"id":180,"depth":59,"text":181,"children":137284},[137285,137286,137287,137288,137289],{"id":185,"depth":70,"text":186},{"id":350,"depth":70,"text":351},{"id":476,"depth":70,"text":477},{"id":623,"depth":70,"text":624},{"id":683,"depth":70,"text":684},{"id":744,"depth":59,"text":745,"children":137291},[137292,137293],{"id":767,"depth":70,"text":768},{"id":1005,"depth":70,"text":1006},{"id":1142,"depth":59,"text":1143,"children":137295},[137296,137297],{"id":1146,"depth":70,"text":1147},{"id":1185,"depth":70,"text":1186},{"id":1240,"depth":59,"text":1241},{},{"title":5,"description":1327},{"id":137302,"title":137303,"body":137304,"description":1327,"extension":1328,"meta":138990,"navigation":1330,"path":138991,"seo":138992,"stem":138993,"__hash__":138994},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137305,"toc":138979},[137306,137309,137313,137317,137320,137327,137330,137333,137371,137374,137376,137390,137394,137403,137407,137412,137415,137418,137421,137456,137461,137464,137494,137497,137502,137505,137508,137538,137541,137595,137598,137602,137607,137619,137622,137626,137656,137659,137664,137667,137697,137700,137704,137721,137725,137729,137732,137765,137768,137772,137775,137778,137781,137784,137787,137898,137901,137904,137907,138009,138012,138016,138020,138024,138027,138067,138070,138072,138088,138092,138095,138100,138181,138184,138187,138313,138318,138321,138329,138332,138337,138422,138425,138429,138432,138435,138439,138459,138464,138548,138551,138556,138559,138562,138640,138643,138646,138649,138652,138655,138660,138663,138666,138738,138741,138746,138749,138846,138849,138855,138858,138861,138864,138867,138870,138873,138876,138879,138883,138888,138891,138924,138929,138932,138973,138976],[10,137307,137303],{"id":137308},"_14-html5与css3新特性",[14,137310,137312],{"id":137311},"_141-html5的新特性","14.1 HTML5的新特性",[183,137314,137316],{"id":137315},"_1411-基本标签","14.1.1 基本标签",[19,137318,137319],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137321,137322,137323,137326],{},"这些新特性都有兼容性问题，基本是 ",[485,137324,137325],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137328,137329],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137331,137332],{},"现在使用的是新特性：",[23,137334,137335,137341,137347,137353,137359,137365],{},[26,137336,137337,137340],{},[46,137338,137339],{},"\u003Cheader>"," 头部标签",[26,137342,137343,137346],{},[46,137344,137345],{},"\u003Cnav>"," 导航标签",[26,137348,137349,137352],{},[46,137350,137351],{},"\u003Carticle>"," 内容标签",[26,137354,137355,137358],{},[46,137356,137357],{},"\u003Csection>"," 定义文档某个区域",[26,137360,137361,137364],{},[46,137362,137363],{},"\u003Caside>"," 侧边栏标签",[26,137366,137367,137370],{},[46,137368,137369],{},"\u003Cfooter>"," 尾部标签",[174,137372],{"style":176,"src":137373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137375,1432],{},[23,137377,137378,137381,137384,137387],{},[26,137379,137380],{},"这种语义化标准主要是针对搜索引擎的",[26,137382,137383],{},"这些标签页面中可以经常使用",[26,137385,137386],{},"在IE9中，需要把这些元素转换为块级元素",[26,137388,137389],{},"移动端更喜欢使用这些标签",[183,137391,137393],{"id":137392},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137395,137396,137397,137399,137400,137402],{},"音频 ",[485,137398,29422],{}," 和视频 ",[485,137401,29431],{}," 两个标签",[525,137404,137406],{"id":137405},"_14121-视频标签-video","14.1.2.1 视频标签- video",[591,137408,137409],{},[26,137410,137411],{},"支持格式：",[174,137413],{"style":176,"src":137414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137416,137417],{},"尽量使用MP4，兼容性好",[19,137419,137420],{},"用MP4就可以",[39,137422,137424],{"className":128519,"code":137423,"language":128521,"meta":44,"style":44},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[46,137425,137426],{"__ignoreMap":44},[49,137427,137428,137430,137432,137434,137436,137439,137441,137444,137447,137450,137452,137454],{"class":51,"line":52},[49,137429,2300],{"class":66},[49,137431,29431],{"class":147},[49,137433,56478],{"class":62},[49,137435,1448],{"class":66},[49,137437,137438],{"class":1505},"\"movie.mp4\"",[49,137440,93648],{"class":62},[49,137442,137443],{"class":62}," autoplay",[49,137445,137446],{"class":62}," muted",[49,137448,137449],{"class":62}," loop",[49,137451,56553],{"class":66},[49,137453,29431],{"class":147},[49,137455,52554],{"class":66},[591,137457,137458],{"start":59},[26,137459,137460],{},"兼容写法",[19,137462,137463],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[39,137465,137466],{"className":128519,"code":137423,"language":128521,"meta":44,"style":44},[46,137467,137468],{"__ignoreMap":44},[49,137469,137470,137472,137474,137476,137478,137480,137482,137484,137486,137488,137490,137492],{"class":51,"line":52},[49,137471,2300],{"class":66},[49,137473,29431],{"class":147},[49,137475,56478],{"class":62},[49,137477,1448],{"class":66},[49,137479,137438],{"class":1505},[49,137481,93648],{"class":62},[49,137483,137443],{"class":62},[49,137485,137446],{"class":62},[49,137487,137449],{"class":62},[49,137489,56553],{"class":66},[49,137491,29431],{"class":147},[49,137493,52554],{"class":66},[19,137495,137496],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[591,137498,137499],{"start":70},[26,137500,137501],{},"video常用属性",[174,137503],{"style":176,"src":137504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137506,137507],{},"poster属性后面是跟的等待加载图片的地址",[39,137509,137510],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,137511,137512],{"__ignoreMap":44},[49,137513,137514,137516,137518,137520,137522,137524,137526,137528,137530,137532,137534,137536],{"class":51,"line":52},[49,137515,2300],{"class":66},[49,137517,174],{"class":147},[49,137519,56478],{"class":62},[49,137521,1448],{"class":66},[49,137523,135272],{"class":1505},[49,137525,56486],{"class":62},[49,137527,1448],{"class":66},[49,137529,135279],{"class":1505},[49,137531,135282],{"class":62},[49,137533,1448],{"class":66},[49,137535,135287],{"class":1505},[49,137537,52554],{"class":66},[19,137539,137540],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[39,137542,137544],{"className":41,"code":137543,"language":43,"meta":44,"style":44},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[46,137545,137546,137551,137557,137581,137586,137591],{"__ignoreMap":44},[49,137547,137548],{"class":51,"line":52},[49,137549,137550],{"class":55},"\u002F* 2D 位移 *\u002F\n",[49,137552,137553,137555],{"class":51,"line":59},[49,137554,148],{"class":147},[49,137556,67],{"class":66},[49,137558,137559,137562,137564,137567,137569,137571,137573,137575,137577,137579],{"class":51,"line":70},[49,137560,137561],{"class":73},"  transform",[49,137563,77],{"class":66},[49,137565,137566],{"class":73},"translate",[49,137568,1403],{"class":66},[49,137570,1703],{"class":73},[49,137572,110],{"class":109},[49,137574,13687],{"class":66},[49,137576,2047],{"class":73},[49,137578,110],{"class":109},[49,137580,3973],{"class":66},[49,137582,137583],{"class":51,"line":86},[49,137584,137585],{"class":55},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[49,137587,137588],{"class":51,"line":98},[49,137589,137590],{"class":55},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[49,137592,137593],{"class":51,"line":121},[49,137594,137],{"class":66},[19,137596,137597],{},"muted:自动静音属性",[525,137599,137601],{"id":137600},"_14122-音频标签audio","14.1.2.2 音频标签audio",[591,137603,137604],{},[26,137605,137606],{},"基本使用",[19,137608,137609,137610,137615,137616],{},"当前 ",[485,137611,137612],{},[46,137613,137614],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[485,137617,137618],{},"mp3格式",[174,137620],{"style":176,"src":137621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[591,137623,137624],{"start":59},[26,137625,137460],{},[39,137627,137628],{"className":128519,"code":137423,"language":128521,"meta":44,"style":44},[46,137629,137630],{"__ignoreMap":44},[49,137631,137632,137634,137636,137638,137640,137642,137644,137646,137648,137650,137652,137654],{"class":51,"line":52},[49,137633,2300],{"class":66},[49,137635,29431],{"class":147},[49,137637,56478],{"class":62},[49,137639,1448],{"class":66},[49,137641,137438],{"class":1505},[49,137643,93648],{"class":62},[49,137645,137443],{"class":62},[49,137647,137446],{"class":62},[49,137649,137449],{"class":62},[49,137651,56553],{"class":66},[49,137653,29431],{"class":147},[49,137655,52554],{"class":66},[19,137657,137658],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[591,137660,137661],{"start":70},[26,137662,137663],{},"常用属性",[174,137665],{"style":176,"src":137666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[39,137668,137669],{"className":128519,"code":137423,"language":128521,"meta":44,"style":44},[46,137670,137671],{"__ignoreMap":44},[49,137672,137673,137675,137677,137679,137681,137683,137685,137687,137689,137691,137693,137695],{"class":51,"line":52},[49,137674,2300],{"class":66},[49,137676,29431],{"class":147},[49,137678,56478],{"class":62},[49,137680,1448],{"class":66},[49,137682,137438],{"class":1505},[49,137684,93648],{"class":62},[49,137686,137443],{"class":62},[49,137688,137446],{"class":62},[49,137690,137449],{"class":62},[49,137692,56553],{"class":66},[49,137694,29431],{"class":147},[49,137696,52554],{"class":66},[19,137698,137699],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[525,137701,137703],{"id":137702},"_14123-总结","14.1.2.3 总结",[23,137705,137706,137709,137712,137715,137718],{},[26,137707,137708],{},"音频标签和视频标签使用方式基本一致",[26,137710,137711],{},"浏览器支持情况不同",[26,137713,137714],{},"谷歌浏览器把音频和视频自动播放禁止了",[26,137716,137717],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[26,137719,137720],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[183,137722,137724],{"id":137723},"_1413-表单元素","14.1.3 表单元素",[525,137726,137728],{"id":137727},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[174,137730],{"style":176,"src":137731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[39,137733,137735],{"className":128519,"code":137734,"language":128521,"meta":44,"style":44},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[46,137736,137737],{"__ignoreMap":44},[49,137738,137739,137741,137743,137745,137747,137749,137751,137753,137756,137758,137760,137763],{"class":51,"line":52},[49,137740,2300],{"class":66},[49,137742,448],{"class":147},[49,137744,55065],{"class":62},[49,137746,1448],{"class":66},[49,137748,63935],{"class":1505},[49,137750,16171],{"class":62},[49,137752,1448],{"class":66},[49,137754,137755],{"class":1505},"\"username\"",[49,137757,62258],{"class":62},[49,137759,1448],{"class":66},[49,137761,137762],{"class":1505},"\"请输入用户名\"",[49,137764,52554],{"class":66},[174,137766],{"style":176,"src":137767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[525,137769,137771],{"id":137770},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[174,137773],{"style":176,"src":137774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137776,137777],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137779,137780],{},"快捷操作：",[174,137782],{"style":176,"src":137783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,137785,137786],{},"例子1：",[39,137788,137790],{"className":128519,"code":137789,"language":128521,"meta":44,"style":44},"\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",[46,137791,137792,137815,137842,137871,137890],{"__ignoreMap":44},[49,137793,137794,137796,137798,137800,137802,137805,137808,137810,137813],{"class":51,"line":52},[49,137795,2300],{"class":66},[49,137797,67860],{"class":147},[49,137799,67863],{"class":62},[49,137801,1448],{"class":66},[49,137803,137804],{"class":1505},"\"\u002Fsubmit\"",[49,137806,137807],{"class":62}," method",[49,137809,1448],{"class":66},[49,137811,137812],{"class":1505},"\"post\"",[49,137814,52554],{"class":66},[49,137816,137817,137819,137821,137823,137825,137827,137829,137831,137833,137835,137837,137840],{"class":51,"line":59},[49,137818,53386],{"class":66},[49,137820,448],{"class":147},[49,137822,55065],{"class":62},[49,137824,1448],{"class":66},[49,137826,63935],{"class":1505},[49,137828,16171],{"class":62},[49,137830,1448],{"class":66},[49,137832,137755],{"class":1505},[49,137834,62258],{"class":62},[49,137836,1448],{"class":66},[49,137838,137839],{"class":1505},"\"用户名\"",[49,137841,52554],{"class":66},[49,137843,137844,137846,137848,137850,137852,137855,137857,137859,137862,137864,137866,137869],{"class":51,"line":70},[49,137845,53386],{"class":66},[49,137847,448],{"class":147},[49,137849,55065],{"class":62},[49,137851,1448],{"class":66},[49,137853,137854],{"class":1505},"\"password\"",[49,137856,16171],{"class":62},[49,137858,1448],{"class":66},[49,137860,137861],{"class":1505},"\"pwd\"",[49,137863,62258],{"class":62},[49,137865,1448],{"class":66},[49,137867,137868],{"class":1505},"\"密码\"",[49,137870,52554],{"class":66},[49,137872,137873,137875,137877,137879,137881,137883,137886,137888],{"class":51,"line":86},[49,137874,53386],{"class":66},[49,137876,55128],{"class":147},[49,137878,55065],{"class":62},[49,137880,1448],{"class":66},[49,137882,67883],{"class":1505},[49,137884,137885],{"class":66},">提交\u003C\u002F",[49,137887,55128],{"class":147},[49,137889,52554],{"class":66},[49,137891,137892,137894,137896],{"class":51,"line":98},[49,137893,53027],{"class":66},[49,137895,67860],{"class":147},[49,137897,52554],{"class":66},[174,137899],{"style":176,"src":137900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137902,137903],{},"value是表单域的内容",[19,137905,137906],{},"例子2：",[39,137908,137909],{"className":128519,"code":137789,"language":128521,"meta":44,"style":44},[46,137910,137911,137931,137957,137983,138001],{"__ignoreMap":44},[49,137912,137913,137915,137917,137919,137921,137923,137925,137927,137929],{"class":51,"line":52},[49,137914,2300],{"class":66},[49,137916,67860],{"class":147},[49,137918,67863],{"class":62},[49,137920,1448],{"class":66},[49,137922,137804],{"class":1505},[49,137924,137807],{"class":62},[49,137926,1448],{"class":66},[49,137928,137812],{"class":1505},[49,137930,52554],{"class":66},[49,137932,137933,137935,137937,137939,137941,137943,137945,137947,137949,137951,137953,137955],{"class":51,"line":59},[49,137934,53386],{"class":66},[49,137936,448],{"class":147},[49,137938,55065],{"class":62},[49,137940,1448],{"class":66},[49,137942,63935],{"class":1505},[49,137944,16171],{"class":62},[49,137946,1448],{"class":66},[49,137948,137755],{"class":1505},[49,137950,62258],{"class":62},[49,137952,1448],{"class":66},[49,137954,137839],{"class":1505},[49,137956,52554],{"class":66},[49,137958,137959,137961,137963,137965,137967,137969,137971,137973,137975,137977,137979,137981],{"class":51,"line":70},[49,137960,53386],{"class":66},[49,137962,448],{"class":147},[49,137964,55065],{"class":62},[49,137966,1448],{"class":66},[49,137968,137854],{"class":1505},[49,137970,16171],{"class":62},[49,137972,1448],{"class":66},[49,137974,137861],{"class":1505},[49,137976,62258],{"class":62},[49,137978,1448],{"class":66},[49,137980,137868],{"class":1505},[49,137982,52554],{"class":66},[49,137984,137985,137987,137989,137991,137993,137995,137997,137999],{"class":51,"line":86},[49,137986,53386],{"class":66},[49,137988,55128],{"class":147},[49,137990,55065],{"class":62},[49,137992,1448],{"class":66},[49,137994,67883],{"class":1505},[49,137996,137885],{"class":66},[49,137998,55128],{"class":147},[49,138000,52554],{"class":66},[49,138002,138003,138005,138007],{"class":51,"line":98},[49,138004,53027],{"class":66},[49,138006,67860],{"class":147},[49,138008,52554],{"class":66},[174,138010],{"style":176,"src":138011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138013,138015],{"id":138014},"_142-css新特性","14.2 CSS新特性",[183,138017,138019],{"id":138018},"_1421-新增选择器","14.2.1 新增选择器",[525,138021,138023],{"id":138022},"_14211-属性选择器","14.2.1.1 属性选择器",[174,138025],{"style":176,"src":138026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[39,138028,138030],{"className":41,"code":138029,"language":43,"meta":44,"style":44},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[46,138031,138032,138047,138063],{"__ignoreMap":44},[49,138033,138034,138036,138038,138040,138042,138044],{"class":51,"line":52},[49,138035,448],{"class":147},[49,138037,2280],{"class":66},[49,138039,104331],{"class":62},[49,138041,1448],{"class":109},[49,138043,63935],{"class":1505},[49,138045,138046],{"class":66},"] {\n",[49,138048,138049,138051,138053,138055,138057,138059,138061],{"class":51,"line":59},[49,138050,101],{"class":73},[49,138052,77],{"class":66},[49,138054,159],{"class":73},[49,138056,110],{"class":109},[49,138058,113],{"class":73},[49,138060,131348],{"class":73},[49,138062,83],{"class":66},[49,138064,138065],{"class":51,"line":70},[49,138066,137],{"class":66},[174,138068],{"style":176,"src":138069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138071,1432],{},[23,138073,138074,138077,138080,138083],{},[26,138075,138076],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[26,138078,138079],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[26,138081,138082],{},"属性选择器也可以选择出来自定义的属性",[26,138084,138085,138087],{},[485,138086,10277],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[525,138089,138091],{"id":138090},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[174,138093],{"style":176,"src":138094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[591,138096,138097],{},[26,138098,138099],{},"fist-child",[39,138101,138103],{"className":41,"code":138102,"language":43,"meta":44,"style":44},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[46,138104,138105,138110,138125,138145,138163],{"__ignoreMap":44},[49,138106,138107],{"class":51,"line":52},[49,138108,138109],{"class":55},"\u002F* 属性选择器 *\u002F\n",[49,138111,138112,138114,138116,138118,138120,138122],{"class":51,"line":59},[49,138113,448],{"class":147},[49,138115,2280],{"class":66},[49,138117,104331],{"class":62},[49,138119,1448],{"class":109},[49,138121,63935],{"class":1505},[49,138123,138124],{"class":66},"] { }\n",[49,138126,138127,138129,138131,138133,138136,138139,138142],{"class":51,"line":70},[49,138128,448],{"class":147},[49,138130,2280],{"class":66},[49,138132,15945],{"class":62},[49,138134,138135],{"class":109},"^=",[49,138137,138138],{"class":1505},"\"icon\"",[49,138140,138141],{"class":66},"] { }  ",[49,138143,138144],{"class":55},"\u002F* 以 icon 开头 *\u002F\n",[49,138146,138147,138149,138151,138153,138156,138158,138160],{"class":51,"line":86},[49,138148,448],{"class":147},[49,138150,2280],{"class":66},[49,138152,15945],{"class":62},[49,138154,138155],{"class":109},"$=",[49,138157,138138],{"class":1505},[49,138159,138141],{"class":66},[49,138161,138162],{"class":55},"\u002F* 以 icon 结尾 *\u002F\n",[49,138164,138165,138167,138169,138171,138174,138176,138178],{"class":51,"line":98},[49,138166,448],{"class":147},[49,138168,2280],{"class":66},[49,138170,15945],{"class":62},[49,138172,138173],{"class":109},"*=",[49,138175,138138],{"class":1505},[49,138177,138141],{"class":66},[49,138179,138180],{"class":55},"\u002F* 包含 icon *\u002F\n",[19,138182,138183],{},"ul的第一个儿子文本为红色",[19,138185,138186],{},"一定要在冒号前加空格，不然就是选中所有的了",[39,138188,138190],{"className":41,"code":138189,"language":43,"meta":44,"style":44},".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",[46,138191,138192,138198,138208,138212,138216,138221,138234,138247,138263,138280,138297],{"__ignoreMap":44},[49,138193,138194,138196],{"class":51,"line":52},[49,138195,128064],{"class":62},[49,138197,67],{"class":66},[49,138199,138200,138202,138204,138206],{"class":51,"line":59},[49,138201,72135],{"class":73},[49,138203,77],{"class":66},[49,138205,58660],{"class":73},[49,138207,83],{"class":66},[49,138209,138210],{"class":51,"line":70},[49,138211,137],{"class":66},[49,138213,138214],{"class":51,"line":86},[49,138215,1054],{"class":66},[49,138217,138218],{"class":51,"line":98},[49,138219,138220],{"class":55},"\u002F* 结构伪类选择器 *\u002F\n",[49,138222,138223,138225,138228,138231],{"class":51,"line":121},[49,138224,26],{"class":147},[49,138226,138227],{"class":62},":first-child",[49,138229,138230],{"class":66}," { }           ",[49,138232,138233],{"class":55},"\u002F* 第一个 *\u002F\n",[49,138235,138236,138238,138241,138244],{"class":51,"line":134},[49,138237,26],{"class":147},[49,138239,138240],{"class":62},":last-child",[49,138242,138243],{"class":66}," { }            ",[49,138245,138246],{"class":55},"\u002F* 最后一个 *\u002F\n",[49,138248,138249,138251,138253,138255,138257,138260],{"class":51,"line":1085},[49,138250,26],{"class":147},[49,138252,130685],{"class":62},[49,138254,1403],{"class":66},[49,138256,1478],{"class":73},[49,138258,138259],{"class":66},") { }          ",[49,138261,138262],{"class":55},"\u002F* 第2个 *\u002F\n",[49,138264,138265,138267,138269,138271,138274,138277],{"class":51,"line":2574},[49,138266,26],{"class":147},[49,138268,130685],{"class":62},[49,138270,1403],{"class":66},[49,138272,138273],{"class":73},"2n",[49,138275,138276],{"class":66},") { }         ",[49,138278,138279],{"class":55},"\u002F* 偶数 *\u002F\n",[49,138281,138282,138284,138286,138288,138291,138294],{"class":51,"line":2586},[49,138283,26],{"class":147},[49,138285,130685],{"class":62},[49,138287,1403],{"class":66},[49,138289,138290],{"class":73},"2n+1",[49,138292,138293],{"class":66},") { }       ",[49,138295,138296],{"class":55},"\u002F* 奇数 *\u002F\n",[49,138298,138299,138301,138303,138305,138308,138310],{"class":51,"line":2867},[49,138300,26],{"class":147},[49,138302,130685],{"class":62},[49,138304,1403],{"class":66},[49,138306,138307],{"class":73},"-n+3",[49,138309,138293],{"class":66},[49,138311,138312],{"class":55},"\u002F* 前3个 *\u002F\n",[148,138314,138317],{"className":138315},[138316],"example","\n  示例内容\n",[19,138319,138320],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[23,138322,138323],{},[26,138324,138325,138328],{},[46,138326,138327],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138330,138331],{},"也就是说它选择的是熊大",[591,138333,138334],{"start":121},[26,138335,138336],{},"权重",[39,138338,138340],{"className":41,"code":138339,"language":43,"meta":44,"style":44},"\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",[46,138341,138342,138346,138356,138366,138380,138394,138408],{"__ignoreMap":44},[49,138343,138344],{"class":51,"line":52},[49,138345,138220],{"class":55},[49,138347,138348,138350,138352,138354],{"class":51,"line":59},[49,138349,26],{"class":147},[49,138351,138227],{"class":62},[49,138353,138230],{"class":66},[49,138355,138233],{"class":55},[49,138357,138358,138360,138362,138364],{"class":51,"line":70},[49,138359,26],{"class":147},[49,138361,138240],{"class":62},[49,138363,138243],{"class":66},[49,138365,138246],{"class":55},[49,138367,138368,138370,138372,138374,138376,138378],{"class":51,"line":86},[49,138369,26],{"class":147},[49,138371,130685],{"class":62},[49,138373,1403],{"class":66},[49,138375,1478],{"class":73},[49,138377,138259],{"class":66},[49,138379,138262],{"class":55},[49,138381,138382,138384,138386,138388,138390,138392],{"class":51,"line":98},[49,138383,26],{"class":147},[49,138385,130685],{"class":62},[49,138387,1403],{"class":66},[49,138389,138273],{"class":73},[49,138391,138276],{"class":66},[49,138393,138279],{"class":55},[49,138395,138396,138398,138400,138402,138404,138406],{"class":51,"line":121},[49,138397,26],{"class":147},[49,138399,130685],{"class":62},[49,138401,1403],{"class":66},[49,138403,138290],{"class":73},[49,138405,138293],{"class":66},[49,138407,138296],{"class":55},[49,138409,138410,138412,138414,138416,138418,138420],{"class":51,"line":134},[49,138411,26],{"class":147},[49,138413,130685],{"class":62},[49,138415,1403],{"class":66},[49,138417,138307],{"class":73},[49,138419,138293],{"class":66},[49,138421,138312],{"class":55},[19,138423,138424],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[525,138426,138428],{"id":138427},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138430,138431],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[174,138433],{"style":176,"src":138434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[591,138436,138437],{},[26,138438,1432],{},[23,138440,138441,138444,138447,138450,138453,138456],{},[26,138442,138443],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[26,138445,138446],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[26,138448,138449],{},"语法： element::before {}",[26,138451,138452],{},"before 和 after 必须有 content 属性",[26,138454,138455],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[26,138457,138458],{},"伪元素选择器和标签选择器一样，权重为 1",[591,138460,138461],{"start":59},[26,138462,138463],{},"实例",[39,138465,138466],{"className":41,"code":138339,"language":43,"meta":44,"style":44},[46,138467,138468,138472,138482,138492,138506,138520,138534],{"__ignoreMap":44},[49,138469,138470],{"class":51,"line":52},[49,138471,138220],{"class":55},[49,138473,138474,138476,138478,138480],{"class":51,"line":59},[49,138475,26],{"class":147},[49,138477,138227],{"class":62},[49,138479,138230],{"class":66},[49,138481,138233],{"class":55},[49,138483,138484,138486,138488,138490],{"class":51,"line":70},[49,138485,26],{"class":147},[49,138487,138240],{"class":62},[49,138489,138243],{"class":66},[49,138491,138246],{"class":55},[49,138493,138494,138496,138498,138500,138502,138504],{"class":51,"line":86},[49,138495,26],{"class":147},[49,138497,130685],{"class":62},[49,138499,1403],{"class":66},[49,138501,1478],{"class":73},[49,138503,138259],{"class":66},[49,138505,138262],{"class":55},[49,138507,138508,138510,138512,138514,138516,138518],{"class":51,"line":98},[49,138509,26],{"class":147},[49,138511,130685],{"class":62},[49,138513,1403],{"class":66},[49,138515,138273],{"class":73},[49,138517,138276],{"class":66},[49,138519,138279],{"class":55},[49,138521,138522,138524,138526,138528,138530,138532],{"class":51,"line":121},[49,138523,26],{"class":147},[49,138525,130685],{"class":62},[49,138527,1403],{"class":66},[49,138529,138290],{"class":73},[49,138531,138293],{"class":66},[49,138533,138296],{"class":55},[49,138535,138536,138538,138540,138542,138544,138546],{"class":51,"line":134},[49,138537,26],{"class":147},[49,138539,130685],{"class":62},[49,138541,1403],{"class":66},[49,138543,138307],{"class":73},[49,138545,138293],{"class":66},[49,138547,138312],{"class":55},[174,138549],{"style":176,"src":138550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[591,138552,138553],{"start":70},[26,138554,138555],{},"使用场景1",[174,138557],{"style":176,"src":138558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138560,138561],{},"不需要再加盒子来整红色那部分了",[39,138563,138565],{"className":41,"code":138564,"language":43,"meta":44,"style":44},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[46,138566,138567,138572,138581,138592,138602,138606,138615,138626,138636],{"__ignoreMap":44},[49,138568,138569],{"class":51,"line":52},[49,138570,138571],{"class":55},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[49,138573,138574,138576,138579],{"class":51,"line":59},[49,138575,148],{"class":147},[49,138577,138578],{"class":62},"::before",[49,138580,67],{"class":66},[49,138582,138583,138586,138588,138590],{"class":51,"line":70},[49,138584,138585],{"class":73},"  content",[49,138587,77],{"class":66},[49,138589,8904],{"class":1505},[49,138591,83],{"class":66},[49,138593,138594,138596,138598,138600],{"class":51,"line":86},[49,138595,669],{"class":73},[49,138597,77],{"class":66},[49,138599,674],{"class":73},[49,138601,83],{"class":66},[49,138603,138604],{"class":51,"line":98},[49,138605,137],{"class":66},[49,138607,138608,138610,138613],{"class":51,"line":121},[49,138609,148],{"class":147},[49,138611,138612],{"class":62},"::after",[49,138614,67],{"class":66},[49,138616,138617,138619,138621,138624],{"class":51,"line":134},[49,138618,138585],{"class":73},[49,138620,77],{"class":66},[49,138622,138623],{"class":1505},"\"→\"",[49,138625,83],{"class":66},[49,138627,138628,138630,138632,138634],{"class":51,"line":1085},[49,138629,72135],{"class":73},[49,138631,77],{"class":66},[49,138633,63307],{"class":73},[49,138635,83],{"class":66},[49,138637,138638],{"class":51,"line":2574},[49,138639,137],{"class":66},[174,138641],{"style":176,"src":138642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138644,138645],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[174,138647],{"style":176,"src":138648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138650,138651],{},"但是在引用时需要先转义一下",[19,138653,138654],{},"content='\\e930'",[591,138656,138657],{"start":86},[26,138658,138659],{},"使用场景2",[19,138661,138662],{},"仿土豆效果",[19,138664,138665],{},"通过使用伪元素选择器可以减少body中盒子的数量",[39,138667,138668],{"className":41,"code":138564,"language":43,"meta":44,"style":44},[46,138669,138670,138674,138682,138692,138702,138706,138714,138724,138734],{"__ignoreMap":44},[49,138671,138672],{"class":51,"line":52},[49,138673,138571],{"class":55},[49,138675,138676,138678,138680],{"class":51,"line":59},[49,138677,148],{"class":147},[49,138679,138578],{"class":62},[49,138681,67],{"class":66},[49,138683,138684,138686,138688,138690],{"class":51,"line":70},[49,138685,138585],{"class":73},[49,138687,77],{"class":66},[49,138689,8904],{"class":1505},[49,138691,83],{"class":66},[49,138693,138694,138696,138698,138700],{"class":51,"line":86},[49,138695,669],{"class":73},[49,138697,77],{"class":66},[49,138699,674],{"class":73},[49,138701,83],{"class":66},[49,138703,138704],{"class":51,"line":98},[49,138705,137],{"class":66},[49,138707,138708,138710,138712],{"class":51,"line":121},[49,138709,148],{"class":147},[49,138711,138612],{"class":62},[49,138713,67],{"class":66},[49,138715,138716,138718,138720,138722],{"class":51,"line":134},[49,138717,138585],{"class":73},[49,138719,77],{"class":66},[49,138721,138623],{"class":1505},[49,138723,83],{"class":66},[49,138725,138726,138728,138730,138732],{"class":51,"line":1085},[49,138727,72135],{"class":73},[49,138729,77],{"class":66},[49,138731,63307],{"class":73},[49,138733,83],{"class":66},[49,138735,138736],{"class":51,"line":2574},[49,138737,137],{"class":66},[174,138739],{"style":176,"src":138740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[591,138742,138743],{"start":98},[26,138744,138745],{},"使用场景3",[19,138747,138748],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[39,138750,138752],{"className":41,"code":138751,"language":43,"meta":44,"style":44},".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",[46,138753,138754,138760,138770,138774,138778,138782,138790,138800,138810,138814,138822,138832,138842],{"__ignoreMap":44},[49,138755,138756,138758],{"class":51,"line":52},[49,138757,838],{"class":62},[49,138759,67],{"class":66},[49,138761,138762,138764,138766,138768],{"class":51,"line":59},[49,138763,1039],{"class":73},[49,138765,77],{"class":66},[49,138767,304],{"class":73},[49,138769,83],{"class":66},[49,138771,138772],{"class":51,"line":70},[49,138773,137],{"class":66},[49,138775,138776],{"class":51,"line":86},[49,138777,1054],{"class":66},[49,138779,138780],{"class":51,"line":98},[49,138781,138571],{"class":55},[49,138783,138784,138786,138788],{"class":51,"line":121},[49,138785,148],{"class":147},[49,138787,138578],{"class":62},[49,138789,67],{"class":66},[49,138791,138792,138794,138796,138798],{"class":51,"line":134},[49,138793,138585],{"class":73},[49,138795,77],{"class":66},[49,138797,8904],{"class":1505},[49,138799,83],{"class":66},[49,138801,138802,138804,138806,138808],{"class":51,"line":1085},[49,138803,669],{"class":73},[49,138805,77],{"class":66},[49,138807,674],{"class":73},[49,138809,83],{"class":66},[49,138811,138812],{"class":51,"line":2574},[49,138813,137],{"class":66},[49,138815,138816,138818,138820],{"class":51,"line":2586},[49,138817,148],{"class":147},[49,138819,138612],{"class":62},[49,138821,67],{"class":66},[49,138823,138824,138826,138828,138830],{"class":51,"line":2867},[49,138825,138585],{"class":73},[49,138827,77],{"class":66},[49,138829,138623],{"class":1505},[49,138831,83],{"class":66},[49,138833,138834,138836,138838,138840],{"class":51,"line":2872},[49,138835,72135],{"class":73},[49,138837,77],{"class":66},[49,138839,63307],{"class":73},[49,138841,83],{"class":66},[49,138843,138844],{"class":51,"line":2878},[49,138845,137],{"class":66},[19,138847,138848],{},"div {\nmargin: 0 auto;\n}",[39,138850,138853],{"className":138851,"code":138852,"language":267},[1094],"\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",[46,138854,138852],{"__ignoreMap":44},[19,138856,138857],{},"如果想让多个元素都发生变化",[19,138859,138860],{},"不能如下操作：",[19,138862,138863],{},"transition: width 2s ease 0.5s;",[19,138865,138866],{},"transition: height 2s ease 0.5s;不对！！！",[19,138868,138869],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138871,138872],{},"使用如下：加逗号隔开",[19,138874,138875],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138877,138878],{},"transition all 2s ease;",[183,138880,138882],{"id":138881},"_1426-过渡练习","14.2.6 过渡练习",[591,138884,138885],{},[26,138886,138887],{},"进度条",[174,138889],{"style":176,"src":138890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[39,138892,138894],{"className":41,"code":138893,"language":43,"meta":44,"style":44},"div {\n  transition: all 0.3s ease;\n}\n",[46,138895,138896,138902,138920],{"__ignoreMap":44},[49,138897,138898,138900],{"class":51,"line":52},[49,138899,148],{"class":147},[49,138901,67],{"class":66},[49,138903,138904,138907,138909,138911,138914,138916,138918],{"class":51,"line":59},[49,138905,138906],{"class":73},"  transition",[49,138908,77],{"class":66},[49,138910,29369],{"class":73},[49,138912,138913],{"class":73}," 0.3",[49,138915,2086],{"class":109},[49,138917,79907],{"class":73},[49,138919,83],{"class":66},[49,138921,138922],{"class":51,"line":70},[49,138923,137],{"class":66},[591,138925,138926],{"start":59},[26,138927,138928],{},"小米logo",[19,138930,138931],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[39,138933,138935],{"className":41,"code":138934,"language":43,"meta":44,"style":44},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[46,138936,138937,138942,138948,138964,138969],{"__ignoreMap":44},[49,138938,138939],{"class":51,"line":52},[49,138940,138941],{"class":55},"\u002F* CSS3 过渡 *\u002F\n",[49,138943,138944,138946],{"class":51,"line":59},[49,138945,148],{"class":147},[49,138947,67],{"class":66},[49,138949,138950,138952,138954,138956,138958,138960,138962],{"class":51,"line":70},[49,138951,138906],{"class":73},[49,138953,77],{"class":66},[49,138955,29369],{"class":73},[49,138957,138913],{"class":73},[49,138959,2086],{"class":109},[49,138961,79907],{"class":73},[49,138963,83],{"class":66},[49,138965,138966],{"class":51,"line":86},[49,138967,138968],{"class":55},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[49,138970,138971],{"class":51,"line":98},[49,138972,137],{"class":66},[19,138974,138975],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1305,138977,138978],{},"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":44,"searchDepth":59,"depth":59,"links":138980},[138981,138986],{"id":137311,"depth":59,"text":137312,"children":138982},[138983,138984,138985],{"id":137315,"depth":70,"text":137316},{"id":137392,"depth":70,"text":137393},{"id":137723,"depth":70,"text":137724},{"id":138014,"depth":59,"text":138015,"children":138987},[138988,138989],{"id":138018,"depth":70,"text":138019},{"id":138881,"depth":70,"text":138882},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137303,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138996,"title":138997,"body":138998,"description":1327,"extension":1328,"meta":140742,"navigation":1330,"path":140743,"seo":140744,"stem":140745,"__hash__":140746},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138999,"toc":140723},[139000,139003,139007,139010,139016,139022,139026,139028,139031,139034,139037,139040,139043,139046,139049,139053,139057,139060,139063,139066,139070,139073,139076,139081,139084,139087,139090,139094,139097,139106,139109,139112,139116,139119,139122,139127,139134,139148,139156,139163,139168,139171,139174,139177,139184,139188,139194,139200,139203,139206,139211,139217,139219,139227,139232,139235,139241,139243,139248,139253,139256,139258,139263,139266,139271,139276,139310,139314,139318,139321,139325,139328,139414,139417,139454,139457,139493,139497,139502,139515,139569,139571,139599,139601,139629,139635,139649,139651,139695,139697,139741,139744,139751,139762,139764,139791,139793,139819,139826,139842,139844,139938,139940,140034,140041,140044,140049,140055,140129,140132,140134,140170,140172,140208,140211,140218,140237,140240,140243,140245,140270,140272,140296,140299,140302,140332,140336,140339,140402,140404,140470,140472,140536,140539,140571,140573,140599,140601,140627,140630,140661,140663,140689,140691,140717,140720],[10,139001,138997],{"id":139002},"_15-品优购项目上篇-搭建与公共模块",[14,139004,139006],{"id":139005},"_151-项目规划","15.1 项目规划",[174,139008],{"style":176,"src":139009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139011,139012,139015],{},[485,139013,139014],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139017,139018,139021],{},[485,139019,139020],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139023,139025],{"id":139024},"_152-项目介绍","15.2 项目介绍",[19,139027,139014],{},[174,139029],{"style":176,"src":139030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139032,139033],{},"主页：",[174,139035],{"style":176,"src":139036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139038,139039],{},"列表页：",[174,139041],{"style":176,"src":139042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139044,139045],{},"注册页：",[174,139047],{"style":176,"src":139048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139050,139052],{"id":139051},"_153-项目搭建工作","15.3 项目搭建工作",[183,139054,139056],{"id":139055},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[174,139058],{"style":176,"src":139059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139061,139062],{},"经常更换的图片要放到upload文件夹中",[19,139064,139065],{},"不经常换的放到images文件夹中",[183,139067,139069],{"id":139068},"_1532-创建文件如下","15.3.2 创建文件如下",[174,139071],{"style":176,"src":139072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[174,139074],{"style":176,"src":139075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139077,139078],{},[485,139079,139080],{},"初始化样式：",[19,139082,139083],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139085,139086],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139088,139089],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[183,139091,139093],{"id":139092},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139095,139096],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139098,139099,139100,139105],{},"这里最典型的应用就是 ",[485,139101,139102],{},[46,139103,139104],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[174,139107],{"style":176,"src":139108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139110,139111],{},"通过link方法来引入",[183,139113,139115],{"id":139114},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[174,139117],{"style":176,"src":139118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139120,139121],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[591,139123,139124],{},[26,139125,139126],{},"制作favicon图标",[19,139128,139129,139130,139133],{},"①把品优购图标切成 ",[46,139131,139132],{},"png"," 图片",[19,139135,139136,139137,139139,139140,139143,139144],{},"②把 ",[46,139138,139132],{}," 图片转换为 ",[46,139141,139142],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[1630,139145,139146],{"href":139146,"rel":139147},"http:\u002F\u002Fwww.bitbug.net\u002F",[25113],[591,139149,139150,139153],{"start":59},[26,139151,139152],{},"favicon图标放到网站根目录下",[26,139154,139155],{},"HTML页面引入favicon",[19,139157,139158,139159,139162],{},"在html 页面里面的 ",[46,139160,139161],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139164,139165],{},[46,139166,139167],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139169,139170],{},"复制这行代码或者在生成这个的网站进行复制",[174,139172],{"style":176,"src":139173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139175,139176],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139178,139179,139180],{},"例如:",[1630,139181,139182],{"href":139182,"rel":139183},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25113],[183,139185,139187],{"id":139186},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139189,139190,139193],{},[485,139191,139192],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139195,139196,139199],{},[485,139197,139198],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139201,139202],{},"页面必须有三个标签用来符合 SEO 优化",[174,139204],{"style":176,"src":139205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[591,139207,139208],{},[26,139209,139210],{},"title网站标题",[19,139212,139213,139216],{},[485,139214,139215],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139218,70025],{},[23,139220,139221,139224],{},[26,139222,139223],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[26,139225,139226],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[591,139228,139229],{"start":59},[26,139230,139231],{},"description网站描述",[19,139233,139234],{},"简要说明我们网站主要是做什么的",[19,139236,139237,139240],{},[485,139238,139239],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139242,70025],{},[19,139244,139245],{},[46,139246,139247],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[591,139249,139250],{"start":70},[26,139251,139252],{},"keywords关键词",[19,139254,139255],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139257,70025],{},[19,139259,139260],{},[46,139261,139262],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139264,139265],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139267,139268],{},[485,139269,139270],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[591,139272,139273],{"start":86},[26,139274,139275],{},"代码总结",[39,139277,139278],{"className":128519,"code":131867,"language":128521,"meta":44,"style":44},[46,139279,139280,139284,139298,139302],{"__ignoreMap":44},[49,139281,139282],{"class":51,"line":52},[49,139283,131874],{"class":55},[49,139285,139286,139288,139290,139292,139294,139296],{"class":51,"line":59},[49,139287,2300],{"class":66},[49,139289,148],{"class":147},[49,139291,54728],{"class":62},[49,139293,1448],{"class":66},[49,139295,131887],{"class":1505},[49,139297,52554],{"class":66},[49,139299,139300],{"class":51,"line":70},[49,139301,131894],{"class":66},[49,139303,139304,139306,139308],{"class":51,"line":86},[49,139305,53027],{"class":66},[49,139307,148],{"class":147},[49,139309,52554],{"class":66},[14,139311,139313],{"id":139312},"_154-项目公共部分制作","15.4 项目公共部分制作",[183,139315,139317],{"id":139316},"_1541-常用模块类命名","15.4.1 常用模块类命名",[174,139319],{"style":176,"src":139320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[183,139322,139324],{"id":139323},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139326,139327],{},"布局思路：",[23,139329,139330,139333,139336,139358,139391],{},[26,139331,139332],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[26,139334,139335],{},"里面包含版心的盒子",[26,139337,139338,139339],{},"版心盒子里面包含 1 号左侧盒子左浮动",[23,139340,139341,139349,139355],{},[26,139342,139343,139344,22750,139346,139348],{},"1 号盒子 里面包含一个",[46,139345,23],{},[46,139347,23],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[26,139350,139351,139352,139354],{},"里面的内容是水平排列，所以需要给",[46,139353,26],{},"设置浮动",[26,139356,139357],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[26,139359,139360,139361],{},"版心盒子里面包含 2 号右侧盒子右浮动",[23,139362,139363,139377,139382],{},[26,139364,139365,139366,22750,139368,139370,139371,139373,139374,139376],{},"2 号盒子 里面包含一个",[46,139367,23],{},[46,139369,23],{},"包裹",[46,139372,26],{},"，中间的",[46,139375,2311],{},"可以用样式去设置，也可以用字符 |",[26,139378,139379,139380,139354],{},"里面内容水平排列，给",[46,139381,26],{},[26,139383,139384,139385,139387,139388,139390],{},"找到里面所有偶数的 ",[46,139386,26],{}," 设置样式（偶数的 ",[46,139389,26],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[26,139392,139393,139394],{},"需要用到字体图标",[23,139395,139396,139402,139405,139408,139411],{},[26,139397,139398,139399],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[46,139400,139401],{},"arrow-icon",[26,139403,139404],{},"先要引入字体图片的资源",[26,139406,139407],{},"在样式里面利用 font-face 来进行声明",[26,139409,139410],{},"在伪元素的 content属性设置 图标的编码",[26,139412,139413],{},"给伪元素设置font-family属性",[19,139415,139416],{},"结构实例代码：",[39,139418,139420],{"className":41,"code":139419,"language":43,"meta":44,"style":44},"div::before {\n  content: \"\";\n  display: block;\n}\n",[46,139421,139422,139430,139440,139450],{"__ignoreMap":44},[49,139423,139424,139426,139428],{"class":51,"line":52},[49,139425,148],{"class":147},[49,139427,138578],{"class":62},[49,139429,67],{"class":66},[49,139431,139432,139434,139436,139438],{"class":51,"line":59},[49,139433,138585],{"class":73},[49,139435,77],{"class":66},[49,139437,8904],{"class":1505},[49,139439,83],{"class":66},[49,139441,139442,139444,139446,139448],{"class":51,"line":70},[49,139443,669],{"class":73},[49,139445,77],{"class":66},[49,139447,674],{"class":73},[49,139449,83],{"class":66},[49,139451,139452],{"class":51,"line":86},[49,139453,137],{"class":66},[19,139455,139456],{},"样式实例代码：",[39,139458,139459],{"className":41,"code":139419,"language":43,"meta":44,"style":44},[46,139460,139461,139469,139479,139489],{"__ignoreMap":44},[49,139462,139463,139465,139467],{"class":51,"line":52},[49,139464,148],{"class":147},[49,139466,138578],{"class":62},[49,139468,67],{"class":66},[49,139470,139471,139473,139475,139477],{"class":51,"line":59},[49,139472,138585],{"class":73},[49,139474,77],{"class":66},[49,139476,8904],{"class":1505},[49,139478,83],{"class":66},[49,139480,139481,139483,139485,139487],{"class":51,"line":70},[49,139482,669],{"class":73},[49,139484,77],{"class":66},[49,139486,674],{"class":73},[49,139488,83],{"class":66},[49,139490,139491],{"class":51,"line":86},[49,139492,137],{"class":66},[183,139494,139496],{"id":139495},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[23,139498,139499],{},[26,139500,139501],{},"header 盒子必须要有高度",[19,139503,139504,139505,139507,139508],{},"1 号盒子是 ",[46,139506,132770],{}," 标志定位，在正常开发过程中， ",[485,139509,139510,139511,139514],{},"logo的布局其实是有讲究的，需要进行 ",[46,139512,139513],{},"logoSEO","的优化 （★★★）",[23,139516,139517,139525,139533,139560],{},[26,139518,139519,139521,139522,139524],{},[46,139520,132770],{}," 里面首先放一个 ",[46,139523,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[26,139526,139527,139529,139530,139532],{},[46,139528,10],{}," 里面再放一个链接，可以返回首页的，把 ",[46,139531,132770],{}," 的背景图片给链接即可",[26,139534,139535,139536],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[23,139537,139538,139553],{},[26,139539,139540,139541,139544,139545,139548,139549,139552],{},"方法1：",[46,139542,139543],{},"text-indent"," 移到盒子外面（",[46,139546,139547],{},"text-indent: -9999px",") ，然后 ",[46,139550,139551],{},"overflow:hidden"," ，淘宝的做法",[26,139554,139555,139556,139559],{},"方法2：直接给 ",[46,139557,139558],{},"font-size: 0;"," 就看不到文字了，京东的做法",[26,139561,139562,139563,139565,139566,139568],{},"最后给链接一个 ",[46,139564,52654],{}," 属性，这样鼠标放到 ",[46,139567,132770],{}," 上就可以看到提示文字了",[19,139570,139416],{},[39,139572,139573],{"className":128519,"code":132991,"language":128521,"meta":44,"style":44},[46,139574,139575],{"__ignoreMap":44},[49,139576,139577,139579,139581,139583,139585,139587,139589,139591,139593,139595,139597],{"class":51,"line":52},[49,139578,2300],{"class":66},[49,139580,1630],{"class":147},[49,139582,62295],{"class":62},[49,139584,1448],{"class":66},[49,139586,133006],{"class":1505},[49,139588,133009],{"class":62},[49,139590,1448],{"class":66},[49,139592,133014],{"class":1505},[49,139594,133017],{"class":66},[49,139596,1630],{"class":147},[49,139598,52554],{"class":66},[19,139600,139456],{},[39,139602,139603],{"className":128519,"code":132991,"language":128521,"meta":44,"style":44},[46,139604,139605],{"__ignoreMap":44},[49,139606,139607,139609,139611,139613,139615,139617,139619,139621,139623,139625,139627],{"class":51,"line":52},[49,139608,2300],{"class":66},[49,139610,1630],{"class":147},[49,139612,62295],{"class":62},[49,139614,1448],{"class":66},[49,139616,133006],{"class":1505},[49,139618,133009],{"class":62},[49,139620,1448],{"class":66},[49,139622,133014],{"class":1505},[49,139624,133017],{"class":66},[49,139626,1630],{"class":147},[49,139628,52554],{"class":66},[19,139630,139631,139632,139634],{},"2 号盒子是 ",[46,139633,132783],{}," 搜索模块定位",[23,139636,139637,139640,139643,139646],{},[26,139638,139639],{},"search盒子利用定位的方式放在对应的位置",[26,139641,139642],{},"search盒子设置绝对定位，header盒子设置相对定位",[26,139644,139645],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[26,139647,139648],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139650,139416],{},[39,139652,139653],{"className":41,"code":133078,"language":43,"meta":44,"style":44},[46,139654,139655,139677,139681,139691],{"__ignoreMap":44},[49,139656,139657,139659,139661,139663,139665,139667,139669,139671,139673,139675],{"class":51,"line":52},[49,139658,148],{"class":147},[49,139660,13687],{"class":66},[49,139662,19],{"class":147},[49,139664,13687],{"class":66},[49,139666,10],{"class":147},[49,139668,13687],{"class":66},[49,139670,23],{"class":147},[49,139672,13687],{"class":66},[49,139674,26],{"class":147},[49,139676,67],{"class":66},[49,139678,139679],{"class":51,"line":59},[49,139680,133107],{"class":55},[49,139682,139683,139685,139687,139689],{"class":51,"line":70},[49,139684,669],{"class":73},[49,139686,77],{"class":66},[49,139688,674],{"class":73},[49,139690,83],{"class":66},[49,139692,139693],{"class":51,"line":86},[49,139694,137],{"class":66},[19,139696,139456],{},[39,139698,139699],{"className":41,"code":133078,"language":43,"meta":44,"style":44},[46,139700,139701,139723,139727,139737],{"__ignoreMap":44},[49,139702,139703,139705,139707,139709,139711,139713,139715,139717,139719,139721],{"class":51,"line":52},[49,139704,148],{"class":147},[49,139706,13687],{"class":66},[49,139708,19],{"class":147},[49,139710,13687],{"class":66},[49,139712,10],{"class":147},[49,139714,13687],{"class":66},[49,139716,23],{"class":147},[49,139718,13687],{"class":66},[49,139720,26],{"class":147},[49,139722,67],{"class":66},[49,139724,139725],{"class":51,"line":59},[49,139726,133107],{"class":55},[49,139728,139729,139731,139733,139735],{"class":51,"line":70},[49,139730,669],{"class":73},[49,139732,77],{"class":66},[49,139734,674],{"class":73},[49,139736,83],{"class":66},[49,139738,139739],{"class":51,"line":86},[49,139740,137],{"class":66},[19,139742,139743],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139745,139746,139747,139750],{},"3 号盒子是 ",[46,139748,139749],{},"hotwords"," 热词模块定位",[23,139752,139753,139756,139759],{},[26,139754,139755],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[26,139757,139758],{},"给里面所有的a标签设置 左右10px的外边距",[26,139760,139761],{},"给第一个a标签设置文字变红色（#c81623）",[19,139763,139416],{},[39,139765,139767],{"className":41,"code":139766,"language":43,"meta":44,"style":44},"div {\n  margin: 0 auto;\n}\n",[46,139768,139769,139775,139787],{"__ignoreMap":44},[49,139770,139771,139773],{"class":51,"line":52},[49,139772,148],{"class":147},[49,139774,67],{"class":66},[49,139776,139777,139779,139781,139783,139785],{"class":51,"line":59},[49,139778,1070],{"class":73},[49,139780,77],{"class":66},[49,139782,80],{"class":73},[49,139784,1077],{"class":73},[49,139786,83],{"class":66},[49,139788,139789],{"class":51,"line":70},[49,139790,137],{"class":66},[19,139792,139456],{},[39,139794,139795],{"className":41,"code":139766,"language":43,"meta":44,"style":44},[46,139796,139797,139803,139815],{"__ignoreMap":44},[49,139798,139799,139801],{"class":51,"line":52},[49,139800,148],{"class":147},[49,139802,67],{"class":66},[49,139804,139805,139807,139809,139811,139813],{"class":51,"line":59},[49,139806,1070],{"class":73},[49,139808,77],{"class":66},[49,139810,80],{"class":73},[49,139812,1077],{"class":73},[49,139814,83],{"class":66},[49,139816,139817],{"class":51,"line":70},[49,139818,137],{"class":66},[19,139820,139821,139822,139825],{},"4 号盒子是 ",[46,139823,139824],{},"shopcar"," 购物车模块",[23,139827,139828,139833,139836,139839],{},[26,139829,124559,139830,139832],{},[46,139831,139824],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[26,139834,139835],{},"count 统计部分用绝对定位做",[26,139837,139838],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[26,139840,139841],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139843,139416],{},[39,139845,139846],{"className":41,"code":133190,"language":43,"meta":44,"style":44},[46,139847,139848,139852,139866,139870,139884,139888,139902,139906,139920,139924],{"__ignoreMap":44},[49,139849,139850],{"class":51,"line":52},[49,139851,133197],{"class":55},[49,139853,139854,139856,139858,139860,139862,139864],{"class":51,"line":59},[49,139855,133202],{"class":62},[49,139857,203],{"class":66},[49,139859,130131],{"class":73},[49,139861,77],{"class":66},[49,139863,133211],{"class":73},[49,139865,130701],{"class":66},[49,139867,139868],{"class":51,"line":70},[49,139869,133218],{"class":55},[49,139871,139872,139874,139876,139878,139880,139882],{"class":51,"line":86},[49,139873,133223],{"class":62},[49,139875,203],{"class":66},[49,139877,130131],{"class":73},[49,139879,77],{"class":66},[49,139881,850],{"class":73},[49,139883,130701],{"class":66},[49,139885,139886],{"class":51,"line":98},[49,139887,133238],{"class":55},[49,139889,139890,139892,139894,139896,139898,139900],{"class":51,"line":121},[49,139891,133243],{"class":62},[49,139893,203],{"class":66},[49,139895,130131],{"class":73},[49,139897,77],{"class":66},[49,139899,56070],{"class":73},[49,139901,130701],{"class":66},[49,139903,139904],{"class":51,"line":134},[49,139905,133258],{"class":55},[49,139907,139908,139910,139912,139914,139916,139918],{"class":51,"line":1085},[49,139909,133263],{"class":62},[49,139911,203],{"class":66},[49,139913,130131],{"class":73},[49,139915,77],{"class":66},[49,139917,87458],{"class":73},[49,139919,130701],{"class":66},[49,139921,139922],{"class":51,"line":2574},[49,139923,133278],{"class":55},[49,139925,139926,139928,139930,139932,139934,139936],{"class":51,"line":2586},[49,139927,133283],{"class":62},[49,139929,203],{"class":66},[49,139931,130131],{"class":73},[49,139933,77],{"class":66},[49,139935,133292],{"class":73},[49,139937,130701],{"class":66},[19,139939,139456],{},[39,139941,139942],{"className":41,"code":133190,"language":43,"meta":44,"style":44},[46,139943,139944,139948,139962,139966,139980,139984,139998,140002,140016,140020],{"__ignoreMap":44},[49,139945,139946],{"class":51,"line":52},[49,139947,133197],{"class":55},[49,139949,139950,139952,139954,139956,139958,139960],{"class":51,"line":59},[49,139951,133202],{"class":62},[49,139953,203],{"class":66},[49,139955,130131],{"class":73},[49,139957,77],{"class":66},[49,139959,133211],{"class":73},[49,139961,130701],{"class":66},[49,139963,139964],{"class":51,"line":70},[49,139965,133218],{"class":55},[49,139967,139968,139970,139972,139974,139976,139978],{"class":51,"line":86},[49,139969,133223],{"class":62},[49,139971,203],{"class":66},[49,139973,130131],{"class":73},[49,139975,77],{"class":66},[49,139977,850],{"class":73},[49,139979,130701],{"class":66},[49,139981,139982],{"class":51,"line":98},[49,139983,133238],{"class":55},[49,139985,139986,139988,139990,139992,139994,139996],{"class":51,"line":121},[49,139987,133243],{"class":62},[49,139989,203],{"class":66},[49,139991,130131],{"class":73},[49,139993,77],{"class":66},[49,139995,56070],{"class":73},[49,139997,130701],{"class":66},[49,139999,140000],{"class":51,"line":134},[49,140001,133258],{"class":55},[49,140003,140004,140006,140008,140010,140012,140014],{"class":51,"line":1085},[49,140005,133263],{"class":62},[49,140007,203],{"class":66},[49,140009,130131],{"class":73},[49,140011,77],{"class":66},[49,140013,87458],{"class":73},[49,140015,130701],{"class":66},[49,140017,140018],{"class":51,"line":2574},[49,140019,133278],{"class":55},[49,140021,140022,140024,140026,140028,140030,140032],{"class":51,"line":2586},[49,140023,133283],{"class":62},[49,140025,203],{"class":66},[49,140027,130131],{"class":73},[49,140029,77],{"class":66},[49,140031,133292],{"class":73},[49,140033,130701],{"class":66},[183,140035,140037,140038,140040],{"id":140036},"_1544-nav导航模块制作","15.4.4 ",[46,140039,54955],{},"导航模块制作",[174,140042],{"style":176,"src":140043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140045,140046,140048],{},[46,140047,54955],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140050,140051,140052],{},"1 号盒子左侧浮动，",[46,140053,140054],{},"dropdown",[23,140056,140057,140067,140075,140081,140089,140099,140107,140118],{},[26,140058,140059,140060,102242,140063,140066],{},"1号盒子有讲究，根据相关性 里面包含 ",[46,140061,140062],{},".dt",[46,140064,140065],{},".dd"," 两个盒子",[26,140068,140069,140071,140072,140074],{},[46,140070,140062],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[46,140073,140065],{}," 挤到下面去了",[26,140076,140077,140078,140080],{},"给 ",[46,140079,140065],{}," 盒子设置宽度 和 高度，以及背景颜色",[26,140082,140077,140083,140085,140086,121461],{},[46,140084,140065],{}," 盒子里面定义 无序列表 （",[46,140087,140088],{},"ul > li > a",[26,140090,140091,140092,140094,140095,140098],{},"每个 ",[46,140093,26],{}," 都有一个高度（",[46,140096,140097],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[26,140100,140077,140101,140103,140104,121461],{},[46,140102,26],{}," 里面的a设置文字大小（",[46,140105,140106],{},"14px",[26,140108,140077,140109,140111,140112,140114,140115,140117],{},[46,140110,26],{}," 设置 ",[46,140113,128933],{},"，当鼠标移入的时候，让",[46,140116,26],{},"的背景变成白色，让里面的文字变成红色",[26,140119,140120,140122,140123,140125,140126,140128],{},[46,140121,26],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[46,140124,26],{},"的右侧，那么给",[46,140127,26],{},"设置相对定位",[19,140130,140131],{},"一定要注意相关性",[19,140133,139416],{},[39,140135,140136],{"className":41,"code":139419,"language":43,"meta":44,"style":44},[46,140137,140138,140146,140156,140166],{"__ignoreMap":44},[49,140139,140140,140142,140144],{"class":51,"line":52},[49,140141,148],{"class":147},[49,140143,138578],{"class":62},[49,140145,67],{"class":66},[49,140147,140148,140150,140152,140154],{"class":51,"line":59},[49,140149,138585],{"class":73},[49,140151,77],{"class":66},[49,140153,8904],{"class":1505},[49,140155,83],{"class":66},[49,140157,140158,140160,140162,140164],{"class":51,"line":70},[49,140159,669],{"class":73},[49,140161,77],{"class":66},[49,140163,674],{"class":73},[49,140165,83],{"class":66},[49,140167,140168],{"class":51,"line":86},[49,140169,137],{"class":66},[19,140171,139456],{},[39,140173,140174],{"className":41,"code":139419,"language":43,"meta":44,"style":44},[46,140175,140176,140184,140194,140204],{"__ignoreMap":44},[49,140177,140178,140180,140182],{"class":51,"line":52},[49,140179,148],{"class":147},[49,140181,138578],{"class":62},[49,140183,67],{"class":66},[49,140185,140186,140188,140190,140192],{"class":51,"line":59},[49,140187,138585],{"class":73},[49,140189,77],{"class":66},[49,140191,8904],{"class":1505},[49,140193,83],{"class":66},[49,140195,140196,140198,140200,140202],{"class":51,"line":70},[49,140197,669],{"class":73},[49,140199,77],{"class":66},[49,140201,674],{"class":73},[49,140203,83],{"class":66},[49,140205,140206],{"class":51,"line":86},[49,140207,137],{"class":66},[19,140209,140210],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140212,140213,140214,140217],{},"2 号盒子左侧浮动，",[46,140215,140216],{},"navitems"," 导航栏组",[23,140219,140220,140225,140234],{},[26,140221,140222,140223],{},"里面结构是 ",[46,140224,140088],{},[26,140226,140227,140228,140230,140231,140233],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[46,140229,1630],{},"左右的",[46,140232,32131],{},"把两侧撑开",[26,140235,140236],{},"让文字垂直居中（行高等于高度）",[174,140238],{"style":176,"src":140239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140241,140242],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140244,139416],{},[39,140246,140248],{"className":41,"code":140247,"language":43,"meta":44,"style":44},".box {\n  float: left;\n}\n",[46,140249,140250,140256,140266],{"__ignoreMap":44},[49,140251,140252,140254],{"class":51,"line":52},[49,140253,838],{"class":62},[49,140255,67],{"class":66},[49,140257,140258,140260,140262,140264],{"class":51,"line":59},[49,140259,1039],{"class":73},[49,140261,77],{"class":66},[49,140263,304],{"class":73},[49,140265,83],{"class":66},[49,140267,140268],{"class":51,"line":70},[49,140269,137],{"class":66},[19,140271,139456],{},[39,140273,140274],{"className":41,"code":140247,"language":43,"meta":44,"style":44},[46,140275,140276,140282,140292],{"__ignoreMap":44},[49,140277,140278,140280],{"class":51,"line":52},[49,140279,838],{"class":62},[49,140281,67],{"class":66},[49,140283,140284,140286,140288,140290],{"class":51,"line":59},[49,140285,1039],{"class":73},[49,140287,77],{"class":66},[49,140289,304],{"class":73},[49,140291,83],{"class":66},[49,140293,140294],{"class":51,"line":70},[49,140295,137],{"class":66},[19,140297,140298],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[174,140300],{"style":176,"src":140301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[39,140303,140304],{"className":41,"code":140,"language":43,"meta":44,"style":44},[46,140305,140306,140312,140328],{"__ignoreMap":44},[49,140307,140308,140310],{"class":51,"line":52},[49,140309,148],{"class":147},[49,140311,67],{"class":66},[49,140313,140314,140316,140318,140320,140322,140324,140326],{"class":51,"line":59},[49,140315,101],{"class":73},[49,140317,77],{"class":66},[49,140319,159],{"class":73},[49,140321,110],{"class":109},[49,140323,113],{"class":73},[49,140325,166],{"class":73},[49,140327,83],{"class":66},[49,140329,140330],{"class":51,"line":70},[49,140331,137],{"class":66},[183,140333,140335],{"id":140334},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[174,140337],{"style":176,"src":140338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[23,140340,140341,140346,140351],{},[26,140342,140343,140345],{},[46,140344,132961],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[26,140347,140348,140350],{},[46,140349,132961],{}," 里面有一个大的版心",[26,140352,140353,140354,140357,140358],{},"版心里面包含 1 号盒子，",[46,140355,140356],{},"mod_service"," 是服务模块，mod 是模块的意思",[23,140359,140360,140365,140378,140394,140399],{},[26,140361,140077,140362,140364],{},[46,140363,140356],{}," 设置高度（80px）和下边框",[26,140366,140367,140368,140371,140372,140374,140375,140377],{},"在里面定义 ",[46,140369,140370],{},"ul > li"," ,每个",[46,140373,26],{}," 宽度是300px 高度是 50px，给每个",[46,140376,26],{},"设置35px的左内边距",[26,140379,140380,140381,140383,140384,140386,140387,140389,140390,19660,140392,121461],{},"在每个",[46,140382,26],{},"里面，放一个 ",[46,140385,24159],{},"（里面放图标），一个",[46,140388,148],{},"（里面放",[46,140391,148],{},[46,140393,19],{},[26,140395,140077,140396,140398],{},[46,140397,24159],{},"设置浮动，让h5与这个div左右排列",[26,140400,140401],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140403,139416],{},[39,140405,140407],{"className":41,"code":140406,"language":43,"meta":44,"style":44},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[46,140408,140409,140415,140427,140439,140466],{"__ignoreMap":44},[49,140410,140411,140413],{"class":51,"line":52},[49,140412,135512],{"class":62},[49,140414,67],{"class":66},[49,140416,140417,140419,140421,140423,140425],{"class":51,"line":59},[49,140418,74],{"class":73},[49,140420,77],{"class":66},[49,140422,875],{"class":73},[49,140424,110],{"class":109},[49,140426,83],{"class":66},[49,140428,140429,140431,140433,140435,140437],{"class":51,"line":70},[49,140430,89],{"class":73},[49,140432,77],{"class":66},[49,140434,875],{"class":73},[49,140436,110],{"class":109},[49,140438,83],{"class":66},[49,140440,140441,140443,140445,140447,140449,140451,140453,140455,140458,140460,140462,140464],{"class":51,"line":86},[49,140442,71844],{"class":73},[49,140444,77],{"class":66},[49,140446,62964],{"class":73},[49,140448,1403],{"class":66},[49,140450,135551],{"class":6468},[49,140452,14966],{"class":66},[49,140454,62974],{"class":73},[49,140456,140457],{"class":73}," -10",[49,140459,110],{"class":109},[49,140461,135570],{"class":73},[49,140463,110],{"class":109},[49,140465,83],{"class":66},[49,140467,140468],{"class":51,"line":98},[49,140469,137],{"class":66},[19,140471,139456],{},[39,140473,140474],{"className":41,"code":140406,"language":43,"meta":44,"style":44},[46,140475,140476,140482,140494,140506,140532],{"__ignoreMap":44},[49,140477,140478,140480],{"class":51,"line":52},[49,140479,135512],{"class":62},[49,140481,67],{"class":66},[49,140483,140484,140486,140488,140490,140492],{"class":51,"line":59},[49,140485,74],{"class":73},[49,140487,77],{"class":66},[49,140489,875],{"class":73},[49,140491,110],{"class":109},[49,140493,83],{"class":66},[49,140495,140496,140498,140500,140502,140504],{"class":51,"line":70},[49,140497,89],{"class":73},[49,140499,77],{"class":66},[49,140501,875],{"class":73},[49,140503,110],{"class":109},[49,140505,83],{"class":66},[49,140507,140508,140510,140512,140514,140516,140518,140520,140522,140524,140526,140528,140530],{"class":51,"line":86},[49,140509,71844],{"class":73},[49,140511,77],{"class":66},[49,140513,62964],{"class":73},[49,140515,1403],{"class":66},[49,140517,135551],{"class":6468},[49,140519,14966],{"class":66},[49,140521,62974],{"class":73},[49,140523,140457],{"class":73},[49,140525,110],{"class":109},[49,140527,135570],{"class":73},[49,140529,110],{"class":109},[49,140531,83],{"class":66},[49,140533,140534],{"class":51,"line":98},[49,140535,137],{"class":66},[19,140537,140538],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[23,140540,140541,140544,140550,140556,140568],{},[26,140542,140543],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[26,140545,140546,140547,121461],{},"里面的布局利用 自定义列表来实现（",[46,140548,140549],{},"dl > dt + dd",[26,140551,140077,140552,140555],{},[46,140553,140554],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[26,140557,140077,140558,140561,140562,19660,140564,140567],{},[46,140559,140560],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[46,140563,140560],{},[46,140565,140566],{},"dd","之间有些距离",[26,140569,140570],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140572,139416],{},[39,140574,140575],{"className":41,"code":139766,"language":43,"meta":44,"style":44},[46,140576,140577,140583,140595],{"__ignoreMap":44},[49,140578,140579,140581],{"class":51,"line":52},[49,140580,148],{"class":147},[49,140582,67],{"class":66},[49,140584,140585,140587,140589,140591,140593],{"class":51,"line":59},[49,140586,1070],{"class":73},[49,140588,77],{"class":66},[49,140590,80],{"class":73},[49,140592,1077],{"class":73},[49,140594,83],{"class":66},[49,140596,140597],{"class":51,"line":70},[49,140598,137],{"class":66},[19,140600,139456],{},[39,140602,140603],{"className":41,"code":139766,"language":43,"meta":44,"style":44},[46,140604,140605,140611,140623],{"__ignoreMap":44},[49,140606,140607,140609],{"class":51,"line":52},[49,140608,148],{"class":147},[49,140610,67],{"class":66},[49,140612,140613,140615,140617,140619,140621],{"class":51,"line":59},[49,140614,1070],{"class":73},[49,140616,77],{"class":66},[49,140618,80],{"class":73},[49,140620,1077],{"class":73},[49,140622,83],{"class":66},[49,140624,140625],{"class":51,"line":70},[49,140626,137],{"class":66},[19,140628,140629],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[23,140631,140632,140641,140644,140655],{},[26,140633,140634,140635,140637,140638,140640],{},"分为上下两块，上面是 ",[46,140636,132978],{}," 友情链接，下面是 ",[46,140639,132971],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[26,140642,140643],{},"把内容分别复制到相应模块中",[26,140645,140077,140646,140648,140649,140651,140652,140654],{},[46,140647,132978],{}," 设置 15px 的下外边距，给",[46,140650,132978],{}," 里面 的 ",[46,140653,1630],{}," 标签设置 左右 3px 的外边距",[26,140656,140657,140658,140660],{},"给",[46,140659,132971],{}," 设置 20px 的行高",[19,140662,139416],{},[39,140664,140665],{"className":41,"code":139766,"language":43,"meta":44,"style":44},[46,140666,140667,140673,140685],{"__ignoreMap":44},[49,140668,140669,140671],{"class":51,"line":52},[49,140670,148],{"class":147},[49,140672,67],{"class":66},[49,140674,140675,140677,140679,140681,140683],{"class":51,"line":59},[49,140676,1070],{"class":73},[49,140678,77],{"class":66},[49,140680,80],{"class":73},[49,140682,1077],{"class":73},[49,140684,83],{"class":66},[49,140686,140687],{"class":51,"line":70},[49,140688,137],{"class":66},[19,140690,139456],{},[39,140692,140693],{"className":41,"code":139766,"language":43,"meta":44,"style":44},[46,140694,140695,140701,140713],{"__ignoreMap":44},[49,140696,140697,140699],{"class":51,"line":52},[49,140698,148],{"class":147},[49,140700,67],{"class":66},[49,140702,140703,140705,140707,140709,140711],{"class":51,"line":59},[49,140704,1070],{"class":73},[49,140706,77],{"class":66},[49,140708,80],{"class":73},[49,140710,1077],{"class":73},[49,140712,83],{"class":66},[49,140714,140715],{"class":51,"line":70},[49,140716,137],{"class":66},[19,140718,140719],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1305,140721,140722],{},"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":44,"searchDepth":59,"depth":59,"links":140724},[140725,140726,140727,140734],{"id":139005,"depth":59,"text":139006},{"id":139024,"depth":59,"text":139025},{"id":139051,"depth":59,"text":139052,"children":140728},[140729,140730,140731,140732,140733],{"id":139055,"depth":70,"text":139056},{"id":139068,"depth":70,"text":139069},{"id":139092,"depth":70,"text":139093},{"id":139114,"depth":70,"text":139115},{"id":139186,"depth":70,"text":139187},{"id":139312,"depth":59,"text":139313,"children":140735},[140736,140737,140738,140739,140741],{"id":139316,"depth":70,"text":139317},{"id":139323,"depth":70,"text":139324},{"id":139495,"depth":70,"text":139496},{"id":140036,"depth":70,"text":140740},"15.4.4 nav导航模块制作",{"id":140334,"depth":70,"text":140335},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138997,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140748,"title":140749,"body":140750,"description":1327,"extension":1328,"meta":143152,"navigation":1330,"path":143153,"seo":143154,"stem":143155,"__hash__":143156},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140751,"toc":143129},[140752,140755,140759,140763,140775,140778,140781,140784,140795,140797,140821,140823,140847,140852,140855,140857,140893,140895,140931,140934,140939,140942,140945,140948,140978,140985,140988,140998,141000,141034,141037,141071,141077,141094,141096,141132,141134,141170,141175,141200,141202,141228,141230,141254,141261,141264,141328,141330,141372,141374,141414,141421,141426,141428,141458,141460,141490,141494,141497,141504,141516,141518,141544,141546,141570,141573,141575,141599,141605,141615,141617,141647,141649,141679,141686,141727,141729,141765,141767,141803,141807,141810,141813,141816,141822,141827,141830,141853,141856,141880,141883,141907,141912,141915,141918,141921,141924,141927,142001,142003,142033,142035,142065,142068,142071,142103,142107,142111,142125,142134,142137,142142,142144,142238,142240,142334,142357,142359,142383,142385,142409,142416,142419,142429,142431,142455,142460,142468,142470,142500,142505,142545,142547,142573,142575,142601,142605,142608,142613,142616,142620,142628,142635,142643,142645,142675,142677,142707,142715,142718,142721,142723,142753,142755,142785,142788,142793,142795,142819,142821,142845,142848,142933,142935,142959,142961,142985,142989,142991,143015,143017,143051,143055,143069,143072,143077,143080,143085,143088,143118,143126],[10,140753,140749],{"id":140754},"_16-品优购项目下篇-主体与页面开发",[14,140756,140758],{"id":140757},"_161-项目主体模块制作","16.1 项目主体模块制作",[183,140760,140762],{"id":140761},"_1611-首页制作","16.1.1 首页制作",[19,140764,140765,140767,140768,140770,140771,140774],{},[485,140766,103282],{}," 主体模块是 ",[485,140769,75287],{}," 里面专有的，注意需要新的样式文件 ",[485,140772,140773],{},"index.css，"," 就不要写在common.css中了",[174,140776],{"style":176,"src":140777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[174,140779],{"style":176,"src":140780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140782,140783],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[23,140785,140786,140789,140792],{},[26,140787,140788],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[26,140790,140791],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[26,140793,140794],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,140796,139416],{},[39,140798,140799],{"className":41,"code":140247,"language":43,"meta":44,"style":44},[46,140800,140801,140807,140817],{"__ignoreMap":44},[49,140802,140803,140805],{"class":51,"line":52},[49,140804,838],{"class":62},[49,140806,67],{"class":66},[49,140808,140809,140811,140813,140815],{"class":51,"line":59},[49,140810,1039],{"class":73},[49,140812,77],{"class":66},[49,140814,304],{"class":73},[49,140816,83],{"class":66},[49,140818,140819],{"class":51,"line":70},[49,140820,137],{"class":66},[19,140822,139456],{},[39,140824,140825],{"className":41,"code":140247,"language":43,"meta":44,"style":44},[46,140826,140827,140833,140843],{"__ignoreMap":44},[49,140828,140829,140831],{"class":51,"line":52},[49,140830,838],{"class":62},[49,140832,67],{"class":66},[49,140834,140835,140837,140839,140841],{"class":51,"line":59},[49,140836,1039],{"class":73},[49,140838,77],{"class":66},[49,140840,304],{"class":73},[49,140842,83],{"class":66},[49,140844,140845],{"class":51,"line":70},[49,140846,137],{"class":66},[591,140848,140849],{},[26,140850,140851],{},"左侧focus模块制作",[174,140853],{"style":176,"src":140854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140856,139416],{},[39,140858,140859],{"className":41,"code":129095,"language":43,"meta":44,"style":44},[46,140860,140861,140869,140879,140889],{"__ignoreMap":44},[49,140862,140863,140865,140867],{"class":51,"line":52},[49,140864,448],{"class":147},[49,140866,63138],{"class":62},[49,140868,67],{"class":66},[49,140870,140871,140873,140875,140877],{"class":51,"line":59},[49,140872,129110],{"class":73},[49,140874,77],{"class":66},[49,140876,56128],{"class":73},[49,140878,83],{"class":66},[49,140880,140881,140883,140885,140887],{"class":51,"line":70},[49,140882,455],{"class":73},[49,140884,77],{"class":66},[49,140886,460],{"class":73},[49,140888,83],{"class":66},[49,140890,140891],{"class":51,"line":86},[49,140892,137],{"class":66},[19,140894,139456],{},[39,140896,140897],{"className":41,"code":129095,"language":43,"meta":44,"style":44},[46,140898,140899,140907,140917,140927],{"__ignoreMap":44},[49,140900,140901,140903,140905],{"class":51,"line":52},[49,140902,448],{"class":147},[49,140904,63138],{"class":62},[49,140906,67],{"class":66},[49,140908,140909,140911,140913,140915],{"class":51,"line":59},[49,140910,129110],{"class":73},[49,140912,77],{"class":66},[49,140914,56128],{"class":73},[49,140916,83],{"class":66},[49,140918,140919,140921,140923,140925],{"class":51,"line":70},[49,140920,455],{"class":73},[49,140922,77],{"class":66},[49,140924,460],{"class":73},[49,140926,83],{"class":66},[49,140928,140929],{"class":51,"line":86},[49,140930,137],{"class":66},[19,140932,140933],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[591,140935,140936],{"start":59},[26,140937,140938],{},"右侧newsflash模块制作",[174,140940],{"style":176,"src":140941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140943,140944],{},"右侧的模块 分为上中下三个盒子",[19,140946,140947],{},"结构代码：",[39,140949,140950],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,140951,140952],{"__ignoreMap":44},[49,140953,140954,140956,140958,140960,140962,140964,140966,140968,140970,140972,140974,140976],{"class":51,"line":52},[49,140955,2300],{"class":66},[49,140957,174],{"class":147},[49,140959,56478],{"class":62},[49,140961,1448],{"class":66},[49,140963,135272],{"class":1505},[49,140965,56486],{"class":62},[49,140967,1448],{"class":66},[49,140969,135279],{"class":1505},[49,140971,135282],{"class":62},[49,140973,1448],{"class":66},[49,140975,135287],{"class":1505},[49,140977,52554],{"class":66},[19,140979,140980,140981,140984],{},"1 号盒子为 ",[46,140982,140983],{},"news"," 新闻模块 高度为 165px",[174,140986],{"style":176,"src":140987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140989,140990,140991,140994,140995],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[46,140992,140993],{},"news-hd","，下面是 ",[46,140996,140997],{},"news-bd",[19,140999,140947],{},[39,141001,141002],{"className":128519,"code":131867,"language":128521,"meta":44,"style":44},[46,141003,141004,141008,141022,141026],{"__ignoreMap":44},[49,141005,141006],{"class":51,"line":52},[49,141007,131874],{"class":55},[49,141009,141010,141012,141014,141016,141018,141020],{"class":51,"line":59},[49,141011,2300],{"class":66},[49,141013,148],{"class":147},[49,141015,54728],{"class":62},[49,141017,1448],{"class":66},[49,141019,131887],{"class":1505},[49,141021,52554],{"class":66},[49,141023,141024],{"class":51,"line":70},[49,141025,131894],{"class":66},[49,141027,141028,141030,141032],{"class":51,"line":86},[49,141029,53027],{"class":66},[49,141031,148],{"class":147},[49,141033,52554],{"class":66},[19,141035,141036],{},"样式代码：",[39,141038,141039],{"className":128519,"code":131867,"language":128521,"meta":44,"style":44},[46,141040,141041,141045,141059,141063],{"__ignoreMap":44},[49,141042,141043],{"class":51,"line":52},[49,141044,131874],{"class":55},[49,141046,141047,141049,141051,141053,141055,141057],{"class":51,"line":59},[49,141048,2300],{"class":66},[49,141050,148],{"class":147},[49,141052,54728],{"class":62},[49,141054,1448],{"class":66},[49,141056,131887],{"class":1505},[49,141058,52554],{"class":66},[49,141060,141061],{"class":51,"line":70},[49,141062,131894],{"class":66},[49,141064,141065,141067,141069],{"class":51,"line":86},[49,141066,53027],{"class":66},[49,141068,148],{"class":147},[49,141070,52554],{"class":66},[19,141072,141073,141074,141076],{},"上面是",[46,141075,140993],{},"，设置高度是 33px，设置下边框",[23,141078,141079,141085],{},[26,141080,141081,141082,141084],{},"里面放一个",[46,141083,24159],{}," 标题",[26,141086,141087,141088,141090,141091,141093],{},"放一个a",[46,141089,103917],{},"，内容是 更多，然后让 ",[46,141092,1630],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141095,140947],{},[39,141097,141098],{"className":41,"code":139419,"language":43,"meta":44,"style":44},[46,141099,141100,141108,141118,141128],{"__ignoreMap":44},[49,141101,141102,141104,141106],{"class":51,"line":52},[49,141103,148],{"class":147},[49,141105,138578],{"class":62},[49,141107,67],{"class":66},[49,141109,141110,141112,141114,141116],{"class":51,"line":59},[49,141111,138585],{"class":73},[49,141113,77],{"class":66},[49,141115,8904],{"class":1505},[49,141117,83],{"class":66},[49,141119,141120,141122,141124,141126],{"class":51,"line":70},[49,141121,669],{"class":73},[49,141123,77],{"class":66},[49,141125,674],{"class":73},[49,141127,83],{"class":66},[49,141129,141130],{"class":51,"line":86},[49,141131,137],{"class":66},[19,141133,141036],{},[39,141135,141136],{"className":41,"code":139419,"language":43,"meta":44,"style":44},[46,141137,141138,141146,141156,141166],{"__ignoreMap":44},[49,141139,141140,141142,141144],{"class":51,"line":52},[49,141141,148],{"class":147},[49,141143,138578],{"class":62},[49,141145,67],{"class":66},[49,141147,141148,141150,141152,141154],{"class":51,"line":59},[49,141149,138585],{"class":73},[49,141151,77],{"class":66},[49,141153,8904],{"class":1505},[49,141155,83],{"class":66},[49,141157,141158,141160,141162,141164],{"class":51,"line":70},[49,141159,669],{"class":73},[49,141161,77],{"class":66},[49,141163,674],{"class":73},[49,141165,83],{"class":66},[49,141167,141168],{"class":51,"line":86},[49,141169,137],{"class":66},[19,141171,141172,141173],{},"下面是",[46,141174,140997],{},[23,141176,141177,141185],{},[26,141178,141179,141180,102242,141182,141184],{},"里面包含 ",[46,141181,23],{},[46,141183,26],{}," 还有链接",[26,141186,140657,141187,141189,141190,141192,141193,141196,141197],{},[46,141188,26],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[46,141191,132424],{}," 2.设置 ",[46,141194,141195],{},"white-space: nowrap;"," 3. 设置 ",[46,141198,141199],{},"text-overflow: ellipsis;",[19,141201,140947],{},[39,141203,141205],{"className":41,"code":141204,"language":43,"meta":44,"style":44},"div {\n  overflow: hidden;\n}\n",[46,141206,141207,141213,141224],{"__ignoreMap":44},[49,141208,141209,141211],{"class":51,"line":52},[49,141210,148],{"class":147},[49,141212,67],{"class":66},[49,141214,141215,141218,141220,141222],{"class":51,"line":59},[49,141216,141217],{"class":73},"  overflow",[49,141219,77],{"class":66},[49,141221,62952],{"class":73},[49,141223,83],{"class":66},[49,141225,141226],{"class":51,"line":70},[49,141227,137],{"class":66},[19,141229,141036],{},[39,141231,141232],{"className":41,"code":141204,"language":43,"meta":44,"style":44},[46,141233,141234,141240,141250],{"__ignoreMap":44},[49,141235,141236,141238],{"class":51,"line":52},[49,141237,148],{"class":147},[49,141239,67],{"class":66},[49,141241,141242,141244,141246,141248],{"class":51,"line":59},[49,141243,141217],{"class":73},[49,141245,77],{"class":66},[49,141247,62952],{"class":73},[49,141249,83],{"class":66},[49,141251,141252],{"class":51,"line":70},[49,141253,137],{"class":66},[19,141255,141256,141257,141260],{},"2 号盒子为 ",[46,141258,141259],{},"lifeservice"," 生活服务模块 高度为 209px",[174,141262],{"style":176,"src":141263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[23,141265,141266,141269,141279,141303,141314],{},[26,141267,141268],{},"设置边框（左右下边框）",[26,141270,141271,141272,141275,141276,141278],{},"里面的内容 是 ",[46,141273,141274],{},"ul > 12*li","，给",[46,141277,26],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[26,141280,141281,141282],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[23,141283,141284,141289,141298],{},[26,141285,141286,141288],{},[46,141287,141259],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[26,141290,141291,141292,141294,141295,141297],{},"可以让 ",[46,141293,141259],{}," 里面的 ",[46,141296,23],{}," 宽度为 252，就可以装的下 4 个 小 li",[26,141299,141300,141302],{},[46,141301,141259],{}," 盒子 overflow 隐藏多余的部分就可以了",[26,141304,117691,141305,141307,141308,141310,141311,141313],{},[46,141306,26],{}," 里面放一个 ",[46,141309,1833],{},"（里面放图标），下面的文本用 ",[46,141312,19],{}," 标签包裹",[26,141315,140077,141316,141318,141319,141321,141322,140111,141324,141327],{},[46,141317,1833],{}," 设置 24px宽和28px的高（注意 ",[46,141320,1833],{}," 是行内元素， 转成行内块），给 ",[46,141323,26],{},[46,141325,141326],{},"text-align:center"," 让里面内容居中显示",[19,141329,140947],{},[39,141331,141333],{"className":41,"code":141332,"language":43,"meta":44,"style":44},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[46,141334,141335,141353,141358,141368],{"__ignoreMap":44},[49,141336,141337,141339,141341,141343,141345,141347,141349,141351],{"class":51,"line":52},[49,141338,49],{"class":147},[49,141340,13687],{"class":66},[49,141342,1630],{"class":147},[49,141344,13687],{"class":66},[49,141346,24802],{"class":147},[49,141348,13687],{"class":66},[49,141350,485],{"class":147},[49,141352,67],{"class":66},[49,141354,141355],{"class":51,"line":59},[49,141356,141357],{"class":55},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[49,141359,141360,141362,141364,141366],{"class":51,"line":70},[49,141361,669],{"class":73},[49,141363,77],{"class":66},[49,141365,129449],{"class":73},[49,141367,83],{"class":66},[49,141369,141370],{"class":51,"line":86},[49,141371,137],{"class":66},[19,141373,141036],{},[39,141375,141376],{"className":41,"code":141332,"language":43,"meta":44,"style":44},[46,141377,141378,141396,141400,141410],{"__ignoreMap":44},[49,141379,141380,141382,141384,141386,141388,141390,141392,141394],{"class":51,"line":52},[49,141381,49],{"class":147},[49,141383,13687],{"class":66},[49,141385,1630],{"class":147},[49,141387,13687],{"class":66},[49,141389,24802],{"class":147},[49,141391,13687],{"class":66},[49,141393,485],{"class":147},[49,141395,67],{"class":66},[49,141397,141398],{"class":51,"line":59},[49,141399,141357],{"class":55},[49,141401,141402,141404,141406,141408],{"class":51,"line":70},[49,141403,669],{"class":73},[49,141405,77],{"class":66},[49,141407,129449],{"class":73},[49,141409,83],{"class":66},[49,141411,141412],{"class":51,"line":86},[49,141413,137],{"class":66},[19,141415,141416,141417,141420],{},"3 号盒子为 ",[46,141418,141419],{},"bargain"," 特价商品",[23,141422,141423],{},[26,141424,141425],{},"这个比较简单，直接插入一张图片即可",[19,141427,140947],{},[39,141429,141430],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,141431,141432],{"__ignoreMap":44},[49,141433,141434,141436,141438,141440,141442,141444,141446,141448,141450,141452,141454,141456],{"class":51,"line":52},[49,141435,2300],{"class":66},[49,141437,174],{"class":147},[49,141439,56478],{"class":62},[49,141441,1448],{"class":66},[49,141443,135272],{"class":1505},[49,141445,56486],{"class":62},[49,141447,1448],{"class":66},[49,141449,135279],{"class":1505},[49,141451,135282],{"class":62},[49,141453,1448],{"class":66},[49,141455,135287],{"class":1505},[49,141457,52554],{"class":66},[19,141459,141036],{},[39,141461,141462],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,141463,141464],{"__ignoreMap":44},[49,141465,141466,141468,141470,141472,141474,141476,141478,141480,141482,141484,141486,141488],{"class":51,"line":52},[49,141467,2300],{"class":66},[49,141469,174],{"class":147},[49,141471,56478],{"class":62},[49,141473,1448],{"class":66},[49,141475,135272],{"class":1505},[49,141477,56486],{"class":62},[49,141479,1448],{"class":66},[49,141481,135279],{"class":1505},[49,141483,135282],{"class":62},[49,141485,1448],{"class":66},[49,141487,135287],{"class":1505},[49,141489,52554],{"class":66},[183,141491,141493],{"id":141492},"_1612-推荐模块制作","16.1.2 推荐模块制作",[174,141495],{"style":176,"src":141496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141498,141499,141500,141503],{},"大盒子 ",[46,141501,141502],{},"recom"," 推荐模块 recommend",[23,141505,141506],{},[26,141507,141508,141509,141511,141512,141515],{},"给这个 ",[46,141510,141502],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[46,141513,141514],{},"#ebebeb","），设置距离上边 12px",[19,141517,140947],{},[39,141519,141521],{"className":41,"code":141520,"language":43,"meta":44,"style":44},"div {\n  background-color: #f0f0f0;\n}\n",[46,141522,141523,141529,141540],{"__ignoreMap":44},[49,141524,141525,141527],{"class":51,"line":52},[49,141526,148],{"class":147},[49,141528,67],{"class":66},[49,141530,141531,141533,141535,141538],{"class":51,"line":59},[49,141532,72109],{"class":73},[49,141534,77],{"class":66},[49,141536,141537],{"class":73},"#f0f0f0",[49,141539,83],{"class":66},[49,141541,141542],{"class":51,"line":70},[49,141543,137],{"class":66},[19,141545,141036],{},[39,141547,141548],{"className":41,"code":141520,"language":43,"meta":44,"style":44},[46,141549,141550,141556,141566],{"__ignoreMap":44},[49,141551,141552,141554],{"class":51,"line":52},[49,141553,148],{"class":147},[49,141555,67],{"class":66},[49,141557,141558,141560,141562,141564],{"class":51,"line":59},[49,141559,72109],{"class":73},[49,141561,77],{"class":66},[49,141563,141537],{"class":73},[49,141565,83],{"class":66},[49,141567,141568],{"class":51,"line":70},[49,141569,137],{"class":66},[19,141571,141572],{},"里面包含 2 个盒子， 浮动即可",[19,141574,140947],{},[39,141576,141577],{"className":41,"code":140247,"language":43,"meta":44,"style":44},[46,141578,141579,141585,141595],{"__ignoreMap":44},[49,141580,141581,141583],{"class":51,"line":52},[49,141582,838],{"class":62},[49,141584,67],{"class":66},[49,141586,141587,141589,141591,141593],{"class":51,"line":59},[49,141588,1039],{"class":73},[49,141590,77],{"class":66},[49,141592,304],{"class":73},[49,141594,83],{"class":66},[49,141596,141597],{"class":51,"line":70},[49,141598,137],{"class":66},[19,141600,141601,141602],{},"1 号盒子 ",[46,141603,141604],{},"recom_hd",[23,141606,141607,141610],{},[26,141608,141609],{},"设置宽度205px，高度163px",[26,141611,141081,141612,141614],{},[46,141613,174],{},"标签，插入图片即可",[19,141616,140947],{},[39,141618,141619],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,141620,141621],{"__ignoreMap":44},[49,141622,141623,141625,141627,141629,141631,141633,141635,141637,141639,141641,141643,141645],{"class":51,"line":52},[49,141624,2300],{"class":66},[49,141626,174],{"class":147},[49,141628,56478],{"class":62},[49,141630,1448],{"class":66},[49,141632,135272],{"class":1505},[49,141634,56486],{"class":62},[49,141636,1448],{"class":66},[49,141638,135279],{"class":1505},[49,141640,135282],{"class":62},[49,141642,1448],{"class":66},[49,141644,135287],{"class":1505},[49,141646,52554],{"class":66},[19,141648,141036],{},[39,141650,141651],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,141652,141653],{"__ignoreMap":44},[49,141654,141655,141657,141659,141661,141663,141665,141667,141669,141671,141673,141675,141677],{"class":51,"line":52},[49,141656,2300],{"class":66},[49,141658,174],{"class":147},[49,141660,56478],{"class":62},[49,141662,1448],{"class":66},[49,141664,135272],{"class":1505},[49,141666,56486],{"class":62},[49,141668,1448],{"class":66},[49,141670,135279],{"class":1505},[49,141672,135282],{"class":62},[49,141674,1448],{"class":66},[49,141676,135287],{"class":1505},[49,141678,52554],{"class":66},[19,141680,141681,141682,141685],{},"2 号盒子 ",[46,141683,141684],{},"recom_bd"," ，注意里面的小竖线",[23,141687,141688,141699,141702,141707,141712],{},[26,141689,141690,141691,141693,141694,141696,141697],{},"右侧结构里面放 ",[46,141692,23],{}," 包含 4个 ",[46,141695,26],{},"，每个li里面包含一个",[46,141698,174],{},[26,141700,141701],{},"直接利用切片工具把里面的内容当成一张图片",[26,141703,140077,141704,141706],{},[46,141705,26],{}," 设置浮动",[26,141708,140077,141709,141711],{},[46,141710,174],{}," 设置宽高，宽度 248px，高度 163px",[26,141713,141714,141715,141275,141718,141720,141721,141723,141724],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[46,141716,141717],{},"top 10px",[46,141719,26],{},"设置相对定位（注意，最后一个",[46,141722,26],{},"不用设置伪元素），可以利用 ",[46,141725,141726],{},"nth-child(-n+3){...}",[19,141728,140947],{},[39,141730,141731],{"className":41,"code":139419,"language":43,"meta":44,"style":44},[46,141732,141733,141741,141751,141761],{"__ignoreMap":44},[49,141734,141735,141737,141739],{"class":51,"line":52},[49,141736,148],{"class":147},[49,141738,138578],{"class":62},[49,141740,67],{"class":66},[49,141742,141743,141745,141747,141749],{"class":51,"line":59},[49,141744,138585],{"class":73},[49,141746,77],{"class":66},[49,141748,8904],{"class":1505},[49,141750,83],{"class":66},[49,141752,141753,141755,141757,141759],{"class":51,"line":70},[49,141754,669],{"class":73},[49,141756,77],{"class":66},[49,141758,674],{"class":73},[49,141760,83],{"class":66},[49,141762,141763],{"class":51,"line":86},[49,141764,137],{"class":66},[19,141766,141036],{},[39,141768,141769],{"className":41,"code":139419,"language":43,"meta":44,"style":44},[46,141770,141771,141779,141789,141799],{"__ignoreMap":44},[49,141772,141773,141775,141777],{"class":51,"line":52},[49,141774,148],{"class":147},[49,141776,138578],{"class":62},[49,141778,67],{"class":66},[49,141780,141781,141783,141785,141787],{"class":51,"line":59},[49,141782,138585],{"class":73},[49,141784,77],{"class":66},[49,141786,8904],{"class":1505},[49,141788,83],{"class":66},[49,141790,141791,141793,141795,141797],{"class":51,"line":70},[49,141792,669],{"class":73},[49,141794,77],{"class":66},[49,141796,674],{"class":73},[49,141798,83],{"class":66},[49,141800,141801],{"class":51,"line":86},[49,141802,137],{"class":66},[183,141804,141806],{"id":141805},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[174,141808],{"style":176,"src":141809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,141811,141812],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,141814,141815],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,141817,141818,141821],{},[46,141819,141820],{},"box_hd"," 制作",[19,141823,141601,141824,141826],{},[46,141825,141820],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[174,141828],{"style":176,"src":141829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[23,141831,141832,141837,141842,141845],{},[26,141833,141834,141836],{},[46,141835,141820],{}," 给 30px 的高度，2个像素的下边框",[26,141838,141839,141840],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[46,141841,140088],{},[26,141843,141844],{},"左侧盒左浮动，右侧盒子右浮动",[26,141846,141847,141849,141850,141852],{},[46,141848,1630],{},"标签之间的距离用左右的",[46,141851,32131],{},"撑开即可",[19,141854,141855],{},"结构代码",[39,141857,141858],{"className":41,"code":140247,"language":43,"meta":44,"style":44},[46,141859,141860,141866,141876],{"__ignoreMap":44},[49,141861,141862,141864],{"class":51,"line":52},[49,141863,838],{"class":62},[49,141865,67],{"class":66},[49,141867,141868,141870,141872,141874],{"class":51,"line":59},[49,141869,1039],{"class":73},[49,141871,77],{"class":66},[49,141873,304],{"class":73},[49,141875,83],{"class":66},[49,141877,141878],{"class":51,"line":70},[49,141879,137],{"class":66},[19,141881,141882],{},"样式代码",[39,141884,141885],{"className":41,"code":140247,"language":43,"meta":44,"style":44},[46,141886,141887,141893,141903],{"__ignoreMap":44},[49,141888,141889,141891],{"class":51,"line":52},[49,141890,838],{"class":62},[49,141892,67],{"class":66},[49,141894,141895,141897,141899,141901],{"class":51,"line":59},[49,141896,1039],{"class":73},[49,141898,77],{"class":66},[49,141900,304],{"class":73},[49,141902,83],{"class":66},[49,141904,141905],{"class":51,"line":70},[49,141906,137],{"class":66},[19,141908,141909,141821],{},[46,141910,141911],{},"box_bd",[19,141913,141914],{},"2 号盒子 box_bd，不要给高度",[174,141916],{"style":176,"src":141917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141919,141920],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141922,141923],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141925,141926],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[23,141928,141929,141941,141957],{},[26,141930,141931,141933,141934,141937,141938,141940],{},[46,141932,141911],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[46,141935,141936],{},"tab_content","，在",[46,141939,141936],{}," 里面包裹tab选项卡对应的内容",[26,141942,141943,141944,141947,141948,141950,141951,141953,141954,141956],{},"内容被一个大盒子包裹（",[46,141945,141946],{},"tab_list_item","），里面是 ",[46,141949,23],{}," 包裹 5个 ",[46,141952,26],{},"，每个",[46,141955,26],{},"设置对应的宽度，然后设置浮动",[26,141958,141959,141960,141962,141963,141965,141966],{},"而这5个",[46,141961,26],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[46,141964,26],{},"设置",[23,141967,141968,141986,141989],{},[26,141969,141970,141971,141973,141974,141976,141977,141979,141980,141982,141983,141985],{},"第一个小 ",[46,141972,26],{}," 分为上下结构，上面是 ",[46,141975,23],{}," 包裹 ",[46,141978,26],{}," ，",[46,141981,26],{},"里面包裹 ",[46,141984,1630],{},"，下面插入一张图片",[26,141987,141988],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[26,141990,141991,141992,141994,141995,141997,141998,142000],{},"后面的小 ",[46,141993,26],{}," 里面先放一个",[46,141996,1630],{},"标签，然后在",[46,141999,1630],{},"标签里面插入图片即可",[19,142002,141855],{},[39,142004,142005],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,142006,142007],{"__ignoreMap":44},[49,142008,142009,142011,142013,142015,142017,142019,142021,142023,142025,142027,142029,142031],{"class":51,"line":52},[49,142010,2300],{"class":66},[49,142012,174],{"class":147},[49,142014,56478],{"class":62},[49,142016,1448],{"class":66},[49,142018,135272],{"class":1505},[49,142020,56486],{"class":62},[49,142022,1448],{"class":66},[49,142024,135279],{"class":1505},[49,142026,135282],{"class":62},[49,142028,1448],{"class":66},[49,142030,135287],{"class":1505},[49,142032,52554],{"class":66},[19,142034,141882],{},[39,142036,142037],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,142038,142039],{"__ignoreMap":44},[49,142040,142041,142043,142045,142047,142049,142051,142053,142055,142057,142059,142061,142063],{"class":51,"line":52},[49,142042,2300],{"class":66},[49,142044,174],{"class":147},[49,142046,56478],{"class":62},[49,142048,1448],{"class":66},[49,142050,135272],{"class":1505},[49,142052,56486],{"class":62},[49,142054,1448],{"class":66},[49,142056,135279],{"class":1505},[49,142058,135282],{"class":62},[49,142060,1448],{"class":66},[49,142062,135287],{"class":1505},[49,142064,52554],{"class":66},[19,142066,142067],{},"tab栏切换需求！！！！！！介绍：",[174,142069],{"style":176,"src":142070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[23,142072,142073,142081,142087,142090],{},[26,142074,142075,142078,142079],{},[46,142076,142077],{},"tab","栏的布局是 ",[46,142080,140088],{},[26,142082,142083,142084,142086],{},"有多少个",[46,142085,142077],{},"选项卡，那么对应就有多少个内容",[26,142088,142089],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[26,142091,142092,142093,142096,142097,142099,142100,142102],{},"等后面我们学习了",[46,142094,142095],{},"js","之后，我们就会配合",[46,142098,142095],{},"来实现，",[46,142101,142077],{},"栏的切换",[14,142104,142106],{"id":142105},"_162-列表制作","16.2 列表制作",[183,142108,142110],{"id":142109},"_1621-准备工作","16.2.1 准备工作",[23,142112,142113,142116,142119,142122],{},[26,142114,142115],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[26,142117,142118],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[26,142120,142121],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[26,142123,142124],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[183,142126,142128,142129,102242,142131,142133],{"id":142127},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[46,142130,132763],{},[46,142132,54955],{}," 修改",[174,142135],{"style":176,"src":142136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[23,142138,142139],{},[26,142140,142141],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142143,140947],{},[39,142145,142146],{"className":41,"code":133190,"language":43,"meta":44,"style":44},[46,142147,142148,142152,142166,142170,142184,142188,142202,142206,142220,142224],{"__ignoreMap":44},[49,142149,142150],{"class":51,"line":52},[49,142151,133197],{"class":55},[49,142153,142154,142156,142158,142160,142162,142164],{"class":51,"line":59},[49,142155,133202],{"class":62},[49,142157,203],{"class":66},[49,142159,130131],{"class":73},[49,142161,77],{"class":66},[49,142163,133211],{"class":73},[49,142165,130701],{"class":66},[49,142167,142168],{"class":51,"line":70},[49,142169,133218],{"class":55},[49,142171,142172,142174,142176,142178,142180,142182],{"class":51,"line":86},[49,142173,133223],{"class":62},[49,142175,203],{"class":66},[49,142177,130131],{"class":73},[49,142179,77],{"class":66},[49,142181,850],{"class":73},[49,142183,130701],{"class":66},[49,142185,142186],{"class":51,"line":98},[49,142187,133238],{"class":55},[49,142189,142190,142192,142194,142196,142198,142200],{"class":51,"line":121},[49,142191,133243],{"class":62},[49,142193,203],{"class":66},[49,142195,130131],{"class":73},[49,142197,77],{"class":66},[49,142199,56070],{"class":73},[49,142201,130701],{"class":66},[49,142203,142204],{"class":51,"line":134},[49,142205,133258],{"class":55},[49,142207,142208,142210,142212,142214,142216,142218],{"class":51,"line":1085},[49,142209,133263],{"class":62},[49,142211,203],{"class":66},[49,142213,130131],{"class":73},[49,142215,77],{"class":66},[49,142217,87458],{"class":73},[49,142219,130701],{"class":66},[49,142221,142222],{"class":51,"line":2574},[49,142223,133278],{"class":55},[49,142225,142226,142228,142230,142232,142234,142236],{"class":51,"line":2586},[49,142227,133283],{"class":62},[49,142229,203],{"class":66},[49,142231,130131],{"class":73},[49,142233,77],{"class":66},[49,142235,133292],{"class":73},[49,142237,130701],{"class":66},[19,142239,141036],{},[39,142241,142242],{"className":41,"code":133190,"language":43,"meta":44,"style":44},[46,142243,142244,142248,142262,142266,142280,142284,142298,142302,142316,142320],{"__ignoreMap":44},[49,142245,142246],{"class":51,"line":52},[49,142247,133197],{"class":55},[49,142249,142250,142252,142254,142256,142258,142260],{"class":51,"line":59},[49,142251,133202],{"class":62},[49,142253,203],{"class":66},[49,142255,130131],{"class":73},[49,142257,77],{"class":66},[49,142259,133211],{"class":73},[49,142261,130701],{"class":66},[49,142263,142264],{"class":51,"line":70},[49,142265,133218],{"class":55},[49,142267,142268,142270,142272,142274,142276,142278],{"class":51,"line":86},[49,142269,133223],{"class":62},[49,142271,203],{"class":66},[49,142273,130131],{"class":73},[49,142275,77],{"class":66},[49,142277,850],{"class":73},[49,142279,130701],{"class":66},[49,142281,142282],{"class":51,"line":98},[49,142283,133238],{"class":55},[49,142285,142286,142288,142290,142292,142294,142296],{"class":51,"line":121},[49,142287,133243],{"class":62},[49,142289,203],{"class":66},[49,142291,130131],{"class":73},[49,142293,77],{"class":66},[49,142295,56070],{"class":73},[49,142297,130701],{"class":66},[49,142299,142300],{"class":51,"line":134},[49,142301,133258],{"class":55},[49,142303,142304,142306,142308,142310,142312,142314],{"class":51,"line":1085},[49,142305,133263],{"class":62},[49,142307,203],{"class":66},[49,142309,130131],{"class":73},[49,142311,77],{"class":66},[49,142313,87458],{"class":73},[49,142315,130701],{"class":66},[49,142317,142318],{"class":51,"line":2574},[49,142319,133278],{"class":55},[49,142321,142322,142324,142326,142328,142330,142332],{"class":51,"line":2586},[49,142323,133283],{"class":62},[49,142325,203],{"class":66},[49,142327,130131],{"class":73},[49,142329,77],{"class":66},[49,142331,133292],{"class":73},[49,142333,130701],{"class":66},[23,142335,142336,142347],{},[26,142337,142338,142339,142342,142343,102242,142345],{},"1 号盒子左侧浮动 ",[46,142340,142341],{},"sk_list"," 里面包含 ",[46,142344,23],{},[46,142346,26],{},[26,142348,142349,142350,142342,142353,102242,142355],{},"2 号盒子左侧浮动 ",[46,142351,142352],{},"sk_con",[46,142354,23],{},[46,142356,26],{},[19,142358,140947],{},[39,142360,142361],{"className":41,"code":140247,"language":43,"meta":44,"style":44},[46,142362,142363,142369,142379],{"__ignoreMap":44},[49,142364,142365,142367],{"class":51,"line":52},[49,142366,838],{"class":62},[49,142368,67],{"class":66},[49,142370,142371,142373,142375,142377],{"class":51,"line":59},[49,142372,1039],{"class":73},[49,142374,77],{"class":66},[49,142376,304],{"class":73},[49,142378,83],{"class":66},[49,142380,142381],{"class":51,"line":70},[49,142382,137],{"class":66},[19,142384,141036],{},[39,142386,142387],{"className":41,"code":140247,"language":43,"meta":44,"style":44},[46,142388,142389,142395,142405],{"__ignoreMap":44},[49,142390,142391,142393],{"class":51,"line":52},[49,142392,838],{"class":62},[49,142394,67],{"class":66},[49,142396,142397,142399,142401,142403],{"class":51,"line":59},[49,142398,1039],{"class":73},[49,142400,77],{"class":66},[49,142402,304],{"class":73},[49,142404,83],{"class":66},[49,142406,142407],{"class":51,"line":70},[49,142408,137],{"class":66},[183,142410,142412,142413],{"id":142411},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[46,142414,142415],{},"sk_container",[174,142417],{"style":176,"src":142418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[23,142420,142421,142426],{},[26,142422,141601,142423,142425],{},[46,142424,142415],{}," 给宽度 1200，不要给高度",[26,142427,142428],{},"一定不要忘记清除浮动",[19,142430,140947],{},[39,142432,142433],{"className":41,"code":140247,"language":43,"meta":44,"style":44},[46,142434,142435,142441,142451],{"__ignoreMap":44},[49,142436,142437,142439],{"class":51,"line":52},[49,142438,838],{"class":62},[49,142440,67],{"class":66},[49,142442,142443,142445,142447,142449],{"class":51,"line":59},[49,142444,1039],{"class":73},[49,142446,77],{"class":66},[49,142448,304],{"class":73},[49,142450,83],{"class":66},[49,142452,142453],{"class":51,"line":70},[49,142454,137],{"class":66},[591,142456,142457],{},[26,142458,142459],{},"sk_hd制作",[23,142461,142462],{},[26,142463,141681,142464,142467],{},[46,142465,142466],{},"sk_hd"," ，插入图片即可",[19,142469,140947],{},[39,142471,142472],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,142473,142474],{"__ignoreMap":44},[49,142475,142476,142478,142480,142482,142484,142486,142488,142490,142492,142494,142496,142498],{"class":51,"line":52},[49,142477,2300],{"class":66},[49,142479,174],{"class":147},[49,142481,56478],{"class":62},[49,142483,1448],{"class":66},[49,142485,135272],{"class":1505},[49,142487,56486],{"class":62},[49,142489,1448],{"class":66},[49,142491,135279],{"class":1505},[49,142493,135282],{"class":62},[49,142495,1448],{"class":66},[49,142497,135287],{"class":1505},[49,142499,52554],{"class":66},[591,142501,142502],{"start":59},[26,142503,142504],{},"sk_bd制作",[23,142506,142507],{},[26,142508,142509,142510,142513,142514,102242,142516,142518],{},"3 号盒子 ",[46,142511,142512],{},"sk_bd"," ，里面包含很多的 ",[46,142515,23],{},[46,142517,26],{},[23,142519,142520,142529],{},[26,142521,142522,142523,142525,142526,142528],{},"当鼠标移入到 ",[46,142524,26],{}," 上面的时候显示红色的边框，在这里先给 ",[46,142527,26],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[26,142530,142531,142532,142534,142535,142537,142538,142541,142542,142544],{},"由于给每个 ",[46,142533,26],{}," 都设置了外边距，导致一行的最后一个 ",[46,142536,26],{}," 掉了下来，在这里我们利用 ",[46,142539,142540],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[46,142543,26],{},"，去掉外边距就好了",[19,142546,140947],{},[39,142548,142549],{"className":41,"code":139766,"language":43,"meta":44,"style":44},[46,142550,142551,142557,142569],{"__ignoreMap":44},[49,142552,142553,142555],{"class":51,"line":52},[49,142554,148],{"class":147},[49,142556,67],{"class":66},[49,142558,142559,142561,142563,142565,142567],{"class":51,"line":59},[49,142560,1070],{"class":73},[49,142562,77],{"class":66},[49,142564,80],{"class":73},[49,142566,1077],{"class":73},[49,142568,83],{"class":66},[49,142570,142571],{"class":51,"line":70},[49,142572,137],{"class":66},[19,142574,141036],{},[39,142576,142577],{"className":41,"code":139766,"language":43,"meta":44,"style":44},[46,142578,142579,142585,142597],{"__ignoreMap":44},[49,142580,142581,142583],{"class":51,"line":52},[49,142582,148],{"class":147},[49,142584,67],{"class":66},[49,142586,142587,142589,142591,142593,142595],{"class":51,"line":59},[49,142588,1070],{"class":73},[49,142590,77],{"class":66},[49,142592,80],{"class":73},[49,142594,1077],{"class":73},[49,142596,83],{"class":66},[49,142598,142599],{"class":51,"line":70},[49,142600,137],{"class":66},[14,142602,142604],{"id":142603},"_163-注册页面制作","16.3 注册页面制作",[174,142606],{"style":176,"src":142607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142609,142610,142612],{},[485,142611,10277],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[174,142614],{"style":176,"src":142615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[183,142617,142619],{"id":142618},"_1631-准备工作","16.3.1 准备工作",[23,142621,142622,142625],{},[26,142623,142624],{},"创建register.html，引入 base.css，引入favicon图标",[26,142626,142627],{},"创建register.css ，在html页面进行引入",[183,142629,142631,142632,142634],{"id":142630},"_1632-header-头部实现","16.3.2 ",[46,142633,132763],{}," 头部实现",[23,142636,142637,142640],{},[26,142638,142639],{},"整个内容用 版心 进行包裹",[26,142641,142642],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142644,140947],{},[39,142646,142647],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,142648,142649],{"__ignoreMap":44},[49,142650,142651,142653,142655,142657,142659,142661,142663,142665,142667,142669,142671,142673],{"class":51,"line":52},[49,142652,2300],{"class":66},[49,142654,174],{"class":147},[49,142656,56478],{"class":62},[49,142658,1448],{"class":66},[49,142660,135272],{"class":1505},[49,142662,56486],{"class":62},[49,142664,1448],{"class":66},[49,142666,135279],{"class":1505},[49,142668,135282],{"class":62},[49,142670,1448],{"class":66},[49,142672,135287],{"class":1505},[49,142674,52554],{"class":66},[19,142676,141036],{},[39,142678,142679],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,142680,142681],{"__ignoreMap":44},[49,142682,142683,142685,142687,142689,142691,142693,142695,142697,142699,142701,142703,142705],{"class":51,"line":52},[49,142684,2300],{"class":66},[49,142686,174],{"class":147},[49,142688,56478],{"class":62},[49,142690,1448],{"class":66},[49,142692,135272],{"class":1505},[49,142694,56486],{"class":62},[49,142696,1448],{"class":66},[49,142698,135279],{"class":1505},[49,142700,135282],{"class":62},[49,142702,1448],{"class":66},[49,142704,135287],{"class":1505},[49,142706,52554],{"class":66},[183,142708,142710,142711,142714],{"id":142709},"_1633-registerarea-主体模块实现","16.3.3 ",[46,142712,142713],{},"registerarea"," 主体模块实现",[174,142716],{"style":176,"src":142717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142719,142720],{},"整个大盒子 高度为 522px，设置4个边框",[19,142722,140947],{},[39,142724,142725],{"className":41,"code":140,"language":43,"meta":44,"style":44},[46,142726,142727,142733,142749],{"__ignoreMap":44},[49,142728,142729,142731],{"class":51,"line":52},[49,142730,148],{"class":147},[49,142732,67],{"class":66},[49,142734,142735,142737,142739,142741,142743,142745,142747],{"class":51,"line":59},[49,142736,101],{"class":73},[49,142738,77],{"class":66},[49,142740,159],{"class":73},[49,142742,110],{"class":109},[49,142744,113],{"class":73},[49,142746,166],{"class":73},[49,142748,83],{"class":66},[49,142750,142751],{"class":51,"line":70},[49,142752,137],{"class":66},[19,142754,141036],{},[39,142756,142757],{"className":41,"code":140,"language":43,"meta":44,"style":44},[46,142758,142759,142765,142781],{"__ignoreMap":44},[49,142760,142761,142763],{"class":51,"line":52},[49,142762,148],{"class":147},[49,142764,67],{"class":66},[49,142766,142767,142769,142771,142773,142775,142777,142779],{"class":51,"line":59},[49,142768,101],{"class":73},[49,142770,77],{"class":66},[49,142772,159],{"class":73},[49,142774,110],{"class":109},[49,142776,113],{"class":73},[49,142778,166],{"class":73},[49,142780,83],{"class":66},[49,142782,142783],{"class":51,"line":70},[49,142784,137],{"class":66},[19,142786,142787],{},"1号盒子 是一个 h3 标签，放标题",[23,142789,142790],{},[26,142791,142792],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,142794,140947],{},[39,142796,142797],{"className":41,"code":140247,"language":43,"meta":44,"style":44},[46,142798,142799,142805,142815],{"__ignoreMap":44},[49,142800,142801,142803],{"class":51,"line":52},[49,142802,838],{"class":62},[49,142804,67],{"class":66},[49,142806,142807,142809,142811,142813],{"class":51,"line":59},[49,142808,1039],{"class":73},[49,142810,77],{"class":66},[49,142812,304],{"class":73},[49,142814,83],{"class":66},[49,142816,142817],{"class":51,"line":70},[49,142818,137],{"class":66},[19,142820,141036],{},[39,142822,142823],{"className":41,"code":140247,"language":43,"meta":44,"style":44},[46,142824,142825,142831,142841],{"__ignoreMap":44},[49,142826,142827,142829],{"class":51,"line":52},[49,142828,838],{"class":62},[49,142830,67],{"class":66},[49,142832,142833,142835,142837,142839],{"class":51,"line":59},[49,142834,1039],{"class":73},[49,142836,77],{"class":66},[49,142838,304],{"class":73},[49,142840,83],{"class":66},[49,142842,142843],{"class":51,"line":70},[49,142844,137],{"class":66},[19,142846,142847],{},"2号盒子 里面放注册的内容",[23,142849,142850,142853,142862,142876,142889,142892,142895,142913,142927],{},[26,142851,142852],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[26,142854,142855,142856,142858,142859,142861],{},"里面的内容利用 ",[46,142857,23],{}," 包含 ",[46,142860,26],{}," 来实现的（不需要用表格）",[26,142863,140091,142864,142866,142867,142869,142870,142872,142873,142875],{},[46,142865,26],{}," 里面，左侧放 ",[46,142868,34856],{}," 标签， 中间放",[46,142871,448],{}," 标签， 右侧放 ",[46,142874,49],{}," 提示信息",[26,142877,142878,142879,142881,142882,142884,142885,142888],{},"左侧 ",[46,142880,34856],{},"里面的文字都是右对齐，我们可以给",[46,142883,34856],{},"设置一个宽度（88px），然后利用",[46,142886,142887],{},"text-align"," 来设置右对齐",[26,142890,142891],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[26,142893,142894],{},"右侧 span修饰一下文字颜色",[26,142896,142897,142898],{},"提示信息的样式优化",[23,142899,142900,142903,142906],{},[26,142901,142902],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[26,142904,142905],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[26,142907,142908,142909,142912],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[46,142910,142911],{},"vertical-algin"," 来设置 图片与文字对齐方式",[26,142914,142915,142916],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[23,142917,142918,142924],{},[26,142919,142920,142921,142923],{},"设置 ",[46,142922,24802],{}," 的 左右 12px 的内边距，设置一下文字颜色",[26,142925,142926],{},"分别设置 背景颜色",[26,142928,142929,142930,142932],{},"同意协议 和 完成注册 都是用 ",[46,142931,26],{}," 进行包裹",[19,142934,140947],{},[39,142936,142937],{"className":41,"code":141520,"language":43,"meta":44,"style":44},[46,142938,142939,142945,142955],{"__ignoreMap":44},[49,142940,142941,142943],{"class":51,"line":52},[49,142942,148],{"class":147},[49,142944,67],{"class":66},[49,142946,142947,142949,142951,142953],{"class":51,"line":59},[49,142948,72109],{"class":73},[49,142950,77],{"class":66},[49,142952,141537],{"class":73},[49,142954,83],{"class":66},[49,142956,142957],{"class":51,"line":70},[49,142958,137],{"class":66},[19,142960,141036],{},[39,142962,142963],{"className":41,"code":141520,"language":43,"meta":44,"style":44},[46,142964,142965,142971,142981],{"__ignoreMap":44},[49,142966,142967,142969],{"class":51,"line":52},[49,142968,148],{"class":147},[49,142970,67],{"class":66},[49,142972,142973,142975,142977,142979],{"class":51,"line":59},[49,142974,72109],{"class":73},[49,142976,77],{"class":66},[49,142978,141537],{"class":73},[49,142980,83],{"class":66},[49,142982,142983],{"class":51,"line":70},[49,142984,137],{"class":66},[183,142986,142988],{"id":142987},"_1634-底部实现","16.3.4 底部实现",[19,142990,140947],{},[39,142992,142993],{"className":41,"code":141520,"language":43,"meta":44,"style":44},[46,142994,142995,143001,143011],{"__ignoreMap":44},[49,142996,142997,142999],{"class":51,"line":52},[49,142998,148],{"class":147},[49,143000,67],{"class":66},[49,143002,143003,143005,143007,143009],{"class":51,"line":59},[49,143004,72109],{"class":73},[49,143006,77],{"class":66},[49,143008,141537],{"class":73},[49,143010,83],{"class":66},[49,143012,143013],{"class":51,"line":70},[49,143014,137],{"class":66},[19,143016,141036],{},[39,143018,143019],{"className":128519,"code":131867,"language":128521,"meta":44,"style":44},[46,143020,143021,143025,143039,143043],{"__ignoreMap":44},[49,143022,143023],{"class":51,"line":52},[49,143024,131874],{"class":55},[49,143026,143027,143029,143031,143033,143035,143037],{"class":51,"line":59},[49,143028,2300],{"class":66},[49,143030,148],{"class":147},[49,143032,54728],{"class":62},[49,143034,1448],{"class":66},[49,143036,131887],{"class":1505},[49,143038,52554],{"class":66},[49,143040,143041],{"class":51,"line":70},[49,143042,131894],{"class":66},[49,143044,143045,143047,143049],{"class":51,"line":86},[49,143046,53027],{"class":66},[49,143048,148],{"class":147},[49,143050,52554],{"class":66},[14,143052,143054],{"id":143053},"_164-项目总结","16.4 项目总结",[591,143056,143057,143060,143063,143066],{},[26,143058,143059],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[26,143061,143062],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[26,143064,143065],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[26,143067,143068],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[174,143070],{"style":176,"src":143071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[591,143073,143074],{"start":98},[26,143075,143076],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[174,143078],{"style":176,"src":143079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[591,143081,143082],{"start":121},[26,143083,143084],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[174,143086],{"style":176,"src":143087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[39,143089,143090],{"className":128519,"code":137734,"language":128521,"meta":44,"style":44},[46,143091,143092],{"__ignoreMap":44},[49,143093,143094,143096,143098,143100,143102,143104,143106,143108,143110,143112,143114,143116],{"class":51,"line":52},[49,143095,2300],{"class":66},[49,143097,448],{"class":147},[49,143099,55065],{"class":62},[49,143101,1448],{"class":66},[49,143103,63935],{"class":1505},[49,143105,16171],{"class":62},[49,143107,1448],{"class":66},[49,143109,137755],{"class":1505},[49,143111,62258],{"class":62},[49,143113,1448],{"class":66},[49,143115,137762],{"class":1505},[49,143117,52554],{"class":66},[591,143119,143120,143123],{"start":134},[26,143121,143122],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[26,143124,143125],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1305,143127,143128],{},"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":44,"searchDepth":59,"depth":59,"links":143130},[143131,143136,143143,143151],{"id":140757,"depth":59,"text":140758,"children":143132},[143133,143134,143135],{"id":140761,"depth":70,"text":140762},{"id":141492,"depth":70,"text":141493},{"id":141805,"depth":70,"text":141806},{"id":142105,"depth":59,"text":142106,"children":143137},[143138,143139,143141],{"id":142109,"depth":70,"text":142110},{"id":142127,"depth":70,"text":143140},"16.2.2 列表页 header 和 nav 修改",{"id":142411,"depth":70,"text":143142},"16.2.3 列表页主体 sk_container",{"id":142603,"depth":59,"text":142604,"children":143144},[143145,143146,143148,143150],{"id":142618,"depth":70,"text":142619},{"id":142630,"depth":70,"text":143147},"16.3.2 header 头部实现",{"id":142709,"depth":70,"text":143149},"16.3.3 registerarea 主体模块实现",{"id":142987,"depth":70,"text":142988},{"id":143053,"depth":59,"text":143054},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140749,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143158,"title":143159,"body":143160,"description":1327,"extension":1328,"meta":143268,"navigation":1330,"path":143269,"seo":143270,"stem":143271,"__hash__":143272},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143161,"toc":143263},[143162,143165,143169,143172,143175,143184,143193,143197,143202,143209,143227,143230,143233,143236,143239,143242,143245,143248,143251,143254,143257,143260],[10,143163,143159],{"id":143164},"_17-web服务器与网站发布",[14,143166,143168],{"id":143167},"_171-web服务器","17.1 Web服务器",[19,143170,143171],{},"把自己网站上传到服务器上，可以让其他人访问",[174,143173],{"style":176,"src":143174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143176,143177,143180,143181],{},[485,143178,143179],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[485,143182,143183],{},"Web 服务器等",[19,143185,143186,143187,102242,143190,26989],{},"根据服务器在网络中所在的位置不同，又可分为 ",[485,143188,143189],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[485,143191,143192],{},"远程服务器",[183,143194,143196],{"id":143195},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143198,143199],{},[485,143200,143201],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143203,143204,143205],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[1630,143206,143207],{"href":143207,"rel":143208},"http:\u002F\u002Ffree.3v.do\u002F",[25113],[23,143210,143211,143214,143217,143224],{},[26,143212,143213],{},"去免费空间网站注册账号。",[26,143215,143216],{},"记录下主机名、用户名、密码、域名。",[26,143218,143219,143220,143223],{},"利用 ",[46,143221,143222],{},"utftp"," 软件 上传网站到远程服务器",[26,143225,143226],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143228,143229],{},"使用软件上传，对上传软件文件进行解压",[174,143231],{"style":176,"src":143232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[174,143234],{"style":176,"src":143235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143237,143238],{},"输入刚刚申请的服务器账号信息：",[174,143240],{"style":176,"src":143241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[174,143243],{"style":176,"src":143244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[174,143246],{"style":176,"src":143247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[174,143249],{"style":176,"src":143250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143252,143253],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[174,143255],{"style":176,"src":143256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143258,143259],{},"浏览器输入域名即可访问",[19,143261,143262],{},"首页一定必须是index",{"title":44,"searchDepth":59,"depth":59,"links":143264},[143265],{"id":143167,"depth":59,"text":143168,"children":143266},[143267],{"id":143195,"depth":70,"text":143196},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143159,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143274,"title":143275,"body":143276,"description":1327,"extension":1328,"meta":144203,"navigation":1330,"path":144204,"seo":144205,"stem":144206,"__hash__":144207},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143277,"toc":144186},[143278,143281,143285,143288,143291,143302,143305,143309,143313,143318,143321,143324,143327,143330,143334,143360,143364,143368,143371,143374,143378,143411,143415,143418,143421,143485,143489,143493,143496,143499,143502,143506,143551,143555,143558,143588,143592,143596,143599,143602,143606,143609,143678,143681,143789,143791,143797,143801,143804,143807,143903,143906,143910,143934,143938,143941,143945,143948,143952,143955,143958,143961,143964,143968,143971,143974,143978,143982,143985,143988,143991,143994,143998,144001,144005,144008,144011,144056,144060,144064,144067,144070,144073,144105,144109,144112,144146,144150,144153,144183],[10,143279,143275],{"id":143280},"_18-2d动画与3d转换",[14,143282,143284],{"id":143283},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143286,143287],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143289,143290],{},"转换（transform）你可以简单理解为变形",[23,143292,143293,143296,143299],{},[26,143294,143295],{},"移动：translate",[26,143297,143298],{},"旋转：rotate",[26,143300,143301],{},"缩放：scale",[174,143303],{"style":176,"src":143304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[183,143306,143308],{"id":143307},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[525,143310,143312],{"id":143311},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143314,143315,143316],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[485,143317,134414],{},[174,143319],{"style":176,"src":143320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143322,143323],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143325,143326],{},"对于行内元素无效",[19,143328,143329],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[525,143331,143333],{"id":143332},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[39,143335,143336],{"className":41,"code":139766,"language":43,"meta":44,"style":44},[46,143337,143338,143344,143356],{"__ignoreMap":44},[49,143339,143340,143342],{"class":51,"line":52},[49,143341,148],{"class":147},[49,143343,67],{"class":66},[49,143345,143346,143348,143350,143352,143354],{"class":51,"line":59},[49,143347,1070],{"class":73},[49,143349,77],{"class":66},[49,143351,80],{"class":73},[49,143353,1077],{"class":73},[49,143355,83],{"class":66},[49,143357,143358],{"class":51,"line":70},[49,143359,137],{"class":66},[183,143361,143363],{"id":143362},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[525,143365,143367],{"id":143366},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143369,143370],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[174,143372],{"style":176,"src":143373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[525,143375,143377],{"id":143376},"_18122-旋转效果","18.1.2.2 旋转效果",[39,143379,143381],{"className":41,"code":143380,"language":43,"meta":44,"style":44},"div {\n  transform: rotate(45deg);\n}\n",[46,143382,143383,143389,143407],{"__ignoreMap":44},[49,143384,143385,143387],{"class":51,"line":52},[49,143386,148],{"class":147},[49,143388,67],{"class":66},[49,143390,143391,143393,143395,143398,143400,143402,143405],{"class":51,"line":59},[49,143392,137561],{"class":73},[49,143394,77],{"class":66},[49,143396,143397],{"class":73},"rotate",[49,143399,1403],{"class":66},[49,143401,1920],{"class":73},[49,143403,143404],{"class":109},"deg",[49,143406,3973],{"class":66},[49,143408,143409],{"class":51,"line":70},[49,143410,137],{"class":66},[525,143412,143414],{"id":143413},"_18123-三角做法","18.1.2.3 三角做法",[19,143416,143417],{},"该下标当经过最外层大盒子时会实现向上反转",[174,143419],{"style":176,"src":143420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[39,143422,143423],{"className":41,"code":42,"language":43,"meta":44,"style":44},[46,143424,143425,143429,143435,143445,143455,143471,143481],{"__ignoreMap":44},[49,143426,143427],{"class":51,"line":52},[49,143428,56],{"class":55},[49,143430,143431,143433],{"class":51,"line":59},[49,143432,63],{"class":62},[49,143434,67],{"class":66},[49,143436,143437,143439,143441,143443],{"class":51,"line":70},[49,143438,74],{"class":73},[49,143440,77],{"class":66},[49,143442,80],{"class":73},[49,143444,83],{"class":66},[49,143446,143447,143449,143451,143453],{"class":51,"line":86},[49,143448,89],{"class":73},[49,143450,77],{"class":66},[49,143452,80],{"class":73},[49,143454,83],{"class":66},[49,143456,143457,143459,143461,143463,143465,143467,143469],{"class":51,"line":98},[49,143458,101],{"class":73},[49,143460,77],{"class":66},[49,143462,106],{"class":73},[49,143464,110],{"class":109},[49,143466,113],{"class":73},[49,143468,116],{"class":73},[49,143470,83],{"class":66},[49,143472,143473,143475,143477,143479],{"class":51,"line":121},[49,143474,124],{"class":73},[49,143476,77],{"class":66},[49,143478,129],{"class":73},[49,143480,83],{"class":66},[49,143482,143483],{"class":51,"line":134},[49,143484,137],{"class":66},[183,143486,143488],{"id":143487},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[525,143490,143492],{"id":143491},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143494,143495],{},"设置中心点",[174,143497],{"style":176,"src":143498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143500,143501],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[525,143503,143505],{"id":143504},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[39,143507,143509],{"className":41,"code":143508,"language":43,"meta":44,"style":44},"\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",[46,143510,143511,143516,143522,143537,143542,143547],{"__ignoreMap":44},[49,143512,143513],{"class":51,"line":52},[49,143514,143515],{"class":55},"\u002F* 转换中心点 *\u002F\n",[49,143517,143518,143520],{"class":51,"line":59},[49,143519,148],{"class":147},[49,143521,67],{"class":66},[49,143523,143524,143527,143529,143531,143533,143535],{"class":51,"line":70},[49,143525,143526],{"class":73},"  transform-origin",[49,143528,77],{"class":66},[49,143530,52835],{"class":73},[49,143532,18394],{"class":73},[49,143534,463],{"class":66},[49,143536,235],{"class":55},[49,143538,143539],{"class":51,"line":86},[49,143540,143541],{"class":55},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[49,143543,143544],{"class":51,"line":98},[49,143545,143546],{"class":55},"  \u002F* transform-origin: left top; *\u002F\n",[49,143548,143549],{"class":51,"line":121},[49,143550,137],{"class":66},[525,143552,143554],{"id":143553},"_18133-旋转案例","18.1.3.3 旋转案例",[174,143556],{"style":176,"src":143557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[39,143559,143560],{"className":41,"code":143380,"language":43,"meta":44,"style":44},[46,143561,143562,143568,143584],{"__ignoreMap":44},[49,143563,143564,143566],{"class":51,"line":52},[49,143565,148],{"class":147},[49,143567,67],{"class":66},[49,143569,143570,143572,143574,143576,143578,143580,143582],{"class":51,"line":59},[49,143571,137561],{"class":73},[49,143573,77],{"class":66},[49,143575,143397],{"class":73},[49,143577,1403],{"class":66},[49,143579,1920],{"class":73},[49,143581,143404],{"class":109},[49,143583,3973],{"class":66},[49,143585,143586],{"class":51,"line":70},[49,143587,137],{"class":66},[183,143589,143591],{"id":143590},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[525,143593,143595],{"id":143594},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143597,143598],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[174,143600],{"style":176,"src":143601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[525,143603,143605],{"id":143604},"_18142-分页按钮","18.1.4.2 分页按钮",[174,143607],{"style":176,"src":143608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[39,143610,143612],{"className":41,"code":143611,"language":43,"meta":44,"style":44},"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",[46,143613,143614,143620,143636,143640,143644,143649,143655,143669,143674],{"__ignoreMap":44},[49,143615,143616,143618],{"class":51,"line":52},[49,143617,148],{"class":147},[49,143619,67],{"class":66},[49,143621,143622,143624,143626,143629,143631,143634],{"class":51,"line":59},[49,143623,137561],{"class":73},[49,143625,77],{"class":66},[49,143627,143628],{"class":73},"scale",[49,143630,1403],{"class":66},[49,143632,143633],{"class":73},"1.2",[49,143635,3973],{"class":66},[49,143637,143638],{"class":51,"line":70},[49,143639,137],{"class":66},[49,143641,143642],{"class":51,"line":86},[49,143643,1054],{"class":66},[49,143645,143646],{"class":51,"line":98},[49,143647,143648],{"class":55},"\u002F* 2D 缩放 *\u002F\n",[49,143650,143651,143653],{"class":51,"line":121},[49,143652,148],{"class":147},[49,143654,67],{"class":66},[49,143656,143657,143659,143661,143663,143665,143667],{"class":51,"line":134},[49,143658,137561],{"class":73},[49,143660,77],{"class":66},[49,143662,143628],{"class":73},[49,143664,1403],{"class":66},[49,143666,143633],{"class":73},[49,143668,3973],{"class":66},[49,143670,143671],{"class":51,"line":1085},[49,143672,143673],{"class":55},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[49,143675,143676],{"class":51,"line":2574},[49,143677,137],{"class":66},[19,143679,143680],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[39,143682,143684],{"className":41,"code":143683,"language":43,"meta":44,"style":44},"\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",[46,143685,143686,143691,143701,143722,143743,143747,143752,143758,143785],{"__ignoreMap":44},[49,143687,143688],{"class":51,"line":52},[49,143689,143690],{"class":55},"\u002F* 定义动画 *\u002F\n",[49,143692,143693,143696,143699],{"class":51,"line":59},[49,143694,143695],{"class":109},"@keyframes",[49,143697,143698],{"class":6468}," move",[49,143700,67],{"class":66},[49,143702,143703,143706,143708,143710,143712,143715,143717,143719],{"class":51,"line":70},[49,143704,143705],{"class":62},"  0%",[49,143707,203],{"class":66},[49,143709,49382],{"class":73},[49,143711,77],{"class":66},[49,143713,143714],{"class":73},"translateX",[49,143716,1403],{"class":66},[49,143718,80],{"class":73},[49,143720,143721],{"class":66},"); }\n",[49,143723,143724,143727,143729,143731,143733,143735,143737,143739,143741],{"class":51,"line":86},[49,143725,143726],{"class":62},"  100%",[49,143728,203],{"class":66},[49,143730,49382],{"class":73},[49,143732,77],{"class":66},[49,143734,143714],{"class":73},[49,143736,1403],{"class":66},[49,143738,1703],{"class":73},[49,143740,110],{"class":109},[49,143742,143721],{"class":66},[49,143744,143745],{"class":51,"line":98},[49,143746,137],{"class":66},[49,143748,143749],{"class":51,"line":121},[49,143750,143751],{"class":55},"\u002F* 调用动画 *\u002F\n",[49,143753,143754,143756],{"class":51,"line":134},[49,143755,148],{"class":147},[49,143757,67],{"class":66},[49,143759,143760,143763,143765,143767,143769,143771,143773,143775,143777,143780,143783],{"class":51,"line":1085},[49,143761,143762],{"class":73},"  animation",[49,143764,77],{"class":66},[49,143766,248],{"class":73},[49,143768,26367],{"class":73},[49,143770,2086],{"class":109},[49,143772,79907],{"class":73},[49,143774,5347],{"class":73},[49,143776,2086],{"class":109},[49,143778,143779],{"class":73}," infinite",[49,143781,143782],{"class":73}," alternate",[49,143784,83],{"class":66},[49,143786,143787],{"class":51,"line":2574},[49,143788,137],{"class":66},[19,143790,143680],{},[39,143792,143795],{"className":143793,"code":143794,"language":267},[1094],"\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",[46,143796,143794],{"__ignoreMap":44},[525,143798,143800],{"id":143799},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,143802,143803],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[174,143805],{"style":176,"src":143806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[39,143808,143809],{"className":41,"code":143683,"language":43,"meta":44,"style":44},[46,143810,143811,143815,143823,143841,143861,143865,143869,143875,143899],{"__ignoreMap":44},[49,143812,143813],{"class":51,"line":52},[49,143814,143690],{"class":55},[49,143816,143817,143819,143821],{"class":51,"line":59},[49,143818,143695],{"class":109},[49,143820,143698],{"class":6468},[49,143822,67],{"class":66},[49,143824,143825,143827,143829,143831,143833,143835,143837,143839],{"class":51,"line":70},[49,143826,143705],{"class":62},[49,143828,203],{"class":66},[49,143830,49382],{"class":73},[49,143832,77],{"class":66},[49,143834,143714],{"class":73},[49,143836,1403],{"class":66},[49,143838,80],{"class":73},[49,143840,143721],{"class":66},[49,143842,143843,143845,143847,143849,143851,143853,143855,143857,143859],{"class":51,"line":86},[49,143844,143726],{"class":62},[49,143846,203],{"class":66},[49,143848,49382],{"class":73},[49,143850,77],{"class":66},[49,143852,143714],{"class":73},[49,143854,1403],{"class":66},[49,143856,1703],{"class":73},[49,143858,110],{"class":109},[49,143860,143721],{"class":66},[49,143862,143863],{"class":51,"line":98},[49,143864,137],{"class":66},[49,143866,143867],{"class":51,"line":121},[49,143868,143751],{"class":55},[49,143870,143871,143873],{"class":51,"line":134},[49,143872,148],{"class":147},[49,143874,67],{"class":66},[49,143876,143877,143879,143881,143883,143885,143887,143889,143891,143893,143895,143897],{"class":51,"line":1085},[49,143878,143762],{"class":73},[49,143880,77],{"class":66},[49,143882,248],{"class":73},[49,143884,26367],{"class":73},[49,143886,2086],{"class":109},[49,143888,79907],{"class":73},[49,143890,5347],{"class":73},[49,143892,2086],{"class":109},[49,143894,143779],{"class":73},[49,143896,143782],{"class":73},[49,143898,83],{"class":66},[49,143900,143901],{"class":51,"line":2574},[49,143902,137],{"class":66},[19,143904,143905],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[183,143907,143909],{"id":143908},"_1823-知识点回顾","18.2.3 知识点回顾",[39,143911,143912],{"className":41,"code":129940,"language":43,"meta":44,"style":44},[46,143913,143914,143920,143930],{"__ignoreMap":44},[49,143915,143916,143918],{"class":51,"line":52},[49,143917,148],{"class":147},[49,143919,67],{"class":66},[49,143921,143922,143924,143926,143928],{"class":51,"line":59},[49,143923,129953],{"class":73},[49,143925,77],{"class":66},[49,143927,62974],{"class":73},[49,143929,83],{"class":66},[49,143931,143932],{"class":51,"line":70},[49,143933,137],{"class":66},[14,143935,143937],{"id":143936},"_183-3d-转换","18.3 3D 转换",[19,143939,143940],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[183,143942,143944],{"id":143943},"_1831-坐标轴认识","18.3.1 坐标轴认识",[174,143946],{"style":176,"src":143947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[183,143949,143951],{"id":143950},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[174,143953],{"style":176,"src":143954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143956,143957],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143959,143960],{},"translate3d的效果需要搭配透视perspective来使用",[174,143962],{"style":176,"src":143963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[183,143965,143967],{"id":143966},"_1833-透视-perspective","18.3.3 透视 perspective",[174,143969],{"style":176,"src":143970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143972,143973],{},"透视写在父盒子上，单位为像素",[183,143975,143977],{"id":143976},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[525,143979,143981],{"id":143980},"_18341-分开解释","18.3.4.1 分开解释",[174,143983],{"style":176,"src":143984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[174,143986],{"style":176,"src":143987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[174,143989],{"style":176,"src":143990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143992,143993],{},"总结来说就是左手原则",[525,143995,143997],{"id":143996},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[174,143999],{"style":176,"src":144000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[183,144002,144004],{"id":144003},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[174,144006],{"style":176,"src":144007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[174,144009],{"style":176,"src":144010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[39,144012,144014],{"className":41,"code":144013,"language":43,"meta":44,"style":44},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[46,144015,144016,144022,144035,144052],{"__ignoreMap":44},[49,144017,144018,144020],{"class":51,"line":52},[49,144019,148],{"class":147},[49,144021,67],{"class":66},[49,144023,144024,144027,144029,144031,144033],{"class":51,"line":59},[49,144025,144026],{"class":73},"  perspective",[49,144028,77],{"class":66},[49,144030,66309],{"class":73},[49,144032,110],{"class":109},[49,144034,83],{"class":66},[49,144036,144037,144039,144041,144044,144046,144048,144050],{"class":51,"line":70},[49,144038,137561],{"class":73},[49,144040,77],{"class":66},[49,144042,144043],{"class":73},"rotateX",[49,144045,1403],{"class":66},[49,144047,1920],{"class":73},[49,144049,143404],{"class":109},[49,144051,3973],{"class":66},[49,144053,144054],{"class":51,"line":86},[49,144055,137],{"class":66},[183,144057,144059],{"id":144058},"_1836-案例","18.3.6 案例",[525,144061,144063],{"id":144062},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[174,144065],{"style":176,"src":144066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[174,144068],{"style":176,"src":144069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[174,144071],{"style":176,"src":144072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[39,144074,144076],{"className":41,"code":144075,"language":43,"meta":44,"style":44},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[46,144077,144078,144083,144089,144101],{"__ignoreMap":44},[49,144079,144080],{"class":51,"line":52},[49,144081,144082],{"class":55},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[49,144084,144085,144087],{"class":51,"line":59},[49,144086,134752],{"class":62},[49,144088,67],{"class":66},[49,144090,144091,144093,144095,144097,144099],{"class":51,"line":70},[49,144092,144026],{"class":73},[49,144094,77],{"class":66},[49,144096,66309],{"class":73},[49,144098,110],{"class":109},[49,144100,83],{"class":66},[49,144102,144103],{"class":51,"line":86},[49,144104,137],{"class":66},[525,144106,144108],{"id":144107},"_18362-3d导航栏","18.3.6.2 3D导航栏",[174,144110],{"style":176,"src":144111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[39,144113,144114],{"className":128519,"code":131867,"language":128521,"meta":44,"style":44},[46,144115,144116,144120,144134,144138],{"__ignoreMap":44},[49,144117,144118],{"class":51,"line":52},[49,144119,131874],{"class":55},[49,144121,144122,144124,144126,144128,144130,144132],{"class":51,"line":59},[49,144123,2300],{"class":66},[49,144125,148],{"class":147},[49,144127,54728],{"class":62},[49,144129,1448],{"class":66},[49,144131,131887],{"class":1505},[49,144133,52554],{"class":66},[49,144135,144136],{"class":51,"line":70},[49,144137,131894],{"class":66},[49,144139,144140,144142,144144],{"class":51,"line":86},[49,144141,53027],{"class":66},[49,144143,148],{"class":147},[49,144145,52554],{"class":66},[525,144147,144149],{"id":144148},"_18363-旋转木马","18.3.6.3 旋转木马",[174,144151],{"style":176,"src":144152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[39,144154,144155],{"className":41,"code":143380,"language":43,"meta":44,"style":44},[46,144156,144157,144163,144179],{"__ignoreMap":44},[49,144158,144159,144161],{"class":51,"line":52},[49,144160,148],{"class":147},[49,144162,67],{"class":66},[49,144164,144165,144167,144169,144171,144173,144175,144177],{"class":51,"line":59},[49,144166,137561],{"class":73},[49,144168,77],{"class":66},[49,144170,143397],{"class":73},[49,144172,1403],{"class":66},[49,144174,1920],{"class":73},[49,144176,143404],{"class":109},[49,144178,3973],{"class":66},[49,144180,144181],{"class":51,"line":70},[49,144182,137],{"class":66},[1305,144184,144185],{},"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":44,"searchDepth":59,"depth":59,"links":144187},[144188,144195],{"id":143283,"depth":59,"text":143284,"children":144189},[144190,144191,144192,144193,144194],{"id":143307,"depth":70,"text":143308},{"id":143362,"depth":70,"text":143363},{"id":143487,"depth":70,"text":143488},{"id":143590,"depth":70,"text":143591},{"id":143908,"depth":70,"text":143909},{"id":143936,"depth":59,"text":143937,"children":144196},[144197,144198,144199,144200,144201,144202],{"id":143943,"depth":70,"text":143944},{"id":143950,"depth":70,"text":143951},{"id":143966,"depth":70,"text":143967},{"id":143976,"depth":70,"text":143977},{"id":144003,"depth":70,"text":144004},{"id":144058,"depth":70,"text":144059},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143275,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144209,"title":144210,"body":144211,"description":1327,"extension":1328,"meta":144414,"navigation":1330,"path":144415,"seo":144416,"stem":144417,"__hash__":144418},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144212,"toc":144403},[144213,144216,144220,144223,144226,144230,144233,144236,144239,144243,144246,144250,144253,144257,144260,144264,144278,144282,144307,144310,144313,144330,144334,144338,144341,144344,144348,144351,144354,144372,144376,144379,144393,144397,144400],[10,144214,144210],{"id":144215},"_19-移动端基础-前缀现状与视口",[14,144217,144219],{"id":144218},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[174,144221],{"style":176,"src":144222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144224,144225],{},"意思就是加个前缀，增加兼容性",[14,144227,144229],{"id":144228},"_192-移动端现状认识","19.2 移动端现状认识",[174,144231],{"style":176,"src":144232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144234,144235],{},"调试方法：",[174,144237],{"style":176,"src":144238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144240,144242],{"id":144241},"_193-视口","19.3 视口",[19,144244,144245],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[183,144247,144249],{"id":144248},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[174,144251],{"style":176,"src":144252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[183,144254,144256],{"id":144255},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[174,144258],{"style":176,"src":144259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[183,144261,144263],{"id":144262},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[23,144265,144266,144269,144272,144275],{},[26,144267,144268],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[26,144270,144271],{},"理想视口，对设备来讲，是最理想的视口尺寸",[26,144273,144274],{},"需要手动添写meta视口标签通知浏览器操作",[26,144276,144277],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[183,144279,144281],{"id":144280},"_1934-meta视口标签","19.3.4 meta视口标签",[39,144283,144285],{"className":128519,"code":144284,"language":128521,"meta":44,"style":44},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[46,144286,144287],{"__ignoreMap":44},[49,144288,144289,144291,144293,144295,144297,144299,144301,144303,144305],{"class":51,"line":52},[49,144290,2300],{"class":66},[49,144292,52591],{"class":147},[49,144294,16171],{"class":62},[49,144296,1448],{"class":66},[49,144298,52638],{"class":1505},[49,144300,52618],{"class":62},[49,144302,1448],{"class":66},[49,144304,52645],{"class":1505},[49,144306,52554],{"class":66},[174,144308],{"style":176,"src":144309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144311,144312],{},"标准视口设置：",[591,144314,144315,144318,144321,144324,144327],{},[26,144316,144317],{},"视口宽度和设备保持一致",[26,144319,144320],{},"视口的默认缩放比例1.0",[26,144322,144323],{},"不允许用户自行缩放",[26,144325,144326],{},"最大允许的缩放比例1.0",[26,144328,144329],{},"最小允许的缩放比例1.0",[183,144331,144333],{"id":144332},"_1935-二倍图","19.3.5 二倍图",[525,144335,144337],{"id":144336},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[174,144339],{"style":176,"src":144340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[174,144342],{"style":176,"src":144343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[525,144345,144347],{"id":144346},"_19352-多倍图","19.3.5.2 多倍图",[174,144349],{"style":176,"src":144350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144352,144353],{},"二倍图法，代码如下：",[39,144355,144357],{"className":41,"code":144356,"language":43,"meta":44,"style":44},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[46,144358,144359,144364],{"__ignoreMap":44},[49,144360,144361],{"class":51,"line":52},[49,144362,144363],{"class":55},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[49,144365,144366,144369],{"class":51,"line":59},[49,144367,144368],{"class":147},"background-size",[49,144370,144371],{"class":66},": 50% 50%;\n",[525,144373,144375],{"id":144374},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[174,144377],{"style":176,"src":144378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[591,144380,144381,144384,144387,144390],{},[26,144382,144383],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[26,144385,144386],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[26,144388,144389],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[26,144391,144392],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[525,144394,144396],{"id":144395},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[174,144398],{"style":176,"src":144399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1305,144401,144402],{},"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":44,"searchDepth":59,"depth":59,"links":144404},[144405,144406,144407],{"id":144218,"depth":59,"text":144219},{"id":144228,"depth":59,"text":144229},{"id":144241,"depth":59,"text":144242,"children":144408},[144409,144410,144411,144412,144413],{"id":144248,"depth":70,"text":144249},{"id":144255,"depth":70,"text":144256},{"id":144262,"depth":70,"text":144263},{"id":144280,"depth":70,"text":144281},{"id":144332,"depth":70,"text":144333},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144210,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144420,"title":144421,"body":144422,"description":1327,"extension":1328,"meta":145299,"navigation":1330,"path":145300,"seo":145301,"stem":145302,"__hash__":145303},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144423,"toc":145283},[144424,144427,144431,144438,144441,144448,144451,144456,144459,144463,144467,144474,144477,144480,144484,144487,144490,144493,144496,144499,144503,144506,144510,144512,144515,144518,144521,144524,144526,144529,144531,144561,144563,144593,144597,144600,144604,144607,144624,144627,144630,144706,144708,144711,144714,144717,144720,144722,144725,144728,144732,144754,144757,144760,144764,144767,144773,144776,144780,144783,144786,144790,144793,144796,144799,144803,144806,144809,144812,144815,144819,144822,144826,144833,144836,144839,144842,144845,144855,144858,144861,144868,144871,144875,144878,144881,144885,144888,144891,144894,144939,144942,144945,144948,144950,145079,145081,145119,145122,145125,145127,145245,145247,145281],[10,144425,144421],{"id":144426},"_20-移动端布局实战上篇",[14,144428,144430],{"id":144429},"_201-移动端主流方案","20.1 移动端主流方案",[591,144432,144433],{},[26,144434,144435],{},[485,144436,144437],{},"单独移动端页面（主流）",[174,144439],{"style":176,"src":144440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[591,144442,144443],{"start":59},[26,144444,144445],{},[485,144446,144447],{},"响应式兼容PC移动端",[174,144449],{"style":176,"src":144450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[591,144452,144453],{"start":70},[26,144454,144455],{},"两种页面选型布局方式",[174,144457],{"style":176,"src":144458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144460,144462],{"id":144461},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[183,144464,144466],{"id":144465},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,144468,144469,144470],{},"官网地址： ",[1630,144471,144472],{"href":144472,"rel":144473},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25113],[174,144475],{"style":176,"src":144476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[174,144478],{"style":176,"src":144479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[183,144481,144483],{"id":144482},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[174,144485],{"style":176,"src":144486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[174,144488],{"style":176,"src":144489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144491,144492],{},"去除高亮：",[19,144494,144495],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144497,144498],{},"-webkit- tap-highlight-color: transparent;",[14,144500,144502],{"id":144501},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[174,144504],{"style":176,"src":144505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144507,144509],{"id":144508},"_204-流式布局案例","20.4 流式布局案例",[19,144511,1432],{},[19,144513,144514],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144516,144517],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144519,144520],{},"图片格式：",[174,144522],{"style":176,"src":144523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144525,627],{},[174,144527],{"style":176,"src":144528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144530,140947],{},[39,144532,144533],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,144534,144535],{"__ignoreMap":44},[49,144536,144537,144539,144541,144543,144545,144547,144549,144551,144553,144555,144557,144559],{"class":51,"line":52},[49,144538,2300],{"class":66},[49,144540,174],{"class":147},[49,144542,56478],{"class":62},[49,144544,1448],{"class":66},[49,144546,135272],{"class":1505},[49,144548,56486],{"class":62},[49,144550,1448],{"class":66},[49,144552,135279],{"class":1505},[49,144554,135282],{"class":62},[49,144556,1448],{"class":66},[49,144558,135287],{"class":1505},[49,144560,52554],{"class":66},[19,144562,141036],{},[39,144564,144565],{"className":128519,"code":135257,"language":128521,"meta":44,"style":44},[46,144566,144567],{"__ignoreMap":44},[49,144568,144569,144571,144573,144575,144577,144579,144581,144583,144585,144587,144589,144591],{"class":51,"line":52},[49,144570,2300],{"class":66},[49,144572,174],{"class":147},[49,144574,56478],{"class":62},[49,144576,1448],{"class":66},[49,144578,135272],{"class":1505},[49,144580,56486],{"class":62},[49,144582,1448],{"class":66},[49,144584,135279],{"class":1505},[49,144586,135282],{"class":62},[49,144588,1448],{"class":66},[49,144590,135287],{"class":1505},[49,144592,52554],{"class":66},[14,144594,144596],{"id":144595},"_205-flex布局","20.5 flex布局",[174,144598],{"style":176,"src":144599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[183,144601,144603],{"id":144602},"_2051-布局原理","20.5.1 布局原理",[19,144605,144606],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[23,144608,144609,144612,144615,144618,144621],{},[26,144610,144611],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[26,144613,144614],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[26,144616,144617],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[26,144619,144620],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[26,144622,144623],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144625,144626],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144628,144629],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[39,144631,144633],{"className":41,"code":144632,"language":43,"meta":44,"style":44},"\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",[46,144634,144635,144640,144647,144657,144669,144680,144691,144702],{"__ignoreMap":44},[49,144636,144637],{"class":51,"line":52},[49,144638,144639],{"class":55},"\u002F* Flex 弹性布局 *\u002F\n",[49,144641,144642,144645],{"class":51,"line":59},[49,144643,144644],{"class":62},".container",[49,144646,67],{"class":66},[49,144648,144649,144651,144653,144655],{"class":51,"line":70},[49,144650,669],{"class":73},[49,144652,77],{"class":66},[49,144654,52723],{"class":73},[49,144656,83],{"class":66},[49,144658,144659,144662,144664,144667],{"class":51,"line":86},[49,144660,144661],{"class":73},"  flex-direction",[49,144663,77],{"class":66},[49,144665,144666],{"class":73},"row",[49,144668,83],{"class":66},[49,144670,144671,144674,144676,144678],{"class":51,"line":98},[49,144672,144673],{"class":73},"  justify-content",[49,144675,77],{"class":66},[49,144677,52910],{"class":73},[49,144679,83],{"class":66},[49,144681,144682,144685,144687,144689],{"class":51,"line":121},[49,144683,144684],{"class":73},"  align-items",[49,144686,77],{"class":66},[49,144688,52835],{"class":73},[49,144690,83],{"class":66},[49,144692,144693,144696,144698,144700],{"class":51,"line":134},[49,144694,144695],{"class":73},"  flex-wrap",[49,144697,77],{"class":66},[49,144699,79837],{"class":73},[49,144701,83],{"class":66},[49,144703,144704],{"class":51,"line":1085},[49,144705,137],{"class":66},[19,144707,71688],{},[19,144709,144710],{},".form-item .male-label {",[19,144712,144713],{},"   margin-right: 20px;",[19,144715,144716],{},"   display: inline-flex;",[19,144718,144719],{},"   align-items: center;",[19,144721,620],{},[174,144723],{"style":176,"src":144724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[174,144726],{"style":176,"src":144727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[183,144729,144731],{"id":144730},"_2052-常见父项属性","20.5.2 常见父项属性",[591,144733,144734,144737,144740,144743,144746,144749,144752],{},[26,144735,144736],{},"flex-direction：设置主轴的方向",[26,144738,144739],{},"justify-content：设置主轴上的子元素排列方式",[26,144741,144742],{},"flex-wrap：设置子元素是否换行",[26,144744,144745],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[26,144747,144748],{},"align-items：设置侧轴上的子元素排列方式（单行）",[26,144750,144751],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[26,144753,144736],{},[174,144755],{"style":176,"src":144756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[174,144758],{"style":176,"src":144759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[591,144761,144762],{"start":59},[26,144763,144739],{},[174,144765],{"style":176,"src":144766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144768,144769,144772],{},[46,144770,144771],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144774,144775],{},"跟着主轴走",[591,144777,144778],{"start":70},[26,144779,144742],{},[174,144781],{"style":176,"src":144782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,144784,144785],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[591,144787,144788],{"start":86},[26,144789,144745],{},[174,144791],{"style":176,"src":144792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,144794,144795],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,144797,144798],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[591,144800,144801],{"start":98},[26,144802,144748],{},[174,144804],{"style":176,"src":144805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,144807,144808],{},"align-items与align-content之间的区别：",[19,144810,144811],{},"单找items，多找content",[174,144813],{"style":176,"src":144814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[591,144816,144817],{"start":121},[26,144818,144751],{},[174,144820],{"style":176,"src":144821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[183,144823,144825],{"id":144824},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[591,144827,144828],{},[26,144829,144830],{},[485,144831,144832],{},"flex 属性",[19,144834,144835],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[174,144837],{"style":176,"src":144838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144840,144841],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144843,144844],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[591,144846,144847],{"start":59},[26,144848,144849,15047,144852],{},[485,144850,144851],{},"align-self",[485,144853,144854],{},"控制子项自己在侧轴上的排列方式",[174,144856],{"style":176,"src":144857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144859,144860],{},"单个子盒子在父盒子侧轴上的排列方式",[591,144862,144863],{"start":70},[26,144864,144865,144867],{},[485,144866,96522],{}," 属性定义项目的排列顺序",[174,144869],{"style":176,"src":144870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[183,144872,144874],{"id":144873},"_2054-背景线性渐变","20.5.4 背景线性渐变",[174,144876],{"style":176,"src":144877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144879,144880],{},"必须要添加浏览器的私有前缀",[183,144882,144884],{"id":144883},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144886,144887],{},"学到最重要的知识：",[19,144889,144890],{},"flex处理这样的布局思路",[174,144892],{"style":176,"src":144893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[39,144895,144897],{"className":41,"code":144896,"language":43,"meta":44,"style":44},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[46,144898,144899,144905,144915,144925,144935],{"__ignoreMap":44},[49,144900,144901,144903],{"class":51,"line":52},[49,144902,144644],{"class":62},[49,144904,67],{"class":66},[49,144906,144907,144909,144911,144913],{"class":51,"line":59},[49,144908,669],{"class":73},[49,144910,77],{"class":66},[49,144912,52723],{"class":73},[49,144914,83],{"class":66},[49,144916,144917,144919,144921,144923],{"class":51,"line":70},[49,144918,144673],{"class":73},[49,144920,77],{"class":66},[49,144922,52835],{"class":73},[49,144924,83],{"class":66},[49,144926,144927,144929,144931,144933],{"class":51,"line":86},[49,144928,144684],{"class":73},[49,144930,77],{"class":66},[49,144932,52835],{"class":73},[49,144934,83],{"class":66},[49,144936,144937],{"class":51,"line":98},[49,144938,137],{"class":66},[19,144940,144941],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144943,144944],{},"使用属性选择器",[174,144946],{"style":176,"src":144947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144949,70124],{},[39,144951,144953],{"className":128519,"code":144952,"language":128521,"meta":44,"style":44},"\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",[46,144954,144955,144960,144974,144979,144999,145004,145023,145028,145047,145052,145071],{"__ignoreMap":44},[49,144956,144957],{"class":51,"line":52},[49,144958,144959],{"class":55},"\u003C!-- 携程网移动端案例结构 -->\n",[49,144961,144962,144964,144966,144968,144970,144972],{"class":51,"line":59},[49,144963,2300],{"class":66},[49,144965,148],{"class":147},[49,144967,54728],{"class":62},[49,144969,1448],{"class":66},[49,144971,93548],{"class":1505},[49,144973,52554],{"class":66},[49,144975,144976],{"class":51,"line":70},[49,144977,144978],{"class":55},"  \u003C!-- 搜索栏 -->\n",[49,144980,144981,144983,144985,144987,144989,144992,144995,144997],{"class":51,"line":86},[49,144982,53386],{"class":66},[49,144984,148],{"class":147},[49,144986,54728],{"class":62},[49,144988,1448],{"class":66},[49,144990,144991],{"class":1505},"\"search-index\"",[49,144993,144994],{"class":66},">...\u003C\u002F",[49,144996,148],{"class":147},[49,144998,52554],{"class":66},[49,145000,145001],{"class":51,"line":98},[49,145002,145003],{"class":55},"  \u003C!-- 焦点图 -->\n",[49,145005,145006,145008,145010,145012,145014,145017,145019,145021],{"class":51,"line":121},[49,145007,53386],{"class":66},[49,145009,148],{"class":147},[49,145011,54728],{"class":62},[49,145013,1448],{"class":66},[49,145015,145016],{"class":1505},"\"focus\"",[49,145018,144994],{"class":66},[49,145020,148],{"class":147},[49,145022,52554],{"class":66},[49,145024,145025],{"class":51,"line":134},[49,145026,145027],{"class":55},"  \u003C!-- 主导航 -->\n",[49,145029,145030,145032,145034,145036,145038,145041,145043,145045],{"class":51,"line":1085},[49,145031,53386],{"class":66},[49,145033,148],{"class":147},[49,145035,54728],{"class":62},[49,145037,1448],{"class":66},[49,145039,145040],{"class":1505},"\"local-nav\"",[49,145042,144994],{"class":66},[49,145044,148],{"class":147},[49,145046,52554],{"class":66},[49,145048,145049],{"class":51,"line":2574},[49,145050,145051],{"class":55},"  \u003C!-- 子导航 -->\n",[49,145053,145054,145056,145058,145060,145062,145065,145067,145069],{"class":51,"line":2586},[49,145055,53386],{"class":66},[49,145057,148],{"class":147},[49,145059,54728],{"class":62},[49,145061,1448],{"class":66},[49,145063,145064],{"class":1505},"\"nav-common\"",[49,145066,144994],{"class":66},[49,145068,148],{"class":147},[49,145070,52554],{"class":66},[49,145072,145073,145075,145077],{"class":51,"line":2867},[49,145074,53027],{"class":66},[49,145076,148],{"class":147},[49,145078,52554],{"class":66},[19,145080,71688],{},[39,145082,145083],{"className":41,"code":138029,"language":43,"meta":44,"style":44},[46,145084,145085,145099,145115],{"__ignoreMap":44},[49,145086,145087,145089,145091,145093,145095,145097],{"class":51,"line":52},[49,145088,448],{"class":147},[49,145090,2280],{"class":66},[49,145092,104331],{"class":62},[49,145094,1448],{"class":109},[49,145096,63935],{"class":1505},[49,145098,138046],{"class":66},[49,145100,145101,145103,145105,145107,145109,145111,145113],{"class":51,"line":59},[49,145102,101],{"class":73},[49,145104,77],{"class":66},[49,145106,159],{"class":73},[49,145108,110],{"class":109},[49,145110,113],{"class":73},[49,145112,131348],{"class":73},[49,145114,83],{"class":66},[49,145116,145117],{"class":51,"line":70},[49,145118,137],{"class":66},[19,145120,145121],{},"总代码和效果展示：",[174,145123],{"style":176,"src":145124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145126,70124],{},[39,145128,145129],{"className":128519,"code":144952,"language":128521,"meta":44,"style":44},[46,145130,145131,145135,145149,145153,145171,145175,145193,145197,145215,145219,145237],{"__ignoreMap":44},[49,145132,145133],{"class":51,"line":52},[49,145134,144959],{"class":55},[49,145136,145137,145139,145141,145143,145145,145147],{"class":51,"line":59},[49,145138,2300],{"class":66},[49,145140,148],{"class":147},[49,145142,54728],{"class":62},[49,145144,1448],{"class":66},[49,145146,93548],{"class":1505},[49,145148,52554],{"class":66},[49,145150,145151],{"class":51,"line":70},[49,145152,144978],{"class":55},[49,145154,145155,145157,145159,145161,145163,145165,145167,145169],{"class":51,"line":86},[49,145156,53386],{"class":66},[49,145158,148],{"class":147},[49,145160,54728],{"class":62},[49,145162,1448],{"class":66},[49,145164,144991],{"class":1505},[49,145166,144994],{"class":66},[49,145168,148],{"class":147},[49,145170,52554],{"class":66},[49,145172,145173],{"class":51,"line":98},[49,145174,145003],{"class":55},[49,145176,145177,145179,145181,145183,145185,145187,145189,145191],{"class":51,"line":121},[49,145178,53386],{"class":66},[49,145180,148],{"class":147},[49,145182,54728],{"class":62},[49,145184,1448],{"class":66},[49,145186,145016],{"class":1505},[49,145188,144994],{"class":66},[49,145190,148],{"class":147},[49,145192,52554],{"class":66},[49,145194,145195],{"class":51,"line":134},[49,145196,145027],{"class":55},[49,145198,145199,145201,145203,145205,145207,145209,145211,145213],{"class":51,"line":1085},[49,145200,53386],{"class":66},[49,145202,148],{"class":147},[49,145204,54728],{"class":62},[49,145206,1448],{"class":66},[49,145208,145040],{"class":1505},[49,145210,144994],{"class":66},[49,145212,148],{"class":147},[49,145214,52554],{"class":66},[49,145216,145217],{"class":51,"line":2574},[49,145218,145051],{"class":55},[49,145220,145221,145223,145225,145227,145229,145231,145233,145235],{"class":51,"line":2586},[49,145222,53386],{"class":66},[49,145224,148],{"class":147},[49,145226,54728],{"class":62},[49,145228,1448],{"class":66},[49,145230,145064],{"class":1505},[49,145232,144994],{"class":66},[49,145234,148],{"class":147},[49,145236,52554],{"class":66},[49,145238,145239,145241,145243],{"class":51,"line":2867},[49,145240,53027],{"class":66},[49,145242,148],{"class":147},[49,145244,52554],{"class":66},[19,145246,71688],{},[39,145248,145249],{"className":128519,"code":131867,"language":128521,"meta":44,"style":44},[46,145250,145251,145255,145269,145273],{"__ignoreMap":44},[49,145252,145253],{"class":51,"line":52},[49,145254,131874],{"class":55},[49,145256,145257,145259,145261,145263,145265,145267],{"class":51,"line":59},[49,145258,2300],{"class":66},[49,145260,148],{"class":147},[49,145262,54728],{"class":62},[49,145264,1448],{"class":66},[49,145266,131887],{"class":1505},[49,145268,52554],{"class":66},[49,145270,145271],{"class":51,"line":70},[49,145272,131894],{"class":66},[49,145274,145275,145277,145279],{"class":51,"line":86},[49,145276,53027],{"class":66},[49,145278,148],{"class":147},[49,145280,52554],{"class":66},[1305,145282,138978],{},{"title":44,"searchDepth":59,"depth":59,"links":145284},[145285,145286,145290,145291,145292],{"id":144429,"depth":59,"text":144430},{"id":144461,"depth":59,"text":144462,"children":145287},[145288,145289],{"id":144465,"depth":70,"text":144466},{"id":144482,"depth":70,"text":144483},{"id":144501,"depth":59,"text":144502},{"id":144508,"depth":59,"text":144509},{"id":144595,"depth":59,"text":144596,"children":145293},[145294,145295,145296,145297,145298],{"id":144602,"depth":70,"text":144603},{"id":144730,"depth":70,"text":144731},{"id":144824,"depth":70,"text":144825},{"id":144873,"depth":70,"text":144874},{"id":144883,"depth":70,"text":144884},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144421,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145305,"title":145306,"body":145307,"description":1327,"extension":1328,"meta":146534,"navigation":1330,"path":146535,"seo":146536,"stem":146537,"__hash__":146538},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145308,"toc":146512},[145309,145312,145316,145320,145323,145326,145330,145335,145338,145341,145344,145347,145350,145407,145410,145415,145418,145421,145425,145436,145440,145443,145446,145453,145458,145462,145465,145471,145474,145478,145481,145488,145491,145494,145501,145504,145511,145514,145517,145524,145527,145530,145532,145549,145553,145556,145559,145562,145566,145569,145572,145575,145578,145581,145584,145586,145589,145592,145654,145657,145767,145774,145780,145783,145786,145790,145793,145797,145802,145805,145812,145815,145821,145826,145829,145832,145835,145838,145841,145844,145847,145850,145906,145908,145934,145938,145941,145944,145947,145955,145958,145961,145965,146021,146024,146028,146034,146045,146048,146053,146056,146059,146065,146068,146071,146074,146077,146080,146083,146086,146089,146114,146120,146123,146126,146129,146132,146135,146138,146143,146146,146149,146152,146160,146163,146170,146173,146176,146178,146202,146204,146207,146210,146213,146216,146219,146222,146225,146259,146262,146265,146299,146306,146309,146312,146315,146318,146321,146324,146331,146334,146337,146340,146343,146350,146353,146356,146363,146366,146369,146373,146376,146379,146382,146385,146388,146391,146394,146397,146399,146423,146425,146449,146453,146464,146467,146470,146473,146476,146479,146482,146485,146488,146491,146494,146497,146500,146503,146506,146509],[10,145310,145306],{"id":145311},"_21-移动端布局实战下篇",[14,145313,145315],{"id":145314},"_211-rem适配布局","21.1 rem适配布局",[183,145317,145319],{"id":145318},"_2111-rem单位","21.1.1 rem单位",[174,145321],{"style":176,"src":145322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145324,145325],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[183,145327,145329],{"id":145328},"_2112-媒体查询","21.1.2 媒体查询",[591,145331,145332],{},[26,145333,145334],{},"参数介绍",[174,145336],{"style":176,"src":145337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[174,145339],{"style":176,"src":145340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[174,145342],{"style":176,"src":145343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[174,145345],{"style":176,"src":145346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[174,145348],{"style":176,"src":145349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[39,145351,145353],{"className":41,"code":145352,"language":43,"meta":44,"style":44},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[46,145354,145355,145360,145379,145386,145399,145403],{"__ignoreMap":44},[49,145356,145357],{"class":51,"line":52},[49,145358,145359],{"class":55},"\u002F* 媒体查询 *\u002F\n",[49,145361,145362,145365,145367,145370,145372,145375,145377],{"class":51,"line":59},[49,145363,145364],{"class":109},"@media",[49,145366,2913],{"class":66},[49,145368,145369],{"class":73},"max-width",[49,145371,77],{"class":66},[49,145373,145374],{"class":73},"768",[49,145376,110],{"class":109},[49,145378,13694],{"class":66},[49,145380,145381,145384],{"class":51,"line":70},[49,145382,145383],{"class":62},"  .container",[49,145385,67],{"class":66},[49,145387,145388,145391,145393,145395,145397],{"class":51,"line":86},[49,145389,145390],{"class":73},"    width",[49,145392,77],{"class":66},[49,145394,1703],{"class":73},[49,145396,1720],{"class":109},[49,145398,83],{"class":66},[49,145400,145401],{"class":51,"line":98},[49,145402,128568],{"class":66},[49,145404,145405],{"class":51,"line":121},[49,145406,137],{"class":66},[19,145408,145409],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[591,145411,145412],{"start":59},[26,145413,145414],{},"引入资源",[174,145416],{"style":176,"src":145417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145419,145420],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[183,145422,145424],{"id":145423},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[23,145426,145427,145430,145433],{},[26,145428,145429],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[26,145431,145432],{},"媒体查询可以根据不同设备宽度来修改样式",[26,145434,145435],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145437,145439],{"id":145438},"_212-less基础","21.2 Less基础",[19,145441,145442],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,145444,145445],{},"Less可以解决该问题，它是css的扩展语言",[19,145447,145448,145449],{},"Less中文网址： ",[1630,145450,145451],{"href":145451,"rel":145452},"http:\u002F\u002Flesscss.cn\u002F",[25113],[19,145454,145455],{},[485,145456,145457],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[183,145459,145461],{"id":145460},"_2121-less安装","21.2.1 less安装",[19,145463,145464],{},"如果使用vscode，则无需进行下方安装步骤",[19,145466,145467],{},[1630,145468,145469],{"href":145469,"rel":145470},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25113],[174,145472],{"style":176,"src":145473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[183,145475,145477],{"id":145476},"_2122-less使用","21.2.2 less使用",[19,145479,145480],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[591,145482,145483],{},[26,145484,145485],{},[485,145486,145487],{},"Less 变量",[174,145489],{"style":176,"src":145490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[174,145492],{"style":176,"src":145493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[591,145495,145496],{"start":59},[26,145497,145498],{},[485,145499,145500],{},"Less 编译",[174,145502],{"style":176,"src":145503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[591,145505,145506],{"start":70},[26,145507,145508],{},[485,145509,145510],{},"Less 嵌套",[174,145512],{"style":176,"src":145513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[174,145515],{"style":176,"src":145516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[591,145518,145519],{"start":86},[26,145520,145521],{},[485,145522,145523],{},"Less 运算",[174,145525],{"style":176,"src":145526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145528,145529],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145531,1432],{},[23,145533,145534,145537,145540,145543,145546],{},[26,145535,145536],{},"乘号（*）和除号（\u002F）的写法",[26,145538,145539],{},"运算符中间左右有个空格隔开 1px + 5",[26,145541,145542],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[26,145544,145545],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[26,145547,145548],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145550,145552],{"id":145551},"_213-rem-适配方案","21.3 rem 适配方案",[19,145554,145555],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145557,145558],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[174,145560],{"style":176,"src":145561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[183,145563,145565],{"id":145564},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145567,145568],{},"rem + 媒体查询 + less 技术",[174,145570],{"style":176,"src":145571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145573,145574],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145576,145577],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[174,145579],{"style":176,"src":145580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145582,145583],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145585,551],{},[174,145587],{"style":176,"src":145588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145590,145591],{},"index.html:",[39,145593,145595],{"className":41,"code":145594,"language":43,"meta":44,"style":44},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[46,145596,145597,145602,145608,145624,145628,145634,145650],{"__ignoreMap":44},[49,145598,145599],{"class":51,"line":52},[49,145600,145601],{"class":55},"\u002F* rem 适配方案 *\u002F\n",[49,145603,145604,145606],{"class":51,"line":59},[49,145605,51883],{"class":147},[49,145607,67],{"class":66},[49,145609,145610,145612,145614,145617,145619,145621],{"class":51,"line":70},[49,145611,71859],{"class":73},[49,145613,77],{"class":66},[49,145615,145616],{"class":73},"62.5",[49,145618,1720],{"class":109},[49,145620,463],{"class":66},[49,145622,145623],{"class":55},"\u002F* 1rem = 10px *\u002F\n",[49,145625,145626],{"class":51,"line":86},[49,145627,137],{"class":66},[49,145629,145630,145632],{"class":51,"line":98},[49,145631,838],{"class":62},[49,145633,67],{"class":66},[49,145635,145636,145638,145640,145642,145645,145647],{"class":51,"line":121},[49,145637,74],{"class":73},[49,145639,77],{"class":66},[49,145641,106],{"class":73},[49,145643,145644],{"class":109},"rem",[49,145646,463],{"class":66},[49,145648,145649],{"class":55},"\u002F* 100px *\u002F\n",[49,145651,145652],{"class":51,"line":134},[49,145653,137],{"class":66},[19,145655,145656],{},"common.less",[39,145658,145660],{"className":41,"code":145659,"language":43,"meta":44,"style":44},"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",[46,145661,145662,145668,145683,145687,145693,145707,145711,145715,145719,145725,145739,145743,145749,145763],{"__ignoreMap":44},[49,145663,145664,145666],{"class":51,"line":52},[49,145665,51883],{"class":147},[49,145667,67],{"class":66},[49,145669,145670,145672,145674,145676,145678,145680],{"class":51,"line":59},[49,145671,71859],{"class":73},[49,145673,77],{"class":66},[49,145675,145616],{"class":73},[49,145677,1720],{"class":109},[49,145679,27316],{"class":66},[49,145681,145682],{"class":55},"\u002F* 10px *\u002F\n",[49,145684,145685],{"class":51,"line":70},[49,145686,137],{"class":66},[49,145688,145689,145691],{"class":51,"line":86},[49,145690,148],{"class":147},[49,145692,67],{"class":66},[49,145694,145695,145697,145699,145701,145703,145705],{"class":51,"line":98},[49,145696,74],{"class":73},[49,145698,77],{"class":66},[49,145700,106],{"class":73},[49,145702,145644],{"class":109},[49,145704,27316],{"class":66},[49,145706,145649],{"class":55},[49,145708,145709],{"class":51,"line":121},[49,145710,137],{"class":66},[49,145712,145713],{"class":51,"line":134},[49,145714,1054],{"class":66},[49,145716,145717],{"class":51,"line":1085},[49,145718,145601],{"class":55},[49,145720,145721,145723],{"class":51,"line":2574},[49,145722,51883],{"class":147},[49,145724,67],{"class":66},[49,145726,145727,145729,145731,145733,145735,145737],{"class":51,"line":2586},[49,145728,71859],{"class":73},[49,145730,77],{"class":66},[49,145732,145616],{"class":73},[49,145734,1720],{"class":109},[49,145736,463],{"class":66},[49,145738,145623],{"class":55},[49,145740,145741],{"class":51,"line":2867},[49,145742,137],{"class":66},[49,145744,145745,145747],{"class":51,"line":2872},[49,145746,838],{"class":62},[49,145748,67],{"class":66},[49,145750,145751,145753,145755,145757,145759,145761],{"class":51,"line":2878},[49,145752,74],{"class":73},[49,145754,77],{"class":66},[49,145756,106],{"class":73},[49,145758,145644],{"class":109},[49,145760,463],{"class":66},[49,145762,145649],{"class":55},[49,145764,145765],{"class":51,"line":2883},[49,145766,137],{"class":66},[19,145768,145769,145770,145773],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24802,145771,145772],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[39,145775,145778],{"className":145776,"code":145777,"language":267},[1094],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[46,145779,145777],{"__ignoreMap":44},[19,145781,145782],{},"less保存时会自动变成.css文件",[19,145784,145785],{},"好好搞懂上述代码写法",[183,145787,145789],{"id":145788},"_2132-样式导入样式","21.3.2 样式导入样式",[174,145791],{"style":176,"src":145792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[183,145794,145796],{"id":145795},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[591,145798,145799],{},[26,145800,145801],{},"准备工作",[174,145803],{"style":176,"src":145804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,145806,145807,145808],{},"github地址：",[1630,145809,145810],{"href":145810,"rel":145811},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25113],[19,145813,145814],{},"下载之后，将index.js文件拖到项目中就可以了",[19,145816,145817,145818],{},"js文件引入到index.html中使用的是",[46,145819,145820],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[591,145822,145823],{"start":59},[26,145824,145825],{},"vscode插件",[174,145827],{"style":176,"src":145828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145830,145831],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145833,145834],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[174,145836],{"style":176,"src":145837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145839,145840],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[174,145842],{"style":176,"src":145843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145845,145846],{},"修改成75就可以，alt+z为快捷键",[19,145848,145849],{},"index.css：",[39,145851,145852],{"className":41,"code":145594,"language":43,"meta":44,"style":44},[46,145853,145854,145858,145864,145878,145882,145888,145902],{"__ignoreMap":44},[49,145855,145856],{"class":51,"line":52},[49,145857,145601],{"class":55},[49,145859,145860,145862],{"class":51,"line":59},[49,145861,51883],{"class":147},[49,145863,67],{"class":66},[49,145865,145866,145868,145870,145872,145874,145876],{"class":51,"line":70},[49,145867,71859],{"class":73},[49,145869,77],{"class":66},[49,145871,145616],{"class":73},[49,145873,1720],{"class":109},[49,145875,463],{"class":66},[49,145877,145623],{"class":55},[49,145879,145880],{"class":51,"line":86},[49,145881,137],{"class":66},[49,145883,145884,145886],{"class":51,"line":98},[49,145885,838],{"class":62},[49,145887,67],{"class":66},[49,145889,145890,145892,145894,145896,145898,145900],{"class":51,"line":121},[49,145891,74],{"class":73},[49,145893,77],{"class":66},[49,145895,106],{"class":73},[49,145897,145644],{"class":109},[49,145899,463],{"class":66},[49,145901,145649],{"class":55},[49,145903,145904],{"class":51,"line":134},[49,145905,137],{"class":66},[19,145907,145591],{},[39,145909,145910],{"className":41,"code":128177,"language":43,"meta":44,"style":44},[46,145911,145912,145918,145930],{"__ignoreMap":44},[49,145913,145914,145916],{"class":51,"line":52},[49,145915,53042],{"class":147},[49,145917,67],{"class":66},[49,145919,145920,145922,145924,145926,145928],{"class":51,"line":59},[49,145921,71859],{"class":73},[49,145923,77],{"class":66},[49,145925,1992],{"class":73},[49,145927,110],{"class":109},[49,145929,83],{"class":66},[49,145931,145932],{"class":51,"line":70},[49,145933,137],{"class":66},[14,145935,145937],{"id":145936},"_214-响应式开发","21.4 响应式开发",[19,145939,145940],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[174,145942],{"style":176,"src":145943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145945,145946],{},"做法：",[23,145948,145949,145952],{},[26,145950,145951],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[26,145953,145954],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[174,145956],{"style":176,"src":145957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145959,145960],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[183,145962,145964],{"id":145963},"_2141-简单代码示范","21.4.1 简单代码示范",[39,145966,145967],{"className":41,"code":145594,"language":43,"meta":44,"style":44},[46,145968,145969,145973,145979,145993,145997,146003,146017],{"__ignoreMap":44},[49,145970,145971],{"class":51,"line":52},[49,145972,145601],{"class":55},[49,145974,145975,145977],{"class":51,"line":59},[49,145976,51883],{"class":147},[49,145978,67],{"class":66},[49,145980,145981,145983,145985,145987,145989,145991],{"class":51,"line":70},[49,145982,71859],{"class":73},[49,145984,77],{"class":66},[49,145986,145616],{"class":73},[49,145988,1720],{"class":109},[49,145990,463],{"class":66},[49,145992,145623],{"class":55},[49,145994,145995],{"class":51,"line":86},[49,145996,137],{"class":66},[49,145998,145999,146001],{"class":51,"line":98},[49,146000,838],{"class":62},[49,146002,67],{"class":66},[49,146004,146005,146007,146009,146011,146013,146015],{"class":51,"line":121},[49,146006,74],{"class":73},[49,146008,77],{"class":66},[49,146010,106],{"class":73},[49,146012,145644],{"class":109},[49,146014,463],{"class":66},[49,146016,145649],{"class":55},[49,146018,146019],{"class":51,"line":134},[49,146020,137],{"class":66},[19,146022,146023],{},"父盒子一般命名为container",[183,146025,146027],{"id":146026},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146029,146030,146031],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[485,146032,146033],{},"使得 Web 开发更加快捷",[23,146035,146036],{},[26,146037,146038,146039],{},"官网：",[485,146040,146041],{},[1630,146042,146043],{"href":146043,"rel":146044},"http:\u002F\u002Fgetbootstrap.com\u002F",[25113],[19,146046,146047],{},"可以直接去官网拿现成的东西",[591,146049,146050],{},[26,146051,146052],{},"Bootstrap的使用",[19,146054,146055],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146057,146058],{},"Bootstrap 使用四步曲：",[19,146060,146061,146064],{},[485,146062,146063],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[174,146066],{"style":176,"src":146067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146069,146070],{},"打开Bootstrap官网，然后下载",[174,146072],{"style":176,"src":146073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[174,146075],{"style":176,"src":146076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146078,146079],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146081,146082],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146084,146085],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[174,146087],{"style":176,"src":146088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[39,146090,146092],{"className":41,"code":146091,"language":43,"meta":44,"style":44},".center {\n  color: red;\n}\n",[46,146093,146094,146100,146110],{"__ignoreMap":44},[49,146095,146096,146098],{"class":51,"line":52},[49,146097,128064],{"class":62},[49,146099,67],{"class":66},[49,146101,146102,146104,146106,146108],{"class":51,"line":59},[49,146103,72135],{"class":73},[49,146105,77],{"class":66},[49,146107,58660],{"class":73},[49,146109,83],{"class":66},[49,146111,146112],{"class":51,"line":70},[49,146113,137],{"class":66},[19,146115,146116,146119],{},[46,146117,146118],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[174,146121],{"style":176,"src":146122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[174,146124],{"style":176,"src":146125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[174,146127],{"style":176,"src":146128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146130,146131],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[174,146133],{"style":176,"src":146134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146136,146137],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[591,146139,146140],{"start":59},[26,146141,146142],{},"布局容器",[174,146144],{"style":176,"src":146145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146147,146148],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146150,146151],{},"container-fluid用于移动式布局比较方便",[591,146153,146154],{"start":70},[26,146155,146156,146157],{},"bootstrap ",[485,146158,146159],{},"栅格系统原理",[174,146161],{"style":176,"src":146162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[591,146164,146165],{"start":86},[26,146166,146167],{},[485,146168,146169],{},"栅格选项参数",[174,146171],{"style":176,"src":146172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146174,146175],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146177,551],{},[39,146179,146180],{"className":41,"code":146091,"language":43,"meta":44,"style":44},[46,146181,146182,146188,146198],{"__ignoreMap":44},[49,146183,146184,146186],{"class":51,"line":52},[49,146185,128064],{"class":62},[49,146187,67],{"class":66},[49,146189,146190,146192,146194,146196],{"class":51,"line":59},[49,146191,72135],{"class":73},[49,146193,77],{"class":66},[49,146195,58660],{"class":73},[49,146197,83],{"class":66},[49,146199,146200],{"class":51,"line":70},[49,146201,137],{"class":66},[19,146203,627],{},[174,146205],{"style":176,"src":146206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146208,146209],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146211,146212],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146214,146215],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146217,146218],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146220,146221],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146223,146224],{},"汇总展示说明：",[39,146226,146227],{"className":128519,"code":131867,"language":128521,"meta":44,"style":44},[46,146228,146229,146233,146247,146251],{"__ignoreMap":44},[49,146230,146231],{"class":51,"line":52},[49,146232,131874],{"class":55},[49,146234,146235,146237,146239,146241,146243,146245],{"class":51,"line":59},[49,146236,2300],{"class":66},[49,146238,148],{"class":147},[49,146240,54728],{"class":62},[49,146242,1448],{"class":66},[49,146244,131887],{"class":1505},[49,146246,52554],{"class":66},[49,146248,146249],{"class":51,"line":70},[49,146250,131894],{"class":66},[49,146252,146253,146255,146257],{"class":51,"line":86},[49,146254,53027],{"class":66},[49,146256,148],{"class":147},[49,146258,52554],{"class":66},[174,146260],{"style":176,"src":146261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146263,146264],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[39,146266,146267],{"className":128519,"code":131867,"language":128521,"meta":44,"style":44},[46,146268,146269,146273,146287,146291],{"__ignoreMap":44},[49,146270,146271],{"class":51,"line":52},[49,146272,131874],{"class":55},[49,146274,146275,146277,146279,146281,146283,146285],{"class":51,"line":59},[49,146276,2300],{"class":66},[49,146278,148],{"class":147},[49,146280,54728],{"class":62},[49,146282,1448],{"class":66},[49,146284,131887],{"class":1505},[49,146286,52554],{"class":66},[49,146288,146289],{"class":51,"line":70},[49,146290,131894],{"class":66},[49,146292,146293,146295,146297],{"class":51,"line":86},[49,146294,53027],{"class":66},[49,146296,148],{"class":147},[49,146298,52554],{"class":66},[591,146300,146301],{"start":98},[26,146302,146303],{},[485,146304,146305],{},"列嵌套",[174,146307],{"style":176,"src":146308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146310,146311],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146313,146314],{},"没加row内部这样：",[174,146316],{"style":176,"src":146317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146319,146320],{},"加上row之后内部为：",[174,146322],{"style":176,"src":146323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[591,146325,146326],{"start":121},[26,146327,146328],{},[485,146329,146330],{},"列偏移",[174,146332],{"style":176,"src":146333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146335,146336],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146338,146339],{},"要加偏移量，即偏移份数",[19,146341,146342],{},"偏移的份数=12-两个盒子的份数",[591,146344,146345],{"start":134},[26,146346,146347],{},[485,146348,146349],{},"列排序",[174,146351],{"style":176,"src":146352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146354,146355],{},"pull拉左；push推右",[591,146357,146358],{"start":1085},[26,146359,146360],{},[485,146361,146362],{},"响应式工具",[174,146364],{"style":176,"src":146365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146367,146368],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[183,146370,146372],{"id":146371},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146374,146375],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146377,146378],{},"ul {",[19,146380,146381],{},"list-style: none;",[19,146383,146384],{},"margin:0;",[19,146386,146387],{},"padding:0; }",[174,146389],{"style":176,"src":146390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[174,146392],{"style":176,"src":146393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146395,146396],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146398,70124],{},[39,146400,146401],{"className":41,"code":140247,"language":43,"meta":44,"style":44},[46,146402,146403,146409,146419],{"__ignoreMap":44},[49,146404,146405,146407],{"class":51,"line":52},[49,146406,838],{"class":62},[49,146408,67],{"class":66},[49,146410,146411,146413,146415,146417],{"class":51,"line":59},[49,146412,1039],{"class":73},[49,146414,77],{"class":66},[49,146416,304],{"class":73},[49,146418,83],{"class":66},[49,146420,146421],{"class":51,"line":70},[49,146422,137],{"class":66},[19,146424,71688],{},[39,146426,146427],{"className":41,"code":140247,"language":43,"meta":44,"style":44},[46,146428,146429,146435,146445],{"__ignoreMap":44},[49,146430,146431,146433],{"class":51,"line":52},[49,146432,838],{"class":62},[49,146434,67],{"class":66},[49,146436,146437,146439,146441,146443],{"class":51,"line":59},[49,146438,1039],{"class":73},[49,146440,77],{"class":66},[49,146442,304],{"class":73},[49,146444,83],{"class":66},[49,146446,146447],{"class":51,"line":70},[49,146448,137],{"class":66},[14,146450,146452],{"id":146451},"_215-swiper-插件使用","21.5 swiper 插件使用",[23,146454,146455,146458,146461],{},[26,146456,146457],{},"下载需要的css和js文件html页面中 引入相关文件",[26,146459,146460],{},"官网找到类似案例，复制html结构，css样式 js 语法",[26,146462,146463],{},"根据需求定制修改模块",[174,146465],{"style":176,"src":146466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,146468,146469],{},"解压后将这两部分放到项目中",[174,146471],{"style":176,"src":146472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,146474,146475],{},"这个插件可以帮助我们实现轮播图效果",[19,146477,146478],{},"用法：",[174,146480],{"style":176,"src":146481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,146483,146484],{},"找到自己喜欢的",[174,146486],{"style":176,"src":146487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146489,146490],{},"右键，查看网页源代码",[174,146492],{"style":176,"src":146493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146495,146496],{},"复制人家的结构内容",[19,146498,146499],{},"然后去看API文档：",[174,146501],{"style":176,"src":146502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146504,146505],{},"可以看看如何修改样式",[19,146507,146508],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1305,146510,146511],{},"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":44,"searchDepth":59,"depth":59,"links":146513},[146514,146519,146523,146528,146533],{"id":145314,"depth":59,"text":145315,"children":146515},[146516,146517,146518],{"id":145318,"depth":70,"text":145319},{"id":145328,"depth":70,"text":145329},{"id":145423,"depth":70,"text":145424},{"id":145438,"depth":59,"text":145439,"children":146520},[146521,146522],{"id":145460,"depth":70,"text":145461},{"id":145476,"depth":70,"text":145477},{"id":145551,"depth":59,"text":145552,"children":146524},[146525,146526,146527],{"id":145564,"depth":70,"text":145565},{"id":145788,"depth":70,"text":145789},{"id":145795,"depth":70,"text":145796},{"id":145936,"depth":59,"text":145937,"children":146529},[146530,146531,146532],{"id":145963,"depth":70,"text":145964},{"id":146026,"depth":70,"text":146027},{"id":146371,"depth":70,"text":146372},{"id":146451,"depth":59,"text":146452},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145306,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146540,"title":146541,"body":146542,"description":1327,"extension":1328,"meta":146762,"navigation":1330,"path":146763,"seo":146764,"stem":146765,"__hash__":146766},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146543,"toc":146758},[146544,146547,146551,146554,146569,146574,146577,146582,146617,146622,146634,146639,146652,146657,146674,146679,146699,146704,146722,146725,146728,146731,146734,146738,146741,146744,146747,146750,146753,146756],[10,146545,146541],{"id":146546},"_22-代码提交与新型相对单位",[14,146548,146550],{"id":146549},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146552,146553],{},"法1：",[591,146555,146556,146563,146566],{},[26,146557,146558,146559],{},"登录网站注册：",[1630,146560,146561],{"href":146561,"rel":146562},"https:\u002F\u002Fgitee.com\u002F",[25113],[26,146564,146565],{},"码云创建新的仓库",[26,146567,146568],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[23,146570,146571],{},[26,146572,146573],{},"在网站根目录右键-- Git Bash Here",[174,146575],{"style":176,"src":146576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[23,146578,146579],{},[26,146580,146581],{},"如果是第一次利用git提交，请配置好全局选项",[39,146583,146585],{"className":118520,"code":146584,"language":118522,"meta":44,"style":44},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[46,146586,146587,146603],{"__ignoreMap":44},[49,146588,146589,146592,146594,146597,146600],{"class":51,"line":52},[49,146590,146591],{"class":62},"git",[49,146593,120943],{"class":1505},[49,146595,146596],{"class":73}," --global",[49,146598,146599],{"class":1505}," user.name",[49,146601,146602],{"class":1505}," \"你的名字\"\n",[49,146604,146605,146607,146609,146611,146614],{"class":51,"line":59},[49,146606,146591],{"class":62},[49,146608,120943],{"class":1505},[49,146610,146596],{"class":73},[49,146612,146613],{"class":1505}," user.email",[49,146615,146616],{"class":1505}," \"你的邮箱\"\n",[23,146618,146619],{},[26,146620,146621],{},"初始化仓库",[39,146623,146625],{"className":118520,"code":146624,"language":118522,"meta":44,"style":44},"git init\n",[46,146626,146627],{"__ignoreMap":44},[49,146628,146629,146631],{"class":51,"line":52},[49,146630,146591],{"class":62},[49,146632,146633],{"class":1505}," init\n",[23,146635,146636],{},[26,146637,146638],{},"把本地文件放到暂存区",[39,146640,146642],{"className":118520,"code":146641,"language":118522,"meta":44,"style":44},"git add .\n",[46,146643,146644],{"__ignoreMap":44},[49,146645,146646,146648,146650],{"class":51,"line":52},[49,146647,146591],{"class":62},[49,146649,6461],{"class":1505},[49,146651,29989],{"class":1505},[23,146653,146654],{},[26,146655,146656],{},"把本地文件放到本地仓库里面",[39,146658,146660],{"className":118520,"code":146659,"language":118522,"meta":44,"style":44},"git commit -m \"first commit\"\n",[46,146661,146662],{"__ignoreMap":44},[49,146663,146664,146666,146669,146671],{"class":51,"line":52},[49,146665,146591],{"class":62},[49,146667,146668],{"class":1505}," commit",[49,146670,102106],{"class":73},[49,146672,146673],{"class":1505}," \"first commit\"\n",[23,146675,146676],{},[26,146677,146678],{},"链接远程仓库",[39,146680,146682],{"className":118520,"code":146681,"language":118522,"meta":44,"style":44},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[46,146683,146684],{"__ignoreMap":44},[49,146685,146686,146688,146691,146693,146696],{"class":51,"line":52},[49,146687,146591],{"class":62},[49,146689,146690],{"class":1505}," remote",[49,146692,6461],{"class":1505},[49,146694,146695],{"class":1505}," origin",[49,146697,146698],{"class":1505}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[23,146700,146701],{},[26,146702,146703],{},"把本地仓库的文件推送到远程仓库 push",[39,146705,146707],{"className":118520,"code":146706,"language":118522,"meta":44,"style":44},"git push -u origin master\n",[46,146708,146709],{"__ignoreMap":44},[49,146710,146711,146713,146715,146717,146719],{"class":51,"line":52},[49,146712,146591],{"class":62},[49,146714,30264],{"class":1505},[49,146716,29538],{"class":73},[49,146718,146695],{"class":1505},[49,146720,146721],{"class":1505}," master\n",[174,146723],{"style":176,"src":146724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146726,146727],{},"上方方法暂未实现，后边学完git后在整",[19,146729,146730],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[174,146732],{"style":176,"src":146733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146735,146737],{"id":146736},"_222-新型相对单位","22.2 新型相对单位",[174,146739],{"style":176,"src":146740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[174,146742],{"style":176,"src":146743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146745,146746],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146748,146749],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[174,146751],{"style":176,"src":146752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146754,146755],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1305,146757,25206],{},{"title":44,"searchDepth":59,"depth":59,"links":146759},[146760,146761],{"id":146549,"depth":59,"text":146550},{"id":146736,"depth":59,"text":146737},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146541,"description":1327},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146768,"title":146769,"body":146770,"description":146774,"extension":1328,"meta":146775,"navigation":1330,"path":146776,"seo":146777,"stem":146778,"__hash__":146779},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146771,"toc":146772},[],{"title":44,"searchDepth":59,"depth":59,"links":146773},[],"自己正经开始学编程的第一门语言！",{"category":94064},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146769,"description":146774},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146781,"title":146782,"body":146783,"description":1327,"extension":1328,"meta":147930,"navigation":1330,"path":147931,"seo":147932,"stem":147933,"__hash__":147934},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146784,"toc":147906},[146785,146788,146792,146795,146798,146823,146826,146832,146836,146839,146866,146869,146909,146912,146924,146927,146933,146937,146941,146968,146985,146992,146996,146999,147025,147028,147032,147035,147075,147078,147095,147101,147105,147110,147154,147157,147175,147178,147246,147250,147257,147260,147275,147278,147287,147290,147301,147304,147313,147316,147333,147336,147351,147355,147359,147362,147364,147384,147388,147391,147394,147405,147408,147414,147418,147424,147451,147454,147466,147469,147480,147483,147489,147493,147499,147549,147552,147594,147597,147630,147633,147667,147671,147674,147694,147697,147733,147736,147749,147753,147757,147763,147766,147779,147783,147786,147792,147795,147799,147802,147805,147854,147858,147874,147880,147887,147893,147903],[10,146786,146782],{"id":146787},"_1-python环境与第一个程序",[14,146789,146791],{"id":146790},"_11-什么是python","1.1 什么是Python",[19,146793,146794],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,146796,146797],{},"理解 Python 时抓住三个关键词：",[591,146799,146800,146803,146806],{},[26,146801,146802],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[26,146804,146805],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[26,146807,146808,146809,1605,146812,1605,146815,1605,146818,1605,146820,29633],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[46,146810,146811],{},"os",[46,146813,146814],{},"sys",[46,146816,146817],{},"json",[46,146819,59099],{},[46,146821,146822],{},"datetime",[19,146824,146825],{},"Python 程序的运行链路：",[39,146827,146830],{"className":146828,"code":146829,"language":267,"meta":44},[1094],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[46,146831,146829],{"__ignoreMap":44},[14,146833,146835],{"id":146834},"_12-python解释器","1.2 Python解释器",[19,146837,146838],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[39,146840,146842],{"className":25070,"code":146841,"language":25072,"meta":44,"style":44},"python --version\npython3 --version\npython\npython3\n",[46,146843,146844,146850,146856,146861],{"__ignoreMap":44},[49,146845,146846,146848],{"class":51,"line":52},[49,146847,31628],{"class":62},[49,146849,27542],{"class":73},[49,146851,146852,146854],{"class":51,"line":59},[49,146853,102103],{"class":62},[49,146855,27542],{"class":73},[49,146857,146858],{"class":51,"line":70},[49,146859,146860],{"class":62},"python\n",[49,146862,146863],{"class":51,"line":86},[49,146864,146865],{"class":62},"python3\n",[19,146867,146868],{},"进入交互模式后，可以直接输入表达式：",[39,146870,146872],{"className":31626,"code":146871,"language":31628,"meta":44,"style":44},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[46,146873,146874,146885,146890,146904],{"__ignoreMap":44},[49,146875,146876,146879,146881,146883],{"class":51,"line":52},[49,146877,146878],{"class":109},">>>",[49,146880,26367],{"class":73},[49,146882,46814],{"class":109},[49,146884,48971],{"class":73},[49,146886,146887],{"class":51,"line":59},[49,146888,146889],{"class":73},"3\n",[49,146891,146892,146894,146897,146899,146902],{"class":51,"line":70},[49,146893,146878],{"class":109},[49,146895,146896],{"class":73}," print",[49,146898,1403],{"class":66},[49,146900,146901],{"class":1505},"\"hello python\"",[49,146903,1409],{"class":66},[49,146905,146906],{"class":51,"line":86},[49,146907,146908],{"class":66},"hello python\n",[19,146910,146911],{},"退出交互模式：",[39,146913,146915],{"className":31626,"code":146914,"language":31628,"meta":44,"style":44},"exit()\n",[46,146916,146917],{"__ignoreMap":44},[49,146918,146919,146922],{"class":51,"line":52},[49,146920,146921],{"class":73},"exit",[49,146923,3230],{"class":66},[19,146925,146926],{},"或使用快捷键：",[39,146928,146931],{"className":146929,"code":146930,"language":267,"meta":44},[1094],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[46,146932,146930],{"__ignoreMap":44},[14,146934,146936],{"id":146935},"_13-安装python","1.3 安装Python",[183,146938,146940],{"id":146939},"_131-windows安装","1.3.1 Windows安装",[591,146942,146943,146950,146953,146959,146965],{},[26,146944,146945,146946],{},"打开 Python 官网：",[1630,146947,146948],{"href":146948,"rel":146949},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25113],[26,146951,146952],{},"下载 Windows Installer。",[26,146954,146955,146956,29633],{},"安装时勾选 ",[46,146957,146958],{},"Add Python to PATH",[26,146960,146961,146962,29633],{},"点击 ",[46,146963,146964],{},"Install Now",[26,146966,146967],{},"安装完成后打开命令提示符验证：",[39,146969,146971],{"className":25070,"code":146970,"language":25072,"meta":44,"style":44},"python --version\npip --version\n",[46,146972,146973,146979],{"__ignoreMap":44},[49,146974,146975,146977],{"class":51,"line":52},[49,146976,31628],{"class":62},[49,146978,27542],{"class":73},[49,146980,146981,146983],{"class":51,"line":59},[49,146982,25079],{"class":62},[49,146984,27542],{"class":73},[19,146986,146987,146988,146991],{},"如果提示 ",[46,146989,146990],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[183,146993,146995],{"id":146994},"_132-macos安装","1.3.2 macOS安装",[19,146997,146998],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[39,147000,147002],{"className":25070,"code":147001,"language":25072,"meta":44,"style":44},"brew install python\npython3 --version\npip3 --version\n",[46,147003,147004,147013,147019],{"__ignoreMap":44},[49,147005,147006,147009,147011],{"class":51,"line":52},[49,147007,147008],{"class":62},"brew",[49,147010,25082],{"class":1505},[49,147012,125542],{"class":1505},[49,147014,147015,147017],{"class":51,"line":59},[49,147016,102103],{"class":62},[49,147018,27542],{"class":73},[49,147020,147021,147023],{"class":51,"line":70},[49,147022,120924],{"class":62},[49,147024,27542],{"class":73},[19,147026,147027],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[183,147029,147031],{"id":147030},"_133-linux安装","1.3.3 Linux安装",[19,147033,147034],{},"Ubuntu\u002FDebian：",[39,147036,147038],{"className":25070,"code":147037,"language":25072,"meta":44,"style":44},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[46,147039,147040,147048,147063,147069],{"__ignoreMap":44},[49,147041,147042,147044,147046],{"class":51,"line":52},[49,147043,25825],{"class":62},[49,147045,118541],{"class":1505},[49,147047,27491],{"class":1505},[49,147049,147050,147052,147054,147056,147058,147060],{"class":51,"line":59},[49,147051,25825],{"class":62},[49,147053,118541],{"class":1505},[49,147055,25082],{"class":1505},[49,147057,105627],{"class":1505},[49,147059,102022],{"class":1505},[49,147061,147062],{"class":1505}," python3-venv\n",[49,147064,147065,147067],{"class":51,"line":70},[49,147066,102103],{"class":62},[49,147068,27542],{"class":73},[49,147070,147071,147073],{"class":51,"line":86},[49,147072,120924],{"class":62},[49,147074,27542],{"class":73},[19,147076,147077],{},"Fedora：",[39,147079,147081],{"className":25070,"code":147080,"language":25072,"meta":44,"style":44},"sudo dnf install python3 python3-pip\n",[46,147082,147083],{"__ignoreMap":44},[49,147084,147085,147087,147089,147091,147093],{"class":51,"line":52},[49,147086,25825],{"class":62},[49,147088,27564],{"class":1505},[49,147090,25082],{"class":1505},[49,147092,105627],{"class":1505},[49,147094,120989],{"class":1505},[19,147096,147097,147098,147100],{},"Linux 上通常使用 ",[46,147099,102103],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147102,147104],{"id":147103},"_14-pip包管理器","1.4 pip包管理器",[19,147106,147107,147109],{},[46,147108,25079],{}," 用来安装第三方库。",[39,147111,147113],{"className":25070,"code":147112,"language":25072,"meta":44,"style":44},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[46,147114,147115,147124,147133,147141,147147],{"__ignoreMap":44},[49,147116,147117,147119,147121],{"class":51,"line":52},[49,147118,25079],{"class":62},[49,147120,25082],{"class":1505},[49,147122,147123],{"class":1505}," requests\n",[49,147125,147126,147128,147131],{"class":51,"line":59},[49,147127,25079],{"class":62},[49,147129,147130],{"class":1505}," uninstall",[49,147132,147123],{"class":1505},[49,147134,147135,147137,147139],{"class":51,"line":70},[49,147136,25079],{"class":62},[49,147138,118798],{"class":1505},[49,147140,147123],{"class":1505},[49,147142,147143,147145],{"class":51,"line":86},[49,147144,25079],{"class":62},[49,147146,120179],{"class":1505},[49,147148,147149,147151],{"class":51,"line":98},[49,147150,25079],{"class":62},[49,147152,147153],{"class":1505}," freeze\n",[19,147155,147156],{},"国内网络较慢时可以临时使用镜像：",[39,147158,147160],{"className":25070,"code":147159,"language":25072,"meta":44,"style":44},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[46,147161,147162],{"__ignoreMap":44},[49,147163,147164,147166,147168,147171,147173],{"class":51,"line":52},[49,147165,25079],{"class":62},[49,147167,25082],{"class":1505},[49,147169,147170],{"class":1505}," requests",[49,147172,27679],{"class":73},[49,147174,120952],{"class":1505},[19,147176,147177],{},"常见第三方库：",[293,147179,147180,147189],{},[296,147181,147182],{},[299,147183,147184,147187],{},[302,147185,147186],{},"库",[302,147188,103920],{},[310,147190,147191,147199,147206,147214,147222,147230,147238],{},[299,147192,147193,147196],{},[315,147194,147195],{},"requests",[315,147197,147198],{},"网络请求",[299,147200,147201,147203],{},[315,147202,101850],{},[315,147204,147205],{},"数值计算",[299,147207,147208,147211],{},[315,147209,147210],{},"pandas",[315,147212,147213],{},"表格数据处理",[299,147215,147216,147219],{},[315,147217,147218],{},"matplotlib",[315,147220,147221],{},"绘图",[299,147223,147224,147227],{},[315,147225,147226],{},"pyecharts",[315,147228,147229],{},"ECharts 图表",[299,147231,147232,147235],{},[315,147233,147234],{},"flask",[315,147236,147237],{},"Web 后端",[299,147239,147240,147243],{},[315,147241,147242],{},"pytest",[315,147244,147245],{},"自动化测试",[14,147247,147249],{"id":147248},"_15-虚拟环境","1.5 虚拟环境",[19,147251,147252,147253,147256],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[46,147254,147255],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147258,147259],{},"创建虚拟环境：",[39,147261,147263],{"className":25070,"code":147262,"language":25072,"meta":44,"style":44},"python -m venv .venv\n",[46,147264,147265],{"__ignoreMap":44},[49,147266,147267,147269,147271,147273],{"class":51,"line":52},[49,147268,31628],{"class":62},[49,147270,102106],{"class":73},[49,147272,102109],{"class":1505},[49,147274,102112],{"class":1505},[19,147276,147277],{},"Windows 激活：",[39,147279,147281],{"className":25070,"code":147280,"language":25072,"meta":44,"style":44},".venv\\Scripts\\activate\n",[46,147282,147283],{"__ignoreMap":44},[49,147284,147285],{"class":51,"line":52},[49,147286,147280],{"class":62},[19,147288,147289],{},"macOS\u002FLinux 激活：",[39,147291,147293],{"className":25070,"code":147292,"language":25072,"meta":44,"style":44},"source .venv\u002Fbin\u002Factivate\n",[46,147294,147295],{"__ignoreMap":44},[49,147296,147297,147299],{"class":51,"line":52},[49,147298,102117],{"class":73},[49,147300,102120],{"class":1505},[19,147302,147303],{},"退出虚拟环境：",[39,147305,147307],{"className":25070,"code":147306,"language":25072,"meta":44,"style":44},"deactivate\n",[46,147308,147309],{"__ignoreMap":44},[49,147310,147311],{"class":51,"line":52},[49,147312,147306],{"class":62},[19,147314,147315],{},"保存依赖：",[39,147317,147319],{"className":25070,"code":147318,"language":25072,"meta":44,"style":44},"pip freeze > requirements.txt\n",[46,147320,147321],{"__ignoreMap":44},[49,147322,147323,147325,147328,147330],{"class":51,"line":52},[49,147324,25079],{"class":62},[49,147326,147327],{"class":1505}," freeze",[49,147329,27471],{"class":109},[49,147331,147332],{"class":1505}," requirements.txt\n",[19,147334,147335],{},"安装依赖：",[39,147337,147339],{"className":25070,"code":147338,"language":25072,"meta":44,"style":44},"pip install -r requirements.txt\n",[46,147340,147341],{"__ignoreMap":44},[49,147342,147343,147345,147347,147349],{"class":51,"line":52},[49,147344,25079],{"class":62},[49,147346,25082],{"class":1505},[49,147348,120863],{"class":73},[49,147350,147332],{"class":1505},[14,147352,147354],{"id":147353},"_16-开发工具","1.6 开发工具",[183,147356,147358],{"id":147357},"_161-pycharm","1.6.1 PyCharm",[19,147360,147361],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147363,123286],{},[591,147365,147366,147369,147372,147378,147381],{},[26,147367,147368],{},"New Project：创建项目。",[26,147370,147371],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[26,147373,147374,147375,127207],{},"New Python File：创建 ",[46,147376,147377],{},".py",[26,147379,147380],{},"Run：运行当前文件。",[26,147382,147383],{},"Debug：断点调试。",[183,147385,147387],{"id":147386},"_162-vs-code","1.6.2 VS Code",[19,147389,147390],{},"VS Code 轻量，适合后续多语言开发。",[19,147392,147393],{},"建议安装插件：",[591,147395,147396,147399,147402],{},[26,147397,147398],{},"Python。",[26,147400,147401],{},"Pylance。",[26,147403,147404],{},"Jupyter。",[19,147406,147407],{},"选择解释器：",[39,147409,147412],{"className":147410,"code":147411,"language":267,"meta":44},[1094],"Ctrl + Shift + P -> Python: Select Interpreter\n",[46,147413,147411],{"__ignoreMap":44},[14,147415,147417],{"id":147416},"_17-第一个python程序","1.7 第一个Python程序",[19,147419,147420,147421,25867],{},"创建文件 ",[46,147422,147423],{},"hello.py",[39,147425,147427],{"className":31626,"code":147426,"language":31628,"meta":44,"style":44},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[46,147428,147429,147440],{"__ignoreMap":44},[49,147430,147431,147433,147435,147438],{"class":51,"line":52},[49,147432,31663],{"class":73},[49,147434,1403],{"class":66},[49,147436,147437],{"class":1505},"\"Hello World\"",[49,147439,1409],{"class":66},[49,147441,147442,147444,147446,147449],{"class":51,"line":59},[49,147443,31663],{"class":73},[49,147445,1403],{"class":66},[49,147447,147448],{"class":1505},"\"你好，Python\"",[49,147450,1409],{"class":66},[19,147452,147453],{},"在终端运行：",[39,147455,147457],{"className":25070,"code":147456,"language":25072,"meta":44,"style":44},"python hello.py\n",[46,147458,147459],{"__ignoreMap":44},[49,147460,147461,147463],{"class":51,"line":52},[49,147462,31628],{"class":62},[49,147464,147465],{"class":1505}," hello.py\n",[19,147467,147468],{},"或：",[39,147470,147472],{"className":25070,"code":147471,"language":25072,"meta":44,"style":44},"python3 hello.py\n",[46,147473,147474],{"__ignoreMap":44},[49,147475,147476,147478],{"class":51,"line":52},[49,147477,102103],{"class":62},[49,147479,147465],{"class":1505},[19,147481,147482],{},"输出：",[39,147484,147487],{"className":147485,"code":147486,"language":267,"meta":44},[1094],"Hello World\n你好，Python\n",[46,147488,147486],{"__ignoreMap":44},[14,147490,147492],{"id":147491},"_18-print函数","1.8 print函数",[19,147494,147495,147498],{},[46,147496,147497],{},"print()"," 用来输出内容。",[39,147500,147502],{"className":31626,"code":147501,"language":31628,"meta":44,"style":44},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[46,147503,147504,147514,147524,147534],{"__ignoreMap":44},[49,147505,147506,147508,147510,147512],{"class":51,"line":52},[49,147507,31663],{"class":73},[49,147509,1403],{"class":66},[49,147511,7096],{"class":1505},[49,147513,1409],{"class":66},[49,147515,147516,147518,147520,147522],{"class":51,"line":59},[49,147517,31663],{"class":73},[49,147519,1403],{"class":66},[49,147521,1703],{"class":73},[49,147523,1409],{"class":66},[49,147525,147526,147528,147530,147532],{"class":51,"line":70},[49,147527,31663],{"class":73},[49,147529,1403],{"class":66},[49,147531,1451],{"class":73},[49,147533,1409],{"class":66},[49,147535,147536,147538,147540,147543,147545,147547],{"class":51,"line":86},[49,147537,31663],{"class":73},[49,147539,1403],{"class":66},[49,147541,147542],{"class":1505},"\"年龄:\"",[49,147544,13687],{"class":66},[49,147546,2041],{"class":73},[49,147548,1409],{"class":66},[19,147550,147551],{},"多个内容用逗号隔开，默认中间加空格：",[39,147553,147555],{"className":31626,"code":147554,"language":31628,"meta":44,"style":44},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[46,147556,147557,147567,147577],{"__ignoreMap":44},[49,147558,147559,147562,147564],{"class":51,"line":52},[49,147560,147561],{"class":66},"name ",[49,147563,1448],{"class":109},[49,147565,147566],{"class":1505}," \"张三\"\n",[49,147568,147569,147572,147574],{"class":51,"line":59},[49,147570,147571],{"class":66},"age ",[49,147573,1448],{"class":109},[49,147575,147576],{"class":73}," 18\n",[49,147578,147579,147581,147583,147586,147589,147591],{"class":51,"line":70},[49,147580,31663],{"class":73},[49,147582,1403],{"class":66},[49,147584,147585],{"class":1505},"\"姓名:\"",[49,147587,147588],{"class":66},", name, ",[49,147590,147542],{"class":1505},[49,147592,147593],{"class":66},", age)\n",[19,147595,147596],{},"修改分隔符：",[39,147598,147600],{"className":31626,"code":147599,"language":31628,"meta":44,"style":44},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[46,147601,147602],{"__ignoreMap":44},[49,147603,147604,147606,147608,147611,147613,147615,147617,147619,147621,147624,147626,147628],{"class":51,"line":52},[49,147605,31663],{"class":73},[49,147607,1403],{"class":66},[49,147609,147610],{"class":1505},"\"2024\"",[49,147612,13687],{"class":66},[49,147614,55557],{"class":1505},[49,147616,13687],{"class":66},[49,147618,55557],{"class":1505},[49,147620,13687],{"class":66},[49,147622,147623],{"class":6468},"sep",[49,147625,1448],{"class":109},[49,147627,33731],{"class":1505},[49,147629,1409],{"class":66},[19,147631,147632],{},"修改结尾符：",[39,147634,147636],{"className":31626,"code":147635,"language":31628,"meta":44,"style":44},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[46,147637,147638,147656],{"__ignoreMap":44},[49,147639,147640,147642,147644,147646,147648,147650,147652,147654],{"class":51,"line":52},[49,147641,31663],{"class":73},[49,147643,1403],{"class":66},[49,147645,7096],{"class":1505},[49,147647,13687],{"class":66},[49,147649,47049],{"class":6468},[49,147651,1448],{"class":109},[49,147653,5613],{"class":1505},[49,147655,1409],{"class":66},[49,147657,147658,147660,147662,147665],{"class":51,"line":59},[49,147659,31663],{"class":73},[49,147661,1403],{"class":66},[49,147663,147664],{"class":1505},"\"python\"",[49,147666,1409],{"class":66},[14,147668,147670],{"id":147669},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147672,147673],{},"交互运行适合临时验证：",[39,147675,147677],{"className":31626,"code":147676,"language":31628,"meta":44,"style":44},">>> 10 * 3\n30\n",[46,147678,147679,147689],{"__ignoreMap":44},[49,147680,147681,147683,147685,147687],{"class":51,"line":52},[49,147682,146878],{"class":109},[49,147684,3292],{"class":73},[49,147686,7770],{"class":109},[49,147688,121260],{"class":73},[49,147690,147691],{"class":51,"line":59},[49,147692,147693],{"class":73},"30\n",[19,147695,147696],{},"脚本运行适合保存程序：",[39,147698,147700],{"className":31626,"code":147699,"language":31628,"meta":44,"style":44},"price = 8\ncount = 5\nprint(price * count)\n",[46,147701,147702,147712,147721],{"__ignoreMap":44},[49,147703,147704,147707,147709],{"class":51,"line":52},[49,147705,147706],{"class":66},"price ",[49,147708,1448],{"class":109},[49,147710,147711],{"class":73}," 8\n",[49,147713,147714,147717,147719],{"class":51,"line":59},[49,147715,147716],{"class":66},"count ",[49,147718,1448],{"class":109},[49,147720,55668],{"class":73},[49,147722,147723,147725,147728,147730],{"class":51,"line":70},[49,147724,31663],{"class":73},[49,147726,147727],{"class":66},"(price ",[49,147729,1846],{"class":109},[49,147731,147732],{"class":66}," count)\n",[19,147734,147735],{},"实际学习中推荐：",[591,147737,147738,147741,147746],{},[26,147739,147740],{},"临时试一个语法，用交互模式。",[26,147742,147743,147744,127207],{},"写完整练习，用 ",[46,147745,147377],{},[26,147747,147748],{},"写项目，用独立目录和虚拟环境。",[14,147750,147752],{"id":147751},"_110-常见错误","1.10 常见错误",[183,147754,147756],{"id":147755},"_1101-命令找不到","1.10.1 命令找不到",[39,147758,147761],{"className":147759,"code":147760,"language":267,"meta":44},[1094],"python: command not found\n",[46,147762,147760],{"__ignoreMap":44},[19,147764,147765],{},"原因：",[591,147767,147768,147771,147774],{},[26,147769,147770],{},"没安装 Python。",[26,147772,147773],{},"PATH 没配置。",[26,147775,147776,147777,29633],{},"Linux\u002FmacOS 应该使用 ",[46,147778,102103],{},[183,147780,147782],{"id":147781},"_1102-文件名冲突","1.10.2 文件名冲突",[19,147784,147785],{},"不要把文件命名为：",[39,147787,147790],{"className":147788,"code":147789,"language":267,"meta":44},[1094],"random.py\njson.py\ntime.py\nrequests.py\n",[46,147791,147789],{"__ignoreMap":44},[19,147793,147794],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[183,147796,147798],{"id":147797},"_1103-中文乱码","1.10.3 中文乱码",[19,147800,147801],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,147803,147804],{},"如果读写文件出现乱码，要明确指定编码：",[39,147806,147808],{"className":31626,"code":147807,"language":31628,"meta":44,"style":44},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[46,147809,147810,147844],{"__ignoreMap":44},[49,147811,147812,147814,147817,147819,147822,147824,147827,147829,147832,147834,147837,147839,147841],{"class":51,"line":52},[49,147813,109057],{"class":109},[49,147815,147816],{"class":73}," open",[49,147818,1403],{"class":66},[49,147820,147821],{"class":1505},"\"data.txt\"",[49,147823,13687],{"class":66},[49,147825,147826],{"class":1505},"\"r\"",[49,147828,13687],{"class":66},[49,147830,147831],{"class":6468},"encoding",[49,147833,1448],{"class":109},[49,147835,147836],{"class":1505},"\"utf-8\"",[49,147838,14966],{"class":66},[49,147840,32631],{"class":109},[49,147842,147843],{"class":66}," f:\n",[49,147845,147846,147849,147851],{"class":51,"line":59},[49,147847,147848],{"class":66},"    content ",[49,147850,1448],{"class":109},[49,147852,147853],{"class":66}," f.read()\n",[14,147855,147857],{"id":147856},"_111-本章练习","1.11 本章练习",[591,147859,147860,147863,147869],{},[26,147861,147862],{},"安装 Python，并在终端输出版本号。",[26,147864,147865,147866,147868],{},"新建 ",[46,147867,147423],{},"，输出自己的姓名、年龄、学习目标。",[26,147870,105590,147871,147873],{},[46,147872,147497],{}," 输出下面格式：",[39,147875,147878],{"className":147876,"code":147877,"language":267,"meta":44},[1094],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[46,147879,147877],{"__ignoreMap":44},[591,147881,147882],{"start":86},[26,147883,105590,147884,147886],{},[46,147885,147623],{}," 输出日期：",[39,147888,147891],{"className":147889,"code":147890,"language":267,"meta":44},[1094],"2024-10-10\n",[46,147892,147890],{"__ignoreMap":44},[591,147894,147895],{"start":98},[26,147896,105590,147897,147899,147900,147902],{},[46,147898,47049],{}," 让两次 ",[46,147901,147497],{}," 输出在同一行。",[1305,147904,147905],{},"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":44,"searchDepth":59,"depth":59,"links":147907},[147908,147909,147910,147915,147916,147917,147921,147922,147923,147924,147929],{"id":146790,"depth":59,"text":146791},{"id":146834,"depth":59,"text":146835},{"id":146935,"depth":59,"text":146936,"children":147911},[147912,147913,147914],{"id":146939,"depth":70,"text":146940},{"id":146994,"depth":70,"text":146995},{"id":147030,"depth":70,"text":147031},{"id":147103,"depth":59,"text":147104},{"id":147248,"depth":59,"text":147249},{"id":147353,"depth":59,"text":147354,"children":147918},[147919,147920],{"id":147357,"depth":70,"text":147358},{"id":147386,"depth":70,"text":147387},{"id":147416,"depth":59,"text":147417},{"id":147491,"depth":59,"text":147492},{"id":147669,"depth":59,"text":147670},{"id":147751,"depth":59,"text":147752,"children":147925},[147926,147927,147928],{"id":147755,"depth":70,"text":147756},{"id":147781,"depth":70,"text":147782},{"id":147797,"depth":70,"text":147798},{"id":147856,"depth":59,"text":147857},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146782,"description":1327},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147936,"title":147937,"body":147938,"description":1327,"extension":1328,"meta":150342,"navigation":1330,"path":150343,"seo":150344,"stem":150345,"__hash__":150346},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147939,"toc":150327},[147940,147943,147947,147950,147953,147970,147973,148015,148018,148022,148025,148028,148065,148068,148102,148105,148197,148201,148215,148218,148245,148248,148252,148355,148362,148365,148382,148386,148393,148582,148585,148658,148662,148665,148749,148752,148784,148788,148992,148995,148999,149005,149107,149110,149366,149370,149373,149376,149390,149392,149578,149582,149944,149950,149954,149957,150081,150084,150263,150266,150270,150303,150307,150324],[10,147941,147937],{"id":147942},"_10-json与pyecharts折线图",[14,147944,147946],{"id":147945},"_101-数据可视化","10.1 数据可视化",[19,147948,147949],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147951,147952],{},"常见图表：",[591,147954,147955,147958,147961,147964,147967],{},[26,147956,147957],{},"折线图：看趋势。",[26,147959,147960],{},"柱状图：看分类对比。",[26,147962,147963],{},"饼图：看占比。",[26,147965,147966],{},"地图：看地域分布。",[26,147968,147969],{},"散点图：看两个变量之间的关系。",[19,147971,147972],{},"Python 可视化常用库：",[293,147974,147975,147983],{},[296,147976,147977],{},[299,147978,147979,147981],{},[302,147980,147186],{},[302,147982,24988],{},[310,147984,147985,147992,148000,148007],{},[299,147986,147987,147989],{},[315,147988,147218],{},[315,147990,147991],{},"基础、经典、可定制",[299,147993,147994,147997],{},[315,147995,147996],{},"seaborn",[315,147998,147999],{},"统计图表更美观",[299,148001,148002,148004],{},[315,148003,147226],{},[315,148005,148006],{},"生成交互式网页图表",[299,148008,148009,148012],{},[315,148010,148011],{},"plotly",[315,148013,148014],{},"交互图表能力强",[19,148016,148017],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148019,148021],{"id":148020},"_102-json回顾","10.2 JSON回顾",[19,148023,148024],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148026,148027],{},"Python 字典：",[39,148029,148031],{"className":31626,"code":148030,"language":31628,"meta":44,"style":44},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[46,148032,148033,148041,148052,148061],{"__ignoreMap":44},[49,148034,148035,148037,148039],{"class":51,"line":52},[49,148036,102882],{"class":66},[49,148038,1448],{"class":109},[49,148040,67],{"class":66},[49,148042,148043,148046,148048,148050],{"class":51,"line":59},[49,148044,148045],{"class":1505},"    \"name\"",[49,148047,77],{"class":66},[49,148049,70504],{"class":1505},[49,148051,32714],{"class":66},[49,148053,148054,148057,148059],{"class":51,"line":70},[49,148055,148056],{"class":1505},"    \"value\"",[49,148058,77],{"class":66},[49,148060,98683],{"class":73},[49,148062,148063],{"class":51,"line":86},[49,148064,137],{"class":66},[19,148066,148067],{},"JSON 字符串：",[39,148069,148072],{"className":148070,"code":148071,"language":146817,"meta":44,"style":44},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[46,148073,148074,148078,148089,148098],{"__ignoreMap":44},[49,148075,148076],{"class":51,"line":52},[49,148077,2802],{"class":66},[49,148079,148080,148083,148085,148087],{"class":51,"line":59},[49,148081,148082],{"class":73},"  \"name\"",[49,148084,77],{"class":66},[49,148086,70504],{"class":1505},[49,148088,32714],{"class":66},[49,148090,148091,148094,148096],{"class":51,"line":70},[49,148092,148093],{"class":73},"  \"value\"",[49,148095,77],{"class":66},[49,148097,98683],{"class":73},[49,148099,148100],{"class":51,"line":86},[49,148101,137],{"class":66},[19,148103,148104],{},"Python 与 JSON 的转换：",[39,148106,148108],{"className":31626,"code":148107,"language":31628,"meta":44,"style":44},"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",[46,148109,148110,148117,148121,148146,148150,148169,148176,148180,148190],{"__ignoreMap":44},[49,148111,148112,148114],{"class":51,"line":52},[49,148113,31640],{"class":109},[49,148115,148116],{"class":66}," json\n",[49,148118,148119],{"class":51,"line":59},[49,148120,3654],{"emptyLinePlaceholder":1330},[49,148122,148123,148125,148127,148129,148131,148133,148135,148137,148140,148142,148144],{"class":51,"line":70},[49,148124,102882],{"class":66},[49,148126,1448],{"class":109},[49,148128,5702],{"class":66},[49,148130,63915],{"class":1505},[49,148132,77],{"class":66},[49,148134,70504],{"class":1505},[49,148136,13687],{"class":66},[49,148138,148139],{"class":1505},"\"value\"",[49,148141,77],{"class":66},[49,148143,1703],{"class":73},[49,148145,137],{"class":66},[49,148147,148148],{"class":51,"line":86},[49,148149,3654],{"emptyLinePlaceholder":1330},[49,148151,148152,148155,148157,148160,148163,148165,148167],{"class":51,"line":98},[49,148153,148154],{"class":66},"json_text ",[49,148156,1448],{"class":109},[49,148158,148159],{"class":66}," json.dumps(data, ",[49,148161,148162],{"class":6468},"ensure_ascii",[49,148164,1448],{"class":109},[49,148166,35235],{"class":73},[49,148168,1409],{"class":66},[49,148170,148171,148173],{"class":51,"line":121},[49,148172,31663],{"class":73},[49,148174,148175],{"class":66},"(json_text)\n",[49,148177,148178],{"class":51,"line":134},[49,148179,3654],{"emptyLinePlaceholder":1330},[49,148181,148182,148185,148187],{"class":51,"line":1085},[49,148183,148184],{"class":66},"new_data ",[49,148186,1448],{"class":109},[49,148188,148189],{"class":66}," json.loads(json_text)\n",[49,148191,148192,148194],{"class":51,"line":2574},[49,148193,31663],{"class":73},[49,148195,148196],{"class":66},"(new_data)\n",[14,148198,148200],{"id":148199},"_103-安装pyecharts","10.3 安装pyecharts",[39,148202,148204],{"className":25070,"code":148203,"language":25072,"meta":44,"style":44},"pip install pyecharts\n",[46,148205,148206],{"__ignoreMap":44},[49,148207,148208,148210,148212],{"class":51,"line":52},[49,148209,25079],{"class":62},[49,148211,25082],{"class":1505},[49,148213,148214],{"class":1505}," pyecharts\n",[19,148216,148217],{},"验证：",[39,148219,148221],{"className":31626,"code":148220,"language":31628,"meta":44,"style":44},"import pyecharts\n\nprint(pyecharts.__version__)\n",[46,148222,148223,148229,148233],{"__ignoreMap":44},[49,148224,148225,148227],{"class":51,"line":52},[49,148226,31640],{"class":109},[49,148228,148214],{"class":66},[49,148230,148231],{"class":51,"line":59},[49,148232,3654],{"emptyLinePlaceholder":1330},[49,148234,148235,148237,148240,148243],{"class":51,"line":70},[49,148236,31663],{"class":73},[49,148238,148239],{"class":66},"(pyecharts.",[49,148241,148242],{"class":73},"__version__",[49,148244,1409],{"class":66},[19,148246,148247],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148249,148251],{"id":148250},"_104-第一个折线图","10.4 第一个折线图",[39,148253,148255],{"className":31626,"code":148254,"language":31628,"meta":44,"style":44},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[46,148256,148257,148269,148273,148283,148313,148345],{"__ignoreMap":44},[49,148258,148259,148261,148264,148266],{"class":51,"line":52},[49,148260,31985],{"class":109},[49,148262,148263],{"class":66}," pyecharts.charts ",[49,148265,31640],{"class":109},[49,148267,148268],{"class":66}," Line\n",[49,148270,148271],{"class":51,"line":59},[49,148272,3654],{"emptyLinePlaceholder":1330},[49,148274,148275,148278,148280],{"class":51,"line":70},[49,148276,148277],{"class":66},"line ",[49,148279,1448],{"class":109},[49,148281,148282],{"class":66}," Line()\n",[49,148284,148285,148288,148291,148293,148296,148298,148301,148303,148306,148308,148311],{"class":51,"line":86},[49,148286,148287],{"class":66},"line.add_xaxis([",[49,148289,148290],{"class":1505},"\"周一\"",[49,148292,13687],{"class":66},[49,148294,148295],{"class":1505},"\"周二\"",[49,148297,13687],{"class":66},[49,148299,148300],{"class":1505},"\"周三\"",[49,148302,13687],{"class":66},[49,148304,148305],{"class":1505},"\"周四\"",[49,148307,13687],{"class":66},[49,148309,148310],{"class":1505},"\"周五\"",[49,148312,5911],{"class":66},[49,148314,148315,148318,148321,148323,148325,148327,148329,148331,148333,148335,148338,148340,148343],{"class":51,"line":98},[49,148316,148317],{"class":66},"line.add_yaxis(",[49,148319,148320],{"class":1505},"\"销售额\"",[49,148322,78745],{"class":66},[49,148324,1703],{"class":73},[49,148326,13687],{"class":66},[49,148328,2207],{"class":73},[49,148330,13687],{"class":66},[49,148332,2252],{"class":73},[49,148334,13687],{"class":66},[49,148336,148337],{"class":73},"150",[49,148339,13687],{"class":66},[49,148341,148342],{"class":73},"180",[49,148344,5911],{"class":66},[49,148346,148347,148350,148353],{"class":51,"line":121},[49,148348,148349],{"class":66},"line.render(",[49,148351,148352],{"class":1505},"\"line.html\"",[49,148354,1409],{"class":66},[19,148356,148357,148358,148361],{},"运行后会生成 ",[46,148359,148360],{},"line.html","，用浏览器打开即可看到图表。",[19,148363,148364],{},"核心步骤：",[591,148366,148367,148370,148373,148376,148379],{},[26,148368,148369],{},"导入图表类。",[26,148371,148372],{},"创建图表对象。",[26,148374,148375],{},"添加 x 轴数据。",[26,148377,148378],{},"添加 y 轴数据。",[26,148380,148381],{},"渲染为 HTML。",[14,148383,148385],{"id":148384},"_105-全局配置","10.5 全局配置",[19,148387,148388,148389,148392],{},"常用配置在 ",[46,148390,148391],{},"pyecharts.options"," 中。",[39,148394,148396],{"className":31626,"code":148395,"language":31628,"meta":44,"style":44},"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",[46,148397,148398,148415,148425,148429,148437,148461,148489,148494,148513,148532,148550,148570,148574],{"__ignoreMap":44},[49,148399,148400,148402,148405,148407,148410,148412],{"class":51,"line":52},[49,148401,31985],{"class":109},[49,148403,148404],{"class":66}," pyecharts ",[49,148406,31640],{"class":109},[49,148408,148409],{"class":66}," options ",[49,148411,32631],{"class":109},[49,148413,148414],{"class":66}," opts\n",[49,148416,148417,148419,148421,148423],{"class":51,"line":59},[49,148418,31985],{"class":109},[49,148420,148263],{"class":66},[49,148422,31640],{"class":109},[49,148424,148268],{"class":66},[49,148426,148427],{"class":51,"line":70},[49,148428,3654],{"emptyLinePlaceholder":1330},[49,148430,148431,148433,148435],{"class":51,"line":86},[49,148432,148277],{"class":66},[49,148434,1448],{"class":109},[49,148436,148282],{"class":66},[49,148438,148439,148441,148443,148445,148447,148449,148451,148453,148455,148457,148459],{"class":51,"line":98},[49,148440,148287],{"class":66},[49,148442,148290],{"class":1505},[49,148444,13687],{"class":66},[49,148446,148295],{"class":1505},[49,148448,13687],{"class":66},[49,148450,148300],{"class":1505},[49,148452,13687],{"class":66},[49,148454,148305],{"class":1505},[49,148456,13687],{"class":66},[49,148458,148310],{"class":1505},[49,148460,5911],{"class":66},[49,148462,148463,148465,148467,148469,148471,148473,148475,148477,148479,148481,148483,148485,148487],{"class":51,"line":121},[49,148464,148317],{"class":66},[49,148466,148320],{"class":1505},[49,148468,78745],{"class":66},[49,148470,1703],{"class":73},[49,148472,13687],{"class":66},[49,148474,2207],{"class":73},[49,148476,13687],{"class":66},[49,148478,2252],{"class":73},[49,148480,13687],{"class":66},[49,148482,148337],{"class":73},[49,148484,13687],{"class":66},[49,148486,148342],{"class":73},[49,148488,5911],{"class":66},[49,148490,148491],{"class":51,"line":134},[49,148492,148493],{"class":66},"line.set_global_opts(\n",[49,148495,148496,148499,148501,148504,148506,148508,148511],{"class":51,"line":1085},[49,148497,148498],{"class":6468},"    title_opts",[49,148500,1448],{"class":109},[49,148502,148503],{"class":66},"opts.TitleOpts(",[49,148505,52654],{"class":6468},[49,148507,1448],{"class":109},[49,148509,148510],{"class":1505},"\"一周销售额\"",[49,148512,39295],{"class":66},[49,148514,148515,148518,148520,148523,148525,148527,148530],{"class":51,"line":2574},[49,148516,148517],{"class":6468},"    xaxis_opts",[49,148519,1448],{"class":109},[49,148521,148522],{"class":66},"opts.AxisOpts(",[49,148524,81036],{"class":6468},[49,148526,1448],{"class":109},[49,148528,148529],{"class":1505},"\"日期\"",[49,148531,39295],{"class":66},[49,148533,148534,148537,148539,148541,148543,148545,148548],{"class":51,"line":2586},[49,148535,148536],{"class":6468},"    yaxis_opts",[49,148538,1448],{"class":109},[49,148540,148522],{"class":66},[49,148542,81036],{"class":6468},[49,148544,1448],{"class":109},[49,148546,148547],{"class":1505},"\"金额\"",[49,148549,39295],{"class":66},[49,148551,148552,148555,148557,148560,148563,148565,148568],{"class":51,"line":2867},[49,148553,148554],{"class":6468},"    tooltip_opts",[49,148556,1448],{"class":109},[49,148558,148559],{"class":66},"opts.TooltipOpts(",[49,148561,148562],{"class":6468},"trigger",[49,148564,1448],{"class":109},[49,148566,148567],{"class":1505},"\"axis\"",[49,148569,39295],{"class":66},[49,148571,148572],{"class":51,"line":2872},[49,148573,1409],{"class":66},[49,148575,148576,148578,148580],{"class":51,"line":2878},[49,148577,148349],{"class":66},[49,148579,148352],{"class":1505},[49,148581,1409],{"class":66},[19,148583,148584],{},"常见全局配置：",[293,148586,148587,148596],{},[296,148588,148589],{},[299,148590,148591,148594],{},[302,148592,148593],{},"配置",[302,148595,103920],{},[310,148597,148598,148608,148618,148628,148638,148648],{},[299,148599,148600,148605],{},[315,148601,148602],{},[46,148603,148604],{},"TitleOpts",[315,148606,148607],{},"标题",[299,148609,148610,148615],{},[315,148611,148612],{},[46,148613,148614],{},"LegendOpts",[315,148616,148617],{},"图例",[299,148619,148620,148625],{},[315,148621,148622],{},[46,148623,148624],{},"TooltipOpts",[315,148626,148627],{},"提示框",[299,148629,148630,148635],{},[315,148631,148632],{},[46,148633,148634],{},"AxisOpts",[315,148636,148637],{},"坐标轴",[299,148639,148640,148645],{},[315,148641,148642],{},[46,148643,148644],{},"VisualMapOpts",[315,148646,148647],{},"视觉映射",[299,148649,148650,148655],{},[315,148651,148652],{},[46,148653,148654],{},"DataZoomOpts",[315,148656,148657],{},"区域缩放",[14,148659,148661],{"id":148660},"_106-系列配置","10.6 系列配置",[19,148663,148664],{},"系列配置作用于某一组数据。",[39,148666,148668],{"className":31626,"code":148667,"language":31628,"meta":44,"style":44},"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",[46,148669,148670,148675,148686,148715,148726,148745],{"__ignoreMap":44},[49,148671,148672],{"class":51,"line":52},[49,148673,148674],{"class":66},"line.add_yaxis(\n",[49,148676,148677,148680,148682,148684],{"class":51,"line":59},[49,148678,148679],{"class":6468},"    series_name",[49,148681,1448],{"class":109},[49,148683,148320],{"class":1505},[49,148685,32714],{"class":66},[49,148687,148688,148691,148693,148695,148697,148699,148701,148703,148705,148707,148709,148711,148713],{"class":51,"line":70},[49,148689,148690],{"class":6468},"    y_axis",[49,148692,1448],{"class":109},[49,148694,2280],{"class":66},[49,148696,1703],{"class":73},[49,148698,13687],{"class":66},[49,148700,2207],{"class":73},[49,148702,13687],{"class":66},[49,148704,2252],{"class":73},[49,148706,13687],{"class":66},[49,148708,148337],{"class":73},[49,148710,13687],{"class":66},[49,148712,148342],{"class":73},[49,148714,89061],{"class":66},[49,148716,148717,148720,148722,148724],{"class":51,"line":86},[49,148718,148719],{"class":6468},"    is_smooth",[49,148721,1448],{"class":109},[49,148723,32724],{"class":73},[49,148725,32714],{"class":66},[49,148727,148728,148731,148733,148736,148739,148741,148743],{"class":51,"line":98},[49,148729,148730],{"class":6468},"    label_opts",[49,148732,1448],{"class":109},[49,148734,148735],{"class":66},"opts.LabelOpts(",[49,148737,148738],{"class":6468},"is_show",[49,148740,1448],{"class":109},[49,148742,32724],{"class":73},[49,148744,39295],{"class":66},[49,148746,148747],{"class":51,"line":121},[49,148748,1409],{"class":66},[19,148750,148751],{},"常用参数：",[591,148753,148754,148760,148766,148772,148778],{},[26,148755,148756,148759],{},[46,148757,148758],{},"series_name","：系列名称。",[26,148761,148762,148765],{},[46,148763,148764],{},"y_axis","：y 轴数据。",[26,148767,148768,148771],{},[46,148769,148770],{},"is_smooth","：是否平滑曲线。",[26,148773,148774,148777],{},[46,148775,148776],{},"label_opts","：标签配置。",[26,148779,148780,148783],{},[46,148781,148782],{},"symbol_size","：标记点大小。",[14,148785,148787],{"id":148786},"_107-多条折线","10.7 多条折线",[39,148789,148791],{"className":31626,"code":148790,"language":31628,"meta":44,"style":44},"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",[46,148792,148793,148807,148817,148821,148850,148854,148862,148867,148905,148942,148946,148963,148979,148983],{"__ignoreMap":44},[49,148794,148795,148797,148799,148801,148803,148805],{"class":51,"line":52},[49,148796,31985],{"class":109},[49,148798,148404],{"class":66},[49,148800,31640],{"class":109},[49,148802,148409],{"class":66},[49,148804,32631],{"class":109},[49,148806,148414],{"class":66},[49,148808,148809,148811,148813,148815],{"class":51,"line":59},[49,148810,31985],{"class":109},[49,148812,148263],{"class":66},[49,148814,31640],{"class":109},[49,148816,148268],{"class":66},[49,148818,148819],{"class":51,"line":70},[49,148820,3654],{"emptyLinePlaceholder":1330},[49,148822,148823,148826,148828,148830,148832,148834,148836,148838,148840,148842,148844,148846,148848],{"class":51,"line":86},[49,148824,148825],{"class":66},"dates ",[49,148827,1448],{"class":109},[49,148829,53468],{"class":66},[49,148831,148290],{"class":1505},[49,148833,13687],{"class":66},[49,148835,148295],{"class":1505},[49,148837,13687],{"class":66},[49,148839,148300],{"class":1505},[49,148841,13687],{"class":66},[49,148843,148305],{"class":1505},[49,148845,13687],{"class":66},[49,148847,148310],{"class":1505},[49,148849,34494],{"class":66},[49,148851,148852],{"class":51,"line":98},[49,148853,3654],{"emptyLinePlaceholder":1330},[49,148855,148856,148858,148860],{"class":51,"line":121},[49,148857,148277],{"class":66},[49,148859,1448],{"class":109},[49,148861,148282],{"class":66},[49,148863,148864],{"class":51,"line":134},[49,148865,148866],{"class":66},"line.add_xaxis(dates)\n",[49,148868,148869,148871,148874,148876,148878,148880,148883,148885,148887,148889,148891,148893,148895,148897,148899,148901,148903],{"class":51,"line":1085},[49,148870,148317],{"class":66},[49,148872,148873],{"class":1505},"\"线上销售\"",[49,148875,78745],{"class":66},[49,148877,1703],{"class":73},[49,148879,13687],{"class":66},[49,148881,148882],{"class":73},"130",[49,148884,13687],{"class":66},[49,148886,2207],{"class":73},[49,148888,13687],{"class":66},[49,148890,22298],{"class":73},[49,148892,13687],{"class":66},[49,148894,2977],{"class":73},[49,148896,113426],{"class":66},[49,148898,148770],{"class":6468},[49,148900,1448],{"class":109},[49,148902,32724],{"class":73},[49,148904,1409],{"class":66},[49,148906,148907,148909,148912,148914,148916,148918,148920,148922,148924,148926,148928,148930,148932,148934,148936,148938,148940],{"class":51,"line":2574},[49,148908,148317],{"class":66},[49,148910,148911],{"class":1505},"\"线下销售\"",[49,148913,78745],{"class":66},[49,148915,2003],{"class":73},[49,148917,13687],{"class":66},[49,148919,2252],{"class":73},[49,148921,13687],{"class":66},[49,148923,1703],{"class":73},[49,148925,13687],{"class":66},[49,148927,2207],{"class":73},[49,148929,13687],{"class":66},[49,148931,148337],{"class":73},[49,148933,113426],{"class":66},[49,148935,148770],{"class":6468},[49,148937,1448],{"class":109},[49,148939,32724],{"class":73},[49,148941,1409],{"class":66},[49,148943,148944],{"class":51,"line":2586},[49,148945,148493],{"class":66},[49,148947,148948,148950,148952,148954,148956,148958,148961],{"class":51,"line":2867},[49,148949,148498],{"class":6468},[49,148951,1448],{"class":109},[49,148953,148503],{"class":66},[49,148955,52654],{"class":6468},[49,148957,1448],{"class":109},[49,148959,148960],{"class":1505},"\"线上线下销售趋势\"",[49,148962,39295],{"class":66},[49,148964,148965,148967,148969,148971,148973,148975,148977],{"class":51,"line":2872},[49,148966,148554],{"class":6468},[49,148968,1448],{"class":109},[49,148970,148559],{"class":66},[49,148972,148562],{"class":6468},[49,148974,1448],{"class":109},[49,148976,148567],{"class":1505},[49,148978,39295],{"class":66},[49,148980,148981],{"class":51,"line":2878},[49,148982,1409],{"class":66},[49,148984,148985,148987,148990],{"class":51,"line":2883},[49,148986,148349],{"class":66},[49,148988,148989],{"class":1505},"\"sales.html\"",[49,148991,1409],{"class":66},[19,148993,148994],{},"多条折线适合比较不同指标或不同地区。",[14,148996,148998],{"id":148997},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149000,149001,149002,25867],{},"假设 ",[46,149003,149004],{},"sales.json",[39,149006,149008],{"className":148070,"code":149007,"language":146817,"meta":44,"style":44},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[46,149009,149010,149015,149047,149075,149103],{"__ignoreMap":44},[49,149011,149012],{"class":51,"line":52},[49,149013,149014],{"class":66},"[\n",[49,149016,149017,149020,149023,149025,149027,149029,149032,149034,149036,149038,149041,149043,149045],{"class":51,"line":59},[49,149018,149019],{"class":66},"  {",[49,149021,149022],{"class":73},"\"date\"",[49,149024,77],{"class":66},[49,149026,148290],{"class":1505},[49,149028,13687],{"class":66},[49,149030,149031],{"class":73},"\"online\"",[49,149033,77],{"class":66},[49,149035,1703],{"class":73},[49,149037,13687],{"class":66},[49,149039,149040],{"class":73},"\"offline\"",[49,149042,77],{"class":66},[49,149044,2003],{"class":73},[49,149046,6184],{"class":66},[49,149048,149049,149051,149053,149055,149057,149059,149061,149063,149065,149067,149069,149071,149073],{"class":51,"line":70},[49,149050,149019],{"class":66},[49,149052,149022],{"class":73},[49,149054,77],{"class":66},[49,149056,148295],{"class":1505},[49,149058,13687],{"class":66},[49,149060,149031],{"class":73},[49,149062,77],{"class":66},[49,149064,148882],{"class":73},[49,149066,13687],{"class":66},[49,149068,149040],{"class":73},[49,149070,77],{"class":66},[49,149072,2252],{"class":73},[49,149074,6184],{"class":66},[49,149076,149077,149079,149081,149083,149085,149087,149089,149091,149093,149095,149097,149099,149101],{"class":51,"line":86},[49,149078,149019],{"class":66},[49,149080,149022],{"class":73},[49,149082,77],{"class":66},[49,149084,148300],{"class":1505},[49,149086,13687],{"class":66},[49,149088,149031],{"class":73},[49,149090,77],{"class":66},[49,149092,2207],{"class":73},[49,149094,13687],{"class":66},[49,149096,149040],{"class":73},[49,149098,77],{"class":66},[49,149100,1703],{"class":73},[49,149102,137],{"class":66},[49,149104,149105],{"class":51,"line":98},[49,149106,34494],{"class":66},[19,149108,149109],{},"读取并绘图：",[39,149111,149113],{"className":31626,"code":149112,"language":31628,"meta":44,"style":44},"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",[46,149114,149115,149121,149135,149145,149149,149181,149194,149198,149206,149215,149224,149228,149240,149249,149258,149267,149271,149279,149283,149300,149317,149321,149338,149354,149358],{"__ignoreMap":44},[49,149116,149117,149119],{"class":51,"line":52},[49,149118,31640],{"class":109},[49,149120,148116],{"class":66},[49,149122,149123,149125,149127,149129,149131,149133],{"class":51,"line":59},[49,149124,31985],{"class":109},[49,149126,148404],{"class":66},[49,149128,31640],{"class":109},[49,149130,148409],{"class":66},[49,149132,32631],{"class":109},[49,149134,148414],{"class":66},[49,149136,149137,149139,149141,149143],{"class":51,"line":70},[49,149138,31985],{"class":109},[49,149140,148263],{"class":66},[49,149142,31640],{"class":109},[49,149144,148268],{"class":66},[49,149146,149147],{"class":51,"line":86},[49,149148,3654],{"emptyLinePlaceholder":1330},[49,149150,149151,149153,149155,149157,149160,149162,149164,149166,149168,149170,149172,149174,149176,149179],{"class":51,"line":98},[49,149152,109057],{"class":109},[49,149154,147816],{"class":73},[49,149156,1403],{"class":66},[49,149158,149159],{"class":1505},"\"sales.json\"",[49,149161,13687],{"class":66},[49,149163,147826],{"class":1505},[49,149165,13687],{"class":66},[49,149167,147831],{"class":6468},[49,149169,1448],{"class":109},[49,149171,147836],{"class":1505},[49,149173,14966],{"class":66},[49,149175,32631],{"class":109},[49,149177,149178],{"class":6468}," file",[49,149180,4993],{"class":66},[49,149182,149183,149185,149187,149190,149192],{"class":51,"line":121},[49,149184,102645],{"class":66},[49,149186,1448],{"class":109},[49,149188,149189],{"class":66}," json.load(",[49,149191,46602],{"class":6468},[49,149193,1409],{"class":66},[49,149195,149196],{"class":51,"line":134},[49,149197,3654],{"emptyLinePlaceholder":1330},[49,149199,149200,149202,149204],{"class":51,"line":1085},[49,149201,148825],{"class":66},[49,149203,1448],{"class":109},[49,149205,53080],{"class":66},[49,149207,149208,149211,149213],{"class":51,"line":2574},[49,149209,149210],{"class":66},"online_sales ",[49,149212,1448],{"class":109},[49,149214,53080],{"class":66},[49,149216,149217,149220,149222],{"class":51,"line":2586},[49,149218,149219],{"class":66},"offline_sales ",[49,149221,1448],{"class":109},[49,149223,53080],{"class":66},[49,149225,149226],{"class":51,"line":2867},[49,149227,3654],{"emptyLinePlaceholder":1330},[49,149229,149230,149232,149235,149237],{"class":51,"line":2872},[49,149231,4279],{"class":109},[49,149233,149234],{"class":66}," item ",[49,149236,27292],{"class":109},[49,149238,149239],{"class":66}," data:\n",[49,149241,149242,149245,149247],{"class":51,"line":2878},[49,149243,149244],{"class":66},"    dates.append(item[",[49,149246,149022],{"class":1505},[49,149248,5911],{"class":66},[49,149250,149251,149254,149256],{"class":51,"line":2883},[49,149252,149253],{"class":66},"    online_sales.append(item[",[49,149255,149031],{"class":1505},[49,149257,5911],{"class":66},[49,149259,149260,149263,149265],{"class":51,"line":2897},[49,149261,149262],{"class":66},"    offline_sales.append(item[",[49,149264,149040],{"class":1505},[49,149266,5911],{"class":66},[49,149268,149269],{"class":51,"line":2902},[49,149270,3654],{"emptyLinePlaceholder":1330},[49,149272,149273,149275,149277],{"class":51,"line":2908},[49,149274,148277],{"class":66},[49,149276,1448],{"class":109},[49,149278,148282],{"class":66},[49,149280,149281],{"class":51,"line":2929},[49,149282,148866],{"class":66},[49,149284,149285,149287,149289,149292,149294,149296,149298],{"class":51,"line":2934},[49,149286,148317],{"class":66},[49,149288,148873],{"class":1505},[49,149290,149291],{"class":66},", online_sales, ",[49,149293,148770],{"class":6468},[49,149295,1448],{"class":109},[49,149297,32724],{"class":73},[49,149299,1409],{"class":66},[49,149301,149302,149304,149306,149309,149311,149313,149315],{"class":51,"line":2948},[49,149303,148317],{"class":66},[49,149305,148911],{"class":1505},[49,149307,149308],{"class":66},", offline_sales, ",[49,149310,148770],{"class":6468},[49,149312,1448],{"class":109},[49,149314,32724],{"class":73},[49,149316,1409],{"class":66},[49,149318,149319],{"class":51,"line":2953},[49,149320,148493],{"class":66},[49,149322,149323,149325,149327,149329,149331,149333,149336],{"class":51,"line":2982},[49,149324,148498],{"class":6468},[49,149326,1448],{"class":109},[49,149328,148503],{"class":66},[49,149330,52654],{"class":6468},[49,149332,1448],{"class":109},[49,149334,149335],{"class":1505},"\"销售趋势\"",[49,149337,39295],{"class":66},[49,149339,149340,149342,149344,149346,149348,149350,149352],{"class":51,"line":2987},[49,149341,148554],{"class":6468},[49,149343,1448],{"class":109},[49,149345,148559],{"class":66},[49,149347,148562],{"class":6468},[49,149349,1448],{"class":109},[49,149351,148567],{"class":1505},[49,149353,39295],{"class":66},[49,149355,149356],{"class":51,"line":3004},[49,149357,1409],{"class":66},[49,149359,149360,149362,149364],{"class":51,"line":3009},[49,149361,148349],{"class":66},[49,149363,148989],{"class":1505},[49,149365,1409],{"class":66},[14,149367,149369],{"id":149368},"_109-数据清洗","10.9 数据清洗",[19,149371,149372],{},"真实数据经常不整齐，需要清洗。",[19,149374,149375],{},"常见问题：",[591,149377,149378,149381,149384,149387],{},[26,149379,149380],{},"数字是字符串。",[26,149382,149383],{},"字段缺失。",[26,149385,149386],{},"空值。",[26,149388,149389],{},"日期格式不统一。",[19,149391,16386],{},[39,149393,149395],{"className":31626,"code":149394,"language":31628,"meta":44,"style":44},"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",[46,149396,149397,149406,149429,149449,149470,149474,149478,149486,149495,149499,149510,149524,149533,149538,149542,149550,149560,149564,149571],{"__ignoreMap":44},[49,149398,149399,149402,149404],{"class":51,"line":52},[49,149400,149401],{"class":66},"raw_data ",[49,149403,1448],{"class":109},[49,149405,56686],{"class":66},[49,149407,149408,149411,149413,149415,149417,149419,149422,149424,149427],{"class":51,"line":59},[49,149409,149410],{"class":66},"    {",[49,149412,149022],{"class":1505},[49,149414,77],{"class":66},[49,149416,148290],{"class":1505},[49,149418,13687],{"class":66},[49,149420,149421],{"class":1505},"\"sales\"",[49,149423,77],{"class":66},[49,149425,149426],{"class":1505},"\"100\"",[49,149428,6184],{"class":66},[49,149430,149431,149433,149435,149437,149439,149441,149443,149445,149447],{"class":51,"line":70},[49,149432,149410],{"class":66},[49,149434,149022],{"class":1505},[49,149436,77],{"class":66},[49,149438,148295],{"class":1505},[49,149440,13687],{"class":66},[49,149442,149421],{"class":1505},[49,149444,77],{"class":66},[49,149446,8904],{"class":1505},[49,149448,6184],{"class":66},[49,149450,149451,149453,149455,149457,149459,149461,149463,149465,149468],{"class":51,"line":86},[49,149452,149410],{"class":66},[49,149454,149022],{"class":1505},[49,149456,77],{"class":66},[49,149458,148300],{"class":1505},[49,149460,13687],{"class":66},[49,149462,149421],{"class":1505},[49,149464,77],{"class":66},[49,149466,149467],{"class":1505},"\"120\"",[49,149469,6184],{"class":66},[49,149471,149472],{"class":51,"line":98},[49,149473,34494],{"class":66},[49,149475,149476],{"class":51,"line":121},[49,149477,3654],{"emptyLinePlaceholder":1330},[49,149479,149480,149482,149484],{"class":51,"line":134},[49,149481,148825],{"class":66},[49,149483,1448],{"class":109},[49,149485,53080],{"class":66},[49,149487,149488,149491,149493],{"class":51,"line":1085},[49,149489,149490],{"class":66},"sales ",[49,149492,1448],{"class":109},[49,149494,53080],{"class":66},[49,149496,149497],{"class":51,"line":2574},[49,149498,3654],{"emptyLinePlaceholder":1330},[49,149500,149501,149503,149505,149507],{"class":51,"line":2586},[49,149502,4279],{"class":109},[49,149504,149234],{"class":66},[49,149506,27292],{"class":109},[49,149508,149509],{"class":66}," raw_data:\n",[49,149511,149512,149515,149517,149520,149522],{"class":51,"line":2867},[49,149513,149514],{"class":66},"    value ",[49,149516,1448],{"class":109},[49,149518,149519],{"class":66}," item.get(",[49,149521,149421],{"class":1505},[49,149523,1409],{"class":66},[49,149525,149526,149528,149530],{"class":51,"line":2872},[49,149527,4355],{"class":109},[49,149529,40178],{"class":109},[49,149531,149532],{"class":66}," value:\n",[49,149534,149535],{"class":51,"line":2878},[49,149536,149537],{"class":109},"        continue\n",[49,149539,149540],{"class":51,"line":2883},[49,149541,3654],{"emptyLinePlaceholder":1330},[49,149543,149544,149546,149548],{"class":51,"line":2897},[49,149545,149244],{"class":66},[49,149547,149022],{"class":1505},[49,149549,5911],{"class":66},[49,149551,149552,149555,149557],{"class":51,"line":2902},[49,149553,149554],{"class":66},"    sales.append(",[49,149556,1406],{"class":73},[49,149558,149559],{"class":66},"(value))\n",[49,149561,149562],{"class":51,"line":2908},[49,149563,3654],{"emptyLinePlaceholder":1330},[49,149565,149566,149568],{"class":51,"line":2929},[49,149567,31663],{"class":73},[49,149569,149570],{"class":66},"(dates)\n",[49,149572,149573,149575],{"class":51,"line":2934},[49,149574,31663],{"class":73},[49,149576,149577],{"class":66},"(sales)\n",[14,149579,149581],{"id":149580},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[39,149583,149585],{"className":31626,"code":149584,"language":31628,"meta":44,"style":44},"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",[46,149586,149587,149601,149611,149615,149623,149644,149666,149688,149710,149732,149736,149740,149762,149783,149787,149795,149799,149803,149813,149822,149832,149848,149852,149856,149873,149889,149905,149921,149931,149935],{"__ignoreMap":44},[49,149588,149589,149591,149593,149595,149597,149599],{"class":51,"line":52},[49,149590,31985],{"class":109},[49,149592,148404],{"class":66},[49,149594,31640],{"class":109},[49,149596,148409],{"class":66},[49,149598,32631],{"class":109},[49,149600,148414],{"class":66},[49,149602,149603,149605,149607,149609],{"class":51,"line":59},[49,149604,31985],{"class":109},[49,149606,148263],{"class":66},[49,149608,31640],{"class":109},[49,149610,148268],{"class":66},[49,149612,149613],{"class":51,"line":70},[49,149614,3654],{"emptyLinePlaceholder":1330},[49,149616,149617,149619,149621],{"class":51,"line":86},[49,149618,149490],{"class":66},[49,149620,1448],{"class":109},[49,149622,56686],{"class":66},[49,149624,149625,149627,149629,149631,149634,149636,149638,149640,149642],{"class":51,"line":98},[49,149626,149410],{"class":66},[49,149628,149022],{"class":1505},[49,149630,77],{"class":66},[49,149632,149633],{"class":1505},"\"2024-10-01\"",[49,149635,13687],{"class":66},[49,149637,85309],{"class":1505},[49,149639,77],{"class":66},[49,149641,93248],{"class":73},[49,149643,6184],{"class":66},[49,149645,149646,149648,149650,149652,149655,149657,149659,149661,149664],{"class":51,"line":121},[49,149647,149410],{"class":66},[49,149649,149022],{"class":1505},[49,149651,77],{"class":66},[49,149653,149654],{"class":1505},"\"2024-10-02\"",[49,149656,13687],{"class":66},[49,149658,85309],{"class":1505},[49,149660,77],{"class":66},[49,149662,149663],{"class":73},"1800",[49,149665,6184],{"class":66},[49,149667,149668,149670,149672,149674,149677,149679,149681,149683,149686],{"class":51,"line":134},[49,149669,149410],{"class":66},[49,149671,149022],{"class":1505},[49,149673,77],{"class":66},[49,149675,149676],{"class":1505},"\"2024-10-03\"",[49,149678,13687],{"class":66},[49,149680,85309],{"class":1505},[49,149682,77],{"class":66},[49,149684,149685],{"class":73},"1500",[49,149687,6184],{"class":66},[49,149689,149690,149692,149694,149696,149699,149701,149703,149705,149708],{"class":51,"line":1085},[49,149691,149410],{"class":66},[49,149693,149022],{"class":1505},[49,149695,77],{"class":66},[49,149697,149698],{"class":1505},"\"2024-10-04\"",[49,149700,13687],{"class":66},[49,149702,85309],{"class":1505},[49,149704,77],{"class":66},[49,149706,149707],{"class":73},"2100",[49,149709,6184],{"class":66},[49,149711,149712,149714,149716,149718,149721,149723,149725,149727,149730],{"class":51,"line":2574},[49,149713,149410],{"class":66},[49,149715,149022],{"class":1505},[49,149717,77],{"class":66},[49,149719,149720],{"class":1505},"\"2024-10-05\"",[49,149722,13687],{"class":66},[49,149724,85309],{"class":1505},[49,149726,77],{"class":66},[49,149728,149729],{"class":73},"2600",[49,149731,6184],{"class":66},[49,149733,149734],{"class":51,"line":2586},[49,149735,34494],{"class":66},[49,149737,149738],{"class":51,"line":2867},[49,149739,3654],{"emptyLinePlaceholder":1330},[49,149741,149742,149744,149746,149749,149751,149753,149755,149757,149759],{"class":51,"line":2872},[49,149743,148825],{"class":66},[49,149745,1448],{"class":109},[49,149747,149748],{"class":66}," [item[",[49,149750,149022],{"class":1505},[49,149752,5697],{"class":66},[49,149754,4279],{"class":109},[49,149756,149234],{"class":66},[49,149758,27292],{"class":109},[49,149760,149761],{"class":66}," sales]\n",[49,149763,149764,149767,149769,149771,149773,149775,149777,149779,149781],{"class":51,"line":2878},[49,149765,149766],{"class":66},"amounts ",[49,149768,1448],{"class":109},[49,149770,149748],{"class":66},[49,149772,85309],{"class":1505},[49,149774,5697],{"class":66},[49,149776,4279],{"class":109},[49,149778,149234],{"class":66},[49,149780,27292],{"class":109},[49,149782,149761],{"class":66},[49,149784,149785],{"class":51,"line":2883},[49,149786,3654],{"emptyLinePlaceholder":1330},[49,149788,149789,149791,149793],{"class":51,"line":2897},[49,149790,148277],{"class":66},[49,149792,1448],{"class":109},[49,149794,148282],{"class":66},[49,149796,149797],{"class":51,"line":2902},[49,149798,148866],{"class":66},[49,149800,149801],{"class":51,"line":2908},[49,149802,148674],{"class":66},[49,149804,149805,149807,149809,149811],{"class":51,"line":2929},[49,149806,148679],{"class":6468},[49,149808,1448],{"class":109},[49,149810,148320],{"class":1505},[49,149812,32714],{"class":66},[49,149814,149815,149817,149819],{"class":51,"line":2934},[49,149816,148690],{"class":6468},[49,149818,1448],{"class":109},[49,149820,149821],{"class":66},"amounts,\n",[49,149823,149824,149826,149828,149830],{"class":51,"line":2948},[49,149825,148719],{"class":6468},[49,149827,1448],{"class":109},[49,149829,32724],{"class":73},[49,149831,32714],{"class":66},[49,149833,149834,149836,149838,149840,149842,149844,149846],{"class":51,"line":2953},[49,149835,148730],{"class":6468},[49,149837,1448],{"class":109},[49,149839,148735],{"class":66},[49,149841,148738],{"class":6468},[49,149843,1448],{"class":109},[49,149845,32724],{"class":73},[49,149847,39295],{"class":66},[49,149849,149850],{"class":51,"line":2982},[49,149851,1409],{"class":66},[49,149853,149854],{"class":51,"line":2987},[49,149855,148493],{"class":66},[49,149857,149858,149860,149862,149864,149866,149868,149871],{"class":51,"line":3004},[49,149859,148498],{"class":6468},[49,149861,1448],{"class":109},[49,149863,148503],{"class":66},[49,149865,52654],{"class":6468},[49,149867,1448],{"class":109},[49,149869,149870],{"class":1505},"\"每日销售额\"",[49,149872,39295],{"class":66},[49,149874,149875,149877,149879,149881,149883,149885,149887],{"class":51,"line":3009},[49,149876,148517],{"class":6468},[49,149878,1448],{"class":109},[49,149880,148522],{"class":66},[49,149882,81036],{"class":6468},[49,149884,1448],{"class":109},[49,149886,148529],{"class":1505},[49,149888,39295],{"class":66},[49,149890,149891,149893,149895,149897,149899,149901,149903],{"class":51,"line":3014},[49,149892,148536],{"class":6468},[49,149894,1448],{"class":109},[49,149896,148522],{"class":66},[49,149898,81036],{"class":6468},[49,149900,1448],{"class":109},[49,149902,148547],{"class":1505},[49,149904,39295],{"class":66},[49,149906,149907,149909,149911,149913,149915,149917,149919],{"class":51,"line":3019},[49,149908,148554],{"class":6468},[49,149910,1448],{"class":109},[49,149912,148559],{"class":66},[49,149914,148562],{"class":6468},[49,149916,1448],{"class":109},[49,149918,148567],{"class":1505},[49,149920,39295],{"class":66},[49,149922,149923,149926,149928],{"class":51,"line":3033},[49,149924,149925],{"class":6468},"    datazoom_opts",[49,149927,1448],{"class":109},[49,149929,149930],{"class":66},"[opts.DataZoomOpts()],\n",[49,149932,149933],{"class":51,"line":3038},[49,149934,1409],{"class":66},[49,149936,149937,149939,149942],{"class":51,"line":3831},[49,149938,148349],{"class":66},[49,149940,149941],{"class":1505},"\"daily_sales.html\"",[49,149943,1409],{"class":66},[19,149945,149946,149949],{},[46,149947,149948],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149951,149953],{"id":149952},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149955,149956],{},"如果数据结构如下：",[39,149958,149960],{"className":31626,"code":149959,"language":31628,"meta":44,"style":44},"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",[46,149961,149962,149970,149978,150000,150021,150026,150033,150053,150073,150077],{"__ignoreMap":44},[49,149963,149964,149966,149968],{"class":51,"line":52},[49,149965,102882],{"class":66},[49,149967,1448],{"class":109},[49,149969,67],{"class":66},[49,149971,149972,149975],{"class":51,"line":59},[49,149973,149974],{"class":1505},"    \"北京\"",[49,149976,149977],{"class":66},": [\n",[49,149979,149980,149982,149984,149986,149989,149991,149994,149996,149998],{"class":51,"line":70},[49,149981,6171],{"class":66},[49,149983,149022],{"class":1505},[49,149985,77],{"class":66},[49,149987,149988],{"class":1505},"\"2024-01-01\"",[49,149990,13687],{"class":66},[49,149992,149993],{"class":1505},"\"confirm\"",[49,149995,77],{"class":66},[49,149997,106],{"class":73},[49,149999,6184],{"class":66},[49,150001,150002,150004,150006,150008,150011,150013,150015,150017,150019],{"class":51,"line":86},[49,150003,6171],{"class":66},[49,150005,149022],{"class":1505},[49,150007,77],{"class":66},[49,150009,150010],{"class":1505},"\"2024-01-02\"",[49,150012,13687],{"class":66},[49,150014,149993],{"class":1505},[49,150016,77],{"class":66},[49,150018,1889],{"class":73},[49,150020,6184],{"class":66},[49,150022,150023],{"class":51,"line":98},[49,150024,150025],{"class":66},"    ],\n",[49,150027,150028,150031],{"class":51,"line":121},[49,150029,150030],{"class":1505},"    \"上海\"",[49,150032,149977],{"class":66},[49,150034,150035,150037,150039,150041,150043,150045,150047,150049,150051],{"class":51,"line":134},[49,150036,6171],{"class":66},[49,150038,149022],{"class":1505},[49,150040,77],{"class":66},[49,150042,149988],{"class":1505},[49,150044,13687],{"class":66},[49,150046,149993],{"class":1505},[49,150048,77],{"class":66},[49,150050,1787],{"class":73},[49,150052,6184],{"class":66},[49,150054,150055,150057,150059,150061,150063,150065,150067,150069,150071],{"class":51,"line":1085},[49,150056,6171],{"class":66},[49,150058,149022],{"class":1505},[49,150060,77],{"class":66},[49,150062,150010],{"class":1505},[49,150064,13687],{"class":66},[49,150066,149993],{"class":1505},[49,150068,77],{"class":66},[49,150070,1914],{"class":73},[49,150072,6184],{"class":66},[49,150074,150075],{"class":51,"line":2574},[49,150076,150025],{"class":66},[49,150078,150079],{"class":51,"line":2586},[49,150080,137],{"class":66},[19,150082,150083],{},"绘制多地区趋势：",[39,150085,150087],{"className":31626,"code":150086,"language":31628,"meta":44,"style":44},"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",[46,150088,150089,150103,150113,150117,150142,150146,150154,150158,150162,150174,150196,150209,150213,150217,150234,150250,150254],{"__ignoreMap":44},[49,150090,150091,150093,150095,150097,150099,150101],{"class":51,"line":52},[49,150092,31985],{"class":109},[49,150094,148404],{"class":66},[49,150096,31640],{"class":109},[49,150098,148409],{"class":66},[49,150100,32631],{"class":109},[49,150102,148414],{"class":66},[49,150104,150105,150107,150109,150111],{"class":51,"line":59},[49,150106,31985],{"class":109},[49,150108,148263],{"class":66},[49,150110,31640],{"class":109},[49,150112,148268],{"class":66},[49,150114,150115],{"class":51,"line":70},[49,150116,3654],{"emptyLinePlaceholder":1330},[49,150118,150119,150121,150123,150125,150127,150129,150131,150133,150135,150138,150140],{"class":51,"line":86},[49,150120,148825],{"class":66},[49,150122,1448],{"class":109},[49,150124,149748],{"class":66},[49,150126,149022],{"class":1505},[49,150128,5697],{"class":66},[49,150130,4279],{"class":109},[49,150132,149234],{"class":66},[49,150134,27292],{"class":109},[49,150136,150137],{"class":66}," data[",[49,150139,70504],{"class":1505},[49,150141,78754],{"class":66},[49,150143,150144],{"class":51,"line":98},[49,150145,3654],{"emptyLinePlaceholder":1330},[49,150147,150148,150150,150152],{"class":51,"line":121},[49,150149,148277],{"class":66},[49,150151,1448],{"class":109},[49,150153,148282],{"class":66},[49,150155,150156],{"class":51,"line":134},[49,150157,148866],{"class":66},[49,150159,150160],{"class":51,"line":1085},[49,150161,3654],{"emptyLinePlaceholder":1330},[49,150163,150164,150166,150169,150171],{"class":51,"line":2574},[49,150165,4279],{"class":109},[49,150167,150168],{"class":66}," city, records ",[49,150170,27292],{"class":109},[49,150172,150173],{"class":66}," data.items():\n",[49,150175,150176,150179,150181,150183,150185,150187,150189,150191,150193],{"class":51,"line":2586},[49,150177,150178],{"class":66},"    values ",[49,150180,1448],{"class":109},[49,150182,149748],{"class":66},[49,150184,149993],{"class":1505},[49,150186,5697],{"class":66},[49,150188,4279],{"class":109},[49,150190,149234],{"class":66},[49,150192,27292],{"class":109},[49,150194,150195],{"class":66}," records]\n",[49,150197,150198,150201,150203,150205,150207],{"class":51,"line":2867},[49,150199,150200],{"class":66},"    line.add_yaxis(city, values, ",[49,150202,148770],{"class":6468},[49,150204,1448],{"class":109},[49,150206,32724],{"class":73},[49,150208,1409],{"class":66},[49,150210,150211],{"class":51,"line":2872},[49,150212,3654],{"emptyLinePlaceholder":1330},[49,150214,150215],{"class":51,"line":2878},[49,150216,148493],{"class":66},[49,150218,150219,150221,150223,150225,150227,150229,150232],{"class":51,"line":2883},[49,150220,148498],{"class":6468},[49,150222,1448],{"class":109},[49,150224,148503],{"class":66},[49,150226,52654],{"class":6468},[49,150228,1448],{"class":109},[49,150230,150231],{"class":1505},"\"多地区趋势图\"",[49,150233,39295],{"class":66},[49,150235,150236,150238,150240,150242,150244,150246,150248],{"class":51,"line":2897},[49,150237,148554],{"class":6468},[49,150239,1448],{"class":109},[49,150241,148559],{"class":66},[49,150243,148562],{"class":6468},[49,150245,1448],{"class":109},[49,150247,148567],{"class":1505},[49,150249,39295],{"class":66},[49,150251,150252],{"class":51,"line":2902},[49,150253,1409],{"class":66},[49,150255,150256,150258,150261],{"class":51,"line":2908},[49,150257,148349],{"class":66},[49,150259,150260],{"class":1505},"\"trend.html\"",[49,150262,1409],{"class":66},[19,150264,150265],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150267,150269],{"id":150268},"_1012-易错点","10.12 易错点",[591,150271,150272,150278,150284,150294,150300],{},[26,150273,150274,150277],{},[46,150275,150276],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[26,150279,150280,150283],{},[46,150281,150282],{},"render()"," 生成的是 HTML，不是图片。",[26,150285,150286,150287,150290,150291,29633],{},"JSON 字符串用 ",[46,150288,150289],{},"json.loads()","，JSON 文件用 ",[46,150292,150293],{},"json.load()",[26,150295,150296,150297,29633],{},"中文 JSON 保存时加 ",[46,150298,150299],{},"ensure_ascii=False",[26,150301,150302],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150304,150306],{"id":150305},"_1013-本章练习","10.13 本章练习",[591,150308,150309,150312,150315,150318,150321],{},[26,150310,150311],{},"安装 pyecharts 并生成第一个折线图。",[26,150313,150314],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[26,150316,150317],{},"绘制两条折线，对比线上和线下销售额。",[26,150319,150320],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[26,150322,150323],{},"对含有空值的销售数据进行清洗后再绘图。",[1305,150325,150326],{},"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":44,"searchDepth":59,"depth":59,"links":150328},[150329,150330,150331,150332,150333,150334,150335,150336,150337,150338,150339,150340,150341],{"id":147945,"depth":59,"text":147946},{"id":148020,"depth":59,"text":148021},{"id":148199,"depth":59,"text":148200},{"id":148250,"depth":59,"text":148251},{"id":148384,"depth":59,"text":148385},{"id":148660,"depth":59,"text":148661},{"id":148786,"depth":59,"text":148787},{"id":148997,"depth":59,"text":148998},{"id":149368,"depth":59,"text":149369},{"id":149580,"depth":59,"text":149581},{"id":149952,"depth":59,"text":149953},{"id":150268,"depth":59,"text":150269},{"id":150305,"depth":59,"text":150306},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147937,"description":1327},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150348,"title":150349,"body":150350,"description":1327,"extension":1328,"meta":152710,"navigation":1330,"path":152711,"seo":152712,"stem":152713,"__hash__":152714},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150351,"toc":152687},[150352,150355,150359,150362,150365,150441,150444,150535,150538,150542,150545,150589,150602,150606,150609,150676,150679,150683,150686,150770,150778,150782,150787,150928,150931,150942,150948,150954,151068,151072,151075,151078,151331,151334,151338,151341,151445,151448,151452,151603,151607,151614,151727,151731,151734,151840,151843,151847,151850,151881,151884,151989,151992,151996,152000,152010,152078,152082,152089,152153,152156,152160,152166,152262,152271,152275,152599,152608,152612,152640,152644,152684],[10,150353,150349],{"id":150354},"_11-面向对象基础",[14,150356,150358],{"id":150357},"_111-什么是面向对象","11.1 什么是面向对象",[19,150360,150361],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150363,150364],{},"面向过程：",[39,150366,150368],{"className":31626,"code":150367,"language":31628,"meta":44,"style":44},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[46,150369,150370,150379,150387,150391,150401,150432,150436],{"__ignoreMap":44},[49,150371,150372,150374,150376],{"class":51,"line":52},[49,150373,147561],{"class":66},[49,150375,1448],{"class":109},[49,150377,150378],{"class":1505}," \"小明\"\n",[49,150380,150381,150383,150385],{"class":51,"line":59},[49,150382,147571],{"class":66},[49,150384,1448],{"class":109},[49,150386,147576],{"class":73},[49,150388,150389],{"class":51,"line":70},[49,150390,3654],{"emptyLinePlaceholder":1330},[49,150392,150393,150395,150398],{"class":51,"line":86},[49,150394,33195],{"class":109},[49,150396,150397],{"class":62}," introduce",[49,150399,150400],{"class":66},"(name, age):\n",[49,150402,150403,150405,150407,150409,150412,150414,150416,150418,150421,150423,150425,150427,150430],{"class":51,"line":98},[49,150404,32547],{"class":73},[49,150406,1403],{"class":66},[49,150408,1454],{"class":109},[49,150410,150411],{"class":1505},"\"我叫",[49,150413,2286],{"class":73},[49,150415,81036],{"class":66},[49,150417,620],{"class":73},[49,150419,150420],{"class":1505},"，今年",[49,150422,2286],{"class":73},[49,150424,71456],{"class":66},[49,150426,620],{"class":73},[49,150428,150429],{"class":1505},"岁\"",[49,150431,1409],{"class":66},[49,150433,150434],{"class":51,"line":121},[49,150435,3654],{"emptyLinePlaceholder":1330},[49,150437,150438],{"class":51,"line":134},[49,150439,150440],{"class":66},"introduce(name, age)\n",[19,150442,150443],{},"面向对象：",[39,150445,150447],{"className":31626,"code":150446,"language":31628,"meta":44,"style":44},"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",[46,150448,150449,150457,150465,150494,150498,150502,150512,150521,150530],{"__ignoreMap":44},[49,150450,150451,150453,150455],{"class":51,"line":52},[49,150452,15945],{"class":109},[49,150454,9150],{"class":62},[49,150456,4993],{"class":66},[49,150458,150459,150461,150463],{"class":51,"line":59},[49,150460,32049],{"class":109},[49,150462,150397],{"class":62},[49,150464,32055],{"class":66},[49,150466,150467,150469,150471,150473,150475,150478,150480,150482,150484,150486,150488,150490,150492],{"class":51,"line":70},[49,150468,33699],{"class":73},[49,150470,1403],{"class":66},[49,150472,1454],{"class":109},[49,150474,150411],{"class":1505},[49,150476,150477],{"class":73},"{self",[49,150479,81527],{"class":66},[49,150481,620],{"class":73},[49,150483,150420],{"class":1505},[49,150485,150477],{"class":73},[49,150487,81539],{"class":66},[49,150489,620],{"class":73},[49,150491,150429],{"class":1505},[49,150493,1409],{"class":66},[49,150495,150496],{"class":51,"line":86},[49,150497,3654],{"emptyLinePlaceholder":1330},[49,150499,150500],{"class":51,"line":98},[49,150501,3654],{"emptyLinePlaceholder":1330},[49,150503,150504,150507,150509],{"class":51,"line":121},[49,150505,150506],{"class":66},"student ",[49,150508,1448],{"class":109},[49,150510,150511],{"class":66}," Student()\n",[49,150513,150514,150517,150519],{"class":51,"line":134},[49,150515,150516],{"class":66},"student.name ",[49,150518,1448],{"class":109},[49,150520,150378],{"class":1505},[49,150522,150523,150526,150528],{"class":51,"line":1085},[49,150524,150525],{"class":66},"student.age ",[49,150527,1448],{"class":109},[49,150529,147576],{"class":73},[49,150531,150532],{"class":51,"line":2574},[49,150533,150534],{"class":66},"student.introduce()\n",[19,150536,150537],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150539,150541],{"id":150540},"_112-类和对象","11.2 类和对象",[19,150543,150544],{},"类是模板，对象是根据模板创建出来的具体实例。",[39,150546,150548],{"className":31626,"code":150547,"language":31628,"meta":44,"style":44},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[46,150549,150550,150558,150563,150567,150571,150580],{"__ignoreMap":44},[49,150551,150552,150554,150556],{"class":51,"line":52},[49,150553,15945],{"class":109},[49,150555,9150],{"class":62},[49,150557,4993],{"class":66},[49,150559,150560],{"class":51,"line":59},[49,150561,150562],{"class":109},"    pass\n",[49,150564,150565],{"class":51,"line":70},[49,150566,3654],{"emptyLinePlaceholder":1330},[49,150568,150569],{"class":51,"line":86},[49,150570,3654],{"emptyLinePlaceholder":1330},[49,150572,150573,150576,150578],{"class":51,"line":98},[49,150574,150575],{"class":66},"student1 ",[49,150577,1448],{"class":109},[49,150579,150511],{"class":66},[49,150581,150582,150585,150587],{"class":51,"line":121},[49,150583,150584],{"class":66},"student2 ",[49,150586,1448],{"class":109},[49,150588,150511],{"class":66},[19,150590,150591,150594,150595,102242,150598,150601],{},[46,150592,150593],{},"Student"," 是类，",[46,150596,150597],{},"student1",[46,150599,150600],{},"student2"," 是对象。",[14,150603,150605],{"id":150604},"_113-属性","11.3 属性",[19,150607,150608],{},"属性是对象保存的数据。",[39,150610,150612],{"className":31626,"code":150611,"language":31628,"meta":44,"style":44},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[46,150613,150614,150622,150626,150630,150634,150642,150650,150658,150662,150669],{"__ignoreMap":44},[49,150615,150616,150618,150620],{"class":51,"line":52},[49,150617,15945],{"class":109},[49,150619,9150],{"class":62},[49,150621,4993],{"class":66},[49,150623,150624],{"class":51,"line":59},[49,150625,150562],{"class":109},[49,150627,150628],{"class":51,"line":70},[49,150629,3654],{"emptyLinePlaceholder":1330},[49,150631,150632],{"class":51,"line":86},[49,150633,3654],{"emptyLinePlaceholder":1330},[49,150635,150636,150638,150640],{"class":51,"line":98},[49,150637,150506],{"class":66},[49,150639,1448],{"class":109},[49,150641,150511],{"class":66},[49,150643,150644,150646,150648],{"class":51,"line":121},[49,150645,150516],{"class":66},[49,150647,1448],{"class":109},[49,150649,150378],{"class":1505},[49,150651,150652,150654,150656],{"class":51,"line":134},[49,150653,150525],{"class":66},[49,150655,1448],{"class":109},[49,150657,147576],{"class":73},[49,150659,150660],{"class":51,"line":1085},[49,150661,3654],{"emptyLinePlaceholder":1330},[49,150663,150664,150666],{"class":51,"line":2574},[49,150665,31663],{"class":73},[49,150667,150668],{"class":66},"(student.name)\n",[49,150670,150671,150673],{"class":51,"line":2586},[49,150672,31663],{"class":73},[49,150674,150675],{"class":66},"(student.age)\n",[19,150677,150678],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150680,150682],{"id":150681},"_114-方法","11.4 方法",[19,150684,150685],{},"类中的函数叫方法。",[39,150687,150688],{"className":31626,"code":150446,"language":31628,"meta":44,"style":44},[46,150689,150690,150698,150706,150734,150738,150742,150750,150758,150766],{"__ignoreMap":44},[49,150691,150692,150694,150696],{"class":51,"line":52},[49,150693,15945],{"class":109},[49,150695,9150],{"class":62},[49,150697,4993],{"class":66},[49,150699,150700,150702,150704],{"class":51,"line":59},[49,150701,32049],{"class":109},[49,150703,150397],{"class":62},[49,150705,32055],{"class":66},[49,150707,150708,150710,150712,150714,150716,150718,150720,150722,150724,150726,150728,150730,150732],{"class":51,"line":70},[49,150709,33699],{"class":73},[49,150711,1403],{"class":66},[49,150713,1454],{"class":109},[49,150715,150411],{"class":1505},[49,150717,150477],{"class":73},[49,150719,81527],{"class":66},[49,150721,620],{"class":73},[49,150723,150420],{"class":1505},[49,150725,150477],{"class":73},[49,150727,81539],{"class":66},[49,150729,620],{"class":73},[49,150731,150429],{"class":1505},[49,150733,1409],{"class":66},[49,150735,150736],{"class":51,"line":86},[49,150737,3654],{"emptyLinePlaceholder":1330},[49,150739,150740],{"class":51,"line":98},[49,150741,3654],{"emptyLinePlaceholder":1330},[49,150743,150744,150746,150748],{"class":51,"line":121},[49,150745,150506],{"class":66},[49,150747,1448],{"class":109},[49,150749,150511],{"class":66},[49,150751,150752,150754,150756],{"class":51,"line":134},[49,150753,150516],{"class":66},[49,150755,1448],{"class":109},[49,150757,150378],{"class":1505},[49,150759,150760,150762,150764],{"class":51,"line":1085},[49,150761,150525],{"class":66},[49,150763,1448],{"class":109},[49,150765,147576],{"class":73},[49,150767,150768],{"class":51,"line":2574},[49,150769,150534],{"class":66},[19,150771,150772,150774,150775,150777],{},[46,150773,32071],{}," 表示当前对象。调用方法时不需要手动传入 ",[46,150776,32071],{},"，Python 会自动传。",[14,150779,150781],{"id":150780},"_115-构造方法__init__","11.5 构造方法__init__",[19,150783,150784,150786],{},[46,150785,32077],{}," 在对象创建时自动执行，用于初始化属性。",[39,150788,150790],{"className":31626,"code":150789,"language":31628,"meta":44,"style":44},"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",[46,150791,150792,150800,150809,150821,150833,150844,150848,150856,150894,150898,150902,150924],{"__ignoreMap":44},[49,150793,150794,150796,150798],{"class":51,"line":52},[49,150795,15945],{"class":109},[49,150797,9150],{"class":62},[49,150799,4993],{"class":66},[49,150801,150802,150804,150806],{"class":51,"line":59},[49,150803,32049],{"class":109},[49,150805,32052],{"class":73},[49,150807,150808],{"class":66},"(self, name, age, score):\n",[49,150810,150811,150813,150816,150818],{"class":51,"line":70},[49,150812,32093],{"class":73},[49,150814,150815],{"class":66},".name ",[49,150817,1448],{"class":109},[49,150819,150820],{"class":66}," name\n",[49,150822,150823,150825,150828,150830],{"class":51,"line":86},[49,150824,32093],{"class":73},[49,150826,150827],{"class":66},".age ",[49,150829,1448],{"class":109},[49,150831,150832],{"class":66}," age\n",[49,150834,150835,150837,150840,150842],{"class":51,"line":98},[49,150836,32093],{"class":73},[49,150838,150839],{"class":66},".score ",[49,150841,1448],{"class":109},[49,150843,2834],{"class":66},[49,150845,150846],{"class":51,"line":121},[49,150847,3654],{"emptyLinePlaceholder":1330},[49,150849,150850,150852,150854],{"class":51,"line":134},[49,150851,32049],{"class":109},[49,150853,150397],{"class":62},[49,150855,32055],{"class":66},[49,150857,150858,150860,150862,150864,150866,150868,150870,150872,150874,150876,150878,150880,150883,150885,150888,150890,150892],{"class":51,"line":1085},[49,150859,33699],{"class":73},[49,150861,1403],{"class":66},[49,150863,1454],{"class":109},[49,150865,150411],{"class":1505},[49,150867,150477],{"class":73},[49,150869,81527],{"class":66},[49,150871,620],{"class":73},[49,150873,150420],{"class":1505},[49,150875,150477],{"class":73},[49,150877,81539],{"class":66},[49,150879,620],{"class":73},[49,150881,150882],{"class":1505},"岁，成绩",[49,150884,150477],{"class":73},[49,150886,150887],{"class":66},".score",[49,150889,620],{"class":73},[49,150891,1643],{"class":1505},[49,150893,1409],{"class":66},[49,150895,150896],{"class":51,"line":2574},[49,150897,3654],{"emptyLinePlaceholder":1330},[49,150899,150900],{"class":51,"line":2586},[49,150901,3654],{"emptyLinePlaceholder":1330},[49,150903,150904,150906,150908,150911,150914,150916,150918,150920,150922],{"class":51,"line":2867},[49,150905,150506],{"class":66},[49,150907,1448],{"class":109},[49,150909,150910],{"class":66}," Student(",[49,150912,150913],{"class":1505},"\"小明\"",[49,150915,13687],{"class":66},[49,150917,2041],{"class":73},[49,150919,13687],{"class":66},[49,150921,2378],{"class":73},[49,150923,1409],{"class":66},[49,150925,150926],{"class":51,"line":2872},[49,150927,150534],{"class":66},[19,150929,150930],{},"构造方法的好处：",[591,150932,150933,150936,150939],{},[26,150934,150935],{},"创建对象时必须提供必要数据。",[26,150937,150938],{},"属性初始化集中，不容易漏。",[26,150940,150941],{},"对象状态更完整。",[14,150943,150945,150946],{"id":150944},"_116-str","11.6 ",[485,150947,2557],{},[19,150949,150950,150951,29633],{},"直接打印对象时，默认输出不直观。可以定义 ",[46,150952,150953],{},"__str__",[39,150955,150957],{"className":31626,"code":150956,"language":31628,"meta":44,"style":44},"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",[46,150958,150959,150967,150976,150986,150996,151000,151009,151037,151041,151045,151061],{"__ignoreMap":44},[49,150960,150961,150963,150965],{"class":51,"line":52},[49,150962,15945],{"class":109},[49,150964,9150],{"class":62},[49,150966,4993],{"class":66},[49,150968,150969,150971,150973],{"class":51,"line":59},[49,150970,32049],{"class":109},[49,150972,32052],{"class":73},[49,150974,150975],{"class":66},"(self, name, age):\n",[49,150977,150978,150980,150982,150984],{"class":51,"line":70},[49,150979,32093],{"class":73},[49,150981,150815],{"class":66},[49,150983,1448],{"class":109},[49,150985,150820],{"class":66},[49,150987,150988,150990,150992,150994],{"class":51,"line":86},[49,150989,32093],{"class":73},[49,150991,150827],{"class":66},[49,150993,1448],{"class":109},[49,150995,150832],{"class":66},[49,150997,150998],{"class":51,"line":98},[49,150999,3654],{"emptyLinePlaceholder":1330},[49,151001,151002,151004,151007],{"class":51,"line":121},[49,151003,32049],{"class":109},[49,151005,151006],{"class":73}," __str__",[49,151008,32055],{"class":66},[49,151010,151011,151013,151016,151019,151021,151023,151025,151028,151030,151032,151034],{"class":51,"line":134},[49,151012,16003],{"class":109},[49,151014,151015],{"class":109}," f",[49,151017,151018],{"class":1505},"\"Student(name=",[49,151020,150477],{"class":73},[49,151022,81527],{"class":66},[49,151024,620],{"class":73},[49,151026,151027],{"class":1505},", age=",[49,151029,150477],{"class":73},[49,151031,81539],{"class":66},[49,151033,620],{"class":73},[49,151035,151036],{"class":1505},")\"\n",[49,151038,151039],{"class":51,"line":1085},[49,151040,3654],{"emptyLinePlaceholder":1330},[49,151042,151043],{"class":51,"line":2574},[49,151044,3654],{"emptyLinePlaceholder":1330},[49,151046,151047,151049,151051,151053,151055,151057,151059],{"class":51,"line":2586},[49,151048,150506],{"class":66},[49,151050,1448],{"class":109},[49,151052,150910],{"class":66},[49,151054,150913],{"class":1505},[49,151056,13687],{"class":66},[49,151058,2041],{"class":73},[49,151060,1409],{"class":66},[49,151062,151063,151065],{"class":51,"line":2867},[49,151064,31663],{"class":73},[49,151066,151067],{"class":66},"(student)\n",[14,151069,151071],{"id":151070},"_117-封装","11.7 封装",[19,151073,151074],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151076,151077],{},"Python 中以双下划线开头的属性通常视为私有属性。",[39,151079,151081],{"className":31626,"code":151080,"language":31628,"meta":44,"style":44},"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",[46,151082,151083,151092,151101,151113,151125,151129,151138,151147,151151,151161,151174,151185,151190,151201,151205,151214,151226,151237,151241,151254,151265,151269,151280,151284,151288,151306,151315,151324],{"__ignoreMap":44},[49,151084,151085,151087,151090],{"class":51,"line":52},[49,151086,15945],{"class":109},[49,151088,151089],{"class":62}," Account",[49,151091,4993],{"class":66},[49,151093,151094,151096,151098],{"class":51,"line":59},[49,151095,32049],{"class":109},[49,151097,32052],{"class":73},[49,151099,151100],{"class":66},"(self, owner, balance):\n",[49,151102,151103,151105,151108,151110],{"class":51,"line":70},[49,151104,32093],{"class":73},[49,151106,151107],{"class":66},".owner ",[49,151109,1448],{"class":109},[49,151111,151112],{"class":66}," owner\n",[49,151114,151115,151117,151120,151122],{"class":51,"line":86},[49,151116,32093],{"class":73},[49,151118,151119],{"class":66},".__balance ",[49,151121,1448],{"class":109},[49,151123,151124],{"class":66}," balance\n",[49,151126,151127],{"class":51,"line":98},[49,151128,3654],{"emptyLinePlaceholder":1330},[49,151130,151131,151133,151136],{"class":51,"line":121},[49,151132,32049],{"class":109},[49,151134,151135],{"class":62}," get_balance",[49,151137,32055],{"class":66},[49,151139,151140,151142,151144],{"class":51,"line":134},[49,151141,16003],{"class":109},[49,151143,40121],{"class":73},[49,151145,151146],{"class":66},".__balance\n",[49,151148,151149],{"class":51,"line":1085},[49,151150,3654],{"emptyLinePlaceholder":1330},[49,151152,151153,151155,151158],{"class":51,"line":2574},[49,151154,32049],{"class":109},[49,151156,151157],{"class":62}," deposit",[49,151159,151160],{"class":66},"(self, money):\n",[49,151162,151163,151165,151168,151170,151172],{"class":51,"line":2586},[49,151164,3751],{"class":109},[49,151166,151167],{"class":66}," money ",[49,151169,2843],{"class":109},[49,151171,5347],{"class":73},[49,151173,4993],{"class":66},[49,151175,151176,151178,151180,151183],{"class":51,"line":2867},[49,151177,35898],{"class":73},[49,151179,1403],{"class":66},[49,151181,151182],{"class":1505},"\"存款金额必须大于0\"",[49,151184,1409],{"class":66},[49,151186,151187],{"class":51,"line":2872},[49,151188,151189],{"class":109},"            return\n",[49,151191,151192,151194,151196,151198],{"class":51,"line":2878},[49,151193,32093],{"class":73},[49,151195,151119],{"class":66},[49,151197,10729],{"class":109},[49,151199,151200],{"class":66}," money\n",[49,151202,151203],{"class":51,"line":2883},[49,151204,3654],{"emptyLinePlaceholder":1330},[49,151206,151207,151209,151212],{"class":51,"line":2897},[49,151208,32049],{"class":109},[49,151210,151211],{"class":62}," withdraw",[49,151213,151160],{"class":66},[49,151215,151216,151218,151220,151222,151224],{"class":51,"line":2902},[49,151217,3751],{"class":109},[49,151219,151167],{"class":66},[49,151221,2843],{"class":109},[49,151223,5347],{"class":73},[49,151225,4993],{"class":66},[49,151227,151228,151230,151232,151235],{"class":51,"line":2908},[49,151229,35898],{"class":73},[49,151231,1403],{"class":66},[49,151233,151234],{"class":1505},"\"取款金额必须大于0\"",[49,151236,1409],{"class":66},[49,151238,151239],{"class":51,"line":2929},[49,151240,151189],{"class":109},[49,151242,151243,151245,151247,151249,151251],{"class":51,"line":2934},[49,151244,3751],{"class":109},[49,151246,151167],{"class":66},[49,151248,2349],{"class":109},[49,151250,40121],{"class":73},[49,151252,151253],{"class":66},".__balance:\n",[49,151255,151256,151258,151260,151263],{"class":51,"line":2948},[49,151257,35898],{"class":73},[49,151259,1403],{"class":66},[49,151261,151262],{"class":1505},"\"余额不足\"",[49,151264,1409],{"class":66},[49,151266,151267],{"class":51,"line":2953},[49,151268,151189],{"class":109},[49,151270,151271,151273,151275,151278],{"class":51,"line":2982},[49,151272,32093],{"class":73},[49,151274,151119],{"class":66},[49,151276,151277],{"class":109},"-=",[49,151279,151200],{"class":66},[49,151281,151282],{"class":51,"line":2987},[49,151283,3654],{"emptyLinePlaceholder":1330},[49,151285,151286],{"class":51,"line":3004},[49,151287,3654],{"emptyLinePlaceholder":1330},[49,151289,151290,151293,151295,151298,151300,151302,151304],{"class":51,"line":3009},[49,151291,151292],{"class":66},"account ",[49,151294,1448],{"class":109},[49,151296,151297],{"class":66}," Account(",[49,151299,150913],{"class":1505},[49,151301,13687],{"class":66},[49,151303,7662],{"class":73},[49,151305,1409],{"class":66},[49,151307,151308,151311,151313],{"class":51,"line":3014},[49,151309,151310],{"class":66},"account.deposit(",[49,151312,2977],{"class":73},[49,151314,1409],{"class":66},[49,151316,151317,151320,151322],{"class":51,"line":3019},[49,151318,151319],{"class":66},"account.withdraw(",[49,151321,1703],{"class":73},[49,151323,1409],{"class":66},[49,151325,151326,151328],{"class":51,"line":3033},[49,151327,31663],{"class":73},[49,151329,151330],{"class":66},"(account.get_balance())\n",[19,151332,151333],{},"封装的意义是避免外部随意修改内部状态。",[14,151335,151337],{"id":151336},"_118-继承","11.8 继承",[19,151339,151340],{},"继承可以让子类复用父类的属性和方法。",[39,151342,151344],{"className":31626,"code":151343,"language":31628,"meta":44,"style":44},"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",[46,151345,151346,151355,151364,151375,151379,151383,151397,151406,151417,151421,151425,151435,151440],{"__ignoreMap":44},[49,151347,151348,151350,151353],{"class":51,"line":52},[49,151349,15945],{"class":109},[49,151351,151352],{"class":62}," Animal",[49,151354,4993],{"class":66},[49,151356,151357,151359,151362],{"class":51,"line":59},[49,151358,32049],{"class":109},[49,151360,151361],{"class":62}," eat",[49,151363,32055],{"class":66},[49,151365,151366,151368,151370,151373],{"class":51,"line":70},[49,151367,33699],{"class":73},[49,151369,1403],{"class":66},[49,151371,151372],{"class":1505},"\"吃东西\"",[49,151374,1409],{"class":66},[49,151376,151377],{"class":51,"line":86},[49,151378,3654],{"emptyLinePlaceholder":1330},[49,151380,151381],{"class":51,"line":98},[49,151382,3654],{"emptyLinePlaceholder":1330},[49,151384,151385,151387,151390,151392,151395],{"class":51,"line":121},[49,151386,15945],{"class":109},[49,151388,151389],{"class":62}," Dog",[49,151391,1403],{"class":66},[49,151393,151394],{"class":62},"Animal",[49,151396,32034],{"class":66},[49,151398,151399,151401,151404],{"class":51,"line":134},[49,151400,32049],{"class":109},[49,151402,151403],{"class":62}," bark",[49,151405,32055],{"class":66},[49,151407,151408,151410,151412,151415],{"class":51,"line":1085},[49,151409,33699],{"class":73},[49,151411,1403],{"class":66},[49,151413,151414],{"class":1505},"\"汪汪\"",[49,151416,1409],{"class":66},[49,151418,151419],{"class":51,"line":2574},[49,151420,3654],{"emptyLinePlaceholder":1330},[49,151422,151423],{"class":51,"line":2586},[49,151424,3654],{"emptyLinePlaceholder":1330},[49,151426,151427,151430,151432],{"class":51,"line":2867},[49,151428,151429],{"class":66},"dog ",[49,151431,1448],{"class":109},[49,151433,151434],{"class":66}," Dog()\n",[49,151436,151437],{"class":51,"line":2872},[49,151438,151439],{"class":66},"dog.eat()\n",[49,151441,151442],{"class":51,"line":2878},[49,151443,151444],{"class":66},"dog.bark()\n",[19,151446,151447],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151449,151451],{"id":151450},"_119-方法重写","11.9 方法重写",[39,151453,151455],{"className":31626,"code":151454,"language":31628,"meta":44,"style":44},"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",[46,151456,151457,151465,151474,151485,151489,151493,151505,151513,151523,151527,151531,151544,151552,151563,151567,151571,151579,151589,151593,151598],{"__ignoreMap":44},[49,151458,151459,151461,151463],{"class":51,"line":52},[49,151460,15945],{"class":109},[49,151462,151352],{"class":62},[49,151464,4993],{"class":66},[49,151466,151467,151469,151472],{"class":51,"line":59},[49,151468,32049],{"class":109},[49,151470,151471],{"class":62}," speak",[49,151473,32055],{"class":66},[49,151475,151476,151478,151480,151483],{"class":51,"line":70},[49,151477,33699],{"class":73},[49,151479,1403],{"class":66},[49,151481,151482],{"class":1505},"\"动物叫\"",[49,151484,1409],{"class":66},[49,151486,151487],{"class":51,"line":86},[49,151488,3654],{"emptyLinePlaceholder":1330},[49,151490,151491],{"class":51,"line":98},[49,151492,3654],{"emptyLinePlaceholder":1330},[49,151494,151495,151497,151499,151501,151503],{"class":51,"line":121},[49,151496,15945],{"class":109},[49,151498,151389],{"class":62},[49,151500,1403],{"class":66},[49,151502,151394],{"class":62},[49,151504,32034],{"class":66},[49,151506,151507,151509,151511],{"class":51,"line":134},[49,151508,32049],{"class":109},[49,151510,151471],{"class":62},[49,151512,32055],{"class":66},[49,151514,151515,151517,151519,151521],{"class":51,"line":1085},[49,151516,33699],{"class":73},[49,151518,1403],{"class":66},[49,151520,151414],{"class":1505},[49,151522,1409],{"class":66},[49,151524,151525],{"class":51,"line":2574},[49,151526,3654],{"emptyLinePlaceholder":1330},[49,151528,151529],{"class":51,"line":2586},[49,151530,3654],{"emptyLinePlaceholder":1330},[49,151532,151533,151535,151538,151540,151542],{"class":51,"line":2867},[49,151534,15945],{"class":109},[49,151536,151537],{"class":62}," Cat",[49,151539,1403],{"class":66},[49,151541,151394],{"class":62},[49,151543,32034],{"class":66},[49,151545,151546,151548,151550],{"class":51,"line":2872},[49,151547,32049],{"class":109},[49,151549,151471],{"class":62},[49,151551,32055],{"class":66},[49,151553,151554,151556,151558,151561],{"class":51,"line":2878},[49,151555,33699],{"class":73},[49,151557,1403],{"class":66},[49,151559,151560],{"class":1505},"\"喵喵\"",[49,151562,1409],{"class":66},[49,151564,151565],{"class":51,"line":2883},[49,151566,3654],{"emptyLinePlaceholder":1330},[49,151568,151569],{"class":51,"line":2897},[49,151570,3654],{"emptyLinePlaceholder":1330},[49,151572,151573,151575,151577],{"class":51,"line":2902},[49,151574,151429],{"class":66},[49,151576,1448],{"class":109},[49,151578,151434],{"class":66},[49,151580,151581,151584,151586],{"class":51,"line":2908},[49,151582,151583],{"class":66},"cat ",[49,151585,1448],{"class":109},[49,151587,151588],{"class":66}," Cat()\n",[49,151590,151591],{"class":51,"line":2929},[49,151592,3654],{"emptyLinePlaceholder":1330},[49,151594,151595],{"class":51,"line":2934},[49,151596,151597],{"class":66},"dog.speak()\n",[49,151599,151600],{"class":51,"line":2948},[49,151601,151602],{"class":66},"cat.speak()\n",[14,151604,151606],{"id":151605},"_1110-super","11.10 super",[19,151608,151609,151610,151613],{},"子类可以通过 ",[46,151611,151612],{},"super()"," 调用父类方法。",[39,151615,151617],{"className":31626,"code":151616,"language":31628,"meta":44,"style":44},"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",[46,151618,151619,151627,151636,151646,151650,151654,151666,151675,151686,151696,151700,151704,151720],{"__ignoreMap":44},[49,151620,151621,151623,151625],{"class":51,"line":52},[49,151622,15945],{"class":109},[49,151624,16820],{"class":62},[49,151626,4993],{"class":66},[49,151628,151629,151631,151633],{"class":51,"line":59},[49,151630,32049],{"class":109},[49,151632,32052],{"class":73},[49,151634,151635],{"class":66},"(self, name):\n",[49,151637,151638,151640,151642,151644],{"class":51,"line":70},[49,151639,32093],{"class":73},[49,151641,150815],{"class":66},[49,151643,1448],{"class":109},[49,151645,150820],{"class":66},[49,151647,151648],{"class":51,"line":86},[49,151649,3654],{"emptyLinePlaceholder":1330},[49,151651,151652],{"class":51,"line":98},[49,151653,3654],{"emptyLinePlaceholder":1330},[49,151655,151656,151658,151660,151662,151664],{"class":51,"line":121},[49,151657,15945],{"class":109},[49,151659,9150],{"class":62},[49,151661,1403],{"class":66},[49,151663,20296],{"class":62},[49,151665,32034],{"class":66},[49,151667,151668,151670,151672],{"class":51,"line":134},[49,151669,32049],{"class":109},[49,151671,32052],{"class":73},[49,151673,151674],{"class":66},"(self, name, score):\n",[49,151676,151677,151679,151681,151683],{"class":51,"line":1085},[49,151678,32065],{"class":73},[49,151680,18511],{"class":66},[49,151682,32077],{"class":73},[49,151684,151685],{"class":66},"(name)\n",[49,151687,151688,151690,151692,151694],{"class":51,"line":2574},[49,151689,32093],{"class":73},[49,151691,150839],{"class":66},[49,151693,1448],{"class":109},[49,151695,2834],{"class":66},[49,151697,151698],{"class":51,"line":2586},[49,151699,3654],{"emptyLinePlaceholder":1330},[49,151701,151702],{"class":51,"line":2867},[49,151703,3654],{"emptyLinePlaceholder":1330},[49,151705,151706,151708,151710,151712,151714,151716,151718],{"class":51,"line":2872},[49,151707,150506],{"class":66},[49,151709,1448],{"class":109},[49,151711,150910],{"class":66},[49,151713,150913],{"class":1505},[49,151715,13687],{"class":66},[49,151717,2378],{"class":73},[49,151719,1409],{"class":66},[49,151721,151722,151724],{"class":51,"line":2878},[49,151723,31663],{"class":73},[49,151725,151726],{"class":66},"(student.name, student.score)\n",[14,151728,151730],{"id":151729},"_1111-多态","11.11 多态",[19,151732,151733],{},"多态指不同对象响应同一个方法，表现出不同结果。",[39,151735,151737],{"className":31626,"code":151736,"language":31628,"meta":44,"style":44},"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",[46,151738,151739,151747,151755,151765,151769,151773,151781,151789,151799,151803,151807,151817,151822,151826,151830,151835],{"__ignoreMap":44},[49,151740,151741,151743,151745],{"class":51,"line":52},[49,151742,15945],{"class":109},[49,151744,151389],{"class":62},[49,151746,4993],{"class":66},[49,151748,151749,151751,151753],{"class":51,"line":59},[49,151750,32049],{"class":109},[49,151752,151471],{"class":62},[49,151754,32055],{"class":66},[49,151756,151757,151759,151761,151763],{"class":51,"line":70},[49,151758,33699],{"class":73},[49,151760,1403],{"class":66},[49,151762,151414],{"class":1505},[49,151764,1409],{"class":66},[49,151766,151767],{"class":51,"line":86},[49,151768,3654],{"emptyLinePlaceholder":1330},[49,151770,151771],{"class":51,"line":98},[49,151772,3654],{"emptyLinePlaceholder":1330},[49,151774,151775,151777,151779],{"class":51,"line":121},[49,151776,15945],{"class":109},[49,151778,151537],{"class":62},[49,151780,4993],{"class":66},[49,151782,151783,151785,151787],{"class":51,"line":134},[49,151784,32049],{"class":109},[49,151786,151471],{"class":62},[49,151788,32055],{"class":66},[49,151790,151791,151793,151795,151797],{"class":51,"line":1085},[49,151792,33699],{"class":73},[49,151794,1403],{"class":66},[49,151796,151560],{"class":1505},[49,151798,1409],{"class":66},[49,151800,151801],{"class":51,"line":2574},[49,151802,3654],{"emptyLinePlaceholder":1330},[49,151804,151805],{"class":51,"line":2586},[49,151806,3654],{"emptyLinePlaceholder":1330},[49,151808,151809,151811,151814],{"class":51,"line":2867},[49,151810,33195],{"class":109},[49,151812,151813],{"class":62}," make_sound",[49,151815,151816],{"class":66},"(animal):\n",[49,151818,151819],{"class":51,"line":2872},[49,151820,151821],{"class":66},"    animal.speak()\n",[49,151823,151824],{"class":51,"line":2878},[49,151825,3654],{"emptyLinePlaceholder":1330},[49,151827,151828],{"class":51,"line":2883},[49,151829,3654],{"emptyLinePlaceholder":1330},[49,151831,151832],{"class":51,"line":2897},[49,151833,151834],{"class":66},"make_sound(Dog())\n",[49,151836,151837],{"class":51,"line":2902},[49,151838,151839],{"class":66},"make_sound(Cat())\n",[19,151841,151842],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151844,151846],{"id":151845},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151848,151849],{},"实例属性属于对象：",[39,151851,151853],{"className":31626,"code":151852,"language":31628,"meta":44,"style":44},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[46,151854,151855,151863,151871],{"__ignoreMap":44},[49,151856,151857,151859,151861],{"class":51,"line":52},[49,151858,15945],{"class":109},[49,151860,9150],{"class":62},[49,151862,4993],{"class":66},[49,151864,151865,151867,151869],{"class":51,"line":59},[49,151866,32049],{"class":109},[49,151868,32052],{"class":73},[49,151870,151635],{"class":66},[49,151872,151873,151875,151877,151879],{"class":51,"line":70},[49,151874,32093],{"class":73},[49,151876,150815],{"class":66},[49,151878,1448],{"class":109},[49,151880,150820],{"class":66},[19,151882,151883],{},"类属性属于类，所有对象共享：",[39,151885,151887],{"className":31626,"code":151886,"language":31628,"meta":44,"style":44},"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",[46,151888,151889,151897,151907,151911,151919,151929,151933,151937,151950,151964,151968,151975,151982],{"__ignoreMap":44},[49,151890,151891,151893,151895],{"class":51,"line":52},[49,151892,15945],{"class":109},[49,151894,9150],{"class":62},[49,151896,4993],{"class":66},[49,151898,151899,151902,151904],{"class":51,"line":59},[49,151900,151901],{"class":66},"    school ",[49,151903,1448],{"class":109},[49,151905,151906],{"class":1505}," \"黑马学校\"\n",[49,151908,151909],{"class":51,"line":70},[49,151910,3654],{"emptyLinePlaceholder":1330},[49,151912,151913,151915,151917],{"class":51,"line":86},[49,151914,32049],{"class":109},[49,151916,32052],{"class":73},[49,151918,151635],{"class":66},[49,151920,151921,151923,151925,151927],{"class":51,"line":98},[49,151922,32093],{"class":73},[49,151924,150815],{"class":66},[49,151926,1448],{"class":109},[49,151928,150820],{"class":66},[49,151930,151931],{"class":51,"line":121},[49,151932,3654],{"emptyLinePlaceholder":1330},[49,151934,151935],{"class":51,"line":134},[49,151936,3654],{"emptyLinePlaceholder":1330},[49,151938,151939,151942,151944,151946,151948],{"class":51,"line":1085},[49,151940,151941],{"class":66},"s1 ",[49,151943,1448],{"class":109},[49,151945,150910],{"class":66},[49,151947,150913],{"class":1505},[49,151949,1409],{"class":66},[49,151951,151952,151955,151957,151959,151962],{"class":51,"line":2574},[49,151953,151954],{"class":66},"s2 ",[49,151956,1448],{"class":109},[49,151958,150910],{"class":66},[49,151960,151961],{"class":1505},"\"小红\"",[49,151963,1409],{"class":66},[49,151965,151966],{"class":51,"line":2586},[49,151967,3654],{"emptyLinePlaceholder":1330},[49,151969,151970,151972],{"class":51,"line":2867},[49,151971,31663],{"class":73},[49,151973,151974],{"class":66},"(s1.school)\n",[49,151976,151977,151979],{"class":51,"line":2872},[49,151978,31663],{"class":73},[49,151980,151981],{"class":66},"(s2.school)\n",[49,151983,151984,151986],{"class":51,"line":2878},[49,151985,31663],{"class":73},[49,151987,151988],{"class":66},"(Student.school)\n",[19,151990,151991],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151993,151995],{"id":151994},"_1113-类方法和静态方法","11.13 类方法和静态方法",[183,151997,151999],{"id":151998},"_11131-类方法","11.13.1 类方法",[19,152001,152002,152003,152006,152007,29633],{},"类方法使用 ",[46,152004,152005],{},"@classmethod","，第一个参数通常是 ",[46,152008,152009],{},"cls",[39,152011,152013],{"className":31626,"code":152012,"language":31628,"meta":44,"style":44},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[46,152014,152015,152023,152031,152035,152043,152053,152063,152067,152071],{"__ignoreMap":44},[49,152016,152017,152019,152021],{"class":51,"line":52},[49,152018,15945],{"class":109},[49,152020,9150],{"class":62},[49,152022,4993],{"class":66},[49,152024,152025,152027,152029],{"class":51,"line":59},[49,152026,151901],{"class":66},[49,152028,1448],{"class":109},[49,152030,151906],{"class":1505},[49,152032,152033],{"class":51,"line":70},[49,152034,3654],{"emptyLinePlaceholder":1330},[49,152036,152037,152040],{"class":51,"line":86},[49,152038,152039],{"class":62},"    @",[49,152041,152042],{"class":73},"classmethod\n",[49,152044,152045,152047,152050],{"class":51,"line":98},[49,152046,32049],{"class":109},[49,152048,152049],{"class":62}," get_school",[49,152051,152052],{"class":66},"(cls):\n",[49,152054,152055,152057,152060],{"class":51,"line":121},[49,152056,16003],{"class":109},[49,152058,152059],{"class":73}," cls",[49,152061,152062],{"class":66},".school\n",[49,152064,152065],{"class":51,"line":134},[49,152066,3654],{"emptyLinePlaceholder":1330},[49,152068,152069],{"class":51,"line":1085},[49,152070,3654],{"emptyLinePlaceholder":1330},[49,152072,152073,152075],{"class":51,"line":2574},[49,152074,31663],{"class":73},[49,152076,152077],{"class":66},"(Student.get_school())\n",[183,152079,152081],{"id":152080},"_11132-静态方法","11.13.2 静态方法",[19,152083,152084,152085,152088],{},"静态方法使用 ",[46,152086,152087],{},"@staticmethod","，不需要访问实例和类。",[39,152090,152092],{"className":31626,"code":152091,"language":31628,"meta":44,"style":44},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[46,152093,152094,152103,152110,152119,152130,152134,152138],{"__ignoreMap":44},[49,152095,152096,152098,152101],{"class":51,"line":52},[49,152097,15945],{"class":109},[49,152099,152100],{"class":62}," MathUtils",[49,152102,4993],{"class":66},[49,152104,152105,152107],{"class":51,"line":59},[49,152106,152039],{"class":62},[49,152108,152109],{"class":73},"staticmethod\n",[49,152111,152112,152114,152116],{"class":51,"line":70},[49,152113,32049],{"class":109},[49,152115,6461],{"class":62},[49,152117,152118],{"class":66},"(a, b):\n",[49,152120,152121,152123,152125,152127],{"class":51,"line":86},[49,152122,16003],{"class":109},[49,152124,12121],{"class":66},[49,152126,1872],{"class":109},[49,152128,152129],{"class":66}," b\n",[49,152131,152132],{"class":51,"line":98},[49,152133,3654],{"emptyLinePlaceholder":1330},[49,152135,152136],{"class":51,"line":121},[49,152137,3654],{"emptyLinePlaceholder":1330},[49,152139,152140,152142,152145,152147,152149,152151],{"class":51,"line":134},[49,152141,31663],{"class":73},[49,152143,152144],{"class":66},"(MathUtils.add(",[49,152146,159],{"class":73},[49,152148,13687],{"class":66},[49,152150,1478],{"class":73},[49,152152,31745],{"class":66},[19,152154,152155],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152157,152159],{"id":152158},"_1114-dataclass","11.14 dataclass",[19,152161,152162,152165],{},[46,152163,152164],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[39,152167,152169],{"className":31626,"code":152168,"language":31628,"meta":44,"style":44},"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",[46,152170,152171,152183,152187,152191,152196,152204,152212,152220,152228,152232,152236,152256],{"__ignoreMap":44},[49,152172,152173,152175,152178,152180],{"class":51,"line":52},[49,152174,31985],{"class":109},[49,152176,152177],{"class":66}," dataclasses ",[49,152179,31640],{"class":109},[49,152181,152182],{"class":66}," dataclass\n",[49,152184,152185],{"class":51,"line":59},[49,152186,3654],{"emptyLinePlaceholder":1330},[49,152188,152189],{"class":51,"line":70},[49,152190,3654],{"emptyLinePlaceholder":1330},[49,152192,152193],{"class":51,"line":86},[49,152194,152195],{"class":62},"@dataclass\n",[49,152197,152198,152200,152202],{"class":51,"line":98},[49,152199,15945],{"class":109},[49,152201,9150],{"class":62},[49,152203,4993],{"class":66},[49,152205,152206,152209],{"class":51,"line":121},[49,152207,152208],{"class":66},"    name: ",[49,152210,152211],{"class":73},"str\n",[49,152213,152214,152217],{"class":51,"line":134},[49,152215,152216],{"class":66},"    age: ",[49,152218,152219],{"class":73},"int\n",[49,152221,152222,152225],{"class":51,"line":1085},[49,152223,152224],{"class":66},"    score: ",[49,152226,152227],{"class":73},"float\n",[49,152229,152230],{"class":51,"line":2574},[49,152231,3654],{"emptyLinePlaceholder":1330},[49,152233,152234],{"class":51,"line":2586},[49,152235,3654],{"emptyLinePlaceholder":1330},[49,152237,152238,152240,152242,152244,152246,152248,152250,152252,152254],{"class":51,"line":2867},[49,152239,150506],{"class":66},[49,152241,1448],{"class":109},[49,152243,150910],{"class":66},[49,152245,150913],{"class":1505},[49,152247,13687],{"class":66},[49,152249,2041],{"class":73},[49,152251,13687],{"class":66},[49,152253,2378],{"class":73},[49,152255,1409],{"class":66},[49,152257,152258,152260],{"class":51,"line":2872},[49,152259,31663],{"class":73},[49,152261,151067],{"class":66},[19,152263,152264,152265,1605,152267,152270],{},"它会自动生成 ",[46,152266,32077],{},[46,152268,152269],{},"__repr__"," 等方法。适合数据模型类。",[14,152272,152274],{"id":152273},"_1115-小案例学生类","11.15 小案例：学生类",[39,152276,152278],{"className":31626,"code":152277,"language":31628,"meta":44,"style":44},"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",[46,152279,152280,152288,152297,152309,152319,152329,152339,152343,152352,152365,152369,152378,152384,152396,152408,152420,152432,152436,152440,152446,152456,152465,152475,152483,152491,152500,152504,152508,152516,152552,152556,152560,152585,152592],{"__ignoreMap":44},[49,152281,152282,152284,152286],{"class":51,"line":52},[49,152283,15945],{"class":109},[49,152285,9150],{"class":62},[49,152287,4993],{"class":66},[49,152289,152290,152292,152294],{"class":51,"line":59},[49,152291,32049],{"class":109},[49,152293,32052],{"class":73},[49,152295,152296],{"class":66},"(self, student_id, name, age, score):\n",[49,152298,152299,152301,152304,152306],{"class":51,"line":70},[49,152300,32093],{"class":73},[49,152302,152303],{"class":66},".student_id ",[49,152305,1448],{"class":109},[49,152307,152308],{"class":66}," student_id\n",[49,152310,152311,152313,152315,152317],{"class":51,"line":86},[49,152312,32093],{"class":73},[49,152314,150815],{"class":66},[49,152316,1448],{"class":109},[49,152318,150820],{"class":66},[49,152320,152321,152323,152325,152327],{"class":51,"line":98},[49,152322,32093],{"class":73},[49,152324,150827],{"class":66},[49,152326,1448],{"class":109},[49,152328,150832],{"class":66},[49,152330,152331,152333,152335,152337],{"class":51,"line":121},[49,152332,32093],{"class":73},[49,152334,150839],{"class":66},[49,152336,1448],{"class":109},[49,152338,2834],{"class":66},[49,152340,152341],{"class":51,"line":134},[49,152342,3654],{"emptyLinePlaceholder":1330},[49,152344,152345,152347,152350],{"class":51,"line":1085},[49,152346,32049],{"class":109},[49,152348,152349],{"class":62}," is_passed",[49,152351,32055],{"class":66},[49,152353,152354,152356,152358,152360,152362],{"class":51,"line":2574},[49,152355,16003],{"class":109},[49,152357,40121],{"class":73},[49,152359,150839],{"class":66},[49,152361,2965],{"class":109},[49,152363,152364],{"class":73}," 60\n",[49,152366,152367],{"class":51,"line":2586},[49,152368,3654],{"emptyLinePlaceholder":1330},[49,152370,152371,152373,152376],{"class":51,"line":2867},[49,152372,32049],{"class":109},[49,152374,152375],{"class":62}," to_dict",[49,152377,32055],{"class":66},[49,152379,152380,152382],{"class":51,"line":2872},[49,152381,16003],{"class":109},[49,152383,67],{"class":66},[49,152385,152386,152389,152391,152393],{"class":51,"line":2878},[49,152387,152388],{"class":1505},"            \"student_id\"",[49,152390,77],{"class":66},[49,152392,32071],{"class":73},[49,152394,152395],{"class":66},".student_id,\n",[49,152397,152398,152401,152403,152405],{"class":51,"line":2883},[49,152399,152400],{"class":1505},"            \"name\"",[49,152402,77],{"class":66},[49,152404,32071],{"class":73},[49,152406,152407],{"class":66},".name,\n",[49,152409,152410,152413,152415,152417],{"class":51,"line":2897},[49,152411,152412],{"class":1505},"            \"age\"",[49,152414,77],{"class":66},[49,152416,32071],{"class":73},[49,152418,152419],{"class":66},".age,\n",[49,152421,152422,152425,152427,152429],{"class":51,"line":2902},[49,152423,152424],{"class":1505},"            \"score\"",[49,152426,77],{"class":66},[49,152428,32071],{"class":73},[49,152430,152431],{"class":66},".score,\n",[49,152433,152434],{"class":51,"line":2908},[49,152435,3783],{"class":66},[49,152437,152438],{"class":51,"line":2929},[49,152439,3654],{"emptyLinePlaceholder":1330},[49,152441,152442,152444],{"class":51,"line":2934},[49,152443,152039],{"class":62},[49,152445,152042],{"class":73},[49,152447,152448,152450,152453],{"class":51,"line":2948},[49,152449,32049],{"class":109},[49,152451,152452],{"class":62}," from_dict",[49,152454,152455],{"class":66},"(cls, data):\n",[49,152457,152458,152460,152462],{"class":51,"line":2953},[49,152459,16003],{"class":109},[49,152461,152059],{"class":73},[49,152463,152464],{"class":66},"(\n",[49,152466,152467,152470,152473],{"class":51,"line":2982},[49,152468,152469],{"class":66},"            data[",[49,152471,152472],{"class":1505},"\"student_id\"",[49,152474,89061],{"class":66},[49,152476,152477,152479,152481],{"class":51,"line":2987},[49,152478,152469],{"class":66},[49,152480,63915],{"class":1505},[49,152482,89061],{"class":66},[49,152484,152485,152487,152489],{"class":51,"line":3004},[49,152486,152469],{"class":66},[49,152488,70359],{"class":1505},[49,152490,89061],{"class":66},[49,152492,152493,152495,152498],{"class":51,"line":3009},[49,152494,152469],{"class":66},[49,152496,152497],{"class":1505},"\"score\"",[49,152499,89061],{"class":66},[49,152501,152502],{"class":51,"line":3014},[49,152503,39374],{"class":66},[49,152505,152506],{"class":51,"line":3019},[49,152507,3654],{"emptyLinePlaceholder":1330},[49,152509,152510,152512,152514],{"class":51,"line":3033},[49,152511,32049],{"class":109},[49,152513,151006],{"class":73},[49,152515,32055],{"class":66},[49,152517,152518,152520,152522,152524,152526,152529,152531,152534,152536,152538,152540,152542,152544,152546,152548,152550],{"class":51,"line":3038},[49,152519,16003],{"class":109},[49,152521,151015],{"class":109},[49,152523,1643],{"class":1505},[49,152525,150477],{"class":73},[49,152527,152528],{"class":66},".student_id",[49,152530,620],{"class":73},[49,152532,152533],{"class":73}," {self",[49,152535,81527],{"class":66},[49,152537,620],{"class":73},[49,152539,152533],{"class":73},[49,152541,81539],{"class":66},[49,152543,620],{"class":73},[49,152545,152533],{"class":73},[49,152547,150887],{"class":66},[49,152549,620],{"class":73},[49,152551,26382],{"class":1505},[49,152553,152554],{"class":51,"line":3831},[49,152555,3654],{"emptyLinePlaceholder":1330},[49,152557,152558],{"class":51,"line":3845},[49,152559,3654],{"emptyLinePlaceholder":1330},[49,152561,152562,152564,152566,152568,152571,152573,152575,152577,152579,152581,152583],{"class":51,"line":3853},[49,152563,150506],{"class":66},[49,152565,1448],{"class":109},[49,152567,150910],{"class":66},[49,152569,152570],{"class":1505},"\"001\"",[49,152572,13687],{"class":66},[49,152574,150913],{"class":1505},[49,152576,13687],{"class":66},[49,152578,2041],{"class":73},[49,152580,13687],{"class":66},[49,152582,2378],{"class":73},[49,152584,1409],{"class":66},[49,152586,152587,152589],{"class":51,"line":3858},[49,152588,31663],{"class":73},[49,152590,152591],{"class":66},"(student.is_passed())\n",[49,152593,152594,152596],{"class":51,"line":3864},[49,152595,31663],{"class":73},[49,152597,152598],{"class":66},"(student.to_dict())\n",[19,152600,152601,102242,152604,152607],{},[46,152602,152603],{},"to_dict()",[46,152605,152606],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152609,152611],{"id":152610},"_1116-易错点","11.16 易错点",[591,152613,152614,152620,152626,152631,152634,152637],{},[26,152615,152616,152617,29633],{},"类名推荐使用大驼峰，如 ",[46,152618,152619],{},"StudentManager",[26,152621,152622,152623,152625],{},"方法第一个参数必须写 ",[46,152624,32071],{},"，调用时不用传。",[26,152627,152628,152630],{},[46,152629,32077],{}," 不是普通方法，它在创建对象时自动执行。",[26,152632,152633],{},"私有属性不是绝对安全，只是约定和名称改写。",[26,152635,152636],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[26,152638,152639],{},"类中方法太多时，说明职责可能过重。",[14,152641,152643],{"id":152642},"_1117-本章练习","11.17 本章练习",[591,152645,152646,152652,152658,152663,152676],{},[26,152647,152648,152649,152651],{},"定义 ",[46,152650,150593],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[26,152653,152648,152654,152657],{},[46,152655,152656],{},"Account"," 类，实现存款、取款、查询余额。",[26,152659,152648,152660,152662],{},[46,152661,18476],{}," 类，计算圆的周长和面积。",[26,152664,152648,152665,1605,152668,152671,152672,152675],{},[46,152666,152667],{},"Dog",[46,152669,152670],{},"Cat"," 类，并用同一个函数调用它们的 ",[46,152673,152674],{},"speak()"," 方法。",[26,152677,105590,152678,152680,152681,29633],{},[46,152679,152164],{}," 定义一个商品类 ",[46,152682,152683],{},"Product",[1305,152685,152686],{},"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":44,"searchDepth":59,"depth":59,"links":152688},[152689,152690,152691,152692,152693,152694,152696,152697,152698,152699,152700,152701,152702,152706,152707,152708,152709],{"id":150357,"depth":59,"text":150358},{"id":150540,"depth":59,"text":150541},{"id":150604,"depth":59,"text":150605},{"id":150681,"depth":59,"text":150682},{"id":150780,"depth":59,"text":150781},{"id":150944,"depth":59,"text":152695},"11.6 str",{"id":151070,"depth":59,"text":151071},{"id":151336,"depth":59,"text":151337},{"id":151450,"depth":59,"text":151451},{"id":151605,"depth":59,"text":151606},{"id":151729,"depth":59,"text":151730},{"id":151845,"depth":59,"text":151846},{"id":151994,"depth":59,"text":151995,"children":152703},[152704,152705],{"id":151998,"depth":70,"text":151999},{"id":152080,"depth":70,"text":152081},{"id":152158,"depth":59,"text":152159},{"id":152273,"depth":59,"text":152274},{"id":152610,"depth":59,"text":152611},{"id":152642,"depth":59,"text":152643},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150349,"description":1327},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152716,"title":152717,"body":152718,"description":1327,"extension":1328,"meta":156031,"navigation":1330,"path":156032,"seo":156033,"stem":156034,"__hash__":156035},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152719,"toc":156007},[152720,152723,152727,152730,152733,152762,152765,152773,152777,152781,152784,152807,152810,152816,152820,154266,154269,154290,154294,154297,154309,154312,154496,154499,154625,154628,154632,154636,154772,154776,154862,154866,154948,154952,154989,154993,155182,155186,155189,155419,155423,155426,155607,155610,155614,155617,155623,155626,155652,155656,155659,155673,155676,155701,155704,155718,155721,155738,155741,155758,155761,155778,155782,155808,155812,155835,155839,155842,155844,155850,155852,155873,155876,155882,155888,155892,155895,155971,155974,155978,156004],[10,152721,152717],{"id":152722},"_12-综合案例与复习路线",[14,152724,152726],{"id":152725},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152728,152729],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152731,152732],{},"一个合格的入门综合项目最好覆盖：",[591,152734,152735,152738,152741,152744,152747,152750,152753,152756,152759],{},[26,152736,152737],{},"输入输出。",[26,152739,152740],{},"判断和循环。",[26,152742,152743],{},"函数拆分。",[26,152745,152746],{},"列表、字典等容器。",[26,152748,152749],{},"文件持久化。",[26,152751,152752],{},"异常处理。",[26,152754,152755],{},"模块拆分。",[26,152757,152758],{},"可选：面向对象。",[26,152760,152761],{},"可选：数据可视化。",[19,152763,152764],{},"本章整理两个方向：",[591,152766,152767,152770],{},[26,152768,152769],{},"学生管理系统。",[26,152771,152772],{},"销售数据统计和可视化。",[14,152774,152776],{"id":152775},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[183,152778,152780],{"id":152779},"_1221-需求","12.2.1 需求",[19,152782,152783],{},"实现一个命令行学生管理系统：",[591,152785,152786,152789,152792,152795,152798,152801,152804],{},[26,152787,152788],{},"添加学生。",[26,152790,152791],{},"删除学生。",[26,152793,152794],{},"修改学生。",[26,152796,152797],{},"查询学生。",[26,152799,152800],{},"显示所有学生。",[26,152802,152803],{},"保存到 JSON 文件。",[26,152805,152806],{},"程序启动时自动读取 JSON 文件。",[19,152808,152809],{},"学生字段：",[39,152811,152814],{"className":152812,"code":152813,"language":267,"meta":44},[1094],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[46,152815,152813],{"__ignoreMap":44},[14,152817,152819],{"id":152818},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[39,152821,152823],{"className":31626,"code":152822,"language":31628,"meta":44,"style":44},"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",[46,152824,152825,152831,152841,152845,152859,152863,152867,152876,152888,152894,152898,152904,152935,152945,152952,152963,152969,152973,152977,152987,153018,153044,153048,153052,153061,153072,153083,153094,153105,153116,153127,153138,153142,153146,153156,153168,153184,153191,153198,153202,153206,153216,153224,153231,153244,153254,153265,153269,153273,153282,153290,153296,153308,153316,153327,153331,153335,153344,153360,153364,153371,153382,153387,153391,153407,153422,153437,153441,153446,153454,153462,153470,153478,153482,153487,153498,153502,153506,153515,153530,153540,153544,153556,153567,153571,153575,153580,153584,153595,153599,153603,153612,153627,153635,153639,153651,153661,153665,153669,153684,153697,153710,153714,153727,153739,153751,153755,153759,153770,153774,153778,153787,153802,153810,153814,153826,153836,153840,153844,153849,153853,153857,153867,153873,153895,153914,153933,153952,153957,153961,153965,153974,153982,153993,153997,154001,154027,154037,154042,154046,154050,154058,154068,154072,154080,154085,154101,154105,154119,154124,154138,154143,154156,154161,154174,154179,154192,154197,154210,154221,154225,154231,154242,154246,154250,154262],{"__ignoreMap":44},[49,152826,152827,152829],{"class":51,"line":52},[49,152828,31640],{"class":109},[49,152830,148116],{"class":66},[49,152832,152833,152835,152837,152839],{"class":51,"line":59},[49,152834,31985],{"class":109},[49,152836,109535],{"class":66},[49,152838,31640],{"class":109},[49,152840,109540],{"class":66},[49,152842,152843],{"class":51,"line":70},[49,152844,3654],{"emptyLinePlaceholder":1330},[49,152846,152847,152850,152852,152854,152857],{"class":51,"line":86},[49,152848,152849],{"class":73},"DATA_FILE",[49,152851,14816],{"class":109},[49,152853,109769],{"class":66},[49,152855,152856],{"class":1505},"\"students.json\"",[49,152858,1409],{"class":66},[49,152860,152861],{"class":51,"line":98},[49,152862,3654],{"emptyLinePlaceholder":1330},[49,152864,152865],{"class":51,"line":121},[49,152866,3654],{"emptyLinePlaceholder":1330},[49,152868,152869,152871,152874],{"class":51,"line":134},[49,152870,33195],{"class":109},[49,152872,152873],{"class":62}," load_students",[49,152875,33201],{"class":66},[49,152877,152878,152880,152882,152885],{"class":51,"line":1085},[49,152879,4355],{"class":109},[49,152881,40178],{"class":109},[49,152883,152884],{"class":73}," DATA_FILE",[49,152886,152887],{"class":66},".exists():\n",[49,152889,152890,152892],{"class":51,"line":2574},[49,152891,16003],{"class":109},[49,152893,53080],{"class":66},[49,152895,152896],{"class":51,"line":2586},[49,152897,3654],{"emptyLinePlaceholder":1330},[49,152899,152900,152902],{"class":51,"line":2867},[49,152901,127008],{"class":109},[49,152903,4993],{"class":66},[49,152905,152906,152909,152911,152913,152915,152917,152919,152921,152923,152925,152927,152929,152931,152933],{"class":51,"line":2872},[49,152907,152908],{"class":109},"        with",[49,152910,147816],{"class":73},[49,152912,1403],{"class":66},[49,152914,152849],{"class":73},[49,152916,13687],{"class":66},[49,152918,147826],{"class":1505},[49,152920,13687],{"class":66},[49,152922,147831],{"class":6468},[49,152924,1448],{"class":109},[49,152926,147836],{"class":1505},[49,152928,14966],{"class":66},[49,152930,32631],{"class":109},[49,152932,149178],{"class":6468},[49,152934,4993],{"class":66},[49,152936,152937,152939,152941,152943],{"class":51,"line":2878},[49,152938,16982],{"class":109},[49,152940,149189],{"class":66},[49,152942,46602],{"class":6468},[49,152944,1409],{"class":66},[49,152946,152947,152949],{"class":51,"line":2883},[49,152948,127036],{"class":109},[49,152950,152951],{"class":66}," json.JSONDecodeError:\n",[49,152953,152954,152956,152958,152961],{"class":51,"line":2897},[49,152955,33699],{"class":73},[49,152957,1403],{"class":66},[49,152959,152960],{"class":1505},"\"数据文件格式错误，已使用空数据启动\"",[49,152962,1409],{"class":66},[49,152964,152965,152967],{"class":51,"line":2902},[49,152966,16003],{"class":109},[49,152968,53080],{"class":66},[49,152970,152971],{"class":51,"line":2908},[49,152972,3654],{"emptyLinePlaceholder":1330},[49,152974,152975],{"class":51,"line":2929},[49,152976,3654],{"emptyLinePlaceholder":1330},[49,152978,152979,152981,152984],{"class":51,"line":2934},[49,152980,33195],{"class":109},[49,152982,152983],{"class":62}," save_students",[49,152985,152986],{"class":66},"(students):\n",[49,152988,152989,152991,152993,152995,152997,152999,153002,153004,153006,153008,153010,153012,153014,153016],{"class":51,"line":2948},[49,152990,35426],{"class":109},[49,152992,147816],{"class":73},[49,152994,1403],{"class":66},[49,152996,152849],{"class":73},[49,152998,13687],{"class":66},[49,153000,153001],{"class":1505},"\"w\"",[49,153003,13687],{"class":66},[49,153005,147831],{"class":6468},[49,153007,1448],{"class":109},[49,153009,147836],{"class":1505},[49,153011,14966],{"class":66},[49,153013,32631],{"class":109},[49,153015,149178],{"class":6468},[49,153017,4993],{"class":66},[49,153019,153020,153023,153025,153027,153029,153031,153033,153035,153038,153040,153042],{"class":51,"line":2953},[49,153021,153022],{"class":66},"        json.dump(students, ",[49,153024,46602],{"class":6468},[49,153026,13687],{"class":66},[49,153028,148162],{"class":6468},[49,153030,1448],{"class":109},[49,153032,35235],{"class":73},[49,153034,13687],{"class":66},[49,153036,153037],{"class":6468},"indent",[49,153039,1448],{"class":109},[49,153041,1478],{"class":73},[49,153043,1409],{"class":66},[49,153045,153046],{"class":51,"line":2982},[49,153047,3654],{"emptyLinePlaceholder":1330},[49,153049,153050],{"class":51,"line":2987},[49,153051,3654],{"emptyLinePlaceholder":1330},[49,153053,153054,153056,153059],{"class":51,"line":3004},[49,153055,33195],{"class":109},[49,153057,153058],{"class":62}," show_menu",[49,153060,33201],{"class":66},[49,153062,153063,153065,153067,153070],{"class":51,"line":3009},[49,153064,32547],{"class":73},[49,153066,1403],{"class":66},[49,153068,153069],{"class":1505},"\"====== 学生管理系统 ======\"",[49,153071,1409],{"class":66},[49,153073,153074,153076,153078,153081],{"class":51,"line":3014},[49,153075,32547],{"class":73},[49,153077,1403],{"class":66},[49,153079,153080],{"class":1505},"\"1. 添加学生\"",[49,153082,1409],{"class":66},[49,153084,153085,153087,153089,153092],{"class":51,"line":3019},[49,153086,32547],{"class":73},[49,153088,1403],{"class":66},[49,153090,153091],{"class":1505},"\"2. 删除学生\"",[49,153093,1409],{"class":66},[49,153095,153096,153098,153100,153103],{"class":51,"line":3033},[49,153097,32547],{"class":73},[49,153099,1403],{"class":66},[49,153101,153102],{"class":1505},"\"3. 修改学生\"",[49,153104,1409],{"class":66},[49,153106,153107,153109,153111,153114],{"class":51,"line":3038},[49,153108,32547],{"class":73},[49,153110,1403],{"class":66},[49,153112,153113],{"class":1505},"\"4. 查询学生\"",[49,153115,1409],{"class":66},[49,153117,153118,153120,153122,153125],{"class":51,"line":3831},[49,153119,32547],{"class":73},[49,153121,1403],{"class":66},[49,153123,153124],{"class":1505},"\"5. 显示所有学生\"",[49,153126,1409],{"class":66},[49,153128,153129,153131,153133,153136],{"class":51,"line":3845},[49,153130,32547],{"class":73},[49,153132,1403],{"class":66},[49,153134,153135],{"class":1505},"\"0. 退出系统\"",[49,153137,1409],{"class":66},[49,153139,153140],{"class":51,"line":3853},[49,153141,3654],{"emptyLinePlaceholder":1330},[49,153143,153144],{"class":51,"line":3858},[49,153145,3654],{"emptyLinePlaceholder":1330},[49,153147,153148,153150,153153],{"class":51,"line":3864},[49,153149,33195],{"class":109},[49,153151,153152],{"class":62}," find_student",[49,153154,153155],{"class":66},"(students, student_id):\n",[49,153157,153158,153160,153163,153165],{"class":51,"line":3870},[49,153159,4455],{"class":109},[49,153161,153162],{"class":66}," student ",[49,153164,27292],{"class":109},[49,153166,153167],{"class":66}," students:\n",[49,153169,153170,153172,153175,153177,153179,153181],{"class":51,"line":3875},[49,153171,3751],{"class":109},[49,153173,153174],{"class":66}," student[",[49,153176,152472],{"class":1505},[49,153178,5697],{"class":66},[49,153180,4203],{"class":109},[49,153182,153183],{"class":66}," student_id:\n",[49,153185,153186,153188],{"class":51,"line":9200},[49,153187,16982],{"class":109},[49,153189,153190],{"class":66}," student\n",[49,153192,153193,153195],{"class":51,"line":9224},[49,153194,5344],{"class":109},[49,153196,153197],{"class":73}," None\n",[49,153199,153200],{"class":51,"line":9229},[49,153201,3654],{"emptyLinePlaceholder":1330},[49,153203,153204],{"class":51,"line":9235},[49,153205,3654],{"emptyLinePlaceholder":1330},[49,153207,153208,153210,153213],{"class":51,"line":9262},[49,153209,33195],{"class":109},[49,153211,153212],{"class":62}," input_int",[49,153214,153215],{"class":66},"(prompt):\n",[49,153217,153218,153220,153222],{"class":51,"line":9267},[49,153219,3505],{"class":109},[49,153221,96517],{"class":73},[49,153223,4993],{"class":66},[49,153225,153226,153229],{"class":51,"line":9273},[49,153227,153228],{"class":109},"        try",[49,153230,4993],{"class":66},[49,153232,153233,153235,153237,153239,153241],{"class":51,"line":9285},[49,153234,16982],{"class":109},[49,153236,3636],{"class":73},[49,153238,1403],{"class":66},[49,153240,448],{"class":73},[49,153242,153243],{"class":66},"(prompt))\n",[49,153245,153246,153249,153252],{"class":51,"line":9297},[49,153247,153248],{"class":109},"        except",[49,153250,153251],{"class":73}," ValueError",[49,153253,4993],{"class":66},[49,153255,153256,153258,153260,153263],{"class":51,"line":9309},[49,153257,35898],{"class":73},[49,153259,1403],{"class":66},[49,153261,153262],{"class":1505},"\"请输入整数\"",[49,153264,1409],{"class":66},[49,153266,153267],{"class":51,"line":10968},[49,153268,3654],{"emptyLinePlaceholder":1330},[49,153270,153271],{"class":51,"line":10993},[49,153272,3654],{"emptyLinePlaceholder":1330},[49,153274,153275,153277,153280],{"class":51,"line":11016},[49,153276,33195],{"class":109},[49,153278,153279],{"class":62}," input_float",[49,153281,153215],{"class":66},[49,153283,153284,153286,153288],{"class":51,"line":11040},[49,153285,3505],{"class":109},[49,153287,96517],{"class":73},[49,153289,4993],{"class":66},[49,153291,153292,153294],{"class":51,"line":11045},[49,153293,153228],{"class":109},[49,153295,4993],{"class":66},[49,153297,153298,153300,153302,153304,153306],{"class":51,"line":11050},[49,153299,16982],{"class":109},[49,153301,111021],{"class":73},[49,153303,1403],{"class":66},[49,153305,448],{"class":73},[49,153307,153243],{"class":66},[49,153309,153310,153312,153314],{"class":51,"line":11055},[49,153311,153248],{"class":109},[49,153313,153251],{"class":73},[49,153315,4993],{"class":66},[49,153317,153318,153320,153322,153325],{"class":51,"line":11064},[49,153319,35898],{"class":73},[49,153321,1403],{"class":66},[49,153323,153324],{"class":1505},"\"请输入数字\"",[49,153326,1409],{"class":66},[49,153328,153329],{"class":51,"line":11069},[49,153330,3654],{"emptyLinePlaceholder":1330},[49,153332,153333],{"class":51,"line":11075},[49,153334,3654],{"emptyLinePlaceholder":1330},[49,153336,153337,153339,153342],{"class":51,"line":11096},[49,153338,33195],{"class":109},[49,153340,153341],{"class":62}," add_student",[49,153343,152986],{"class":66},[49,153345,153346,153349,153351,153353,153355,153358],{"class":51,"line":11102},[49,153347,153348],{"class":66},"    student_id ",[49,153350,1448],{"class":109},[49,153352,61844],{"class":73},[49,153354,1403],{"class":66},[49,153356,153357],{"class":1505},"\"请输入学号:\"",[49,153359,1409],{"class":66},[49,153361,153362],{"class":51,"line":11116},[49,153363,3654],{"emptyLinePlaceholder":1330},[49,153365,153366,153368],{"class":51,"line":11122},[49,153367,4355],{"class":109},[49,153369,153370],{"class":66}," find_student(students, student_id):\n",[49,153372,153373,153375,153377,153380],{"class":51,"line":11149},[49,153374,33699],{"class":73},[49,153376,1403],{"class":66},[49,153378,153379],{"class":1505},"\"学号已存在\"",[49,153381,1409],{"class":66},[49,153383,153384],{"class":51,"line":11158},[49,153385,153386],{"class":109},"        return\n",[49,153388,153389],{"class":51,"line":11164},[49,153390,3654],{"emptyLinePlaceholder":1330},[49,153392,153393,153396,153398,153400,153402,153405],{"class":51,"line":11172},[49,153394,153395],{"class":66},"    name ",[49,153397,1448],{"class":109},[49,153399,61844],{"class":73},[49,153401,1403],{"class":66},[49,153403,153404],{"class":1505},"\"请输入姓名:\"",[49,153406,1409],{"class":66},[49,153408,153409,153412,153414,153417,153420],{"class":51,"line":11177},[49,153410,153411],{"class":66},"    age ",[49,153413,1448],{"class":109},[49,153415,153416],{"class":66}," input_int(",[49,153418,153419],{"class":1505},"\"请输入年龄:\"",[49,153421,1409],{"class":66},[49,153423,153424,153427,153429,153432,153435],{"class":51,"line":17854},[49,153425,153426],{"class":66},"    score ",[49,153428,1448],{"class":109},[49,153430,153431],{"class":66}," input_float(",[49,153433,153434],{"class":1505},"\"请输入成绩:\"",[49,153436,1409],{"class":66},[49,153438,153439],{"class":51,"line":17860},[49,153440,3654],{"emptyLinePlaceholder":1330},[49,153442,153443],{"class":51,"line":17883},[49,153444,153445],{"class":66},"    students.append({\n",[49,153447,153448,153451],{"class":51,"line":17889},[49,153449,153450],{"class":1505},"        \"student_id\"",[49,153452,153453],{"class":66},": student_id,\n",[49,153455,153456,153459],{"class":51,"line":17912},[49,153457,153458],{"class":1505},"        \"name\"",[49,153460,153461],{"class":66},": name,\n",[49,153463,153464,153467],{"class":51,"line":17926},[49,153465,153466],{"class":1505},"        \"age\"",[49,153468,153469],{"class":66},": age,\n",[49,153471,153472,153475],{"class":51,"line":17946},[49,153473,153474],{"class":1505},"        \"score\"",[49,153476,153477],{"class":66},": score,\n",[49,153479,153480],{"class":51,"line":17952},[49,153481,34709],{"class":66},[49,153483,153484],{"class":51,"line":17963},[49,153485,153486],{"class":66},"    save_students(students)\n",[49,153488,153489,153491,153493,153496],{"class":51,"line":17986},[49,153490,32547],{"class":73},[49,153492,1403],{"class":66},[49,153494,153495],{"class":1505},"\"添加成功\"",[49,153497,1409],{"class":66},[49,153499,153500],{"class":51,"line":18008},[49,153501,3654],{"emptyLinePlaceholder":1330},[49,153503,153504],{"class":51,"line":18013},[49,153505,3654],{"emptyLinePlaceholder":1330},[49,153507,153508,153510,153513],{"class":51,"line":18019},[49,153509,33195],{"class":109},[49,153511,153512],{"class":62}," delete_student",[49,153514,152986],{"class":66},[49,153516,153517,153519,153521,153523,153525,153528],{"class":51,"line":18033},[49,153518,153348],{"class":66},[49,153520,1448],{"class":109},[49,153522,61844],{"class":73},[49,153524,1403],{"class":66},[49,153526,153527],{"class":1505},"\"请输入要删除的学号:\"",[49,153529,1409],{"class":66},[49,153531,153532,153535,153537],{"class":51,"line":18046},[49,153533,153534],{"class":66},"    student ",[49,153536,1448],{"class":109},[49,153538,153539],{"class":66}," find_student(students, student_id)\n",[49,153541,153542],{"class":51,"line":18051},[49,153543,3654],{"emptyLinePlaceholder":1330},[49,153545,153546,153548,153550,153552,153554],{"class":51,"line":18065},[49,153547,4355],{"class":109},[49,153549,153162],{"class":66},[49,153551,40175],{"class":109},[49,153553,40181],{"class":73},[49,153555,4993],{"class":66},[49,153557,153558,153560,153562,153565],{"class":51,"line":18070},[49,153559,33699],{"class":73},[49,153561,1403],{"class":66},[49,153563,153564],{"class":1505},"\"学生不存在\"",[49,153566,1409],{"class":66},[49,153568,153569],{"class":51,"line":18076},[49,153570,153386],{"class":109},[49,153572,153573],{"class":51,"line":18081},[49,153574,3654],{"emptyLinePlaceholder":1330},[49,153576,153577],{"class":51,"line":18095},[49,153578,153579],{"class":66},"    students.remove(student)\n",[49,153581,153582],{"class":51,"line":18100},[49,153583,153486],{"class":66},[49,153585,153586,153588,153590,153593],{"class":51,"line":18105},[49,153587,32547],{"class":73},[49,153589,1403],{"class":66},[49,153591,153592],{"class":1505},"\"删除成功\"",[49,153594,1409],{"class":66},[49,153596,153597],{"class":51,"line":18119},[49,153598,3654],{"emptyLinePlaceholder":1330},[49,153600,153601],{"class":51,"line":18131},[49,153602,3654],{"emptyLinePlaceholder":1330},[49,153604,153605,153607,153610],{"class":51,"line":18136},[49,153606,33195],{"class":109},[49,153608,153609],{"class":62}," update_student",[49,153611,152986],{"class":66},[49,153613,153614,153616,153618,153620,153622,153625],{"class":51,"line":18149},[49,153615,153348],{"class":66},[49,153617,1448],{"class":109},[49,153619,61844],{"class":73},[49,153621,1403],{"class":66},[49,153623,153624],{"class":1505},"\"请输入要修改的学号:\"",[49,153626,1409],{"class":66},[49,153628,153629,153631,153633],{"class":51,"line":18154},[49,153630,153534],{"class":66},[49,153632,1448],{"class":109},[49,153634,153539],{"class":66},[49,153636,153637],{"class":51,"line":18159},[49,153638,3654],{"emptyLinePlaceholder":1330},[49,153640,153641,153643,153645,153647,153649],{"class":51,"line":18164},[49,153642,4355],{"class":109},[49,153644,153162],{"class":66},[49,153646,40175],{"class":109},[49,153648,40181],{"class":73},[49,153650,4993],{"class":66},[49,153652,153653,153655,153657,153659],{"class":51,"line":18177},[49,153654,33699],{"class":73},[49,153656,1403],{"class":66},[49,153658,153564],{"class":1505},[49,153660,1409],{"class":66},[49,153662,153663],{"class":51,"line":18182},[49,153664,153386],{"class":109},[49,153666,153667],{"class":51,"line":33881},[49,153668,3654],{"emptyLinePlaceholder":1330},[49,153670,153671,153673,153675,153677,153679,153682],{"class":51,"line":33887},[49,153672,153395],{"class":66},[49,153674,1448],{"class":109},[49,153676,61844],{"class":73},[49,153678,1403],{"class":66},[49,153680,153681],{"class":1505},"\"请输入新姓名:\"",[49,153683,1409],{"class":66},[49,153685,153686,153688,153690,153692,153695],{"class":51,"line":33893},[49,153687,153411],{"class":66},[49,153689,1448],{"class":109},[49,153691,153416],{"class":66},[49,153693,153694],{"class":1505},"\"请输入新年龄:\"",[49,153696,1409],{"class":66},[49,153698,153699,153701,153703,153705,153708],{"class":51,"line":33899},[49,153700,153426],{"class":66},[49,153702,1448],{"class":109},[49,153704,153431],{"class":66},[49,153706,153707],{"class":1505},"\"请输入新成绩:\"",[49,153709,1409],{"class":66},[49,153711,153712],{"class":51,"line":33905},[49,153713,3654],{"emptyLinePlaceholder":1330},[49,153715,153716,153719,153721,153723,153725],{"class":51,"line":33916},[49,153717,153718],{"class":66},"    student[",[49,153720,63915],{"class":1505},[49,153722,5697],{"class":66},[49,153724,1448],{"class":109},[49,153726,150820],{"class":66},[49,153728,153729,153731,153733,153735,153737],{"class":51,"line":33922},[49,153730,153718],{"class":66},[49,153732,70359],{"class":1505},[49,153734,5697],{"class":66},[49,153736,1448],{"class":109},[49,153738,150832],{"class":66},[49,153740,153741,153743,153745,153747,153749],{"class":51,"line":33942},[49,153742,153718],{"class":66},[49,153744,152497],{"class":1505},[49,153746,5697],{"class":66},[49,153748,1448],{"class":109},[49,153750,2834],{"class":66},[49,153752,153753],{"class":51,"line":33948},[49,153754,3654],{"emptyLinePlaceholder":1330},[49,153756,153757],{"class":51,"line":33959},[49,153758,153486],{"class":66},[49,153760,153761,153763,153765,153768],{"class":51,"line":33965},[49,153762,32547],{"class":73},[49,153764,1403],{"class":66},[49,153766,153767],{"class":1505},"\"修改成功\"",[49,153769,1409],{"class":66},[49,153771,153772],{"class":51,"line":33971},[49,153773,3654],{"emptyLinePlaceholder":1330},[49,153775,153776],{"class":51,"line":33977},[49,153777,3654],{"emptyLinePlaceholder":1330},[49,153779,153780,153782,153785],{"class":51,"line":33983},[49,153781,33195],{"class":109},[49,153783,153784],{"class":62}," query_student",[49,153786,152986],{"class":66},[49,153788,153789,153791,153793,153795,153797,153800],{"class":51,"line":33989},[49,153790,153348],{"class":66},[49,153792,1448],{"class":109},[49,153794,61844],{"class":73},[49,153796,1403],{"class":66},[49,153798,153799],{"class":1505},"\"请输入要查询的学号:\"",[49,153801,1409],{"class":66},[49,153803,153804,153806,153808],{"class":51,"line":33995},[49,153805,153534],{"class":66},[49,153807,1448],{"class":109},[49,153809,153539],{"class":66},[49,153811,153812],{"class":51,"line":34001},[49,153813,3654],{"emptyLinePlaceholder":1330},[49,153815,153816,153818,153820,153822,153824],{"class":51,"line":34021},[49,153817,4355],{"class":109},[49,153819,153162],{"class":66},[49,153821,40175],{"class":109},[49,153823,40181],{"class":73},[49,153825,4993],{"class":66},[49,153827,153828,153830,153832,153834],{"class":51,"line":34027},[49,153829,33699],{"class":73},[49,153831,1403],{"class":66},[49,153833,153564],{"class":1505},[49,153835,1409],{"class":66},[49,153837,153838],{"class":51,"line":34043},[49,153839,153386],{"class":109},[49,153841,153842],{"class":51,"line":34049},[49,153843,3654],{"emptyLinePlaceholder":1330},[49,153845,153846],{"class":51,"line":34063},[49,153847,153848],{"class":66},"    print_student(student)\n",[49,153850,153851],{"class":51,"line":34069},[49,153852,3654],{"emptyLinePlaceholder":1330},[49,153854,153855],{"class":51,"line":34084},[49,153856,3654],{"emptyLinePlaceholder":1330},[49,153858,153859,153861,153864],{"class":51,"line":34090},[49,153860,33195],{"class":109},[49,153862,153863],{"class":62}," print_student",[49,153865,153866],{"class":66},"(student):\n",[49,153868,153869,153871],{"class":51,"line":34099},[49,153870,32547],{"class":73},[49,153872,152464],{"class":66},[49,153874,153875,153878,153880,153882,153885,153888,153890,153893],{"class":51,"line":34105},[49,153876,153877],{"class":109},"        f",[49,153879,1643],{"class":1505},[49,153881,2286],{"class":73},[49,153883,153884],{"class":66},"student[",[49,153886,153887],{"class":1505},"'student_id'",[49,153889,2330],{"class":66},[49,153891,153892],{"class":73},"}\\t",[49,153894,26382],{"class":1505},[49,153896,153897,153899,153901,153903,153905,153908,153910,153912],{"class":51,"line":34114},[49,153898,153877],{"class":109},[49,153900,1643],{"class":1505},[49,153902,2286],{"class":73},[49,153904,153884],{"class":66},[49,153906,153907],{"class":1505},"'name'",[49,153909,2330],{"class":66},[49,153911,153892],{"class":73},[49,153913,26382],{"class":1505},[49,153915,153916,153918,153920,153922,153924,153927,153929,153931],{"class":51,"line":34120},[49,153917,153877],{"class":109},[49,153919,1643],{"class":1505},[49,153921,2286],{"class":73},[49,153923,153884],{"class":66},[49,153925,153926],{"class":1505},"'age'",[49,153928,2330],{"class":66},[49,153930,153892],{"class":73},[49,153932,26382],{"class":1505},[49,153934,153935,153937,153939,153941,153943,153946,153948,153950],{"class":51,"line":34126},[49,153936,153877],{"class":109},[49,153938,1643],{"class":1505},[49,153940,2286],{"class":73},[49,153942,153884],{"class":66},[49,153944,153945],{"class":1505},"'score'",[49,153947,2330],{"class":66},[49,153949,620],{"class":73},[49,153951,26382],{"class":1505},[49,153953,153954],{"class":51,"line":34135},[49,153955,153956],{"class":66},"    )\n",[49,153958,153959],{"class":51,"line":34141},[49,153960,3654],{"emptyLinePlaceholder":1330},[49,153962,153963],{"class":51,"line":34152},[49,153964,3654],{"emptyLinePlaceholder":1330},[49,153966,153967,153969,153972],{"class":51,"line":34158},[49,153968,33195],{"class":109},[49,153970,153971],{"class":62}," show_all_students",[49,153973,152986],{"class":66},[49,153975,153976,153978,153980],{"class":51,"line":34177},[49,153977,4355],{"class":109},[49,153979,40178],{"class":109},[49,153981,153167],{"class":66},[49,153983,153984,153986,153988,153991],{"class":51,"line":34183},[49,153985,33699],{"class":73},[49,153987,1403],{"class":66},[49,153989,153990],{"class":1505},"\"暂无学生\"",[49,153992,1409],{"class":66},[49,153994,153995],{"class":51,"line":34194},[49,153996,153386],{"class":109},[49,153998,153999],{"class":51,"line":34200},[49,154000,3654],{"emptyLinePlaceholder":1330},[49,154002,154003,154005,154007,154010,154012,154015,154017,154020,154022,154025],{"class":51,"line":34220},[49,154004,32547],{"class":73},[49,154006,1403],{"class":66},[49,154008,154009],{"class":1505},"\"学号",[49,154011,2489],{"class":73},[49,154013,154014],{"class":1505},"姓名",[49,154016,2489],{"class":73},[49,154018,154019],{"class":1505},"年龄",[49,154021,2489],{"class":73},[49,154023,154024],{"class":1505},"成绩\"",[49,154026,1409],{"class":66},[49,154028,154029,154031,154033,154035],{"class":51,"line":34236},[49,154030,4455],{"class":109},[49,154032,153162],{"class":66},[49,154034,27292],{"class":109},[49,154036,153167],{"class":66},[49,154038,154039],{"class":51,"line":34242},[49,154040,154041],{"class":66},"        print_student(student)\n",[49,154043,154044],{"class":51,"line":34256},[49,154045,3654],{"emptyLinePlaceholder":1330},[49,154047,154048],{"class":51,"line":34262},[49,154049,3654],{"emptyLinePlaceholder":1330},[49,154051,154052,154054,154056],{"class":51,"line":34268},[49,154053,33195],{"class":109},[49,154055,3227],{"class":62},[49,154057,33201],{"class":66},[49,154059,154060,154063,154065],{"class":51,"line":34279},[49,154061,154062],{"class":66},"    students ",[49,154064,1448],{"class":109},[49,154066,154067],{"class":66}," load_students()\n",[49,154069,154070],{"class":51,"line":34285},[49,154071,3654],{"emptyLinePlaceholder":1330},[49,154073,154074,154076,154078],{"class":51,"line":34291},[49,154075,3505],{"class":109},[49,154077,96517],{"class":73},[49,154079,4993],{"class":66},[49,154081,154082],{"class":51,"line":34301},[49,154083,154084],{"class":66},"        show_menu()\n",[49,154086,154087,154090,154092,154094,154096,154099],{"class":51,"line":34307},[49,154088,154089],{"class":66},"        choice ",[49,154091,1448],{"class":109},[49,154093,61844],{"class":73},[49,154095,1403],{"class":66},[49,154097,154098],{"class":1505},"\"请输入操作:\"",[49,154100,1409],{"class":66},[49,154102,154103],{"class":51,"line":34318},[49,154104,3654],{"emptyLinePlaceholder":1330},[49,154106,154107,154109,154112,154114,154117],{"class":51,"line":34324},[49,154108,3751],{"class":109},[49,154110,154111],{"class":66}," choice ",[49,154113,4203],{"class":109},[49,154115,154116],{"class":1505}," \"1\"",[49,154118,4993],{"class":66},[49,154120,154121],{"class":51,"line":34334},[49,154122,154123],{"class":66},"            add_student(students)\n",[49,154125,154126,154129,154131,154133,154136],{"class":51,"line":34339},[49,154127,154128],{"class":109},"        elif",[49,154130,154111],{"class":66},[49,154132,4203],{"class":109},[49,154134,154135],{"class":1505}," \"2\"",[49,154137,4993],{"class":66},[49,154139,154140],{"class":51,"line":34345},[49,154141,154142],{"class":66},"            delete_student(students)\n",[49,154144,154145,154147,154149,154151,154154],{"class":51,"line":34394},[49,154146,154128],{"class":109},[49,154148,154111],{"class":66},[49,154150,4203],{"class":109},[49,154152,154153],{"class":1505}," \"3\"",[49,154155,4993],{"class":66},[49,154157,154158],{"class":51,"line":34441},[49,154159,154160],{"class":66},"            update_student(students)\n",[49,154162,154163,154165,154167,154169,154172],{"class":51,"line":34446},[49,154164,154128],{"class":109},[49,154166,154111],{"class":66},[49,154168,4203],{"class":109},[49,154170,154171],{"class":1505}," \"4\"",[49,154173,4993],{"class":66},[49,154175,154176],{"class":51,"line":34452},[49,154177,154178],{"class":66},"            query_student(students)\n",[49,154180,154181,154183,154185,154187,154190],{"class":51,"line":34471},[49,154182,154128],{"class":109},[49,154184,154111],{"class":66},[49,154186,4203],{"class":109},[49,154188,154189],{"class":1505}," \"5\"",[49,154191,4993],{"class":66},[49,154193,154194],{"class":51,"line":34477},[49,154195,154196],{"class":66},"            show_all_students(students)\n",[49,154198,154199,154201,154203,154205,154208],{"class":51,"line":34497},[49,154200,154128],{"class":109},[49,154202,154111],{"class":66},[49,154204,4203],{"class":109},[49,154206,154207],{"class":1505}," \"0\"",[49,154209,4993],{"class":66},[49,154211,154212,154214,154216,154219],{"class":51,"line":34503},[49,154213,35898],{"class":73},[49,154215,1403],{"class":66},[49,154217,154218],{"class":1505},"\"退出系统\"",[49,154220,1409],{"class":66},[49,154222,154223],{"class":51,"line":34509},[49,154224,116322],{"class":109},[49,154226,154227,154229],{"class":51,"line":34519},[49,154228,3788],{"class":109},[49,154230,4993],{"class":66},[49,154232,154233,154235,154237,154240],{"class":51,"line":34524},[49,154234,35898],{"class":73},[49,154236,1403],{"class":66},[49,154238,154239],{"class":1505},"\"输入错误\"",[49,154241,1409],{"class":66},[49,154243,154244],{"class":51,"line":34530},[49,154245,3654],{"emptyLinePlaceholder":1330},[49,154247,154248],{"class":51,"line":34546},[49,154249,3654],{"emptyLinePlaceholder":1330},[49,154251,154252,154254,154256,154258,154260],{"class":51,"line":34591},[49,154253,2787],{"class":109},[49,154255,32468],{"class":73},[49,154257,102783],{"class":109},[49,154259,102786],{"class":1505},[49,154261,4993],{"class":66},[49,154263,154264],{"class":51,"line":34597},[49,154265,102793],{"class":66},[19,154267,154268],{},"这个项目串联了：",[591,154270,154271,154274,154277,154280,154283,154285],{},[26,154272,154273],{},"菜单循环。",[26,154275,154276],{},"函数封装。",[26,154278,154279],{},"列表字典。",[26,154281,154282],{},"JSON 读写。",[26,154284,152752],{},[26,154286,154287,29633],{},[46,154288,154289],{},"if __name__ == \"__main__\"",[14,154291,154293],{"id":154292},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154295,154296],{},"可以进一步拆成两个类：",[591,154298,154299,154304],{},[26,154300,154301,154303],{},[46,154302,150593],{},"：表示单个学生。",[26,154305,154306,154308],{},[46,154307,152619],{},"：负责学生增删改查和文件保存。",[19,154310,154311],{},"示意代码：",[39,154313,154315],{"className":31626,"code":154314,"language":31628,"meta":44,"style":44},"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",[46,154316,154317,154327,154331,154335,154339,154347,154354,154360,154366,154372,154376,154384,154390,154400,154410,154420,154430,154434,154438,154444,154452,154460,154468,154476,154484,154492],{"__ignoreMap":44},[49,154318,154319,154321,154323,154325],{"class":51,"line":52},[49,154320,31985],{"class":109},[49,154322,152177],{"class":66},[49,154324,31640],{"class":109},[49,154326,152182],{"class":66},[49,154328,154329],{"class":51,"line":59},[49,154330,3654],{"emptyLinePlaceholder":1330},[49,154332,154333],{"class":51,"line":70},[49,154334,3654],{"emptyLinePlaceholder":1330},[49,154336,154337],{"class":51,"line":86},[49,154338,152195],{"class":62},[49,154340,154341,154343,154345],{"class":51,"line":98},[49,154342,15945],{"class":109},[49,154344,9150],{"class":62},[49,154346,4993],{"class":66},[49,154348,154349,154352],{"class":51,"line":121},[49,154350,154351],{"class":66},"    student_id: ",[49,154353,152211],{"class":73},[49,154355,154356,154358],{"class":51,"line":134},[49,154357,152208],{"class":66},[49,154359,152211],{"class":73},[49,154361,154362,154364],{"class":51,"line":1085},[49,154363,152216],{"class":66},[49,154365,152219],{"class":73},[49,154367,154368,154370],{"class":51,"line":2574},[49,154369,152224],{"class":66},[49,154371,152227],{"class":73},[49,154373,154374],{"class":51,"line":2586},[49,154375,3654],{"emptyLinePlaceholder":1330},[49,154377,154378,154380,154382],{"class":51,"line":2867},[49,154379,32049],{"class":109},[49,154381,152375],{"class":62},[49,154383,32055],{"class":66},[49,154385,154386,154388],{"class":51,"line":2872},[49,154387,16003],{"class":109},[49,154389,67],{"class":66},[49,154391,154392,154394,154396,154398],{"class":51,"line":2878},[49,154393,152388],{"class":1505},[49,154395,77],{"class":66},[49,154397,32071],{"class":73},[49,154399,152395],{"class":66},[49,154401,154402,154404,154406,154408],{"class":51,"line":2883},[49,154403,152400],{"class":1505},[49,154405,77],{"class":66},[49,154407,32071],{"class":73},[49,154409,152407],{"class":66},[49,154411,154412,154414,154416,154418],{"class":51,"line":2897},[49,154413,152412],{"class":1505},[49,154415,77],{"class":66},[49,154417,32071],{"class":73},[49,154419,152419],{"class":66},[49,154421,154422,154424,154426,154428],{"class":51,"line":2902},[49,154423,152424],{"class":1505},[49,154425,77],{"class":66},[49,154427,32071],{"class":73},[49,154429,152431],{"class":66},[49,154431,154432],{"class":51,"line":2908},[49,154433,3783],{"class":66},[49,154435,154436],{"class":51,"line":2929},[49,154437,3654],{"emptyLinePlaceholder":1330},[49,154439,154440,154442],{"class":51,"line":2934},[49,154441,152039],{"class":62},[49,154443,152042],{"class":73},[49,154445,154446,154448,154450],{"class":51,"line":2948},[49,154447,32049],{"class":109},[49,154449,152452],{"class":62},[49,154451,152455],{"class":66},[49,154453,154454,154456,154458],{"class":51,"line":2953},[49,154455,16003],{"class":109},[49,154457,152059],{"class":73},[49,154459,152464],{"class":66},[49,154461,154462,154464,154466],{"class":51,"line":2982},[49,154463,152469],{"class":66},[49,154465,152472],{"class":1505},[49,154467,89061],{"class":66},[49,154469,154470,154472,154474],{"class":51,"line":2987},[49,154471,152469],{"class":66},[49,154473,63915],{"class":1505},[49,154475,89061],{"class":66},[49,154477,154478,154480,154482],{"class":51,"line":3004},[49,154479,152469],{"class":66},[49,154481,70359],{"class":1505},[49,154483,89061],{"class":66},[49,154485,154486,154488,154490],{"class":51,"line":3009},[49,154487,152469],{"class":66},[49,154489,152497],{"class":1505},[49,154491,89061],{"class":66},[49,154493,154494],{"class":51,"line":3014},[49,154495,39374],{"class":66},[19,154497,154498],{},"管理器示意：",[39,154500,154502],{"className":31626,"code":154501,"language":31628,"meta":44,"style":44},"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",[46,154503,154504,154513,154521,154532,154536,154546,154559,154570,154577,154583,154587,154596,154605,154611,154618],{"__ignoreMap":44},[49,154505,154506,154508,154511],{"class":51,"line":52},[49,154507,15945],{"class":109},[49,154509,154510],{"class":62}," StudentManager",[49,154512,4993],{"class":66},[49,154514,154515,154517,154519],{"class":51,"line":59},[49,154516,32049],{"class":109},[49,154518,32052],{"class":73},[49,154520,32055],{"class":66},[49,154522,154523,154525,154528,154530],{"class":51,"line":70},[49,154524,32093],{"class":73},[49,154526,154527],{"class":66},".students ",[49,154529,1448],{"class":109},[49,154531,53080],{"class":66},[49,154533,154534],{"class":51,"line":86},[49,154535,3654],{"emptyLinePlaceholder":1330},[49,154537,154538,154540,154543],{"class":51,"line":98},[49,154539,32049],{"class":109},[49,154541,154542],{"class":62}," find_by_id",[49,154544,154545],{"class":66},"(self, student_id):\n",[49,154547,154548,154550,154552,154554,154556],{"class":51,"line":121},[49,154549,4657],{"class":109},[49,154551,153162],{"class":66},[49,154553,27292],{"class":109},[49,154555,40121],{"class":73},[49,154557,154558],{"class":66},".students:\n",[49,154560,154561,154563,154566,154568],{"class":51,"line":134},[49,154562,5896],{"class":109},[49,154564,154565],{"class":66}," student.student_id ",[49,154567,4203],{"class":109},[49,154569,153183],{"class":66},[49,154571,154572,154575],{"class":51,"line":1085},[49,154573,154574],{"class":109},"                return",[49,154576,153190],{"class":66},[49,154578,154579,154581],{"class":51,"line":2574},[49,154580,16003],{"class":109},[49,154582,153197],{"class":73},[49,154584,154585],{"class":51,"line":2586},[49,154586,3654],{"emptyLinePlaceholder":1330},[49,154588,154589,154591,154593],{"class":51,"line":2867},[49,154590,32049],{"class":109},[49,154592,6461],{"class":62},[49,154594,154595],{"class":66},"(self, student):\n",[49,154597,154598,154600,154602],{"class":51,"line":2872},[49,154599,3751],{"class":109},[49,154601,40121],{"class":73},[49,154603,154604],{"class":66},".find_by_id(student.student_id):\n",[49,154606,154607,154609],{"class":51,"line":2878},[49,154608,16982],{"class":109},[49,154610,127031],{"class":73},[49,154612,154613,154615],{"class":51,"line":2883},[49,154614,32093],{"class":73},[49,154616,154617],{"class":66},".students.append(student)\n",[49,154619,154620,154622],{"class":51,"line":2897},[49,154621,16003],{"class":109},[49,154623,154624],{"class":73}," True\n",[19,154626,154627],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154629,154631],{"id":154630},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[183,154633,154635],{"id":154634},"_1251-数据结构","12.5.1 数据结构",[39,154637,154639],{"className":31626,"code":154638,"language":31628,"meta":44,"style":44},"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",[46,154640,154641,154649,154680,154710,154739,154768],{"__ignoreMap":44},[49,154642,154643,154645,154647],{"class":51,"line":52},[49,154644,149490],{"class":66},[49,154646,1448],{"class":109},[49,154648,56686],{"class":66},[49,154650,154651,154653,154655,154657,154659,154661,154664,154666,154669,154671,154673,154675,154678],{"class":51,"line":59},[49,154652,149410],{"class":66},[49,154654,149022],{"class":1505},[49,154656,77],{"class":66},[49,154658,149633],{"class":1505},[49,154660,13687],{"class":66},[49,154662,154663],{"class":1505},"\"category\"",[49,154665,77],{"class":66},[49,154667,154668],{"class":1505},"\"手机\"",[49,154670,13687],{"class":66},[49,154672,85309],{"class":1505},[49,154674,77],{"class":66},[49,154676,154677],{"class":73},"12000",[49,154679,6184],{"class":66},[49,154681,154682,154684,154686,154688,154690,154692,154694,154696,154699,154701,154703,154705,154708],{"class":51,"line":70},[49,154683,149410],{"class":66},[49,154685,149022],{"class":1505},[49,154687,77],{"class":66},[49,154689,149633],{"class":1505},[49,154691,13687],{"class":66},[49,154693,154663],{"class":1505},[49,154695,77],{"class":66},[49,154697,154698],{"class":1505},"\"电脑\"",[49,154700,13687],{"class":66},[49,154702,85309],{"class":1505},[49,154704,77],{"class":66},[49,154706,154707],{"class":73},"18000",[49,154709,6184],{"class":66},[49,154711,154712,154714,154716,154718,154720,154722,154724,154726,154728,154730,154732,154734,154737],{"class":51,"line":86},[49,154713,149410],{"class":66},[49,154715,149022],{"class":1505},[49,154717,77],{"class":66},[49,154719,149654],{"class":1505},[49,154721,13687],{"class":66},[49,154723,154663],{"class":1505},[49,154725,77],{"class":66},[49,154727,154668],{"class":1505},[49,154729,13687],{"class":66},[49,154731,85309],{"class":1505},[49,154733,77],{"class":66},[49,154735,154736],{"class":73},"15000",[49,154738,6184],{"class":66},[49,154740,154741,154743,154745,154747,154749,154751,154753,154755,154757,154759,154761,154763,154766],{"class":51,"line":98},[49,154742,149410],{"class":66},[49,154744,149022],{"class":1505},[49,154746,77],{"class":66},[49,154748,149654],{"class":1505},[49,154750,13687],{"class":66},[49,154752,154663],{"class":1505},[49,154754,77],{"class":66},[49,154756,154698],{"class":1505},[49,154758,13687],{"class":66},[49,154760,85309],{"class":1505},[49,154762,77],{"class":66},[49,154764,154765],{"class":73},"16000",[49,154767,6184],{"class":66},[49,154769,154770],{"class":51,"line":121},[49,154771,34494],{"class":66},[183,154773,154775],{"id":154774},"_1252-按日期统计","12.5.2 按日期统计",[39,154777,154779],{"className":31626,"code":154778,"language":31628,"meta":44,"style":44},"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",[46,154780,154781,154790,154794,154805,154819,154832,154851,154855],{"__ignoreMap":44},[49,154782,154783,154786,154788],{"class":51,"line":52},[49,154784,154785],{"class":66},"daily_total ",[49,154787,1448],{"class":109},[49,154789,89093],{"class":66},[49,154791,154792],{"class":51,"line":59},[49,154793,3654],{"emptyLinePlaceholder":1330},[49,154795,154796,154798,154800,154802],{"class":51,"line":70},[49,154797,4279],{"class":109},[49,154799,149234],{"class":66},[49,154801,27292],{"class":109},[49,154803,154804],{"class":66}," sales:\n",[49,154806,154807,154810,154812,154815,154817],{"class":51,"line":86},[49,154808,154809],{"class":66},"    date ",[49,154811,1448],{"class":109},[49,154813,154814],{"class":66}," item[",[49,154816,149022],{"class":1505},[49,154818,34494],{"class":66},[49,154820,154821,154824,154826,154828,154830],{"class":51,"line":98},[49,154822,154823],{"class":66},"    amount ",[49,154825,1448],{"class":109},[49,154827,154814],{"class":66},[49,154829,85309],{"class":1505},[49,154831,34494],{"class":66},[49,154833,154834,154837,154839,154842,154844,154846,154848],{"class":51,"line":121},[49,154835,154836],{"class":66},"    daily_total[date] ",[49,154838,1448],{"class":109},[49,154840,154841],{"class":66}," daily_total.get(date, ",[49,154843,80],{"class":73},[49,154845,14966],{"class":66},[49,154847,1872],{"class":109},[49,154849,154850],{"class":66}," amount\n",[49,154852,154853],{"class":51,"line":134},[49,154854,3654],{"emptyLinePlaceholder":1330},[49,154856,154857,154859],{"class":51,"line":1085},[49,154858,31663],{"class":73},[49,154860,154861],{"class":66},"(daily_total)\n",[183,154863,154865],{"id":154864},"_1253-按类别统计","12.5.3 按类别统计",[39,154867,154869],{"className":31626,"code":154868,"language":31628,"meta":44,"style":44},"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",[46,154870,154871,154880,154884,154894,154907,154919,154937,154941],{"__ignoreMap":44},[49,154872,154873,154876,154878],{"class":51,"line":52},[49,154874,154875],{"class":66},"category_total ",[49,154877,1448],{"class":109},[49,154879,89093],{"class":66},[49,154881,154882],{"class":51,"line":59},[49,154883,3654],{"emptyLinePlaceholder":1330},[49,154885,154886,154888,154890,154892],{"class":51,"line":70},[49,154887,4279],{"class":109},[49,154889,149234],{"class":66},[49,154891,27292],{"class":109},[49,154893,154804],{"class":66},[49,154895,154896,154899,154901,154903,154905],{"class":51,"line":86},[49,154897,154898],{"class":66},"    category ",[49,154900,1448],{"class":109},[49,154902,154814],{"class":66},[49,154904,154663],{"class":1505},[49,154906,34494],{"class":66},[49,154908,154909,154911,154913,154915,154917],{"class":51,"line":98},[49,154910,154823],{"class":66},[49,154912,1448],{"class":109},[49,154914,154814],{"class":66},[49,154916,85309],{"class":1505},[49,154918,34494],{"class":66},[49,154920,154921,154924,154926,154929,154931,154933,154935],{"class":51,"line":121},[49,154922,154923],{"class":66},"    category_total[category] ",[49,154925,1448],{"class":109},[49,154927,154928],{"class":66}," category_total.get(category, ",[49,154930,80],{"class":73},[49,154932,14966],{"class":66},[49,154934,1872],{"class":109},[49,154936,154850],{"class":66},[49,154938,154939],{"class":51,"line":134},[49,154940,3654],{"emptyLinePlaceholder":1330},[49,154942,154943,154945],{"class":51,"line":1085},[49,154944,31663],{"class":73},[49,154946,154947],{"class":66},"(category_total)\n",[183,154949,154951],{"id":154950},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[39,154953,154955],{"className":31626,"code":154954,"language":31628,"meta":44,"style":44},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[46,154956,154957,154982],{"__ignoreMap":44},[49,154958,154959,154962,154964,154966,154969,154972,154975,154978,154980],{"class":51,"line":52},[49,154960,154961],{"class":66},"top_date, top_amount ",[49,154963,1448],{"class":109},[49,154965,7203],{"class":73},[49,154967,154968],{"class":66},"(daily_total.items(), ",[49,154970,154971],{"class":6468},"key",[49,154973,154974],{"class":109},"=lambda",[49,154976,154977],{"class":66}," item: item[",[49,154979,159],{"class":73},[49,154981,5911],{"class":66},[49,154983,154984,154986],{"class":51,"line":59},[49,154985,31663],{"class":73},[49,154987,154988],{"class":66},"(top_date, top_amount)\n",[14,154990,154992],{"id":154991},"_126-绘制柱状图","12.6 绘制柱状图",[39,154994,154996],{"className":31626,"code":154995,"language":31628,"meta":44,"style":44},"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",[46,154997,154998,155012,155023,155027,155035,155047,155059,155070,155074,155078,155088,155099,155113,155118,155135,155152,155168,155172],{"__ignoreMap":44},[49,154999,155000,155002,155004,155006,155008,155010],{"class":51,"line":52},[49,155001,31985],{"class":109},[49,155003,148404],{"class":66},[49,155005,31640],{"class":109},[49,155007,148409],{"class":66},[49,155009,32631],{"class":109},[49,155011,148414],{"class":66},[49,155013,155014,155016,155018,155020],{"class":51,"line":59},[49,155015,31985],{"class":109},[49,155017,148263],{"class":66},[49,155019,31640],{"class":109},[49,155021,155022],{"class":66}," Bar\n",[49,155024,155025],{"class":51,"line":70},[49,155026,3654],{"emptyLinePlaceholder":1330},[49,155028,155029,155031,155033],{"class":51,"line":86},[49,155030,154875],{"class":66},[49,155032,1448],{"class":109},[49,155034,67],{"class":66},[49,155036,155037,155040,155042,155045],{"class":51,"line":98},[49,155038,155039],{"class":1505},"    \"手机\"",[49,155041,77],{"class":66},[49,155043,155044],{"class":73},"27000",[49,155046,32714],{"class":66},[49,155048,155049,155052,155054,155057],{"class":51,"line":121},[49,155050,155051],{"class":1505},"    \"电脑\"",[49,155053,77],{"class":66},[49,155055,155056],{"class":73},"34000",[49,155058,32714],{"class":66},[49,155060,155061,155064,155066,155068],{"class":51,"line":134},[49,155062,155063],{"class":1505},"    \"耳机\"",[49,155065,77],{"class":66},[49,155067,125623],{"class":73},[49,155069,32714],{"class":66},[49,155071,155072],{"class":51,"line":1085},[49,155073,137],{"class":66},[49,155075,155076],{"class":51,"line":2574},[49,155077,3654],{"emptyLinePlaceholder":1330},[49,155079,155080,155083,155085],{"class":51,"line":2586},[49,155081,155082],{"class":66},"bar ",[49,155084,1448],{"class":109},[49,155086,155087],{"class":66}," Bar()\n",[49,155089,155090,155093,155096],{"class":51,"line":2867},[49,155091,155092],{"class":66},"bar.add_xaxis(",[49,155094,155095],{"class":73},"list",[49,155097,155098],{"class":66},"(category_total.keys()))\n",[49,155100,155101,155104,155106,155108,155110],{"class":51,"line":2872},[49,155102,155103],{"class":66},"bar.add_yaxis(",[49,155105,148320],{"class":1505},[49,155107,13687],{"class":66},[49,155109,155095],{"class":73},[49,155111,155112],{"class":66},"(category_total.values()))\n",[49,155114,155115],{"class":51,"line":2878},[49,155116,155117],{"class":66},"bar.set_global_opts(\n",[49,155119,155120,155122,155124,155126,155128,155130,155133],{"class":51,"line":2883},[49,155121,148498],{"class":6468},[49,155123,1448],{"class":109},[49,155125,148503],{"class":66},[49,155127,52654],{"class":6468},[49,155129,1448],{"class":109},[49,155131,155132],{"class":1505},"\"品类销售额\"",[49,155134,39295],{"class":66},[49,155136,155137,155139,155141,155143,155145,155147,155150],{"class":51,"line":2897},[49,155138,148517],{"class":6468},[49,155140,1448],{"class":109},[49,155142,148522],{"class":66},[49,155144,81036],{"class":6468},[49,155146,1448],{"class":109},[49,155148,155149],{"class":1505},"\"品类\"",[49,155151,39295],{"class":66},[49,155153,155154,155156,155158,155160,155162,155164,155166],{"class":51,"line":2902},[49,155155,148536],{"class":6468},[49,155157,1448],{"class":109},[49,155159,148522],{"class":66},[49,155161,81036],{"class":6468},[49,155163,1448],{"class":109},[49,155165,148320],{"class":1505},[49,155167,39295],{"class":66},[49,155169,155170],{"class":51,"line":2908},[49,155171,1409],{"class":66},[49,155173,155174,155177,155180],{"class":51,"line":2929},[49,155175,155176],{"class":66},"bar.render(",[49,155178,155179],{"class":1505},"\"category_sales.html\"",[49,155181,1409],{"class":66},[14,155183,155185],{"id":155184},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155187,155188],{},"时间线适合展示不同日期、月份、年份的数据变化。",[39,155190,155192],{"className":31626,"code":155191,"language":31628,"meta":44,"style":44},"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",[46,155193,155194,155208,155219,155223,155231,155255,155278,155303,155307,155311,155321,155325,155336,155345,155355,155369,155400,155405,155409],{"__ignoreMap":44},[49,155195,155196,155198,155200,155202,155204,155206],{"class":51,"line":52},[49,155197,31985],{"class":109},[49,155199,148404],{"class":66},[49,155201,31640],{"class":109},[49,155203,148409],{"class":66},[49,155205,32631],{"class":109},[49,155207,148414],{"class":66},[49,155209,155210,155212,155214,155216],{"class":51,"line":59},[49,155211,31985],{"class":109},[49,155213,148263],{"class":66},[49,155215,31640],{"class":109},[49,155217,155218],{"class":66}," Bar, Timeline\n",[49,155220,155221],{"class":51,"line":70},[49,155222,3654],{"emptyLinePlaceholder":1330},[49,155224,155225,155227,155229],{"class":51,"line":86},[49,155226,102882],{"class":66},[49,155228,1448],{"class":109},[49,155230,67],{"class":66},[49,155232,155233,155236,155239,155241,155243,155245,155247,155249,155251,155253],{"class":51,"line":98},[49,155234,155235],{"class":1505},"    \"2024-10-01\"",[49,155237,155238],{"class":66},": {",[49,155240,154668],{"class":1505},[49,155242,77],{"class":66},[49,155244,154677],{"class":73},[49,155246,13687],{"class":66},[49,155248,154698],{"class":1505},[49,155250,77],{"class":66},[49,155252,154707],{"class":73},[49,155254,6184],{"class":66},[49,155256,155257,155260,155262,155264,155266,155268,155270,155272,155274,155276],{"class":51,"line":121},[49,155258,155259],{"class":1505},"    \"2024-10-02\"",[49,155261,155238],{"class":66},[49,155263,154668],{"class":1505},[49,155265,77],{"class":66},[49,155267,154736],{"class":73},[49,155269,13687],{"class":66},[49,155271,154698],{"class":1505},[49,155273,77],{"class":66},[49,155275,154765],{"class":73},[49,155277,6184],{"class":66},[49,155279,155280,155283,155285,155287,155289,155292,155294,155296,155298,155301],{"class":51,"line":134},[49,155281,155282],{"class":1505},"    \"2024-10-03\"",[49,155284,155238],{"class":66},[49,155286,154668],{"class":1505},[49,155288,77],{"class":66},[49,155290,155291],{"class":73},"17000",[49,155293,13687],{"class":66},[49,155295,154698],{"class":1505},[49,155297,77],{"class":66},[49,155299,155300],{"class":73},"19000",[49,155302,6184],{"class":66},[49,155304,155305],{"class":51,"line":1085},[49,155306,137],{"class":66},[49,155308,155309],{"class":51,"line":2574},[49,155310,3654],{"emptyLinePlaceholder":1330},[49,155312,155313,155316,155318],{"class":51,"line":2586},[49,155314,155315],{"class":66},"timeline ",[49,155317,1448],{"class":109},[49,155319,155320],{"class":66}," Timeline()\n",[49,155322,155323],{"class":51,"line":2867},[49,155324,3654],{"emptyLinePlaceholder":1330},[49,155326,155327,155329,155332,155334],{"class":51,"line":2872},[49,155328,4279],{"class":109},[49,155330,155331],{"class":66}," date, category_data ",[49,155333,27292],{"class":109},[49,155335,150173],{"class":66},[49,155337,155338,155341,155343],{"class":51,"line":2878},[49,155339,155340],{"class":66},"    bar ",[49,155342,1448],{"class":109},[49,155344,155087],{"class":66},[49,155346,155347,155350,155352],{"class":51,"line":2883},[49,155348,155349],{"class":66},"    bar.add_xaxis(",[49,155351,155095],{"class":73},[49,155353,155354],{"class":66},"(category_data.keys()))\n",[49,155356,155357,155360,155362,155364,155366],{"class":51,"line":2897},[49,155358,155359],{"class":66},"    bar.add_yaxis(",[49,155361,148320],{"class":1505},[49,155363,13687],{"class":66},[49,155365,155095],{"class":73},[49,155367,155368],{"class":66},"(category_data.values()))\n",[49,155370,155371,155374,155377,155379,155381,155383,155385,155387,155389,155391,155393,155395,155398],{"class":51,"line":2902},[49,155372,155373],{"class":66},"    bar.set_global_opts(",[49,155375,155376],{"class":6468},"title_opts",[49,155378,1448],{"class":109},[49,155380,148503],{"class":66},[49,155382,52654],{"class":6468},[49,155384,1448],{"class":109},[49,155386,1454],{"class":109},[49,155388,1643],{"class":1505},[49,155390,2286],{"class":73},[49,155392,75155],{"class":66},[49,155394,620],{"class":73},[49,155396,155397],{"class":1505},"销售额\"",[49,155399,31745],{"class":66},[49,155401,155402],{"class":51,"line":2908},[49,155403,155404],{"class":66},"    timeline.add(bar, date)\n",[49,155406,155407],{"class":51,"line":2929},[49,155408,3654],{"emptyLinePlaceholder":1330},[49,155410,155411,155414,155417],{"class":51,"line":2934},[49,155412,155413],{"class":66},"timeline.render(",[49,155415,155416],{"class":1505},"\"timeline_sales.html\"",[49,155418,1409],{"class":66},[14,155420,155422],{"id":155421},"_128-绘制地图","12.8 绘制地图",[19,155424,155425],{},"地图适合展示地区数据。",[39,155427,155429],{"className":31626,"code":155428,"language":31628,"meta":44,"style":44},"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",[46,155430,155431,155445,155456,155460,155468,155481,155493,155506,155519,155523,155527,155537,155552,155557,155574,155593,155597],{"__ignoreMap":44},[49,155432,155433,155435,155437,155439,155441,155443],{"class":51,"line":52},[49,155434,31985],{"class":109},[49,155436,148404],{"class":66},[49,155438,31640],{"class":109},[49,155440,148409],{"class":66},[49,155442,32631],{"class":109},[49,155444,148414],{"class":66},[49,155446,155447,155449,155451,155453],{"class":51,"line":59},[49,155448,31985],{"class":109},[49,155450,148263],{"class":66},[49,155452,31640],{"class":109},[49,155454,155455],{"class":66}," Map\n",[49,155457,155458],{"class":51,"line":70},[49,155459,3654],{"emptyLinePlaceholder":1330},[49,155461,155462,155464,155466],{"class":51,"line":86},[49,155463,102882],{"class":66},[49,155465,1448],{"class":109},[49,155467,56686],{"class":66},[49,155469,155470,155473,155475,155477,155479],{"class":51,"line":98},[49,155471,155472],{"class":66},"    (",[49,155474,70504],{"class":1505},[49,155476,13687],{"class":66},[49,155478,2207],{"class":73},[49,155480,39295],{"class":66},[49,155482,155483,155485,155487,155489,155491],{"class":51,"line":121},[49,155484,155472],{"class":66},[49,155486,70524],{"class":1505},[49,155488,13687],{"class":66},[49,155490,148337],{"class":73},[49,155492,39295],{"class":66},[49,155494,155495,155497,155500,155502,155504],{"class":51,"line":134},[49,155496,155472],{"class":66},[49,155498,155499],{"class":1505},"\"广东\"",[49,155501,13687],{"class":66},[49,155503,2977],{"class":73},[49,155505,39295],{"class":66},[49,155507,155508,155510,155513,155515,155517],{"class":51,"line":1085},[49,155509,155472],{"class":66},[49,155511,155512],{"class":1505},"\"浙江\"",[49,155514,13687],{"class":66},[49,155516,148342],{"class":73},[49,155518,39295],{"class":66},[49,155520,155521],{"class":51,"line":2574},[49,155522,34494],{"class":66},[49,155524,155525],{"class":51,"line":2586},[49,155526,3654],{"emptyLinePlaceholder":1330},[49,155528,155529,155532,155534],{"class":51,"line":2867},[49,155530,155531],{"class":66},"map_chart ",[49,155533,1448],{"class":109},[49,155535,155536],{"class":66}," Map()\n",[49,155538,155539,155542,155544,155547,155550],{"class":51,"line":2872},[49,155540,155541],{"class":66},"map_chart.add(",[49,155543,148320],{"class":1505},[49,155545,155546],{"class":66},", data, ",[49,155548,155549],{"class":1505},"\"china\"",[49,155551,1409],{"class":66},[49,155553,155554],{"class":51,"line":2878},[49,155555,155556],{"class":66},"map_chart.set_global_opts(\n",[49,155558,155559,155561,155563,155565,155567,155569,155572],{"class":51,"line":2883},[49,155560,148498],{"class":6468},[49,155562,1448],{"class":109},[49,155564,148503],{"class":66},[49,155566,52654],{"class":6468},[49,155568,1448],{"class":109},[49,155570,155571],{"class":1505},"\"地区销售额\"",[49,155573,39295],{"class":66},[49,155575,155576,155579,155581,155584,155587,155589,155591],{"class":51,"line":2897},[49,155577,155578],{"class":6468},"    visualmap_opts",[49,155580,1448],{"class":109},[49,155582,155583],{"class":66},"opts.VisualMapOpts(",[49,155585,155586],{"class":6468},"max_",[49,155588,1448],{"class":109},[49,155590,2977],{"class":73},[49,155592,39295],{"class":66},[49,155594,155595],{"class":51,"line":2902},[49,155596,1409],{"class":66},[49,155598,155599,155602,155605],{"class":51,"line":2908},[49,155600,155601],{"class":66},"map_chart.render(",[49,155603,155604],{"class":1505},"\"map_sales.html\"",[49,155606,1409],{"class":66},[19,155608,155609],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155611,155613],{"id":155612},"_129-项目拆分建议","12.9 项目拆分建议",[19,155615,155616],{},"当代码超过一个文件时，可以这样组织：",[39,155618,155621],{"className":155619,"code":155620,"language":267,"meta":44},[1094],"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",[46,155622,155620],{"__ignoreMap":44},[19,155624,155625],{},"职责：",[591,155627,155628,155634,155640,155646],{},[26,155629,155630,155633],{},[46,155631,155632],{},"main.py","：程序入口。",[26,155635,155636,155639],{},[46,155637,155638],{},"file_utils.py","：读写 JSON。",[26,155641,155642,155645],{},[46,155643,155644],{},"sales_service.py","：统计销售数据。",[26,155647,155648,155651],{},[46,155649,155650],{},"chart_builder.py","：生成图表。",[14,155653,155655],{"id":155654},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155657,155658],{},"语法基础：",[591,155660,155661,155664,155667,155670],{},[26,155662,155663],{},"会写变量、注释、输入输出。",[26,155665,155666],{},"会使用 int、float、str、bool。",[26,155668,155669],{},"会做类型转换。",[26,155671,155672],{},"会使用 f-string 格式化输出。",[19,155674,155675],{},"流程控制：",[591,155677,155678,155684,155690,155698],{},[26,155679,155680,155681,29633],{},"会写 ",[46,155682,155683],{},"if elif else",[26,155685,155680,155686,102242,155688,29633],{},[46,155687,109887],{},[46,155689,4279],{},[26,155691,155692,155693,102242,155695,29633],{},"理解 ",[46,155694,3307],{},[46,155696,155697],{},"continue",[26,155699,155700],{},"能写嵌套循环。",[19,155702,155703],{},"函数：",[591,155705,155706,155709,155712,155715],{},[26,155707,155708],{},"会定义和调用函数。",[26,155710,155711],{},"理解参数和返回值。",[26,155713,155714],{},"知道局部变量和全局变量。",[26,155716,155717],{},"会使用默认参数、关键字参数、不定长参数。",[19,155719,155720],{},"容器：",[591,155722,155723,155726,155729,155732,155735],{},[26,155724,155725],{},"会使用列表增删改查。",[26,155727,155728],{},"会遍历列表、字典。",[26,155730,155731],{},"会使用切片。",[26,155733,155734],{},"会用集合去重。",[26,155736,155737],{},"会处理列表嵌套字典。",[19,155739,155740],{},"文件和模块：",[591,155742,155743,155746,155749,155752,155755],{},[26,155744,155745],{},"会读写文本文件。",[26,155747,155748],{},"会读写 JSON。",[26,155750,155751],{},"会捕获常见异常。",[26,155753,155754],{},"会导入模块和第三方包。",[26,155756,155757],{},"会创建简单包结构。",[19,155759,155760],{},"项目能力：",[591,155762,155763,155766,155769,155772,155775],{},[26,155764,155765],{},"能把代码拆成函数。",[26,155767,155768],{},"能把数据保存到文件。",[26,155770,155771],{},"能处理用户输入错误。",[26,155773,155774],{},"能写一个完整菜单程序。",[26,155776,155777],{},"能用 pyecharts 生成图表。",[14,155779,155781],{"id":155780},"_1211-推荐练习顺序","12.11 推荐练习顺序",[591,155783,155784,155787,155790,155793,155796,155799,155802,155805],{},[26,155785,155786],{},"猜数字游戏。",[26,155788,155789],{},"ATM 菜单程序。",[26,155791,155792],{},"学生成绩统计。",[26,155794,155795],{},"学生管理系统函数版。",[26,155797,155798],{},"学生管理系统文件持久化版。",[26,155800,155801],{},"学生管理系统面向对象版。",[26,155803,155804],{},"销售数据统计。",[26,155806,155807],{},"销售数据可视化。",[14,155809,155811],{"id":155810},"_1212-常见学习误区","12.12 常见学习误区",[591,155813,155814,155817,155820,155823,155826,155829,155832],{},[26,155815,155816],{},"只看视频不敲代码。",[26,155818,155819],{},"一报错就复制错误去搜，不先读报错位置。",[26,155821,155822],{},"变量名随便写，后续自己看不懂。",[26,155824,155825],{},"所有代码都写在一个文件一个函数里。",[26,155827,155828],{},"不保存练习代码，复习时没有材料。",[26,155830,155831],{},"还没掌握列表字典就急着学框架。",[26,155833,155834],{},"不会读官方文档，只依赖教程。",[14,155836,155838],{"id":155837},"_1213-如何读报错","12.13 如何读报错",[19,155840,155841],{},"报错通常从下往上看最后几行。",[19,155843,16386],{},[39,155845,155848],{"className":155846,"code":155847,"language":267,"meta":44},[1094],"ValueError: invalid literal for int() with base 10: 'abc'\n",[46,155849,155847],{"__ignoreMap":44},[19,155851,25848],{},[591,155853,155854,155860,155870],{},[26,155855,155856,155857,29633],{},"异常类型是 ",[46,155858,155859],{},"ValueError",[26,155861,108569,155862,155865,155866,155869],{},[46,155863,155864],{},"int()"," 无法把 ",[46,155867,155868],{},"'abc'"," 转成整数。",[26,155871,155872],{},"应该检查输入内容或增加异常处理。",[19,155874,155875],{},"再看文件名和行号：",[39,155877,155880],{"className":155878,"code":155879,"language":267,"meta":44},[1094],"File \"main.py\", line 10, in \u003Cmodule>\n",[46,155881,155879],{"__ignoreMap":44},[19,155883,155884,155885,155887],{},"表示错误发生在 ",[46,155886,155632],{}," 第 10 行。",[14,155889,155891],{"id":155890},"_1214-后续学习方向","12.14 后续学习方向",[19,155893,155894],{},"Python 基础完成后，可以按兴趣选择方向：",[591,155896,155897,155909,155918,155930,155941,155950,155960],{},[26,155898,155899,155900,1605,155903,1605,155906,29633],{},"自动化办公：",[46,155901,155902],{},"openpyxl",[46,155904,155905],{},"python-docx",[46,155907,155908],{},"pdfplumber",[26,155910,155911,155912,1605,155914,1605,155916,29633],{},"数据分析：",[46,155913,101850],{},[46,155915,147210],{},[46,155917,147218],{},[26,155919,155920,155921,1605,155924,1605,155927,29633],{},"Web 后端：",[46,155922,155923],{},"Flask",[46,155925,155926],{},"FastAPI",[46,155928,155929],{},"Django",[26,155931,155932,155933,1605,155935,1605,155938,29633],{},"爬虫：",[46,155934,147195],{},[46,155936,155937],{},"BeautifulSoup",[46,155939,155940],{},"Scrapy",[26,155942,155943,155944,1605,155946,155949],{},"测试开发：",[46,155945,147242],{},[46,155947,155948],{},"selenium","、接口测试。",[26,155951,155952,155953,1605,155955,1605,155957,29633],{},"人工智能：",[46,155954,101850],{},[46,155956,147210],{},[46,155958,155959],{},"pytorch",[26,155961,155962,155963,1605,155965,1605,155968,29633],{},"运维脚本：",[46,155964,146811],{},[46,155966,155967],{},"subprocess",[46,155969,155970],{},"paramiko",[19,155972,155973],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155975,155977],{"id":155976},"_1215-结课练习","12.15 结课练习",[591,155979,155980,155983,155986,155989,155992,155995,155998,156001],{},[26,155981,155982],{},"完成函数版学生管理系统。",[26,155984,155985],{},"给学生管理系统增加 JSON 持久化。",[26,155987,155988],{},"给学生管理系统增加异常处理。",[26,155990,155991],{},"把学生管理系统改成面向对象版。",[26,155993,155994],{},"使用 pyecharts 绘制学生成绩柱状图。",[26,155996,155997],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[26,155999,156000],{},"按品类统计销售额并绘制柱状图。",[26,156002,156003],{},"写一份自己的 Python 学习路线图。",[1305,156005,156006],{},"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":44,"searchDepth":59,"depth":59,"links":156008},[156009,156010,156013,156014,156015,156021,156022,156023,156024,156025,156026,156027,156028,156029,156030],{"id":152725,"depth":59,"text":152726},{"id":152775,"depth":59,"text":152776,"children":156011},[156012],{"id":152779,"depth":70,"text":152780},{"id":152818,"depth":59,"text":152819},{"id":154292,"depth":59,"text":154293},{"id":154630,"depth":59,"text":154631,"children":156016},[156017,156018,156019,156020],{"id":154634,"depth":70,"text":154635},{"id":154774,"depth":70,"text":154775},{"id":154864,"depth":70,"text":154865},{"id":154950,"depth":70,"text":154951},{"id":154991,"depth":59,"text":154992},{"id":155184,"depth":59,"text":155185},{"id":155421,"depth":59,"text":155422},{"id":155612,"depth":59,"text":155613},{"id":155654,"depth":59,"text":155655},{"id":155780,"depth":59,"text":155781},{"id":155810,"depth":59,"text":155811},{"id":155837,"depth":59,"text":155838},{"id":155890,"depth":59,"text":155891},{"id":155976,"depth":59,"text":155977},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152717,"description":1327},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156037,"title":156038,"body":156039,"description":1327,"extension":1328,"meta":158508,"navigation":1330,"path":158509,"seo":158510,"stem":158511,"__hash__":158512},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156040,"toc":158483},[156041,156044,156048,156051,156054,156074,156077,156100,156103,156106,156128,156131,156153,156157,156160,156200,156203,156324,156328,156331,156371,156374,156398,156401,156405,156408,156422,156455,156458,156493,156496,156519,156522,156555,156558,156560,156566,156641,156644,156650,156667,156707,156711,156714,156760,156762,156800,156803,156838,156841,156876,156879,156911,156914,156933,156937,156941,157054,157056,157131,157135,157181,157184,157210,157219,157223,157226,157289,157297,157325,157329,157369,157434,157438,157441,157480,157483,157528,157531,157592,157596,157623,157626,157654,157657,157661,157665,157730,157733,157771,157774,157806,157810,157909,157913,157916,157989,157992,158040,158044,158050,158090,158093,158140,158143,158192,158196,158198,158212,158214,158395,158399,158426,158446,158453,158457,158474,158480],[10,156042,156038],{"id":156043},"_2-基础语法变量与字符串",[14,156045,156047],{"id":156046},"_21-注释","2.1 注释",[19,156049,156050],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156052,156053],{},"单行注释：",[39,156055,156057],{"className":31626,"code":156056,"language":31628,"meta":44,"style":44},"# 这是单行注释\nprint(\"hello\")\n",[46,156058,156059,156064],{"__ignoreMap":44},[49,156060,156061],{"class":51,"line":52},[49,156062,156063],{"class":55},"# 这是单行注释\n",[49,156065,156066,156068,156070,156072],{"class":51,"line":59},[49,156067,31663],{"class":73},[49,156069,1403],{"class":66},[49,156071,7096],{"class":1505},[49,156073,1409],{"class":66},[19,156075,156076],{},"多行说明常用三引号：",[39,156078,156080],{"className":31626,"code":156079,"language":31628,"meta":44,"style":44},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[46,156081,156082,156086,156091,156096],{"__ignoreMap":44},[49,156083,156084],{"class":51,"line":52},[49,156085,96923],{"class":1505},[49,156087,156088],{"class":51,"line":59},[49,156089,156090],{"class":1505},"这是多行说明。\n",[49,156092,156093],{"class":51,"line":70},[49,156094,156095],{"class":1505},"常用于文件顶部说明、函数说明等。\n",[49,156097,156098],{"class":51,"line":86},[49,156099,96923],{"class":1505},[19,156101,156102],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156104,156105],{},"不好：",[39,156107,156109],{"className":31626,"code":156108,"language":31628,"meta":44,"style":44},"# age 加 1\nage = age + 1\n",[46,156110,156111,156116],{"__ignoreMap":44},[49,156112,156113],{"class":51,"line":52},[49,156114,156115],{"class":55},"# age 加 1\n",[49,156117,156118,156120,156122,156124,156126],{"class":51,"line":59},[49,156119,147571],{"class":66},[49,156121,1448],{"class":109},[49,156123,16957],{"class":66},[49,156125,1872],{"class":109},[49,156127,56938],{"class":73},[19,156129,156130],{},"较好：",[39,156132,156134],{"className":31626,"code":156133,"language":31628,"meta":44,"style":44},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[46,156135,156136,156141],{"__ignoreMap":44},[49,156137,156138],{"class":51,"line":52},[49,156139,156140],{"class":55},"# 用户过完生日后，年龄增加一岁\n",[49,156142,156143,156145,156147,156149,156151],{"class":51,"line":59},[49,156144,147571],{"class":66},[49,156146,1448],{"class":109},[49,156148,16957],{"class":66},[49,156150,1872],{"class":109},[49,156152,56938],{"class":73},[14,156154,156156],{"id":156155},"_22-字面量","2.2 字面量",[19,156158,156159],{},"字面量就是代码中直接写出来的数据。",[39,156161,156163],{"className":31626,"code":156162,"language":31628,"meta":44,"style":44},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[46,156164,156165,156172,156179,156186,156193],{"__ignoreMap":44},[49,156166,156167,156169],{"class":51,"line":52},[49,156168,1703],{"class":73},[49,156170,156171],{"class":55},"          # 整数\n",[49,156173,156174,156176],{"class":51,"line":59},[49,156175,1451],{"class":73},[49,156177,156178],{"class":55},"         # 小数\n",[49,156180,156181,156183],{"class":51,"line":70},[49,156182,7096],{"class":1505},[49,156184,156185],{"class":55},"      # 字符串\n",[49,156187,156188,156190],{"class":51,"line":86},[49,156189,32724],{"class":73},[49,156191,156192],{"class":55},"         # 布尔值\n",[49,156194,156195,156197],{"class":51,"line":98},[49,156196,96911],{"class":73},[49,156198,156199],{"class":55},"         # 空值\n",[19,156201,156202],{},"常见字面量类型：",[293,156204,156205,156215],{},[296,156206,156207],{},[299,156208,156209,156211,156213],{},[302,156210,24985],{},[302,156212,28740],{},[302,156214,27118],{},[310,156216,156217,156228,156239,156250,156262,156274,156286,156299,156311],{},[299,156218,156219,156221,156225],{},[315,156220,1406],{},[315,156222,156223],{},[46,156224,1703],{},[315,156226,156227],{},"整数",[299,156229,156230,156232,156236],{},[315,156231,1442],{},[315,156233,156234],{},[46,156235,1451],{},[315,156237,156238],{},"浮点数",[299,156240,156241,156243,156247],{},[315,156242,2557],{},[315,156244,156245],{},[46,156246,7096],{},[315,156248,156249],{},"字符串",[299,156251,156252,156254,156260],{},[315,156253,2611],{},[315,156255,156256,1605,156258],{},[46,156257,32724],{},[46,156259,35235],{},[315,156261,67250],{},[299,156263,156264,156267,156271],{},[315,156265,156266],{},"NoneType",[315,156268,156269],{},[46,156270,96911],{},[315,156272,156273],{},"空值",[299,156275,156276,156278,156283],{},[315,156277,155095],{},[315,156279,156280],{},[46,156281,156282],{},"[1, 2, 3]",[315,156284,156285],{},"列表",[299,156287,156288,156291,156296],{},[315,156289,156290],{},"tuple",[315,156292,156293],{},[46,156294,156295],{},"(1, 2, 3)",[315,156297,156298],{},"元组",[299,156300,156301,156303,156308],{},[315,156302,115770],{},[315,156304,156305],{},[46,156306,156307],{},"{\"name\": \"张三\"}",[315,156309,156310],{},"字典",[299,156312,156313,156316,156321],{},[315,156314,156315],{},"set",[315,156317,156318],{},[46,156319,156320],{},"{1, 2, 3}",[315,156322,156323],{},"集合",[14,156325,156327],{"id":156326},"_23-变量","2.3 变量",[19,156329,156330],{},"变量是保存数据的名字。",[39,156332,156334],{"className":31626,"code":156333,"language":31628,"meta":44,"style":44},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[46,156335,156336,156344,156352,156362],{"__ignoreMap":44},[49,156337,156338,156340,156342],{"class":51,"line":52},[49,156339,147561],{"class":66},[49,156341,1448],{"class":109},[49,156343,150378],{"class":1505},[49,156345,156346,156348,156350],{"class":51,"line":59},[49,156347,147571],{"class":66},[49,156349,1448],{"class":109},[49,156351,147576],{"class":73},[49,156353,156354,156357,156359],{"class":51,"line":70},[49,156355,156356],{"class":66},"height ",[49,156358,1448],{"class":109},[49,156360,156361],{"class":73}," 1.75\n",[49,156363,156364,156367,156369],{"class":51,"line":86},[49,156365,156366],{"class":66},"is_student ",[49,156368,1448],{"class":109},[49,156370,154624],{"class":73},[19,156372,156373],{},"Python 的变量不需要提前声明类型：",[39,156375,156377],{"className":31626,"code":156376,"language":31628,"meta":44,"style":44},"score = 100\nscore = \"满分\"\n",[46,156378,156379,156389],{"__ignoreMap":44},[49,156380,156381,156384,156386],{"class":51,"line":52},[49,156382,156383],{"class":66},"score ",[49,156385,1448],{"class":109},[49,156387,156388],{"class":73}," 100\n",[49,156390,156391,156393,156395],{"class":51,"line":59},[49,156392,156383],{"class":66},[49,156394,1448],{"class":109},[49,156396,156397],{"class":1505}," \"满分\"\n",[19,156399,156400],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156402,156404],{"id":156403},"_24-变量命名规则","2.4 变量命名规则",[19,156406,156407],{},"硬性规则：",[591,156409,156410,156413,156416,156419],{},[26,156411,156412],{},"只能由字母、数字、下划线组成。",[26,156414,156415],{},"不能以数字开头。",[26,156417,156418],{},"不能使用 Python 关键字。",[26,156420,156421],{},"区分大小写。",[39,156423,156425],{"className":31626,"code":156424,"language":31628,"meta":44,"style":44},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[46,156426,156427,156436,156445],{"__ignoreMap":44},[49,156428,156429,156432,156434],{"class":51,"line":52},[49,156430,156431],{"class":66},"user_name ",[49,156433,1448],{"class":109},[49,156435,147566],{"class":1505},[49,156437,156438,156441,156443],{"class":51,"line":59},[49,156439,156440],{"class":66},"age2 ",[49,156442,1448],{"class":109},[49,156444,147576],{"class":73},[49,156446,156447,156450,156452],{"class":51,"line":70},[49,156448,156449],{"class":66},"_token ",[49,156451,1448],{"class":109},[49,156453,156454],{"class":1505}," \"abc\"\n",[19,156456,156457],{},"错误写法：",[39,156459,156461],{"className":31626,"code":156460,"language":31628,"meta":44,"style":44},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[46,156462,156463,156472,156484],{"__ignoreMap":44},[49,156464,156465,156468,156470],{"class":51,"line":52},[49,156466,156467],{"class":78630},"2age",[49,156469,14816],{"class":109},[49,156471,147576],{"class":73},[49,156473,156474,156476,156478,156480,156482],{"class":51,"line":59},[49,156475,132790],{"class":66},[49,156477,1923],{"class":109},[49,156479,147561],{"class":66},[49,156481,1448],{"class":109},[49,156483,147566],{"class":1505},[49,156485,156486,156488,156490],{"class":51,"line":70},[49,156487,15945],{"class":109},[49,156489,14816],{"class":109},[49,156491,156492],{"class":1505}," \"一班\"\n",[19,156494,156495],{},"查看关键字：",[39,156497,156499],{"className":31626,"code":156498,"language":31628,"meta":44,"style":44},"import keyword\n\nprint(keyword.kwlist)\n",[46,156500,156501,156508,156512],{"__ignoreMap":44},[49,156502,156503,156505],{"class":51,"line":52},[49,156504,31640],{"class":109},[49,156506,156507],{"class":66}," keyword\n",[49,156509,156510],{"class":51,"line":59},[49,156511,3654],{"emptyLinePlaceholder":1330},[49,156513,156514,156516],{"class":51,"line":70},[49,156515,31663],{"class":73},[49,156517,156518],{"class":66},"(keyword.kwlist)\n",[19,156520,156521],{},"推荐命名风格：",[39,156523,156525],{"className":31626,"code":156524,"language":31628,"meta":44,"style":44},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[46,156526,156527,156536,156546],{"__ignoreMap":44},[49,156528,156529,156532,156534],{"class":51,"line":52},[49,156530,156531],{"class":66},"student_name ",[49,156533,1448],{"class":109},[49,156535,150378],{"class":1505},[49,156537,156538,156541,156543],{"class":51,"line":59},[49,156539,156540],{"class":66},"total_price ",[49,156542,1448],{"class":109},[49,156544,156545],{"class":73}," 99.8\n",[49,156547,156548,156551,156553],{"class":51,"line":70},[49,156549,156550],{"class":66},"is_finished ",[49,156552,1448],{"class":109},[49,156554,127031],{"class":73},[19,156556,156557],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156559,51980],{"id":51979},[19,156561,105590,156562,156565],{},[46,156563,156564],{},"type()"," 查看数据类型：",[39,156567,156569],{"className":31626,"code":156568,"language":31628,"meta":44,"style":44},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[46,156570,156571,156585,156599,156613,156627],{"__ignoreMap":44},[49,156572,156573,156575,156577,156579,156581,156583],{"class":51,"line":52},[49,156574,31663],{"class":73},[49,156576,1403],{"class":66},[49,156578,104331],{"class":73},[49,156580,1403],{"class":66},[49,156582,1703],{"class":73},[49,156584,31745],{"class":66},[49,156586,156587,156589,156591,156593,156595,156597],{"class":51,"line":59},[49,156588,31663],{"class":73},[49,156590,1403],{"class":66},[49,156592,104331],{"class":73},[49,156594,1403],{"class":66},[49,156596,1451],{"class":73},[49,156598,31745],{"class":66},[49,156600,156601,156603,156605,156607,156609,156611],{"class":51,"line":70},[49,156602,31663],{"class":73},[49,156604,1403],{"class":66},[49,156606,104331],{"class":73},[49,156608,1403],{"class":66},[49,156610,7096],{"class":1505},[49,156612,31745],{"class":66},[49,156614,156615,156617,156619,156621,156623,156625],{"class":51,"line":86},[49,156616,31663],{"class":73},[49,156618,1403],{"class":66},[49,156620,104331],{"class":73},[49,156622,1403],{"class":66},[49,156624,32724],{"class":73},[49,156626,31745],{"class":66},[49,156628,156629,156631,156633,156635,156637,156639],{"class":51,"line":98},[49,156630,31663],{"class":73},[49,156632,1403],{"class":66},[49,156634,104331],{"class":73},[49,156636,1403],{"class":66},[49,156638,96911],{"class":73},[49,156640,31745],{"class":66},[19,156642,156643],{},"输出类似：",[39,156645,156648],{"className":156646,"code":156647,"language":267,"meta":44},[1094],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[46,156649,156647],{"__ignoreMap":44},[19,156651,10277,156652,108507,156654,156656,156657,156659,156660,22750,156662,156659,156664,156666],{},[46,156653,2611],{},[46,156655,1406],{}," 的子类，",[46,156658,32724],{}," 可以当作 ",[46,156661,159],{},[46,156663,35235],{},[46,156665,80],{},"，但业务代码中不要滥用。",[39,156668,156670],{"className":31626,"code":156669,"language":31628,"meta":44,"style":44},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[46,156671,156672,156690],{"__ignoreMap":44},[49,156673,156674,156676,156678,156680,156682,156684,156687],{"class":51,"line":52},[49,156675,31663],{"class":73},[49,156677,1403],{"class":66},[49,156679,32724],{"class":73},[49,156681,46814],{"class":109},[49,156683,26367],{"class":73},[49,156685,156686],{"class":66},")   ",[49,156688,156689],{"class":55},"# 2\n",[49,156691,156692,156694,156696,156698,156700,156702,156704],{"class":51,"line":59},[49,156693,31663],{"class":73},[49,156695,1403],{"class":66},[49,156697,35235],{"class":73},[49,156699,46814],{"class":109},[49,156701,26367],{"class":73},[49,156703,47056],{"class":66},[49,156705,156706],{"class":55},"# 1\n",[14,156708,156710],{"id":156709},"_26-类型转换","2.6 类型转换",[19,156712,156713],{},"常用转换函数：",[39,156715,156717],{"className":31626,"code":156716,"language":31628,"meta":44,"style":44},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[46,156718,156719,156729,156740,156750],{"__ignoreMap":44},[49,156720,156721,156723,156725,156727],{"class":51,"line":52},[49,156722,1406],{"class":73},[49,156724,1403],{"class":66},[49,156726,55557],{"class":1505},[49,156728,1409],{"class":66},[49,156730,156731,156733,156735,156738],{"class":51,"line":59},[49,156732,1442],{"class":73},[49,156734,1403],{"class":66},[49,156736,156737],{"class":1505},"\"3.14\"",[49,156739,1409],{"class":66},[49,156741,156742,156744,156746,156748],{"class":51,"line":70},[49,156743,2557],{"class":73},[49,156745,1403],{"class":66},[49,156747,1703],{"class":73},[49,156749,1409],{"class":66},[49,156751,156752,156754,156756,156758],{"class":51,"line":86},[49,156753,2611],{"class":73},[49,156755,1403],{"class":66},[49,156757,159],{"class":73},[49,156759,1409],{"class":66},[19,156761,16386],{},[39,156763,156765],{"className":31626,"code":156764,"language":31628,"meta":44,"style":44},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[46,156766,156767,156776,156787],{"__ignoreMap":44},[49,156768,156769,156771,156773],{"class":51,"line":52},[49,156770,147571],{"class":66},[49,156772,1448],{"class":109},[49,156774,156775],{"class":1505}," \"18\"\n",[49,156777,156778,156780,156782,156784],{"class":51,"line":59},[49,156779,147571],{"class":66},[49,156781,1448],{"class":109},[49,156783,3636],{"class":73},[49,156785,156786],{"class":66},"(age)\n",[49,156788,156789,156791,156794,156796,156798],{"class":51,"line":70},[49,156790,31663],{"class":73},[49,156792,156793],{"class":66},"(age ",[49,156795,1872],{"class":109},[49,156797,26367],{"class":73},[49,156799,1409],{"class":66},[19,156801,156802],{},"输入得到的内容永远是字符串：",[39,156804,156806],{"className":31626,"code":156805,"language":31628,"meta":44,"style":44},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[46,156807,156808,156824],{"__ignoreMap":44},[49,156809,156810,156813,156815,156817,156819,156822],{"class":51,"line":52},[49,156811,156812],{"class":66},"num ",[49,156814,1448],{"class":109},[49,156816,61844],{"class":73},[49,156818,1403],{"class":66},[49,156820,156821],{"class":1505},"\"请输入数字:\"",[49,156823,1409],{"class":66},[49,156825,156826,156828,156830,156832,156835],{"class":51,"line":59},[49,156827,31663],{"class":73},[49,156829,1403],{"class":66},[49,156831,104331],{"class":73},[49,156833,156834],{"class":66},"(num))  ",[49,156836,156837],{"class":55},"# str\n",[19,156839,156840],{},"如果要做数学运算，必须转换：",[39,156842,156844],{"className":31626,"code":156843,"language":31628,"meta":44,"style":44},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[46,156845,156846,156864],{"__ignoreMap":44},[49,156847,156848,156850,156852,156854,156856,156858,156860,156862],{"class":51,"line":52},[49,156849,156812],{"class":66},[49,156851,1448],{"class":109},[49,156853,3636],{"class":73},[49,156855,1403],{"class":66},[49,156857,448],{"class":73},[49,156859,1403],{"class":66},[49,156861,156821],{"class":1505},[49,156863,31745],{"class":66},[49,156865,156866,156868,156870,156872,156874],{"class":51,"line":59},[49,156867,31663],{"class":73},[49,156869,46867],{"class":66},[49,156871,1872],{"class":109},[49,156873,3292],{"class":73},[49,156875,1409],{"class":66},[19,156877,156878],{},"常见错误：",[39,156880,156882],{"className":31626,"code":156881,"language":31628,"meta":44,"style":44},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[46,156883,156884,156897],{"__ignoreMap":44},[49,156885,156886,156888,156890,156892,156894],{"class":51,"line":52},[49,156887,1406],{"class":73},[49,156889,1403],{"class":66},[49,156891,156737],{"class":1505},[49,156893,156686],{"class":66},[49,156895,156896],{"class":55},"# 错误\n",[49,156898,156899,156901,156903,156906,156909],{"class":51,"line":59},[49,156900,1406],{"class":73},[49,156902,1403],{"class":66},[49,156904,156905],{"class":1505},"\"abc\"",[49,156907,156908],{"class":66},")    ",[49,156910,156896],{"class":55},[19,156912,156913],{},"正确写法：",[39,156915,156917],{"className":31626,"code":156916,"language":31628,"meta":44,"style":44},"num = float(\"3.14\")\n",[46,156918,156919],{"__ignoreMap":44},[49,156920,156921,156923,156925,156927,156929,156931],{"class":51,"line":52},[49,156922,156812],{"class":66},[49,156924,1448],{"class":109},[49,156926,111021],{"class":73},[49,156928,1403],{"class":66},[49,156930,156737],{"class":1505},[49,156932,1409],{"class":66},[14,156934,156936],{"id":156935},"_27-运算符","2.7 运算符",[183,156938,156940],{"id":156939},"_271-算术运算符","2.7.1 算术运算符",[293,156942,156943,156954],{},[296,156944,156945],{},[299,156946,156947,156950,156952],{},[302,156948,156949],{},"运算符",[302,156951,27118],{},[302,156953,28740],{},[310,156955,156956,156970,156984,156998,157012,157026,157040],{},[299,156957,156958,156962,156965],{},[315,156959,156960],{},[46,156961,1872],{},[315,156963,156964],{},"加法",[315,156966,156967],{},[46,156968,156969],{},"1 + 2",[299,156971,156972,156976,156979],{},[315,156973,156974],{},[46,156975,1923],{},[315,156977,156978],{},"减法",[315,156980,156981],{},[46,156982,156983],{},"5 - 3",[299,156985,156986,156990,156993],{},[315,156987,156988],{},[46,156989,1846],{},[315,156991,156992],{},"乘法",[315,156994,156995],{},[46,156996,156997],{},"2 * 3",[299,156999,157000,157004,157007],{},[315,157001,157002],{},[46,157003,1975],{},[315,157005,157006],{},"除法，结果是浮点数",[315,157008,157009],{},[46,157010,157011],{},"5 \u002F 2",[299,157013,157014,157018,157021],{},[315,157015,157016],{},[46,157017,34577],{},[315,157019,157020],{},"整除",[315,157022,157023],{},[46,157024,157025],{},"5 \u002F\u002F 2",[299,157027,157028,157032,157035],{},[315,157029,157030],{},[46,157031,1720],{},[315,157033,157034],{},"取余",[315,157036,157037],{},[46,157038,157039],{},"5 % 2",[299,157041,157042,157046,157049],{},[315,157043,157044],{},[46,157045,11913],{},[315,157047,157048],{},"幂运算",[315,157050,157051],{},[46,157052,157053],{},"2 ** 3",[19,157055,16386],{},[39,157057,157059],{"className":31626,"code":157058,"language":31628,"meta":44,"style":44},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[46,157060,157061,157079,157096,157113],{"__ignoreMap":44},[49,157062,157063,157065,157067,157069,157072,157074,157076],{"class":51,"line":52},[49,157064,31663],{"class":73},[49,157066,1403],{"class":66},[49,157068,1711],{"class":73},[49,157070,157071],{"class":109}," \u002F",[49,157073,16006],{"class":73},[49,157075,156686],{"class":66},[49,157077,157078],{"class":55},"# 2.5\n",[49,157080,157081,157083,157085,157087,157090,157092,157094],{"class":51,"line":59},[49,157082,31663],{"class":73},[49,157084,1403],{"class":66},[49,157086,1711],{"class":73},[49,157088,157089],{"class":109}," \u002F\u002F",[49,157091,16006],{"class":73},[49,157093,47056],{"class":66},[49,157095,156689],{"class":55},[49,157097,157098,157100,157102,157104,157107,157109,157111],{"class":51,"line":70},[49,157099,31663],{"class":73},[49,157101,1403],{"class":66},[49,157103,1711],{"class":73},[49,157105,157106],{"class":109}," %",[49,157108,16006],{"class":73},[49,157110,156686],{"class":66},[49,157112,156706],{"class":55},[49,157114,157115,157117,157119,157121,157124,157126,157128],{"class":51,"line":86},[49,157116,31663],{"class":73},[49,157118,1403],{"class":66},[49,157120,1478],{"class":73},[49,157122,157123],{"class":109}," **",[49,157125,79297],{"class":73},[49,157127,47056],{"class":66},[49,157129,157130],{"class":55},"# 8\n",[183,157132,157134],{"id":157133},"_272-赋值运算符","2.7.2 赋值运算符",[39,157136,157138],{"className":31626,"code":157137,"language":31628,"meta":44,"style":44},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[46,157139,157140,157148,157156,157164,157172],{"__ignoreMap":44},[49,157141,157142,157144,157146],{"class":51,"line":52},[49,157143,156812],{"class":66},[49,157145,1448],{"class":109},[49,157147,59667],{"class":73},[49,157149,157150,157152,157154],{"class":51,"line":59},[49,157151,156812],{"class":66},[49,157153,10729],{"class":109},[49,157155,55668],{"class":73},[49,157157,157158,157160,157162],{"class":51,"line":70},[49,157159,156812],{"class":66},[49,157161,151277],{"class":109},[49,157163,48971],{"class":73},[49,157165,157166,157168,157170],{"class":51,"line":86},[49,157167,156812],{"class":66},[49,157169,138173],{"class":109},[49,157171,121260],{"class":73},[49,157173,157174,157176,157179],{"class":51,"line":98},[49,157175,156812],{"class":66},[49,157177,157178],{"class":109},"\u002F=",[49,157180,48971],{"class":73},[19,157182,157183],{},"等价关系：",[39,157185,157187],{"className":31626,"code":157186,"language":31628,"meta":44,"style":44},"num += 1\nnum = num + 1\n",[46,157188,157189,157197],{"__ignoreMap":44},[49,157190,157191,157193,157195],{"class":51,"line":52},[49,157192,156812],{"class":66},[49,157194,10729],{"class":109},[49,157196,56938],{"class":73},[49,157198,157199,157201,157203,157206,157208],{"class":51,"line":59},[49,157200,156812],{"class":66},[49,157202,1448],{"class":109},[49,157204,157205],{"class":66}," num ",[49,157207,1872],{"class":109},[49,157209,56938],{"class":73},[19,157211,157212,157213,102242,157216,29633],{},"Python 没有 ",[46,157214,157215],{},"num++",[46,157217,157218],{},"num--",[183,157220,157222],{"id":157221},"_273-比较运算符","2.7.3 比较运算符",[19,157224,157225],{},"比较运算结果是布尔值。",[39,157227,157229],{"className":31626,"code":157228,"language":31628,"meta":44,"style":44},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[46,157230,157231,157245,157260,157274],{"__ignoreMap":44},[49,157232,157233,157235,157237,157239,157241,157243],{"class":51,"line":52},[49,157234,31663],{"class":73},[49,157236,1403],{"class":66},[49,157238,106],{"class":73},[49,157240,27471],{"class":109},[49,157242,3402],{"class":73},[49,157244,1409],{"class":66},[49,157246,157247,157249,157251,157253,157256,157258],{"class":51,"line":59},[49,157248,31663],{"class":73},[49,157250,1403],{"class":66},[49,157252,106],{"class":73},[49,157254,157255],{"class":109}," >=",[49,157257,3292],{"class":73},[49,157259,1409],{"class":66},[49,157261,157262,157264,157266,157268,157270,157272],{"class":51,"line":70},[49,157263,31663],{"class":73},[49,157265,1403],{"class":66},[49,157267,106],{"class":73},[49,157269,102783],{"class":109},[49,157271,3337],{"class":73},[49,157273,1409],{"class":66},[49,157275,157276,157278,157280,157282,157285,157287],{"class":51,"line":86},[49,157277,31663],{"class":73},[49,157279,1403],{"class":66},[49,157281,106],{"class":73},[49,157283,157284],{"class":109}," !=",[49,157286,3337],{"class":73},[49,157288,1409],{"class":66},[19,157290,157291,157292,157294,157295,29633],{},"注意：判断相等用 ",[46,157293,4203],{},"，赋值用 ",[46,157296,1448],{},[39,157298,157300],{"className":31626,"code":157299,"language":31628,"meta":44,"style":44},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[46,157301,157302,157314],{"__ignoreMap":44},[49,157303,157304,157306,157308,157311],{"class":51,"line":52},[49,157305,147571],{"class":66},[49,157307,1448],{"class":109},[49,157309,157310],{"class":73}," 18",[49,157312,157313],{"class":55},"       # 赋值\n",[49,157315,157316,157318,157320,157322],{"class":51,"line":59},[49,157317,147571],{"class":66},[49,157319,4203],{"class":109},[49,157321,157310],{"class":73},[49,157323,157324],{"class":55},"      # 判断是否相等\n",[183,157326,157328],{"id":157327},"_274-逻辑运算符","2.7.4 逻辑运算符",[293,157330,157331,157339],{},[296,157332,157333],{},[299,157334,157335,157337],{},[302,157336,156949],{},[302,157338,27118],{},[310,157340,157341,157350,157359],{},[299,157342,157343,157347],{},[315,157344,157345],{},[46,157346,31710],{},[315,157348,157349],{},"并且",[299,157351,157352,157356],{},[315,157353,157354],{},[46,157355,116314],{},[315,157357,157358],{},"或者",[299,157360,157361,157366],{},[315,157362,157363],{},[46,157364,157365],{},"not",[315,157367,157368],{},"取反",[39,157370,157372],{"className":31626,"code":157371,"language":31628,"meta":44,"style":44},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[46,157373,157374,157382,157391,157395,157410,157424],{"__ignoreMap":44},[49,157375,157376,157378,157380],{"class":51,"line":52},[49,157377,147571],{"class":66},[49,157379,1448],{"class":109},[49,157381,89290],{"class":73},[49,157383,157384,157387,157389],{"class":51,"line":59},[49,157385,157386],{"class":66},"has_ticket ",[49,157388,1448],{"class":109},[49,157390,154624],{"class":73},[49,157392,157393],{"class":51,"line":70},[49,157394,3654],{"emptyLinePlaceholder":1330},[49,157396,157397,157399,157401,157403,157405,157407],{"class":51,"line":86},[49,157398,31663],{"class":73},[49,157400,156793],{"class":66},[49,157402,2965],{"class":109},[49,157404,157310],{"class":73},[49,157406,121653],{"class":109},[49,157408,157409],{"class":66}," has_ticket)\n",[49,157411,157412,157414,157416,157418,157420,157422],{"class":51,"line":98},[49,157413,31663],{"class":73},[49,157415,156793],{"class":66},[49,157417,2300],{"class":109},[49,157419,157310],{"class":73},[49,157421,115425],{"class":109},[49,157423,157409],{"class":66},[49,157425,157426,157428,157430,157432],{"class":51,"line":121},[49,157427,31663],{"class":73},[49,157429,1403],{"class":66},[49,157431,157365],{"class":109},[49,157433,157409],{"class":66},[14,157435,157437],{"id":157436},"_28-字符串定义","2.8 字符串定义",[19,157439,157440],{},"三种常见写法：",[39,157442,157444],{"className":31626,"code":157443,"language":31628,"meta":44,"style":44},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[46,157445,157446,157456,157465,157475],{"__ignoreMap":44},[49,157447,157448,157451,157453],{"class":51,"line":52},[49,157449,157450],{"class":66},"name1 ",[49,157452,1448],{"class":109},[49,157454,157455],{"class":1505}," '小明'\n",[49,157457,157458,157461,157463],{"class":51,"line":59},[49,157459,157460],{"class":66},"name2 ",[49,157462,1448],{"class":109},[49,157464,150378],{"class":1505},[49,157466,157467,157470,157472],{"class":51,"line":70},[49,157468,157469],{"class":66},"text ",[49,157471,1448],{"class":109},[49,157473,157474],{"class":1505}," \"\"\"这是多行字符串\n",[49,157476,157477],{"class":51,"line":86},[49,157478,157479],{"class":1505},"可以换行\"\"\"\n",[19,157481,157482],{},"字符串中包含引号：",[39,157484,157486],{"className":31626,"code":157485,"language":31628,"meta":44,"style":44},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[46,157487,157488,157498,157508],{"__ignoreMap":44},[49,157489,157490,157493,157495],{"class":51,"line":52},[49,157491,157492],{"class":66},"msg ",[49,157494,1448],{"class":109},[49,157496,157497],{"class":1505}," \"他说:'你好'\"\n",[49,157499,157500,157503,157505],{"class":51,"line":59},[49,157501,157502],{"class":66},"msg2 ",[49,157504,1448],{"class":109},[49,157506,157507],{"class":1505}," '他说:\"你好\"'\n",[49,157509,157510,157513,157515,157518,157521,157524,157526],{"class":51,"line":70},[49,157511,157512],{"class":66},"msg3 ",[49,157514,1448],{"class":109},[49,157516,157517],{"class":1505}," \"他说:",[49,157519,157520],{"class":73},"\\\"",[49,157522,157523],{"class":1505},"你好",[49,157525,157520],{"class":73},[49,157527,26382],{"class":1505},[19,157529,157530],{},"常见转义字符：",[293,157532,157533,157542],{},[296,157534,157535],{},[299,157536,157537,157540],{},[302,157538,157539],{},"写法",[302,157541,101924],{},[310,157543,157544,157554,157563,157573,157582],{},[299,157545,157546,157551],{},[315,157547,157548],{},[46,157549,157550],{},"\\n",[315,157552,157553],{},"换行",[299,157555,157556,157560],{},[315,157557,157558],{},[46,157559,2489],{},[315,157561,157562],{},"制表符",[299,157564,157565,157570],{},[315,157566,157567],{},[46,157568,157569],{},"\\\\",[315,157571,157572],{},"反斜杠",[299,157574,157575,157579],{},[315,157576,157577],{},[46,157578,157520],{},[315,157580,157581],{},"双引号",[299,157583,157584,157589],{},[315,157585,157586],{},[46,157587,157588],{},"\\'",[315,157590,157591],{},"单引号",[14,157593,157595],{"id":157594},"_29-字符串拼接","2.9 字符串拼接",[39,157597,157599],{"className":31626,"code":157598,"language":31628,"meta":44,"style":44},"name = \"小明\"\nprint(\"你好，\" + name)\n",[46,157600,157601,157609],{"__ignoreMap":44},[49,157602,157603,157605,157607],{"class":51,"line":52},[49,157604,147561],{"class":66},[49,157606,1448],{"class":109},[49,157608,150378],{"class":1505},[49,157610,157611,157613,157615,157618,157620],{"class":51,"line":59},[49,157612,31663],{"class":73},[49,157614,1403],{"class":66},[49,157616,157617],{"class":1505},"\"你好，\"",[49,157619,46814],{"class":109},[49,157621,157622],{"class":66}," name)\n",[19,157624,157625],{},"字符串只能和字符串拼接：",[39,157627,157629],{"className":31626,"code":157628,"language":31628,"meta":44,"style":44},"age = 18\nprint(\"年龄:\" + str(age))\n",[46,157630,157631,157639],{"__ignoreMap":44},[49,157632,157633,157635,157637],{"class":51,"line":52},[49,157634,147571],{"class":66},[49,157636,1448],{"class":109},[49,157638,147576],{"class":73},[49,157640,157641,157643,157645,157647,157649,157651],{"class":51,"line":59},[49,157642,31663],{"class":73},[49,157644,1403],{"class":66},[49,157646,147542],{"class":1505},[49,157648,46814],{"class":109},[49,157650,75148],{"class":73},[49,157652,157653],{"class":66},"(age))\n",[19,157655,157656],{},"更推荐使用格式化字符串。",[14,157658,157660],{"id":157659},"_210-字符串格式化","2.10 字符串格式化",[183,157662,157664],{"id":157663},"_2101-百分号格式化","2.10.1 百分号格式化",[39,157666,157668],{"className":31626,"code":157667,"language":31628,"meta":44,"style":44},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[46,157669,157670,157678,157686,157695,157699],{"__ignoreMap":44},[49,157671,157672,157674,157676],{"class":51,"line":52},[49,157673,147561],{"class":66},[49,157675,1448],{"class":109},[49,157677,150378],{"class":1505},[49,157679,157680,157682,157684],{"class":51,"line":59},[49,157681,147571],{"class":66},[49,157683,1448],{"class":109},[49,157685,147576],{"class":73},[49,157687,157688,157690,157692],{"class":51,"line":70},[49,157689,156383],{"class":66},[49,157691,1448],{"class":109},[49,157693,157694],{"class":73}," 95.5\n",[49,157696,157697],{"class":51,"line":86},[49,157698,3654],{"emptyLinePlaceholder":1330},[49,157700,157701,157703,157705,157708,157711,157714,157717,157720,157723,157725,157727],{"class":51,"line":98},[49,157702,31663],{"class":73},[49,157704,1403],{"class":66},[49,157706,157707],{"class":1505},"\"姓名:",[49,157709,157710],{"class":73},"%s",[49,157712,157713],{"class":1505}," 年龄:",[49,157715,157716],{"class":73},"%d",[49,157718,157719],{"class":1505}," 分数:",[49,157721,157722],{"class":73},"%.1f",[49,157724,1643],{"class":1505},[49,157726,157106],{"class":109},[49,157728,157729],{"class":66}," (name, age, score))\n",[19,157731,157732],{},"常用占位符：",[293,157734,157735,157744],{},[296,157736,157737],{},[299,157738,157739,157742],{},[302,157740,157741],{},"占位符",[302,157743,27118],{},[310,157745,157746,157754,157762],{},[299,157747,157748,157752],{},[315,157749,157750],{},[46,157751,157710],{},[315,157753,156249],{},[299,157755,157756,157760],{},[315,157757,157758],{},[46,157759,157716],{},[315,157761,156227],{},[299,157763,157764,157769],{},[315,157765,157766],{},[46,157767,157768],{},"%f",[315,157770,156238],{},[19,157772,157773],{},"精度控制：",[39,157775,157777],{"className":31626,"code":157776,"language":31628,"meta":44,"style":44},"price = 12.3456\nprint(\"%.2f\" % price)\n",[46,157778,157779,157788],{"__ignoreMap":44},[49,157780,157781,157783,157785],{"class":51,"line":52},[49,157782,147706],{"class":66},[49,157784,1448],{"class":109},[49,157786,157787],{"class":73}," 12.3456\n",[49,157789,157790,157792,157794,157796,157799,157801,157803],{"class":51,"line":59},[49,157791,31663],{"class":73},[49,157793,1403],{"class":66},[49,157795,1643],{"class":1505},[49,157797,157798],{"class":73},"%.2f",[49,157800,1643],{"class":1505},[49,157802,157106],{"class":109},[49,157804,157805],{"class":66}," price)\n",[183,157807,157809],{"id":157808},"_2102-format方法","2.10.2 format方法",[39,157811,157813],{"className":31626,"code":157812,"language":31628,"meta":44,"style":44},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[46,157814,157815,157823,157831,157835,157854,157874],{"__ignoreMap":44},[49,157816,157817,157819,157821],{"class":51,"line":52},[49,157818,147561],{"class":66},[49,157820,1448],{"class":109},[49,157822,150378],{"class":1505},[49,157824,157825,157827,157829],{"class":51,"line":59},[49,157826,147571],{"class":66},[49,157828,1448],{"class":109},[49,157830,147576],{"class":73},[49,157832,157833],{"class":51,"line":70},[49,157834,3654],{"emptyLinePlaceholder":1330},[49,157836,157837,157839,157841,157843,157845,157847,157849,157851],{"class":51,"line":86},[49,157838,31663],{"class":73},[49,157840,1403],{"class":66},[49,157842,157707],{"class":1505},[49,157844,33707],{"class":73},[49,157846,157713],{"class":1505},[49,157848,33707],{"class":73},[49,157850,1643],{"class":1505},[49,157852,157853],{"class":66},".format(name, age))\n",[49,157855,157856,157858,157860,157862,157865,157867,157870,157872],{"class":51,"line":98},[49,157857,31663],{"class":73},[49,157859,1403],{"class":66},[49,157861,157707],{"class":1505},[49,157863,157864],{"class":73},"{0}",[49,157866,157713],{"class":1505},[49,157868,157869],{"class":73},"{1}",[49,157871,1643],{"class":1505},[49,157873,157853],{"class":66},[49,157875,157876,157878,157880,157882,157885,157887,157890,157892,157895,157897,157899,157902,157904,157906],{"class":51,"line":121},[49,157877,31663],{"class":73},[49,157879,1403],{"class":66},[49,157881,157707],{"class":1505},[49,157883,157884],{"class":73},"{name}",[49,157886,157713],{"class":1505},[49,157888,157889],{"class":73},"{age}",[49,157891,1643],{"class":1505},[49,157893,157894],{"class":66},".format(",[49,157896,81036],{"class":6468},[49,157898,1448],{"class":109},[49,157900,157901],{"class":66},"name, ",[49,157903,71456],{"class":6468},[49,157905,1448],{"class":109},[49,157907,157908],{"class":66},"age))\n",[183,157910,157912],{"id":157911},"_2103-f-string","2.10.3 f-string",[19,157914,157915],{},"推荐写法：",[39,157917,157919],{"className":31626,"code":157918,"language":31628,"meta":44,"style":44},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[46,157920,157921,157929,157937,157945,157949],{"__ignoreMap":44},[49,157922,157923,157925,157927],{"class":51,"line":52},[49,157924,147561],{"class":66},[49,157926,1448],{"class":109},[49,157928,150378],{"class":1505},[49,157930,157931,157933,157935],{"class":51,"line":59},[49,157932,147571],{"class":66},[49,157934,1448],{"class":109},[49,157936,147576],{"class":73},[49,157938,157939,157941,157943],{"class":51,"line":70},[49,157940,156383],{"class":66},[49,157942,1448],{"class":109},[49,157944,157694],{"class":73},[49,157946,157947],{"class":51,"line":86},[49,157948,3654],{"emptyLinePlaceholder":1330},[49,157950,157951,157953,157955,157957,157959,157961,157963,157965,157967,157969,157971,157973,157975,157977,157980,157983,157985,157987],{"class":51,"line":98},[49,157952,31663],{"class":73},[49,157954,1403],{"class":66},[49,157956,1454],{"class":109},[49,157958,157707],{"class":1505},[49,157960,2286],{"class":73},[49,157962,81036],{"class":66},[49,157964,620],{"class":73},[49,157966,157713],{"class":1505},[49,157968,2286],{"class":73},[49,157970,71456],{"class":66},[49,157972,620],{"class":73},[49,157974,157719],{"class":1505},[49,157976,2286],{"class":73},[49,157978,157979],{"class":66},"score",[49,157981,157982],{"class":109},":.1f",[49,157984,620],{"class":73},[49,157986,1643],{"class":1505},[49,157988,1409],{"class":66},[19,157990,157991],{},"表达式也可以放进去：",[39,157993,157995],{"className":31626,"code":157994,"language":31628,"meta":44,"style":44},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[46,157996,157997,158005,158013],{"__ignoreMap":44},[49,157998,157999,158001,158003],{"class":51,"line":52},[49,158000,147706],{"class":66},[49,158002,1448],{"class":109},[49,158004,147711],{"class":73},[49,158006,158007,158009,158011],{"class":51,"line":59},[49,158008,147716],{"class":66},[49,158010,1448],{"class":109},[49,158012,55668],{"class":73},[49,158014,158015,158017,158019,158021,158024,158026,158028,158030,158033,158035,158038],{"class":51,"line":70},[49,158016,31663],{"class":73},[49,158018,1403],{"class":66},[49,158020,1454],{"class":109},[49,158022,158023],{"class":1505},"\"总价:",[49,158025,2286],{"class":73},[49,158027,147706],{"class":66},[49,158029,1846],{"class":109},[49,158031,158032],{"class":66}," count",[49,158034,620],{"class":73},[49,158036,158037],{"class":1505},"元\"",[49,158039,1409],{"class":66},[14,158041,158043],{"id":158042},"_211-input输入","2.11 input输入",[19,158045,158046,158049],{},[46,158047,158048],{},"input()"," 会暂停程序，等待用户输入。",[39,158051,158053],{"className":31626,"code":158052,"language":31628,"meta":44,"style":44},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[46,158054,158055,158069],{"__ignoreMap":44},[49,158056,158057,158059,158061,158063,158065,158067],{"class":51,"line":52},[49,158058,147561],{"class":66},[49,158060,1448],{"class":109},[49,158062,61844],{"class":73},[49,158064,1403],{"class":66},[49,158066,153404],{"class":1505},[49,158068,1409],{"class":66},[49,158070,158071,158073,158075,158077,158080,158082,158084,158086,158088],{"class":51,"line":59},[49,158072,31663],{"class":73},[49,158074,1403],{"class":66},[49,158076,1454],{"class":109},[49,158078,158079],{"class":1505},"\"你好，",[49,158081,2286],{"class":73},[49,158083,81036],{"class":66},[49,158085,620],{"class":73},[49,158087,1643],{"class":1505},[49,158089,1409],{"class":66},[19,158091,158092],{},"输入整数：",[39,158094,158096],{"className":31626,"code":158095,"language":31628,"meta":44,"style":44},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[46,158097,158098,158116],{"__ignoreMap":44},[49,158099,158100,158102,158104,158106,158108,158110,158112,158114],{"class":51,"line":52},[49,158101,147571],{"class":66},[49,158103,1448],{"class":109},[49,158105,3636],{"class":73},[49,158107,1403],{"class":66},[49,158109,448],{"class":73},[49,158111,1403],{"class":66},[49,158113,153419],{"class":1505},[49,158115,31745],{"class":66},[49,158117,158118,158120,158122,158124,158127,158129,158131,158133,158136,158138],{"class":51,"line":59},[49,158119,31663],{"class":73},[49,158121,1403],{"class":66},[49,158123,1454],{"class":109},[49,158125,158126],{"class":1505},"\"明年你",[49,158128,2286],{"class":73},[49,158130,147571],{"class":66},[49,158132,1872],{"class":109},[49,158134,158135],{"class":73}," 1}",[49,158137,150429],{"class":1505},[49,158139,1409],{"class":66},[19,158141,158142],{},"输入小数：",[39,158144,158146],{"className":31626,"code":158145,"language":31628,"meta":44,"style":44},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[46,158147,158148,158167],{"__ignoreMap":44},[49,158149,158150,158152,158154,158156,158158,158160,158162,158165],{"class":51,"line":52},[49,158151,156356],{"class":66},[49,158153,1448],{"class":109},[49,158155,111021],{"class":73},[49,158157,1403],{"class":66},[49,158159,448],{"class":73},[49,158161,1403],{"class":66},[49,158163,158164],{"class":1505},"\"请输入身高:\"",[49,158166,31745],{"class":66},[49,158168,158169,158171,158173,158175,158178,158180,158182,158185,158187,158190],{"class":51,"line":59},[49,158170,31663],{"class":73},[49,158172,1403],{"class":66},[49,158174,1454],{"class":109},[49,158176,158177],{"class":1505},"\"身高:",[49,158179,2286],{"class":73},[49,158181,26230],{"class":66},[49,158183,158184],{"class":109},":.2f",[49,158186,620],{"class":73},[49,158188,158189],{"class":1505},"米\"",[49,158191,1409],{"class":66},[14,158193,158195],{"id":158194},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158197,124516],{},[591,158199,158200,158203,158206,158209],{},[26,158201,158202],{},"输入商品单价。",[26,158204,158205],{},"输入购买数量。",[26,158207,158208],{},"输入折扣，例如 0.8 表示八折。",[26,158210,158211],{},"输出最终金额，保留两位小数。",[19,158213,11287],{},[39,158215,158217],{"className":31626,"code":158216,"language":31628,"meta":44,"style":44},"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",[46,158218,158219,158238,158257,158277,158281,158301,158305,158328,158349,158371],{"__ignoreMap":44},[49,158220,158221,158223,158225,158227,158229,158231,158233,158236],{"class":51,"line":52},[49,158222,147706],{"class":66},[49,158224,1448],{"class":109},[49,158226,111021],{"class":73},[49,158228,1403],{"class":66},[49,158230,448],{"class":73},[49,158232,1403],{"class":66},[49,158234,158235],{"class":1505},"\"请输入商品单价:\"",[49,158237,31745],{"class":66},[49,158239,158240,158242,158244,158246,158248,158250,158252,158255],{"class":51,"line":59},[49,158241,147716],{"class":66},[49,158243,1448],{"class":109},[49,158245,3636],{"class":73},[49,158247,1403],{"class":66},[49,158249,448],{"class":73},[49,158251,1403],{"class":66},[49,158253,158254],{"class":1505},"\"请输入购买数量:\"",[49,158256,31745],{"class":66},[49,158258,158259,158262,158264,158266,158268,158270,158272,158275],{"class":51,"line":70},[49,158260,158261],{"class":66},"discount ",[49,158263,1448],{"class":109},[49,158265,111021],{"class":73},[49,158267,1403],{"class":66},[49,158269,448],{"class":73},[49,158271,1403],{"class":66},[49,158273,158274],{"class":1505},"\"请输入折扣:\"",[49,158276,31745],{"class":66},[49,158278,158279],{"class":51,"line":86},[49,158280,3654],{"emptyLinePlaceholder":1330},[49,158282,158283,158286,158288,158291,158293,158296,158298],{"class":51,"line":98},[49,158284,158285],{"class":66},"total ",[49,158287,1448],{"class":109},[49,158289,158290],{"class":66}," price ",[49,158292,1846],{"class":109},[49,158294,158295],{"class":66}," count ",[49,158297,1846],{"class":109},[49,158299,158300],{"class":66}," discount\n",[49,158302,158303],{"class":51,"line":121},[49,158304,3654],{"emptyLinePlaceholder":1330},[49,158306,158307,158309,158311,158313,158316,158318,158320,158322,158324,158326],{"class":51,"line":134},[49,158308,31663],{"class":73},[49,158310,1403],{"class":66},[49,158312,1454],{"class":109},[49,158314,158315],{"class":1505},"\"商品单价:",[49,158317,2286],{"class":73},[49,158319,81041],{"class":66},[49,158321,158184],{"class":109},[49,158323,620],{"class":73},[49,158325,1643],{"class":1505},[49,158327,1409],{"class":66},[49,158329,158330,158332,158334,158336,158339,158341,158343,158345,158347],{"class":51,"line":1085},[49,158331,31663],{"class":73},[49,158333,1403],{"class":66},[49,158335,1454],{"class":109},[49,158337,158338],{"class":1505},"\"购买数量:",[49,158340,2286],{"class":73},[49,158342,85659],{"class":66},[49,158344,620],{"class":73},[49,158346,1643],{"class":1505},[49,158348,1409],{"class":66},[49,158350,158351,158353,158355,158357,158360,158362,158365,158367,158369],{"class":51,"line":2574},[49,158352,31663],{"class":73},[49,158354,1403],{"class":66},[49,158356,1454],{"class":109},[49,158358,158359],{"class":1505},"\"折扣:",[49,158361,2286],{"class":73},[49,158363,158364],{"class":66},"discount",[49,158366,620],{"class":73},[49,158368,1643],{"class":1505},[49,158370,1409],{"class":66},[49,158372,158373,158375,158377,158379,158382,158384,158387,158389,158391,158393],{"class":51,"line":2586},[49,158374,31663],{"class":73},[49,158376,1403],{"class":66},[49,158378,1454],{"class":109},[49,158380,158381],{"class":1505},"\"应付金额:",[49,158383,2286],{"class":73},[49,158385,158386],{"class":66},"total",[49,158388,158184],{"class":109},[49,158390,620],{"class":73},[49,158392,158037],{"class":1505},[49,158394,1409],{"class":66},[14,158396,158398],{"id":158397},"_213-易错点","2.13 易错点",[591,158400,158401,158406,158412,158420,158423],{},[26,158402,158403,158405],{},[46,158404,158048],{}," 的结果是字符串，做运算前要转换。",[26,158407,158408,158409,29633],{},"字符串拼接时，数字要先 ",[46,158410,158411],{},"str()",[26,158413,158414,158416,158417,158419],{},[46,158415,1448],{}," 是赋值，",[46,158418,4203],{}," 是比较。",[26,158421,158422],{},"Python 没有自增自减运算符。",[26,158424,158425],{},"浮点数计算可能有精度误差：",[39,158427,158429],{"className":31626,"code":158428,"language":31628,"meta":44,"style":44},"print(0.1 + 0.2)\n",[46,158430,158431],{"__ignoreMap":44},[49,158432,158433,158435,158437,158439,158441,158444],{"class":51,"line":52},[49,158434,31663],{"class":73},[49,158436,1403],{"class":66},[49,158438,87435],{"class":73},[49,158440,46814],{"class":109},[49,158442,158443],{"class":73}," 0.2",[49,158445,1409],{"class":66},[19,158447,158448,158449,158452],{},"金额计算如果要求严格，可以后续学习 ",[46,158450,158451],{},"decimal"," 模块。",[14,158454,158456],{"id":158455},"_214-本章练习","2.14 本章练习",[591,158458,158459,158462,158465,158468,158471],{},[26,158460,158461],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[26,158463,158464],{},"输入圆的半径，计算面积，保留两位小数。",[26,158466,158467],{},"输入工资和奖金，计算总收入。",[26,158469,158470],{},"输入摄氏温度，转换为华氏温度。",[26,158472,158473],{},"写一个 BMI 计算程序：",[39,158475,158478],{"className":158476,"code":158477,"language":267,"meta":44},[1094],"BMI = 体重kg \u002F 身高m ** 2\n",[46,158479,158477],{"__ignoreMap":44},[1305,158481,158482],{},"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":44,"searchDepth":59,"depth":59,"links":158484},[158485,158486,158487,158488,158489,158490,158491,158497,158498,158499,158504,158505,158506,158507],{"id":156046,"depth":59,"text":156047},{"id":156155,"depth":59,"text":156156},{"id":156326,"depth":59,"text":156327},{"id":156403,"depth":59,"text":156404},{"id":51979,"depth":59,"text":51980},{"id":156709,"depth":59,"text":156710},{"id":156935,"depth":59,"text":156936,"children":158492},[158493,158494,158495,158496],{"id":156939,"depth":70,"text":156940},{"id":157133,"depth":70,"text":157134},{"id":157221,"depth":70,"text":157222},{"id":157327,"depth":70,"text":157328},{"id":157436,"depth":59,"text":157437},{"id":157594,"depth":59,"text":157595},{"id":157659,"depth":59,"text":157660,"children":158500},[158501,158502,158503],{"id":157663,"depth":70,"text":157664},{"id":157808,"depth":70,"text":157809},{"id":157911,"depth":70,"text":157912},{"id":158042,"depth":59,"text":158043},{"id":158194,"depth":59,"text":158195},{"id":158397,"depth":59,"text":158398},{"id":158455,"depth":59,"text":158456},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156038,"description":1327},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158514,"title":158515,"body":158516,"description":1327,"extension":1328,"meta":160152,"navigation":1330,"path":160153,"seo":160154,"stem":160155,"__hash__":160156},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158517,"toc":160133},[158518,158521,158525,158528,158543,158546,158574,158578,158628,158630,158646,158649,158675,158678,158682,158749,158752,158768,158772,158775,158893,158896,158903,158952,158958,158962,158965,159078,159081,159085,159089,159092,159142,159146,159149,159199,159203,159206,159244,159248,159251,159297,159300,159335,159339,159344,159347,159393,159395,159462,159466,159472,159583,159592,159596,159598,159609,159611,159777,159781,159783,159797,159799,160013,160017,160036,160053,160056,160102,160106,160130],[10,158519,158515],{"id":158520},"_3-判断语句",[14,158522,158524],{"id":158523},"_31-布尔值","3.1 布尔值",[19,158526,158527],{},"判断语句依赖布尔值：",[39,158529,158531],{"className":31626,"code":158530,"language":31628,"meta":44,"style":44},"True\nFalse\n",[46,158532,158533,158538],{"__ignoreMap":44},[49,158534,158535],{"class":51,"line":52},[49,158536,158537],{"class":73},"True\n",[49,158539,158540],{"class":51,"line":59},[49,158541,158542],{"class":73},"False\n",[19,158544,158545],{},"比较表达式会产生布尔值：",[39,158547,158549],{"className":31626,"code":158548,"language":31628,"meta":44,"style":44},"age = 18\nprint(age >= 18)  # True\n",[46,158550,158551,158559],{"__ignoreMap":44},[49,158552,158553,158555,158557],{"class":51,"line":52},[49,158554,147571],{"class":66},[49,158556,1448],{"class":109},[49,158558,147576],{"class":73},[49,158560,158561,158563,158565,158567,158569,158571],{"class":51,"line":59},[49,158562,31663],{"class":73},[49,158564,156793],{"class":66},[49,158566,2965],{"class":109},[49,158568,157310],{"class":73},[49,158570,47056],{"class":66},[49,158572,158573],{"class":55},"# True\n",[14,158575,158577],{"id":158576},"_32-if基础语法","3.2 if基础语法",[39,158579,158581],{"className":31626,"code":158580,"language":31628,"meta":44,"style":44},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[46,158582,158583,158601,158605,158617],{"__ignoreMap":44},[49,158584,158585,158587,158589,158591,158593,158595,158597,158599],{"class":51,"line":52},[49,158586,147571],{"class":66},[49,158588,1448],{"class":109},[49,158590,3636],{"class":73},[49,158592,1403],{"class":66},[49,158594,448],{"class":73},[49,158596,1403],{"class":66},[49,158598,153419],{"class":1505},[49,158600,31745],{"class":66},[49,158602,158603],{"class":51,"line":59},[49,158604,3654],{"emptyLinePlaceholder":1330},[49,158606,158607,158609,158611,158613,158615],{"class":51,"line":70},[49,158608,2787],{"class":109},[49,158610,16957],{"class":66},[49,158612,2965],{"class":109},[49,158614,157310],{"class":73},[49,158616,4993],{"class":66},[49,158618,158619,158621,158623,158626],{"class":51,"line":86},[49,158620,32547],{"class":73},[49,158622,1403],{"class":66},[49,158624,158625],{"class":1505},"\"可以进入网吧\"",[49,158627,1409],{"class":66},[19,158629,10277],{},[591,158631,158632,158637,158640,158643],{},[26,158633,158634,158636],{},[46,158635,2787],{}," 后面是条件表达式。",[26,158638,158639],{},"条件后面必须写冒号。",[26,158641,158642],{},"条件成立时执行缩进代码块。",[26,158644,158645],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158647,158648],{},"错误示例：",[39,158650,158652],{"className":31626,"code":158651,"language":31628,"meta":44,"style":44},"if age >= 18\n    print(\"可以进入\")\n",[46,158653,158654,158664],{"__ignoreMap":44},[49,158655,158656,158658,158660,158662],{"class":51,"line":52},[49,158657,2787],{"class":109},[49,158659,16957],{"class":66},[49,158661,2965],{"class":109},[49,158663,147576],{"class":73},[49,158665,158666,158668,158670,158673],{"class":51,"line":59},[49,158667,32547],{"class":73},[49,158669,1403],{"class":66},[49,158671,158672],{"class":1505},"\"可以进入\"",[49,158674,1409],{"class":66},[19,158676,158677],{},"缺少冒号。",[14,158679,158681],{"id":158680},"_33-if-else","3.3 if else",[39,158683,158685],{"className":31626,"code":158684,"language":31628,"meta":44,"style":44},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[46,158686,158687,158705,158709,158721,158732,158738],{"__ignoreMap":44},[49,158688,158689,158691,158693,158695,158697,158699,158701,158703],{"class":51,"line":52},[49,158690,147571],{"class":66},[49,158692,1448],{"class":109},[49,158694,3636],{"class":73},[49,158696,1403],{"class":66},[49,158698,448],{"class":73},[49,158700,1403],{"class":66},[49,158702,153419],{"class":1505},[49,158704,31745],{"class":66},[49,158706,158707],{"class":51,"line":59},[49,158708,3654],{"emptyLinePlaceholder":1330},[49,158710,158711,158713,158715,158717,158719],{"class":51,"line":70},[49,158712,2787],{"class":109},[49,158714,16957],{"class":66},[49,158716,2965],{"class":109},[49,158718,157310],{"class":73},[49,158720,4993],{"class":66},[49,158722,158723,158725,158727,158730],{"class":51,"line":86},[49,158724,32547],{"class":73},[49,158726,1403],{"class":66},[49,158728,158729],{"class":1505},"\"成年人\"",[49,158731,1409],{"class":66},[49,158733,158734,158736],{"class":51,"line":98},[49,158735,2956],{"class":109},[49,158737,4993],{"class":66},[49,158739,158740,158742,158744,158747],{"class":51,"line":121},[49,158741,32547],{"class":73},[49,158743,1403],{"class":66},[49,158745,158746],{"class":1505},"\"未成年人\"",[49,158748,1409],{"class":66},[19,158750,158751],{},"执行逻辑：",[591,158753,158754,158760,158765],{},[26,158755,158756,158757,158759],{},"条件成立，执行 ",[46,158758,2787],{}," 代码块。",[26,158761,158762,158763,158759],{},"条件不成立，执行 ",[46,158764,2956],{},[26,158766,158767],{},"两个代码块只会执行其中一个。",[14,158769,158771],{"id":158770},"_34-if-elif-else","3.4 if elif else",[19,158773,158774],{},"多条件判断：",[39,158776,158778],{"className":31626,"code":158777,"language":31628,"meta":44,"style":44},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[46,158779,158780,158798,158802,158816,158827,158841,158852,158865,158876,158882],{"__ignoreMap":44},[49,158781,158782,158784,158786,158788,158790,158792,158794,158796],{"class":51,"line":52},[49,158783,156383],{"class":66},[49,158785,1448],{"class":109},[49,158787,3636],{"class":73},[49,158789,1403],{"class":66},[49,158791,448],{"class":73},[49,158793,1403],{"class":66},[49,158795,153434],{"class":1505},[49,158797,31745],{"class":66},[49,158799,158800],{"class":51,"line":59},[49,158801,3654],{"emptyLinePlaceholder":1330},[49,158803,158804,158806,158809,158811,158814],{"class":51,"line":70},[49,158805,2787],{"class":109},[49,158807,158808],{"class":66}," score ",[49,158810,2965],{"class":109},[49,158812,158813],{"class":73}," 90",[49,158815,4993],{"class":66},[49,158817,158818,158820,158822,158825],{"class":51,"line":86},[49,158819,32547],{"class":73},[49,158821,1403],{"class":66},[49,158823,158824],{"class":1505},"\"优秀\"",[49,158826,1409],{"class":66},[49,158828,158829,158832,158834,158836,158839],{"class":51,"line":98},[49,158830,158831],{"class":109},"elif",[49,158833,158808],{"class":66},[49,158835,2965],{"class":109},[49,158837,158838],{"class":73}," 80",[49,158840,4993],{"class":66},[49,158842,158843,158845,158847,158850],{"class":51,"line":121},[49,158844,32547],{"class":73},[49,158846,1403],{"class":66},[49,158848,158849],{"class":1505},"\"良好\"",[49,158851,1409],{"class":66},[49,158853,158854,158856,158858,158860,158863],{"class":51,"line":134},[49,158855,158831],{"class":109},[49,158857,158808],{"class":66},[49,158859,2965],{"class":109},[49,158861,158862],{"class":73}," 60",[49,158864,4993],{"class":66},[49,158866,158867,158869,158871,158874],{"class":51,"line":1085},[49,158868,32547],{"class":73},[49,158870,1403],{"class":66},[49,158872,158873],{"class":1505},"\"及格\"",[49,158875,1409],{"class":66},[49,158877,158878,158880],{"class":51,"line":2574},[49,158879,2956],{"class":109},[49,158881,4993],{"class":66},[49,158883,158884,158886,158888,158891],{"class":51,"line":2586},[49,158885,32547],{"class":73},[49,158887,1403],{"class":66},[49,158889,158890],{"class":1505},"\"不及格\"",[49,158892,1409],{"class":66},[19,158894,158895],{},"注意判断顺序很重要。",[19,158897,158898,158899,158902],{},"如果把 ",[46,158900,158901],{},"score >= 60"," 放在最前面：",[39,158904,158906],{"className":31626,"code":158905,"language":31628,"meta":44,"style":44},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[46,158907,158908,158920,158930,158942],{"__ignoreMap":44},[49,158909,158910,158912,158914,158916,158918],{"class":51,"line":52},[49,158911,2787],{"class":109},[49,158913,158808],{"class":66},[49,158915,2965],{"class":109},[49,158917,158862],{"class":73},[49,158919,4993],{"class":66},[49,158921,158922,158924,158926,158928],{"class":51,"line":59},[49,158923,32547],{"class":73},[49,158925,1403],{"class":66},[49,158927,158873],{"class":1505},[49,158929,1409],{"class":66},[49,158931,158932,158934,158936,158938,158940],{"class":51,"line":70},[49,158933,158831],{"class":109},[49,158935,158808],{"class":66},[49,158937,2965],{"class":109},[49,158939,158813],{"class":73},[49,158941,4993],{"class":66},[49,158943,158944,158946,158948,158950],{"class":51,"line":86},[49,158945,32547],{"class":73},[49,158947,1403],{"class":66},[49,158949,158824],{"class":1505},[49,158951,1409],{"class":66},[19,158953,158954,158955,158957],{},"成绩 95 会先满足 ",[46,158956,158901],{},"，后面的优秀分支就不会执行。",[14,158959,158961],{"id":158960},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158963,158964],{},"嵌套判断就是在一个判断内部再写判断。",[39,158966,158968],{"className":31626,"code":158967,"language":31628,"meta":44,"style":44},"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",[46,158969,158970,158988,159003,159007,159019,159033,159043,159050,159061,159067],{"__ignoreMap":44},[49,158971,158972,158974,158976,158978,158980,158982,158984,158986],{"class":51,"line":52},[49,158973,147571],{"class":66},[49,158975,1448],{"class":109},[49,158977,3636],{"class":73},[49,158979,1403],{"class":66},[49,158981,448],{"class":73},[49,158983,1403],{"class":66},[49,158985,153419],{"class":1505},[49,158987,31745],{"class":66},[49,158989,158990,158992,158994,158996,158998,159001],{"class":51,"line":59},[49,158991,157386],{"class":66},[49,158993,1448],{"class":109},[49,158995,61844],{"class":73},[49,158997,1403],{"class":66},[49,158999,159000],{"class":1505},"\"是否有票(y\u002Fn):\"",[49,159002,1409],{"class":66},[49,159004,159005],{"class":51,"line":70},[49,159006,3654],{"emptyLinePlaceholder":1330},[49,159008,159009,159011,159013,159015,159017],{"class":51,"line":86},[49,159010,2787],{"class":109},[49,159012,16957],{"class":66},[49,159014,2965],{"class":109},[49,159016,157310],{"class":73},[49,159018,4993],{"class":66},[49,159020,159021,159023,159026,159028,159031],{"class":51,"line":98},[49,159022,4355],{"class":109},[49,159024,159025],{"class":66}," has_ticket ",[49,159027,4203],{"class":109},[49,159029,159030],{"class":1505}," \"y\"",[49,159032,4993],{"class":66},[49,159034,159035,159037,159039,159041],{"class":51,"line":121},[49,159036,33699],{"class":73},[49,159038,1403],{"class":66},[49,159040,158672],{"class":1505},[49,159042,1409],{"class":66},[49,159044,159045,159048],{"class":51,"line":134},[49,159046,159047],{"class":109},"    else",[49,159049,4993],{"class":66},[49,159051,159052,159054,159056,159059],{"class":51,"line":1085},[49,159053,33699],{"class":73},[49,159055,1403],{"class":66},[49,159057,159058],{"class":1505},"\"请先买票\"",[49,159060,1409],{"class":66},[49,159062,159063,159065],{"class":51,"line":2574},[49,159064,2956],{"class":109},[49,159066,4993],{"class":66},[49,159068,159069,159071,159073,159076],{"class":51,"line":2586},[49,159070,32547],{"class":73},[49,159072,1403],{"class":66},[49,159074,159075],{"class":1505},"\"未成年人禁止进入\"",[49,159077,1409],{"class":66},[19,159079,159080],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159082,159084],{"id":159083},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[183,159086,159088],{"id":159087},"_361-and","3.6.1 and",[19,159090,159091],{},"两个条件都成立才成立。",[39,159093,159095],{"className":31626,"code":159094,"language":31628,"meta":44,"style":44},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[46,159096,159097,159105,159113,159117,159132],{"__ignoreMap":44},[49,159098,159099,159101,159103],{"class":51,"line":52},[49,159100,147571],{"class":66},[49,159102,1448],{"class":109},[49,159104,89290],{"class":73},[49,159106,159107,159109,159111],{"class":51,"line":59},[49,159108,157386],{"class":66},[49,159110,1448],{"class":109},[49,159112,154624],{"class":73},[49,159114,159115],{"class":51,"line":70},[49,159116,3654],{"emptyLinePlaceholder":1330},[49,159118,159119,159121,159123,159125,159127,159129],{"class":51,"line":86},[49,159120,2787],{"class":109},[49,159122,16957],{"class":66},[49,159124,2965],{"class":109},[49,159126,157310],{"class":73},[49,159128,121653],{"class":109},[49,159130,159131],{"class":66}," has_ticket:\n",[49,159133,159134,159136,159138,159140],{"class":51,"line":98},[49,159135,32547],{"class":73},[49,159137,1403],{"class":66},[49,159139,158672],{"class":1505},[49,159141,1409],{"class":66},[183,159143,159145],{"id":159144},"_362-or","3.6.2 or",[19,159147,159148],{},"只要一个条件成立就成立。",[39,159150,159152],{"className":31626,"code":159151,"language":31628,"meta":44,"style":44},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[46,159153,159154,159163,159172,159176,159188],{"__ignoreMap":44},[49,159155,159156,159159,159161],{"class":51,"line":52},[49,159157,159158],{"class":66},"is_vip ",[49,159160,1448],{"class":109},[49,159162,127031],{"class":73},[49,159164,159165,159168,159170],{"class":51,"line":59},[49,159166,159167],{"class":66},"coupon ",[49,159169,1448],{"class":109},[49,159171,154624],{"class":73},[49,159173,159174],{"class":51,"line":70},[49,159175,3654],{"emptyLinePlaceholder":1330},[49,159177,159178,159180,159183,159185],{"class":51,"line":86},[49,159179,2787],{"class":109},[49,159181,159182],{"class":66}," is_vip ",[49,159184,116314],{"class":109},[49,159186,159187],{"class":66}," coupon:\n",[49,159189,159190,159192,159194,159197],{"class":51,"line":98},[49,159191,32547],{"class":73},[49,159193,1403],{"class":66},[49,159195,159196],{"class":1505},"\"可以享受优惠\"",[49,159198,1409],{"class":66},[183,159200,159202],{"id":159201},"_363-not","3.6.3 not",[19,159204,159205],{},"取反。",[39,159207,159209],{"className":31626,"code":159208,"language":31628,"meta":44,"style":44},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[46,159210,159211,159220,159224,159233],{"__ignoreMap":44},[49,159212,159213,159216,159218],{"class":51,"line":52},[49,159214,159215],{"class":66},"is_closed ",[49,159217,1448],{"class":109},[49,159219,127031],{"class":73},[49,159221,159222],{"class":51,"line":59},[49,159223,3654],{"emptyLinePlaceholder":1330},[49,159225,159226,159228,159230],{"class":51,"line":70},[49,159227,2787],{"class":109},[49,159229,40178],{"class":109},[49,159231,159232],{"class":66}," is_closed:\n",[49,159234,159235,159237,159239,159242],{"class":51,"line":86},[49,159236,32547],{"class":73},[49,159238,1403],{"class":66},[49,159240,159241],{"class":1505},"\"店铺营业中\"",[49,159243,1409],{"class":66},[14,159245,159247],{"id":159246},"_37-链式比较","3.7 链式比较",[19,159249,159250],{},"Python 支持链式比较：",[39,159252,159254],{"className":31626,"code":159253,"language":31628,"meta":44,"style":44},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[46,159255,159256,159265,159269,159286],{"__ignoreMap":44},[49,159257,159258,159260,159262],{"class":51,"line":52},[49,159259,156383],{"class":66},[49,159261,1448],{"class":109},[49,159263,159264],{"class":73}," 85\n",[49,159266,159267],{"class":51,"line":59},[49,159268,3654],{"emptyLinePlaceholder":1330},[49,159270,159271,159273,159275,159278,159280,159282,159284],{"class":51,"line":70},[49,159272,2787],{"class":109},[49,159274,5347],{"class":73},[49,159276,159277],{"class":109}," \u003C=",[49,159279,158808],{"class":66},[49,159281,2843],{"class":109},[49,159283,7006],{"class":73},[49,159285,4993],{"class":66},[49,159287,159288,159290,159292,159295],{"class":51,"line":86},[49,159289,32547],{"class":73},[49,159291,1403],{"class":66},[49,159293,159294],{"class":1505},"\"成绩合法\"",[49,159296,1409],{"class":66},[19,159298,159299],{},"等价于：",[39,159301,159303],{"className":31626,"code":159302,"language":31628,"meta":44,"style":44},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[46,159304,159305,159325],{"__ignoreMap":44},[49,159306,159307,159309,159311,159313,159315,159317,159319,159321,159323],{"class":51,"line":52},[49,159308,2787],{"class":109},[49,159310,158808],{"class":66},[49,159312,2965],{"class":109},[49,159314,5347],{"class":73},[49,159316,121653],{"class":109},[49,159318,158808],{"class":66},[49,159320,2843],{"class":109},[49,159322,7006],{"class":73},[49,159324,4993],{"class":66},[49,159326,159327,159329,159331,159333],{"class":51,"line":59},[49,159328,32547],{"class":73},[49,159330,1403],{"class":66},[49,159332,159294],{"class":1505},[49,159334,1409],{"class":66},[14,159336,159338],{"id":159337},"_38-真值和假值","3.8 真值和假值",[19,159340,117691,159341,159343],{},[46,159342,2787],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159345,159346],{},"假值：",[39,159348,159350],{"className":31626,"code":159349,"language":31628,"meta":44,"style":44},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[46,159351,159352,159356,159361,159365,159369,159374,159378,159382,159387],{"__ignoreMap":44},[49,159353,159354],{"class":51,"line":52},[49,159355,158542],{"class":73},[49,159357,159358],{"class":51,"line":59},[49,159359,159360],{"class":73},"None\n",[49,159362,159363],{"class":51,"line":70},[49,159364,4339],{"class":73},[49,159366,159367],{"class":51,"line":86},[49,159368,33590],{"class":73},[49,159370,159371],{"class":51,"line":98},[49,159372,159373],{"class":1505},"\"\"\n",[49,159375,159376],{"class":51,"line":121},[49,159377,33605],{"class":66},[49,159379,159380],{"class":51,"line":134},[49,159381,3230],{"class":66},[49,159383,159384],{"class":51,"line":1085},[49,159385,159386],{"class":66},"{}\n",[49,159388,159389,159391],{"class":51,"line":2574},[49,159390,156315],{"class":73},[49,159392,3230],{"class":66},[19,159394,16386],{},[39,159396,159398],{"className":31626,"code":159397,"language":31628,"meta":44,"style":44},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[46,159399,159400,159414,159418,159425,159445,159451],{"__ignoreMap":44},[49,159401,159402,159404,159406,159408,159410,159412],{"class":51,"line":52},[49,159403,147561],{"class":66},[49,159405,1448],{"class":109},[49,159407,61844],{"class":73},[49,159409,1403],{"class":66},[49,159411,153404],{"class":1505},[49,159413,1409],{"class":66},[49,159415,159416],{"class":51,"line":59},[49,159417,3654],{"emptyLinePlaceholder":1330},[49,159419,159420,159422],{"class":51,"line":70},[49,159421,2787],{"class":109},[49,159423,159424],{"class":66}," name:\n",[49,159426,159427,159429,159431,159433,159435,159437,159439,159441,159443],{"class":51,"line":86},[49,159428,32547],{"class":73},[49,159430,1403],{"class":66},[49,159432,1454],{"class":109},[49,159434,158079],{"class":1505},[49,159436,2286],{"class":73},[49,159438,81036],{"class":66},[49,159440,620],{"class":73},[49,159442,1643],{"class":1505},[49,159444,1409],{"class":66},[49,159446,159447,159449],{"class":51,"line":98},[49,159448,2956],{"class":109},[49,159450,4993],{"class":66},[49,159452,159453,159455,159457,159460],{"class":51,"line":121},[49,159454,32547],{"class":73},[49,159456,1403],{"class":66},[49,159458,159459],{"class":1505},"\"姓名不能为空\"",[49,159461,1409],{"class":66},[14,159463,159465],{"id":159464},"_39-match语句","3.9 match语句",[19,159467,159468,159469,159471],{},"Python 3.10 开始支持 ",[46,159470,72495],{},"。它适合处理固定选项。",[39,159473,159475],{"className":31626,"code":159474,"language":31628,"meta":44,"style":44},"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",[46,159476,159477,159493,159497,159504,159514,159525,159534,159545,159554,159565,159572],{"__ignoreMap":44},[49,159478,159479,159482,159484,159486,159488,159491],{"class":51,"line":52},[49,159480,159481],{"class":66},"command ",[49,159483,1448],{"class":109},[49,159485,61844],{"class":73},[49,159487,1403],{"class":66},[49,159489,159490],{"class":1505},"\"请输入命令:\"",[49,159492,1409],{"class":66},[49,159494,159495],{"class":51,"line":59},[49,159496,3654],{"emptyLinePlaceholder":1330},[49,159498,159499,159501],{"class":51,"line":70},[49,159500,72495],{"class":109},[49,159502,159503],{"class":66}," command:\n",[49,159505,159506,159509,159512],{"class":51,"line":86},[49,159507,159508],{"class":109},"    case",[49,159510,159511],{"class":1505}," \"start\"",[49,159513,4993],{"class":66},[49,159515,159516,159518,159520,159523],{"class":51,"line":98},[49,159517,33699],{"class":73},[49,159519,1403],{"class":66},[49,159521,159522],{"class":1505},"\"启动\"",[49,159524,1409],{"class":66},[49,159526,159527,159529,159532],{"class":51,"line":121},[49,159528,159508],{"class":109},[49,159530,159531],{"class":1505}," \"stop\"",[49,159533,4993],{"class":66},[49,159535,159536,159538,159540,159543],{"class":51,"line":134},[49,159537,33699],{"class":73},[49,159539,1403],{"class":66},[49,159541,159542],{"class":1505},"\"停止\"",[49,159544,1409],{"class":66},[49,159546,159547,159549,159552],{"class":51,"line":1085},[49,159548,159508],{"class":109},[49,159550,159551],{"class":1505}," \"restart\"",[49,159553,4993],{"class":66},[49,159555,159556,159558,159560,159563],{"class":51,"line":2574},[49,159557,33699],{"class":73},[49,159559,1403],{"class":66},[49,159561,159562],{"class":1505},"\"重启\"",[49,159564,1409],{"class":66},[49,159566,159567,159569],{"class":51,"line":2586},[49,159568,159508],{"class":109},[49,159570,159571],{"class":66}," _:\n",[49,159573,159574,159576,159578,159581],{"class":51,"line":2867},[49,159575,33699],{"class":73},[49,159577,1403],{"class":66},[49,159579,159580],{"class":1505},"\"未知命令\"",[49,159582,1409],{"class":66},[19,159584,159585,159586,159588,159589,159591],{},"入门阶段掌握 ",[46,159587,155683],{}," 更重要，",[46,159590,72495],{}," 可以作为补充。",[14,159593,159595],{"id":159594},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159597,124516],{},[591,159599,159600,159603,159606],{},[26,159601,159602],{},"输入成绩。",[26,159604,159605],{},"判断成绩是否合法。",[26,159607,159608],{},"输出等级。",[19,159610,11287],{},[39,159612,159614],{"className":31626,"code":159613,"language":31628,"meta":44,"style":44},"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",[46,159615,159616,159634,159638,159656,159667,159679,159690,159702,159713,159726,159737,159749,159760,159766],{"__ignoreMap":44},[49,159617,159618,159620,159622,159624,159626,159628,159630,159632],{"class":51,"line":52},[49,159619,156383],{"class":66},[49,159621,1448],{"class":109},[49,159623,111021],{"class":73},[49,159625,1403],{"class":66},[49,159627,448],{"class":73},[49,159629,1403],{"class":66},[49,159631,153434],{"class":1505},[49,159633,31745],{"class":66},[49,159635,159636],{"class":51,"line":59},[49,159637,3654],{"emptyLinePlaceholder":1330},[49,159639,159640,159642,159644,159646,159648,159650,159652,159654],{"class":51,"line":70},[49,159641,2787],{"class":109},[49,159643,40178],{"class":109},[49,159645,5347],{"class":73},[49,159647,159277],{"class":109},[49,159649,158808],{"class":66},[49,159651,2843],{"class":109},[49,159653,7006],{"class":73},[49,159655,4993],{"class":66},[49,159657,159658,159660,159662,159665],{"class":51,"line":86},[49,159659,32547],{"class":73},[49,159661,1403],{"class":66},[49,159663,159664],{"class":1505},"\"成绩不合法\"",[49,159666,1409],{"class":66},[49,159668,159669,159671,159673,159675,159677],{"class":51,"line":98},[49,159670,158831],{"class":109},[49,159672,158808],{"class":66},[49,159674,2965],{"class":109},[49,159676,158813],{"class":73},[49,159678,4993],{"class":66},[49,159680,159681,159683,159685,159688],{"class":51,"line":121},[49,159682,32547],{"class":73},[49,159684,1403],{"class":66},[49,159686,159687],{"class":1505},"\"等级:A\"",[49,159689,1409],{"class":66},[49,159691,159692,159694,159696,159698,159700],{"class":51,"line":134},[49,159693,158831],{"class":109},[49,159695,158808],{"class":66},[49,159697,2965],{"class":109},[49,159699,158838],{"class":73},[49,159701,4993],{"class":66},[49,159703,159704,159706,159708,159711],{"class":51,"line":1085},[49,159705,32547],{"class":73},[49,159707,1403],{"class":66},[49,159709,159710],{"class":1505},"\"等级:B\"",[49,159712,1409],{"class":66},[49,159714,159715,159717,159719,159721,159724],{"class":51,"line":2574},[49,159716,158831],{"class":109},[49,159718,158808],{"class":66},[49,159720,2965],{"class":109},[49,159722,159723],{"class":73}," 70",[49,159725,4993],{"class":66},[49,159727,159728,159730,159732,159735],{"class":51,"line":2586},[49,159729,32547],{"class":73},[49,159731,1403],{"class":66},[49,159733,159734],{"class":1505},"\"等级:C\"",[49,159736,1409],{"class":66},[49,159738,159739,159741,159743,159745,159747],{"class":51,"line":2867},[49,159740,158831],{"class":109},[49,159742,158808],{"class":66},[49,159744,2965],{"class":109},[49,159746,158862],{"class":73},[49,159748,4993],{"class":66},[49,159750,159751,159753,159755,159758],{"class":51,"line":2872},[49,159752,32547],{"class":73},[49,159754,1403],{"class":66},[49,159756,159757],{"class":1505},"\"等级:D\"",[49,159759,1409],{"class":66},[49,159761,159762,159764],{"class":51,"line":2878},[49,159763,2956],{"class":109},[49,159765,4993],{"class":66},[49,159767,159768,159770,159772,159775],{"class":51,"line":2883},[49,159769,32547],{"class":73},[49,159771,1403],{"class":66},[49,159773,159774],{"class":1505},"\"等级:E\"",[49,159776,1409],{"class":66},[14,159778,159780],{"id":159779},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159782,124516],{},[591,159784,159785,159788,159791,159794],{},[26,159786,159787],{},"输入消费金额。",[26,159789,159790],{},"输入会员等级，普通、银卡、金卡。",[26,159792,159793],{},"普通不打折，银卡 9 折，金卡 8 折。",[26,159795,159796],{},"满 500 再减 50。",[19,159798,11287],{},[39,159800,159802],{"className":31626,"code":159801,"language":31628,"meta":44,"style":44},"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",[46,159803,159804,159824,159840,159844,159852,159856,159870,159880,159893,159902,159915,159923,159929,159940,159944,159958,159962,159976,159986,159990],{"__ignoreMap":44},[49,159805,159806,159809,159811,159813,159815,159817,159819,159822],{"class":51,"line":52},[49,159807,159808],{"class":66},"amount ",[49,159810,1448],{"class":109},[49,159812,111021],{"class":73},[49,159814,1403],{"class":66},[49,159816,448],{"class":73},[49,159818,1403],{"class":66},[49,159820,159821],{"class":1505},"\"请输入消费金额:\"",[49,159823,31745],{"class":66},[49,159825,159826,159829,159831,159833,159835,159838],{"class":51,"line":59},[49,159827,159828],{"class":66},"level ",[49,159830,1448],{"class":109},[49,159832,61844],{"class":73},[49,159834,1403],{"class":66},[49,159836,159837],{"class":1505},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[49,159839,1409],{"class":66},[49,159841,159842],{"class":51,"line":70},[49,159843,3654],{"emptyLinePlaceholder":1330},[49,159845,159846,159848,159850],{"class":51,"line":86},[49,159847,158261],{"class":66},[49,159849,1448],{"class":109},[49,159851,56938],{"class":73},[49,159853,159854],{"class":51,"line":98},[49,159855,3654],{"emptyLinePlaceholder":1330},[49,159857,159858,159860,159863,159865,159868],{"class":51,"line":121},[49,159859,2787],{"class":109},[49,159861,159862],{"class":66}," level ",[49,159864,4203],{"class":109},[49,159866,159867],{"class":1505}," \"银卡\"",[49,159869,4993],{"class":66},[49,159871,159872,159875,159877],{"class":51,"line":134},[49,159873,159874],{"class":66},"    discount ",[49,159876,1448],{"class":109},[49,159878,159879],{"class":73}," 0.9\n",[49,159881,159882,159884,159886,159888,159891],{"class":51,"line":1085},[49,159883,158831],{"class":109},[49,159885,159862],{"class":66},[49,159887,4203],{"class":109},[49,159889,159890],{"class":1505}," \"金卡\"",[49,159892,4993],{"class":66},[49,159894,159895,159897,159899],{"class":51,"line":2574},[49,159896,159874],{"class":66},[49,159898,1448],{"class":109},[49,159900,159901],{"class":73}," 0.8\n",[49,159903,159904,159906,159908,159910,159913],{"class":51,"line":2586},[49,159905,158831],{"class":109},[49,159907,159862],{"class":66},[49,159909,4203],{"class":109},[49,159911,159912],{"class":1505}," \"普通\"",[49,159914,4993],{"class":66},[49,159916,159917,159919,159921],{"class":51,"line":2867},[49,159918,159874],{"class":66},[49,159920,1448],{"class":109},[49,159922,56938],{"class":73},[49,159924,159925,159927],{"class":51,"line":2872},[49,159926,2956],{"class":109},[49,159928,4993],{"class":66},[49,159930,159931,159933,159935,159938],{"class":51,"line":2878},[49,159932,32547],{"class":73},[49,159934,1403],{"class":66},[49,159936,159937],{"class":1505},"\"会员等级输入错误，按普通会员计算\"",[49,159939,1409],{"class":66},[49,159941,159942],{"class":51,"line":2883},[49,159943,3654],{"emptyLinePlaceholder":1330},[49,159945,159946,159949,159951,159954,159956],{"class":51,"line":2897},[49,159947,159948],{"class":66},"pay ",[49,159950,1448],{"class":109},[49,159952,159953],{"class":66}," amount ",[49,159955,1846],{"class":109},[49,159957,158300],{"class":66},[49,159959,159960],{"class":51,"line":2902},[49,159961,3654],{"emptyLinePlaceholder":1330},[49,159963,159964,159966,159969,159971,159974],{"class":51,"line":2908},[49,159965,2787],{"class":109},[49,159967,159968],{"class":66}," pay ",[49,159970,2965],{"class":109},[49,159972,159973],{"class":73}," 500",[49,159975,4993],{"class":66},[49,159977,159978,159981,159983],{"class":51,"line":2929},[49,159979,159980],{"class":66},"    pay ",[49,159982,151277],{"class":109},[49,159984,159985],{"class":73}," 50\n",[49,159987,159988],{"class":51,"line":2934},[49,159989,3654],{"emptyLinePlaceholder":1330},[49,159991,159992,159994,159996,159998,160000,160002,160005,160007,160009,160011],{"class":51,"line":2948},[49,159993,31663],{"class":73},[49,159995,1403],{"class":66},[49,159997,1454],{"class":109},[49,159999,158381],{"class":1505},[49,160001,2286],{"class":73},[49,160003,160004],{"class":66},"pay",[49,160006,158184],{"class":109},[49,160008,620],{"class":73},[49,160010,158037],{"class":1505},[49,160012,1409],{"class":66},[14,160014,160016],{"id":160015},"_312-易错点","3.12 易错点",[591,160018,160019,160022,160025,160028,160033],{},[26,160020,160021],{},"冒号不能漏。",[26,160023,160024],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[26,160026,160027],{},"多分支判断要注意顺序。",[26,160029,160030,160031,29633],{},"判断相等用 ",[46,160032,4203],{},[26,160034,160035],{},"字符串比较区分大小写：",[39,160037,160039],{"className":31626,"code":160038,"language":31628,"meta":44,"style":44},"\"Y\" == \"y\"  # False\n",[46,160040,160041],{"__ignoreMap":44},[49,160042,160043,160046,160048,160050],{"class":51,"line":52},[49,160044,160045],{"class":1505},"\"Y\"",[49,160047,102783],{"class":109},[49,160049,159030],{"class":1505},[49,160051,160052],{"class":55},"  # False\n",[19,160054,160055],{},"可转换后再判断：",[39,160057,160059],{"className":31626,"code":160058,"language":31628,"meta":44,"style":44},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[46,160060,160061,160078,160091],{"__ignoreMap":44},[49,160062,160063,160066,160068,160070,160072,160075],{"class":51,"line":52},[49,160064,160065],{"class":66},"answer ",[49,160067,1448],{"class":109},[49,160069,61844],{"class":73},[49,160071,1403],{"class":66},[49,160073,160074],{"class":1505},"\"是否继续(y\u002Fn):\"",[49,160076,160077],{"class":66},").lower()\n",[49,160079,160080,160082,160085,160087,160089],{"class":51,"line":59},[49,160081,2787],{"class":109},[49,160083,160084],{"class":66}," answer ",[49,160086,4203],{"class":109},[49,160088,159030],{"class":1505},[49,160090,4993],{"class":66},[49,160092,160093,160095,160097,160100],{"class":51,"line":70},[49,160094,32547],{"class":73},[49,160096,1403],{"class":66},[49,160098,160099],{"class":1505},"\"继续\"",[49,160101,1409],{"class":66},[14,160103,160105],{"id":160104},"_313-本章练习","3.13 本章练习",[591,160107,160108,160111,160114,160117,160127],{},[26,160109,160110],{},"输入年龄，判断是否成年。",[26,160112,160113],{},"输入年份，判断是否为闰年。",[26,160115,160116],{},"输入三个数字，输出最大值。",[26,160118,160119,160120,160123,160124,160126],{},"写登录判断：用户名是 ",[46,160121,160122],{},"admin"," 且密码是 ",[46,160125,16335],{}," 才登录成功。",[26,160128,160129],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1305,160131,160132],{},"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":44,"searchDepth":59,"depth":59,"links":160134},[160135,160136,160137,160138,160139,160140,160145,160146,160147,160148,160149,160150,160151],{"id":158523,"depth":59,"text":158524},{"id":158576,"depth":59,"text":158577},{"id":158680,"depth":59,"text":158681},{"id":158770,"depth":59,"text":158771},{"id":158960,"depth":59,"text":158961},{"id":159083,"depth":59,"text":159084,"children":160141},[160142,160143,160144],{"id":159087,"depth":70,"text":159088},{"id":159144,"depth":70,"text":159145},{"id":159201,"depth":70,"text":159202},{"id":159246,"depth":59,"text":159247},{"id":159337,"depth":59,"text":159338},{"id":159464,"depth":59,"text":159465},{"id":159594,"depth":59,"text":159595},{"id":159779,"depth":59,"text":159780},{"id":160015,"depth":59,"text":160016},{"id":160104,"depth":59,"text":160105},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158515,"description":1327},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160158,"title":160159,"body":160160,"description":1327,"extension":1328,"meta":161929,"navigation":1330,"path":161930,"seo":161931,"stem":161932,"__hash__":161933},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160161,"toc":161909},[160162,160165,160169,160175,160178,160195,160199,160201,160218,160220,160265,160267,160284,160288,160291,160357,160360,160378,160382,160543,160552,160556,160560,160565,160612,160614,160620,160624,160629,160676,160678,160684,160688,160693,160729,160732,160779,160783,160789,160847,160852,160883,160888,160892,160947,160950,161022,161025,161084,161088,161091,161166,161169,161173,161279,161282,161308,161312,161324,161393,161396,161488,161492,161494,161505,161507,161637,161641,161843,161851,161855,161885,161889,161906],[10,160163,160159],{"id":160164},"_4-循环语句",[14,160166,160168],{"id":160167},"_41-为什么需要循环","4.1 为什么需要循环",[19,160170,160171,160172,160174],{},"如果要输出 1 到 100，不应该写 100 行 ",[46,160173,147497],{},"，而应该用循环。",[19,160176,160177],{},"循环适合处理重复任务：",[591,160179,160180,160183,160186,160189,160192],{},[26,160181,160182],{},"重复输出。",[26,160184,160185],{},"重复输入。",[26,160187,160188],{},"遍历数据。",[26,160190,160191],{},"持续执行菜单。",[26,160193,160194],{},"批量处理文件或数据。",[14,160196,160198],{"id":160197},"_42-while循环","4.2 while循环",[19,160200,6435],{},[39,160202,160204],{"className":31626,"code":160203,"language":31628,"meta":44,"style":44},"while 条件:\n    循环体\n",[46,160205,160206,160213],{"__ignoreMap":44},[49,160207,160208,160210],{"class":51,"line":52},[49,160209,109887],{"class":109},[49,160211,160212],{"class":66}," 条件:\n",[49,160214,160215],{"class":51,"line":59},[49,160216,160217],{"class":66},"    循环体\n",[19,160219,16386],{},[39,160221,160223],{"className":31626,"code":160222,"language":31628,"meta":44,"style":44},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[46,160224,160225,160233,160237,160249,160256],{"__ignoreMap":44},[49,160226,160227,160229,160231],{"class":51,"line":52},[49,160228,101372],{"class":66},[49,160230,1448],{"class":109},[49,160232,56938],{"class":73},[49,160234,160235],{"class":51,"line":59},[49,160236,3654],{"emptyLinePlaceholder":1330},[49,160238,160239,160241,160243,160245,160247],{"class":51,"line":70},[49,160240,109887],{"class":109},[49,160242,10690],{"class":66},[49,160244,2843],{"class":109},[49,160246,3402],{"class":73},[49,160248,4993],{"class":66},[49,160250,160251,160253],{"class":51,"line":86},[49,160252,32547],{"class":73},[49,160254,160255],{"class":66},"(i)\n",[49,160257,160258,160261,160263],{"class":51,"line":98},[49,160259,160260],{"class":66},"    i ",[49,160262,10729],{"class":109},[49,160264,56938],{"class":73},[19,160266,82155],{},[591,160268,160269,160275,160278,160281],{},[26,160270,160271,160272,29633],{},"判断条件 ",[46,160273,160274],{},"i \u003C= 5",[26,160276,160277],{},"条件成立，执行循环体。",[26,160279,160280],{},"执行完后回到条件判断。",[26,160282,160283],{},"条件不成立，退出循环。",[14,160285,160287],{"id":160286},"_43-while累加","4.3 while累加",[19,160289,160290],{},"计算 1 到 100 的和：",[39,160292,160294],{"className":31626,"code":160293,"language":31628,"meta":44,"style":44},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[46,160295,160296,160304,160312,160316,160328,160338,160346,160350],{"__ignoreMap":44},[49,160297,160298,160300,160302],{"class":51,"line":52},[49,160299,101372],{"class":66},[49,160301,1448],{"class":109},[49,160303,56938],{"class":73},[49,160305,160306,160308,160310],{"class":51,"line":59},[49,160307,158285],{"class":66},[49,160309,1448],{"class":109},[49,160311,48581],{"class":73},[49,160313,160314],{"class":51,"line":70},[49,160315,3654],{"emptyLinePlaceholder":1330},[49,160317,160318,160320,160322,160324,160326],{"class":51,"line":86},[49,160319,109887],{"class":109},[49,160321,10690],{"class":66},[49,160323,2843],{"class":109},[49,160325,7006],{"class":73},[49,160327,4993],{"class":66},[49,160329,160330,160333,160335],{"class":51,"line":98},[49,160331,160332],{"class":66},"    total ",[49,160334,10729],{"class":109},[49,160336,160337],{"class":66}," i\n",[49,160339,160340,160342,160344],{"class":51,"line":121},[49,160341,160260],{"class":66},[49,160343,10729],{"class":109},[49,160345,56938],{"class":73},[49,160347,160348],{"class":51,"line":134},[49,160349,3654],{"emptyLinePlaceholder":1330},[49,160351,160352,160354],{"class":51,"line":1085},[49,160353,31663],{"class":73},[49,160355,160356],{"class":66},"(total)\n",[19,160358,160359],{},"核心思想：",[591,160361,160362,160367,160372],{},[26,160363,160364,160366],{},[46,160365,1833],{}," 控制循环次数。",[26,160368,160369,160371],{},[46,160370,158386],{}," 保存累加结果。",[26,160373,160374,160375,160377],{},"每轮循环都要更新 ",[46,160376,1833],{},"，否则可能死循环。",[14,160379,160381],{"id":160380},"_44-while猜数字","4.4 while猜数字",[39,160383,160385],{"className":31626,"code":160384,"language":31628,"meta":44,"style":44},"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",[46,160386,160387,160393,160397,160414,160422,160426,160434,160454,160463,160467,160479,160490,160500,160511,160517,160539],{"__ignoreMap":44},[49,160388,160389,160391],{"class":51,"line":52},[49,160390,31640],{"class":109},[49,160392,46576],{"class":66},[49,160394,160395],{"class":51,"line":59},[49,160396,3654],{"emptyLinePlaceholder":1330},[49,160398,160399,160401,160403,160406,160408,160410,160412],{"class":51,"line":70},[49,160400,160065],{"class":66},[49,160402,1448],{"class":109},[49,160404,160405],{"class":66}," random.randint(",[49,160407,159],{"class":73},[49,160409,13687],{"class":66},[49,160411,1703],{"class":73},[49,160413,1409],{"class":66},[49,160415,160416,160418,160420],{"class":51,"line":86},[49,160417,147716],{"class":66},[49,160419,1448],{"class":109},[49,160421,48581],{"class":73},[49,160423,160424],{"class":51,"line":98},[49,160425,3654],{"emptyLinePlaceholder":1330},[49,160427,160428,160430,160432],{"class":51,"line":121},[49,160429,109887],{"class":109},[49,160431,96517],{"class":73},[49,160433,4993],{"class":66},[49,160435,160436,160439,160441,160443,160445,160447,160449,160452],{"class":51,"line":134},[49,160437,160438],{"class":66},"    guess ",[49,160440,1448],{"class":109},[49,160442,3636],{"class":73},[49,160444,1403],{"class":66},[49,160446,448],{"class":73},[49,160448,1403],{"class":66},[49,160450,160451],{"class":1505},"\"请输入1到100之间的数字:\"",[49,160453,31745],{"class":66},[49,160455,160456,160459,160461],{"class":51,"line":1085},[49,160457,160458],{"class":66},"    count ",[49,160460,10729],{"class":109},[49,160462,56938],{"class":73},[49,160464,160465],{"class":51,"line":2574},[49,160466,3654],{"emptyLinePlaceholder":1330},[49,160468,160469,160471,160474,160476],{"class":51,"line":2586},[49,160470,4355],{"class":109},[49,160472,160473],{"class":66}," guess ",[49,160475,2349],{"class":109},[49,160477,160478],{"class":66}," answer:\n",[49,160480,160481,160483,160485,160488],{"class":51,"line":2867},[49,160482,33699],{"class":73},[49,160484,1403],{"class":66},[49,160486,160487],{"class":1505},"\"猜大了\"",[49,160489,1409],{"class":66},[49,160491,160492,160494,160496,160498],{"class":51,"line":2872},[49,160493,40541],{"class":109},[49,160495,160473],{"class":66},[49,160497,2300],{"class":109},[49,160499,160478],{"class":66},[49,160501,160502,160504,160506,160509],{"class":51,"line":2878},[49,160503,33699],{"class":73},[49,160505,1403],{"class":66},[49,160507,160508],{"class":1505},"\"猜小了\"",[49,160510,1409],{"class":66},[49,160512,160513,160515],{"class":51,"line":2883},[49,160514,159047],{"class":109},[49,160516,4993],{"class":66},[49,160518,160519,160521,160523,160525,160528,160530,160532,160534,160537],{"class":51,"line":2897},[49,160520,33699],{"class":73},[49,160522,1403],{"class":66},[49,160524,1454],{"class":109},[49,160526,160527],{"class":1505},"\"猜对了，一共猜了",[49,160529,2286],{"class":73},[49,160531,85659],{"class":66},[49,160533,620],{"class":73},[49,160535,160536],{"class":1505},"次\"",[49,160538,1409],{"class":66},[49,160540,160541],{"class":51,"line":2902},[49,160542,32875],{"class":109},[19,160544,160545,160548,160549,160551],{},[46,160546,160547],{},"while True"," 表示无限循环，通常配合 ",[46,160550,3307],{}," 使用。",[14,160553,160555],{"id":160554},"_45-break和continue","4.5 break和continue",[183,160557,160559],{"id":160558},"_451-break","4.5.1 break",[19,160561,160562,160564],{},[46,160563,3307],{}," 直接结束整个循环。",[39,160566,160568],{"className":31626,"code":160567,"language":31628,"meta":44,"style":44},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[46,160569,160570,160590,160602,160606],{"__ignoreMap":44},[49,160571,160572,160574,160576,160578,160580,160582,160584,160586,160588],{"class":51,"line":52},[49,160573,4279],{"class":109},[49,160575,10690],{"class":66},[49,160577,27292],{"class":109},[49,160579,33691],{"class":73},[49,160581,1403],{"class":66},[49,160583,159],{"class":73},[49,160585,13687],{"class":66},[49,160587,1736],{"class":73},[49,160589,32034],{"class":66},[49,160591,160592,160594,160596,160598,160600],{"class":51,"line":59},[49,160593,4355],{"class":109},[49,160595,10690],{"class":66},[49,160597,4203],{"class":109},[49,160599,79297],{"class":73},[49,160601,4993],{"class":66},[49,160603,160604],{"class":51,"line":70},[49,160605,32875],{"class":109},[49,160607,160608,160610],{"class":51,"line":86},[49,160609,32547],{"class":73},[49,160611,160255],{"class":66},[19,160613,147482],{},[39,160615,160618],{"className":160616,"code":160617,"language":267,"meta":44},[1094],"1\n2\n",[46,160619,160617],{"__ignoreMap":44},[183,160621,160623],{"id":160622},"_452-continue","4.5.2 continue",[19,160625,160626,160628],{},[46,160627,155697],{}," 跳过本轮剩余代码，进入下一轮循环。",[39,160630,160632],{"className":31626,"code":160631,"language":31628,"meta":44,"style":44},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[46,160633,160634,160654,160666,160670],{"__ignoreMap":44},[49,160635,160636,160638,160640,160642,160644,160646,160648,160650,160652],{"class":51,"line":52},[49,160637,4279],{"class":109},[49,160639,10690],{"class":66},[49,160641,27292],{"class":109},[49,160643,33691],{"class":73},[49,160645,1403],{"class":66},[49,160647,159],{"class":73},[49,160649,13687],{"class":66},[49,160651,1736],{"class":73},[49,160653,32034],{"class":66},[49,160655,160656,160658,160660,160662,160664],{"class":51,"line":59},[49,160657,4355],{"class":109},[49,160659,10690],{"class":66},[49,160661,4203],{"class":109},[49,160663,79297],{"class":73},[49,160665,4993],{"class":66},[49,160667,160668],{"class":51,"line":70},[49,160669,149537],{"class":109},[49,160671,160672,160674],{"class":51,"line":86},[49,160673,32547],{"class":73},[49,160675,160255],{"class":66},[19,160677,147482],{},[39,160679,160682],{"className":160680,"code":160681,"language":267,"meta":44},[1094],"1\n2\n4\n5\n",[46,160683,160681],{"__ignoreMap":44},[14,160685,160687],{"id":160686},"_46-for循环","4.6 for循环",[19,160689,160690,160692],{},[46,160691,4279],{}," 常用于遍历序列。",[39,160694,160696],{"className":31626,"code":160695,"language":31628,"meta":44,"style":44},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[46,160697,160698,160707,160711,160722],{"__ignoreMap":44},[49,160699,160700,160702,160704],{"class":51,"line":52},[49,160701,147561],{"class":66},[49,160703,1448],{"class":109},[49,160705,160706],{"class":1505}," \"python\"\n",[49,160708,160709],{"class":51,"line":59},[49,160710,3654],{"emptyLinePlaceholder":1330},[49,160712,160713,160715,160718,160720],{"class":51,"line":70},[49,160714,4279],{"class":109},[49,160716,160717],{"class":66}," ch ",[49,160719,27292],{"class":109},[49,160721,159424],{"class":66},[49,160723,160724,160726],{"class":51,"line":86},[49,160725,32547],{"class":73},[49,160727,160728],{"class":66},"(ch)\n",[19,160730,160731],{},"遍历列表：",[39,160733,160735],{"className":31626,"code":160734,"language":31628,"meta":44,"style":44},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[46,160736,160737,160759,160763,160773],{"__ignoreMap":44},[49,160738,160739,160742,160744,160746,160748,160750,160752,160754,160757],{"class":51,"line":52},[49,160740,160741],{"class":66},"students ",[49,160743,1448],{"class":109},[49,160745,53468],{"class":66},[49,160747,150913],{"class":1505},[49,160749,13687],{"class":66},[49,160751,151961],{"class":1505},[49,160753,13687],{"class":66},[49,160755,160756],{"class":1505},"\"小刚\"",[49,160758,34494],{"class":66},[49,160760,160761],{"class":51,"line":59},[49,160762,3654],{"emptyLinePlaceholder":1330},[49,160764,160765,160767,160769,160771],{"class":51,"line":70},[49,160766,4279],{"class":109},[49,160768,153162],{"class":66},[49,160770,27292],{"class":109},[49,160772,153167],{"class":66},[49,160774,160775,160777],{"class":51,"line":86},[49,160776,32547],{"class":73},[49,160778,151067],{"class":66},[14,160780,160782],{"id":160781},"_47-range函数","4.7 range函数",[19,160784,160785,160788],{},[46,160786,160787],{},"range()"," 用于生成整数序列。",[39,160790,160792],{"className":31626,"code":160791,"language":31628,"meta":44,"style":44},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[46,160793,160794,160808,160826],{"__ignoreMap":44},[49,160795,160796,160798,160800,160802,160805],{"class":51,"line":52},[49,160797,34664],{"class":73},[49,160799,1403],{"class":66},[49,160801,1711],{"class":73},[49,160803,160804],{"class":66},")          ",[49,160806,160807],{"class":55},"# 0,1,2,3,4\n",[49,160809,160810,160812,160814,160816,160818,160820,160823],{"class":51,"line":59},[49,160811,34664],{"class":73},[49,160813,1403],{"class":66},[49,160815,159],{"class":73},[49,160817,13687],{"class":66},[49,160819,1711],{"class":73},[49,160821,160822],{"class":66},")       ",[49,160824,160825],{"class":55},"# 1,2,3,4\n",[49,160827,160828,160830,160832,160834,160836,160838,160840,160842,160844],{"class":51,"line":70},[49,160829,34664],{"class":73},[49,160831,1403],{"class":66},[49,160833,159],{"class":73},[49,160835,13687],{"class":66},[49,160837,106],{"class":73},[49,160839,13687],{"class":66},[49,160841,1478],{"class":73},[49,160843,156686],{"class":66},[49,160845,160846],{"class":55},"# 1,3,5,7,9\n",[19,160848,160849,160850,25867],{},"配合 ",[46,160851,4279],{},[39,160853,160855],{"className":31626,"code":160854,"language":31628,"meta":44,"style":44},"for i in range(1, 6):\n    print(i)\n",[46,160856,160857,160877],{"__ignoreMap":44},[49,160858,160859,160861,160863,160865,160867,160869,160871,160873,160875],{"class":51,"line":52},[49,160860,4279],{"class":109},[49,160862,10690],{"class":66},[49,160864,27292],{"class":109},[49,160866,33691],{"class":73},[49,160868,1403],{"class":66},[49,160870,159],{"class":73},[49,160872,13687],{"class":66},[49,160874,1736],{"class":73},[49,160876,32034],{"class":66},[49,160878,160879,160881],{"class":51,"line":59},[49,160880,32547],{"class":73},[49,160882,160255],{"class":66},[19,160884,10277,160885,160887],{},[46,160886,34664],{}," 的结束值不包含在内。",[14,160889,160891],{"id":160890},"_48-for循环求和","4.8 for循环求和",[39,160893,160895],{"className":31626,"code":160894,"language":31628,"meta":44,"style":44},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[46,160896,160897,160905,160909,160929,160937,160941],{"__ignoreMap":44},[49,160898,160899,160901,160903],{"class":51,"line":52},[49,160900,158285],{"class":66},[49,160902,1448],{"class":109},[49,160904,48581],{"class":73},[49,160906,160907],{"class":51,"line":59},[49,160908,3654],{"emptyLinePlaceholder":1330},[49,160910,160911,160913,160915,160917,160919,160921,160923,160925,160927],{"class":51,"line":70},[49,160912,4279],{"class":109},[49,160914,10690],{"class":66},[49,160916,27292],{"class":109},[49,160918,33691],{"class":73},[49,160920,1403],{"class":66},[49,160922,159],{"class":73},[49,160924,13687],{"class":66},[49,160926,1729],{"class":73},[49,160928,32034],{"class":66},[49,160930,160931,160933,160935],{"class":51,"line":86},[49,160932,160332],{"class":66},[49,160934,10729],{"class":109},[49,160936,160337],{"class":66},[49,160938,160939],{"class":51,"line":98},[49,160940,3654],{"emptyLinePlaceholder":1330},[49,160942,160943,160945],{"class":51,"line":121},[49,160944,31663],{"class":73},[49,160946,160356],{"class":66},[19,160948,160949],{},"求偶数和：",[39,160951,160953],{"className":31626,"code":160952,"language":31628,"meta":44,"style":44},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[46,160954,160955,160963,160967,160987,161003,161012,161016],{"__ignoreMap":44},[49,160956,160957,160959,160961],{"class":51,"line":52},[49,160958,158285],{"class":66},[49,160960,1448],{"class":109},[49,160962,48581],{"class":73},[49,160964,160965],{"class":51,"line":59},[49,160966,3654],{"emptyLinePlaceholder":1330},[49,160968,160969,160971,160973,160975,160977,160979,160981,160983,160985],{"class":51,"line":70},[49,160970,4279],{"class":109},[49,160972,10690],{"class":66},[49,160974,27292],{"class":109},[49,160976,33691],{"class":73},[49,160978,1403],{"class":66},[49,160980,159],{"class":73},[49,160982,13687],{"class":66},[49,160984,1729],{"class":73},[49,160986,32034],{"class":66},[49,160988,160989,160991,160993,160995,160997,160999,161001],{"class":51,"line":86},[49,160990,4355],{"class":109},[49,160992,10690],{"class":66},[49,160994,1720],{"class":109},[49,160996,16006],{"class":73},[49,160998,102783],{"class":109},[49,161000,5347],{"class":73},[49,161002,4993],{"class":66},[49,161004,161005,161008,161010],{"class":51,"line":98},[49,161006,161007],{"class":66},"        total ",[49,161009,10729],{"class":109},[49,161011,160337],{"class":66},[49,161013,161014],{"class":51,"line":121},[49,161015,3654],{"emptyLinePlaceholder":1330},[49,161017,161018,161020],{"class":51,"line":134},[49,161019,31663],{"class":73},[49,161021,160356],{"class":66},[19,161023,161024],{},"也可以：",[39,161026,161028],{"className":31626,"code":161027,"language":31628,"meta":44,"style":44},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[46,161029,161030,161038,161042,161066,161074,161078],{"__ignoreMap":44},[49,161031,161032,161034,161036],{"class":51,"line":52},[49,161033,158285],{"class":66},[49,161035,1448],{"class":109},[49,161037,48581],{"class":73},[49,161039,161040],{"class":51,"line":59},[49,161041,3654],{"emptyLinePlaceholder":1330},[49,161043,161044,161046,161048,161050,161052,161054,161056,161058,161060,161062,161064],{"class":51,"line":70},[49,161045,4279],{"class":109},[49,161047,10690],{"class":66},[49,161049,27292],{"class":109},[49,161051,33691],{"class":73},[49,161053,1403],{"class":66},[49,161055,1478],{"class":73},[49,161057,13687],{"class":66},[49,161059,1729],{"class":73},[49,161061,13687],{"class":66},[49,161063,1478],{"class":73},[49,161065,32034],{"class":66},[49,161067,161068,161070,161072],{"class":51,"line":86},[49,161069,160332],{"class":66},[49,161071,10729],{"class":109},[49,161073,160337],{"class":66},[49,161075,161076],{"class":51,"line":98},[49,161077,3654],{"emptyLinePlaceholder":1330},[49,161079,161080,161082],{"class":51,"line":121},[49,161081,31663],{"class":73},[49,161083,160356],{"class":66},[14,161085,161087],{"id":161086},"_49-循环嵌套","4.9 循环嵌套",[19,161089,161090],{},"嵌套循环就是循环里面再写循环。",[39,161092,161094],{"className":31626,"code":161093,"language":31628,"meta":44,"style":44},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[46,161095,161096,161116,161136],{"__ignoreMap":44},[49,161097,161098,161100,161102,161104,161106,161108,161110,161112,161114],{"class":51,"line":52},[49,161099,4279],{"class":109},[49,161101,10690],{"class":66},[49,161103,27292],{"class":109},[49,161105,33691],{"class":73},[49,161107,1403],{"class":66},[49,161109,159],{"class":73},[49,161111,13687],{"class":66},[49,161113,1685],{"class":73},[49,161115,32034],{"class":66},[49,161117,161118,161120,161122,161124,161126,161128,161130,161132,161134],{"class":51,"line":59},[49,161119,4455],{"class":109},[49,161121,10752],{"class":66},[49,161123,27292],{"class":109},[49,161125,33691],{"class":73},[49,161127,1403],{"class":66},[49,161129,159],{"class":73},[49,161131,13687],{"class":66},[49,161133,1685],{"class":73},[49,161135,32034],{"class":66},[49,161137,161138,161140,161142,161144,161147,161149,161151,161153,161156,161158,161160,161162,161164],{"class":51,"line":70},[49,161139,33699],{"class":73},[49,161141,1403],{"class":66},[49,161143,1454],{"class":109},[49,161145,161146],{"class":1505},"\"i=",[49,161148,2286],{"class":73},[49,161150,1833],{"class":66},[49,161152,620],{"class":73},[49,161154,161155],{"class":1505},", j=",[49,161157,2286],{"class":73},[49,161159,1858],{"class":66},[49,161161,620],{"class":73},[49,161163,1643],{"class":1505},[49,161165,1409],{"class":66},[19,161167,161168],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161170,161172],{"id":161171},"_410-九九乘法表","4.10 九九乘法表",[39,161174,161176],{"className":31626,"code":161175,"language":31628,"meta":44,"style":44},"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",[46,161177,161178,161198,161221,161273],{"__ignoreMap":44},[49,161179,161180,161182,161184,161186,161188,161190,161192,161194,161196],{"class":51,"line":52},[49,161181,4279],{"class":109},[49,161183,10690],{"class":66},[49,161185,27292],{"class":109},[49,161187,33691],{"class":73},[49,161189,1403],{"class":66},[49,161191,159],{"class":73},[49,161193,13687],{"class":66},[49,161195,106],{"class":73},[49,161197,32034],{"class":66},[49,161199,161200,161202,161204,161206,161208,161210,161212,161215,161217,161219],{"class":51,"line":59},[49,161201,4455],{"class":109},[49,161203,10752],{"class":66},[49,161205,27292],{"class":109},[49,161207,33691],{"class":73},[49,161209,1403],{"class":66},[49,161211,159],{"class":73},[49,161213,161214],{"class":66},", i ",[49,161216,1872],{"class":109},[49,161218,26367],{"class":73},[49,161220,32034],{"class":66},[49,161222,161223,161225,161227,161229,161231,161233,161235,161237,161239,161241,161243,161245,161247,161249,161251,161253,161255,161257,161259,161261,161263,161265,161267,161269,161271],{"class":51,"line":70},[49,161224,33699],{"class":73},[49,161226,1403],{"class":66},[49,161228,1454],{"class":109},[49,161230,1643],{"class":1505},[49,161232,2286],{"class":73},[49,161234,1858],{"class":66},[49,161236,620],{"class":73},[49,161238,1846],{"class":1505},[49,161240,2286],{"class":73},[49,161242,1833],{"class":66},[49,161244,620],{"class":73},[49,161246,1448],{"class":1505},[49,161248,2286],{"class":73},[49,161250,101372],{"class":66},[49,161252,1846],{"class":109},[49,161254,4664],{"class":66},[49,161256,620],{"class":73},[49,161258,1643],{"class":1505},[49,161260,13687],{"class":66},[49,161262,47049],{"class":6468},[49,161264,1448],{"class":109},[49,161266,1643],{"class":1505},[49,161268,2489],{"class":73},[49,161270,1643],{"class":1505},[49,161272,1409],{"class":66},[49,161274,161275,161277],{"class":51,"line":86},[49,161276,32547],{"class":73},[49,161278,3230],{"class":66},[19,161280,161281],{},"关键点：",[591,161283,161284,161290,161296,161302],{},[26,161285,161286,161287,161289],{},"外层 ",[46,161288,1833],{}," 控制行。",[26,161291,161292,161293,161295],{},"内层 ",[46,161294,1858],{}," 控制列。",[26,161297,161298,161299,161301],{},"每行结束后用 ",[46,161300,147497],{}," 换行。",[26,161303,161304,161307],{},[46,161305,161306],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161309,161311],{"id":161310},"_411-循环else","4.11 循环else",[19,161313,161314,161315,161317,161318,161320,161321,161323],{},"Python 的循环可以带 ",[46,161316,2956],{},"。当循环正常结束时执行 ",[46,161319,2956],{},"，如果被 ",[46,161322,3307],{}," 打断，则不执行。",[39,161325,161327],{"className":31626,"code":161326,"language":31628,"meta":44,"style":44},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[46,161328,161329,161349,161361,161372,161376,161382],{"__ignoreMap":44},[49,161330,161331,161333,161335,161337,161339,161341,161343,161345,161347],{"class":51,"line":52},[49,161332,4279],{"class":109},[49,161334,10690],{"class":66},[49,161336,27292],{"class":109},[49,161338,33691],{"class":73},[49,161340,1403],{"class":66},[49,161342,159],{"class":73},[49,161344,13687],{"class":66},[49,161346,1736],{"class":73},[49,161348,32034],{"class":66},[49,161350,161351,161353,161355,161357,161359],{"class":51,"line":59},[49,161352,4355],{"class":109},[49,161354,10690],{"class":66},[49,161356,4203],{"class":109},[49,161358,3292],{"class":73},[49,161360,4993],{"class":66},[49,161362,161363,161365,161367,161370],{"class":51,"line":70},[49,161364,33699],{"class":73},[49,161366,1403],{"class":66},[49,161368,161369],{"class":1505},"\"找到了\"",[49,161371,1409],{"class":66},[49,161373,161374],{"class":51,"line":86},[49,161375,32875],{"class":109},[49,161377,161378,161380],{"class":51,"line":98},[49,161379,2956],{"class":109},[49,161381,4993],{"class":66},[49,161383,161384,161386,161388,161391],{"class":51,"line":121},[49,161385,32547],{"class":73},[49,161387,1403],{"class":66},[49,161389,161390],{"class":1505},"\"没找到\"",[49,161392,1409],{"class":66},[19,161394,161395],{},"常用于搜索。",[39,161397,161399],{"className":31626,"code":161398,"language":31628,"meta":44,"style":44},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[46,161400,161401,161422,161431,161435,161447,161458,161468,161472,161478],{"__ignoreMap":44},[49,161402,161403,161406,161408,161410,161412,161414,161416,161418,161420],{"class":51,"line":52},[49,161404,161405],{"class":66},"names ",[49,161407,1448],{"class":109},[49,161409,53468],{"class":66},[49,161411,150913],{"class":1505},[49,161413,13687],{"class":66},[49,161415,151961],{"class":1505},[49,161417,13687],{"class":66},[49,161419,160756],{"class":1505},[49,161421,34494],{"class":66},[49,161423,161424,161426,161428],{"class":51,"line":59},[49,161425,112802],{"class":66},[49,161427,1448],{"class":109},[49,161429,161430],{"class":1505}," \"小李\"\n",[49,161432,161433],{"class":51,"line":70},[49,161434,3654],{"emptyLinePlaceholder":1330},[49,161436,161437,161439,161442,161444],{"class":51,"line":86},[49,161438,4279],{"class":109},[49,161440,161441],{"class":66}," name ",[49,161443,27292],{"class":109},[49,161445,161446],{"class":66}," names:\n",[49,161448,161449,161451,161453,161455],{"class":51,"line":98},[49,161450,4355],{"class":109},[49,161452,161441],{"class":66},[49,161454,4203],{"class":109},[49,161456,161457],{"class":66}," target:\n",[49,161459,161460,161462,161464,161466],{"class":51,"line":121},[49,161461,33699],{"class":73},[49,161463,1403],{"class":66},[49,161465,161369],{"class":1505},[49,161467,1409],{"class":66},[49,161469,161470],{"class":51,"line":134},[49,161471,32875],{"class":109},[49,161473,161474,161476],{"class":51,"line":1085},[49,161475,2956],{"class":109},[49,161477,4993],{"class":66},[49,161479,161480,161482,161484,161486],{"class":51,"line":2574},[49,161481,32547],{"class":73},[49,161483,1403],{"class":66},[49,161485,161390],{"class":1505},[49,161487,1409],{"class":66},[14,161489,161491],{"id":161490},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161493,124516],{},[591,161495,161496,161499,161502],{},[26,161497,161498],{},"用户最多输入 3 次密码。",[26,161500,161501],{},"密码正确则登录成功。",[26,161503,161504],{},"3 次都错误则锁定账号。",[19,161506,11287],{},[39,161508,161510],{"className":31626,"code":161509,"language":31628,"meta":44,"style":44},"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",[46,161511,161512,161522,161526,161542,161558,161562,161574,161585,161589,161595,161620,161626],{"__ignoreMap":44},[49,161513,161514,161517,161519],{"class":51,"line":52},[49,161515,161516],{"class":66},"password ",[49,161518,1448],{"class":109},[49,161520,161521],{"class":1505}," \"123456\"\n",[49,161523,161524],{"class":51,"line":59},[49,161525,3654],{"emptyLinePlaceholder":1330},[49,161527,161528,161530,161532,161534,161536,161538,161540],{"class":51,"line":70},[49,161529,4279],{"class":109},[49,161531,10690],{"class":66},[49,161533,27292],{"class":109},[49,161535,33691],{"class":73},[49,161537,1403],{"class":66},[49,161539,1472],{"class":73},[49,161541,32034],{"class":66},[49,161543,161544,161547,161549,161551,161553,161556],{"class":51,"line":86},[49,161545,161546],{"class":66},"    user_password ",[49,161548,1448],{"class":109},[49,161550,61844],{"class":73},[49,161552,1403],{"class":66},[49,161554,161555],{"class":1505},"\"请输入密码:\"",[49,161557,1409],{"class":66},[49,161559,161560],{"class":51,"line":98},[49,161561,3654],{"emptyLinePlaceholder":1330},[49,161563,161564,161566,161569,161571],{"class":51,"line":121},[49,161565,4355],{"class":109},[49,161567,161568],{"class":66}," user_password ",[49,161570,4203],{"class":109},[49,161572,161573],{"class":66}," password:\n",[49,161575,161576,161578,161580,161583],{"class":51,"line":134},[49,161577,33699],{"class":73},[49,161579,1403],{"class":66},[49,161581,161582],{"class":1505},"\"登录成功\"",[49,161584,1409],{"class":66},[49,161586,161587],{"class":51,"line":1085},[49,161588,32875],{"class":109},[49,161590,161591,161593],{"class":51,"line":2574},[49,161592,159047],{"class":109},[49,161594,4993],{"class":66},[49,161596,161597,161599,161601,161603,161606,161609,161611,161613,161615,161618],{"class":51,"line":2586},[49,161598,33699],{"class":73},[49,161600,1403],{"class":66},[49,161602,1454],{"class":109},[49,161604,161605],{"class":1505},"\"密码错误，还剩",[49,161607,161608],{"class":73},"{2",[49,161610,53513],{"class":109},[49,161612,4286],{"class":66},[49,161614,620],{"class":73},[49,161616,161617],{"class":1505},"次机会\"",[49,161619,1409],{"class":66},[49,161621,161622,161624],{"class":51,"line":2867},[49,161623,2956],{"class":109},[49,161625,4993],{"class":66},[49,161627,161628,161630,161632,161635],{"class":51,"line":2872},[49,161629,32547],{"class":73},[49,161631,1403],{"class":66},[49,161633,161634],{"class":1505},"\"账号已锁定\"",[49,161636,1409],{"class":66},[14,161638,161640],{"id":161639},"_413-小案例菜单程序","4.13 小案例：菜单程序",[39,161642,161644],{"className":31626,"code":161643,"language":31628,"meta":44,"style":44},"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",[46,161645,161646,161654,161665,161676,161687,161698,161709,161713,161728,161732,161744,161755,161767,161778,161790,161801,161813,161823,161827,161833],{"__ignoreMap":44},[49,161647,161648,161650,161652],{"class":51,"line":52},[49,161649,109887],{"class":109},[49,161651,96517],{"class":73},[49,161653,4993],{"class":66},[49,161655,161656,161658,161660,161663],{"class":51,"line":59},[49,161657,32547],{"class":73},[49,161659,1403],{"class":66},[49,161661,161662],{"class":1505},"\"====== 菜单 ======\"",[49,161664,1409],{"class":66},[49,161666,161667,161669,161671,161674],{"class":51,"line":70},[49,161668,32547],{"class":73},[49,161670,1403],{"class":66},[49,161672,161673],{"class":1505},"\"1. 查询余额\"",[49,161675,1409],{"class":66},[49,161677,161678,161680,161682,161685],{"class":51,"line":86},[49,161679,32547],{"class":73},[49,161681,1403],{"class":66},[49,161683,161684],{"class":1505},"\"2. 存款\"",[49,161686,1409],{"class":66},[49,161688,161689,161691,161693,161696],{"class":51,"line":98},[49,161690,32547],{"class":73},[49,161692,1403],{"class":66},[49,161694,161695],{"class":1505},"\"3. 取款\"",[49,161697,1409],{"class":66},[49,161699,161700,161702,161704,161707],{"class":51,"line":121},[49,161701,32547],{"class":73},[49,161703,1403],{"class":66},[49,161705,161706],{"class":1505},"\"0. 退出\"",[49,161708,1409],{"class":66},[49,161710,161711],{"class":51,"line":134},[49,161712,3654],{"emptyLinePlaceholder":1330},[49,161714,161715,161718,161720,161722,161724,161726],{"class":51,"line":1085},[49,161716,161717],{"class":66},"    choice ",[49,161719,1448],{"class":109},[49,161721,61844],{"class":73},[49,161723,1403],{"class":66},[49,161725,154098],{"class":1505},[49,161727,1409],{"class":66},[49,161729,161730],{"class":51,"line":2574},[49,161731,3654],{"emptyLinePlaceholder":1330},[49,161733,161734,161736,161738,161740,161742],{"class":51,"line":2586},[49,161735,4355],{"class":109},[49,161737,154111],{"class":66},[49,161739,4203],{"class":109},[49,161741,154116],{"class":1505},[49,161743,4993],{"class":66},[49,161745,161746,161748,161750,161753],{"class":51,"line":2867},[49,161747,33699],{"class":73},[49,161749,1403],{"class":66},[49,161751,161752],{"class":1505},"\"余额为1000元\"",[49,161754,1409],{"class":66},[49,161756,161757,161759,161761,161763,161765],{"class":51,"line":2872},[49,161758,40541],{"class":109},[49,161760,154111],{"class":66},[49,161762,4203],{"class":109},[49,161764,154135],{"class":1505},[49,161766,4993],{"class":66},[49,161768,161769,161771,161773,161776],{"class":51,"line":2878},[49,161770,33699],{"class":73},[49,161772,1403],{"class":66},[49,161774,161775],{"class":1505},"\"存款功能\"",[49,161777,1409],{"class":66},[49,161779,161780,161782,161784,161786,161788],{"class":51,"line":2883},[49,161781,40541],{"class":109},[49,161783,154111],{"class":66},[49,161785,4203],{"class":109},[49,161787,154153],{"class":1505},[49,161789,4993],{"class":66},[49,161791,161792,161794,161796,161799],{"class":51,"line":2897},[49,161793,33699],{"class":73},[49,161795,1403],{"class":66},[49,161797,161798],{"class":1505},"\"取款功能\"",[49,161800,1409],{"class":66},[49,161802,161803,161805,161807,161809,161811],{"class":51,"line":2902},[49,161804,40541],{"class":109},[49,161806,154111],{"class":66},[49,161808,4203],{"class":109},[49,161810,154207],{"class":1505},[49,161812,4993],{"class":66},[49,161814,161815,161817,161819,161821],{"class":51,"line":2908},[49,161816,33699],{"class":73},[49,161818,1403],{"class":66},[49,161820,154218],{"class":1505},[49,161822,1409],{"class":66},[49,161824,161825],{"class":51,"line":2929},[49,161826,32875],{"class":109},[49,161828,161829,161831],{"class":51,"line":2934},[49,161830,159047],{"class":109},[49,161832,4993],{"class":66},[49,161834,161835,161837,161839,161841],{"class":51,"line":2948},[49,161836,33699],{"class":73},[49,161838,1403],{"class":66},[49,161840,154239],{"class":1505},[49,161842,1409],{"class":66},[19,161844,161845,161846,161848,161849,29633],{},"菜单类程序通常使用 ",[46,161847,160547],{},"，用户选择退出时 ",[46,161850,3307],{},[14,161852,161854],{"id":161853},"_414-易错点","4.14 易错点",[591,161856,161857,161862,161868,161876,161882],{},[26,161858,161859,161861],{},[46,161860,109887],{}," 循环必须更新控制变量。",[26,161863,161864,161867],{},[46,161865,161866],{},"range(1, 10)"," 不包含 10。",[26,161869,161870,161872,161873,161875],{},[46,161871,3307],{}," 结束整个循环，",[46,161874,155697],{}," 只跳过本轮。",[26,161877,161878,161879,161881],{},"嵌套循环中，",[46,161880,3307],{}," 只跳出当前所在的一层循环。",[26,161883,161884],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161886,161888],{"id":161887},"_415-本章练习","4.15 本章练习",[591,161890,161891,161894,161897,161900,161903],{},[26,161892,161893],{},"输出 1 到 100。",[26,161895,161896],{},"计算 1 到 100 的偶数和。",[26,161898,161899],{},"输出 100 以内能被 3 和 5 同时整除的数。",[26,161901,161902],{},"编写猜数字游戏，限制最多猜 7 次。",[26,161904,161905],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1305,161907,161908],{},"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":44,"searchDepth":59,"depth":59,"links":161910},[161911,161912,161913,161914,161915,161919,161920,161921,161922,161923,161924,161925,161926,161927,161928],{"id":160167,"depth":59,"text":160168},{"id":160197,"depth":59,"text":160198},{"id":160286,"depth":59,"text":160287},{"id":160380,"depth":59,"text":160381},{"id":160554,"depth":59,"text":160555,"children":161916},[161917,161918],{"id":160558,"depth":70,"text":160559},{"id":160622,"depth":70,"text":160623},{"id":160686,"depth":59,"text":160687},{"id":160781,"depth":59,"text":160782},{"id":160890,"depth":59,"text":160891},{"id":161086,"depth":59,"text":161087},{"id":161171,"depth":59,"text":161172},{"id":161310,"depth":59,"text":161311},{"id":161490,"depth":59,"text":161491},{"id":161639,"depth":59,"text":161640},{"id":161853,"depth":59,"text":161854},{"id":161887,"depth":59,"text":161888},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160159,"description":1327},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161935,"title":161936,"body":161937,"description":1327,"extension":1328,"meta":163942,"navigation":1330,"path":163943,"seo":163944,"stem":163945,"__hash__":163946},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161938,"toc":163922},[161939,161942,161946,161949,161952,161966,161969,161983,161987,161989,162008,162010,162057,162059,162073,162077,162151,162154,162158,162161,162220,162228,162231,162284,162287,162291,162296,162351,162359,162409,162413,162418,162426,162525,162531,162535,162540,162543,162554,162595,162608,162612,162615,162651,162654,162667,162670,162730,162734,162738,162741,162792,162796,162799,162846,162852,162918,162921,162925,162928,163044,163047,163051,163054,163160,163164,163167,163205,163208,163250,163253,163313,163316,163320,163784,163787,163791,163818,163824,163885,163889,163919],[10,161940,161936],{"id":161941},"_5-函数基础",[14,161943,161945],{"id":161944},"_51-为什么需要函数","5.1 为什么需要函数",[19,161947,161948],{},"函数用于封装一段可以重复使用的代码。",[19,161950,161951],{},"不使用函数的问题：",[591,161953,161954,161957,161960,161963],{},[26,161955,161956],{},"重复代码多。",[26,161958,161959],{},"修改逻辑时容易漏改。",[26,161961,161962],{},"主流程不清晰。",[26,161964,161965],{},"程序越写越长，难以维护。",[19,161967,161968],{},"使用函数后的好处：",[591,161970,161971,161974,161977,161980],{},[26,161972,161973],{},"提高复用性。",[26,161975,161976],{},"提高可读性。",[26,161978,161979],{},"便于调试。",[26,161981,161982],{},"便于分工。",[14,161984,161986],{"id":161985},"_52-函数定义","5.2 函数定义",[19,161988,6435],{},[39,161990,161992],{"className":31626,"code":161991,"language":31628,"meta":44,"style":44},"def 函数名():\n    函数体\n",[46,161993,161994,162003],{"__ignoreMap":44},[49,161995,161996,161998,162001],{"class":51,"line":52},[49,161997,33195],{"class":109},[49,161999,162000],{"class":62}," 函数名",[49,162002,33201],{"class":66},[49,162004,162005],{"class":51,"line":59},[49,162006,162007],{"class":66},"    函数体\n",[19,162009,16386],{},[39,162011,162013],{"className":31626,"code":162012,"language":31628,"meta":44,"style":44},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[46,162014,162015,162024,162034,162044,162048,162052],{"__ignoreMap":44},[49,162016,162017,162019,162022],{"class":51,"line":52},[49,162018,33195],{"class":109},[49,162020,162021],{"class":62}," say_hello",[49,162023,33201],{"class":66},[49,162025,162026,162028,162030,162032],{"class":51,"line":59},[49,162027,32547],{"class":73},[49,162029,1403],{"class":66},[49,162031,7096],{"class":1505},[49,162033,1409],{"class":66},[49,162035,162036,162038,162040,162042],{"class":51,"line":70},[49,162037,32547],{"class":73},[49,162039,1403],{"class":66},[49,162041,147664],{"class":1505},[49,162043,1409],{"class":66},[49,162045,162046],{"class":51,"line":86},[49,162047,3654],{"emptyLinePlaceholder":1330},[49,162049,162050],{"class":51,"line":98},[49,162051,3654],{"emptyLinePlaceholder":1330},[49,162053,162054],{"class":51,"line":121},[49,162055,162056],{"class":66},"say_hello()\n",[19,162058,10277],{},[591,162060,162061,162064,162067,162070],{},[26,162062,162063],{},"函数必须先定义，再调用。",[26,162065,162066],{},"函数名遵循变量命名规则。",[26,162068,162069],{},"函数体需要缩进。",[26,162071,162072],{},"函数不调用就不会执行。",[14,162074,162076],{"id":162075},"_53-函数调用","5.3 函数调用",[39,162078,162080],{"className":31626,"code":162079,"language":31628,"meta":44,"style":44},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[46,162081,162082,162091,162102,162113,162124,162134,162138,162142,162147],{"__ignoreMap":44},[49,162083,162084,162086,162089],{"class":51,"line":52},[49,162085,33195],{"class":109},[49,162087,162088],{"class":62}," print_menu",[49,162090,33201],{"class":66},[49,162092,162093,162095,162097,162100],{"class":51,"line":59},[49,162094,32547],{"class":73},[49,162096,1403],{"class":66},[49,162098,162099],{"class":1505},"\"1. 查询\"",[49,162101,1409],{"class":66},[49,162103,162104,162106,162108,162111],{"class":51,"line":70},[49,162105,32547],{"class":73},[49,162107,1403],{"class":66},[49,162109,162110],{"class":1505},"\"2. 添加\"",[49,162112,1409],{"class":66},[49,162114,162115,162117,162119,162122],{"class":51,"line":86},[49,162116,32547],{"class":73},[49,162118,1403],{"class":66},[49,162120,162121],{"class":1505},"\"3. 删除\"",[49,162123,1409],{"class":66},[49,162125,162126,162128,162130,162132],{"class":51,"line":98},[49,162127,32547],{"class":73},[49,162129,1403],{"class":66},[49,162131,161706],{"class":1505},[49,162133,1409],{"class":66},[49,162135,162136],{"class":51,"line":121},[49,162137,3654],{"emptyLinePlaceholder":1330},[49,162139,162140],{"class":51,"line":134},[49,162141,3654],{"emptyLinePlaceholder":1330},[49,162143,162144],{"class":51,"line":1085},[49,162145,162146],{"class":66},"print_menu()\n",[49,162148,162149],{"class":51,"line":2574},[49,162150,162146],{"class":66},[19,162152,162153],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162155,162157],{"id":162156},"_54-参数","5.4 参数",[19,162159,162160],{},"参数用于向函数传递数据。",[39,162162,162164],{"className":31626,"code":162163,"language":31628,"meta":44,"style":44},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[46,162165,162166,162175,162195,162199,162203,162212],{"__ignoreMap":44},[49,162167,162168,162170,162172],{"class":51,"line":52},[49,162169,33195],{"class":109},[49,162171,162021],{"class":62},[49,162173,162174],{"class":66},"(name):\n",[49,162176,162177,162179,162181,162183,162185,162187,162189,162191,162193],{"class":51,"line":59},[49,162178,32547],{"class":73},[49,162180,1403],{"class":66},[49,162182,1454],{"class":109},[49,162184,158079],{"class":1505},[49,162186,2286],{"class":73},[49,162188,81036],{"class":66},[49,162190,620],{"class":73},[49,162192,1643],{"class":1505},[49,162194,1409],{"class":66},[49,162196,162197],{"class":51,"line":70},[49,162198,3654],{"emptyLinePlaceholder":1330},[49,162200,162201],{"class":51,"line":86},[49,162202,3654],{"emptyLinePlaceholder":1330},[49,162204,162205,162208,162210],{"class":51,"line":98},[49,162206,162207],{"class":66},"say_hello(",[49,162209,150913],{"class":1505},[49,162211,1409],{"class":66},[49,162213,162214,162216,162218],{"class":51,"line":121},[49,162215,162207],{"class":66},[49,162217,151961],{"class":1505},[49,162219,1409],{"class":66},[19,162221,162222,162224,162225,162227],{},[46,162223,81036],{}," 是形参，",[46,162226,150913],{}," 是实参。",[19,162229,162230],{},"多个参数：",[39,162232,162234],{"className":31626,"code":162233,"language":31628,"meta":44,"style":44},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[46,162235,162236,162244,162257,162263,162267,162271],{"__ignoreMap":44},[49,162237,162238,162240,162242],{"class":51,"line":52},[49,162239,33195],{"class":109},[49,162241,6461],{"class":62},[49,162243,152118],{"class":66},[49,162245,162246,162249,162251,162253,162255],{"class":51,"line":59},[49,162247,162248],{"class":66},"    result ",[49,162250,1448],{"class":109},[49,162252,12121],{"class":66},[49,162254,1872],{"class":109},[49,162256,152129],{"class":66},[49,162258,162259,162261],{"class":51,"line":70},[49,162260,32547],{"class":73},[49,162262,77814],{"class":66},[49,162264,162265],{"class":51,"line":86},[49,162266,3654],{"emptyLinePlaceholder":1330},[49,162268,162269],{"class":51,"line":98},[49,162270,3654],{"emptyLinePlaceholder":1330},[49,162272,162273,162276,162278,162280,162282],{"class":51,"line":121},[49,162274,162275],{"class":66},"add(",[49,162277,106],{"class":73},[49,162279,13687],{"class":66},[49,162281,875],{"class":73},[49,162283,1409],{"class":66},[19,162285,162286],{},"调用时参数数量必须匹配。",[14,162288,162290],{"id":162289},"_55-返回值","5.5 返回值",[19,162292,162293,162295],{},[46,162294,18296],{}," 用于把函数内部的结果返回给调用者。",[39,162297,162299],{"className":31626,"code":162298,"language":31628,"meta":44,"style":44},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[46,162300,162301,162309,162319,162323,162327,162345],{"__ignoreMap":44},[49,162302,162303,162305,162307],{"class":51,"line":52},[49,162304,33195],{"class":109},[49,162306,6461],{"class":62},[49,162308,152118],{"class":66},[49,162310,162311,162313,162315,162317],{"class":51,"line":59},[49,162312,5344],{"class":109},[49,162314,12121],{"class":66},[49,162316,1872],{"class":109},[49,162318,152129],{"class":66},[49,162320,162321],{"class":51,"line":70},[49,162322,3654],{"emptyLinePlaceholder":1330},[49,162324,162325],{"class":51,"line":86},[49,162326,3654],{"emptyLinePlaceholder":1330},[49,162328,162329,162332,162334,162337,162339,162341,162343],{"class":51,"line":98},[49,162330,162331],{"class":66},"result ",[49,162333,1448],{"class":109},[49,162335,162336],{"class":66}," add(",[49,162338,106],{"class":73},[49,162340,13687],{"class":66},[49,162342,875],{"class":73},[49,162344,1409],{"class":66},[49,162346,162347,162349],{"class":51,"line":121},[49,162348,31663],{"class":73},[49,162350,77814],{"class":66},[19,162352,162353,162354,162356,162357,29633],{},"如果函数没有写 ",[46,162355,18296],{},"，默认返回 ",[46,162358,96911],{},[39,162360,162362],{"className":31626,"code":162361,"language":31628,"meta":44,"style":44},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[46,162363,162364,162372,162382,162386,162390,162399],{"__ignoreMap":44},[49,162365,162366,162368,162370],{"class":51,"line":52},[49,162367,33195],{"class":109},[49,162369,162021],{"class":62},[49,162371,33201],{"class":66},[49,162373,162374,162376,162378,162380],{"class":51,"line":59},[49,162375,32547],{"class":73},[49,162377,1403],{"class":66},[49,162379,7096],{"class":1505},[49,162381,1409],{"class":66},[49,162383,162384],{"class":51,"line":70},[49,162385,3654],{"emptyLinePlaceholder":1330},[49,162387,162388],{"class":51,"line":86},[49,162389,3654],{"emptyLinePlaceholder":1330},[49,162391,162392,162394,162396],{"class":51,"line":98},[49,162393,162331],{"class":66},[49,162395,1448],{"class":109},[49,162397,162398],{"class":66}," say_hello()\n",[49,162400,162401,162403,162406],{"class":51,"line":121},[49,162402,31663],{"class":73},[49,162404,162405],{"class":66},"(result)  ",[49,162407,162408],{"class":55},"# None\n",[14,162410,162412],{"id":162411},"_56-return的作用","5.6 return的作用",[19,162414,162415,162417],{},[46,162416,18296],{}," 有两个作用：",[591,162419,162420,162423],{},[26,162421,162422],{},"返回结果。",[26,162424,162425],{},"结束函数。",[39,162427,162429],{"className":31626,"code":162428,"language":31628,"meta":44,"style":44},"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",[46,162430,162431,162441,162453,162460,162464,162476,162483,162487,162494,162498,162502,162513],{"__ignoreMap":44},[49,162432,162433,162435,162438],{"class":51,"line":52},[49,162434,33195],{"class":109},[49,162436,162437],{"class":62}," check_age",[49,162439,162440],{"class":66},"(age):\n",[49,162442,162443,162445,162447,162449,162451],{"class":51,"line":59},[49,162444,4355],{"class":109},[49,162446,16957],{"class":66},[49,162448,2300],{"class":109},[49,162450,5347],{"class":73},[49,162452,4993],{"class":66},[49,162454,162455,162457],{"class":51,"line":70},[49,162456,16003],{"class":109},[49,162458,162459],{"class":1505}," \"年龄不合法\"\n",[49,162461,162462],{"class":51,"line":86},[49,162463,3654],{"emptyLinePlaceholder":1330},[49,162465,162466,162468,162470,162472,162474],{"class":51,"line":98},[49,162467,4355],{"class":109},[49,162469,16957],{"class":66},[49,162471,2965],{"class":109},[49,162473,157310],{"class":73},[49,162475,4993],{"class":66},[49,162477,162478,162480],{"class":51,"line":121},[49,162479,16003],{"class":109},[49,162481,162482],{"class":1505}," \"成年人\"\n",[49,162484,162485],{"class":51,"line":134},[49,162486,3654],{"emptyLinePlaceholder":1330},[49,162488,162489,162491],{"class":51,"line":1085},[49,162490,5344],{"class":109},[49,162492,162493],{"class":1505}," \"未成年人\"\n",[49,162495,162496],{"class":51,"line":2574},[49,162497,3654],{"emptyLinePlaceholder":1330},[49,162499,162500],{"class":51,"line":2586},[49,162501,3654],{"emptyLinePlaceholder":1330},[49,162503,162504,162506,162509,162511],{"class":51,"line":2867},[49,162505,31663],{"class":73},[49,162507,162508],{"class":66},"(check_age(",[49,162510,875],{"class":73},[49,162512,31745],{"class":66},[49,162514,162515,162517,162519,162521,162523],{"class":51,"line":2872},[49,162516,31663],{"class":73},[49,162518,162508],{"class":66},[49,162520,1923],{"class":109},[49,162522,159],{"class":73},[49,162524,31745],{"class":66},[19,162526,162527,162528,162530],{},"函数执行到 ",[46,162529,18296],{}," 后，后面的代码不会继续执行。",[14,162532,162534],{"id":162533},"_57-none","5.7 None",[19,162536,162537,162539],{},[46,162538,96911],{}," 表示空值或没有结果。",[19,162541,162542],{},"常见使用场景：",[591,162544,162545,162548,162551],{},[26,162546,162547],{},"函数没有返回值。",[26,162549,162550],{},"变量暂时没有具体值。",[26,162552,162553],{},"表示查询不到结果。",[39,162555,162557],{"className":31626,"code":162556,"language":31628,"meta":44,"style":44},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[46,162558,162559,162567,162571,162584],{"__ignoreMap":44},[49,162560,162561,162563,162565],{"class":51,"line":52},[49,162562,162331],{"class":66},[49,162564,1448],{"class":109},[49,162566,153197],{"class":73},[49,162568,162569],{"class":51,"line":59},[49,162570,3654],{"emptyLinePlaceholder":1330},[49,162572,162573,162575,162578,162580,162582],{"class":51,"line":70},[49,162574,2787],{"class":109},[49,162576,162577],{"class":66}," result ",[49,162579,40175],{"class":109},[49,162581,40181],{"class":73},[49,162583,4993],{"class":66},[49,162585,162586,162588,162590,162593],{"class":51,"line":86},[49,162587,32547],{"class":73},[49,162589,1403],{"class":66},[49,162591,162592],{"class":1505},"\"没有数据\"",[49,162594,1409],{"class":66},[19,162596,162597,162598,162600,162601,162604,162605,29633],{},"判断 ",[46,162599,96911],{}," 推荐使用 ",[46,162602,162603],{},"is None","，不要写成 ",[46,162606,162607],{},"== None",[14,162609,162611],{"id":162610},"_58-函数文档字符串","5.8 函数文档字符串",[19,162613,162614],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[39,162616,162618],{"className":31626,"code":162617,"language":31628,"meta":44,"style":44},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[46,162619,162620,162630,162635],{"__ignoreMap":44},[49,162621,162622,162624,162627],{"class":51,"line":52},[49,162623,33195],{"class":109},[49,162625,162626],{"class":62}," calculate_bmi",[49,162628,162629],{"class":66},"(weight, height):\n",[49,162631,162632],{"class":51,"line":59},[49,162633,162634],{"class":1505},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[49,162636,162637,162639,162642,162644,162647,162649],{"class":51,"line":70},[49,162638,5344],{"class":109},[49,162640,162641],{"class":66}," weight ",[49,162643,1975],{"class":109},[49,162645,162646],{"class":66}," height ",[49,162648,11913],{"class":109},[49,162650,48971],{"class":73},[19,162652,162653],{},"查看说明：",[39,162655,162657],{"className":31626,"code":162656,"language":31628,"meta":44,"style":44},"help(calculate_bmi)\n",[46,162658,162659],{"__ignoreMap":44},[49,162660,162661,162664],{"class":51,"line":52},[49,162662,162663],{"class":73},"help",[49,162665,162666],{"class":66},"(calculate_bmi)\n",[19,162668,162669],{},"较完整的写法：",[39,162671,162673],{"className":31626,"code":162672,"language":31628,"meta":44,"style":44},"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",[46,162674,162675,162683,162688,162693,162697,162702,162707,162712,162716],{"__ignoreMap":44},[49,162676,162677,162679,162681],{"class":51,"line":52},[49,162678,33195],{"class":109},[49,162680,162626],{"class":62},[49,162682,162629],{"class":66},[49,162684,162685],{"class":51,"line":59},[49,162686,162687],{"class":1505},"    \"\"\"\n",[49,162689,162690],{"class":51,"line":70},[49,162691,162692],{"class":1505},"    计算BMI。\n",[49,162694,162695],{"class":51,"line":86},[49,162696,3654],{"emptyLinePlaceholder":1330},[49,162698,162699],{"class":51,"line":98},[49,162700,162701],{"class":1505},"    :param weight: 体重，单位kg\n",[49,162703,162704],{"class":51,"line":121},[49,162705,162706],{"class":1505},"    :param height: 身高，单位m\n",[49,162708,162709],{"class":51,"line":134},[49,162710,162711],{"class":1505},"    :return: BMI数值\n",[49,162713,162714],{"class":51,"line":1085},[49,162715,162687],{"class":1505},[49,162717,162718,162720,162722,162724,162726,162728],{"class":51,"line":2574},[49,162719,5344],{"class":109},[49,162721,162641],{"class":66},[49,162723,1975],{"class":109},[49,162725,162646],{"class":66},[49,162727,11913],{"class":109},[49,162729,48971],{"class":73},[14,162731,162733],{"id":162732},"_59-变量作用域","5.9 变量作用域",[183,162735,162737],{"id":162736},"_591-局部变量","5.9.1 局部变量",[19,162739,162740],{},"在函数内部定义的变量，只能在函数内部使用。",[39,162742,162744],{"className":31626,"code":162743,"language":31628,"meta":44,"style":44},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[46,162745,162746,162755,162763,162769,162773,162777,162782],{"__ignoreMap":44},[49,162747,162748,162750,162753],{"class":51,"line":52},[49,162749,33195],{"class":109},[49,162751,162752],{"class":62}," test",[49,162754,33201],{"class":66},[49,162756,162757,162759,162761],{"class":51,"line":59},[49,162758,46841],{"class":66},[49,162760,1448],{"class":109},[49,162762,59667],{"class":73},[49,162764,162765,162767],{"class":51,"line":70},[49,162766,32547],{"class":73},[49,162768,1416],{"class":66},[49,162770,162771],{"class":51,"line":86},[49,162772,3654],{"emptyLinePlaceholder":1330},[49,162774,162775],{"class":51,"line":98},[49,162776,3654],{"emptyLinePlaceholder":1330},[49,162778,162779],{"class":51,"line":121},[49,162780,162781],{"class":66},"test()\n",[49,162783,162784,162786,162789],{"class":51,"line":134},[49,162785,31663],{"class":73},[49,162787,162788],{"class":66},"(num)  ",[49,162790,162791],{"class":55},"# 报错\n",[183,162793,162795],{"id":162794},"_592-全局变量","5.9.2 全局变量",[19,162797,162798],{},"在函数外部定义的变量，可以在函数内部读取。",[39,162800,162802],{"className":31626,"code":162801,"language":31628,"meta":44,"style":44},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[46,162803,162804,162812,162816,162820,162828,162834,162838,162842],{"__ignoreMap":44},[49,162805,162806,162808,162810],{"class":51,"line":52},[49,162807,147561],{"class":66},[49,162809,1448],{"class":109},[49,162811,150378],{"class":1505},[49,162813,162814],{"class":51,"line":59},[49,162815,3654],{"emptyLinePlaceholder":1330},[49,162817,162818],{"class":51,"line":70},[49,162819,3654],{"emptyLinePlaceholder":1330},[49,162821,162822,162824,162826],{"class":51,"line":86},[49,162823,33195],{"class":109},[49,162825,162021],{"class":62},[49,162827,33201],{"class":66},[49,162829,162830,162832],{"class":51,"line":98},[49,162831,32547],{"class":73},[49,162833,151685],{"class":66},[49,162835,162836],{"class":51,"line":121},[49,162837,3654],{"emptyLinePlaceholder":1330},[49,162839,162840],{"class":51,"line":134},[49,162841,3654],{"emptyLinePlaceholder":1330},[49,162843,162844],{"class":51,"line":1085},[49,162845,162056],{"class":66},[19,162847,162848,162849,29633],{},"如果要在函数内部修改全局变量，需要 ",[46,162850,162851],{},"global",[39,162853,162855],{"className":31626,"code":162854,"language":31628,"meta":44,"style":44},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[46,162856,162857,162865,162869,162873,162882,162890,162898,162902,162906,162911],{"__ignoreMap":44},[49,162858,162859,162861,162863],{"class":51,"line":52},[49,162860,147716],{"class":66},[49,162862,1448],{"class":109},[49,162864,48581],{"class":73},[49,162866,162867],{"class":51,"line":59},[49,162868,3654],{"emptyLinePlaceholder":1330},[49,162870,162871],{"class":51,"line":70},[49,162872,3654],{"emptyLinePlaceholder":1330},[49,162874,162875,162877,162880],{"class":51,"line":86},[49,162876,33195],{"class":109},[49,162878,162879],{"class":62}," add_count",[49,162881,33201],{"class":66},[49,162883,162884,162887],{"class":51,"line":98},[49,162885,162886],{"class":109},"    global",[49,162888,162889],{"class":66}," count\n",[49,162891,162892,162894,162896],{"class":51,"line":121},[49,162893,160458],{"class":66},[49,162895,10729],{"class":109},[49,162897,56938],{"class":73},[49,162899,162900],{"class":51,"line":134},[49,162901,3654],{"emptyLinePlaceholder":1330},[49,162903,162904],{"class":51,"line":1085},[49,162905,3654],{"emptyLinePlaceholder":1330},[49,162907,162908],{"class":51,"line":2574},[49,162909,162910],{"class":66},"add_count()\n",[49,162912,162913,162915],{"class":51,"line":2586},[49,162914,31663],{"class":73},[49,162916,162917],{"class":66},"(count)\n",[19,162919,162920],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162922,162924],{"id":162923},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162926,162927],{},"一个函数中可以调用另一个函数。",[39,162929,162931],{"className":31626,"code":162930,"language":31628,"meta":44,"style":44},"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",[46,162932,162933,162942,162956,162960,162964,162973,162978,162998,163019,163023,163027,163031],{"__ignoreMap":44},[49,162934,162935,162937,162940],{"class":51,"line":52},[49,162936,33195],{"class":109},[49,162938,162939],{"class":62}," print_line",[49,162941,33201],{"class":66},[49,162943,162944,162946,162948,162950,162952,162954],{"class":51,"line":59},[49,162945,32547],{"class":73},[49,162947,1403],{"class":66},[49,162949,33731],{"class":1505},[49,162951,7770],{"class":109},[49,162953,79892],{"class":73},[49,162955,1409],{"class":66},[49,162957,162958],{"class":51,"line":70},[49,162959,3654],{"emptyLinePlaceholder":1330},[49,162961,162962],{"class":51,"line":86},[49,162963,3654],{"emptyLinePlaceholder":1330},[49,162965,162966,162968,162971],{"class":51,"line":98},[49,162967,33195],{"class":109},[49,162969,162970],{"class":62}," print_info",[49,162972,150400],{"class":66},[49,162974,162975],{"class":51,"line":121},[49,162976,162977],{"class":66},"    print_line()\n",[49,162979,162980,162982,162984,162986,162988,162990,162992,162994,162996],{"class":51,"line":134},[49,162981,32547],{"class":73},[49,162983,1403],{"class":66},[49,162985,1454],{"class":109},[49,162987,157707],{"class":1505},[49,162989,2286],{"class":73},[49,162991,81036],{"class":66},[49,162993,620],{"class":73},[49,162995,1643],{"class":1505},[49,162997,1409],{"class":66},[49,162999,163000,163002,163004,163006,163009,163011,163013,163015,163017],{"class":51,"line":1085},[49,163001,32547],{"class":73},[49,163003,1403],{"class":66},[49,163005,1454],{"class":109},[49,163007,163008],{"class":1505},"\"年龄:",[49,163010,2286],{"class":73},[49,163012,71456],{"class":66},[49,163014,620],{"class":73},[49,163016,1643],{"class":1505},[49,163018,1409],{"class":66},[49,163020,163021],{"class":51,"line":2574},[49,163022,162977],{"class":66},[49,163024,163025],{"class":51,"line":2586},[49,163026,3654],{"emptyLinePlaceholder":1330},[49,163028,163029],{"class":51,"line":2867},[49,163030,3654],{"emptyLinePlaceholder":1330},[49,163032,163033,163036,163038,163040,163042],{"class":51,"line":2872},[49,163034,163035],{"class":66},"print_info(",[49,163037,150913],{"class":1505},[49,163039,13687],{"class":66},[49,163041,2041],{"class":73},[49,163043,1409],{"class":66},[19,163045,163046],{},"这种方式可以把小功能组合成大功能。",[14,163048,163050],{"id":163049},"_511-参数检查","5.11 参数检查",[19,163052,163053],{},"函数内部可以检查参数是否合法。",[39,163055,163057],{"className":31626,"code":163056,"language":31628,"meta":44,"style":44},"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",[46,163058,163059,163068,163080,163086,163096,163100,163104,163121,163125,163137,163148,163154],{"__ignoreMap":44},[49,163060,163061,163063,163066],{"class":51,"line":52},[49,163062,33195],{"class":109},[49,163064,163065],{"class":62}," divide",[49,163067,152118],{"class":66},[49,163069,163070,163072,163074,163076,163078],{"class":51,"line":59},[49,163071,4355],{"class":109},[49,163073,12134],{"class":66},[49,163075,4203],{"class":109},[49,163077,5347],{"class":73},[49,163079,4993],{"class":66},[49,163081,163082,163084],{"class":51,"line":70},[49,163083,16003],{"class":109},[49,163085,153197],{"class":73},[49,163087,163088,163090,163092,163094],{"class":51,"line":86},[49,163089,5344],{"class":109},[49,163091,12121],{"class":66},[49,163093,1975],{"class":109},[49,163095,152129],{"class":66},[49,163097,163098],{"class":51,"line":98},[49,163099,3654],{"emptyLinePlaceholder":1330},[49,163101,163102],{"class":51,"line":121},[49,163103,3654],{"emptyLinePlaceholder":1330},[49,163105,163106,163108,163110,163113,163115,163117,163119],{"class":51,"line":134},[49,163107,162331],{"class":66},[49,163109,1448],{"class":109},[49,163111,163112],{"class":66}," divide(",[49,163114,106],{"class":73},[49,163116,13687],{"class":66},[49,163118,80],{"class":73},[49,163120,1409],{"class":66},[49,163122,163123],{"class":51,"line":1085},[49,163124,3654],{"emptyLinePlaceholder":1330},[49,163126,163127,163129,163131,163133,163135],{"class":51,"line":2574},[49,163128,2787],{"class":109},[49,163130,162577],{"class":66},[49,163132,40175],{"class":109},[49,163134,40181],{"class":73},[49,163136,4993],{"class":66},[49,163138,163139,163141,163143,163146],{"class":51,"line":2586},[49,163140,32547],{"class":73},[49,163142,1403],{"class":66},[49,163144,163145],{"class":1505},"\"除数不能为0\"",[49,163147,1409],{"class":66},[49,163149,163150,163152],{"class":51,"line":2867},[49,163151,2956],{"class":109},[49,163153,4993],{"class":66},[49,163155,163156,163158],{"class":51,"line":2872},[49,163157,32547],{"class":73},[49,163159,77814],{"class":66},[14,163161,163163],{"id":163162},"_512-类型提示","5.12 类型提示",[19,163165,163166],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[39,163168,163170],{"className":31626,"code":163169,"language":31628,"meta":44,"style":44},"def add(a: int, b: int) -> int:\n    return a + b\n",[46,163171,163172,163195],{"__ignoreMap":44},[49,163173,163174,163176,163178,163181,163183,163186,163188,163191,163193],{"class":51,"line":52},[49,163175,33195],{"class":109},[49,163177,6461],{"class":62},[49,163179,163180],{"class":66},"(a: ",[49,163182,1406],{"class":73},[49,163184,163185],{"class":66},", b: ",[49,163187,1406],{"class":73},[49,163189,163190],{"class":66},") -> ",[49,163192,1406],{"class":73},[49,163194,4993],{"class":66},[49,163196,163197,163199,163201,163203],{"class":51,"line":59},[49,163198,5344],{"class":109},[49,163200,12121],{"class":66},[49,163202,1872],{"class":109},[49,163204,152129],{"class":66},[19,163206,163207],{},"字符串参数：",[39,163209,163211],{"className":31626,"code":163210,"language":31628,"meta":44,"style":44},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[46,163212,163213,163230],{"__ignoreMap":44},[49,163214,163215,163217,163219,163222,163224,163226,163228],{"class":51,"line":52},[49,163216,33195],{"class":109},[49,163218,162021],{"class":62},[49,163220,163221],{"class":66},"(name: ",[49,163223,2557],{"class":73},[49,163225,163190],{"class":66},[49,163227,96911],{"class":73},[49,163229,4993],{"class":66},[49,163231,163232,163234,163236,163238,163240,163242,163244,163246,163248],{"class":51,"line":59},[49,163233,32547],{"class":73},[49,163235,1403],{"class":66},[49,163237,1454],{"class":109},[49,163239,158079],{"class":1505},[49,163241,2286],{"class":73},[49,163243,81036],{"class":66},[49,163245,620],{"class":73},[49,163247,1643],{"class":1505},[49,163249,1409],{"class":66},[19,163251,163252],{},"列表参数：",[39,163254,163256],{"className":31626,"code":163255,"language":31628,"meta":44,"style":44},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[46,163257,163258,163277,163285,163297,163306],{"__ignoreMap":44},[49,163259,163260,163262,163265,163268,163270,163273,163275],{"class":51,"line":52},[49,163261,33195],{"class":109},[49,163263,163264],{"class":62}," get_total",[49,163266,163267],{"class":66},"(numbers: list[",[49,163269,1406],{"class":73},[49,163271,163272],{"class":66},"]) -> ",[49,163274,1406],{"class":73},[49,163276,4993],{"class":66},[49,163278,163279,163281,163283],{"class":51,"line":59},[49,163280,160332],{"class":66},[49,163282,1448],{"class":109},[49,163284,48581],{"class":73},[49,163286,163287,163289,163292,163294],{"class":51,"line":70},[49,163288,4455],{"class":109},[49,163290,163291],{"class":66}," number ",[49,163293,27292],{"class":109},[49,163295,163296],{"class":66}," numbers:\n",[49,163298,163299,163301,163303],{"class":51,"line":86},[49,163300,161007],{"class":66},[49,163302,10729],{"class":109},[49,163304,163305],{"class":66}," number\n",[49,163307,163308,163310],{"class":51,"line":98},[49,163309,5344],{"class":109},[49,163311,163312],{"class":66}," total\n",[19,163314,163315],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163317,163319],{"id":163318},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[39,163321,163323],{"className":31626,"code":163322,"language":31628,"meta":44,"style":44},"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",[46,163324,163325,163335,163339,163343,163351,163362,163372,163382,163392,163402,163406,163410,163419,163441,163445,163449,163458,163464,163484,163496,163507,163511,163520,163531,163536,163540,163544,163553,163559,163578,163590,163600,163604,163615,163625,163629,163637,163648,163652,163656,163660,163668,163673,163687,163691,163703,163708,163720,163725,163737,163742,163754,163764,163768,163774],{"__ignoreMap":44},[49,163326,163327,163330,163332],{"class":51,"line":52},[49,163328,163329],{"class":66},"balance ",[49,163331,1448],{"class":109},[49,163333,163334],{"class":73}," 1000\n",[49,163336,163337],{"class":51,"line":59},[49,163338,3654],{"emptyLinePlaceholder":1330},[49,163340,163341],{"class":51,"line":70},[49,163342,3654],{"emptyLinePlaceholder":1330},[49,163344,163345,163347,163349],{"class":51,"line":86},[49,163346,33195],{"class":109},[49,163348,153058],{"class":62},[49,163350,33201],{"class":66},[49,163352,163353,163355,163357,163360],{"class":51,"line":98},[49,163354,32547],{"class":73},[49,163356,1403],{"class":66},[49,163358,163359],{"class":1505},"\"====== ATM ======\"",[49,163361,1409],{"class":66},[49,163363,163364,163366,163368,163370],{"class":51,"line":121},[49,163365,32547],{"class":73},[49,163367,1403],{"class":66},[49,163369,161673],{"class":1505},[49,163371,1409],{"class":66},[49,163373,163374,163376,163378,163380],{"class":51,"line":134},[49,163375,32547],{"class":73},[49,163377,1403],{"class":66},[49,163379,161684],{"class":1505},[49,163381,1409],{"class":66},[49,163383,163384,163386,163388,163390],{"class":51,"line":1085},[49,163385,32547],{"class":73},[49,163387,1403],{"class":66},[49,163389,161695],{"class":1505},[49,163391,1409],{"class":66},[49,163393,163394,163396,163398,163400],{"class":51,"line":2574},[49,163395,32547],{"class":73},[49,163397,1403],{"class":66},[49,163399,161706],{"class":1505},[49,163401,1409],{"class":66},[49,163403,163404],{"class":51,"line":2586},[49,163405,3654],{"emptyLinePlaceholder":1330},[49,163407,163408],{"class":51,"line":2867},[49,163409,3654],{"emptyLinePlaceholder":1330},[49,163411,163412,163414,163417],{"class":51,"line":2872},[49,163413,33195],{"class":109},[49,163415,163416],{"class":62}," show_balance",[49,163418,33201],{"class":66},[49,163420,163421,163423,163425,163427,163430,163432,163435,163437,163439],{"class":51,"line":2878},[49,163422,32547],{"class":73},[49,163424,1403],{"class":66},[49,163426,1454],{"class":109},[49,163428,163429],{"class":1505},"\"当前余额:",[49,163431,2286],{"class":73},[49,163433,163434],{"class":66},"balance",[49,163436,620],{"class":73},[49,163438,158037],{"class":1505},[49,163440,1409],{"class":66},[49,163442,163443],{"class":51,"line":2883},[49,163444,3654],{"emptyLinePlaceholder":1330},[49,163446,163447],{"class":51,"line":2897},[49,163448,3654],{"emptyLinePlaceholder":1330},[49,163450,163451,163453,163456],{"class":51,"line":2902},[49,163452,33195],{"class":109},[49,163454,163455],{"class":62}," save_money",[49,163457,33201],{"class":66},[49,163459,163460,163462],{"class":51,"line":2908},[49,163461,162886],{"class":109},[49,163463,151124],{"class":66},[49,163465,163466,163469,163471,163473,163475,163477,163479,163482],{"class":51,"line":2929},[49,163467,163468],{"class":66},"    money ",[49,163470,1448],{"class":109},[49,163472,111021],{"class":73},[49,163474,1403],{"class":66},[49,163476,448],{"class":73},[49,163478,1403],{"class":66},[49,163480,163481],{"class":1505},"\"请输入存款金额:\"",[49,163483,31745],{"class":66},[49,163485,163486,163488,163490,163492,163494],{"class":51,"line":2934},[49,163487,4355],{"class":109},[49,163489,151167],{"class":66},[49,163491,2843],{"class":109},[49,163493,5347],{"class":73},[49,163495,4993],{"class":66},[49,163497,163498,163500,163502,163505],{"class":51,"line":2948},[49,163499,33699],{"class":73},[49,163501,1403],{"class":66},[49,163503,163504],{"class":1505},"\"金额必须大于0\"",[49,163506,1409],{"class":66},[49,163508,163509],{"class":51,"line":2953},[49,163510,153386],{"class":109},[49,163512,163513,163516,163518],{"class":51,"line":2982},[49,163514,163515],{"class":66},"    balance ",[49,163517,10729],{"class":109},[49,163519,151200],{"class":66},[49,163521,163522,163524,163526,163529],{"class":51,"line":2987},[49,163523,32547],{"class":73},[49,163525,1403],{"class":66},[49,163527,163528],{"class":1505},"\"存款成功\"",[49,163530,1409],{"class":66},[49,163532,163533],{"class":51,"line":3004},[49,163534,163535],{"class":66},"    show_balance()\n",[49,163537,163538],{"class":51,"line":3009},[49,163539,3654],{"emptyLinePlaceholder":1330},[49,163541,163542],{"class":51,"line":3014},[49,163543,3654],{"emptyLinePlaceholder":1330},[49,163545,163546,163548,163551],{"class":51,"line":3019},[49,163547,33195],{"class":109},[49,163549,163550],{"class":62}," withdraw_money",[49,163552,33201],{"class":66},[49,163554,163555,163557],{"class":51,"line":3033},[49,163556,162886],{"class":109},[49,163558,151124],{"class":66},[49,163560,163561,163563,163565,163567,163569,163571,163573,163576],{"class":51,"line":3038},[49,163562,163468],{"class":66},[49,163564,1448],{"class":109},[49,163566,111021],{"class":73},[49,163568,1403],{"class":66},[49,163570,448],{"class":73},[49,163572,1403],{"class":66},[49,163574,163575],{"class":1505},"\"请输入取款金额:\"",[49,163577,31745],{"class":66},[49,163579,163580,163582,163584,163586,163588],{"class":51,"line":3831},[49,163581,4355],{"class":109},[49,163583,151167],{"class":66},[49,163585,2843],{"class":109},[49,163587,5347],{"class":73},[49,163589,4993],{"class":66},[49,163591,163592,163594,163596,163598],{"class":51,"line":3845},[49,163593,33699],{"class":73},[49,163595,1403],{"class":66},[49,163597,163504],{"class":1505},[49,163599,1409],{"class":66},[49,163601,163602],{"class":51,"line":3853},[49,163603,153386],{"class":109},[49,163605,163606,163608,163610,163612],{"class":51,"line":3858},[49,163607,4355],{"class":109},[49,163609,151167],{"class":66},[49,163611,2349],{"class":109},[49,163613,163614],{"class":66}," balance:\n",[49,163616,163617,163619,163621,163623],{"class":51,"line":3864},[49,163618,33699],{"class":73},[49,163620,1403],{"class":66},[49,163622,151262],{"class":1505},[49,163624,1409],{"class":66},[49,163626,163627],{"class":51,"line":3870},[49,163628,153386],{"class":109},[49,163630,163631,163633,163635],{"class":51,"line":3875},[49,163632,163515],{"class":66},[49,163634,151277],{"class":109},[49,163636,151200],{"class":66},[49,163638,163639,163641,163643,163646],{"class":51,"line":9200},[49,163640,32547],{"class":73},[49,163642,1403],{"class":66},[49,163644,163645],{"class":1505},"\"取款成功\"",[49,163647,1409],{"class":66},[49,163649,163650],{"class":51,"line":9224},[49,163651,163535],{"class":66},[49,163653,163654],{"class":51,"line":9229},[49,163655,3654],{"emptyLinePlaceholder":1330},[49,163657,163658],{"class":51,"line":9235},[49,163659,3654],{"emptyLinePlaceholder":1330},[49,163661,163662,163664,163666],{"class":51,"line":9262},[49,163663,109887],{"class":109},[49,163665,96517],{"class":73},[49,163667,4993],{"class":66},[49,163669,163670],{"class":51,"line":9267},[49,163671,163672],{"class":66},"    show_menu()\n",[49,163674,163675,163677,163679,163681,163683,163685],{"class":51,"line":9273},[49,163676,161717],{"class":66},[49,163678,1448],{"class":109},[49,163680,61844],{"class":73},[49,163682,1403],{"class":66},[49,163684,154098],{"class":1505},[49,163686,1409],{"class":66},[49,163688,163689],{"class":51,"line":9285},[49,163690,3654],{"emptyLinePlaceholder":1330},[49,163692,163693,163695,163697,163699,163701],{"class":51,"line":9297},[49,163694,4355],{"class":109},[49,163696,154111],{"class":66},[49,163698,4203],{"class":109},[49,163700,154116],{"class":1505},[49,163702,4993],{"class":66},[49,163704,163705],{"class":51,"line":9309},[49,163706,163707],{"class":66},"        show_balance()\n",[49,163709,163710,163712,163714,163716,163718],{"class":51,"line":10968},[49,163711,40541],{"class":109},[49,163713,154111],{"class":66},[49,163715,4203],{"class":109},[49,163717,154135],{"class":1505},[49,163719,4993],{"class":66},[49,163721,163722],{"class":51,"line":10993},[49,163723,163724],{"class":66},"        save_money()\n",[49,163726,163727,163729,163731,163733,163735],{"class":51,"line":11016},[49,163728,40541],{"class":109},[49,163730,154111],{"class":66},[49,163732,4203],{"class":109},[49,163734,154153],{"class":1505},[49,163736,4993],{"class":66},[49,163738,163739],{"class":51,"line":11040},[49,163740,163741],{"class":66},"        withdraw_money()\n",[49,163743,163744,163746,163748,163750,163752],{"class":51,"line":11045},[49,163745,40541],{"class":109},[49,163747,154111],{"class":66},[49,163749,4203],{"class":109},[49,163751,154207],{"class":1505},[49,163753,4993],{"class":66},[49,163755,163756,163758,163760,163762],{"class":51,"line":11050},[49,163757,33699],{"class":73},[49,163759,1403],{"class":66},[49,163761,154218],{"class":1505},[49,163763,1409],{"class":66},[49,163765,163766],{"class":51,"line":11055},[49,163767,32875],{"class":109},[49,163769,163770,163772],{"class":51,"line":11064},[49,163771,159047],{"class":109},[49,163773,4993],{"class":66},[49,163775,163776,163778,163780,163782],{"class":51,"line":11069},[49,163777,33699],{"class":73},[49,163779,1403],{"class":66},[49,163781,154239],{"class":1505},[49,163783,1409],{"class":66},[19,163785,163786],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163788,163790],{"id":163789},"_514-易错点","5.14 易错点",[591,163792,163793,163796,163799,163804,163809,163812],{},[26,163794,163795],{},"函数定义后必须调用才会执行。",[26,163797,163798],{},"函数名后面有括号才是调用。",[26,163800,163801,163803],{},[46,163802,18296],{}," 后面的代码不会执行。",[26,163805,163806,163807,29633],{},"没有返回值的函数默认返回 ",[46,163808,96911],{},[26,163810,163811],{},"局部变量不能在函数外部访问。",[26,163813,163814,163815,163817],{},"不要滥用 ",[46,163816,162851],{},"，更好的方式是让函数返回新值。",[19,163819,163820,163821,163823],{},"例如不用 ",[46,163822,162851],{}," 改写存款：",[39,163825,163827],{"className":31626,"code":163826,"language":31628,"meta":44,"style":44},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[46,163828,163829,163838,163849,163853,163857,163865,163878],{"__ignoreMap":44},[49,163830,163831,163833,163835],{"class":51,"line":52},[49,163832,33195],{"class":109},[49,163834,163455],{"class":62},[49,163836,163837],{"class":66},"(balance, money):\n",[49,163839,163840,163842,163845,163847],{"class":51,"line":59},[49,163841,5344],{"class":109},[49,163843,163844],{"class":66}," balance ",[49,163846,1872],{"class":109},[49,163848,151200],{"class":66},[49,163850,163851],{"class":51,"line":70},[49,163852,3654],{"emptyLinePlaceholder":1330},[49,163854,163855],{"class":51,"line":86},[49,163856,3654],{"emptyLinePlaceholder":1330},[49,163858,163859,163861,163863],{"class":51,"line":98},[49,163860,163329],{"class":66},[49,163862,1448],{"class":109},[49,163864,163334],{"class":73},[49,163866,163867,163869,163871,163874,163876],{"class":51,"line":121},[49,163868,163329],{"class":66},[49,163870,1448],{"class":109},[49,163872,163873],{"class":66}," save_money(balance, ",[49,163875,2977],{"class":73},[49,163877,1409],{"class":66},[49,163879,163880,163882],{"class":51,"line":134},[49,163881,31663],{"class":73},[49,163883,163884],{"class":66},"(balance)\n",[14,163886,163888],{"id":163887},"_515-本章练习","5.15 本章练习",[591,163890,163891,163898,163904,163910,163916],{},[26,163892,163893,163894,163897],{},"定义函数 ",[46,163895,163896],{},"print_student(name, age)","，输出学生信息。",[26,163899,163893,163900,163903],{},[46,163901,163902],{},"get_max(a, b, c)","，返回三个数中的最大值。",[26,163905,163893,163906,163909],{},[46,163907,163908],{},"is_even(num)","，判断一个数是否为偶数。",[26,163911,163893,163912,163915],{},[46,163913,163914],{},"calculate_bmi(weight, height)","，返回 BMI。",[26,163917,163918],{},"把第 4 章的菜单程序拆分成多个函数。",[1305,163920,163921],{},"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":44,"searchDepth":59,"depth":59,"links":163923},[163924,163925,163926,163927,163928,163929,163930,163931,163932,163936,163937,163938,163939,163940,163941],{"id":161944,"depth":59,"text":161945},{"id":161985,"depth":59,"text":161986},{"id":162075,"depth":59,"text":162076},{"id":162156,"depth":59,"text":162157},{"id":162289,"depth":59,"text":162290},{"id":162411,"depth":59,"text":162412},{"id":162533,"depth":59,"text":162534},{"id":162610,"depth":59,"text":162611},{"id":162732,"depth":59,"text":162733,"children":163933},[163934,163935],{"id":162736,"depth":70,"text":162737},{"id":162794,"depth":70,"text":162795},{"id":162923,"depth":59,"text":162924},{"id":163049,"depth":59,"text":163050},{"id":163162,"depth":59,"text":163163},{"id":163318,"depth":59,"text":163319},{"id":163789,"depth":59,"text":163790},{"id":163887,"depth":59,"text":163888},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161936,"description":1327},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163948,"title":163949,"body":163950,"description":1327,"extension":1328,"meta":166994,"navigation":1330,"path":166995,"seo":166996,"stem":166997,"__hash__":166998},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163951,"toc":166975},[163952,163955,163959,163962,163965,164069,164072,164076,164079,164159,164162,164166,164169,164229,164232,164268,164271,164286,164290,164363,164366,164421,164424,164494,164497,164581,164591,164649,164653,164698,164701,164727,164730,164836,164840,164843,164885,164888,164952,164955,164959,164962,165023,165026,165056,165059,165097,165101,165104,165113,165116,165240,165243,165284,165288,165291,165302,165342,165345,165360,165365,165368,165435,165438,165528,165532,165535,165583,165586,165613,165615,165645,165648,165668,165671,165702,165705,165738,165742,165745,165769,165772,165796,165799,165823,165827,165830,165960,165963,166043,166046,166121,166125,166128,166178,166181,166223,166226,166250,166252,166276,166279,166334,166337,166403,166407,166410,166413,166451,166454,166507,166510,166556,166559,166592,166595,166599,166918,166922,166951,166955,166972],[10,163953,163949],{"id":163954},"_6-数据容器",[14,163956,163958],{"id":163957},"_61-什么是数据容器","6.1 什么是数据容器",[19,163960,163961],{},"数据容器用于一次保存多个数据。",[19,163963,163964],{},"常见容器：",[293,163966,163967,163984],{},[296,163968,163969],{},[299,163970,163971,163973,163976,163979,163982],{},[302,163972,27020],{},[302,163974,163975],{},"是否有序",[302,163977,163978],{},"是否可变",[302,163980,163981],{},"是否允许重复",[302,163983,28740],{},[310,163985,163986,164004,164020,164035,164052],{},[299,163987,163988,163991,163994,163997,164000],{},[315,163989,163990],{},"list列表",[315,163992,163993],{},"有序",[315,163995,163996],{},"可变",[315,163998,163999],{},"允许",[315,164001,164002],{},[46,164003,156282],{},[299,164005,164006,164009,164011,164014,164016],{},[315,164007,164008],{},"tuple元组",[315,164010,163993],{},[315,164012,164013],{},"不可变",[315,164015,163999],{},[315,164017,164018],{},[46,164019,156295],{},[299,164021,164022,164025,164027,164029,164031],{},[315,164023,164024],{},"str字符串",[315,164026,163993],{},[315,164028,164013],{},[315,164030,163999],{},[315,164032,164033],{},[46,164034,156905],{},[299,164036,164037,164040,164043,164045,164048],{},[315,164038,164039],{},"set集合",[315,164041,164042],{},"无序",[315,164044,163996],{},[315,164046,164047],{},"不允许",[315,164049,164050],{},[46,164051,156320],{},[299,164053,164054,164057,164059,164061,164064],{},[315,164055,164056],{},"dict字典",[315,164058,163993],{},[315,164060,163996],{},[315,164062,164063],{},"key不允许重复",[315,164065,164066],{},[46,164067,164068],{},"{\"name\": \"小明\"}",[19,164070,164071],{},"Python 3.7 之后，字典保持插入顺序。",[14,164073,164075],{"id":164074},"_62-列表list","6.2 列表list",[19,164077,164078],{},"列表用于保存一组有顺序的数据。",[39,164080,164082],{"className":31626,"code":164081,"language":31628,"meta":44,"style":44},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[46,164083,164084,164104,164129,164150],{"__ignoreMap":44},[49,164085,164086,164088,164090,164092,164094,164096,164098,164100,164102],{"class":51,"line":52},[49,164087,161405],{"class":66},[49,164089,1448],{"class":109},[49,164091,53468],{"class":66},[49,164093,150913],{"class":1505},[49,164095,13687],{"class":66},[49,164097,151961],{"class":1505},[49,164099,13687],{"class":66},[49,164101,160756],{"class":1505},[49,164103,34494],{"class":66},[49,164105,164106,164109,164111,164113,164115,164117,164119,164121,164123,164125,164127],{"class":51,"line":59},[49,164107,164108],{"class":66},"numbers ",[49,164110,1448],{"class":109},[49,164112,53468],{"class":66},[49,164114,159],{"class":73},[49,164116,13687],{"class":66},[49,164118,1478],{"class":73},[49,164120,13687],{"class":66},[49,164122,1472],{"class":73},[49,164124,13687],{"class":66},[49,164126,1685],{"class":73},[49,164128,34494],{"class":66},[49,164130,164131,164134,164136,164138,164140,164142,164144,164146,164148],{"class":51,"line":70},[49,164132,164133],{"class":66},"mixed ",[49,164135,1448],{"class":109},[49,164137,53468],{"class":66},[49,164139,150913],{"class":1505},[49,164141,13687],{"class":66},[49,164143,2041],{"class":73},[49,164145,13687],{"class":66},[49,164147,32724],{"class":73},[49,164149,34494],{"class":66},[49,164151,164152,164155,164157],{"class":51,"line":86},[49,164153,164154],{"class":66},"empty ",[49,164156,1448],{"class":109},[49,164158,53080],{"class":66},[19,164160,164161],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164163,164165],{"id":164164},"_63-列表索引","6.3 列表索引",[19,164167,164168],{},"正向索引从 0 开始：",[39,164170,164172],{"className":31626,"code":164171,"language":31628,"meta":44,"style":44},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[46,164173,164174,164194,164198,164209,164219],{"__ignoreMap":44},[49,164175,164176,164178,164180,164182,164184,164186,164188,164190,164192],{"class":51,"line":52},[49,164177,161405],{"class":66},[49,164179,1448],{"class":109},[49,164181,53468],{"class":66},[49,164183,150913],{"class":1505},[49,164185,13687],{"class":66},[49,164187,151961],{"class":1505},[49,164189,13687],{"class":66},[49,164191,160756],{"class":1505},[49,164193,34494],{"class":66},[49,164195,164196],{"class":51,"line":59},[49,164197,3654],{"emptyLinePlaceholder":1330},[49,164199,164200,164202,164205,164207],{"class":51,"line":70},[49,164201,31663],{"class":73},[49,164203,164204],{"class":66},"(names[",[49,164206,80],{"class":73},[49,164208,5911],{"class":66},[49,164210,164211,164213,164215,164217],{"class":51,"line":86},[49,164212,31663],{"class":73},[49,164214,164204],{"class":66},[49,164216,159],{"class":73},[49,164218,5911],{"class":66},[49,164220,164221,164223,164225,164227],{"class":51,"line":98},[49,164222,31663],{"class":73},[49,164224,164204],{"class":66},[49,164226,1478],{"class":73},[49,164228,5911],{"class":66},[19,164230,164231],{},"反向索引从 -1 开始：",[39,164233,164235],{"className":31626,"code":164234,"language":31628,"meta":44,"style":44},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[46,164236,164237,164253],{"__ignoreMap":44},[49,164238,164239,164241,164243,164245,164247,164250],{"class":51,"line":52},[49,164240,31663],{"class":73},[49,164242,164204],{"class":66},[49,164244,1923],{"class":109},[49,164246,159],{"class":73},[49,164248,164249],{"class":66},"])  ",[49,164251,164252],{"class":55},"# 小刚\n",[49,164254,164255,164257,164259,164261,164263,164265],{"class":51,"line":59},[49,164256,31663],{"class":73},[49,164258,164204],{"class":66},[49,164260,1923],{"class":109},[49,164262,1478],{"class":73},[49,164264,164249],{"class":66},[49,164266,164267],{"class":55},"# 小红\n",[19,164269,164270],{},"索引越界会报错：",[39,164272,164274],{"className":31626,"code":164273,"language":31628,"meta":44,"style":44},"print(names[3])\n",[46,164275,164276],{"__ignoreMap":44},[49,164277,164278,164280,164282,164284],{"class":51,"line":52},[49,164279,31663],{"class":73},[49,164281,164204],{"class":66},[49,164283,1472],{"class":73},[49,164285,5911],{"class":66},[14,164287,164289],{"id":164288},"_64-列表常用方法","6.4 列表常用方法",[39,164291,164293],{"className":31626,"code":164292,"language":31628,"meta":44,"style":44},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[46,164294,164295,164311,164315,164324,164338,164352,164356],{"__ignoreMap":44},[49,164296,164297,164299,164301,164303,164305,164307,164309],{"class":51,"line":52},[49,164298,161405],{"class":66},[49,164300,1448],{"class":109},[49,164302,53468],{"class":66},[49,164304,150913],{"class":1505},[49,164306,13687],{"class":66},[49,164308,151961],{"class":1505},[49,164310,34494],{"class":66},[49,164312,164313],{"class":51,"line":59},[49,164314,3654],{"emptyLinePlaceholder":1330},[49,164316,164317,164320,164322],{"class":51,"line":70},[49,164318,164319],{"class":66},"names.append(",[49,164321,160756],{"class":1505},[49,164323,1409],{"class":66},[49,164325,164326,164329,164331,164333,164336],{"class":51,"line":86},[49,164327,164328],{"class":66},"names.insert(",[49,164330,159],{"class":73},[49,164332,13687],{"class":66},[49,164334,164335],{"class":1505},"\"小李\"",[49,164337,1409],{"class":66},[49,164339,164340,164343,164345,164347,164350],{"class":51,"line":98},[49,164341,164342],{"class":66},"names.extend([",[49,164344,9935],{"class":1505},[49,164346,13687],{"class":66},[49,164348,164349],{"class":1505},"\"小赵\"",[49,164351,5911],{"class":66},[49,164353,164354],{"class":51,"line":121},[49,164355,3654],{"emptyLinePlaceholder":1330},[49,164357,164358,164360],{"class":51,"line":134},[49,164359,31663],{"class":73},[49,164361,164362],{"class":66},"(names)\n",[19,164364,164365],{},"删除元素：",[39,164367,164369],{"className":31626,"code":164368,"language":31628,"meta":44,"style":44},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[46,164370,164371,164380,164390,164404,164416],{"__ignoreMap":44},[49,164372,164373,164376,164378],{"class":51,"line":52},[49,164374,164375],{"class":66},"names.remove(",[49,164377,151961],{"class":1505},[49,164379,1409],{"class":66},[49,164381,164382,164385,164387],{"class":51,"line":59},[49,164383,164384],{"class":66},"last ",[49,164386,1448],{"class":109},[49,164388,164389],{"class":66}," names.pop()\n",[49,164391,164392,164395,164397,164400,164402],{"class":51,"line":70},[49,164393,164394],{"class":66},"first ",[49,164396,1448],{"class":109},[49,164398,164399],{"class":66}," names.pop(",[49,164401,80],{"class":73},[49,164403,1409],{"class":66},[49,164405,164406,164409,164412,164414],{"class":51,"line":86},[49,164407,164408],{"class":109},"del",[49,164410,164411],{"class":66}," names[",[49,164413,80],{"class":73},[49,164415,34494],{"class":66},[49,164417,164418],{"class":51,"line":98},[49,164419,164420],{"class":66},"names.clear()\n",[19,164422,164423],{},"查询和统计：",[39,164425,164427],{"className":31626,"code":164426,"language":31628,"meta":44,"style":44},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[46,164428,164429,164457,164461,164472,164483],{"__ignoreMap":44},[49,164430,164431,164433,164435,164437,164439,164441,164443,164445,164447,164449,164451,164453,164455],{"class":51,"line":52},[49,164432,164108],{"class":66},[49,164434,1448],{"class":109},[49,164436,53468],{"class":66},[49,164438,159],{"class":73},[49,164440,13687],{"class":66},[49,164442,1478],{"class":73},[49,164444,13687],{"class":66},[49,164446,1472],{"class":73},[49,164448,13687],{"class":66},[49,164450,1478],{"class":73},[49,164452,13687],{"class":66},[49,164454,1685],{"class":73},[49,164456,34494],{"class":66},[49,164458,164459],{"class":51,"line":59},[49,164460,3654],{"emptyLinePlaceholder":1330},[49,164462,164463,164465,164468,164470],{"class":51,"line":70},[49,164464,31663],{"class":73},[49,164466,164467],{"class":66},"(numbers.index(",[49,164469,1472],{"class":73},[49,164471,31745],{"class":66},[49,164473,164474,164476,164479,164481],{"class":51,"line":86},[49,164475,31663],{"class":73},[49,164477,164478],{"class":66},"(numbers.count(",[49,164480,1478],{"class":73},[49,164482,31745],{"class":66},[49,164484,164485,164487,164489,164491],{"class":51,"line":98},[49,164486,31663],{"class":73},[49,164488,1403],{"class":66},[49,164490,8610],{"class":73},[49,164492,164493],{"class":66},"(numbers))\n",[19,164495,164496],{},"排序：",[39,164498,164500],{"className":31626,"code":164499,"language":31628,"meta":44,"style":44},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[46,164501,164502,164526,164530,164535,164542,164546,164560,164566,164570,164575],{"__ignoreMap":44},[49,164503,164504,164506,164508,164510,164512,164514,164516,164518,164520,164522,164524],{"class":51,"line":52},[49,164505,164108],{"class":66},[49,164507,1448],{"class":109},[49,164509,53468],{"class":66},[49,164511,1472],{"class":73},[49,164513,13687],{"class":66},[49,164515,159],{"class":73},[49,164517,13687],{"class":66},[49,164519,1711],{"class":73},[49,164521,13687],{"class":66},[49,164523,1478],{"class":73},[49,164525,34494],{"class":66},[49,164527,164528],{"class":51,"line":59},[49,164529,3654],{"emptyLinePlaceholder":1330},[49,164531,164532],{"class":51,"line":70},[49,164533,164534],{"class":66},"numbers.sort()\n",[49,164536,164537,164539],{"class":51,"line":86},[49,164538,31663],{"class":73},[49,164540,164541],{"class":66},"(numbers)\n",[49,164543,164544],{"class":51,"line":98},[49,164545,3654],{"emptyLinePlaceholder":1330},[49,164547,164548,164551,164554,164556,164558],{"class":51,"line":121},[49,164549,164550],{"class":66},"numbers.sort(",[49,164552,164553],{"class":6468},"reverse",[49,164555,1448],{"class":109},[49,164557,32724],{"class":73},[49,164559,1409],{"class":66},[49,164561,164562,164564],{"class":51,"line":134},[49,164563,31663],{"class":73},[49,164565,164541],{"class":66},[49,164567,164568],{"class":51,"line":1085},[49,164569,3654],{"emptyLinePlaceholder":1330},[49,164571,164572],{"class":51,"line":2574},[49,164573,164574],{"class":66},"numbers.reverse()\n",[49,164576,164577,164579],{"class":51,"line":2586},[49,164578,31663],{"class":73},[49,164580,164541],{"class":66},[19,164582,164583,164586,164587,164590],{},[46,164584,164585],{},"sort()"," 会修改原列表，",[46,164588,164589],{},"sorted()"," 返回新列表。",[39,164592,164594],{"className":31626,"code":164593,"language":31628,"meta":44,"style":44},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[46,164595,164596,164620,164632,164636,164642],{"__ignoreMap":44},[49,164597,164598,164600,164602,164604,164606,164608,164610,164612,164614,164616,164618],{"class":51,"line":52},[49,164599,164108],{"class":66},[49,164601,1448],{"class":109},[49,164603,53468],{"class":66},[49,164605,1472],{"class":73},[49,164607,13687],{"class":66},[49,164609,159],{"class":73},[49,164611,13687],{"class":66},[49,164613,1711],{"class":73},[49,164615,13687],{"class":66},[49,164617,1478],{"class":73},[49,164619,34494],{"class":66},[49,164621,164622,164625,164627,164630],{"class":51,"line":59},[49,164623,164624],{"class":66},"new_numbers ",[49,164626,1448],{"class":109},[49,164628,164629],{"class":73}," sorted",[49,164631,164541],{"class":66},[49,164633,164634],{"class":51,"line":70},[49,164635,3654],{"emptyLinePlaceholder":1330},[49,164637,164638,164640],{"class":51,"line":86},[49,164639,31663],{"class":73},[49,164641,164541],{"class":66},[49,164643,164644,164646],{"class":51,"line":98},[49,164645,31663],{"class":73},[49,164647,164648],{"class":66},"(new_numbers)\n",[14,164650,164652],{"id":164651},"_65-列表遍历","6.5 列表遍历",[39,164654,164656],{"className":31626,"code":164655,"language":31628,"meta":44,"style":44},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[46,164657,164658,164678,164682,164692],{"__ignoreMap":44},[49,164659,164660,164662,164664,164666,164668,164670,164672,164674,164676],{"class":51,"line":52},[49,164661,161405],{"class":66},[49,164663,1448],{"class":109},[49,164665,53468],{"class":66},[49,164667,150913],{"class":1505},[49,164669,13687],{"class":66},[49,164671,151961],{"class":1505},[49,164673,13687],{"class":66},[49,164675,160756],{"class":1505},[49,164677,34494],{"class":66},[49,164679,164680],{"class":51,"line":59},[49,164681,3654],{"emptyLinePlaceholder":1330},[49,164683,164684,164686,164688,164690],{"class":51,"line":70},[49,164685,4279],{"class":109},[49,164687,161441],{"class":66},[49,164689,27292],{"class":109},[49,164691,161446],{"class":66},[49,164693,164694,164696],{"class":51,"line":86},[49,164695,32547],{"class":73},[49,164697,151685],{"class":66},[19,164699,164700],{},"需要索引时：",[39,164702,164704],{"className":31626,"code":164703,"language":31628,"meta":44,"style":44},"for index, name in enumerate(names):\n    print(index, name)\n",[46,164705,164706,164720],{"__ignoreMap":44},[49,164707,164708,164710,164713,164715,164717],{"class":51,"line":52},[49,164709,4279],{"class":109},[49,164711,164712],{"class":66}," index, name ",[49,164714,27292],{"class":109},[49,164716,32854],{"class":73},[49,164718,164719],{"class":66},"(names):\n",[49,164721,164722,164724],{"class":51,"line":59},[49,164723,32547],{"class":73},[49,164725,164726],{"class":66},"(index, name)\n",[19,164728,164729],{},"统计总分：",[39,164731,164733],{"className":31626,"code":164732,"language":31628,"meta":44,"style":44},"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",[46,164734,164735,164760,164768,164772,164783,164791,164795,164812],{"__ignoreMap":44},[49,164736,164737,164740,164742,164744,164746,164748,164750,164752,164754,164756,164758],{"class":51,"line":52},[49,164738,164739],{"class":66},"scores ",[49,164741,1448],{"class":109},[49,164743,53468],{"class":66},[49,164745,2252],{"class":73},[49,164747,13687],{"class":66},[49,164749,2126],{"class":73},[49,164751,13687],{"class":66},[49,164753,1646],{"class":73},[49,164755,13687],{"class":66},[49,164757,1952],{"class":73},[49,164759,34494],{"class":66},[49,164761,164762,164764,164766],{"class":51,"line":59},[49,164763,158285],{"class":66},[49,164765,1448],{"class":109},[49,164767,48581],{"class":73},[49,164769,164770],{"class":51,"line":70},[49,164771,3654],{"emptyLinePlaceholder":1330},[49,164773,164774,164776,164778,164780],{"class":51,"line":86},[49,164775,4279],{"class":109},[49,164777,158808],{"class":66},[49,164779,27292],{"class":109},[49,164781,164782],{"class":66}," scores:\n",[49,164784,164785,164787,164789],{"class":51,"line":98},[49,164786,160332],{"class":66},[49,164788,10729],{"class":109},[49,164790,2834],{"class":66},[49,164792,164793],{"class":51,"line":121},[49,164794,3654],{"emptyLinePlaceholder":1330},[49,164796,164797,164800,164802,164805,164807,164809],{"class":51,"line":134},[49,164798,164799],{"class":66},"avg ",[49,164801,1448],{"class":109},[49,164803,164804],{"class":66}," total ",[49,164806,1975],{"class":109},[49,164808,8583],{"class":73},[49,164810,164811],{"class":66},"(scores)\n",[49,164813,164814,164816,164818,164820,164823,164825,164828,164830,164832,164834],{"class":51,"line":1085},[49,164815,31663],{"class":73},[49,164817,1403],{"class":66},[49,164819,1454],{"class":109},[49,164821,164822],{"class":1505},"\"平均分:",[49,164824,2286],{"class":73},[49,164826,164827],{"class":66},"avg",[49,164829,158184],{"class":109},[49,164831,620],{"class":73},[49,164833,1643],{"class":1505},[49,164835,1409],{"class":66},[14,164837,164839],{"id":164838},"_66-元组tuple","6.6 元组tuple",[19,164841,164842],{},"元组和列表类似，但不可修改。",[39,164844,164846],{"className":31626,"code":164845,"language":31628,"meta":44,"style":44},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[46,164847,164848,164865],{"__ignoreMap":44},[49,164849,164850,164853,164855,164857,164859,164861,164863],{"class":51,"line":52},[49,164851,164852],{"class":66},"point ",[49,164854,1448],{"class":109},[49,164856,2913],{"class":66},[49,164858,106],{"class":73},[49,164860,13687],{"class":66},[49,164862,875],{"class":73},[49,164864,1409],{"class":66},[49,164866,164867,164869,164871,164873,164875,164877,164879,164881,164883],{"class":51,"line":59},[49,164868,117538],{"class":66},[49,164870,1448],{"class":109},[49,164872,2913],{"class":66},[49,164874,150913],{"class":1505},[49,164876,13687],{"class":66},[49,164878,2041],{"class":73},[49,164880,13687],{"class":66},[49,164882,70504],{"class":1505},[49,164884,1409],{"class":66},[19,164886,164887],{},"单元素元组必须加逗号：",[39,164889,164891],{"className":31626,"code":164890,"language":31628,"meta":44,"style":44},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[46,164892,164893,164907,164920,164924,164938],{"__ignoreMap":44},[49,164894,164895,164898,164900,164902,164904],{"class":51,"line":52},[49,164896,164897],{"class":66},"t1 ",[49,164899,1448],{"class":109},[49,164901,2913],{"class":66},[49,164903,106],{"class":73},[49,164905,164906],{"class":66},",)\n",[49,164908,164909,164912,164914,164916,164918],{"class":51,"line":59},[49,164910,164911],{"class":66},"t2 ",[49,164913,1448],{"class":109},[49,164915,2913],{"class":66},[49,164917,106],{"class":73},[49,164919,1409],{"class":66},[49,164921,164922],{"class":51,"line":70},[49,164923,3654],{"emptyLinePlaceholder":1330},[49,164925,164926,164928,164930,164932,164935],{"class":51,"line":86},[49,164927,31663],{"class":73},[49,164929,1403],{"class":66},[49,164931,104331],{"class":73},[49,164933,164934],{"class":66},"(t1))  ",[49,164936,164937],{"class":55},"# tuple\n",[49,164939,164940,164942,164944,164946,164949],{"class":51,"line":98},[49,164941,31663],{"class":73},[49,164943,1403],{"class":66},[49,164945,104331],{"class":73},[49,164947,164948],{"class":66},"(t2))  ",[49,164950,164951],{"class":55},"# int\n",[19,164953,164954],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164956,164958],{"id":164957},"_67-字符串str","6.7 字符串str",[19,164960,164961],{},"字符串也是序列，可以索引、切片和遍历。",[39,164963,164965],{"className":31626,"code":164964,"language":31628,"meta":44,"style":44},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[46,164966,164967,164975,164979,164990,165002,165006,165017],{"__ignoreMap":44},[49,164968,164969,164971,164973],{"class":51,"line":52},[49,164970,157469],{"class":66},[49,164972,1448],{"class":109},[49,164974,160706],{"class":1505},[49,164976,164977],{"class":51,"line":59},[49,164978,3654],{"emptyLinePlaceholder":1330},[49,164980,164981,164983,164986,164988],{"class":51,"line":70},[49,164982,31663],{"class":73},[49,164984,164985],{"class":66},"(text[",[49,164987,80],{"class":73},[49,164989,5911],{"class":66},[49,164991,164992,164994,164996,164998,165000],{"class":51,"line":86},[49,164993,31663],{"class":73},[49,164995,164985],{"class":66},[49,164997,1923],{"class":109},[49,164999,159],{"class":73},[49,165001,5911],{"class":66},[49,165003,165004],{"class":51,"line":98},[49,165005,3654],{"emptyLinePlaceholder":1330},[49,165007,165008,165010,165012,165014],{"class":51,"line":121},[49,165009,4279],{"class":109},[49,165011,160717],{"class":66},[49,165013,27292],{"class":109},[49,165015,165016],{"class":66}," text:\n",[49,165018,165019,165021],{"class":51,"line":134},[49,165020,32547],{"class":73},[49,165022,160728],{"class":66},[19,165024,165025],{},"字符串不可变：",[39,165027,165029],{"className":31626,"code":165028,"language":31628,"meta":44,"style":44},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[46,165030,165031,165039],{"__ignoreMap":44},[49,165032,165033,165035,165037],{"class":51,"line":52},[49,165034,157469],{"class":66},[49,165036,1448],{"class":109},[49,165038,160706],{"class":1505},[49,165040,165041,165044,165046,165048,165050,165053],{"class":51,"line":59},[49,165042,165043],{"class":66},"text[",[49,165045,80],{"class":73},[49,165047,5697],{"class":66},[49,165049,1448],{"class":109},[49,165051,165052],{"class":1505}," \"P\"",[49,165054,165055],{"class":55},"  # 报错\n",[19,165057,165058],{},"如果要得到新字符串：",[39,165060,165062],{"className":31626,"code":165061,"language":31628,"meta":44,"style":44},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[46,165063,165064,165072,165090],{"__ignoreMap":44},[49,165065,165066,165068,165070],{"class":51,"line":52},[49,165067,157469],{"class":66},[49,165069,1448],{"class":109},[49,165071,160706],{"class":1505},[49,165073,165074,165076,165078,165080,165082,165085,165087],{"class":51,"line":59},[49,165075,157469],{"class":66},[49,165077,1448],{"class":109},[49,165079,165052],{"class":1505},[49,165081,46814],{"class":109},[49,165083,165084],{"class":66}," text[",[49,165086,159],{"class":73},[49,165088,165089],{"class":66},":]\n",[49,165091,165092,165094],{"class":51,"line":70},[49,165093,31663],{"class":73},[49,165095,165096],{"class":66},"(text)\n",[14,165098,165100],{"id":165099},"_68-切片","6.8 切片",[19,165102,165103],{},"切片用于从序列中取一部分。",[39,165105,165107],{"className":31626,"code":165106,"language":31628,"meta":44,"style":44},"序列[开始:结束:步长]\n",[46,165108,165109],{"__ignoreMap":44},[49,165110,165111],{"class":51,"line":52},[49,165112,165106],{"class":66},[19,165114,165115],{},"结束位置不包含。",[39,165117,165119],{"className":31626,"code":165118,"language":31628,"meta":44,"style":44},"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",[46,165120,165121,165158,165162,165181,165196,165210,165224],{"__ignoreMap":44},[49,165122,165123,165126,165128,165130,165132,165134,165136,165138,165140,165142,165144,165146,165148,165150,165152,165154,165156],{"class":51,"line":52},[49,165124,165125],{"class":66},"nums ",[49,165127,1448],{"class":109},[49,165129,53468],{"class":66},[49,165131,80],{"class":73},[49,165133,13687],{"class":66},[49,165135,159],{"class":73},[49,165137,13687],{"class":66},[49,165139,1478],{"class":73},[49,165141,13687],{"class":66},[49,165143,1472],{"class":73},[49,165145,13687],{"class":66},[49,165147,1685],{"class":73},[49,165149,13687],{"class":66},[49,165151,1711],{"class":73},[49,165153,13687],{"class":66},[49,165155,1736],{"class":73},[49,165157,34494],{"class":66},[49,165159,165160],{"class":51,"line":59},[49,165161,3654],{"emptyLinePlaceholder":1330},[49,165163,165164,165166,165169,165171,165173,165175,165178],{"class":51,"line":70},[49,165165,31663],{"class":73},[49,165167,165168],{"class":66},"(nums[",[49,165170,159],{"class":73},[49,165172,2249],{"class":66},[49,165174,1685],{"class":73},[49,165176,165177],{"class":66},"])    ",[49,165179,165180],{"class":55},"# [1, 2, 3]\n",[49,165182,165183,165185,165188,165190,165193],{"class":51,"line":86},[49,165184,31663],{"class":73},[49,165186,165187],{"class":66},"(nums[:",[49,165189,1472],{"class":73},[49,165191,165192],{"class":66},"])     ",[49,165194,165195],{"class":55},"# [0, 1, 2]\n",[49,165197,165198,165200,165202,165204,165207],{"class":51,"line":98},[49,165199,31663],{"class":73},[49,165201,165168],{"class":66},[49,165203,1472],{"class":73},[49,165205,165206],{"class":66},":])     ",[49,165208,165209],{"class":55},"# [3, 4, 5, 6]\n",[49,165211,165212,165214,165217,165219,165221],{"class":51,"line":121},[49,165213,31663],{"class":73},[49,165215,165216],{"class":66},"(nums[::",[49,165218,1478],{"class":73},[49,165220,165177],{"class":66},[49,165222,165223],{"class":55},"# [0, 2, 4, 6]\n",[49,165225,165226,165228,165230,165232,165234,165237],{"class":51,"line":134},[49,165227,31663],{"class":73},[49,165229,165216],{"class":66},[49,165231,1923],{"class":109},[49,165233,159],{"class":73},[49,165235,165236],{"class":66},"])   ",[49,165238,165239],{"class":55},"# 反转\n",[19,165241,165242],{},"字符串切片：",[39,165244,165246],{"className":31626,"code":165245,"language":31628,"meta":44,"style":44},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[46,165247,165248,165257,165271],{"__ignoreMap":44},[49,165249,165250,165252,165254],{"class":51,"line":52},[49,165251,157469],{"class":66},[49,165253,1448],{"class":109},[49,165255,165256],{"class":1505}," \"abcdef\"\n",[49,165258,165259,165261,165263,165265,165267,165269],{"class":51,"line":59},[49,165260,31663],{"class":73},[49,165262,164985],{"class":66},[49,165264,159],{"class":73},[49,165266,2249],{"class":66},[49,165268,1685],{"class":73},[49,165270,5911],{"class":66},[49,165272,165273,165275,165278,165280,165282],{"class":51,"line":70},[49,165274,31663],{"class":73},[49,165276,165277],{"class":66},"(text[::",[49,165279,1923],{"class":109},[49,165281,159],{"class":73},[49,165283,5911],{"class":66},[14,165285,165287],{"id":165286},"_69-集合set","6.9 集合set",[19,165289,165290],{},"集合特点：",[591,165292,165293,165296,165299],{},[26,165294,165295],{},"无序。",[26,165297,165298],{},"元素不重复。",[26,165300,165301],{},"可以做交集、并集、差集。",[39,165303,165305],{"className":31626,"code":165304,"language":31628,"meta":44,"style":44},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[46,165306,165307,165335],{"__ignoreMap":44},[49,165308,165309,165311,165313,165315,165317,165319,165321,165323,165325,165327,165329,165331,165333],{"class":51,"line":52},[49,165310,165125],{"class":66},[49,165312,1448],{"class":109},[49,165314,5702],{"class":66},[49,165316,159],{"class":73},[49,165318,13687],{"class":66},[49,165320,1478],{"class":73},[49,165322,13687],{"class":66},[49,165324,1472],{"class":73},[49,165326,13687],{"class":66},[49,165328,1472],{"class":73},[49,165330,13687],{"class":66},[49,165332,1685],{"class":73},[49,165334,137],{"class":66},[49,165336,165337,165339],{"class":51,"line":59},[49,165338,31663],{"class":73},[49,165340,165341],{"class":66},"(nums)\n",[19,165343,165344],{},"创建空集合：",[39,165346,165348],{"className":31626,"code":165347,"language":31628,"meta":44,"style":44},"s = set()\n",[46,165349,165350],{"__ignoreMap":44},[49,165351,165352,165354,165356,165358],{"class":51,"line":52},[49,165353,11831],{"class":66},[49,165355,1448],{"class":109},[49,165357,120946],{"class":73},[49,165359,3230],{"class":66},[19,165361,10277,165362,165364],{},[46,165363,33707],{}," 是空字典，不是空集合。",[19,165366,165367],{},"集合常用操作：",[39,165369,165371],{"className":31626,"code":165370,"language":31628,"meta":44,"style":44},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[46,165372,165373,165393,165397,165406,165415,165424],{"__ignoreMap":44},[49,165374,165375,165377,165379,165381,165383,165385,165387,165389,165391],{"class":51,"line":52},[49,165376,11831],{"class":66},[49,165378,1448],{"class":109},[49,165380,5702],{"class":66},[49,165382,159],{"class":73},[49,165384,13687],{"class":66},[49,165386,1478],{"class":73},[49,165388,13687],{"class":66},[49,165390,1472],{"class":73},[49,165392,137],{"class":66},[49,165394,165395],{"class":51,"line":59},[49,165396,3654],{"emptyLinePlaceholder":1330},[49,165398,165399,165402,165404],{"class":51,"line":70},[49,165400,165401],{"class":66},"s.add(",[49,165403,1685],{"class":73},[49,165405,1409],{"class":66},[49,165407,165408,165411,165413],{"class":51,"line":86},[49,165409,165410],{"class":66},"s.remove(",[49,165412,1478],{"class":73},[49,165414,1409],{"class":66},[49,165416,165417,165420,165422],{"class":51,"line":98},[49,165418,165419],{"class":66},"s.discard(",[49,165421,106],{"class":73},[49,165423,1409],{"class":66},[49,165425,165426,165428,165430,165432],{"class":51,"line":121},[49,165427,31663],{"class":73},[49,165429,1403],{"class":66},[49,165431,8610],{"class":73},[49,165433,165434],{"class":66},"(s))\n",[19,165436,165437],{},"交并差：",[39,165439,165441],{"className":31626,"code":165440,"language":31628,"meta":44,"style":44},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[46,165442,165443,165463,165483,165487,165502,165515],{"__ignoreMap":44},[49,165444,165445,165447,165449,165451,165453,165455,165457,165459,165461],{"class":51,"line":52},[49,165446,12171],{"class":66},[49,165448,1448],{"class":109},[49,165450,5702],{"class":66},[49,165452,159],{"class":73},[49,165454,13687],{"class":66},[49,165456,1478],{"class":73},[49,165458,13687],{"class":66},[49,165460,1472],{"class":73},[49,165462,137],{"class":66},[49,165464,165465,165467,165469,165471,165473,165475,165477,165479,165481],{"class":51,"line":59},[49,165466,12197],{"class":66},[49,165468,1448],{"class":109},[49,165470,5702],{"class":66},[49,165472,1472],{"class":73},[49,165474,13687],{"class":66},[49,165476,1685],{"class":73},[49,165478,13687],{"class":66},[49,165480,1711],{"class":73},[49,165482,137],{"class":66},[49,165484,165485],{"class":51,"line":70},[49,165486,3654],{"emptyLinePlaceholder":1330},[49,165488,165489,165491,165494,165496,165499],{"class":51,"line":86},[49,165490,31663],{"class":73},[49,165492,165493],{"class":66},"(a ",[49,165495,1745],{"class":109},[49,165497,165498],{"class":66}," b)  ",[49,165500,165501],{"class":55},"# 交集\n",[49,165503,165504,165506,165508,165510,165512],{"class":51,"line":98},[49,165505,31663],{"class":73},[49,165507,165493],{"class":66},[49,165509,2311],{"class":109},[49,165511,165498],{"class":66},[49,165513,165514],{"class":55},"# 并集\n",[49,165516,165517,165519,165521,165523,165525],{"class":51,"line":121},[49,165518,31663],{"class":73},[49,165520,165493],{"class":66},[49,165522,1923],{"class":109},[49,165524,165498],{"class":66},[49,165526,165527],{"class":55},"# 差集\n",[14,165529,165531],{"id":165530},"_610-字典dict","6.10 字典dict",[19,165533,165534],{},"字典通过 key-value 保存数据。",[39,165536,165538],{"className":31626,"code":165537,"language":31628,"meta":44,"style":44},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[46,165539,165540,165548,165558,165569,165579],{"__ignoreMap":44},[49,165541,165542,165544,165546],{"class":51,"line":52},[49,165543,150506],{"class":66},[49,165545,1448],{"class":109},[49,165547,67],{"class":66},[49,165549,165550,165552,165554,165556],{"class":51,"line":59},[49,165551,148045],{"class":1505},[49,165553,77],{"class":66},[49,165555,150913],{"class":1505},[49,165557,32714],{"class":66},[49,165559,165560,165563,165565,165567],{"class":51,"line":70},[49,165561,165562],{"class":1505},"    \"age\"",[49,165564,77],{"class":66},[49,165566,2041],{"class":73},[49,165568,32714],{"class":66},[49,165570,165571,165574,165576],{"class":51,"line":86},[49,165572,165573],{"class":1505},"    \"score\"",[49,165575,77],{"class":66},[49,165577,165578],{"class":73},"95\n",[49,165580,165581],{"class":51,"line":98},[49,165582,137],{"class":66},[19,165584,165585],{},"获取值：",[39,165587,165589],{"className":31626,"code":165588,"language":31628,"meta":44,"style":44},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[46,165590,165591,165602],{"__ignoreMap":44},[49,165592,165593,165595,165598,165600],{"class":51,"line":52},[49,165594,31663],{"class":73},[49,165596,165597],{"class":66},"(student[",[49,165599,63915],{"class":1505},[49,165601,5911],{"class":66},[49,165603,165604,165606,165609,165611],{"class":51,"line":59},[49,165605,31663],{"class":73},[49,165607,165608],{"class":66},"(student.get(",[49,165610,63915],{"class":1505},[49,165612,31745],{"class":66},[19,165614,16639],{},[39,165616,165618],{"className":31626,"code":165617,"language":31628,"meta":44,"style":44},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[46,165619,165620,165633],{"__ignoreMap":44},[49,165621,165622,165624,165627,165630],{"class":51,"line":52},[49,165623,153884],{"class":66},[49,165625,165626],{"class":1505},"\"address\"",[49,165628,165629],{"class":66},"]     ",[49,165631,165632],{"class":55},"# key不存在会报错\n",[49,165634,165635,165638,165640,165642],{"class":51,"line":59},[49,165636,165637],{"class":66},"student.get(",[49,165639,165626],{"class":1505},[49,165641,14966],{"class":66},[49,165643,165644],{"class":55},"# key不存在返回None\n",[19,165646,165647],{},"设置默认值：",[39,165649,165651],{"className":31626,"code":165650,"language":31628,"meta":44,"style":44},"print(student.get(\"address\", \"未知\"))\n",[46,165652,165653],{"__ignoreMap":44},[49,165654,165655,165657,165659,165661,165663,165666],{"class":51,"line":52},[49,165656,31663],{"class":73},[49,165658,165608],{"class":66},[49,165660,165626],{"class":1505},[49,165662,13687],{"class":66},[49,165664,165665],{"class":1505},"\"未知\"",[49,165667,31745],{"class":66},[19,165669,165670],{},"新增和修改：",[39,165672,165674],{"className":31626,"code":165673,"language":31628,"meta":44,"style":44},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[46,165675,165676,165689],{"__ignoreMap":44},[49,165677,165678,165680,165682,165684,165686],{"class":51,"line":52},[49,165679,153884],{"class":66},[49,165681,70359],{"class":1505},[49,165683,5697],{"class":66},[49,165685,1448],{"class":109},[49,165687,165688],{"class":73}," 19\n",[49,165690,165691,165693,165695,165697,165699],{"class":51,"line":59},[49,165692,153884],{"class":66},[49,165694,165626],{"class":1505},[49,165696,5697],{"class":66},[49,165698,1448],{"class":109},[49,165700,165701],{"class":1505}," \"北京\"\n",[19,165703,165704],{},"删除：",[39,165706,165708],{"className":31626,"code":165707,"language":31628,"meta":44,"style":44},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[46,165709,165710,165723,165733],{"__ignoreMap":44},[49,165711,165712,165714,165716,165719,165721],{"class":51,"line":52},[49,165713,156383],{"class":66},[49,165715,1448],{"class":109},[49,165717,165718],{"class":66}," student.pop(",[49,165720,152497],{"class":1505},[49,165722,1409],{"class":66},[49,165724,165725,165727,165729,165731],{"class":51,"line":59},[49,165726,164408],{"class":109},[49,165728,153174],{"class":66},[49,165730,70359],{"class":1505},[49,165732,34494],{"class":66},[49,165734,165735],{"class":51,"line":70},[49,165736,165737],{"class":66},"student.clear()\n",[14,165739,165741],{"id":165740},"_611-字典遍历","6.11 字典遍历",[19,165743,165744],{},"遍历 key：",[39,165746,165748],{"className":31626,"code":165747,"language":31628,"meta":44,"style":44},"for key in student:\n    print(key, student[key])\n",[46,165749,165750,165762],{"__ignoreMap":44},[49,165751,165752,165754,165757,165759],{"class":51,"line":52},[49,165753,4279],{"class":109},[49,165755,165756],{"class":66}," key ",[49,165758,27292],{"class":109},[49,165760,165761],{"class":66}," student:\n",[49,165763,165764,165766],{"class":51,"line":59},[49,165765,32547],{"class":73},[49,165767,165768],{"class":66},"(key, student[key])\n",[19,165770,165771],{},"遍历 value：",[39,165773,165775],{"className":31626,"code":165774,"language":31628,"meta":44,"style":44},"for value in student.values():\n    print(value)\n",[46,165776,165777,165789],{"__ignoreMap":44},[49,165778,165779,165781,165784,165786],{"class":51,"line":52},[49,165780,4279],{"class":109},[49,165782,165783],{"class":66}," value ",[49,165785,27292],{"class":109},[49,165787,165788],{"class":66}," student.values():\n",[49,165790,165791,165793],{"class":51,"line":59},[49,165792,32547],{"class":73},[49,165794,165795],{"class":66},"(value)\n",[19,165797,165798],{},"遍历 key 和 value：",[39,165800,165802],{"className":31626,"code":165801,"language":31628,"meta":44,"style":44},"for key, value in student.items():\n    print(key, value)\n",[46,165803,165804,165816],{"__ignoreMap":44},[49,165805,165806,165808,165811,165813],{"class":51,"line":52},[49,165807,4279],{"class":109},[49,165809,165810],{"class":66}," key, value ",[49,165812,27292],{"class":109},[49,165814,165815],{"class":66}," student.items():\n",[49,165817,165818,165820],{"class":51,"line":59},[49,165819,32547],{"class":73},[49,165821,165822],{"class":66},"(key, value)\n",[14,165824,165826],{"id":165825},"_612-嵌套容器","6.12 嵌套容器",[19,165828,165829],{},"列表中保存字典，是项目中最常见的结构之一。",[39,165831,165833],{"className":31626,"code":165832,"language":31628,"meta":44,"style":44},"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",[46,165834,165835,165843,165871,165899,165927,165931,165935,165945],{"__ignoreMap":44},[49,165836,165837,165839,165841],{"class":51,"line":52},[49,165838,160741],{"class":66},[49,165840,1448],{"class":109},[49,165842,56686],{"class":66},[49,165844,165845,165847,165849,165851,165853,165855,165857,165859,165861,165863,165865,165867,165869],{"class":51,"line":59},[49,165846,149410],{"class":66},[49,165848,63915],{"class":1505},[49,165850,77],{"class":66},[49,165852,150913],{"class":1505},[49,165854,13687],{"class":66},[49,165856,70359],{"class":1505},[49,165858,77],{"class":66},[49,165860,2041],{"class":73},[49,165862,13687],{"class":66},[49,165864,152497],{"class":1505},[49,165866,77],{"class":66},[49,165868,2378],{"class":73},[49,165870,6184],{"class":66},[49,165872,165873,165875,165877,165879,165881,165883,165885,165887,165889,165891,165893,165895,165897],{"class":51,"line":70},[49,165874,149410],{"class":66},[49,165876,63915],{"class":1505},[49,165878,77],{"class":66},[49,165880,151961],{"class":1505},[49,165882,13687],{"class":66},[49,165884,70359],{"class":1505},[49,165886,77],{"class":66},[49,165888,2016],{"class":73},[49,165890,13687],{"class":66},[49,165892,152497],{"class":1505},[49,165894,77],{"class":66},[49,165896,2201],{"class":73},[49,165898,6184],{"class":66},[49,165900,165901,165903,165905,165907,165909,165911,165913,165915,165917,165919,165921,165923,165925],{"class":51,"line":86},[49,165902,149410],{"class":66},[49,165904,63915],{"class":1505},[49,165906,77],{"class":66},[49,165908,160756],{"class":1505},[49,165910,13687],{"class":66},[49,165912,70359],{"class":1505},[49,165914,77],{"class":66},[49,165916,2066],{"class":73},[49,165918,13687],{"class":66},[49,165920,152497],{"class":1505},[49,165922,77],{"class":66},[49,165924,1798],{"class":73},[49,165926,6184],{"class":66},[49,165928,165929],{"class":51,"line":98},[49,165930,34494],{"class":66},[49,165932,165933],{"class":51,"line":121},[49,165934,3654],{"emptyLinePlaceholder":1330},[49,165936,165937,165939,165941,165943],{"class":51,"line":134},[49,165938,4279],{"class":109},[49,165940,153162],{"class":66},[49,165942,27292],{"class":109},[49,165944,153167],{"class":66},[49,165946,165947,165949,165951,165953,165956,165958],{"class":51,"line":1085},[49,165948,32547],{"class":73},[49,165950,165597],{"class":66},[49,165952,63915],{"class":1505},[49,165954,165955],{"class":66},"], student[",[49,165957,152497],{"class":1505},[49,165959,5911],{"class":66},[19,165961,165962],{},"统计平均分：",[39,165964,165966],{"className":31626,"code":165965,"language":31628,"meta":44,"style":44},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[46,165967,165968,165976,165980,165990,166002,166006,166021],{"__ignoreMap":44},[49,165969,165970,165972,165974],{"class":51,"line":52},[49,165971,158285],{"class":66},[49,165973,1448],{"class":109},[49,165975,48581],{"class":73},[49,165977,165978],{"class":51,"line":59},[49,165979,3654],{"emptyLinePlaceholder":1330},[49,165981,165982,165984,165986,165988],{"class":51,"line":70},[49,165983,4279],{"class":109},[49,165985,153162],{"class":66},[49,165987,27292],{"class":109},[49,165989,153167],{"class":66},[49,165991,165992,165994,165996,165998,166000],{"class":51,"line":86},[49,165993,160332],{"class":66},[49,165995,10729],{"class":109},[49,165997,153174],{"class":66},[49,165999,152497],{"class":1505},[49,166001,34494],{"class":66},[49,166003,166004],{"class":51,"line":98},[49,166005,3654],{"emptyLinePlaceholder":1330},[49,166007,166008,166010,166012,166014,166016,166018],{"class":51,"line":121},[49,166009,164799],{"class":66},[49,166011,1448],{"class":109},[49,166013,164804],{"class":66},[49,166015,1975],{"class":109},[49,166017,8583],{"class":73},[49,166019,166020],{"class":66},"(students)\n",[49,166022,166023,166025,166027,166029,166031,166033,166035,166037,166039,166041],{"class":51,"line":134},[49,166024,31663],{"class":73},[49,166026,1403],{"class":66},[49,166028,1454],{"class":109},[49,166030,164822],{"class":1505},[49,166032,2286],{"class":73},[49,166034,164827],{"class":66},[49,166036,158184],{"class":109},[49,166038,620],{"class":73},[49,166040,1643],{"class":1505},[49,166042,1409],{"class":66},[19,166044,166045],{},"查找学生：",[39,166047,166049],{"className":31626,"code":166048,"language":31628,"meta":44,"style":44},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[46,166050,166051,166066,166070,166080,166094,166100,166104,166110],{"__ignoreMap":44},[49,166052,166053,166055,166057,166059,166061,166064],{"class":51,"line":52},[49,166054,112802],{"class":66},[49,166056,1448],{"class":109},[49,166058,61844],{"class":73},[49,166060,1403],{"class":66},[49,166062,166063],{"class":1505},"\"请输入学生姓名:\"",[49,166065,1409],{"class":66},[49,166067,166068],{"class":51,"line":59},[49,166069,3654],{"emptyLinePlaceholder":1330},[49,166071,166072,166074,166076,166078],{"class":51,"line":70},[49,166073,4279],{"class":109},[49,166075,153162],{"class":66},[49,166077,27292],{"class":109},[49,166079,153167],{"class":66},[49,166081,166082,166084,166086,166088,166090,166092],{"class":51,"line":86},[49,166083,4355],{"class":109},[49,166085,153174],{"class":66},[49,166087,63915],{"class":1505},[49,166089,5697],{"class":66},[49,166091,4203],{"class":109},[49,166093,161457],{"class":66},[49,166095,166096,166098],{"class":51,"line":98},[49,166097,33699],{"class":73},[49,166099,151067],{"class":66},[49,166101,166102],{"class":51,"line":121},[49,166103,32875],{"class":109},[49,166105,166106,166108],{"class":51,"line":134},[49,166107,2956],{"class":109},[49,166109,4993],{"class":66},[49,166111,166112,166114,166116,166119],{"class":51,"line":1085},[49,166113,32547],{"class":73},[49,166115,1403],{"class":66},[49,166117,166118],{"class":1505},"\"没有找到\"",[49,166120,1409],{"class":66},[14,166122,166124],{"id":166123},"_613-容器通用操作","6.13 容器通用操作",[19,166126,166127],{},"长度：",[39,166129,166131],{"className":31626,"code":166130,"language":31628,"meta":44,"style":44},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[46,166132,166133,166152,166162],{"__ignoreMap":44},[49,166134,166135,166137,166140,166142,166144,166146,166148,166150],{"class":51,"line":52},[49,166136,8610],{"class":73},[49,166138,166139],{"class":66},"([",[49,166141,159],{"class":73},[49,166143,13687],{"class":66},[49,166145,1478],{"class":73},[49,166147,13687],{"class":66},[49,166149,1472],{"class":73},[49,166151,5911],{"class":66},[49,166153,166154,166156,166158,166160],{"class":51,"line":59},[49,166155,8610],{"class":73},[49,166157,1403],{"class":66},[49,166159,156905],{"class":1505},[49,166161,1409],{"class":66},[49,166163,166164,166166,166169,166171,166173,166175],{"class":51,"line":70},[49,166165,8610],{"class":73},[49,166167,166168],{"class":66},"({",[49,166170,63915],{"class":1505},[49,166172,77],{"class":66},[49,166174,150913],{"class":1505},[49,166176,166177],{"class":66},"})\n",[19,166179,166180],{},"最大最小：",[39,166182,166184],{"className":31626,"code":166183,"language":31628,"meta":44,"style":44},"max([1, 2, 3])\nmin([1, 2, 3])\n",[46,166185,166186,166204],{"__ignoreMap":44},[49,166187,166188,166190,166192,166194,166196,166198,166200,166202],{"class":51,"line":52},[49,166189,7267],{"class":73},[49,166191,166139],{"class":66},[49,166193,159],{"class":73},[49,166195,13687],{"class":66},[49,166197,1478],{"class":73},[49,166199,13687],{"class":66},[49,166201,1472],{"class":73},[49,166203,5911],{"class":66},[49,166205,166206,166209,166211,166213,166215,166217,166219,166221],{"class":51,"line":59},[49,166207,166208],{"class":73},"min",[49,166210,166139],{"class":66},[49,166212,159],{"class":73},[49,166214,13687],{"class":66},[49,166216,1478],{"class":73},[49,166218,13687],{"class":66},[49,166220,1472],{"class":73},[49,166222,5911],{"class":66},[19,166224,166225],{},"求和：",[39,166227,166229],{"className":31626,"code":166228,"language":31628,"meta":44,"style":44},"sum([1, 2, 3])\n",[46,166230,166231],{"__ignoreMap":44},[49,166232,166233,166236,166238,166240,166242,166244,166246,166248],{"class":51,"line":52},[49,166234,166235],{"class":73},"sum",[49,166237,166139],{"class":66},[49,166239,159],{"class":73},[49,166241,13687],{"class":66},[49,166243,1478],{"class":73},[49,166245,13687],{"class":66},[49,166247,1472],{"class":73},[49,166249,5911],{"class":66},[19,166251,164496],{},[39,166253,166255],{"className":31626,"code":166254,"language":31628,"meta":44,"style":44},"sorted([3, 1, 2])\n",[46,166256,166257],{"__ignoreMap":44},[49,166258,166259,166262,166264,166266,166268,166270,166272,166274],{"class":51,"line":52},[49,166260,166261],{"class":73},"sorted",[49,166263,166139],{"class":66},[49,166265,1472],{"class":73},[49,166267,13687],{"class":66},[49,166269,159],{"class":73},[49,166271,13687],{"class":66},[49,166273,1478],{"class":73},[49,166275,5911],{"class":66},[19,166277,166278],{},"类型转换：",[39,166280,166282],{"className":31626,"code":166281,"language":31628,"meta":44,"style":44},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[46,166283,166284,166294,166312],{"__ignoreMap":44},[49,166285,166286,166288,166290,166292],{"class":51,"line":52},[49,166287,155095],{"class":73},[49,166289,1403],{"class":66},[49,166291,156905],{"class":1505},[49,166293,1409],{"class":66},[49,166295,166296,166298,166300,166302,166304,166306,166308,166310],{"class":51,"line":59},[49,166297,156290],{"class":73},[49,166299,166139],{"class":66},[49,166301,159],{"class":73},[49,166303,13687],{"class":66},[49,166305,1478],{"class":73},[49,166307,13687],{"class":66},[49,166309,1472],{"class":73},[49,166311,5911],{"class":66},[49,166313,166314,166316,166318,166320,166322,166324,166326,166328,166330,166332],{"class":51,"line":70},[49,166315,156315],{"class":73},[49,166317,166139],{"class":66},[49,166319,159],{"class":73},[49,166321,13687],{"class":66},[49,166323,159],{"class":73},[49,166325,13687],{"class":66},[49,166327,1478],{"class":73},[49,166329,13687],{"class":66},[49,166331,1472],{"class":73},[49,166333,5911],{"class":66},[19,166335,166336],{},"成员判断：",[39,166338,166340],{"className":31626,"code":166339,"language":31628,"meta":44,"style":44},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[46,166341,166342,166359,166383],{"__ignoreMap":44},[49,166343,166344,166346,166348,166351,166354,166357],{"class":51,"line":52},[49,166345,31663],{"class":73},[49,166347,1403],{"class":66},[49,166349,166350],{"class":1505},"\"a\"",[49,166352,166353],{"class":109}," in",[49,166355,166356],{"class":1505}," \"abc\"",[49,166358,1409],{"class":66},[49,166360,166361,166363,166365,166367,166369,166371,166373,166375,166377,166379,166381],{"class":51,"line":59},[49,166362,31663],{"class":73},[49,166364,1403],{"class":66},[49,166366,159],{"class":73},[49,166368,166353],{"class":109},[49,166370,53468],{"class":66},[49,166372,159],{"class":73},[49,166374,13687],{"class":66},[49,166376,1478],{"class":73},[49,166378,13687],{"class":66},[49,166380,1472],{"class":73},[49,166382,5911],{"class":66},[49,166384,166385,166387,166389,166391,166393,166395,166397,166399,166401],{"class":51,"line":70},[49,166386,31663],{"class":73},[49,166388,1403],{"class":66},[49,166390,63915],{"class":1505},[49,166392,166353],{"class":109},[49,166394,5702],{"class":66},[49,166396,63915],{"class":1505},[49,166398,77],{"class":66},[49,166400,150913],{"class":1505},[49,166402,166177],{"class":66},[14,166404,166406],{"id":166405},"_614-推导式","6.14 推导式",[19,166408,166409],{},"推导式用于快速生成容器。",[19,166411,166412],{},"列表推导式：",[39,166414,166416],{"className":31626,"code":166415,"language":31628,"meta":44,"style":44},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[46,166417,166418,166445],{"__ignoreMap":44},[49,166419,166420,166422,166424,166427,166429,166431,166433,166435,166437,166439,166441,166443],{"class":51,"line":52},[49,166421,165125],{"class":66},[49,166423,1448],{"class":109},[49,166425,166426],{"class":66}," [i ",[49,166428,4279],{"class":109},[49,166430,10690],{"class":66},[49,166432,27292],{"class":109},[49,166434,33691],{"class":73},[49,166436,1403],{"class":66},[49,166438,159],{"class":73},[49,166440,13687],{"class":66},[49,166442,1736],{"class":73},[49,166444,98525],{"class":66},[49,166446,166447,166449],{"class":51,"line":59},[49,166448,31663],{"class":73},[49,166450,165341],{"class":66},[19,166452,166453],{},"带条件：",[39,166455,166457],{"className":31626,"code":166456,"language":31628,"meta":44,"style":44},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[46,166458,166459,166500],{"__ignoreMap":44},[49,166460,166461,166464,166466,166468,166470,166472,166474,166476,166478,166480,166482,166484,166486,166488,166490,166492,166494,166496,166498],{"class":51,"line":52},[49,166462,166463],{"class":66},"even_nums ",[49,166465,1448],{"class":109},[49,166467,166426],{"class":66},[49,166469,4279],{"class":109},[49,166471,10690],{"class":66},[49,166473,27292],{"class":109},[49,166475,33691],{"class":73},[49,166477,1403],{"class":66},[49,166479,159],{"class":73},[49,166481,13687],{"class":66},[49,166483,1729],{"class":73},[49,166485,14966],{"class":66},[49,166487,2787],{"class":109},[49,166489,10690],{"class":66},[49,166491,1720],{"class":109},[49,166493,16006],{"class":73},[49,166495,102783],{"class":109},[49,166497,5347],{"class":73},[49,166499,34494],{"class":66},[49,166501,166502,166504],{"class":51,"line":59},[49,166503,31663],{"class":73},[49,166505,166506],{"class":66},"(even_nums)\n",[19,166508,166509],{},"字典推导式：",[39,166511,166513],{"className":31626,"code":166512,"language":31628,"meta":44,"style":44},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[46,166514,166515,166549],{"__ignoreMap":44},[49,166516,166517,166520,166522,166525,166527,166529,166532,166534,166536,166538,166540,166542,166544,166546],{"class":51,"line":52},[49,166518,166519],{"class":66},"squares ",[49,166521,1448],{"class":109},[49,166523,166524],{"class":66}," {i: i ",[49,166526,11913],{"class":109},[49,166528,16006],{"class":73},[49,166530,166531],{"class":109}," for",[49,166533,10690],{"class":66},[49,166535,27292],{"class":109},[49,166537,33691],{"class":73},[49,166539,1403],{"class":66},[49,166541,159],{"class":73},[49,166543,13687],{"class":66},[49,166545,1736],{"class":73},[49,166547,166548],{"class":66},")}\n",[49,166550,166551,166553],{"class":51,"line":59},[49,166552,31663],{"class":73},[49,166554,166555],{"class":66},"(squares)\n",[19,166557,166558],{},"集合推导式：",[39,166560,166562],{"className":31626,"code":166561,"language":31628,"meta":44,"style":44},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[46,166563,166564,166585],{"__ignoreMap":44},[49,166565,166566,166569,166571,166574,166576,166578,166580,166583],{"class":51,"line":52},[49,166567,166568],{"class":66},"chars ",[49,166570,1448],{"class":109},[49,166572,166573],{"class":66}," {ch ",[49,166575,4279],{"class":109},[49,166577,160717],{"class":66},[49,166579,27292],{"class":109},[49,166581,166582],{"class":1505}," \"hello\"",[49,166584,137],{"class":66},[49,166586,166587,166589],{"class":51,"line":59},[49,166588,31663],{"class":73},[49,166590,166591],{"class":66},"(chars)\n",[19,166593,166594],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166596,166598],{"id":166597},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[39,166600,166602],{"className":31626,"code":166601,"language":31628,"meta":44,"style":44},"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",[46,166603,166604,166612,166632,166652,166672,166692,166696,166700,166708,166722,166731,166735,166745,166757,166761,166781,166790,166794,166810,166815,166819,166833,166837,166859,166895],{"__ignoreMap":44},[49,166605,166606,166608,166610],{"class":51,"line":52},[49,166607,160741],{"class":66},[49,166609,1448],{"class":109},[49,166611,56686],{"class":66},[49,166613,166614,166616,166618,166620,166622,166624,166626,166628,166630],{"class":51,"line":59},[49,166615,149410],{"class":66},[49,166617,63915],{"class":1505},[49,166619,77],{"class":66},[49,166621,150913],{"class":1505},[49,166623,13687],{"class":66},[49,166625,152497],{"class":1505},[49,166627,77],{"class":66},[49,166629,2378],{"class":73},[49,166631,6184],{"class":66},[49,166633,166634,166636,166638,166640,166642,166644,166646,166648,166650],{"class":51,"line":70},[49,166635,149410],{"class":66},[49,166637,63915],{"class":1505},[49,166639,77],{"class":66},[49,166641,151961],{"class":1505},[49,166643,13687],{"class":66},[49,166645,152497],{"class":1505},[49,166647,77],{"class":66},[49,166649,2201],{"class":73},[49,166651,6184],{"class":66},[49,166653,166654,166656,166658,166660,166662,166664,166666,166668,166670],{"class":51,"line":86},[49,166655,149410],{"class":66},[49,166657,63915],{"class":1505},[49,166659,77],{"class":66},[49,166661,160756],{"class":1505},[49,166663,13687],{"class":66},[49,166665,152497],{"class":1505},[49,166667,77],{"class":66},[49,166669,1798],{"class":73},[49,166671,6184],{"class":66},[49,166673,166674,166676,166678,166680,166682,166684,166686,166688,166690],{"class":51,"line":98},[49,166675,149410],{"class":66},[49,166677,63915],{"class":1505},[49,166679,77],{"class":66},[49,166681,164335],{"class":1505},[49,166683,13687],{"class":66},[49,166685,152497],{"class":1505},[49,166687,77],{"class":66},[49,166689,2272],{"class":73},[49,166691,6184],{"class":66},[49,166693,166694],{"class":51,"line":121},[49,166695,34494],{"class":66},[49,166697,166698],{"class":51,"line":134},[49,166699,3654],{"emptyLinePlaceholder":1330},[49,166701,166702,166704,166706],{"class":51,"line":1085},[49,166703,158285],{"class":66},[49,166705,1448],{"class":109},[49,166707,48581],{"class":73},[49,166709,166710,166713,166715,166718,166720],{"class":51,"line":2574},[49,166711,166712],{"class":66},"max_student ",[49,166714,1448],{"class":109},[49,166716,166717],{"class":66}," students[",[49,166719,80],{"class":73},[49,166721,34494],{"class":66},[49,166723,166724,166727,166729],{"class":51,"line":2586},[49,166725,166726],{"class":66},"passed ",[49,166728,1448],{"class":109},[49,166730,53080],{"class":66},[49,166732,166733],{"class":51,"line":2867},[49,166734,3654],{"emptyLinePlaceholder":1330},[49,166736,166737,166739,166741,166743],{"class":51,"line":2872},[49,166738,4279],{"class":109},[49,166740,153162],{"class":66},[49,166742,27292],{"class":109},[49,166744,153167],{"class":66},[49,166746,166747,166749,166751,166753,166755],{"class":51,"line":2878},[49,166748,160332],{"class":66},[49,166750,10729],{"class":109},[49,166752,153174],{"class":66},[49,166754,152497],{"class":1505},[49,166756,34494],{"class":66},[49,166758,166759],{"class":51,"line":2883},[49,166760,3654],{"emptyLinePlaceholder":1330},[49,166762,166763,166765,166767,166769,166771,166773,166776,166778],{"class":51,"line":2897},[49,166764,4355],{"class":109},[49,166766,153174],{"class":66},[49,166768,152497],{"class":1505},[49,166770,5697],{"class":66},[49,166772,2349],{"class":109},[49,166774,166775],{"class":66}," max_student[",[49,166777,152497],{"class":1505},[49,166779,166780],{"class":66},"]:\n",[49,166782,166783,166786,166788],{"class":51,"line":2902},[49,166784,166785],{"class":66},"        max_student ",[49,166787,1448],{"class":109},[49,166789,153190],{"class":66},[49,166791,166792],{"class":51,"line":2908},[49,166793,3654],{"emptyLinePlaceholder":1330},[49,166795,166796,166798,166800,166802,166804,166806,166808],{"class":51,"line":2929},[49,166797,4355],{"class":109},[49,166799,153174],{"class":66},[49,166801,152497],{"class":1505},[49,166803,5697],{"class":66},[49,166805,2965],{"class":109},[49,166807,158862],{"class":73},[49,166809,4993],{"class":66},[49,166811,166812],{"class":51,"line":2934},[49,166813,166814],{"class":66},"        passed.append(student)\n",[49,166816,166817],{"class":51,"line":2948},[49,166818,3654],{"emptyLinePlaceholder":1330},[49,166820,166821,166823,166825,166827,166829,166831],{"class":51,"line":2953},[49,166822,164799],{"class":66},[49,166824,1448],{"class":109},[49,166826,164804],{"class":66},[49,166828,1975],{"class":109},[49,166830,8583],{"class":73},[49,166832,166020],{"class":66},[49,166834,166835],{"class":51,"line":2982},[49,166836,3654],{"emptyLinePlaceholder":1330},[49,166838,166839,166841,166843,166845,166847,166849,166851,166853,166855,166857],{"class":51,"line":2987},[49,166840,31663],{"class":73},[49,166842,1403],{"class":66},[49,166844,1454],{"class":109},[49,166846,164822],{"class":1505},[49,166848,2286],{"class":73},[49,166850,164827],{"class":66},[49,166852,158184],{"class":109},[49,166854,620],{"class":73},[49,166856,1643],{"class":1505},[49,166858,1409],{"class":66},[49,166860,166861,166863,166865,166867,166870,166872,166875,166877,166879,166881,166883,166885,166887,166889,166891,166893],{"class":51,"line":3004},[49,166862,31663],{"class":73},[49,166864,1403],{"class":66},[49,166866,1454],{"class":109},[49,166868,166869],{"class":1505},"\"最高分学生:",[49,166871,2286],{"class":73},[49,166873,166874],{"class":66},"max_student[",[49,166876,153907],{"class":1505},[49,166878,2330],{"class":66},[49,166880,620],{"class":73},[49,166882,5702],{"class":73},[49,166884,166874],{"class":66},[49,166886,153945],{"class":1505},[49,166888,2330],{"class":66},[49,166890,620],{"class":73},[49,166892,1643],{"class":1505},[49,166894,1409],{"class":66},[49,166896,166897,166899,166901,166903,166906,166909,166912,166914,166916],{"class":51,"line":3009},[49,166898,31663],{"class":73},[49,166900,1403],{"class":66},[49,166902,1454],{"class":109},[49,166904,166905],{"class":1505},"\"及格人数:",[49,166907,166908],{"class":73},"{len",[49,166910,166911],{"class":66},"(passed)",[49,166913,620],{"class":73},[49,166915,1643],{"class":1505},[49,166917,1409],{"class":66},[14,166919,166921],{"id":166920},"_616-易错点","6.16 易错点",[591,166923,166924,166927,166930,166933,166939,166948],{},[26,166925,166926],{},"列表可变，元组和字符串不可变。",[26,166928,166929],{},"切片结束位置不包含。",[26,166931,166932],{},"字典通过 key 取值，不是通过索引。",[26,166934,166935,166936,29633],{},"空集合要用 ",[46,166937,166938],{},"set()",[26,166940,105590,166941,166944,166945,29633],{},[46,166942,166943],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[46,166946,166947],{},"get()",[26,166949,166950],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166952,166954],{"id":166953},"_617-本章练习","6.17 本章练习",[591,166956,166957,166960,166963,166966,166969],{},[26,166958,166959],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[26,166961,166962],{},"输入一句话，统计每个字符出现次数。",[26,166964,166965],{},"使用集合去除列表中的重复元素。",[26,166967,166968],{},"使用字典保存一个学生的信息，并实现修改成绩。",[26,166970,166971],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1305,166973,166974],{},"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":44,"searchDepth":59,"depth":59,"links":166976},[166977,166978,166979,166980,166981,166982,166983,166984,166985,166986,166987,166988,166989,166990,166991,166992,166993],{"id":163957,"depth":59,"text":163958},{"id":164074,"depth":59,"text":164075},{"id":164164,"depth":59,"text":164165},{"id":164288,"depth":59,"text":164289},{"id":164651,"depth":59,"text":164652},{"id":164838,"depth":59,"text":164839},{"id":164957,"depth":59,"text":164958},{"id":165099,"depth":59,"text":165100},{"id":165286,"depth":59,"text":165287},{"id":165530,"depth":59,"text":165531},{"id":165740,"depth":59,"text":165741},{"id":165825,"depth":59,"text":165826},{"id":166123,"depth":59,"text":166124},{"id":166405,"depth":59,"text":166406},{"id":166597,"depth":59,"text":166598},{"id":166920,"depth":59,"text":166921},{"id":166953,"depth":59,"text":166954},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163949,"description":1327},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167000,"title":167001,"body":167002,"description":1327,"extension":1328,"meta":169174,"navigation":1330,"path":169175,"seo":169176,"stem":169177,"__hash__":169178},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167003,"toc":169149},[167004,167007,167011,167014,167094,167097,167118,167121,167125,167128,167190,167193,167210,167214,167217,167262,167264,167272,167276,167279,167361,167364,167367,167392,167395,167418,167422,167425,167427,167489,167492,167494,167545,167549,167553,167559,167664,167668,167674,167745,167749,167752,167820,167823,167903,167907,167913,167949,167952,167955,168065,168071,168075,168078,168150,168153,168157,168161,168166,168228,168232,168237,168305,168309,168314,168430,168434,168437,168517,168520,168524,168527,168631,168633,168648,168651,168655,168793,168801,168805,168807,168818,168820,169078,169082,169114,169118,169146],[10,167005,167001],{"id":167006},"_7-函数进阶",[14,167008,167010],{"id":167009},"_71-多返回值","7.1 多返回值",[19,167012,167013],{},"Python 函数可以返回多个值，本质上返回的是元组。",[39,167015,167017],{"className":31626,"code":167016,"language":31628,"meta":44,"style":44},"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",[46,167018,167019,167028,167036,167044,167053,167060,167064,167068,167077,167083],{"__ignoreMap":44},[49,167020,167021,167023,167026],{"class":51,"line":52},[49,167022,33195],{"class":109},[49,167024,167025],{"class":62}," get_info",[49,167027,33201],{"class":66},[49,167029,167030,167032,167034],{"class":51,"line":59},[49,167031,153395],{"class":66},[49,167033,1448],{"class":109},[49,167035,150378],{"class":1505},[49,167037,167038,167040,167042],{"class":51,"line":70},[49,167039,153411],{"class":66},[49,167041,1448],{"class":109},[49,167043,147576],{"class":73},[49,167045,167046,167048,167050],{"class":51,"line":86},[49,167047,153426],{"class":66},[49,167049,1448],{"class":109},[49,167051,167052],{"class":73}," 95\n",[49,167054,167055,167057],{"class":51,"line":98},[49,167056,5344],{"class":109},[49,167058,167059],{"class":66}," name, age, score\n",[49,167061,167062],{"class":51,"line":121},[49,167063,3654],{"emptyLinePlaceholder":1330},[49,167065,167066],{"class":51,"line":134},[49,167067,3654],{"emptyLinePlaceholder":1330},[49,167069,167070,167072,167074],{"class":51,"line":1085},[49,167071,162331],{"class":66},[49,167073,1448],{"class":109},[49,167075,167076],{"class":66}," get_info()\n",[49,167078,167079,167081],{"class":51,"line":2574},[49,167080,31663],{"class":73},[49,167082,77814],{"class":66},[49,167084,167085,167087,167089,167091],{"class":51,"line":2586},[49,167086,31663],{"class":73},[49,167088,1403],{"class":66},[49,167090,104331],{"class":73},[49,167092,167093],{"class":66},"(result))\n",[19,167095,167096],{},"可以直接解包：",[39,167098,167100],{"className":31626,"code":167099,"language":31628,"meta":44,"style":44},"name, age, score = get_info()\nprint(name, age, score)\n",[46,167101,167102,167111],{"__ignoreMap":44},[49,167103,167104,167107,167109],{"class":51,"line":52},[49,167105,167106],{"class":66},"name, age, score ",[49,167108,1448],{"class":109},[49,167110,167076],{"class":66},[49,167112,167113,167115],{"class":51,"line":59},[49,167114,31663],{"class":73},[49,167116,167117],{"class":66},"(name, age, score)\n",[19,167119,167120],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167122,167124],{"id":167123},"_72-位置参数","7.2 位置参数",[19,167126,167127],{},"位置参数按顺序传递。",[39,167129,167131],{"className":31626,"code":167130,"language":31628,"meta":44,"style":44},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[46,167132,167133,167141,167169,167173,167177],{"__ignoreMap":44},[49,167134,167135,167137,167139],{"class":51,"line":52},[49,167136,33195],{"class":109},[49,167138,150397],{"class":62},[49,167140,150400],{"class":66},[49,167142,167143,167145,167147,167149,167151,167153,167155,167157,167159,167161,167163,167165,167167],{"class":51,"line":59},[49,167144,32547],{"class":73},[49,167146,1403],{"class":66},[49,167148,1454],{"class":109},[49,167150,150411],{"class":1505},[49,167152,2286],{"class":73},[49,167154,81036],{"class":66},[49,167156,620],{"class":73},[49,167158,150420],{"class":1505},[49,167160,2286],{"class":73},[49,167162,71456],{"class":66},[49,167164,620],{"class":73},[49,167166,150429],{"class":1505},[49,167168,1409],{"class":66},[49,167170,167171],{"class":51,"line":70},[49,167172,3654],{"emptyLinePlaceholder":1330},[49,167174,167175],{"class":51,"line":86},[49,167176,3654],{"emptyLinePlaceholder":1330},[49,167178,167179,167182,167184,167186,167188],{"class":51,"line":98},[49,167180,167181],{"class":66},"introduce(",[49,167183,150913],{"class":1505},[49,167185,13687],{"class":66},[49,167187,2041],{"class":73},[49,167189,1409],{"class":66},[19,167191,167192],{},"顺序错了就会得到错误含义：",[39,167194,167196],{"className":31626,"code":167195,"language":31628,"meta":44,"style":44},"introduce(18, \"小明\")\n",[46,167197,167198],{"__ignoreMap":44},[49,167199,167200,167202,167204,167206,167208],{"class":51,"line":52},[49,167201,167181],{"class":66},[49,167203,2041],{"class":73},[49,167205,13687],{"class":66},[49,167207,150913],{"class":1505},[49,167209,1409],{"class":66},[14,167211,167213],{"id":167212},"_73-关键字参数","7.3 关键字参数",[19,167215,167216],{},"关键字参数按参数名传递。",[39,167218,167220],{"className":31626,"code":167219,"language":31628,"meta":44,"style":44},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[46,167221,167222,167242],{"__ignoreMap":44},[49,167223,167224,167226,167228,167230,167232,167234,167236,167238,167240],{"class":51,"line":52},[49,167225,167181],{"class":66},[49,167227,81036],{"class":6468},[49,167229,1448],{"class":109},[49,167231,150913],{"class":1505},[49,167233,13687],{"class":66},[49,167235,71456],{"class":6468},[49,167237,1448],{"class":109},[49,167239,2041],{"class":73},[49,167241,1409],{"class":66},[49,167243,167244,167246,167248,167250,167252,167254,167256,167258,167260],{"class":51,"line":59},[49,167245,167181],{"class":66},[49,167247,71456],{"class":6468},[49,167249,1448],{"class":109},[49,167251,2041],{"class":73},[49,167253,13687],{"class":66},[49,167255,81036],{"class":6468},[49,167257,1448],{"class":109},[49,167259,150913],{"class":1505},[49,167261,1409],{"class":66},[19,167263,119158],{},[591,167265,167266,167269],{},[26,167267,167268],{},"顺序不容易错。",[26,167270,167271],{},"调用时可读性更强。",[14,167273,167275],{"id":167274},"_74-默认参数","7.4 默认参数",[19,167277,167278],{},"默认参数给参数设置默认值。",[39,167280,167282],{"className":31626,"code":167281,"language":31628,"meta":44,"style":44},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[46,167283,167284,167300,167330,167334,167338,167348],{"__ignoreMap":44},[49,167285,167286,167288,167290,167293,167295,167298],{"class":51,"line":52},[49,167287,33195],{"class":109},[49,167289,123317],{"class":62},[49,167291,167292],{"class":66},"(host, port",[49,167294,1448],{"class":109},[49,167296,167297],{"class":73},"3306",[49,167299,32034],{"class":66},[49,167301,167302,167304,167306,167308,167311,167313,167315,167317,167319,167321,167324,167326,167328],{"class":51,"line":59},[49,167303,32547],{"class":73},[49,167305,1403],{"class":66},[49,167307,1454],{"class":109},[49,167309,167310],{"class":1505},"\"连接",[49,167312,2286],{"class":73},[49,167314,28644],{"class":66},[49,167316,620],{"class":73},[49,167318,2249],{"class":1505},[49,167320,2286],{"class":73},[49,167322,167323],{"class":66},"port",[49,167325,620],{"class":73},[49,167327,1643],{"class":1505},[49,167329,1409],{"class":66},[49,167331,167332],{"class":51,"line":70},[49,167333,3654],{"emptyLinePlaceholder":1330},[49,167335,167336],{"class":51,"line":86},[49,167337,3654],{"emptyLinePlaceholder":1330},[49,167339,167340,167343,167346],{"class":51,"line":98},[49,167341,167342],{"class":66},"connect(",[49,167344,167345],{"class":1505},"\"localhost\"",[49,167347,1409],{"class":66},[49,167349,167350,167352,167354,167356,167359],{"class":51,"line":121},[49,167351,167342],{"class":66},[49,167353,167345],{"class":1505},[49,167355,13687],{"class":66},[49,167357,167358],{"class":73},"6379",[49,167360,1409],{"class":66},[19,167362,167363],{},"注意：默认参数必须放在非默认参数后面。",[19,167365,167366],{},"错误：",[39,167368,167370],{"className":31626,"code":167369,"language":31628,"meta":44,"style":44},"def connect(port=3306, host):\n    pass\n",[46,167371,167372,167388],{"__ignoreMap":44},[49,167373,167374,167376,167378,167381,167383,167385],{"class":51,"line":52},[49,167375,33195],{"class":109},[49,167377,123317],{"class":62},[49,167379,167380],{"class":66},"(port",[49,167382,1448],{"class":109},[49,167384,167297],{"class":73},[49,167386,167387],{"class":66},", host):\n",[49,167389,167390],{"class":51,"line":59},[49,167391,150562],{"class":109},[19,167393,167394],{},"正确：",[39,167396,167398],{"className":31626,"code":167397,"language":31628,"meta":44,"style":44},"def connect(host, port=3306):\n    pass\n",[46,167399,167400,167414],{"__ignoreMap":44},[49,167401,167402,167404,167406,167408,167410,167412],{"class":51,"line":52},[49,167403,33195],{"class":109},[49,167405,123317],{"class":62},[49,167407,167292],{"class":66},[49,167409,1448],{"class":109},[49,167411,167297],{"class":73},[49,167413,32034],{"class":66},[49,167415,167416],{"class":51,"line":59},[49,167417,150562],{"class":109},[14,167419,167421],{"id":167420},"_75-默认参数的坑","7.5 默认参数的坑",[19,167423,167424],{},"不要使用可变对象作为默认参数。",[19,167426,158648],{},[39,167428,167430],{"className":31626,"code":167429,"language":31628,"meta":44,"style":44},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[46,167431,167432,167447,167452,167459,167463,167467,167478],{"__ignoreMap":44},[49,167433,167434,167436,167439,167442,167444],{"class":51,"line":52},[49,167435,33195],{"class":109},[49,167437,167438],{"class":62}," add_item",[49,167440,167441],{"class":66},"(item, items",[49,167443,1448],{"class":109},[49,167445,167446],{"class":66},"[]):\n",[49,167448,167449],{"class":51,"line":59},[49,167450,167451],{"class":66},"    items.append(item)\n",[49,167453,167454,167456],{"class":51,"line":70},[49,167455,5344],{"class":109},[49,167457,167458],{"class":66}," items\n",[49,167460,167461],{"class":51,"line":86},[49,167462,3654],{"emptyLinePlaceholder":1330},[49,167464,167465],{"class":51,"line":98},[49,167466,3654],{"emptyLinePlaceholder":1330},[49,167468,167469,167471,167474,167476],{"class":51,"line":121},[49,167470,31663],{"class":73},[49,167472,167473],{"class":66},"(add_item(",[49,167475,166350],{"class":1505},[49,167477,31745],{"class":66},[49,167479,167480,167482,167484,167487],{"class":51,"line":134},[49,167481,31663],{"class":73},[49,167483,167473],{"class":66},[49,167485,167486],{"class":1505},"\"b\"",[49,167488,31745],{"class":66},[19,167490,167491],{},"第二次调用会复用第一次的列表。",[19,167493,156913],{},[39,167495,167497],{"className":31626,"code":167496,"language":31628,"meta":44,"style":44},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[46,167498,167499,167513,167526,167535,167539],{"__ignoreMap":44},[49,167500,167501,167503,167505,167507,167509,167511],{"class":51,"line":52},[49,167502,33195],{"class":109},[49,167504,167438],{"class":62},[49,167506,167441],{"class":66},[49,167508,1448],{"class":109},[49,167510,96911],{"class":73},[49,167512,32034],{"class":66},[49,167514,167515,167517,167520,167522,167524],{"class":51,"line":59},[49,167516,4355],{"class":109},[49,167518,167519],{"class":66}," items ",[49,167521,40175],{"class":109},[49,167523,40181],{"class":73},[49,167525,4993],{"class":66},[49,167527,167528,167531,167533],{"class":51,"line":70},[49,167529,167530],{"class":66},"        items ",[49,167532,1448],{"class":109},[49,167534,53080],{"class":66},[49,167536,167537],{"class":51,"line":86},[49,167538,167451],{"class":66},[49,167540,167541,167543],{"class":51,"line":98},[49,167542,5344],{"class":109},[49,167544,167458],{"class":66},[14,167546,167548],{"id":167547},"_76-不定长参数","7.6 不定长参数",[183,167550,167552],{"id":167551},"_761-args","7.6.1 *args",[19,167554,167555,167558],{},[46,167556,167557],{},"*args"," 接收任意数量的位置参数，得到元组。",[39,167560,167562],{"className":31626,"code":167561,"language":31628,"meta":44,"style":44},"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",[46,167563,167564,167577,167585,167596,167605,167611,167615,167619,167638],{"__ignoreMap":44},[49,167565,167566,167568,167570,167572,167574],{"class":51,"line":52},[49,167567,33195],{"class":109},[49,167569,6461],{"class":62},[49,167571,1403],{"class":66},[49,167573,1846],{"class":109},[49,167575,167576],{"class":66},"args):\n",[49,167578,167579,167581,167583],{"class":51,"line":59},[49,167580,160332],{"class":66},[49,167582,1448],{"class":109},[49,167584,48581],{"class":73},[49,167586,167587,167589,167591,167593],{"class":51,"line":70},[49,167588,4455],{"class":109},[49,167590,157205],{"class":66},[49,167592,27292],{"class":109},[49,167594,167595],{"class":66}," args:\n",[49,167597,167598,167600,167602],{"class":51,"line":86},[49,167599,161007],{"class":66},[49,167601,10729],{"class":109},[49,167603,167604],{"class":66}," num\n",[49,167606,167607,167609],{"class":51,"line":98},[49,167608,5344],{"class":109},[49,167610,163312],{"class":66},[49,167612,167613],{"class":51,"line":121},[49,167614,3654],{"emptyLinePlaceholder":1330},[49,167616,167617],{"class":51,"line":134},[49,167618,3654],{"emptyLinePlaceholder":1330},[49,167620,167621,167623,167626,167628,167630,167632,167634,167636],{"class":51,"line":1085},[49,167622,31663],{"class":73},[49,167624,167625],{"class":66},"(add(",[49,167627,159],{"class":73},[49,167629,13687],{"class":66},[49,167631,1478],{"class":73},[49,167633,13687],{"class":66},[49,167635,1472],{"class":73},[49,167637,31745],{"class":66},[49,167639,167640,167642,167644,167646,167648,167650,167652,167654,167656,167658,167660,167662],{"class":51,"line":2574},[49,167641,31663],{"class":73},[49,167643,167625],{"class":66},[49,167645,159],{"class":73},[49,167647,13687],{"class":66},[49,167649,1478],{"class":73},[49,167651,13687],{"class":66},[49,167653,1472],{"class":73},[49,167655,13687],{"class":66},[49,167657,1685],{"class":73},[49,167659,13687],{"class":66},[49,167661,1711],{"class":73},[49,167663,31745],{"class":66},[183,167665,167667],{"id":167666},"_762-kwargs","7.6.2 **kwargs",[19,167669,167670,167673],{},[46,167671,167672],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[39,167675,167677],{"className":31626,"code":167676,"language":31628,"meta":44,"style":44},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[46,167678,167679,167692,167703,167709,167713,167717],{"__ignoreMap":44},[49,167680,167681,167683,167685,167687,167689],{"class":51,"line":52},[49,167682,33195],{"class":109},[49,167684,162970],{"class":62},[49,167686,1403],{"class":66},[49,167688,11913],{"class":109},[49,167690,167691],{"class":66},"kwargs):\n",[49,167693,167694,167696,167698,167700],{"class":51,"line":59},[49,167695,4455],{"class":109},[49,167697,165810],{"class":66},[49,167699,27292],{"class":109},[49,167701,167702],{"class":66}," kwargs.items():\n",[49,167704,167705,167707],{"class":51,"line":70},[49,167706,33699],{"class":73},[49,167708,165822],{"class":66},[49,167710,167711],{"class":51,"line":86},[49,167712,3654],{"emptyLinePlaceholder":1330},[49,167714,167715],{"class":51,"line":98},[49,167716,3654],{"emptyLinePlaceholder":1330},[49,167718,167719,167721,167723,167725,167727,167729,167731,167733,167735,167737,167739,167741,167743],{"class":51,"line":121},[49,167720,163035],{"class":66},[49,167722,81036],{"class":6468},[49,167724,1448],{"class":109},[49,167726,150913],{"class":1505},[49,167728,13687],{"class":66},[49,167730,71456],{"class":6468},[49,167732,1448],{"class":109},[49,167734,2041],{"class":73},[49,167736,13687],{"class":66},[49,167738,71507],{"class":6468},[49,167740,1448],{"class":109},[49,167742,70504],{"class":1505},[49,167744,1409],{"class":66},[14,167746,167748],{"id":167747},"_77-参数解包","7.7 参数解包",[19,167750,167751],{},"列表或元组解包为位置参数：",[39,167753,167755],{"className":31626,"code":167754,"language":31628,"meta":44,"style":44},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[46,167756,167757,167766,167781,167785,167789,167809],{"__ignoreMap":44},[49,167758,167759,167761,167763],{"class":51,"line":52},[49,167760,33195],{"class":109},[49,167762,6461],{"class":62},[49,167764,167765],{"class":66},"(a, b, c):\n",[49,167767,167768,167770,167772,167774,167776,167778],{"class":51,"line":59},[49,167769,5344],{"class":109},[49,167771,12121],{"class":66},[49,167773,1872],{"class":109},[49,167775,12134],{"class":66},[49,167777,1872],{"class":109},[49,167779,167780],{"class":66}," c\n",[49,167782,167783],{"class":51,"line":70},[49,167784,3654],{"emptyLinePlaceholder":1330},[49,167786,167787],{"class":51,"line":86},[49,167788,3654],{"emptyLinePlaceholder":1330},[49,167790,167791,167793,167795,167797,167799,167801,167803,167805,167807],{"class":51,"line":98},[49,167792,165125],{"class":66},[49,167794,1448],{"class":109},[49,167796,53468],{"class":66},[49,167798,159],{"class":73},[49,167800,13687],{"class":66},[49,167802,1478],{"class":73},[49,167804,13687],{"class":66},[49,167806,1472],{"class":73},[49,167808,34494],{"class":66},[49,167810,167811,167813,167815,167817],{"class":51,"line":121},[49,167812,31663],{"class":73},[49,167814,167625],{"class":66},[49,167816,1846],{"class":109},[49,167818,167819],{"class":66},"nums))\n",[19,167821,167822],{},"字典解包为关键字参数：",[39,167824,167826],{"className":31626,"code":167825,"language":31628,"meta":44,"style":44},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[46,167827,167828,167836,167862,167866,167870,167894],{"__ignoreMap":44},[49,167829,167830,167832,167834],{"class":51,"line":52},[49,167831,33195],{"class":109},[49,167833,150397],{"class":62},[49,167835,150400],{"class":66},[49,167837,167838,167840,167842,167844,167846,167848,167850,167852,167854,167856,167858,167860],{"class":51,"line":59},[49,167839,32547],{"class":73},[49,167841,1403],{"class":66},[49,167843,1454],{"class":109},[49,167845,1643],{"class":1505},[49,167847,2286],{"class":73},[49,167849,81036],{"class":66},[49,167851,620],{"class":73},[49,167853,5702],{"class":73},[49,167855,71456],{"class":66},[49,167857,620],{"class":73},[49,167859,1643],{"class":1505},[49,167861,1409],{"class":66},[49,167863,167864],{"class":51,"line":70},[49,167865,3654],{"emptyLinePlaceholder":1330},[49,167867,167868],{"class":51,"line":86},[49,167869,3654],{"emptyLinePlaceholder":1330},[49,167871,167872,167874,167876,167878,167880,167882,167884,167886,167888,167890,167892],{"class":51,"line":98},[49,167873,117538],{"class":66},[49,167875,1448],{"class":109},[49,167877,5702],{"class":66},[49,167879,63915],{"class":1505},[49,167881,77],{"class":66},[49,167883,150913],{"class":1505},[49,167885,13687],{"class":66},[49,167887,70359],{"class":1505},[49,167889,77],{"class":66},[49,167891,2041],{"class":73},[49,167893,137],{"class":66},[49,167895,167896,167898,167900],{"class":51,"line":121},[49,167897,167181],{"class":66},[49,167899,11913],{"class":109},[49,167901,167902],{"class":66},"info)\n",[14,167904,167906],{"id":167905},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167908,167909,167912],{},[46,167910,167911],{},"lambda"," 用于定义简单匿名函数。",[39,167914,167916],{"className":31626,"code":167915,"language":31628,"meta":44,"style":44},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[46,167917,167918,167935],{"__ignoreMap":44},[49,167919,167920,167923,167925,167928,167931,167933],{"class":51,"line":52},[49,167921,167922],{"class":66},"add ",[49,167924,1448],{"class":109},[49,167926,167927],{"class":109}," lambda",[49,167929,167930],{"class":66}," a, b: a ",[49,167932,1872],{"class":109},[49,167934,152129],{"class":66},[49,167936,167937,167939,167941,167943,167945,167947],{"class":51,"line":59},[49,167938,31663],{"class":73},[49,167940,167625],{"class":66},[49,167942,159],{"class":73},[49,167944,13687],{"class":66},[49,167946,1478],{"class":73},[49,167948,31745],{"class":66},[19,167950,167951],{},"常和排序、过滤等函数一起使用。",[19,167953,167954],{},"按分数排序：",[39,167956,167958],{"className":31626,"code":167957,"language":31628,"meta":44,"style":44},"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",[46,167959,167960,167968,167988,168008,168028,168032,168036,168059],{"__ignoreMap":44},[49,167961,167962,167964,167966],{"class":51,"line":52},[49,167963,160741],{"class":66},[49,167965,1448],{"class":109},[49,167967,56686],{"class":66},[49,167969,167970,167972,167974,167976,167978,167980,167982,167984,167986],{"class":51,"line":59},[49,167971,149410],{"class":66},[49,167973,63915],{"class":1505},[49,167975,77],{"class":66},[49,167977,150913],{"class":1505},[49,167979,13687],{"class":66},[49,167981,152497],{"class":1505},[49,167983,77],{"class":66},[49,167985,2378],{"class":73},[49,167987,6184],{"class":66},[49,167989,167990,167992,167994,167996,167998,168000,168002,168004,168006],{"class":51,"line":70},[49,167991,149410],{"class":66},[49,167993,63915],{"class":1505},[49,167995,77],{"class":66},[49,167997,151961],{"class":1505},[49,167999,13687],{"class":66},[49,168001,152497],{"class":1505},[49,168003,77],{"class":66},[49,168005,2201],{"class":73},[49,168007,6184],{"class":66},[49,168009,168010,168012,168014,168016,168018,168020,168022,168024,168026],{"class":51,"line":86},[49,168011,149410],{"class":66},[49,168013,63915],{"class":1505},[49,168015,77],{"class":66},[49,168017,160756],{"class":1505},[49,168019,13687],{"class":66},[49,168021,152497],{"class":1505},[49,168023,77],{"class":66},[49,168025,1798],{"class":73},[49,168027,6184],{"class":66},[49,168029,168030],{"class":51,"line":98},[49,168031,34494],{"class":66},[49,168033,168034],{"class":51,"line":121},[49,168035,3654],{"emptyLinePlaceholder":1330},[49,168037,168038,168041,168043,168045,168047,168049,168051,168053,168055,168057],{"class":51,"line":134},[49,168039,168040],{"class":66},"students.sort(",[49,168042,154971],{"class":6468},[49,168044,154974],{"class":109},[49,168046,154977],{"class":66},[49,168048,152497],{"class":1505},[49,168050,113426],{"class":66},[49,168052,164553],{"class":6468},[49,168054,1448],{"class":109},[49,168056,32724],{"class":73},[49,168058,1409],{"class":66},[49,168060,168061,168063],{"class":51,"line":1085},[49,168062,31663],{"class":73},[49,168064,166020],{"class":66},[19,168066,168067,168068,168070],{},"如果逻辑复杂，不要硬写 ",[46,168069,167911],{},"，定义普通函数更清晰。",[14,168072,168074],{"id":168073},"_79-函数作为参数","7.9 函数作为参数",[19,168076,168077],{},"函数可以作为参数传给另一个函数。",[39,168079,168081],{"className":31626,"code":168080,"language":31628,"meta":44,"style":44},"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",[46,168082,168083,168091,168101,168105,168109,168119,168126,168130,168134],{"__ignoreMap":44},[49,168084,168085,168087,168089],{"class":51,"line":52},[49,168086,33195],{"class":109},[49,168088,6461],{"class":62},[49,168090,152118],{"class":66},[49,168092,168093,168095,168097,168099],{"class":51,"line":59},[49,168094,5344],{"class":109},[49,168096,12121],{"class":66},[49,168098,1872],{"class":109},[49,168100,152129],{"class":66},[49,168102,168103],{"class":51,"line":70},[49,168104,3654],{"emptyLinePlaceholder":1330},[49,168106,168107],{"class":51,"line":86},[49,168108,3654],{"emptyLinePlaceholder":1330},[49,168110,168111,168113,168116],{"class":51,"line":98},[49,168112,33195],{"class":109},[49,168114,168115],{"class":62}," calculate",[49,168117,168118],{"class":66},"(a, b, func):\n",[49,168120,168121,168123],{"class":51,"line":121},[49,168122,5344],{"class":109},[49,168124,168125],{"class":66}," func(a, b)\n",[49,168127,168128],{"class":51,"line":134},[49,168129,3654],{"emptyLinePlaceholder":1330},[49,168131,168132],{"class":51,"line":1085},[49,168133,3654],{"emptyLinePlaceholder":1330},[49,168135,168136,168138,168141,168143,168145,168147],{"class":51,"line":2574},[49,168137,31663],{"class":73},[49,168139,168140],{"class":66},"(calculate(",[49,168142,106],{"class":73},[49,168144,13687],{"class":66},[49,168146,875],{"class":73},[49,168148,168149],{"class":66},", add))\n",[19,168151,168152],{},"这种思想在排序、回调、框架中经常出现。",[14,168154,168156],{"id":168155},"_710-mapfiltersorted","7.10 map、filter、sorted",[183,168158,168160],{"id":168159},"_7101-map","7.10.1 map",[19,168162,168163,168165],{},[46,168164,75273],{}," 对每个元素执行函数。",[39,168167,168169],{"className":31626,"code":168168,"language":31628,"meta":44,"style":44},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[46,168170,168171,168195,168218],{"__ignoreMap":44},[49,168172,168173,168175,168177,168179,168181,168183,168185,168187,168189,168191,168193],{"class":51,"line":52},[49,168174,165125],{"class":66},[49,168176,1448],{"class":109},[49,168178,53468],{"class":66},[49,168180,159],{"class":73},[49,168182,13687],{"class":66},[49,168184,1478],{"class":73},[49,168186,13687],{"class":66},[49,168188,1472],{"class":73},[49,168190,13687],{"class":66},[49,168192,1685],{"class":73},[49,168194,34494],{"class":66},[49,168196,168197,168199,168201,168204,168206,168208,168211,168213,168215],{"class":51,"line":59},[49,168198,162331],{"class":66},[49,168200,1448],{"class":109},[49,168202,168203],{"class":73}," map",[49,168205,1403],{"class":66},[49,168207,167911],{"class":109},[49,168209,168210],{"class":66}," x: x ",[49,168212,1846],{"class":109},[49,168214,16006],{"class":73},[49,168216,168217],{"class":66},", nums)\n",[49,168219,168220,168222,168224,168226],{"class":51,"line":70},[49,168221,31663],{"class":73},[49,168223,1403],{"class":66},[49,168225,155095],{"class":73},[49,168227,167093],{"class":66},[183,168229,168231],{"id":168230},"_7102-filter","7.10.2 filter",[19,168233,168234,168236],{},[46,168235,81277],{}," 保留满足条件的元素。",[39,168238,168240],{"className":31626,"code":168239,"language":31628,"meta":44,"style":44},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[46,168241,168242,168270,168295],{"__ignoreMap":44},[49,168243,168244,168246,168248,168250,168252,168254,168256,168258,168260,168262,168264,168266,168268],{"class":51,"line":52},[49,168245,165125],{"class":66},[49,168247,1448],{"class":109},[49,168249,53468],{"class":66},[49,168251,159],{"class":73},[49,168253,13687],{"class":66},[49,168255,1478],{"class":73},[49,168257,13687],{"class":66},[49,168259,1472],{"class":73},[49,168261,13687],{"class":66},[49,168263,1685],{"class":73},[49,168265,13687],{"class":66},[49,168267,1711],{"class":73},[49,168269,34494],{"class":66},[49,168271,168272,168274,168276,168279,168281,168283,168285,168287,168289,168291,168293],{"class":51,"line":59},[49,168273,162331],{"class":66},[49,168275,1448],{"class":109},[49,168277,168278],{"class":73}," filter",[49,168280,1403],{"class":66},[49,168282,167911],{"class":109},[49,168284,168210],{"class":66},[49,168286,1720],{"class":109},[49,168288,16006],{"class":73},[49,168290,102783],{"class":109},[49,168292,5347],{"class":73},[49,168294,168217],{"class":66},[49,168296,168297,168299,168301,168303],{"class":51,"line":70},[49,168298,31663],{"class":73},[49,168300,1403],{"class":66},[49,168302,155095],{"class":73},[49,168304,167093],{"class":66},[183,168306,168308],{"id":168307},"_7103-sorted","7.10.3 sorted",[19,168310,168311,168313],{},[46,168312,166261],{}," 返回排序后的新列表。",[39,168315,168317],{"className":31626,"code":168316,"language":31628,"meta":44,"style":44},"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",[46,168318,168319,168327,168347,168367,168387,168391,168395,168424],{"__ignoreMap":44},[49,168320,168321,168323,168325],{"class":51,"line":52},[49,168322,160741],{"class":66},[49,168324,1448],{"class":109},[49,168326,56686],{"class":66},[49,168328,168329,168331,168333,168335,168337,168339,168341,168343,168345],{"class":51,"line":59},[49,168330,149410],{"class":66},[49,168332,63915],{"class":1505},[49,168334,77],{"class":66},[49,168336,150913],{"class":1505},[49,168338,13687],{"class":66},[49,168340,152497],{"class":1505},[49,168342,77],{"class":66},[49,168344,2378],{"class":73},[49,168346,6184],{"class":66},[49,168348,168349,168351,168353,168355,168357,168359,168361,168363,168365],{"class":51,"line":70},[49,168350,149410],{"class":66},[49,168352,63915],{"class":1505},[49,168354,77],{"class":66},[49,168356,151961],{"class":1505},[49,168358,13687],{"class":66},[49,168360,152497],{"class":1505},[49,168362,77],{"class":66},[49,168364,2201],{"class":73},[49,168366,6184],{"class":66},[49,168368,168369,168371,168373,168375,168377,168379,168381,168383,168385],{"class":51,"line":86},[49,168370,149410],{"class":66},[49,168372,63915],{"class":1505},[49,168374,77],{"class":66},[49,168376,160756],{"class":1505},[49,168378,13687],{"class":66},[49,168380,152497],{"class":1505},[49,168382,77],{"class":66},[49,168384,1798],{"class":73},[49,168386,6184],{"class":66},[49,168388,168389],{"class":51,"line":98},[49,168390,34494],{"class":66},[49,168392,168393],{"class":51,"line":121},[49,168394,3654],{"emptyLinePlaceholder":1330},[49,168396,168397,168399,168401,168403,168406,168408,168410,168412,168414,168416,168418,168420,168422],{"class":51,"line":134},[49,168398,162331],{"class":66},[49,168400,1448],{"class":109},[49,168402,164629],{"class":73},[49,168404,168405],{"class":66},"(students, ",[49,168407,154971],{"class":6468},[49,168409,154974],{"class":109},[49,168411,154977],{"class":66},[49,168413,152497],{"class":1505},[49,168415,113426],{"class":66},[49,168417,164553],{"class":6468},[49,168419,1448],{"class":109},[49,168421,32724],{"class":73},[49,168423,1409],{"class":66},[49,168425,168426,168428],{"class":51,"line":1085},[49,168427,31663],{"class":73},[49,168429,77814],{"class":66},[14,168431,168433],{"id":168432},"_711-闭包入门","7.11 闭包入门",[19,168435,168436],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[39,168438,168440],{"className":31626,"code":168439,"language":31628,"meta":44,"style":44},"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",[46,168441,168442,168452,168462,168473,168477,168484,168488,168492,168506],{"__ignoreMap":44},[49,168443,168444,168446,168449],{"class":51,"line":52},[49,168445,33195],{"class":109},[49,168447,168448],{"class":62}," outer",[49,168450,168451],{"class":66},"(base):\n",[49,168453,168454,168456,168459],{"class":51,"line":59},[49,168455,32049],{"class":109},[49,168457,168458],{"class":62}," inner",[49,168460,168461],{"class":66},"(num):\n",[49,168463,168464,168466,168469,168471],{"class":51,"line":70},[49,168465,16003],{"class":109},[49,168467,168468],{"class":66}," base ",[49,168470,1872],{"class":109},[49,168472,167604],{"class":66},[49,168474,168475],{"class":51,"line":86},[49,168476,3654],{"emptyLinePlaceholder":1330},[49,168478,168479,168481],{"class":51,"line":98},[49,168480,5344],{"class":109},[49,168482,168483],{"class":66}," inner\n",[49,168485,168486],{"class":51,"line":121},[49,168487,3654],{"emptyLinePlaceholder":1330},[49,168489,168490],{"class":51,"line":134},[49,168491,3654],{"emptyLinePlaceholder":1330},[49,168493,168494,168497,168499,168502,168504],{"class":51,"line":1085},[49,168495,168496],{"class":66},"add_10 ",[49,168498,1448],{"class":109},[49,168500,168501],{"class":66}," outer(",[49,168503,106],{"class":73},[49,168505,1409],{"class":66},[49,168507,168508,168510,168513,168515],{"class":51,"line":2574},[49,168509,31663],{"class":73},[49,168511,168512],{"class":66},"(add_10(",[49,168514,1711],{"class":73},[49,168516,31745],{"class":66},[19,168518,168519],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168521,168523],{"id":168522},"_712-装饰器入门","7.12 装饰器入门",[19,168525,168526],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[39,168528,168530],{"className":31626,"code":168529,"language":31628,"meta":44,"style":44},"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",[46,168531,168532,168541,168550,168561,168566,168577,168581,168588,168592,168596,168601,168609,168619,168623,168627],{"__ignoreMap":44},[49,168533,168534,168536,168538],{"class":51,"line":52},[49,168535,33195],{"class":109},[49,168537,88416],{"class":62},[49,168539,168540],{"class":66},"(func):\n",[49,168542,168543,168545,168548],{"class":51,"line":59},[49,168544,32049],{"class":109},[49,168546,168547],{"class":62}," wrapper",[49,168549,33201],{"class":66},[49,168551,168552,168554,168556,168559],{"class":51,"line":70},[49,168553,33699],{"class":73},[49,168555,1403],{"class":66},[49,168557,168558],{"class":1505},"\"函数开始执行\"",[49,168560,1409],{"class":66},[49,168562,168563],{"class":51,"line":86},[49,168564,168565],{"class":66},"        func()\n",[49,168567,168568,168570,168572,168575],{"class":51,"line":98},[49,168569,33699],{"class":73},[49,168571,1403],{"class":66},[49,168573,168574],{"class":1505},"\"函数执行结束\"",[49,168576,1409],{"class":66},[49,168578,168579],{"class":51,"line":121},[49,168580,3654],{"emptyLinePlaceholder":1330},[49,168582,168583,168585],{"class":51,"line":134},[49,168584,5344],{"class":109},[49,168586,168587],{"class":66}," wrapper\n",[49,168589,168590],{"class":51,"line":1085},[49,168591,3654],{"emptyLinePlaceholder":1330},[49,168593,168594],{"class":51,"line":2574},[49,168595,3654],{"emptyLinePlaceholder":1330},[49,168597,168598],{"class":51,"line":2586},[49,168599,168600],{"class":62},"@log\n",[49,168602,168603,168605,168607],{"class":51,"line":2867},[49,168604,33195],{"class":109},[49,168606,162021],{"class":62},[49,168608,33201],{"class":66},[49,168610,168611,168613,168615,168617],{"class":51,"line":2872},[49,168612,32547],{"class":73},[49,168614,1403],{"class":66},[49,168616,7096],{"class":1505},[49,168618,1409],{"class":66},[49,168620,168621],{"class":51,"line":2878},[49,168622,3654],{"emptyLinePlaceholder":1330},[49,168624,168625],{"class":51,"line":2883},[49,168626,3654],{"emptyLinePlaceholder":1330},[49,168628,168629],{"class":51,"line":2897},[49,168630,162056],{"class":66},[19,168632,159299],{},[39,168634,168636],{"className":31626,"code":168635,"language":31628,"meta":44,"style":44},"say_hello = log(say_hello)\n",[46,168637,168638],{"__ignoreMap":44},[49,168639,168640,168643,168645],{"class":51,"line":52},[49,168641,168642],{"class":66},"say_hello ",[49,168644,1448],{"class":109},[49,168646,168647],{"class":66}," log(say_hello)\n",[19,168649,168650],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168652,168654],{"id":168653},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[39,168656,168658],{"className":31626,"code":168657,"language":31628,"meta":44,"style":44},"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",[46,168659,168660,168668,168685,168695,168714,168724,168731,168735,168741,168745,168749,168753,168761,168771,168775,168779],{"__ignoreMap":44},[49,168661,168662,168664,168666],{"class":51,"line":52},[49,168663,33195],{"class":109},[49,168665,88416],{"class":62},[49,168667,168540],{"class":66},[49,168669,168670,168672,168674,168676,168678,168681,168683],{"class":51,"line":59},[49,168671,32049],{"class":109},[49,168673,168547],{"class":62},[49,168675,1403],{"class":66},[49,168677,1846],{"class":109},[49,168679,168680],{"class":66},"args, ",[49,168682,11913],{"class":109},[49,168684,167691],{"class":66},[49,168686,168687,168689,168691,168693],{"class":51,"line":70},[49,168688,33699],{"class":73},[49,168690,1403],{"class":66},[49,168692,168558],{"class":1505},[49,168694,1409],{"class":66},[49,168696,168697,168700,168702,168705,168707,168709,168711],{"class":51,"line":86},[49,168698,168699],{"class":66},"        result ",[49,168701,1448],{"class":109},[49,168703,168704],{"class":66}," func(",[49,168706,1846],{"class":109},[49,168708,168680],{"class":66},[49,168710,11913],{"class":109},[49,168712,168713],{"class":66},"kwargs)\n",[49,168715,168716,168718,168720,168722],{"class":51,"line":98},[49,168717,33699],{"class":73},[49,168719,1403],{"class":66},[49,168721,168574],{"class":1505},[49,168723,1409],{"class":66},[49,168725,168726,168728],{"class":51,"line":121},[49,168727,16003],{"class":109},[49,168729,168730],{"class":66}," result\n",[49,168732,168733],{"class":51,"line":134},[49,168734,3654],{"emptyLinePlaceholder":1330},[49,168736,168737,168739],{"class":51,"line":1085},[49,168738,5344],{"class":109},[49,168740,168587],{"class":66},[49,168742,168743],{"class":51,"line":2574},[49,168744,3654],{"emptyLinePlaceholder":1330},[49,168746,168747],{"class":51,"line":2586},[49,168748,3654],{"emptyLinePlaceholder":1330},[49,168750,168751],{"class":51,"line":2867},[49,168752,168600],{"class":62},[49,168754,168755,168757,168759],{"class":51,"line":2872},[49,168756,33195],{"class":109},[49,168758,6461],{"class":62},[49,168760,152118],{"class":66},[49,168762,168763,168765,168767,168769],{"class":51,"line":2878},[49,168764,5344],{"class":109},[49,168766,12121],{"class":66},[49,168768,1872],{"class":109},[49,168770,152129],{"class":66},[49,168772,168773],{"class":51,"line":2883},[49,168774,3654],{"emptyLinePlaceholder":1330},[49,168776,168777],{"class":51,"line":2897},[49,168778,3654],{"emptyLinePlaceholder":1330},[49,168780,168781,168783,168785,168787,168789,168791],{"class":51,"line":2902},[49,168782,31663],{"class":73},[49,168784,167625],{"class":66},[49,168786,106],{"class":73},[49,168788,13687],{"class":66},[49,168790,875],{"class":73},[49,168792,31745],{"class":66},[19,168794,168795,168796,102242,168798,168800],{},"这个写法使用 ",[46,168797,167557],{},[46,168799,167672],{}," 接收原函数的所有参数。",[14,168802,168804],{"id":168803},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,168806,124516],{},[591,168808,168809,168812,168815],{},[26,168810,168811],{},"给定一组学生数据。",[26,168813,168814],{},"封装函数，根据传入规则筛选学生。",[26,168816,168817],{},"筛选及格、优秀、未成年学生。",[19,168819,11287],{},[39,168821,168823],{"className":31626,"code":168822,"language":31628,"meta":44,"style":44},"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",[46,168824,168825,168833,168861,168889,168917,168921,168925,168929,168939,168947,168957,168964,168969,168975,168979,168983,169007,169030,169053,169057,169064,169071],{"__ignoreMap":44},[49,168826,168827,168829,168831],{"class":51,"line":52},[49,168828,160741],{"class":66},[49,168830,1448],{"class":109},[49,168832,56686],{"class":66},[49,168834,168835,168837,168839,168841,168843,168845,168847,168849,168851,168853,168855,168857,168859],{"class":51,"line":59},[49,168836,149410],{"class":66},[49,168838,63915],{"class":1505},[49,168840,77],{"class":66},[49,168842,150913],{"class":1505},[49,168844,13687],{"class":66},[49,168846,70359],{"class":1505},[49,168848,77],{"class":66},[49,168850,2041],{"class":73},[49,168852,13687],{"class":66},[49,168854,152497],{"class":1505},[49,168856,77],{"class":66},[49,168858,2378],{"class":73},[49,168860,6184],{"class":66},[49,168862,168863,168865,168867,168869,168871,168873,168875,168877,168879,168881,168883,168885,168887],{"class":51,"line":70},[49,168864,149410],{"class":66},[49,168866,63915],{"class":1505},[49,168868,77],{"class":66},[49,168870,151961],{"class":1505},[49,168872,13687],{"class":66},[49,168874,70359],{"class":1505},[49,168876,77],{"class":66},[49,168878,2016],{"class":73},[49,168880,13687],{"class":66},[49,168882,152497],{"class":1505},[49,168884,77],{"class":66},[49,168886,2201],{"class":73},[49,168888,6184],{"class":66},[49,168890,168891,168893,168895,168897,168899,168901,168903,168905,168907,168909,168911,168913,168915],{"class":51,"line":86},[49,168892,149410],{"class":66},[49,168894,63915],{"class":1505},[49,168896,77],{"class":66},[49,168898,160756],{"class":1505},[49,168900,13687],{"class":66},[49,168902,70359],{"class":1505},[49,168904,77],{"class":66},[49,168906,2066],{"class":73},[49,168908,13687],{"class":66},[49,168910,152497],{"class":1505},[49,168912,77],{"class":66},[49,168914,2272],{"class":73},[49,168916,6184],{"class":66},[49,168918,168919],{"class":51,"line":98},[49,168920,34494],{"class":66},[49,168922,168923],{"class":51,"line":121},[49,168924,3654],{"emptyLinePlaceholder":1330},[49,168926,168927],{"class":51,"line":134},[49,168928,3654],{"emptyLinePlaceholder":1330},[49,168930,168931,168933,168936],{"class":51,"line":1085},[49,168932,33195],{"class":109},[49,168934,168935],{"class":62}," filter_students",[49,168937,168938],{"class":66},"(students, condition):\n",[49,168940,168941,168943,168945],{"class":51,"line":2574},[49,168942,162248],{"class":66},[49,168944,1448],{"class":109},[49,168946,53080],{"class":66},[49,168948,168949,168951,168953,168955],{"class":51,"line":2586},[49,168950,4455],{"class":109},[49,168952,153162],{"class":66},[49,168954,27292],{"class":109},[49,168956,153167],{"class":66},[49,168958,168959,168961],{"class":51,"line":2867},[49,168960,3751],{"class":109},[49,168962,168963],{"class":66}," condition(student):\n",[49,168965,168966],{"class":51,"line":2872},[49,168967,168968],{"class":66},"            result.append(student)\n",[49,168970,168971,168973],{"class":51,"line":2878},[49,168972,5344],{"class":109},[49,168974,168730],{"class":66},[49,168976,168977],{"class":51,"line":2883},[49,168978,3654],{"emptyLinePlaceholder":1330},[49,168980,168981],{"class":51,"line":2897},[49,168982,3654],{"emptyLinePlaceholder":1330},[49,168984,168985,168987,168989,168992,168994,168997,168999,169001,169003,169005],{"class":51,"line":2902},[49,168986,166726],{"class":66},[49,168988,1448],{"class":109},[49,168990,168991],{"class":66}," filter_students(students, ",[49,168993,167911],{"class":109},[49,168995,168996],{"class":66}," s: s[",[49,168998,152497],{"class":1505},[49,169000,5697],{"class":66},[49,169002,2965],{"class":109},[49,169004,158862],{"class":73},[49,169006,1409],{"class":66},[49,169008,169009,169012,169014,169016,169018,169020,169022,169024,169026,169028],{"class":51,"line":2908},[49,169010,169011],{"class":66},"excellent ",[49,169013,1448],{"class":109},[49,169015,168991],{"class":66},[49,169017,167911],{"class":109},[49,169019,168996],{"class":66},[49,169021,152497],{"class":1505},[49,169023,5697],{"class":66},[49,169025,2965],{"class":109},[49,169027,158813],{"class":73},[49,169029,1409],{"class":66},[49,169031,169032,169035,169037,169039,169041,169043,169045,169047,169049,169051],{"class":51,"line":2929},[49,169033,169034],{"class":66},"under_age ",[49,169036,1448],{"class":109},[49,169038,168991],{"class":66},[49,169040,167911],{"class":109},[49,169042,168996],{"class":66},[49,169044,70359],{"class":1505},[49,169046,5697],{"class":66},[49,169048,2300],{"class":109},[49,169050,157310],{"class":73},[49,169052,1409],{"class":66},[49,169054,169055],{"class":51,"line":2934},[49,169056,3654],{"emptyLinePlaceholder":1330},[49,169058,169059,169061],{"class":51,"line":2948},[49,169060,31663],{"class":73},[49,169062,169063],{"class":66},"(passed)\n",[49,169065,169066,169068],{"class":51,"line":2953},[49,169067,31663],{"class":73},[49,169069,169070],{"class":66},"(excellent)\n",[49,169072,169073,169075],{"class":51,"line":2982},[49,169074,31663],{"class":73},[49,169076,169077],{"class":66},"(under_age)\n",[14,169079,169081],{"id":169080},"_715-易错点","7.15 易错点",[591,169083,169084,169087,169095,169100,169111],{},[26,169085,169086],{},"默认参数不要写可变对象。",[26,169088,169089,169091,169092,169094],{},[46,169090,167557],{}," 是元组，",[46,169093,167672],{}," 是字典。",[26,169096,169097,169099],{},[46,169098,167911],{}," 只适合简单表达式。",[26,169101,169102,102242,169104,169106,169107,169110],{},[46,169103,75273],{},[46,169105,81277],{}," 的结果是迭代器，常用 ",[46,169108,169109],{},"list()"," 转换查看。",[26,169112,169113],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169115,169117],{"id":169116},"_716-本章练习","7.16 本章练习",[591,169119,169120,169127,169133,169138,169143],{},[26,169121,169122,169123,169126],{},"写函数 ",[46,169124,169125],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[26,169128,169122,169129,169132],{},[46,169130,169131],{},"print_user(**kwargs)","，输出用户所有字段。",[26,169134,105590,169135,169137],{},[46,169136,167911],{}," 对学生列表按年龄排序。",[26,169139,105590,169140,169142],{},[46,169141,81277],{}," 找出成绩不及格的学生。",[26,169144,169145],{},"写一个装饰器，统计函数执行前后的提示信息。",[1305,169147,169148],{},"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":44,"searchDepth":59,"depth":59,"links":169150},[169151,169152,169153,169154,169155,169156,169160,169161,169162,169163,169168,169169,169170,169171,169172,169173],{"id":167009,"depth":59,"text":167010},{"id":167123,"depth":59,"text":167124},{"id":167212,"depth":59,"text":167213},{"id":167274,"depth":59,"text":167275},{"id":167420,"depth":59,"text":167421},{"id":167547,"depth":59,"text":167548,"children":169157},[169158,169159],{"id":167551,"depth":70,"text":167552},{"id":167666,"depth":70,"text":167667},{"id":167747,"depth":59,"text":167748},{"id":167905,"depth":59,"text":167906},{"id":168073,"depth":59,"text":168074},{"id":168155,"depth":59,"text":168156,"children":169164},[169165,169166,169167],{"id":168159,"depth":70,"text":168160},{"id":168230,"depth":70,"text":168231},{"id":168307,"depth":70,"text":168308},{"id":168432,"depth":59,"text":168433},{"id":168522,"depth":59,"text":168523},{"id":168653,"depth":59,"text":168654},{"id":168803,"depth":59,"text":168804},{"id":169080,"depth":59,"text":169081},{"id":169116,"depth":59,"text":169117},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167001,"description":1327},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169180,"title":169181,"body":169182,"description":1327,"extension":1328,"meta":171701,"navigation":1330,"path":171702,"seo":171703,"stem":171704,"__hash__":171705},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169183,"toc":171676},[169184,169187,169191,169194,169197,169228,169232,169236,169239,169266,169270,169273,169324,169327,169342,169345,169380,169384,169386,169410,169413,169473,169477,169481,169484,169541,169544,169564,169568,169571,169634,169638,169641,169697,169704,169728,169732,169735,169798,169802,169807,169858,169861,169865,169870,169937,169940,170022,170026,170031,170082,170085,170089,170092,170095,170103,170106,170152,170155,170201,170205,170211,170255,170258,170304,170307,170347,170350,170411,170415,170418,170508,170511,170653,170656,170723,170727,170730,170733,170874,170877,170955,170958,171134,171138,171140,171151,171153,171352,171356,171600,171604,171638,171642,171673],[10,169185,169181],{"id":169186},"_8-文件操作",[14,169188,169190],{"id":169189},"_81-文件操作的意义","8.1 文件操作的意义",[19,169192,169193],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169195,169196],{},"常见文件类型：",[591,169198,169199,169205,169211,169217,169223],{},[26,169200,169201,169204],{},[46,169202,169203],{},".txt","：普通文本。",[26,169206,169207,169210],{},[46,169208,169209],{},".csv","：表格文本。",[26,169212,169213,169216],{},[46,169214,169215],{},".json","：结构化数据。",[26,169218,169219,169222],{},[46,169220,169221],{},".log","：日志文件。",[26,169224,169225,169227],{},[46,169226,147377],{},"：Python 源代码。",[14,169229,169231],{"id":169230},"_82-路径","8.2 路径",[183,169233,169235],{"id":169234},"_821-相对路径","8.2.1 相对路径",[19,169237,169238],{},"相对当前运行目录：",[39,169240,169242],{"className":31626,"code":169241,"language":31628,"meta":44,"style":44},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[46,169243,169244],{"__ignoreMap":44},[49,169245,169246,169248,169250,169252,169254,169256,169258,169260,169262,169264],{"class":51,"line":52},[49,169247,88140],{"class":73},[49,169249,1403],{"class":66},[49,169251,147821],{"class":1505},[49,169253,13687],{"class":66},[49,169255,147826],{"class":1505},[49,169257,13687],{"class":66},[49,169259,147831],{"class":6468},[49,169261,1448],{"class":109},[49,169263,147836],{"class":1505},[49,169265,1409],{"class":66},[183,169267,169269],{"id":169268},"_822-绝对路径","8.2.2 绝对路径",[19,169271,169272],{},"从根目录或盘符开始：",[39,169274,169276],{"className":31626,"code":169275,"language":31628,"meta":44,"style":44},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[46,169277,169278,169301],{"__ignoreMap":44},[49,169279,169280,169282,169284,169287,169289,169291,169293,169295,169297,169299],{"class":51,"line":52},[49,169281,88140],{"class":73},[49,169283,1403],{"class":66},[49,169285,169286],{"class":1505},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[49,169288,13687],{"class":66},[49,169290,147826],{"class":1505},[49,169292,13687],{"class":66},[49,169294,147831],{"class":6468},[49,169296,1448],{"class":109},[49,169298,147836],{"class":1505},[49,169300,1409],{"class":66},[49,169302,169303,169305,169307,169310,169312,169314,169316,169318,169320,169322],{"class":51,"line":59},[49,169304,88140],{"class":73},[49,169306,1403],{"class":66},[49,169308,169309],{"class":1505},"\"D:\u002Fdata\u002Fdata.txt\"",[49,169311,13687],{"class":66},[49,169313,147826],{"class":1505},[49,169315,13687],{"class":66},[49,169317,147831],{"class":6468},[49,169319,1448],{"class":109},[49,169321,147836],{"class":1505},[49,169323,1409],{"class":66},[19,169325,169326],{},"Windows 路径建议写成：",[39,169328,169330],{"className":31626,"code":169329,"language":31628,"meta":44,"style":44},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[46,169331,169332],{"__ignoreMap":44},[49,169333,169334,169337,169339],{"class":51,"line":52},[49,169335,169336],{"class":66},"path ",[49,169338,1448],{"class":109},[49,169340,169341],{"class":1505}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169343,169344],{},"或原始字符串：",[39,169346,169348],{"className":31626,"code":169347,"language":31628,"meta":44,"style":44},"path = r\"D:\\data\\data.txt\"\n",[46,169349,169350],{"__ignoreMap":44},[49,169351,169352,169354,169356,169358,169360,169363,169366,169369,169371,169373,169375,169378],{"class":51,"line":52},[49,169353,169336],{"class":66},[49,169355,1448],{"class":109},[49,169357,18371],{"class":109},[49,169359,1643],{"class":1505},[49,169361,169362],{"class":49225},"D:",[49,169364,169365],{"class":73},"\\d",[49,169367,169368],{"class":49225},"ata",[49,169370,169365],{"class":73},[49,169372,169368],{"class":49225},[49,169374,1949],{"class":73},[49,169376,169377],{"class":49225},"txt",[49,169379,26382],{"class":1505},[14,169381,169383],{"id":169382},"_83-open函数","8.3 open函数",[19,169385,6435],{},[39,169387,169389],{"className":31626,"code":169388,"language":31628,"meta":44,"style":44},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[46,169390,169391],{"__ignoreMap":44},[49,169392,169393,169395,169397,169399,169402,169404,169406,169408],{"class":51,"line":52},[49,169394,46602],{"class":6468},[49,169396,14816],{"class":109},[49,169398,147816],{"class":73},[49,169400,169401],{"class":66},"(文件路径, 打开模式, ",[49,169403,147831],{"class":6468},[49,169405,1448],{"class":109},[49,169407,147836],{"class":1505},[49,169409,1409],{"class":66},[19,169411,169412],{},"常见模式：",[293,169414,169415,169424],{},[296,169416,169417],{},[299,169418,169419,169422],{},[302,169420,169421],{},"模式",[302,169423,27118],{},[310,169425,169426,169435,169444,169453,169463],{},[299,169427,169428,169432],{},[315,169429,169430],{},[46,169431,2061],{},[315,169433,169434],{},"只读，文件不存在会报错",[299,169436,169437,169441],{},[315,169438,169439],{},[46,169440,2185],{},[315,169442,169443],{},"只写，文件不存在会创建，存在会清空",[299,169445,169446,169450],{},[315,169447,169448],{},[46,169449,1630],{},[315,169451,169452],{},"追加，文件不存在会创建",[299,169454,169455,169460],{},[315,169456,169457],{},[46,169458,169459],{},"rb",[315,169461,169462],{},"二进制只读",[299,169464,169465,169470],{},[315,169466,169467],{},[46,169468,169469],{},"wb",[315,169471,169472],{},"二进制只写",[14,169474,169476],{"id":169475},"_84-读取文件","8.4 读取文件",[183,169478,169480],{"id":169479},"_841-read","8.4.1 read",[19,169482,169483],{},"一次读取全部内容：",[39,169485,169487],{"className":31626,"code":169486,"language":31628,"meta":44,"style":44},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[46,169488,169489,169515,169527,169534],{"__ignoreMap":44},[49,169490,169491,169493,169495,169497,169499,169501,169503,169505,169507,169509,169511,169513],{"class":51,"line":52},[49,169492,46602],{"class":6468},[49,169494,14816],{"class":109},[49,169496,147816],{"class":73},[49,169498,1403],{"class":66},[49,169500,147821],{"class":1505},[49,169502,13687],{"class":66},[49,169504,147826],{"class":1505},[49,169506,13687],{"class":66},[49,169508,147831],{"class":6468},[49,169510,1448],{"class":109},[49,169512,147836],{"class":1505},[49,169514,1409],{"class":66},[49,169516,169517,169520,169522,169524],{"class":51,"line":59},[49,169518,169519],{"class":66},"content ",[49,169521,1448],{"class":109},[49,169523,149178],{"class":6468},[49,169525,169526],{"class":66},".read()\n",[49,169528,169529,169531],{"class":51,"line":70},[49,169530,31663],{"class":73},[49,169532,169533],{"class":66},"(content)\n",[49,169535,169536,169538],{"class":51,"line":86},[49,169537,46602],{"class":6468},[49,169539,169540],{"class":66},".close()\n",[19,169542,169543],{},"可以指定读取字符数：",[39,169545,169547],{"className":31626,"code":169546,"language":31628,"meta":44,"style":44},"content = file.read(10)\n",[46,169548,169549],{"__ignoreMap":44},[49,169550,169551,169553,169555,169557,169560,169562],{"class":51,"line":52},[49,169552,169519],{"class":66},[49,169554,1448],{"class":109},[49,169556,149178],{"class":6468},[49,169558,169559],{"class":66},".read(",[49,169561,106],{"class":73},[49,169563,1409],{"class":66},[183,169565,169567],{"id":169566},"_842-readline","8.4.2 readline",[19,169569,169570],{},"一次读取一行：",[39,169572,169574],{"className":31626,"code":169573,"language":31628,"meta":44,"style":44},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[46,169575,169576,169602,169606,169617,169624,169628],{"__ignoreMap":44},[49,169577,169578,169580,169582,169584,169586,169588,169590,169592,169594,169596,169598,169600],{"class":51,"line":52},[49,169579,46602],{"class":6468},[49,169581,14816],{"class":109},[49,169583,147816],{"class":73},[49,169585,1403],{"class":66},[49,169587,147821],{"class":1505},[49,169589,13687],{"class":66},[49,169591,147826],{"class":1505},[49,169593,13687],{"class":66},[49,169595,147831],{"class":6468},[49,169597,1448],{"class":109},[49,169599,147836],{"class":1505},[49,169601,1409],{"class":66},[49,169603,169604],{"class":51,"line":59},[49,169605,3654],{"emptyLinePlaceholder":1330},[49,169607,169608,169610,169612,169614],{"class":51,"line":70},[49,169609,148277],{"class":66},[49,169611,1448],{"class":109},[49,169613,149178],{"class":6468},[49,169615,169616],{"class":66},".readline()\n",[49,169618,169619,169621],{"class":51,"line":86},[49,169620,31663],{"class":73},[49,169622,169623],{"class":66},"(line)\n",[49,169625,169626],{"class":51,"line":98},[49,169627,3654],{"emptyLinePlaceholder":1330},[49,169629,169630,169632],{"class":51,"line":121},[49,169631,46602],{"class":6468},[49,169633,169540],{"class":66},[183,169635,169637],{"id":169636},"_843-readlines","8.4.3 readlines",[19,169639,169640],{},"读取所有行，返回列表：",[39,169642,169644],{"className":31626,"code":169643,"language":31628,"meta":44,"style":44},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[46,169645,169646,169672,169684,169691],{"__ignoreMap":44},[49,169647,169648,169650,169652,169654,169656,169658,169660,169662,169664,169666,169668,169670],{"class":51,"line":52},[49,169649,46602],{"class":6468},[49,169651,14816],{"class":109},[49,169653,147816],{"class":73},[49,169655,1403],{"class":66},[49,169657,147821],{"class":1505},[49,169659,13687],{"class":66},[49,169661,147826],{"class":1505},[49,169663,13687],{"class":66},[49,169665,147831],{"class":6468},[49,169667,1448],{"class":109},[49,169669,147836],{"class":1505},[49,169671,1409],{"class":66},[49,169673,169674,169677,169679,169681],{"class":51,"line":59},[49,169675,169676],{"class":66},"lines ",[49,169678,1448],{"class":109},[49,169680,149178],{"class":6468},[49,169682,169683],{"class":66},".readlines()\n",[49,169685,169686,169688],{"class":51,"line":70},[49,169687,31663],{"class":73},[49,169689,169690],{"class":66},"(lines)\n",[49,169692,169693,169695],{"class":51,"line":86},[49,169694,46602],{"class":6468},[49,169696,169540],{"class":66},[19,169698,169699,169700,169703],{},"每一行通常带有换行符，可以用 ",[46,169701,169702],{},"strip()"," 去掉：",[39,169705,169707],{"className":31626,"code":169706,"language":31628,"meta":44,"style":44},"for line in lines:\n    print(line.strip())\n",[46,169708,169709,169721],{"__ignoreMap":44},[49,169710,169711,169713,169716,169718],{"class":51,"line":52},[49,169712,4279],{"class":109},[49,169714,169715],{"class":66}," line ",[49,169717,27292],{"class":109},[49,169719,169720],{"class":66}," lines:\n",[49,169722,169723,169725],{"class":51,"line":59},[49,169724,32547],{"class":73},[49,169726,169727],{"class":66},"(line.strip())\n",[183,169729,169731],{"id":169730},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169733,169734],{},"推荐读取大文件时使用：",[39,169736,169738],{"className":31626,"code":169737,"language":31628,"meta":44,"style":44},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[46,169739,169740,169766,169770,169782,169788,169792],{"__ignoreMap":44},[49,169741,169742,169744,169746,169748,169750,169752,169754,169756,169758,169760,169762,169764],{"class":51,"line":52},[49,169743,46602],{"class":6468},[49,169745,14816],{"class":109},[49,169747,147816],{"class":73},[49,169749,1403],{"class":66},[49,169751,147821],{"class":1505},[49,169753,13687],{"class":66},[49,169755,147826],{"class":1505},[49,169757,13687],{"class":66},[49,169759,147831],{"class":6468},[49,169761,1448],{"class":109},[49,169763,147836],{"class":1505},[49,169765,1409],{"class":66},[49,169767,169768],{"class":51,"line":59},[49,169769,3654],{"emptyLinePlaceholder":1330},[49,169771,169772,169774,169776,169778,169780],{"class":51,"line":70},[49,169773,4279],{"class":109},[49,169775,169715],{"class":66},[49,169777,27292],{"class":109},[49,169779,149178],{"class":6468},[49,169781,4993],{"class":66},[49,169783,169784,169786],{"class":51,"line":86},[49,169785,32547],{"class":73},[49,169787,169727],{"class":66},[49,169789,169790],{"class":51,"line":98},[49,169791,3654],{"emptyLinePlaceholder":1330},[49,169793,169794,169796],{"class":51,"line":121},[49,169795,46602],{"class":6468},[49,169797,169540],{"class":66},[14,169799,169801],{"id":169800},"_85-with语句","8.5 with语句",[19,169803,169804,169806],{},[46,169805,109057],{}," 会自动关闭文件，推荐使用。",[39,169808,169810],{"className":31626,"code":169809,"language":31628,"meta":44,"style":44},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[46,169811,169812,169842,169852],{"__ignoreMap":44},[49,169813,169814,169816,169818,169820,169822,169824,169826,169828,169830,169832,169834,169836,169838,169840],{"class":51,"line":52},[49,169815,109057],{"class":109},[49,169817,147816],{"class":73},[49,169819,1403],{"class":66},[49,169821,147821],{"class":1505},[49,169823,13687],{"class":66},[49,169825,147826],{"class":1505},[49,169827,13687],{"class":66},[49,169829,147831],{"class":6468},[49,169831,1448],{"class":109},[49,169833,147836],{"class":1505},[49,169835,14966],{"class":66},[49,169837,32631],{"class":109},[49,169839,149178],{"class":6468},[49,169841,4993],{"class":66},[49,169843,169844,169846,169848,169850],{"class":51,"line":59},[49,169845,147848],{"class":66},[49,169847,1448],{"class":109},[49,169849,149178],{"class":6468},[49,169851,169526],{"class":66},[49,169853,169854,169856],{"class":51,"line":70},[49,169855,32547],{"class":73},[49,169857,169533],{"class":66},[19,169859,169860],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169862,169864],{"id":169863},"_86-写入文件","8.6 写入文件",[19,169866,169867,169869],{},[46,169868,2185],{}," 模式会清空原文件。",[39,169871,169873],{"className":31626,"code":169872,"language":31628,"meta":44,"style":44},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[46,169874,169875,169905,169922],{"__ignoreMap":44},[49,169876,169877,169879,169881,169883,169885,169887,169889,169891,169893,169895,169897,169899,169901,169903],{"class":51,"line":52},[49,169878,109057],{"class":109},[49,169880,147816],{"class":73},[49,169882,1403],{"class":66},[49,169884,147821],{"class":1505},[49,169886,13687],{"class":66},[49,169888,153001],{"class":1505},[49,169890,13687],{"class":66},[49,169892,147831],{"class":6468},[49,169894,1448],{"class":109},[49,169896,147836],{"class":1505},[49,169898,14966],{"class":66},[49,169900,32631],{"class":109},[49,169902,149178],{"class":6468},[49,169904,4993],{"class":66},[49,169906,169907,169910,169913,169916,169918,169920],{"class":51,"line":59},[49,169908,169909],{"class":6468},"    file",[49,169911,169912],{"class":66},".write(",[49,169914,169915],{"class":1505},"\"hello",[49,169917,157550],{"class":73},[49,169919,1643],{"class":1505},[49,169921,1409],{"class":66},[49,169923,169924,169926,169928,169931,169933,169935],{"class":51,"line":70},[49,169925,169909],{"class":6468},[49,169927,169912],{"class":66},[49,169929,169930],{"class":1505},"\"python",[49,169932,157550],{"class":73},[49,169934,1643],{"class":1505},[49,169936,1409],{"class":66},[19,169938,169939],{},"写入多行：",[39,169941,169943],{"className":31626,"code":169942,"language":31628,"meta":44,"style":44},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[46,169944,169945,169980,169984,170015],{"__ignoreMap":44},[49,169946,169947,169949,169951,169953,169956,169958,169960,169962,169965,169967,169969,169971,169974,169976,169978],{"class":51,"line":52},[49,169948,169676],{"class":66},[49,169950,1448],{"class":109},[49,169952,53468],{"class":66},[49,169954,169955],{"class":1505},"\"小明,18",[49,169957,157550],{"class":73},[49,169959,1643],{"class":1505},[49,169961,13687],{"class":66},[49,169963,169964],{"class":1505},"\"小红,17",[49,169966,157550],{"class":73},[49,169968,1643],{"class":1505},[49,169970,13687],{"class":66},[49,169972,169973],{"class":1505},"\"小刚,19",[49,169975,157550],{"class":73},[49,169977,1643],{"class":1505},[49,169979,34494],{"class":66},[49,169981,169982],{"class":51,"line":59},[49,169983,3654],{"emptyLinePlaceholder":1330},[49,169985,169986,169988,169990,169992,169995,169997,169999,170001,170003,170005,170007,170009,170011,170013],{"class":51,"line":70},[49,169987,109057],{"class":109},[49,169989,147816],{"class":73},[49,169991,1403],{"class":66},[49,169993,169994],{"class":1505},"\"students.txt\"",[49,169996,13687],{"class":66},[49,169998,153001],{"class":1505},[49,170000,13687],{"class":66},[49,170002,147831],{"class":6468},[49,170004,1448],{"class":109},[49,170006,147836],{"class":1505},[49,170008,14966],{"class":66},[49,170010,32631],{"class":109},[49,170012,149178],{"class":6468},[49,170014,4993],{"class":66},[49,170016,170017,170019],{"class":51,"line":86},[49,170018,169909],{"class":6468},[49,170020,170021],{"class":66},".writelines(lines)\n",[14,170023,170025],{"id":170024},"_87-追加文件","8.7 追加文件",[19,170027,170028,170030],{},[46,170029,1630],{}," 模式不会清空原内容，而是在末尾追加。",[39,170032,170034],{"className":31626,"code":170033,"language":31628,"meta":44,"style":44},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[46,170035,170036,170067],{"__ignoreMap":44},[49,170037,170038,170040,170042,170044,170047,170049,170051,170053,170055,170057,170059,170061,170063,170065],{"class":51,"line":52},[49,170039,109057],{"class":109},[49,170041,147816],{"class":73},[49,170043,1403],{"class":66},[49,170045,170046],{"class":1505},"\"log.txt\"",[49,170048,13687],{"class":66},[49,170050,166350],{"class":1505},[49,170052,13687],{"class":66},[49,170054,147831],{"class":6468},[49,170056,1448],{"class":109},[49,170058,147836],{"class":1505},[49,170060,14966],{"class":66},[49,170062,32631],{"class":109},[49,170064,149178],{"class":6468},[49,170066,4993],{"class":66},[49,170068,170069,170071,170073,170076,170078,170080],{"class":51,"line":59},[49,170070,169909],{"class":6468},[49,170072,169912],{"class":66},[49,170074,170075],{"class":1505},"\"程序启动",[49,170077,157550],{"class":73},[49,170079,1643],{"class":1505},[49,170081,1409],{"class":66},[19,170083,170084],{},"日志类文件常用追加模式。",[14,170086,170088],{"id":170087},"_88-文件编码","8.8 文件编码",[19,170090,170091],{},"编码决定文字如何保存为字节。",[19,170093,170094],{},"常见编码：",[591,170096,170097,170100],{},[26,170098,170099],{},"UTF-8：推荐。",[26,170101,170102],{},"GBK：部分 Windows 中文文件常见。",[19,170104,170105],{},"读取文件乱码时，可以尝试：",[39,170107,170109],{"className":31626,"code":170108,"language":31628,"meta":44,"style":44},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[46,170110,170111,170142],{"__ignoreMap":44},[49,170112,170113,170115,170117,170119,170121,170123,170125,170127,170129,170131,170134,170136,170138,170140],{"class":51,"line":52},[49,170114,109057],{"class":109},[49,170116,147816],{"class":73},[49,170118,1403],{"class":66},[49,170120,147821],{"class":1505},[49,170122,13687],{"class":66},[49,170124,147826],{"class":1505},[49,170126,13687],{"class":66},[49,170128,147831],{"class":6468},[49,170130,1448],{"class":109},[49,170132,170133],{"class":1505},"\"gbk\"",[49,170135,14966],{"class":66},[49,170137,32631],{"class":109},[49,170139,149178],{"class":6468},[49,170141,4993],{"class":66},[49,170143,170144,170146,170148,170150],{"class":51,"line":59},[49,170145,147848],{"class":66},[49,170147,1448],{"class":109},[49,170149,149178],{"class":6468},[49,170151,169526],{"class":66},[19,170153,170154],{},"写文件时建议统一 UTF-8：",[39,170156,170158],{"className":31626,"code":170157,"language":31628,"meta":44,"style":44},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[46,170159,170160,170190],{"__ignoreMap":44},[49,170161,170162,170164,170166,170168,170170,170172,170174,170176,170178,170180,170182,170184,170186,170188],{"class":51,"line":52},[49,170163,109057],{"class":109},[49,170165,147816],{"class":73},[49,170167,1403],{"class":66},[49,170169,147821],{"class":1505},[49,170171,13687],{"class":66},[49,170173,153001],{"class":1505},[49,170175,13687],{"class":66},[49,170177,147831],{"class":6468},[49,170179,1448],{"class":109},[49,170181,147836],{"class":1505},[49,170183,14966],{"class":66},[49,170185,32631],{"class":109},[49,170187,149178],{"class":6468},[49,170189,4993],{"class":66},[49,170191,170192,170194,170196,170199],{"class":51,"line":59},[49,170193,169909],{"class":6468},[49,170195,169912],{"class":66},[49,170197,170198],{"class":1505},"\"中文内容\"",[49,170200,1409],{"class":66},[14,170202,170204],{"id":170203},"_89-pathlib","8.9 pathlib",[19,170206,170207,170210],{},[46,170208,170209],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[39,170212,170214],{"className":31626,"code":170213,"language":31628,"meta":44,"style":44},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[46,170215,170216,170226,170230,170248],{"__ignoreMap":44},[49,170217,170218,170220,170222,170224],{"class":51,"line":52},[49,170219,31985],{"class":109},[49,170221,109535],{"class":66},[49,170223,31640],{"class":109},[49,170225,109540],{"class":66},[49,170227,170228],{"class":51,"line":59},[49,170229,3654],{"emptyLinePlaceholder":1330},[49,170231,170232,170234,170236,170238,170241,170243,170245],{"class":51,"line":70},[49,170233,169336],{"class":66},[49,170235,1448],{"class":109},[49,170237,109769],{"class":66},[49,170239,170240],{"class":1505},"\"data\"",[49,170242,14966],{"class":66},[49,170244,1975],{"class":109},[49,170246,170247],{"class":1505}," \"students.txt\"\n",[49,170249,170250,170252],{"class":51,"line":86},[49,170251,31663],{"class":73},[49,170253,170254],{"class":66},"(path)\n",[19,170256,170257],{},"创建目录：",[39,170259,170261],{"className":31626,"code":170260,"language":31628,"meta":44,"style":44},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[46,170262,170263,170273,170277,170290],{"__ignoreMap":44},[49,170264,170265,170267,170269,170271],{"class":51,"line":52},[49,170266,31985],{"class":109},[49,170268,109535],{"class":66},[49,170270,31640],{"class":109},[49,170272,109540],{"class":66},[49,170274,170275],{"class":51,"line":59},[49,170276,3654],{"emptyLinePlaceholder":1330},[49,170278,170279,170282,170284,170286,170288],{"class":51,"line":70},[49,170280,170281],{"class":66},"data_dir ",[49,170283,1448],{"class":109},[49,170285,109769],{"class":66},[49,170287,170240],{"class":1505},[49,170289,1409],{"class":66},[49,170291,170292,170295,170298,170300,170302],{"class":51,"line":86},[49,170293,170294],{"class":66},"data_dir.mkdir(",[49,170296,170297],{"class":6468},"exist_ok",[49,170299,1448],{"class":109},[49,170301,32724],{"class":73},[49,170303,1409],{"class":66},[19,170305,170306],{},"判断文件是否存在：",[39,170308,170310],{"className":31626,"code":170309,"language":31628,"meta":44,"style":44},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[46,170311,170312,170325,170329,170336],{"__ignoreMap":44},[49,170313,170314,170316,170318,170320,170323],{"class":51,"line":52},[49,170315,169336],{"class":66},[49,170317,1448],{"class":109},[49,170319,109769],{"class":66},[49,170321,170322],{"class":1505},"\"data\u002Fstudents.txt\"",[49,170324,1409],{"class":66},[49,170326,170327],{"class":51,"line":59},[49,170328,3654],{"emptyLinePlaceholder":1330},[49,170330,170331,170333],{"class":51,"line":70},[49,170332,2787],{"class":109},[49,170334,170335],{"class":66}," path.exists():\n",[49,170337,170338,170340,170342,170345],{"class":51,"line":86},[49,170339,32547],{"class":73},[49,170341,1403],{"class":66},[49,170343,170344],{"class":1505},"\"文件存在\"",[49,170346,1409],{"class":66},[19,170348,170349],{},"读写文本：",[39,170351,170353],{"className":31626,"code":170352,"language":31628,"meta":44,"style":44},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[46,170354,170355,170367,170371,170388,170405],{"__ignoreMap":44},[49,170356,170357,170359,170361,170363,170365],{"class":51,"line":52},[49,170358,169336],{"class":66},[49,170360,1448],{"class":109},[49,170362,109769],{"class":66},[49,170364,147821],{"class":1505},[49,170366,1409],{"class":66},[49,170368,170369],{"class":51,"line":59},[49,170370,3654],{"emptyLinePlaceholder":1330},[49,170372,170373,170376,170378,170380,170382,170384,170386],{"class":51,"line":70},[49,170374,170375],{"class":66},"path.write_text(",[49,170377,146901],{"class":1505},[49,170379,13687],{"class":66},[49,170381,147831],{"class":6468},[49,170383,1448],{"class":109},[49,170385,147836],{"class":1505},[49,170387,1409],{"class":66},[49,170389,170390,170392,170394,170397,170399,170401,170403],{"class":51,"line":86},[49,170391,169519],{"class":66},[49,170393,1448],{"class":109},[49,170395,170396],{"class":66}," path.read_text(",[49,170398,147831],{"class":6468},[49,170400,1448],{"class":109},[49,170402,147836],{"class":1505},[49,170404,1409],{"class":66},[49,170406,170407,170409],{"class":51,"line":98},[49,170408,31663],{"class":73},[49,170410,169533],{"class":66},[14,170412,170414],{"id":170413},"_810-json文件","8.10 JSON文件",[19,170416,170417],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[39,170419,170421],{"className":31626,"code":170420,"language":31628,"meta":44,"style":44},"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",[46,170422,170423,170429,170433,170441,170451,170461,170469,170473,170477,170502],{"__ignoreMap":44},[49,170424,170425,170427],{"class":51,"line":52},[49,170426,31640],{"class":109},[49,170428,148116],{"class":66},[49,170430,170431],{"class":51,"line":59},[49,170432,3654],{"emptyLinePlaceholder":1330},[49,170434,170435,170437,170439],{"class":51,"line":70},[49,170436,150506],{"class":66},[49,170438,1448],{"class":109},[49,170440,67],{"class":66},[49,170442,170443,170445,170447,170449],{"class":51,"line":86},[49,170444,148045],{"class":1505},[49,170446,77],{"class":66},[49,170448,150913],{"class":1505},[49,170450,32714],{"class":66},[49,170452,170453,170455,170457,170459],{"class":51,"line":98},[49,170454,165562],{"class":1505},[49,170456,77],{"class":66},[49,170458,2041],{"class":73},[49,170460,32714],{"class":66},[49,170462,170463,170465,170467],{"class":51,"line":121},[49,170464,165573],{"class":1505},[49,170466,77],{"class":66},[49,170468,165578],{"class":73},[49,170470,170471],{"class":51,"line":134},[49,170472,137],{"class":66},[49,170474,170475],{"class":51,"line":1085},[49,170476,3654],{"emptyLinePlaceholder":1330},[49,170478,170479,170481,170483,170486,170488,170490,170492,170494,170496,170498,170500],{"class":51,"line":2574},[49,170480,157469],{"class":66},[49,170482,1448],{"class":109},[49,170484,170485],{"class":66}," json.dumps(student, ",[49,170487,148162],{"class":6468},[49,170489,1448],{"class":109},[49,170491,35235],{"class":73},[49,170493,13687],{"class":66},[49,170495,153037],{"class":6468},[49,170497,1448],{"class":109},[49,170499,1478],{"class":73},[49,170501,1409],{"class":66},[49,170503,170504,170506],{"class":51,"line":2586},[49,170505,31663],{"class":73},[49,170507,165096],{"class":66},[19,170509,170510],{},"写入 JSON 文件：",[39,170512,170514],{"className":31626,"code":170513,"language":31628,"meta":44,"style":44},"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",[46,170515,170516,170522,170526,170534,170562,170590,170594,170598,170628],{"__ignoreMap":44},[49,170517,170518,170520],{"class":51,"line":52},[49,170519,31640],{"class":109},[49,170521,148116],{"class":66},[49,170523,170524],{"class":51,"line":59},[49,170525,3654],{"emptyLinePlaceholder":1330},[49,170527,170528,170530,170532],{"class":51,"line":70},[49,170529,160741],{"class":66},[49,170531,1448],{"class":109},[49,170533,56686],{"class":66},[49,170535,170536,170538,170540,170542,170544,170546,170548,170550,170552,170554,170556,170558,170560],{"class":51,"line":86},[49,170537,149410],{"class":66},[49,170539,63915],{"class":1505},[49,170541,77],{"class":66},[49,170543,150913],{"class":1505},[49,170545,13687],{"class":66},[49,170547,70359],{"class":1505},[49,170549,77],{"class":66},[49,170551,2041],{"class":73},[49,170553,13687],{"class":66},[49,170555,152497],{"class":1505},[49,170557,77],{"class":66},[49,170559,2378],{"class":73},[49,170561,6184],{"class":66},[49,170563,170564,170566,170568,170570,170572,170574,170576,170578,170580,170582,170584,170586,170588],{"class":51,"line":98},[49,170565,149410],{"class":66},[49,170567,63915],{"class":1505},[49,170569,77],{"class":66},[49,170571,151961],{"class":1505},[49,170573,13687],{"class":66},[49,170575,70359],{"class":1505},[49,170577,77],{"class":66},[49,170579,2016],{"class":73},[49,170581,13687],{"class":66},[49,170583,152497],{"class":1505},[49,170585,77],{"class":66},[49,170587,2201],{"class":73},[49,170589,6184],{"class":66},[49,170591,170592],{"class":51,"line":121},[49,170593,34494],{"class":66},[49,170595,170596],{"class":51,"line":134},[49,170597,3654],{"emptyLinePlaceholder":1330},[49,170599,170600,170602,170604,170606,170608,170610,170612,170614,170616,170618,170620,170622,170624,170626],{"class":51,"line":1085},[49,170601,109057],{"class":109},[49,170603,147816],{"class":73},[49,170605,1403],{"class":66},[49,170607,152856],{"class":1505},[49,170609,13687],{"class":66},[49,170611,153001],{"class":1505},[49,170613,13687],{"class":66},[49,170615,147831],{"class":6468},[49,170617,1448],{"class":109},[49,170619,147836],{"class":1505},[49,170621,14966],{"class":66},[49,170623,32631],{"class":109},[49,170625,149178],{"class":6468},[49,170627,4993],{"class":66},[49,170629,170630,170633,170635,170637,170639,170641,170643,170645,170647,170649,170651],{"class":51,"line":2574},[49,170631,170632],{"class":66},"    json.dump(students, ",[49,170634,46602],{"class":6468},[49,170636,13687],{"class":66},[49,170638,148162],{"class":6468},[49,170640,1448],{"class":109},[49,170642,35235],{"class":73},[49,170644,13687],{"class":66},[49,170646,153037],{"class":6468},[49,170648,1448],{"class":109},[49,170650,1478],{"class":73},[49,170652,1409],{"class":66},[19,170654,170655],{},"读取 JSON 文件：",[39,170657,170659],{"className":31626,"code":170658,"language":31628,"meta":44,"style":44},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[46,170660,170661,170667,170671,170701,170713,170717],{"__ignoreMap":44},[49,170662,170663,170665],{"class":51,"line":52},[49,170664,31640],{"class":109},[49,170666,148116],{"class":66},[49,170668,170669],{"class":51,"line":59},[49,170670,3654],{"emptyLinePlaceholder":1330},[49,170672,170673,170675,170677,170679,170681,170683,170685,170687,170689,170691,170693,170695,170697,170699],{"class":51,"line":70},[49,170674,109057],{"class":109},[49,170676,147816],{"class":73},[49,170678,1403],{"class":66},[49,170680,152856],{"class":1505},[49,170682,13687],{"class":66},[49,170684,147826],{"class":1505},[49,170686,13687],{"class":66},[49,170688,147831],{"class":6468},[49,170690,1448],{"class":109},[49,170692,147836],{"class":1505},[49,170694,14966],{"class":66},[49,170696,32631],{"class":109},[49,170698,149178],{"class":6468},[49,170700,4993],{"class":66},[49,170702,170703,170705,170707,170709,170711],{"class":51,"line":86},[49,170704,154062],{"class":66},[49,170706,1448],{"class":109},[49,170708,149189],{"class":66},[49,170710,46602],{"class":6468},[49,170712,1409],{"class":66},[49,170714,170715],{"class":51,"line":98},[49,170716,3654],{"emptyLinePlaceholder":1330},[49,170718,170719,170721],{"class":51,"line":121},[49,170720,31663],{"class":73},[49,170722,166020],{"class":66},[14,170724,170726],{"id":170725},"_811-csv文件","8.11 CSV文件",[19,170728,170729],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170731,170732],{},"写入 CSV：",[39,170734,170736],{"className":31626,"code":170735,"language":31628,"meta":44,"style":44},"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",[46,170737,170738,170745,170749,170757,170775,170791,170807,170811,170815,170855,170869],{"__ignoreMap":44},[49,170739,170740,170742],{"class":51,"line":52},[49,170741,31640],{"class":109},[49,170743,170744],{"class":66}," csv\n",[49,170746,170747],{"class":51,"line":59},[49,170748,3654],{"emptyLinePlaceholder":1330},[49,170750,170751,170753,170755],{"class":51,"line":70},[49,170752,160741],{"class":66},[49,170754,1448],{"class":109},[49,170756,56686],{"class":66},[49,170758,170759,170762,170764,170766,170768,170770,170773],{"class":51,"line":86},[49,170760,170761],{"class":66},"    [",[49,170763,74328],{"class":1505},[49,170765,13687],{"class":66},[49,170767,74361],{"class":1505},[49,170769,13687],{"class":66},[49,170771,170772],{"class":1505},"\"成绩\"",[49,170774,89061],{"class":66},[49,170776,170777,170779,170781,170783,170785,170787,170789],{"class":51,"line":98},[49,170778,170761],{"class":66},[49,170780,150913],{"class":1505},[49,170782,13687],{"class":66},[49,170784,2041],{"class":73},[49,170786,13687],{"class":66},[49,170788,2378],{"class":73},[49,170790,89061],{"class":66},[49,170792,170793,170795,170797,170799,170801,170803,170805],{"class":51,"line":121},[49,170794,170761],{"class":66},[49,170796,151961],{"class":1505},[49,170798,13687],{"class":66},[49,170800,2016],{"class":73},[49,170802,13687],{"class":66},[49,170804,2201],{"class":73},[49,170806,89061],{"class":66},[49,170808,170809],{"class":51,"line":134},[49,170810,34494],{"class":66},[49,170812,170813],{"class":51,"line":1085},[49,170814,3654],{"emptyLinePlaceholder":1330},[49,170816,170817,170819,170821,170823,170826,170828,170830,170832,170834,170836,170838,170840,170843,170845,170847,170849,170851,170853],{"class":51,"line":2574},[49,170818,109057],{"class":109},[49,170820,147816],{"class":73},[49,170822,1403],{"class":66},[49,170824,170825],{"class":1505},"\"students.csv\"",[49,170827,13687],{"class":66},[49,170829,153001],{"class":1505},[49,170831,13687],{"class":66},[49,170833,147831],{"class":6468},[49,170835,1448],{"class":109},[49,170837,147836],{"class":1505},[49,170839,13687],{"class":66},[49,170841,170842],{"class":6468},"newline",[49,170844,1448],{"class":109},[49,170846,8904],{"class":1505},[49,170848,14966],{"class":66},[49,170850,32631],{"class":109},[49,170852,149178],{"class":6468},[49,170854,4993],{"class":66},[49,170856,170857,170860,170862,170865,170867],{"class":51,"line":2586},[49,170858,170859],{"class":66},"    writer ",[49,170861,1448],{"class":109},[49,170863,170864],{"class":66}," csv.writer(",[49,170866,46602],{"class":6468},[49,170868,1409],{"class":66},[49,170870,170871],{"class":51,"line":2867},[49,170872,170873],{"class":66},"    writer.writerows(students)\n",[19,170875,170876],{},"读取 CSV：",[39,170878,170880],{"className":31626,"code":170879,"language":31628,"meta":44,"style":44},"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",[46,170881,170882,170888,170892,170922,170936,170948],{"__ignoreMap":44},[49,170883,170884,170886],{"class":51,"line":52},[49,170885,31640],{"class":109},[49,170887,170744],{"class":66},[49,170889,170890],{"class":51,"line":59},[49,170891,3654],{"emptyLinePlaceholder":1330},[49,170893,170894,170896,170898,170900,170902,170904,170906,170908,170910,170912,170914,170916,170918,170920],{"class":51,"line":70},[49,170895,109057],{"class":109},[49,170897,147816],{"class":73},[49,170899,1403],{"class":66},[49,170901,170825],{"class":1505},[49,170903,13687],{"class":66},[49,170905,147826],{"class":1505},[49,170907,13687],{"class":66},[49,170909,147831],{"class":6468},[49,170911,1448],{"class":109},[49,170913,147836],{"class":1505},[49,170915,14966],{"class":66},[49,170917,32631],{"class":109},[49,170919,149178],{"class":6468},[49,170921,4993],{"class":66},[49,170923,170924,170927,170929,170932,170934],{"class":51,"line":86},[49,170925,170926],{"class":66},"    reader ",[49,170928,1448],{"class":109},[49,170930,170931],{"class":66}," csv.reader(",[49,170933,46602],{"class":6468},[49,170935,1409],{"class":66},[49,170937,170938,170940,170943,170945],{"class":51,"line":98},[49,170939,4455],{"class":109},[49,170941,170942],{"class":66}," row ",[49,170944,27292],{"class":109},[49,170946,170947],{"class":66}," reader:\n",[49,170949,170950,170952],{"class":51,"line":121},[49,170951,33699],{"class":73},[49,170953,170954],{"class":66},"(row)\n",[19,170956,170957],{},"使用字典写入：",[39,170959,170961],{"className":31626,"code":170960,"language":31628,"meta":44,"style":44},"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",[46,170962,170963,170969,170973,170981,171009,171037,171041,171045,171083,171104,171125,171130],{"__ignoreMap":44},[49,170964,170965,170967],{"class":51,"line":52},[49,170966,31640],{"class":109},[49,170968,170744],{"class":66},[49,170970,170971],{"class":51,"line":59},[49,170972,3654],{"emptyLinePlaceholder":1330},[49,170974,170975,170977,170979],{"class":51,"line":70},[49,170976,160741],{"class":66},[49,170978,1448],{"class":109},[49,170980,56686],{"class":66},[49,170982,170983,170985,170987,170989,170991,170993,170995,170997,170999,171001,171003,171005,171007],{"class":51,"line":86},[49,170984,149410],{"class":66},[49,170986,63915],{"class":1505},[49,170988,77],{"class":66},[49,170990,150913],{"class":1505},[49,170992,13687],{"class":66},[49,170994,70359],{"class":1505},[49,170996,77],{"class":66},[49,170998,2041],{"class":73},[49,171000,13687],{"class":66},[49,171002,152497],{"class":1505},[49,171004,77],{"class":66},[49,171006,2378],{"class":73},[49,171008,6184],{"class":66},[49,171010,171011,171013,171015,171017,171019,171021,171023,171025,171027,171029,171031,171033,171035],{"class":51,"line":98},[49,171012,149410],{"class":66},[49,171014,63915],{"class":1505},[49,171016,77],{"class":66},[49,171018,151961],{"class":1505},[49,171020,13687],{"class":66},[49,171022,70359],{"class":1505},[49,171024,77],{"class":66},[49,171026,2016],{"class":73},[49,171028,13687],{"class":66},[49,171030,152497],{"class":1505},[49,171032,77],{"class":66},[49,171034,2201],{"class":73},[49,171036,6184],{"class":66},[49,171038,171039],{"class":51,"line":121},[49,171040,34494],{"class":66},[49,171042,171043],{"class":51,"line":134},[49,171044,3654],{"emptyLinePlaceholder":1330},[49,171046,171047,171049,171051,171053,171055,171057,171059,171061,171063,171065,171067,171069,171071,171073,171075,171077,171079,171081],{"class":51,"line":1085},[49,171048,109057],{"class":109},[49,171050,147816],{"class":73},[49,171052,1403],{"class":66},[49,171054,170825],{"class":1505},[49,171056,13687],{"class":66},[49,171058,153001],{"class":1505},[49,171060,13687],{"class":66},[49,171062,147831],{"class":6468},[49,171064,1448],{"class":109},[49,171066,147836],{"class":1505},[49,171068,13687],{"class":66},[49,171070,170842],{"class":6468},[49,171072,1448],{"class":109},[49,171074,8904],{"class":1505},[49,171076,14966],{"class":66},[49,171078,32631],{"class":109},[49,171080,149178],{"class":6468},[49,171082,4993],{"class":66},[49,171084,171085,171088,171090,171092,171094,171096,171098,171100,171102],{"class":51,"line":2574},[49,171086,171087],{"class":66},"    fieldnames ",[49,171089,1448],{"class":109},[49,171091,53468],{"class":66},[49,171093,63915],{"class":1505},[49,171095,13687],{"class":66},[49,171097,70359],{"class":1505},[49,171099,13687],{"class":66},[49,171101,152497],{"class":1505},[49,171103,34494],{"class":66},[49,171105,171106,171108,171110,171113,171115,171117,171120,171122],{"class":51,"line":2586},[49,171107,170859],{"class":66},[49,171109,1448],{"class":109},[49,171111,171112],{"class":66}," csv.DictWriter(",[49,171114,46602],{"class":6468},[49,171116,13687],{"class":66},[49,171118,171119],{"class":6468},"fieldnames",[49,171121,1448],{"class":109},[49,171123,171124],{"class":66},"fieldnames)\n",[49,171126,171127],{"class":51,"line":2867},[49,171128,171129],{"class":66},"    writer.writeheader()\n",[49,171131,171132],{"class":51,"line":2872},[49,171133,170873],{"class":66},[14,171135,171137],{"id":171136},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171139,124516],{},[591,171141,171142,171145,171148],{},[26,171143,171144],{},"读取文本文件。",[26,171146,171147],{},"统计每个单词出现次数。",[26,171149,171150],{},"输出出现次数最多的前 10 个单词。",[19,171152,11287],{},[39,171154,171156],{"className":31626,"code":171155,"language":31628,"meta":44,"style":44},"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",[46,171157,171158,171168,171172,171185,171201,171205,171215,171224,171228,171240,171260,171269,171273,171291,171295,171325,171329,171345],{"__ignoreMap":44},[49,171159,171160,171162,171164,171166],{"class":51,"line":52},[49,171161,31985],{"class":109},[49,171163,109535],{"class":66},[49,171165,31640],{"class":109},[49,171167,109540],{"class":66},[49,171169,171170],{"class":51,"line":59},[49,171171,3654],{"emptyLinePlaceholder":1330},[49,171173,171174,171176,171178,171180,171183],{"class":51,"line":70},[49,171175,169336],{"class":66},[49,171177,1448],{"class":109},[49,171179,109769],{"class":66},[49,171181,171182],{"class":1505},"\"article.txt\"",[49,171184,1409],{"class":66},[49,171186,171187,171189,171191,171193,171195,171197,171199],{"class":51,"line":86},[49,171188,169519],{"class":66},[49,171190,1448],{"class":109},[49,171192,170396],{"class":66},[49,171194,147831],{"class":6468},[49,171196,1448],{"class":109},[49,171198,147836],{"class":1505},[49,171200,1409],{"class":66},[49,171202,171203],{"class":51,"line":98},[49,171204,3654],{"emptyLinePlaceholder":1330},[49,171206,171207,171210,171212],{"class":51,"line":121},[49,171208,171209],{"class":66},"words ",[49,171211,1448],{"class":109},[49,171213,171214],{"class":66}," content.lower().split()\n",[49,171216,171217,171220,171222],{"class":51,"line":134},[49,171218,171219],{"class":66},"counter ",[49,171221,1448],{"class":109},[49,171223,89093],{"class":66},[49,171225,171226],{"class":51,"line":1085},[49,171227,3654],{"emptyLinePlaceholder":1330},[49,171229,171230,171232,171235,171237],{"class":51,"line":2574},[49,171231,4279],{"class":109},[49,171233,171234],{"class":66}," word ",[49,171236,27292],{"class":109},[49,171238,171239],{"class":66}," words:\n",[49,171241,171242,171245,171247,171250,171253,171255,171258],{"class":51,"line":2586},[49,171243,171244],{"class":66},"    word ",[49,171246,1448],{"class":109},[49,171248,171249],{"class":66}," word.strip(",[49,171251,171252],{"class":1505},"\".,!?;:",[49,171254,157520],{"class":73},[49,171256,171257],{"class":1505},"'()[]\"",[49,171259,1409],{"class":66},[49,171261,171262,171264,171266],{"class":51,"line":2867},[49,171263,4355],{"class":109},[49,171265,40178],{"class":109},[49,171267,171268],{"class":66}," word:\n",[49,171270,171271],{"class":51,"line":2872},[49,171272,149537],{"class":109},[49,171274,171275,171278,171280,171283,171285,171287,171289],{"class":51,"line":2878},[49,171276,171277],{"class":66},"    counter[word] ",[49,171279,1448],{"class":109},[49,171281,171282],{"class":66}," counter.get(word, ",[49,171284,80],{"class":73},[49,171286,14966],{"class":66},[49,171288,1872],{"class":109},[49,171290,56938],{"class":73},[49,171292,171293],{"class":51,"line":2883},[49,171294,3654],{"emptyLinePlaceholder":1330},[49,171296,171297,171300,171302,171304,171307,171309,171311,171313,171315,171317,171319,171321,171323],{"class":51,"line":2897},[49,171298,171299],{"class":66},"items ",[49,171301,1448],{"class":109},[49,171303,164629],{"class":73},[49,171305,171306],{"class":66},"(counter.items(), ",[49,171308,154971],{"class":6468},[49,171310,154974],{"class":109},[49,171312,154977],{"class":66},[49,171314,159],{"class":73},[49,171316,113426],{"class":66},[49,171318,164553],{"class":6468},[49,171320,1448],{"class":109},[49,171322,32724],{"class":73},[49,171324,1409],{"class":66},[49,171326,171327],{"class":51,"line":2902},[49,171328,3654],{"emptyLinePlaceholder":1330},[49,171330,171331,171333,171336,171338,171341,171343],{"class":51,"line":2908},[49,171332,4279],{"class":109},[49,171334,171335],{"class":66}," word, count ",[49,171337,27292],{"class":109},[49,171339,171340],{"class":66}," items[:",[49,171342,106],{"class":73},[49,171344,166780],{"class":66},[49,171346,171347,171349],{"class":51,"line":2929},[49,171348,32547],{"class":73},[49,171350,171351],{"class":66},"(word, count)\n",[14,171353,171355],{"id":171354},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[39,171357,171359],{"className":31626,"code":171358,"language":31628,"meta":44,"style":44},"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",[46,171360,171361,171367,171377,171381,171393,171397,171401,171409,171419,171425,171429,171459,171469,171473,171477,171485,171515,171539,171543,171547,171555,171584,171589],{"__ignoreMap":44},[49,171362,171363,171365],{"class":51,"line":52},[49,171364,31640],{"class":109},[49,171366,148116],{"class":66},[49,171368,171369,171371,171373,171375],{"class":51,"line":59},[49,171370,31985],{"class":109},[49,171372,109535],{"class":66},[49,171374,31640],{"class":109},[49,171376,109540],{"class":66},[49,171378,171379],{"class":51,"line":70},[49,171380,3654],{"emptyLinePlaceholder":1330},[49,171382,171383,171385,171387,171389,171391],{"class":51,"line":86},[49,171384,152849],{"class":73},[49,171386,14816],{"class":109},[49,171388,109769],{"class":66},[49,171390,152856],{"class":1505},[49,171392,1409],{"class":66},[49,171394,171395],{"class":51,"line":98},[49,171396,3654],{"emptyLinePlaceholder":1330},[49,171398,171399],{"class":51,"line":121},[49,171400,3654],{"emptyLinePlaceholder":1330},[49,171402,171403,171405,171407],{"class":51,"line":134},[49,171404,33195],{"class":109},[49,171406,152873],{"class":62},[49,171408,33201],{"class":66},[49,171410,171411,171413,171415,171417],{"class":51,"line":1085},[49,171412,4355],{"class":109},[49,171414,40178],{"class":109},[49,171416,152884],{"class":73},[49,171418,152887],{"class":66},[49,171420,171421,171423],{"class":51,"line":2574},[49,171422,16003],{"class":109},[49,171424,53080],{"class":66},[49,171426,171427],{"class":51,"line":2586},[49,171428,3654],{"emptyLinePlaceholder":1330},[49,171430,171431,171433,171435,171437,171439,171441,171443,171445,171447,171449,171451,171453,171455,171457],{"class":51,"line":2867},[49,171432,35426],{"class":109},[49,171434,147816],{"class":73},[49,171436,1403],{"class":66},[49,171438,152849],{"class":73},[49,171440,13687],{"class":66},[49,171442,147826],{"class":1505},[49,171444,13687],{"class":66},[49,171446,147831],{"class":6468},[49,171448,1448],{"class":109},[49,171450,147836],{"class":1505},[49,171452,14966],{"class":66},[49,171454,32631],{"class":109},[49,171456,149178],{"class":6468},[49,171458,4993],{"class":66},[49,171460,171461,171463,171465,171467],{"class":51,"line":2872},[49,171462,16003],{"class":109},[49,171464,149189],{"class":66},[49,171466,46602],{"class":6468},[49,171468,1409],{"class":66},[49,171470,171471],{"class":51,"line":2878},[49,171472,3654],{"emptyLinePlaceholder":1330},[49,171474,171475],{"class":51,"line":2883},[49,171476,3654],{"emptyLinePlaceholder":1330},[49,171478,171479,171481,171483],{"class":51,"line":2897},[49,171480,33195],{"class":109},[49,171482,152983],{"class":62},[49,171484,152986],{"class":66},[49,171486,171487,171489,171491,171493,171495,171497,171499,171501,171503,171505,171507,171509,171511,171513],{"class":51,"line":2902},[49,171488,35426],{"class":109},[49,171490,147816],{"class":73},[49,171492,1403],{"class":66},[49,171494,152849],{"class":73},[49,171496,13687],{"class":66},[49,171498,153001],{"class":1505},[49,171500,13687],{"class":66},[49,171502,147831],{"class":6468},[49,171504,1448],{"class":109},[49,171506,147836],{"class":1505},[49,171508,14966],{"class":66},[49,171510,32631],{"class":109},[49,171512,149178],{"class":6468},[49,171514,4993],{"class":66},[49,171516,171517,171519,171521,171523,171525,171527,171529,171531,171533,171535,171537],{"class":51,"line":2908},[49,171518,153022],{"class":66},[49,171520,46602],{"class":6468},[49,171522,13687],{"class":66},[49,171524,148162],{"class":6468},[49,171526,1448],{"class":109},[49,171528,35235],{"class":73},[49,171530,13687],{"class":66},[49,171532,153037],{"class":6468},[49,171534,1448],{"class":109},[49,171536,1478],{"class":73},[49,171538,1409],{"class":66},[49,171540,171541],{"class":51,"line":2929},[49,171542,3654],{"emptyLinePlaceholder":1330},[49,171544,171545],{"class":51,"line":2934},[49,171546,3654],{"emptyLinePlaceholder":1330},[49,171548,171549,171551,171553],{"class":51,"line":2948},[49,171550,160741],{"class":66},[49,171552,1448],{"class":109},[49,171554,154067],{"class":66},[49,171556,171557,171560,171562,171564,171566,171568,171570,171572,171574,171576,171578,171580,171582],{"class":51,"line":2953},[49,171558,171559],{"class":66},"students.append({",[49,171561,63915],{"class":1505},[49,171563,77],{"class":66},[49,171565,150913],{"class":1505},[49,171567,13687],{"class":66},[49,171569,70359],{"class":1505},[49,171571,77],{"class":66},[49,171573,2041],{"class":73},[49,171575,13687],{"class":66},[49,171577,152497],{"class":1505},[49,171579,77],{"class":66},[49,171581,2378],{"class":73},[49,171583,166177],{"class":66},[49,171585,171586],{"class":51,"line":2982},[49,171587,171588],{"class":66},"save_students(students)\n",[49,171590,171591,171593,171595,171598],{"class":51,"line":2987},[49,171592,31663],{"class":73},[49,171594,1403],{"class":66},[49,171596,171597],{"class":1505},"\"保存成功\"",[49,171599,1409],{"class":66},[14,171601,171603],{"id":171602},"_814-易错点","8.14 易错点",[591,171605,171606,171610,171616,171621,171628,171635],{},[26,171607,171608,169869],{},[46,171609,2185],{},[26,171611,171612,171613,29633],{},"读写中文要指定 ",[46,171614,171615],{},"encoding=\"utf-8\"",[26,171617,171618,171619,29633],{},"打开文件后要关闭，推荐使用 ",[46,171620,109057],{},[26,171622,171623,171624,171627],{},"读取大文件不要直接 ",[46,171625,171626],{},"read()"," 全部内容。",[26,171629,171630,171631,171634],{},"Windows 写 CSV 时建议加 ",[46,171632,171633],{},"newline=\"\"","，避免空行。",[26,171636,171637],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171639,171641],{"id":171640},"_815-本章练习","8.15 本章练习",[591,171643,171644,171651,171656,171659,171662],{},[26,171645,171646,171647,171650],{},"写入一个 ",[46,171648,171649],{},"students.txt","，每行保存一个学生姓名。",[26,171652,105579,171653,171655],{},[46,171654,171649],{}," 并输出所有学生。",[26,171657,171658],{},"把学生列表保存为 JSON 文件。",[26,171660,171661],{},"从 JSON 文件读取学生数据，计算平均分。",[26,171663,171664,171665,171668,171669,171672],{},"写一个日志函数 ",[46,171666,171667],{},"write_log(message)","，每次调用向 ",[46,171670,171671],{},"app.log"," 追加一行。",[1305,171674,171675],{},"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":44,"searchDepth":59,"depth":59,"links":171677},[171678,171679,171683,171684,171690,171691,171692,171693,171694,171695,171696,171697,171698,171699,171700],{"id":169189,"depth":59,"text":169190},{"id":169230,"depth":59,"text":169231,"children":171680},[171681,171682],{"id":169234,"depth":70,"text":169235},{"id":169268,"depth":70,"text":169269},{"id":169382,"depth":59,"text":169383},{"id":169475,"depth":59,"text":169476,"children":171685},[171686,171687,171688,171689],{"id":169479,"depth":70,"text":169480},{"id":169566,"depth":70,"text":169567},{"id":169636,"depth":70,"text":169637},{"id":169730,"depth":70,"text":169731},{"id":169800,"depth":59,"text":169801},{"id":169863,"depth":59,"text":169864},{"id":170024,"depth":59,"text":170025},{"id":170087,"depth":59,"text":170088},{"id":170203,"depth":59,"text":170204},{"id":170413,"depth":59,"text":170414},{"id":170725,"depth":59,"text":170726},{"id":171136,"depth":59,"text":171137},{"id":171354,"depth":59,"text":171355},{"id":171602,"depth":59,"text":171603},{"id":171640,"depth":59,"text":171641},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169181,"description":1327},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171707,"title":171708,"body":171709,"description":1327,"extension":1328,"meta":173895,"navigation":1330,"path":173896,"seo":173897,"stem":173898,"__hash__":173899},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171710,"toc":173862},[171711,171714,171718,171721,171724,171816,171818,171837,171842,171846,171849,171852,171881,171888,171891,171895,171898,171927,171929,171981,171987,172040,172044,172142,172145,172212,172216,172273,172275,172281,172285,172290,172296,172387,172392,172396,172399,172477,172480,172518,172522,172640,172643,172647,172650,172695,172698,172702,172707,172713,172763,172766,172797,172801,172805,172835,172839,172874,172878,172913,172953,172957,172973,172976,172980,172984,173063,173067,173108,173112,173167,173171,173205,173209,173239,173248,173255,173261,173318,173321,173329,173332,173336,173343,173346,173352,173355,173372,173377,173381,173387,173400,173403,173440,173443,173454,173457,173471,173474,173488,173492,173499,173532,173535,173537,173543,173546,173550,173552,173558,173563,173736,173740,173803,173807,173831,173835,173859],[10,171712,171708],{"id":171713},"_9-异常模块与包",[14,171715,171717],{"id":171716},"_91-什么是异常","9.1 什么是异常",[19,171719,171720],{},"异常是程序运行过程中出现的错误。",[19,171722,171723],{},"常见异常：",[293,171725,171726,171735],{},[296,171727,171728],{},[299,171729,171730,171733],{},[302,171731,171732],{},"异常",[302,171734,27118],{},[310,171736,171737,171747,171757,171766,171776,171786,171796,171806],{},[299,171738,171739,171744],{},[315,171740,171741],{},[46,171742,171743],{},"NameError",[315,171745,171746],{},"使用了未定义变量",[299,171748,171749,171754],{},[315,171750,171751],{},[46,171752,171753],{},"TypeError",[315,171755,171756],{},"类型不匹配",[299,171758,171759,171763],{},[315,171760,171761],{},[46,171762,155859],{},[315,171764,171765],{},"值不合法",[299,171767,171768,171773],{},[315,171769,171770],{},[46,171771,171772],{},"IndexError",[315,171774,171775],{},"列表索引越界",[299,171777,171778,171783],{},[315,171779,171780],{},[46,171781,171782],{},"KeyError",[315,171784,171785],{},"字典 key 不存在",[299,171787,171788,171793],{},[315,171789,171790],{},[46,171791,171792],{},"FileNotFoundError",[315,171794,171795],{},"文件不存在",[299,171797,171798,171803],{},[315,171799,171800],{},[46,171801,171802],{},"ZeroDivisionError",[315,171804,171805],{},"除数为 0",[299,171807,171808,171813],{},[315,171809,171810],{},[46,171811,171812],{},"ImportError",[315,171814,171815],{},"导入失败",[19,171817,16386],{},[39,171819,171821],{"className":31626,"code":171820,"language":31628,"meta":44,"style":44},"num = int(\"abc\")\n",[46,171822,171823],{"__ignoreMap":44},[49,171824,171825,171827,171829,171831,171833,171835],{"class":51,"line":52},[49,171826,156812],{"class":66},[49,171828,1448],{"class":109},[49,171830,3636],{"class":73},[49,171832,1403],{"class":66},[49,171834,156905],{"class":1505},[49,171836,1409],{"class":66},[19,171838,171839,171840,29633],{},"会触发 ",[46,171841,155859],{},[14,171843,171845],{"id":171844},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171847,171848],{},"如果不处理异常，程序会直接终止。",[19,171850,171851],{},"例如用户输入年龄：",[39,171853,171855],{"className":31626,"code":171854,"language":31628,"meta":44,"style":44},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[46,171856,171857,171875],{"__ignoreMap":44},[49,171858,171859,171861,171863,171865,171867,171869,171871,171873],{"class":51,"line":52},[49,171860,147571],{"class":66},[49,171862,1448],{"class":109},[49,171864,3636],{"class":73},[49,171866,1403],{"class":66},[49,171868,448],{"class":73},[49,171870,1403],{"class":66},[49,171872,153419],{"class":1505},[49,171874,31745],{"class":66},[49,171876,171877,171879],{"class":51,"line":59},[49,171878,31663],{"class":73},[49,171880,156786],{"class":66},[19,171882,171883,171884,171887],{},"用户输入 ",[46,171885,171886],{},"abc","，程序就会报错退出。",[19,171889,171890],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171892,171894],{"id":171893},"_93-try-except","9.3 try except",[19,171896,171897],{},"基础语法：",[39,171899,171901],{"className":31626,"code":171900,"language":31628,"meta":44,"style":44},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[46,171902,171903,171910,171915,171922],{"__ignoreMap":44},[49,171904,171905,171908],{"class":51,"line":52},[49,171906,171907],{"class":109},"try",[49,171909,4993],{"class":66},[49,171911,171912],{"class":51,"line":59},[49,171913,171914],{"class":66},"    可能出错的代码\n",[49,171916,171917,171920],{"class":51,"line":70},[49,171918,171919],{"class":109},"except",[49,171921,4993],{"class":66},[49,171923,171924],{"class":51,"line":86},[49,171925,171926],{"class":66},"    出错后的处理代码\n",[19,171928,16386],{},[39,171930,171932],{"className":31626,"code":171931,"language":31628,"meta":44,"style":44},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[46,171933,171934,171940,171958,171964,171970],{"__ignoreMap":44},[49,171935,171936,171938],{"class":51,"line":52},[49,171937,171907],{"class":109},[49,171939,4993],{"class":66},[49,171941,171942,171944,171946,171948,171950,171952,171954,171956],{"class":51,"line":59},[49,171943,153411],{"class":66},[49,171945,1448],{"class":109},[49,171947,3636],{"class":73},[49,171949,1403],{"class":66},[49,171951,448],{"class":73},[49,171953,1403],{"class":66},[49,171955,153419],{"class":1505},[49,171957,31745],{"class":66},[49,171959,171960,171962],{"class":51,"line":70},[49,171961,32547],{"class":73},[49,171963,156786],{"class":66},[49,171965,171966,171968],{"class":51,"line":86},[49,171967,171919],{"class":109},[49,171969,4993],{"class":66},[49,171971,171972,171974,171976,171979],{"class":51,"line":98},[49,171973,32547],{"class":73},[49,171975,1403],{"class":66},[49,171977,171978],{"class":1505},"\"年龄必须是数字\"",[49,171980,1409],{"class":66},[19,171982,171983,171984,171986],{},"不建议裸写 ",[46,171985,171919],{},"，最好指定异常类型。",[39,171988,171990],{"className":31626,"code":171989,"language":31628,"meta":44,"style":44},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[46,171991,171992,171998,172016,172022,172030],{"__ignoreMap":44},[49,171993,171994,171996],{"class":51,"line":52},[49,171995,171907],{"class":109},[49,171997,4993],{"class":66},[49,171999,172000,172002,172004,172006,172008,172010,172012,172014],{"class":51,"line":59},[49,172001,153411],{"class":66},[49,172003,1448],{"class":109},[49,172005,3636],{"class":73},[49,172007,1403],{"class":66},[49,172009,448],{"class":73},[49,172011,1403],{"class":66},[49,172013,153419],{"class":1505},[49,172015,31745],{"class":66},[49,172017,172018,172020],{"class":51,"line":70},[49,172019,32547],{"class":73},[49,172021,156786],{"class":66},[49,172023,172024,172026,172028],{"class":51,"line":86},[49,172025,171919],{"class":109},[49,172027,153251],{"class":73},[49,172029,4993],{"class":66},[49,172031,172032,172034,172036,172038],{"class":51,"line":98},[49,172033,32547],{"class":73},[49,172035,1403],{"class":66},[49,172037,171978],{"class":1505},[49,172039,1409],{"class":66},[14,172041,172043],{"id":172042},"_94-捕获多个异常","9.4 捕获多个异常",[39,172045,172047],{"className":31626,"code":172046,"language":31628,"meta":44,"style":44},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[46,172048,172049,172055,172076,172096,172103,172111,172122,172131],{"__ignoreMap":44},[49,172050,172051,172053],{"class":51,"line":52},[49,172052,171907],{"class":109},[49,172054,4993],{"class":66},[49,172056,172057,172060,172062,172064,172066,172068,172070,172072,172074],{"class":51,"line":59},[49,172058,172059],{"class":66},"    nums ",[49,172061,1448],{"class":109},[49,172063,53468],{"class":66},[49,172065,159],{"class":73},[49,172067,13687],{"class":66},[49,172069,1478],{"class":73},[49,172071,13687],{"class":66},[49,172073,1472],{"class":73},[49,172075,34494],{"class":66},[49,172077,172078,172081,172083,172085,172087,172089,172091,172094],{"class":51,"line":70},[49,172079,172080],{"class":66},"    index ",[49,172082,1448],{"class":109},[49,172084,3636],{"class":73},[49,172086,1403],{"class":66},[49,172088,448],{"class":73},[49,172090,1403],{"class":66},[49,172092,172093],{"class":1505},"\"请输入索引:\"",[49,172095,31745],{"class":66},[49,172097,172098,172100],{"class":51,"line":86},[49,172099,32547],{"class":73},[49,172101,172102],{"class":66},"(nums[index])\n",[49,172104,172105,172107,172109],{"class":51,"line":98},[49,172106,171919],{"class":109},[49,172108,153251],{"class":73},[49,172110,4993],{"class":66},[49,172112,172113,172115,172117,172120],{"class":51,"line":121},[49,172114,32547],{"class":73},[49,172116,1403],{"class":66},[49,172118,172119],{"class":1505},"\"索引必须是整数\"",[49,172121,1409],{"class":66},[49,172123,172124,172126,172129],{"class":51,"line":134},[49,172125,171919],{"class":109},[49,172127,172128],{"class":73}," IndexError",[49,172130,4993],{"class":66},[49,172132,172133,172135,172137,172140],{"class":51,"line":1085},[49,172134,32547],{"class":73},[49,172136,1403],{"class":66},[49,172138,172139],{"class":1505},"\"索引越界\"",[49,172141,1409],{"class":66},[19,172143,172144],{},"多个异常使用相同处理逻辑：",[39,172146,172148],{"className":31626,"code":172147,"language":31628,"meta":44,"style":44},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[46,172149,172150,172156,172174,172187,172201],{"__ignoreMap":44},[49,172151,172152,172154],{"class":51,"line":52},[49,172153,171907],{"class":109},[49,172155,4993],{"class":66},[49,172157,172158,172160,172162,172164,172166,172168,172170,172172],{"class":51,"line":59},[49,172159,46841],{"class":66},[49,172161,1448],{"class":109},[49,172163,3636],{"class":73},[49,172165,1403],{"class":66},[49,172167,448],{"class":73},[49,172169,1403],{"class":66},[49,172171,156821],{"class":1505},[49,172173,31745],{"class":66},[49,172175,172176,172178,172180,172182,172184],{"class":51,"line":70},[49,172177,32547],{"class":73},[49,172179,1403],{"class":66},[49,172181,106],{"class":73},[49,172183,157071],{"class":109},[49,172185,172186],{"class":66}," num)\n",[49,172188,172189,172191,172193,172195,172197,172199],{"class":51,"line":86},[49,172190,171919],{"class":109},[49,172192,2913],{"class":66},[49,172194,155859],{"class":73},[49,172196,13687],{"class":66},[49,172198,171802],{"class":73},[49,172200,32034],{"class":66},[49,172202,172203,172205,172207,172210],{"class":51,"line":98},[49,172204,32547],{"class":73},[49,172206,1403],{"class":66},[49,172208,172209],{"class":1505},"\"输入不合法\"",[49,172211,1409],{"class":66},[14,172213,172215],{"id":172214},"_95-获取异常信息","9.5 获取异常信息",[39,172217,172219],{"className":31626,"code":172218,"language":31628,"meta":44,"style":44},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[46,172220,172221,172227,172241,172252],{"__ignoreMap":44},[49,172222,172223,172225],{"class":51,"line":52},[49,172224,171907],{"class":109},[49,172226,4993],{"class":66},[49,172228,172229,172231,172233,172235,172237,172239],{"class":51,"line":59},[49,172230,46841],{"class":66},[49,172232,1448],{"class":109},[49,172234,3636],{"class":73},[49,172236,1403],{"class":66},[49,172238,156905],{"class":1505},[49,172240,1409],{"class":66},[49,172242,172243,172245,172247,172249],{"class":51,"line":70},[49,172244,171919],{"class":109},[49,172246,153251],{"class":73},[49,172248,65839],{"class":109},[49,172250,172251],{"class":66}," e:\n",[49,172253,172254,172256,172258,172260,172263,172265,172267,172269,172271],{"class":51,"line":86},[49,172255,32547],{"class":73},[49,172257,1403],{"class":66},[49,172259,1454],{"class":109},[49,172261,172262],{"class":1505},"\"出错了:",[49,172264,2286],{"class":73},[49,172266,1475],{"class":66},[49,172268,620],{"class":73},[49,172270,1643],{"class":1505},[49,172272,1409],{"class":66},[19,172274,147482],{},[39,172276,172279],{"className":172277,"code":172278,"language":267,"meta":44},[1094],"出错了:invalid literal for int() with base 10: 'abc'\n",[46,172280,172278],{"__ignoreMap":44},[14,172282,172284],{"id":172283},"_96-else和finally","9.6 else和finally",[19,172286,172287,172289],{},[46,172288,2956],{},"：没有异常时执行。",[19,172291,172292,172295],{},[46,172293,172294],{},"finally","：无论是否异常都会执行。",[39,172297,172299],{"className":31626,"code":172298,"language":31628,"meta":44,"style":44},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[46,172300,172301,172307,172325,172333,172343,172349,172370,172376],{"__ignoreMap":44},[49,172302,172303,172305],{"class":51,"line":52},[49,172304,171907],{"class":109},[49,172306,4993],{"class":66},[49,172308,172309,172311,172313,172315,172317,172319,172321,172323],{"class":51,"line":59},[49,172310,46841],{"class":66},[49,172312,1448],{"class":109},[49,172314,3636],{"class":73},[49,172316,1403],{"class":66},[49,172318,448],{"class":73},[49,172320,1403],{"class":66},[49,172322,156821],{"class":1505},[49,172324,31745],{"class":66},[49,172326,172327,172329,172331],{"class":51,"line":70},[49,172328,171919],{"class":109},[49,172330,153251],{"class":73},[49,172332,4993],{"class":66},[49,172334,172335,172337,172339,172341],{"class":51,"line":86},[49,172336,32547],{"class":73},[49,172338,1403],{"class":66},[49,172340,154239],{"class":1505},[49,172342,1409],{"class":66},[49,172344,172345,172347],{"class":51,"line":98},[49,172346,2956],{"class":109},[49,172348,4993],{"class":66},[49,172350,172351,172353,172355,172357,172360,172362,172364,172366,172368],{"class":51,"line":121},[49,172352,32547],{"class":73},[49,172354,1403],{"class":66},[49,172356,1454],{"class":109},[49,172358,172359],{"class":1505},"\"输入正确:",[49,172361,2286],{"class":73},[49,172363,2920],{"class":66},[49,172365,620],{"class":73},[49,172367,1643],{"class":1505},[49,172369,1409],{"class":66},[49,172371,172372,172374],{"class":51,"line":134},[49,172373,172294],{"class":109},[49,172375,4993],{"class":66},[49,172377,172378,172380,172382,172385],{"class":51,"line":1085},[49,172379,32547],{"class":73},[49,172381,1403],{"class":66},[49,172383,172384],{"class":1505},"\"程序结束\"",[49,172386,1409],{"class":66},[19,172388,172389,172391],{},[46,172390,172294],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172393,172395],{"id":172394},"_97-抛出异常","9.7 抛出异常",[19,172397,172398],{},"程序可以主动抛出异常。",[39,172400,172402],{"className":31626,"code":172401,"language":31628,"meta":44,"style":44},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[46,172403,172404,172413,172425,172438,172458,172462,172466],{"__ignoreMap":44},[49,172405,172406,172408,172411],{"class":51,"line":52},[49,172407,33195],{"class":109},[49,172409,172410],{"class":62}," set_age",[49,172412,162440],{"class":66},[49,172414,172415,172417,172419,172421,172423],{"class":51,"line":59},[49,172416,4355],{"class":109},[49,172418,16957],{"class":66},[49,172420,2300],{"class":109},[49,172422,5347],{"class":73},[49,172424,4993],{"class":66},[49,172426,172427,172429,172431,172433,172436],{"class":51,"line":70},[49,172428,104656],{"class":109},[49,172430,153251],{"class":73},[49,172432,1403],{"class":66},[49,172434,172435],{"class":1505},"\"年龄不能为负数\"",[49,172437,1409],{"class":66},[49,172439,172440,172442,172444,172446,172448,172450,172452,172454,172456],{"class":51,"line":86},[49,172441,32547],{"class":73},[49,172443,1403],{"class":66},[49,172445,1454],{"class":109},[49,172447,163008],{"class":1505},[49,172449,2286],{"class":73},[49,172451,71456],{"class":66},[49,172453,620],{"class":73},[49,172455,1643],{"class":1505},[49,172457,1409],{"class":66},[49,172459,172460],{"class":51,"line":98},[49,172461,3654],{"emptyLinePlaceholder":1330},[49,172463,172464],{"class":51,"line":121},[49,172465,3654],{"emptyLinePlaceholder":1330},[49,172467,172468,172471,172473,172475],{"class":51,"line":134},[49,172469,172470],{"class":66},"set_age(",[49,172472,1923],{"class":109},[49,172474,159],{"class":73},[49,172476,1409],{"class":66},[19,172478,172479],{},"调用者可以捕获：",[39,172481,172483],{"className":31626,"code":172482,"language":31628,"meta":44,"style":44},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[46,172484,172485,172491,172502,172512],{"__ignoreMap":44},[49,172486,172487,172489],{"class":51,"line":52},[49,172488,171907],{"class":109},[49,172490,4993],{"class":66},[49,172492,172493,172496,172498,172500],{"class":51,"line":59},[49,172494,172495],{"class":66},"    set_age(",[49,172497,1923],{"class":109},[49,172499,159],{"class":73},[49,172501,1409],{"class":66},[49,172503,172504,172506,172508,172510],{"class":51,"line":70},[49,172505,171919],{"class":109},[49,172507,153251],{"class":73},[49,172509,65839],{"class":109},[49,172511,172251],{"class":66},[49,172513,172514,172516],{"class":51,"line":86},[49,172515,32547],{"class":73},[49,172517,68234],{"class":66},[14,172519,172521],{"id":172520},"_98-自定义异常","9.8 自定义异常",[39,172523,172525],{"className":31626,"code":172524,"language":31628,"meta":44,"style":44},"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",[46,172526,172527,172541,172545,172549,172553,172561,172571,172582,172592,172596,172600,172606,172623,172634],{"__ignoreMap":44},[49,172528,172529,172531,172534,172536,172539],{"class":51,"line":52},[49,172530,15945],{"class":109},[49,172532,172533],{"class":62}," BalanceNotEnoughError",[49,172535,1403],{"class":66},[49,172537,172538],{"class":73},"Exception",[49,172540,32034],{"class":66},[49,172542,172543],{"class":51,"line":59},[49,172544,150562],{"class":109},[49,172546,172547],{"class":51,"line":70},[49,172548,3654],{"emptyLinePlaceholder":1330},[49,172550,172551],{"class":51,"line":86},[49,172552,3654],{"emptyLinePlaceholder":1330},[49,172554,172555,172557,172559],{"class":51,"line":98},[49,172556,33195],{"class":109},[49,172558,151211],{"class":62},[49,172560,163837],{"class":66},[49,172562,172563,172565,172567,172569],{"class":51,"line":121},[49,172564,4355],{"class":109},[49,172566,151167],{"class":66},[49,172568,2349],{"class":109},[49,172570,163614],{"class":66},[49,172572,172573,172575,172578,172580],{"class":51,"line":134},[49,172574,104656],{"class":109},[49,172576,172577],{"class":66}," BalanceNotEnoughError(",[49,172579,151262],{"class":1505},[49,172581,1409],{"class":66},[49,172583,172584,172586,172588,172590],{"class":51,"line":1085},[49,172585,5344],{"class":109},[49,172587,163844],{"class":66},[49,172589,1923],{"class":109},[49,172591,151200],{"class":66},[49,172593,172594],{"class":51,"line":2574},[49,172595,3654],{"emptyLinePlaceholder":1330},[49,172597,172598],{"class":51,"line":2586},[49,172599,3654],{"emptyLinePlaceholder":1330},[49,172601,172602,172604],{"class":51,"line":2867},[49,172603,171907],{"class":109},[49,172605,4993],{"class":66},[49,172607,172608,172610,172612,172615,172617,172619,172621],{"class":51,"line":2872},[49,172609,163515],{"class":66},[49,172611,1448],{"class":109},[49,172613,172614],{"class":66}," withdraw(",[49,172616,1703],{"class":73},[49,172618,13687],{"class":66},[49,172620,2977],{"class":73},[49,172622,1409],{"class":66},[49,172624,172625,172627,172630,172632],{"class":51,"line":2878},[49,172626,171919],{"class":109},[49,172628,172629],{"class":66}," BalanceNotEnoughError ",[49,172631,32631],{"class":109},[49,172633,172251],{"class":66},[49,172635,172636,172638],{"class":51,"line":2883},[49,172637,32547],{"class":73},[49,172639,68234],{"class":66},[19,172641,172642],{},"入门阶段大多数情况使用内置异常即可。",[14,172644,172646],{"id":172645},"_99-traceback","9.9 traceback",[19,172648,172649],{},"调试时可以输出完整异常堆栈。",[39,172651,172653],{"className":31626,"code":172652,"language":31628,"meta":44,"style":44},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[46,172654,172655,172662,172666,172672,172682,172690],{"__ignoreMap":44},[49,172656,172657,172659],{"class":51,"line":52},[49,172658,31640],{"class":109},[49,172660,172661],{"class":66}," traceback\n",[49,172663,172664],{"class":51,"line":59},[49,172665,3654],{"emptyLinePlaceholder":1330},[49,172667,172668,172670],{"class":51,"line":70},[49,172669,171907],{"class":109},[49,172671,4993],{"class":66},[49,172673,172674,172676,172678,172680],{"class":51,"line":86},[49,172675,3239],{"class":73},[49,172677,1403],{"class":66},[49,172679,156905],{"class":1505},[49,172681,1409],{"class":66},[49,172683,172684,172686,172688],{"class":51,"line":98},[49,172685,171919],{"class":109},[49,172687,153251],{"class":73},[49,172689,4993],{"class":66},[49,172691,172692],{"class":51,"line":121},[49,172693,172694],{"class":66},"    traceback.print_exc()\n",[19,172696,172697],{},"日志系统中常把异常堆栈记录到文件。",[14,172699,172701],{"id":172700},"_910-什么是模块","9.10 什么是模块",[19,172703,172704,172705,127207],{},"模块就是一个 ",[46,172706,147377],{},[19,172708,172709,172710,25867],{},"例如创建 ",[46,172711,172712],{},"my_math.py",[39,172714,172716],{"className":31626,"code":172715,"language":31628,"meta":44,"style":44},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[46,172717,172718,172726,172736,172740,172744,172753],{"__ignoreMap":44},[49,172719,172720,172722,172724],{"class":51,"line":52},[49,172721,33195],{"class":109},[49,172723,6461],{"class":62},[49,172725,152118],{"class":66},[49,172727,172728,172730,172732,172734],{"class":51,"line":59},[49,172729,5344],{"class":109},[49,172731,12121],{"class":66},[49,172733,1872],{"class":109},[49,172735,152129],{"class":66},[49,172737,172738],{"class":51,"line":70},[49,172739,3654],{"emptyLinePlaceholder":1330},[49,172741,172742],{"class":51,"line":86},[49,172743,3654],{"emptyLinePlaceholder":1330},[49,172745,172746,172748,172751],{"class":51,"line":98},[49,172747,33195],{"class":109},[49,172749,172750],{"class":62}," sub",[49,172752,152118],{"class":66},[49,172754,172755,172757,172759,172761],{"class":51,"line":121},[49,172756,5344],{"class":109},[49,172758,12121],{"class":66},[49,172760,1923],{"class":109},[49,172762,152129],{"class":66},[19,172764,172765],{},"在另一个文件中导入：",[39,172767,172769],{"className":31626,"code":172768,"language":31628,"meta":44,"style":44},"import my_math\n\nprint(my_math.add(1, 2))\n",[46,172770,172771,172778,172782],{"__ignoreMap":44},[49,172772,172773,172775],{"class":51,"line":52},[49,172774,31640],{"class":109},[49,172776,172777],{"class":66}," my_math\n",[49,172779,172780],{"class":51,"line":59},[49,172781,3654],{"emptyLinePlaceholder":1330},[49,172783,172784,172786,172789,172791,172793,172795],{"class":51,"line":70},[49,172785,31663],{"class":73},[49,172787,172788],{"class":66},"(my_math.add(",[49,172790,159],{"class":73},[49,172792,13687],{"class":66},[49,172794,1478],{"class":73},[49,172796,31745],{"class":66},[14,172798,172800],{"id":172799},"_911-import导入","9.11 import导入",[183,172802,172804],{"id":172803},"_9111-导入模块","9.11.1 导入模块",[39,172806,172808],{"className":31626,"code":172807,"language":31628,"meta":44,"style":44},"import random\n\nprint(random.randint(1, 10))\n",[46,172809,172810,172816,172820],{"__ignoreMap":44},[49,172811,172812,172814],{"class":51,"line":52},[49,172813,31640],{"class":109},[49,172815,46576],{"class":66},[49,172817,172818],{"class":51,"line":59},[49,172819,3654],{"emptyLinePlaceholder":1330},[49,172821,172822,172824,172827,172829,172831,172833],{"class":51,"line":70},[49,172823,31663],{"class":73},[49,172825,172826],{"class":66},"(random.randint(",[49,172828,159],{"class":73},[49,172830,13687],{"class":66},[49,172832,106],{"class":73},[49,172834,31745],{"class":66},[183,172836,172838],{"id":172837},"_9112-导入指定内容","9.11.2 导入指定内容",[39,172840,172842],{"className":31626,"code":172841,"language":31628,"meta":44,"style":44},"from random import randint\n\nprint(randint(1, 10))\n",[46,172843,172844,172855,172859],{"__ignoreMap":44},[49,172845,172846,172848,172850,172852],{"class":51,"line":52},[49,172847,31985],{"class":109},[49,172849,59035],{"class":66},[49,172851,31640],{"class":109},[49,172853,172854],{"class":66}," randint\n",[49,172856,172857],{"class":51,"line":59},[49,172858,3654],{"emptyLinePlaceholder":1330},[49,172860,172861,172863,172866,172868,172870,172872],{"class":51,"line":70},[49,172862,31663],{"class":73},[49,172864,172865],{"class":66},"(randint(",[49,172867,159],{"class":73},[49,172869,13687],{"class":66},[49,172871,106],{"class":73},[49,172873,31745],{"class":66},[183,172875,172877],{"id":172876},"_9113-起别名","9.11.3 起别名",[39,172879,172881],{"className":31626,"code":172880,"language":31628,"meta":44,"style":44},"import random as rd\n\nprint(rd.randint(1, 10))\n",[46,172882,172883,172894,172898],{"__ignoreMap":44},[49,172884,172885,172887,172889,172891],{"class":51,"line":52},[49,172886,31640],{"class":109},[49,172888,59035],{"class":66},[49,172890,32631],{"class":109},[49,172892,172893],{"class":66}," rd\n",[49,172895,172896],{"class":51,"line":59},[49,172897,3654],{"emptyLinePlaceholder":1330},[49,172899,172900,172902,172905,172907,172909,172911],{"class":51,"line":70},[49,172901,31663],{"class":73},[49,172903,172904],{"class":66},"(rd.randint(",[49,172906,159],{"class":73},[49,172908,13687],{"class":66},[49,172910,106],{"class":73},[49,172912,31745],{"class":66},[39,172914,172916],{"className":31626,"code":172915,"language":31628,"meta":44,"style":44},"from random import randint as rint\n\nprint(rint(1, 10))\n",[46,172917,172918,172934,172938],{"__ignoreMap":44},[49,172919,172920,172922,172924,172926,172929,172931],{"class":51,"line":52},[49,172921,31985],{"class":109},[49,172923,59035],{"class":66},[49,172925,31640],{"class":109},[49,172927,172928],{"class":66}," randint ",[49,172930,32631],{"class":109},[49,172932,172933],{"class":66}," rint\n",[49,172935,172936],{"class":51,"line":59},[49,172937,3654],{"emptyLinePlaceholder":1330},[49,172939,172940,172942,172945,172947,172949,172951],{"class":51,"line":70},[49,172941,31663],{"class":73},[49,172943,172944],{"class":66},"(rint(",[49,172946,159],{"class":73},[49,172948,13687],{"class":66},[49,172950,106],{"class":73},[49,172952,31745],{"class":66},[183,172954,172956],{"id":172955},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[39,172958,172960],{"className":31626,"code":172959,"language":31628,"meta":44,"style":44},"from random import *\n",[46,172961,172962],{"__ignoreMap":44},[49,172963,172964,172966,172968,172970],{"class":51,"line":52},[49,172965,31985],{"class":109},[49,172967,59035],{"class":66},[49,172969,31640],{"class":109},[49,172971,172972],{"class":109}," *\n",[19,172974,172975],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172977,172979],{"id":172978},"_912-常用内置模块","9.12 常用内置模块",[183,172981,172983],{"id":172982},"_9121-random","9.12.1 random",[39,172985,172987],{"className":31626,"code":172986,"language":31628,"meta":44,"style":44},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[46,172988,172989,172995,172999,173013,173032],{"__ignoreMap":44},[49,172990,172991,172993],{"class":51,"line":52},[49,172992,31640],{"class":109},[49,172994,46576],{"class":66},[49,172996,172997],{"class":51,"line":59},[49,172998,3654],{"emptyLinePlaceholder":1330},[49,173000,173001,173003,173005,173007,173009,173011],{"class":51,"line":70},[49,173002,31663],{"class":73},[49,173004,172826],{"class":66},[49,173006,159],{"class":73},[49,173008,13687],{"class":66},[49,173010,106],{"class":73},[49,173012,31745],{"class":66},[49,173014,173015,173017,173020,173022,173024,173026,173028,173030],{"class":51,"line":86},[49,173016,31663],{"class":73},[49,173018,173019],{"class":66},"(random.choice([",[49,173021,150913],{"class":1505},[49,173023,13687],{"class":66},[49,173025,151961],{"class":1505},[49,173027,13687],{"class":66},[49,173029,160756],{"class":1505},[49,173031,34391],{"class":66},[49,173033,173034,173036,173039,173041,173043,173045,173047,173049,173051,173053,173055,173057,173059,173061],{"class":51,"line":98},[49,173035,31663],{"class":73},[49,173037,173038],{"class":66},"(random.sample([",[49,173040,159],{"class":73},[49,173042,13687],{"class":66},[49,173044,1478],{"class":73},[49,173046,13687],{"class":66},[49,173048,1472],{"class":73},[49,173050,13687],{"class":66},[49,173052,1685],{"class":73},[49,173054,13687],{"class":66},[49,173056,1711],{"class":73},[49,173058,113426],{"class":66},[49,173060,1478],{"class":73},[49,173062,31745],{"class":66},[183,173064,173066],{"id":173065},"_9122-time","9.12.2 time",[39,173068,173070],{"className":31626,"code":173069,"language":31628,"meta":44,"style":44},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[46,173071,173072,173078,173082,173089,173097],{"__ignoreMap":44},[49,173073,173074,173076],{"class":51,"line":52},[49,173075,31640],{"class":109},[49,173077,33077],{"class":66},[49,173079,173080],{"class":51,"line":59},[49,173081,3654],{"emptyLinePlaceholder":1330},[49,173083,173084,173086],{"class":51,"line":70},[49,173085,31663],{"class":73},[49,173087,173088],{"class":66},"(time.time())\n",[49,173090,173091,173093,173095],{"class":51,"line":86},[49,173092,96296],{"class":66},[49,173094,159],{"class":73},[49,173096,1409],{"class":66},[49,173098,173099,173101,173103,173106],{"class":51,"line":98},[49,173100,31663],{"class":73},[49,173102,1403],{"class":66},[49,173104,173105],{"class":1505},"\"1秒后执行\"",[49,173107,1409],{"class":66},[183,173109,173111],{"id":173110},"_9123-datetime","9.12.3 datetime",[39,173113,173115],{"className":31626,"code":173114,"language":31628,"meta":44,"style":44},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[46,173116,173117,173129,173133,173143,173150],{"__ignoreMap":44},[49,173118,173119,173121,173124,173126],{"class":51,"line":52},[49,173120,31985],{"class":109},[49,173122,173123],{"class":66}," datetime ",[49,173125,31640],{"class":109},[49,173127,173128],{"class":66}," datetime\n",[49,173130,173131],{"class":51,"line":59},[49,173132,3654],{"emptyLinePlaceholder":1330},[49,173134,173135,173138,173140],{"class":51,"line":70},[49,173136,173137],{"class":66},"now ",[49,173139,1448],{"class":109},[49,173141,173142],{"class":66}," datetime.now()\n",[49,173144,173145,173147],{"class":51,"line":86},[49,173146,31663],{"class":73},[49,173148,173149],{"class":66},"(now)\n",[49,173151,173152,173154,173157,173160,173162,173165],{"class":51,"line":98},[49,173153,31663],{"class":73},[49,173155,173156],{"class":66},"(now.strftime(",[49,173158,173159],{"class":1505},"\"%Y-%m-",[49,173161,157716],{"class":73},[49,173163,173164],{"class":1505}," %H:%M:%S\"",[49,173166,31745],{"class":66},[183,173168,173170],{"id":173169},"_9124-os","9.12.4 os",[39,173172,173174],{"className":31626,"code":173173,"language":31628,"meta":44,"style":44},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[46,173175,173176,173182,173186,173193],{"__ignoreMap":44},[49,173177,173178,173180],{"class":51,"line":52},[49,173179,31640],{"class":109},[49,173181,46553],{"class":66},[49,173183,173184],{"class":51,"line":59},[49,173185,3654],{"emptyLinePlaceholder":1330},[49,173187,173188,173190],{"class":51,"line":70},[49,173189,31663],{"class":73},[49,173191,173192],{"class":66},"(os.getcwd())\n",[49,173194,173195,173197,173200,173203],{"class":51,"line":86},[49,173196,31663],{"class":73},[49,173198,173199],{"class":66},"(os.listdir(",[49,173201,173202],{"class":1505},"\".\"",[49,173204,31745],{"class":66},[183,173206,173208],{"id":173207},"_9125-sys","9.12.5 sys",[39,173210,173212],{"className":31626,"code":173211,"language":31628,"meta":44,"style":44},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[46,173213,173214,173221,173225,173232],{"__ignoreMap":44},[49,173215,173216,173218],{"class":51,"line":52},[49,173217,31640],{"class":109},[49,173219,173220],{"class":66}," sys\n",[49,173222,173223],{"class":51,"line":59},[49,173224,3654],{"emptyLinePlaceholder":1330},[49,173226,173227,173229],{"class":51,"line":70},[49,173228,31663],{"class":73},[49,173230,173231],{"class":66},"(sys.version)\n",[49,173233,173234,173236],{"class":51,"line":86},[49,173235,31663],{"class":73},[49,173237,173238],{"class":66},"(sys.path)\n",[14,173240,173242,173243,173245,173246,1643],{"id":173241},"_913-if-name-main","9.13 if ",[485,173244,81036],{}," == \"",[485,173247,103282],{},[19,173249,173250,173251,173254],{},"模块被直接运行和被导入时，",[46,173252,173253],{},"__name__"," 的值不同。",[19,173256,173257,173258,25867],{},"创建 ",[46,173259,173260],{},"my_module.py",[39,173262,173264],{"className":31626,"code":173263,"language":31628,"meta":44,"style":44},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[46,173265,173266,173274,173284,173288,173292,173304],{"__ignoreMap":44},[49,173267,173268,173270,173272],{"class":51,"line":52},[49,173269,33195],{"class":109},[49,173271,6461],{"class":62},[49,173273,152118],{"class":66},[49,173275,173276,173278,173280,173282],{"class":51,"line":59},[49,173277,5344],{"class":109},[49,173279,12121],{"class":66},[49,173281,1872],{"class":109},[49,173283,152129],{"class":66},[49,173285,173286],{"class":51,"line":70},[49,173287,3654],{"emptyLinePlaceholder":1330},[49,173289,173290],{"class":51,"line":86},[49,173291,3654],{"emptyLinePlaceholder":1330},[49,173293,173294,173296,173298,173300,173302],{"class":51,"line":98},[49,173295,2787],{"class":109},[49,173297,32468],{"class":73},[49,173299,102783],{"class":109},[49,173301,102786],{"class":1505},[49,173303,4993],{"class":66},[49,173305,173306,173308,173310,173312,173314,173316],{"class":51,"line":121},[49,173307,32547],{"class":73},[49,173309,167625],{"class":66},[49,173311,159],{"class":73},[49,173313,13687],{"class":66},[49,173315,1478],{"class":73},[49,173317,31745],{"class":66},[19,173319,173320],{},"作用：",[591,173322,173323,173326],{},[26,173324,173325],{},"直接运行该文件时，执行测试代码。",[26,173327,173328],{},"被其他文件导入时，不执行测试代码。",[19,173330,173331],{},"这是写模块时很常用的习惯。",[14,173333,173335],{"id":173334},"_914-包","9.14 包",[19,173337,173338,173339,173342],{},"包是包含 ",[46,173340,173341],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173344,173345],{},"目录结构：",[39,173347,173350],{"className":173348,"code":173349,"language":267,"meta":44},[1094],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[46,173351,173349],{"__ignoreMap":44},[19,173353,173354],{},"导入：",[39,173356,173358],{"className":31626,"code":173357,"language":31628,"meta":44,"style":44},"from utils.file_utils import read_file\n",[46,173359,173360],{"__ignoreMap":44},[49,173361,173362,173364,173367,173369],{"class":51,"line":52},[49,173363,31985],{"class":109},[49,173365,173366],{"class":66}," utils.file_utils ",[49,173368,31640],{"class":109},[49,173370,173371],{"class":66}," read_file\n",[19,173373,173374,173376],{},[46,173375,173341],{}," 可以为空，也可以写包初始化逻辑。",[14,173378,173380],{"id":173379},"_915-第三方包","9.15 第三方包",[19,173382,173383,173384,173386],{},"第三方包通过 ",[46,173385,25079],{}," 安装。",[39,173388,173390],{"className":25070,"code":173389,"language":25072,"meta":44,"style":44},"pip install requests\n",[46,173391,173392],{"__ignoreMap":44},[49,173393,173394,173396,173398],{"class":51,"line":52},[49,173395,25079],{"class":62},[49,173397,25082],{"class":1505},[49,173399,147123],{"class":1505},[19,173401,173402],{},"使用：",[39,173404,173406],{"className":31626,"code":173405,"language":31628,"meta":44,"style":44},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[46,173407,173408,173414,173418,173433],{"__ignoreMap":44},[49,173409,173410,173412],{"class":51,"line":52},[49,173411,31640],{"class":109},[49,173413,147123],{"class":66},[49,173415,173416],{"class":51,"line":59},[49,173417,3654],{"emptyLinePlaceholder":1330},[49,173419,173420,173423,173425,173428,173431],{"class":51,"line":70},[49,173421,173422],{"class":66},"response ",[49,173424,1448],{"class":109},[49,173426,173427],{"class":66}," requests.get(",[49,173429,173430],{"class":1505},"\"https:\u002F\u002Fwww.example.com\"",[49,173432,1409],{"class":66},[49,173434,173435,173437],{"class":51,"line":86},[49,173436,31663],{"class":73},[49,173438,173439],{"class":66},"(response.status_code)\n",[19,173441,173442],{},"查看已安装包：",[39,173444,173446],{"className":25070,"code":173445,"language":25072,"meta":44,"style":44},"pip list\n",[46,173447,173448],{"__ignoreMap":44},[49,173449,173450,173452],{"class":51,"line":52},[49,173451,25079],{"class":62},[49,173453,120179],{"class":1505},[19,173455,173456],{},"导出项目依赖：",[39,173458,173459],{"className":25070,"code":147318,"language":25072,"meta":44,"style":44},[46,173460,173461],{"__ignoreMap":44},[49,173462,173463,173465,173467,173469],{"class":51,"line":52},[49,173464,25079],{"class":62},[49,173466,147327],{"class":1505},[49,173468,27471],{"class":109},[49,173470,147332],{"class":1505},[19,173472,173473],{},"安装项目依赖：",[39,173475,173476],{"className":25070,"code":147338,"language":25072,"meta":44,"style":44},[46,173477,173478],{"__ignoreMap":44},[49,173479,173480,173482,173484,173486],{"class":51,"line":52},[49,173481,25079],{"class":62},[49,173483,25082],{"class":1505},[49,173485,120863],{"class":73},[49,173487,147332],{"class":1505},[14,173489,173491],{"id":173490},"_916-模块搜索路径","9.16 模块搜索路径",[19,173493,173494,173495,173498],{},"Python 导入模块时会在 ",[46,173496,173497],{},"sys.path"," 中查找。",[39,173500,173502],{"className":31626,"code":173501,"language":31628,"meta":44,"style":44},"import sys\n\nfor path in sys.path:\n    print(path)\n",[46,173503,173504,173510,173514,173526],{"__ignoreMap":44},[49,173505,173506,173508],{"class":51,"line":52},[49,173507,31640],{"class":109},[49,173509,173220],{"class":66},[49,173511,173512],{"class":51,"line":59},[49,173513,3654],{"emptyLinePlaceholder":1330},[49,173515,173516,173518,173521,173523],{"class":51,"line":70},[49,173517,4279],{"class":109},[49,173519,173520],{"class":66}," path ",[49,173522,27292],{"class":109},[49,173524,173525],{"class":66}," sys.path:\n",[49,173527,173528,173530],{"class":51,"line":86},[49,173529,32547],{"class":73},[49,173531,170254],{"class":66},[19,173533,173534],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173536,158648],{},[39,173538,173541],{"className":173539,"code":173540,"language":267,"meta":44},[1094],"random.py\njson.py\ntime.py\n",[46,173542,173540],{"__ignoreMap":44},[19,173544,173545],{},"这些文件名可能导致导入异常。",[14,173547,173549],{"id":173548},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173551,173345],{},[39,173553,173556],{"className":173554,"code":173555,"language":267,"meta":44},[1094],"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",[46,173557,173555],{"__ignoreMap":44},[19,173559,173560,25867],{},[46,173561,173562],{},"utils\u002Ffile_utils.py",[39,173564,173566],{"className":31626,"code":173565,"language":31628,"meta":44,"style":44},"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",[46,173567,173568,173574,173584,173588,173592,173602,173612,173620,173626,173630,173657,173667,173671,173675,173685,173711],{"__ignoreMap":44},[49,173569,173570,173572],{"class":51,"line":52},[49,173571,31640],{"class":109},[49,173573,148116],{"class":66},[49,173575,173576,173578,173580,173582],{"class":51,"line":59},[49,173577,31985],{"class":109},[49,173579,109535],{"class":66},[49,173581,31640],{"class":109},[49,173583,109540],{"class":66},[49,173585,173586],{"class":51,"line":70},[49,173587,3654],{"emptyLinePlaceholder":1330},[49,173589,173590],{"class":51,"line":86},[49,173591,3654],{"emptyLinePlaceholder":1330},[49,173593,173594,173596,173599],{"class":51,"line":98},[49,173595,33195],{"class":109},[49,173597,173598],{"class":62}," read_json",[49,173600,173601],{"class":66},"(path):\n",[49,173603,173604,173607,173609],{"class":51,"line":121},[49,173605,173606],{"class":66},"    path ",[49,173608,1448],{"class":109},[49,173610,173611],{"class":66}," Path(path)\n",[49,173613,173614,173616,173618],{"class":51,"line":134},[49,173615,4355],{"class":109},[49,173617,40178],{"class":109},[49,173619,170335],{"class":66},[49,173621,173622,173624],{"class":51,"line":1085},[49,173623,16003],{"class":109},[49,173625,53080],{"class":66},[49,173627,173628],{"class":51,"line":2574},[49,173629,3654],{"emptyLinePlaceholder":1330},[49,173631,173632,173634,173636,173639,173641,173643,173645,173647,173649,173651,173653,173655],{"class":51,"line":2586},[49,173633,35426],{"class":109},[49,173635,147816],{"class":73},[49,173637,173638],{"class":66},"(path, ",[49,173640,147826],{"class":1505},[49,173642,13687],{"class":66},[49,173644,147831],{"class":6468},[49,173646,1448],{"class":109},[49,173648,147836],{"class":1505},[49,173650,14966],{"class":66},[49,173652,32631],{"class":109},[49,173654,149178],{"class":6468},[49,173656,4993],{"class":66},[49,173658,173659,173661,173663,173665],{"class":51,"line":2867},[49,173660,16003],{"class":109},[49,173662,149189],{"class":66},[49,173664,46602],{"class":6468},[49,173666,1409],{"class":66},[49,173668,173669],{"class":51,"line":2872},[49,173670,3654],{"emptyLinePlaceholder":1330},[49,173672,173673],{"class":51,"line":2878},[49,173674,3654],{"emptyLinePlaceholder":1330},[49,173676,173677,173679,173682],{"class":51,"line":2883},[49,173678,33195],{"class":109},[49,173680,173681],{"class":62}," write_json",[49,173683,173684],{"class":66},"(path, data):\n",[49,173686,173687,173689,173691,173693,173695,173697,173699,173701,173703,173705,173707,173709],{"class":51,"line":2897},[49,173688,35426],{"class":109},[49,173690,147816],{"class":73},[49,173692,173638],{"class":66},[49,173694,153001],{"class":1505},[49,173696,13687],{"class":66},[49,173698,147831],{"class":6468},[49,173700,1448],{"class":109},[49,173702,147836],{"class":1505},[49,173704,14966],{"class":66},[49,173706,32631],{"class":109},[49,173708,149178],{"class":6468},[49,173710,4993],{"class":66},[49,173712,173713,173716,173718,173720,173722,173724,173726,173728,173730,173732,173734],{"class":51,"line":2902},[49,173714,173715],{"class":66},"        json.dump(data, ",[49,173717,46602],{"class":6468},[49,173719,13687],{"class":66},[49,173721,148162],{"class":6468},[49,173723,1448],{"class":109},[49,173725,35235],{"class":73},[49,173727,13687],{"class":66},[49,173729,153037],{"class":6468},[49,173731,1448],{"class":109},[49,173733,1478],{"class":73},[49,173735,1409],{"class":66},[19,173737,173738,25867],{},[46,173739,155632],{},[39,173741,173743],{"className":31626,"code":173742,"language":31628,"meta":44,"style":44},"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",[46,173744,173745,173756,173760,173773,173793],{"__ignoreMap":44},[49,173746,173747,173749,173751,173753],{"class":51,"line":52},[49,173748,31985],{"class":109},[49,173750,173366],{"class":66},[49,173752,31640],{"class":109},[49,173754,173755],{"class":66}," read_json, write_json\n",[49,173757,173758],{"class":51,"line":59},[49,173759,3654],{"emptyLinePlaceholder":1330},[49,173761,173762,173764,173766,173769,173771],{"class":51,"line":70},[49,173763,160741],{"class":66},[49,173765,1448],{"class":109},[49,173767,173768],{"class":66}," read_json(",[49,173770,152856],{"class":1505},[49,173772,1409],{"class":66},[49,173774,173775,173777,173779,173781,173783,173785,173787,173789,173791],{"class":51,"line":86},[49,173776,171559],{"class":66},[49,173778,63915],{"class":1505},[49,173780,77],{"class":66},[49,173782,150913],{"class":1505},[49,173784,13687],{"class":66},[49,173786,152497],{"class":1505},[49,173788,77],{"class":66},[49,173790,2378],{"class":73},[49,173792,166177],{"class":66},[49,173794,173795,173798,173800],{"class":51,"line":98},[49,173796,173797],{"class":66},"write_json(",[49,173799,152856],{"class":1505},[49,173801,173802],{"class":66},", students)\n",[14,173804,173806],{"id":173805},"_918-易错点","9.18 易错点",[591,173808,173809,173812,173817,173822,173825,173828],{},[26,173810,173811],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[26,173813,173814,173815,29633],{},"能指定异常类型就不要裸写 ",[46,173816,171919],{},[26,173818,173819,173821],{},[46,173820,172294],{}," 无论是否出错都会执行。",[26,173823,173824],{},"模块文件名不要和标准库重名。",[26,173826,173827],{},"导入自己写的模块时，要注意运行目录。",[26,173829,173830],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173832,173834],{"id":173833},"_919-本章练习","9.19 本章练习",[591,173836,173837,173840,173843,173849,173856],{},[26,173838,173839],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[26,173841,173842],{},"写函数读取文件，如果文件不存在则返回空字符串。",[26,173844,173257,173845,173848],{},[46,173846,173847],{},"math_utils.py","，实现加减乘除函数并导入使用。",[26,173850,173851,173852,173855],{},"创建一个 ",[46,173853,173854],{},"utils"," 包，把 JSON 读写函数放进去。",[26,173857,173858],{},"写一个程序，捕获除零异常和输入格式异常。",[1305,173860,173861],{},"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":44,"searchDepth":59,"depth":59,"links":173863},[173864,173865,173866,173867,173868,173869,173870,173871,173872,173873,173874,173880,173887,173889,173890,173891,173892,173893,173894],{"id":171716,"depth":59,"text":171717},{"id":171844,"depth":59,"text":171845},{"id":171893,"depth":59,"text":171894},{"id":172042,"depth":59,"text":172043},{"id":172214,"depth":59,"text":172215},{"id":172283,"depth":59,"text":172284},{"id":172394,"depth":59,"text":172395},{"id":172520,"depth":59,"text":172521},{"id":172645,"depth":59,"text":172646},{"id":172700,"depth":59,"text":172701},{"id":172799,"depth":59,"text":172800,"children":173875},[173876,173877,173878,173879],{"id":172803,"depth":70,"text":172804},{"id":172837,"depth":70,"text":172838},{"id":172876,"depth":70,"text":172877},{"id":172955,"depth":70,"text":172956},{"id":172978,"depth":59,"text":172979,"children":173881},[173882,173883,173884,173885,173886],{"id":172982,"depth":70,"text":172983},{"id":173065,"depth":70,"text":173066},{"id":173110,"depth":70,"text":173111},{"id":173169,"depth":70,"text":173170},{"id":173207,"depth":70,"text":173208},{"id":173241,"depth":59,"text":173888},"9.13 if name == \"main\"",{"id":173334,"depth":59,"text":173335},{"id":173379,"depth":59,"text":173380},{"id":173490,"depth":59,"text":173491},{"id":173548,"depth":59,"text":173549},{"id":173805,"depth":59,"text":173806},{"id":173833,"depth":59,"text":173834},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171708,"description":1327},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173901,"title":173902,"body":173903,"description":174066,"extension":1328,"meta":174067,"navigation":1330,"path":174068,"seo":174069,"stem":174070,"__hash__":174071},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173904,"toc":174061},[173905,173908,173911,173914,173925,173927,174001,174004,174007,174010,174013,174016,174019,174022,174025,174028,174031],[10,173906,173902],{"id":173907},"python教程",[19,173909,173910],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173912,173913],{},"建议学习环境：",[591,173915,173916,173919,173922],{},[26,173917,173918],{},"Python 版本：Python 3.10 及以上。",[26,173920,173921],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[26,173923,173924],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173926,118302],{"id":118302},[591,173928,173929,173935,173941,173947,173953,173959,173965,173971,173977,173983,173989,173995],{},[26,173930,173931],{},[1630,173932,173934],{"href":173933},".\u002Fch1-Python","Python环境与第一个程序",[26,173936,173937],{},[1630,173938,173940],{"href":173939},".\u002Fch2","基础语法、变量与字符串",[26,173942,173943],{},[1630,173944,173946],{"href":173945},".\u002Fch3","判断语句",[26,173948,173949],{},[1630,173950,173952],{"href":173951},".\u002Fch4","循环语句",[26,173954,173955],{},[1630,173956,173958],{"href":173957},".\u002Fch5","函数基础",[26,173960,173961],{},[1630,173962,173964],{"href":173963},".\u002Fch6","数据容器",[26,173966,173967],{},[1630,173968,173970],{"href":173969},".\u002Fch7","函数进阶",[26,173972,173973],{},[1630,173974,173976],{"href":173975},".\u002Fch8","文件操作",[26,173978,173979],{},[1630,173980,173982],{"href":173981},".\u002Fch9","异常、模块与包",[26,173984,173985],{},[1630,173986,173988],{"href":173987},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[26,173990,173991],{},[1630,173992,173994],{"href":173993},".\u002Fch11","面向对象基础",[26,173996,173997],{},[1630,173998,174000],{"href":173999},".\u002Fch12","综合案例与复习路线",[14,174002,174003],{"id":174003},"学习路线",[19,174005,174006],{},"第一阶段：能运行程序。",[19,174008,174009],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174011,174012],{},"第二阶段：能组织数据。",[19,174014,174015],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174017,174018],{},"第三阶段：能封装逻辑。",[19,174020,174021],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174023,174024],{},"第四阶段：能做小项目。",[19,174026,174027],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174029,174030],{"id":174030},"参考资料",[591,174032,174033,174040,174047,174054],{},[26,174034,174035,174036],{},"黑马程序员 Python 入门教程推荐：",[1630,174037,174038],{"href":174038,"rel":174039},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25113],[26,174041,174042,174043],{},"Python 官方中文教程：",[1630,174044,174045],{"href":174045,"rel":174046},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25113],[26,174048,174049,174050],{},"Python 标准库文档：",[1630,174051,174052],{"href":174052,"rel":174053},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25113],[26,174055,174056,174057],{},"pyecharts 文档：",[1630,174058,174059],{"href":174059,"rel":174060},"https:\u002F\u002Fpyecharts.org\u002F",[25113],{"title":44,"searchDepth":59,"depth":59,"links":174062},[174063,174064,174065],{"id":118302,"depth":59,"text":118302},{"id":174003,"depth":59,"text":174003},{"id":174030,"depth":59,"text":174030},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24627},"\u002Fwiki\u002F2024-10-10-python",{"title":173902,"description":174066},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331434558]