[{"data":1,"prerenderedAt":174023},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch21-yi-dong-duan-bu-ju-shi-zhan-xia-pian":3,"wiki-doc-nav":1330},{"id":4,"title":5,"body":6,"description":1322,"extension":1323,"meta":1324,"navigation":1325,"path":1326,"seo":1327,"stem":1328,"__hash__":1329},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":8,"toc":1300},"minimark",[9,13,18,23,28,32,36,43,46,49,52,55,58,143,146,151,154,157,161,173,177,180,183,192,198,202,205,211,214,218,221,228,231,234,241,244,251,254,257,264,267,270,273,290,294,297,300,303,307,310,313,316,319,322,325,328,331,334,404,407,527,535,543,546,549,553,556,560,565,568,575,578,584,589,592,595,598,601,604,607,610,613,669,671,700,704,707,710,713,721,724,727,731,787,790,794,800,811,814,819,822,825,831,834,837,840,843,846,849,852,855,883,889,892,895,898,901,904,907,912,915,918,921,929,932,939,942,945,947,971,974,977,980,983,986,989,992,995,1041,1044,1047,1081,1088,1091,1094,1097,1100,1103,1106,1113,1116,1119,1122,1125,1132,1135,1138,1145,1148,1151,1155,1158,1161,1164,1167,1170,1173,1176,1179,1182,1209,1212,1236,1240,1251,1254,1257,1260,1263,1266,1269,1272,1275,1278,1281,1284,1287,1290,1293,1296],[10,11,5],"h1",{"id":12},"_21-移动端布局实战下篇",[14,15,17],"h2",{"id":16},"_211-rem适配布局","21.1 rem适配布局",[19,20,22],"h3",{"id":21},"_2111-rem单位","21.1.1 rem单位",[24,25],"img",{"style":26,"src":27},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[29,30,31],"p",{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[19,33,35],{"id":34},"_2112-媒体查询","21.1.2 媒体查询",[37,38,39],"ol",{},[40,41,42],"li",{},"参数介绍",[24,44],{"style":26,"src":45},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[24,47],{"style":26,"src":48},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[24,50],{"style":26,"src":51},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[24,53],{"style":26,"src":54},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[24,56],{"style":26,"src":57},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[59,60,65],"pre",{"className":61,"code":62,"language":63,"meta":64,"style":64},"language-Css shiki shiki-themes github-light github-dark","\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n","Css","",[66,67,68,77,104,114,131,137],"code",{"__ignoreMap":64},[69,70,73],"span",{"class":71,"line":72},"line",1,[69,74,76],{"class":75},"sJ8bj","\u002F* 媒体查询 *\u002F\n",[69,78,80,84,88,92,95,98,101],{"class":71,"line":79},2,[69,81,83],{"class":82},"szBVR","@media",[69,85,87],{"class":86},"sVt8B"," (",[69,89,91],{"class":90},"sj4cs","max-width",[69,93,94],{"class":86},": ",[69,96,97],{"class":90},"768",[69,99,100],{"class":82},"px",[69,102,103],{"class":86},") {\n",[69,105,107,111],{"class":71,"line":106},3,[69,108,110],{"class":109},"sScJk","  .container",[69,112,113],{"class":86}," {\n",[69,115,117,120,122,125,128],{"class":71,"line":116},4,[69,118,119],{"class":90},"    width",[69,121,94],{"class":86},[69,123,124],{"class":90},"100",[69,126,127],{"class":82},"%",[69,129,130],{"class":86},";\n",[69,132,134],{"class":71,"line":133},5,[69,135,136],{"class":86},"  }\n",[69,138,140],{"class":71,"line":139},6,[69,141,142],{"class":86},"}\n",[29,144,145],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[37,147,148],{"start":79},[40,149,150],{},"引入资源",[24,152],{"style":26,"src":153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[29,155,156],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[19,158,160],{"id":159},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[162,163,164,167,170],"ul",{},[40,165,166],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[40,168,169],{},"媒体查询可以根据不同设备宽度来修改样式",[40,171,172],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,174,176],{"id":175},"_212-less基础","21.2 Less基础",[29,178,179],{},"css冗余度较高，不利于复用，没有很好的计算能力",[29,181,182],{},"Less可以解决该问题，它是css的扩展语言",[29,184,185,186],{},"Less中文网址： ",[187,188,189],"a",{"href":189,"rel":190},"http:\u002F\u002Flesscss.cn\u002F",[191],"nofollow",[29,193,194],{},[195,196,197],"strong",{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[19,199,201],{"id":200},"_2121-less安装","21.2.1 less安装",[29,203,204],{},"如果使用vscode，则无需进行下方安装步骤",[29,206,207],{},[187,208,209],{"href":209,"rel":210},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[191],[24,212],{"style":26,"src":213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[19,215,217],{"id":216},"_2122-less使用","21.2.2 less使用",[29,219,220],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[37,222,223],{},[40,224,225],{},[195,226,227],{},"Less 变量",[24,229],{"style":26,"src":230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[24,232],{"style":26,"src":233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[37,235,236],{"start":79},[40,237,238],{},[195,239,240],{},"Less 编译",[24,242],{"style":26,"src":243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[37,245,246],{"start":106},[40,247,248],{},[195,249,250],{},"Less 嵌套",[24,252],{"style":26,"src":253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[24,255],{"style":26,"src":256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[37,258,259],{"start":116},[40,260,261],{},[195,262,263],{},"Less 运算",[24,265],{"style":26,"src":266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[29,268,269],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[29,271,272],{},"注意点：",[162,274,275,278,281,284,287],{},[40,276,277],{},"乘号（*）和除号（\u002F）的写法",[40,279,280],{},"运算符中间左右有个空格隔开 1px + 5",[40,282,283],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[40,285,286],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[40,288,289],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,291,293],{"id":292},"_213-rem-适配方案","21.3 rem 适配方案",[29,295,296],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[29,298,299],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[24,301],{"style":26,"src":302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[19,304,306],{"id":305},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[29,308,309],{},"rem + 媒体查询 + less 技术",[24,311],{"style":26,"src":312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[29,314,315],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[29,317,318],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[24,320],{"style":26,"src":321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[29,323,324],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[29,326,327],{},"例如：",[24,329],{"style":26,"src":330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[29,332,333],{},"index.html:",[59,335,337],{"className":61,"code":336,"language":63,"meta":64,"style":64},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[66,338,339,344,352,370,374,381,399],{"__ignoreMap":64},[69,340,341],{"class":71,"line":72},[69,342,343],{"class":75},"\u002F* rem 适配方案 *\u002F\n",[69,345,346,350],{"class":71,"line":79},[69,347,349],{"class":348},"s9eBZ","html",[69,351,113],{"class":86},[69,353,354,357,359,362,364,367],{"class":71,"line":106},[69,355,356],{"class":90},"  font-size",[69,358,94],{"class":86},[69,360,361],{"class":90},"62.5",[69,363,127],{"class":82},[69,365,366],{"class":86},";  ",[69,368,369],{"class":75},"\u002F* 1rem = 10px *\u002F\n",[69,371,372],{"class":71,"line":116},[69,373,142],{"class":86},[69,375,376,379],{"class":71,"line":133},[69,377,378],{"class":109},".box",[69,380,113],{"class":86},[69,382,383,386,388,391,394,396],{"class":71,"line":139},[69,384,385],{"class":90},"  width",[69,387,94],{"class":86},[69,389,390],{"class":90},"10",[69,392,393],{"class":82},"rem",[69,395,366],{"class":86},[69,397,398],{"class":75},"\u002F* 100px *\u002F\n",[69,400,402],{"class":71,"line":401},7,[69,403,142],{"class":86},[29,405,406],{},"common.less",[59,408,410],{"className":61,"code":409,"language":63,"meta":64,"style":64},"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",[66,411,412,418,434,438,445,459,463,468,473,480,495,500,507,522],{"__ignoreMap":64},[69,413,414,416],{"class":71,"line":72},[69,415,349],{"class":348},[69,417,113],{"class":86},[69,419,420,422,424,426,428,431],{"class":71,"line":79},[69,421,356],{"class":90},[69,423,94],{"class":86},[69,425,361],{"class":90},[69,427,127],{"class":82},[69,429,430],{"class":86},"; ",[69,432,433],{"class":75},"\u002F* 10px *\u002F\n",[69,435,436],{"class":71,"line":106},[69,437,142],{"class":86},[69,439,440,443],{"class":71,"line":116},[69,441,442],{"class":348},"div",[69,444,113],{"class":86},[69,446,447,449,451,453,455,457],{"class":71,"line":133},[69,448,385],{"class":90},[69,450,94],{"class":86},[69,452,390],{"class":90},[69,454,393],{"class":82},[69,456,430],{"class":86},[69,458,398],{"class":75},[69,460,461],{"class":71,"line":139},[69,462,142],{"class":86},[69,464,465],{"class":71,"line":401},[69,466,467],{"class":86},"```Css\n",[69,469,471],{"class":71,"line":470},8,[69,472,343],{"class":75},[69,474,476,478],{"class":71,"line":475},9,[69,477,349],{"class":348},[69,479,113],{"class":86},[69,481,483,485,487,489,491,493],{"class":71,"line":482},10,[69,484,356],{"class":90},[69,486,94],{"class":86},[69,488,361],{"class":90},[69,490,127],{"class":82},[69,492,366],{"class":86},[69,494,369],{"class":75},[69,496,498],{"class":71,"line":497},11,[69,499,142],{"class":86},[69,501,503,505],{"class":71,"line":502},12,[69,504,378],{"class":109},[69,506,113],{"class":86},[69,508,510,512,514,516,518,520],{"class":71,"line":509},13,[69,511,385],{"class":90},[69,513,94],{"class":86},[69,515,390],{"class":90},[69,517,393],{"class":82},[69,519,366],{"class":86},[69,521,398],{"class":75},[69,523,525],{"class":71,"line":524},14,[69,526,142],{"class":86},[29,528,529,530,534],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[531,532,533],"em",{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[59,536,541],{"className":537,"code":539,"language":540},[538],"language-text","\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n","text",[66,542,539],{"__ignoreMap":64},[29,544,545],{},"less保存时会自动变成.css文件",[29,547,548],{},"好好搞懂上述代码写法",[19,550,552],{"id":551},"_2132-样式导入样式","21.3.2 样式导入样式",[24,554],{"style":26,"src":555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[19,557,559],{"id":558},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[37,561,562],{},[40,563,564],{},"准备工作",[24,566],{"style":26,"src":567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[29,569,570,571],{},"github地址：",[187,572,573],{"href":573,"rel":574},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[191],[29,576,577],{},"下载之后，将index.js文件拖到项目中就可以了",[29,579,580,581],{},"js文件引入到index.html中使用的是",[66,582,583],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[37,585,586],{"start":79},[40,587,588],{},"vscode插件",[24,590],{"style":26,"src":591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[29,593,594],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[29,596,597],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[24,599],{"style":26,"src":600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[29,602,603],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[24,605],{"style":26,"src":606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[29,608,609],{},"修改成75就可以，alt+z为快捷键",[29,611,612],{},"index.css：",[59,614,615],{"className":61,"code":336,"language":63,"meta":64,"style":64},[66,616,617,621,627,641,645,651,665],{"__ignoreMap":64},[69,618,619],{"class":71,"line":72},[69,620,343],{"class":75},[69,622,623,625],{"class":71,"line":79},[69,624,349],{"class":348},[69,626,113],{"class":86},[69,628,629,631,633,635,637,639],{"class":71,"line":106},[69,630,356],{"class":90},[69,632,94],{"class":86},[69,634,361],{"class":90},[69,636,127],{"class":82},[69,638,366],{"class":86},[69,640,369],{"class":75},[69,642,643],{"class":71,"line":116},[69,644,142],{"class":86},[69,646,647,649],{"class":71,"line":133},[69,648,378],{"class":109},[69,650,113],{"class":86},[69,652,653,655,657,659,661,663],{"class":71,"line":139},[69,654,385],{"class":90},[69,656,94],{"class":86},[69,658,390],{"class":90},[69,660,393],{"class":82},[69,662,366],{"class":86},[69,664,398],{"class":75},[69,666,667],{"class":71,"line":401},[69,668,142],{"class":86},[29,670,333],{},[59,672,674],{"className":61,"code":673,"language":63,"meta":64,"style":64},"body {\n  font-size: 16px;\n}\n",[66,675,676,683,696],{"__ignoreMap":64},[69,677,678,681],{"class":71,"line":72},[69,679,680],{"class":348},"body",[69,682,113],{"class":86},[69,684,685,687,689,692,694],{"class":71,"line":79},[69,686,356],{"class":90},[69,688,94],{"class":86},[69,690,691],{"class":90},"16",[69,693,100],{"class":82},[69,695,130],{"class":86},[69,697,698],{"class":71,"line":106},[69,699,142],{"class":86},[14,701,703],{"id":702},"_214-响应式开发","21.4 响应式开发",[29,705,706],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[24,708],{"style":26,"src":709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[29,711,712],{},"做法：",[162,714,715,718],{},[40,716,717],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[40,719,720],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[24,722],{"style":26,"src":723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[29,725,726],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[19,728,730],{"id":729},"_2141-简单代码示范","21.4.1 简单代码示范",[59,732,733],{"className":61,"code":336,"language":63,"meta":64,"style":64},[66,734,735,739,745,759,763,769,783],{"__ignoreMap":64},[69,736,737],{"class":71,"line":72},[69,738,343],{"class":75},[69,740,741,743],{"class":71,"line":79},[69,742,349],{"class":348},[69,744,113],{"class":86},[69,746,747,749,751,753,755,757],{"class":71,"line":106},[69,748,356],{"class":90},[69,750,94],{"class":86},[69,752,361],{"class":90},[69,754,127],{"class":82},[69,756,366],{"class":86},[69,758,369],{"class":75},[69,760,761],{"class":71,"line":116},[69,762,142],{"class":86},[69,764,765,767],{"class":71,"line":133},[69,766,378],{"class":109},[69,768,113],{"class":86},[69,770,771,773,775,777,779,781],{"class":71,"line":139},[69,772,385],{"class":90},[69,774,94],{"class":86},[69,776,390],{"class":90},[69,778,393],{"class":82},[69,780,366],{"class":86},[69,782,398],{"class":75},[69,784,785],{"class":71,"line":401},[69,786,142],{"class":86},[29,788,789],{},"父盒子一般命名为container",[19,791,793],{"id":792},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[29,795,796,797],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[195,798,799],{},"使得 Web 开发更加快捷",[162,801,802],{},[40,803,804,805],{},"官网：",[195,806,807],{},[187,808,809],{"href":809,"rel":810},"http:\u002F\u002Fgetbootstrap.com\u002F",[191],[29,812,813],{},"可以直接去官网拿现成的东西",[37,815,816],{},[40,817,818],{},"Bootstrap的使用",[29,820,821],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[29,823,824],{},"Bootstrap 使用四步曲：",[29,826,827,830],{},[195,828,829],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[24,832],{"style":26,"src":833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[29,835,836],{},"打开Bootstrap官网，然后下载",[24,838],{"style":26,"src":839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[24,841],{"style":26,"src":842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[29,844,845],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[29,847,848],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[29,850,851],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[24,853],{"style":26,"src":854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[59,856,858],{"className":61,"code":857,"language":63,"meta":64,"style":64},".center {\n  color: red;\n}\n",[66,859,860,867,879],{"__ignoreMap":64},[69,861,862,865],{"class":71,"line":72},[69,863,864],{"class":109},".center",[69,866,113],{"class":86},[69,868,869,872,874,877],{"class":71,"line":79},[69,870,871],{"class":90},"  color",[69,873,94],{"class":86},[69,875,876],{"class":90},"red",[69,878,130],{"class":86},[69,880,881],{"class":71,"line":106},[69,882,142],{"class":86},[29,884,885,888],{},[66,886,887],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[24,890],{"style":26,"src":891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[24,893],{"style":26,"src":894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[24,896],{"style":26,"src":897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[29,899,900],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[24,902],{"style":26,"src":903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[29,905,906],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[37,908,909],{"start":79},[40,910,911],{},"布局容器",[24,913],{"style":26,"src":914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[29,916,917],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[29,919,920],{},"container-fluid用于移动式布局比较方便",[37,922,923],{"start":106},[40,924,925,926],{},"bootstrap ",[195,927,928],{},"栅格系统原理",[24,930],{"style":26,"src":931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[37,933,934],{"start":116},[40,935,936],{},[195,937,938],{},"栅格选项参数",[24,940],{"style":26,"src":941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[29,943,944],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[29,946,327],{},[59,948,949],{"className":61,"code":857,"language":63,"meta":64,"style":64},[66,950,951,957,967],{"__ignoreMap":64},[69,952,953,955],{"class":71,"line":72},[69,954,864],{"class":109},[69,956,113],{"class":86},[69,958,959,961,963,965],{"class":71,"line":79},[69,960,871],{"class":90},[69,962,94],{"class":86},[69,964,876],{"class":90},[69,966,130],{"class":86},[69,968,969],{"class":71,"line":106},[69,970,142],{"class":86},[29,972,973],{},"效果：",[24,975],{"style":26,"src":976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[29,978,979],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[29,981,982],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[29,984,985],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[29,987,988],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[29,990,991],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[29,993,994],{},"汇总展示说明：",[59,996,1000],{"className":997,"code":998,"language":999,"meta":64,"style":64},"language-Html shiki shiki-themes github-light github-dark","\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n","Html",[66,1001,1002,1007,1027,1032],{"__ignoreMap":64},[69,1003,1004],{"class":71,"line":72},[69,1005,1006],{"class":75},"\u003C!-- HTML 代码示例 -->\n",[69,1008,1009,1012,1014,1017,1020,1024],{"class":71,"line":79},[69,1010,1011],{"class":86},"\u003C",[69,1013,442],{"class":348},[69,1015,1016],{"class":109}," class",[69,1018,1019],{"class":86},"=",[69,1021,1023],{"class":1022},"sZZnC","\"example\"",[69,1025,1026],{"class":86},">\n",[69,1028,1029],{"class":71,"line":106},[69,1030,1031],{"class":86},"  示例内容\n",[69,1033,1034,1037,1039],{"class":71,"line":116},[69,1035,1036],{"class":86},"\u003C\u002F",[69,1038,442],{"class":348},[69,1040,1026],{"class":86},[24,1042],{"style":26,"src":1043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[29,1045,1046],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[59,1048,1049],{"className":997,"code":998,"language":999,"meta":64,"style":64},[66,1050,1051,1055,1069,1073],{"__ignoreMap":64},[69,1052,1053],{"class":71,"line":72},[69,1054,1006],{"class":75},[69,1056,1057,1059,1061,1063,1065,1067],{"class":71,"line":79},[69,1058,1011],{"class":86},[69,1060,442],{"class":348},[69,1062,1016],{"class":109},[69,1064,1019],{"class":86},[69,1066,1023],{"class":1022},[69,1068,1026],{"class":86},[69,1070,1071],{"class":71,"line":106},[69,1072,1031],{"class":86},[69,1074,1075,1077,1079],{"class":71,"line":116},[69,1076,1036],{"class":86},[69,1078,442],{"class":348},[69,1080,1026],{"class":86},[37,1082,1083],{"start":133},[40,1084,1085],{},[195,1086,1087],{},"列嵌套",[24,1089],{"style":26,"src":1090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[29,1092,1093],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[29,1095,1096],{},"没加row内部这样：",[24,1098],{"style":26,"src":1099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[29,1101,1102],{},"加上row之后内部为：",[24,1104],{"style":26,"src":1105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[37,1107,1108],{"start":139},[40,1109,1110],{},[195,1111,1112],{},"列偏移",[24,1114],{"style":26,"src":1115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[29,1117,1118],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[29,1120,1121],{},"要加偏移量，即偏移份数",[29,1123,1124],{},"偏移的份数=12-两个盒子的份数",[37,1126,1127],{"start":401},[40,1128,1129],{},[195,1130,1131],{},"列排序",[24,1133],{"style":26,"src":1134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[29,1136,1137],{},"pull拉左；push推右",[37,1139,1140],{"start":470},[40,1141,1142],{},[195,1143,1144],{},"响应式工具",[24,1146],{"style":26,"src":1147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[29,1149,1150],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[19,1152,1154],{"id":1153},"_2143-响应式小项目","21.4.3 响应式小项目",[29,1156,1157],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[29,1159,1160],{},"ul {",[29,1162,1163],{},"list-style: none;",[29,1165,1166],{},"margin:0;",[29,1168,1169],{},"padding:0; }",[24,1171],{"style":26,"src":1172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[24,1174],{"style":26,"src":1175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[29,1177,1178],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[29,1180,1181],{},"结构：",[59,1183,1185],{"className":61,"code":1184,"language":63,"meta":64,"style":64},".box {\n  float: left;\n}\n",[66,1186,1187,1193,1205],{"__ignoreMap":64},[69,1188,1189,1191],{"class":71,"line":72},[69,1190,378],{"class":109},[69,1192,113],{"class":86},[69,1194,1195,1198,1200,1203],{"class":71,"line":79},[69,1196,1197],{"class":90},"  float",[69,1199,94],{"class":86},[69,1201,1202],{"class":90},"left",[69,1204,130],{"class":86},[69,1206,1207],{"class":71,"line":106},[69,1208,142],{"class":86},[29,1210,1211],{},"样式：",[59,1213,1214],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,1215,1216,1222,1232],{"__ignoreMap":64},[69,1217,1218,1220],{"class":71,"line":72},[69,1219,378],{"class":109},[69,1221,113],{"class":86},[69,1223,1224,1226,1228,1230],{"class":71,"line":79},[69,1225,1197],{"class":90},[69,1227,94],{"class":86},[69,1229,1202],{"class":90},[69,1231,130],{"class":86},[69,1233,1234],{"class":71,"line":106},[69,1235,142],{"class":86},[14,1237,1239],{"id":1238},"_215-swiper-插件使用","21.5 swiper 插件使用",[162,1241,1242,1245,1248],{},[40,1243,1244],{},"下载需要的css和js文件html页面中 引入相关文件",[40,1246,1247],{},"官网找到类似案例，复制html结构，css样式 js 语法",[40,1249,1250],{},"根据需求定制修改模块",[24,1252],{"style":26,"src":1253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[29,1255,1256],{},"解压后将这两部分放到项目中",[24,1258],{"style":26,"src":1259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[29,1261,1262],{},"这个插件可以帮助我们实现轮播图效果",[29,1264,1265],{},"用法：",[24,1267],{"style":26,"src":1268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[29,1270,1271],{},"找到自己喜欢的",[24,1273],{"style":26,"src":1274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[29,1276,1277],{},"右键，查看网页源代码",[24,1279],{"style":26,"src":1280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[29,1282,1283],{},"复制人家的结构内容",[29,1285,1286],{},"然后去看API文档：",[24,1288],{"style":26,"src":1289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[29,1291,1292],{},"可以看看如何修改样式",[29,1294,1295],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1297,1298,1299],"style",{},"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":64,"searchDepth":79,"depth":79,"links":1301},[1302,1307,1311,1316,1321],{"id":16,"depth":79,"text":17,"children":1303},[1304,1305,1306],{"id":21,"depth":106,"text":22},{"id":34,"depth":106,"text":35},{"id":159,"depth":106,"text":160},{"id":175,"depth":79,"text":176,"children":1308},[1309,1310],{"id":200,"depth":106,"text":201},{"id":216,"depth":106,"text":217},{"id":292,"depth":79,"text":293,"children":1312},[1313,1314,1315],{"id":305,"depth":106,"text":306},{"id":551,"depth":106,"text":552},{"id":558,"depth":106,"text":559},{"id":702,"depth":79,"text":703,"children":1317},[1318,1319,1320],{"id":729,"depth":106,"text":730},{"id":792,"depth":106,"text":793},{"id":1153,"depth":106,"text":1154},{"id":1238,"depth":79,"text":1239},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":5,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",[1331,6406,7512,8932,11921,13272,14760,15849,24610,24622,25218,25244,25368,25609,25674,25692,25705,25752,25876,26045,26244,26424,26629,26765,26860,26897,26910,27220,27960,28668,28689,29709,31340,31491,31504,31516,31817,51629,51644,51661,51694,54558,77899,94044,94065,94178,94299,95069,95732,96093,96131,96237,96337,96380,96406,96467,98121,98222,98247,98738,99238,100318,100601,101343,101845,101857,103873,105537,107040,108738,110655,112574,114596,118066,118498,118961,119710,122654,123002,123024,123380,126687,126699,127102,127125,127272,127439,127643,127942,128497,129151,131082,132673,133322,134816,136247,137480,139174,140925,143335,143451,144386,144597,145482,146490,146718,146731,147886,150298,152666,155987,158464,160108,161885,163898,166950,169130,171657,173851],{"id":1332,"title":1333,"body":1334,"description":64,"extension":1323,"meta":6401,"navigation":1325,"path":6402,"seo":6403,"stem":6404,"__hash__":6405},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1335,"toc":6373},[1336,1339,1343,1346,1350,1361,1365,1369,1372,1375,1378,1381,1384,1412,1416,1419,1422,1425,1427,1477,1481,1499,1501,1515,1518,1526,1529,2385,2392,2408,2412,2498,2502,2508,2593,2597,2635,2639,2703,2707,2711,2717,2728,2732,2737,2741,2746,2750,2755,2759,2763,2768,3032,3037,3175,3180,3436,3439,3447,3451,3456,3559,3562,3868,3877,3978,3981,3984,3987,3990,4250,4255,4395,4398,4577,4580,4708,4711,4863,4867,4872,4875,4886,4894,4897,5004,5008,5012,5017,5067,5072,5077,5101,5106,5159,5162,5167,5344,5349,5634,5639,6036,6040,6045,6102,6107,6115,6118,6258,6261,6370],[10,1337,1333],{"id":1338},"_1基础入门",[14,1340,1342],{"id":1341},"_11注释","1.1注释",[29,1344,1345],{},"\u002F\u002F或者\u002F* *\u002F",[14,1347,1349],{"id":1348},"_12命名","1.2命名",[37,1351,1352,1355,1358],{},[40,1353,1354],{},"字母数字下划线",[40,1356,1357],{},"开头必须是字母或_",[40,1359,1360],{},"不能使用关键词",[14,1362,1364],{"id":1363},"_13数据类型","1.3数据类型",[19,1366,1368],{"id":1367},"_131整形","1.3.1整形",[29,1370,1371],{},"short 短整形 2",[29,1373,1374],{},"int 整形 4",[29,1376,1377],{},"long 长整形 win4 linux32位4 linux64位8",[29,1379,1380],{},"long long 长长整形 8",[29,1382,1383],{},"利用sizeof可以求数据类型占用的内存空间大小",[59,1385,1389],{"className":1386,"code":1387,"language":1388,"meta":64,"style":64},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[66,1390,1391,1405],{"__ignoreMap":64},[69,1392,1393,1396,1399,1402],{"class":71,"line":72},[69,1394,1395],{"class":82},"sizeof",[69,1397,1398],{"class":86},"(",[69,1400,1401],{"class":82},"int",[69,1403,1404],{"class":86},")\n",[69,1406,1407,1409],{"class":71,"line":79},[69,1408,1395],{"class":82},[69,1410,1411],{"class":86},"(num)\n",[19,1413,1415],{"id":1414},"_132浮点型","1.3.2浮点型",[29,1417,1418],{},"float 单精度 4节 7位有效数字",[29,1420,1421],{},"double 双精度 8节 15-16有效数字",[29,1423,1424],{},"默认情况下，输出一个小数，会显示6位有效数字",[29,1426,272],{},[59,1428,1430],{"className":1386,"code":1429,"language":1388,"meta":64,"style":64},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[66,1431,1432,1454],{"__ignoreMap":64},[69,1433,1434,1437,1440,1442,1445,1448,1451],{"class":71,"line":72},[69,1435,1436],{"class":82},"float",[69,1438,1439],{"class":86}," f1",[69,1441,1019],{"class":82},[69,1443,1444],{"class":90},"3.14",[69,1446,1447],{"class":82},"f",[69,1449,1450],{"class":86},";",[69,1452,1453],{"class":75}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[69,1455,1456,1458,1461,1463,1466,1469,1472,1474],{"class":71,"line":79},[69,1457,1436],{"class":82},[69,1459,1460],{"class":86}," f2",[69,1462,1019],{"class":82},[69,1464,1465],{"class":90},"3",[69,1467,1468],{"class":82},"e",[69,1470,1471],{"class":90},"2",[69,1473,1450],{"class":86},[69,1475,1476],{"class":75}," \u002F\u002F科学记数法\n",[19,1478,1480],{"id":1479},"_133字符型","1.3.3字符型",[59,1482,1484],{"className":1386,"code":1483,"language":1388,"meta":64,"style":64},"char ch='a'\n",[66,1485,1486],{"__ignoreMap":64},[69,1487,1488,1491,1494,1496],{"class":71,"line":72},[69,1489,1490],{"class":82},"char",[69,1492,1493],{"class":86}," ch",[69,1495,1019],{"class":82},[69,1497,1498],{"class":1022},"'a'\n",[29,1500,272],{},[37,1502,1503,1506,1509,1512],{},[40,1504,1505],{},"在显示字符型变量时，只能单引号，双引号x",[40,1507,1508],{},"单引号内只能一个字符，不能字符串",[40,1510,1511],{},"c和c++字符型变量只占用一个字符",[40,1513,1514],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[29,1516,1517],{},"ASCII码大致由以下两部分组成：",[37,1519,1520,1523],{},[40,1521,1522],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[40,1524,1525],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[29,1527,1528],{},"ASCII码表格：",[1530,1531,1532,1575],"table",{},[1533,1534,1535],"thead",{},[1536,1537,1538,1545,1550,1554,1559,1563,1567,1571],"tr",{},[1539,1540,1541,1544],"th",{},[195,1542,1543],{},"ASCII","值",[1539,1546,1547],{},[195,1548,1549],{},"控制字符",[1539,1551,1552,1544],{},[195,1553,1543],{},[1539,1555,1556],{},[195,1557,1558],{},"字符",[1539,1560,1561,1544],{},[195,1562,1543],{},[1539,1564,1565],{},[195,1566,1558],{},[1539,1568,1569,1544],{},[195,1570,1543],{},[1539,1572,1573],{},[195,1574,1558],{},[1576,1577,1578,1605,1630,1655,1680,1705,1729,1754,1780,1805,1831,1856,1882,1907,1933,1959,1985,2008,2033,2058,2083,2108,2133,2158,2183,2208,2233,2259,2284,2308,2333,2359],"tbody",{},[1536,1579,1580,1584,1587,1590,1593,1596,1599,1602],{},[1581,1582,1583],"td",{},"0",[1581,1585,1586],{},"NUT",[1581,1588,1589],{},"32",[1581,1591,1592],{},"(space)",[1581,1594,1595],{},"64",[1581,1597,1598],{},"@",[1581,1600,1601],{},"96",[1581,1603,1604],{},"、",[1536,1606,1607,1610,1613,1616,1619,1622,1625,1628],{},[1581,1608,1609],{},"1",[1581,1611,1612],{},"SOH",[1581,1614,1615],{},"33",[1581,1617,1618],{},"!",[1581,1620,1621],{},"65",[1581,1623,1624],{},"A",[1581,1626,1627],{},"97",[1581,1629,187],{},[1536,1631,1632,1634,1637,1640,1643,1646,1649,1652],{},[1581,1633,1471],{},[1581,1635,1636],{},"STX",[1581,1638,1639],{},"34",[1581,1641,1642],{},"\"",[1581,1644,1645],{},"66",[1581,1647,1648],{},"B",[1581,1650,1651],{},"98",[1581,1653,1654],{},"b",[1536,1656,1657,1659,1662,1665,1668,1671,1674,1677],{},[1581,1658,1465],{},[1581,1660,1661],{},"ETX",[1581,1663,1664],{},"35",[1581,1666,1667],{},"#",[1581,1669,1670],{},"67",[1581,1672,1673],{},"C",[1581,1675,1676],{},"99",[1581,1678,1679],{},"c",[1536,1681,1682,1685,1688,1691,1694,1697,1700,1702],{},[1581,1683,1684],{},"4",[1581,1686,1687],{},"EOT",[1581,1689,1690],{},"36",[1581,1692,1693],{},"$",[1581,1695,1696],{},"68",[1581,1698,1699],{},"D",[1581,1701,124],{},[1581,1703,1704],{},"d",[1536,1706,1707,1710,1713,1716,1718,1721,1724,1727],{},[1581,1708,1709],{},"5",[1581,1711,1712],{},"ENQ",[1581,1714,1715],{},"37",[1581,1717,127],{},[1581,1719,1720],{},"69",[1581,1722,1723],{},"E",[1581,1725,1726],{},"101",[1581,1728,1468],{},[1536,1730,1731,1734,1737,1740,1743,1746,1749,1752],{},[1581,1732,1733],{},"6",[1581,1735,1736],{},"ACK",[1581,1738,1739],{},"38",[1581,1741,1742],{},"&",[1581,1744,1745],{},"70",[1581,1747,1748],{},"F",[1581,1750,1751],{},"102",[1581,1753,1447],{},[1536,1755,1756,1759,1762,1765,1768,1771,1774,1777],{},[1581,1757,1758],{},"7",[1581,1760,1761],{},"BEL",[1581,1763,1764],{},"39",[1581,1766,1767],{},",",[1581,1769,1770],{},"71",[1581,1772,1773],{},"G",[1581,1775,1776],{},"103",[1581,1778,1779],{},"g",[1536,1781,1782,1785,1788,1791,1793,1796,1799,1802],{},[1581,1783,1784],{},"8",[1581,1786,1787],{},"BS",[1581,1789,1790],{},"40",[1581,1792,1398],{},[1581,1794,1795],{},"72",[1581,1797,1798],{},"H",[1581,1800,1801],{},"104",[1581,1803,1804],{},"h",[1536,1806,1807,1810,1813,1816,1819,1822,1825,1828],{},[1581,1808,1809],{},"9",[1581,1811,1812],{},"HT",[1581,1814,1815],{},"41",[1581,1817,1818],{},")",[1581,1820,1821],{},"73",[1581,1823,1824],{},"I",[1581,1826,1827],{},"105",[1581,1829,1830],{},"i",[1536,1832,1833,1835,1838,1841,1844,1847,1850,1853],{},[1581,1834,390],{},[1581,1836,1837],{},"LF",[1581,1839,1840],{},"42",[1581,1842,1843],{},"*",[1581,1845,1846],{},"74",[1581,1848,1849],{},"J",[1581,1851,1852],{},"106",[1581,1854,1855],{},"j",[1536,1857,1858,1861,1864,1867,1870,1873,1876,1879],{},[1581,1859,1860],{},"11",[1581,1862,1863],{},"VT",[1581,1865,1866],{},"43",[1581,1868,1869],{},"+",[1581,1871,1872],{},"75",[1581,1874,1875],{},"K",[1581,1877,1878],{},"107",[1581,1880,1881],{},"k",[1536,1883,1884,1887,1890,1893,1895,1898,1901,1904],{},[1581,1885,1886],{},"12",[1581,1888,1889],{},"FF",[1581,1891,1892],{},"44",[1581,1894,1767],{},[1581,1896,1897],{},"76",[1581,1899,1900],{},"L",[1581,1902,1903],{},"108",[1581,1905,1906],{},"l",[1536,1908,1909,1912,1915,1918,1921,1924,1927,1930],{},[1581,1910,1911],{},"13",[1581,1913,1914],{},"CR",[1581,1916,1917],{},"45",[1581,1919,1920],{},"-",[1581,1922,1923],{},"77",[1581,1925,1926],{},"M",[1581,1928,1929],{},"109",[1581,1931,1932],{},"m",[1536,1934,1935,1938,1941,1944,1947,1950,1953,1956],{},[1581,1936,1937],{},"14",[1581,1939,1940],{},"SO",[1581,1942,1943],{},"46",[1581,1945,1946],{},".",[1581,1948,1949],{},"78",[1581,1951,1952],{},"N",[1581,1954,1955],{},"110",[1581,1957,1958],{},"n",[1536,1960,1961,1964,1967,1970,1973,1976,1979,1982],{},[1581,1962,1963],{},"15",[1581,1965,1966],{},"SI",[1581,1968,1969],{},"47",[1581,1971,1972],{},"\u002F",[1581,1974,1975],{},"79",[1581,1977,1978],{},"O",[1581,1980,1981],{},"111",[1581,1983,1984],{},"o",[1536,1986,1987,1989,1992,1995,1997,2000,2003,2006],{},[1581,1988,691],{},[1581,1990,1991],{},"DLE",[1581,1993,1994],{},"48",[1581,1996,1583],{},[1581,1998,1999],{},"80",[1581,2001,2002],{},"P",[1581,2004,2005],{},"112",[1581,2007,29],{},[1536,2009,2010,2013,2016,2019,2021,2024,2027,2030],{},[1581,2011,2012],{},"17",[1581,2014,2015],{},"DCI",[1581,2017,2018],{},"49",[1581,2020,1609],{},[1581,2022,2023],{},"81",[1581,2025,2026],{},"Q",[1581,2028,2029],{},"113",[1581,2031,2032],{},"q",[1536,2034,2035,2038,2041,2044,2046,2049,2052,2055],{},[1581,2036,2037],{},"18",[1581,2039,2040],{},"DC2",[1581,2042,2043],{},"50",[1581,2045,1471],{},[1581,2047,2048],{},"82",[1581,2050,2051],{},"R",[1581,2053,2054],{},"114",[1581,2056,2057],{},"r",[1536,2059,2060,2063,2066,2069,2071,2074,2077,2080],{},[1581,2061,2062],{},"19",[1581,2064,2065],{},"DC3",[1581,2067,2068],{},"51",[1581,2070,1465],{},[1581,2072,2073],{},"83",[1581,2075,2076],{},"S",[1581,2078,2079],{},"115",[1581,2081,2082],{},"s",[1536,2084,2085,2088,2091,2094,2096,2099,2102,2105],{},[1581,2086,2087],{},"20",[1581,2089,2090],{},"DC4",[1581,2092,2093],{},"52",[1581,2095,1684],{},[1581,2097,2098],{},"84",[1581,2100,2101],{},"T",[1581,2103,2104],{},"116",[1581,2106,2107],{},"t",[1536,2109,2110,2113,2116,2119,2121,2124,2127,2130],{},[1581,2111,2112],{},"21",[1581,2114,2115],{},"NAK",[1581,2117,2118],{},"53",[1581,2120,1709],{},[1581,2122,2123],{},"85",[1581,2125,2126],{},"U",[1581,2128,2129],{},"117",[1581,2131,2132],{},"u",[1536,2134,2135,2138,2141,2144,2146,2149,2152,2155],{},[1581,2136,2137],{},"22",[1581,2139,2140],{},"SYN",[1581,2142,2143],{},"54",[1581,2145,1733],{},[1581,2147,2148],{},"86",[1581,2150,2151],{},"V",[1581,2153,2154],{},"118",[1581,2156,2157],{},"v",[1536,2159,2160,2163,2166,2169,2171,2174,2177,2180],{},[1581,2161,2162],{},"23",[1581,2164,2165],{},"TB",[1581,2167,2168],{},"55",[1581,2170,1758],{},[1581,2172,2173],{},"87",[1581,2175,2176],{},"W",[1581,2178,2179],{},"119",[1581,2181,2182],{},"w",[1536,2184,2185,2188,2191,2194,2196,2199,2202,2205],{},[1581,2186,2187],{},"24",[1581,2189,2190],{},"CAN",[1581,2192,2193],{},"56",[1581,2195,1784],{},[1581,2197,2198],{},"88",[1581,2200,2201],{},"X",[1581,2203,2204],{},"120",[1581,2206,2207],{},"x",[1536,2209,2210,2213,2216,2219,2221,2224,2227,2230],{},[1581,2211,2212],{},"25",[1581,2214,2215],{},"EM",[1581,2217,2218],{},"57",[1581,2220,1809],{},[1581,2222,2223],{},"89",[1581,2225,2226],{},"Y",[1581,2228,2229],{},"121",[1581,2231,2232],{},"y",[1536,2234,2235,2238,2241,2244,2247,2250,2253,2256],{},[1581,2236,2237],{},"26",[1581,2239,2240],{},"SUB",[1581,2242,2243],{},"58",[1581,2245,2246],{},":",[1581,2248,2249],{},"90",[1581,2251,2252],{},"Z",[1581,2254,2255],{},"122",[1581,2257,2258],{},"z",[1536,2260,2261,2264,2267,2270,2272,2275,2278,2281],{},[1581,2262,2263],{},"27",[1581,2265,2266],{},"ESC",[1581,2268,2269],{},"59",[1581,2271,1450],{},[1581,2273,2274],{},"91",[1581,2276,2277],{},"[",[1581,2279,2280],{},"123",[1581,2282,2283],{},"{",[1536,2285,2286,2289,2292,2295,2297,2300,2302,2305],{},[1581,2287,2288],{},"28",[1581,2290,2291],{},"FS",[1581,2293,2294],{},"60",[1581,2296,1011],{},[1581,2298,2299],{},"92",[1581,2301,1972],{},[1581,2303,2304],{},"124",[1581,2306,2307],{},"|",[1536,2309,2310,2313,2316,2319,2321,2324,2327,2330],{},[1581,2311,2312],{},"29",[1581,2314,2315],{},"GS",[1581,2317,2318],{},"61",[1581,2320,1019],{},[1581,2322,2323],{},"93",[1581,2325,2326],{},"]",[1581,2328,2329],{},"125",[1581,2331,2332],{},"}",[1536,2334,2335,2338,2341,2344,2347,2350,2353,2356],{},[1581,2336,2337],{},"30",[1581,2339,2340],{},"RS",[1581,2342,2343],{},"62",[1581,2345,2346],{},">",[1581,2348,2349],{},"94",[1581,2351,2352],{},"^",[1581,2354,2355],{},"126",[1581,2357,2358],{},"`",[1536,2360,2361,2364,2367,2370,2373,2376,2379,2382],{},[1581,2362,2363],{},"31",[1581,2365,2366],{},"US",[1581,2368,2369],{},"63",[1581,2371,2372],{},"?",[1581,2374,2375],{},"95",[1581,2377,2378],{},"_",[1581,2380,2381],{},"127",[1581,2383,2384],{},"DEL",[29,2386,2387,2388,2391],{},"ASCII 码大致由以下",[195,2389,2390],{},"两部分组","成：",[162,2393,2394,2401],{},[40,2395,2396,2397,2400],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[195,2398,2399],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[40,2402,2403,2404,2407],{},"ASCII 打印字符：数字 ",[195,2405,2406],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[19,2409,2411],{"id":2410},"_134转义字符","1.3.4转义字符",[59,2413,2415],{"className":1386,"code":2414,"language":1388,"meta":64,"style":64},"\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",[66,2416,2417,2422,2438,2452,2457,2470,2475],{"__ignoreMap":64},[69,2418,2419],{"class":71,"line":72},[69,2420,2421],{"class":75},"\u002F\u002F换行符\n",[69,2423,2424,2427,2430,2433,2435],{"class":71,"line":79},[69,2425,2426],{"class":86},"cout ",[69,2428,2429],{"class":82},"\u003C\u003C",[69,2431,2432],{"class":1022},"\"hello world\u002Fn\"",[69,2434,1450],{"class":86},[69,2436,2437],{"class":75}," \u002F\u002F就等同于如下：\n",[69,2439,2440,2442,2444,2447,2449],{"class":71,"line":106},[69,2441,2426],{"class":86},[69,2443,2429],{"class":82},[69,2445,2446],{"class":1022},"\"hello world\"",[69,2448,2429],{"class":82},[69,2450,2451],{"class":86},"endl;\n",[69,2453,2454],{"class":71,"line":116},[69,2455,2456],{"class":75},"\u002F\u002F反斜杠\n",[69,2458,2459,2461,2463,2466,2468],{"class":71,"line":133},[69,2460,2426],{"class":86},[69,2462,2429],{"class":82},[69,2464,2465],{"class":1022},"\"\u002F\u002F\"",[69,2467,2429],{"class":82},[69,2469,2451],{"class":86},[69,2471,2472],{"class":71,"line":139},[69,2473,2474],{"class":75},"\u002F\u002F水平制表符\n",[69,2476,2477,2479,2481,2484,2487,2490,2492,2495],{"class":71,"line":401},[69,2478,2426],{"class":86},[69,2480,2429],{"class":82},[69,2482,2483],{"class":1022},"\"aaaa",[69,2485,2486],{"class":90},"\\t",[69,2488,2489],{"class":1022},"helloworld\"",[69,2491,2429],{"class":82},[69,2493,2494],{"class":86},"endl;",[69,2496,2497],{"class":75}," \u002F\u002F输出窗口时有对齐效果\n",[19,2499,2501],{"id":2500},"_135字符串型","1.3.5字符串型",[29,2503,2504,2505,2507],{},"char 变量名",[69,2506],{},"=\"字符串值\"",[59,2509,2511],{"className":1386,"code":2510,"language":1388,"meta":64,"style":64},"\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",[66,2512,2513,2518,2523,2528,2533,2546,2559,2564,2569,2580],{"__ignoreMap":64},[69,2514,2515],{"class":71,"line":72},[69,2516,2517],{"class":75},"\u002F\u002Fc风格字符串\n",[69,2519,2520],{"class":71,"line":79},[69,2521,2522],{"class":75},"\u002F\u002F注意事项：\n",[69,2524,2525],{"class":71,"line":106},[69,2526,2527],{"class":75},"\u002F\u002F1.char字符串名[]\n",[69,2529,2530],{"class":71,"line":116},[69,2531,2532],{"class":75},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[69,2534,2535,2537,2540,2542,2544],{"class":71,"line":133},[69,2536,1490],{"class":82},[69,2538,2539],{"class":86}," str[]",[69,2541,1019],{"class":82},[69,2543,2446],{"class":1022},[69,2545,130],{"class":86},[69,2547,2548,2550,2552,2555,2557],{"class":71,"line":139},[69,2549,2426],{"class":86},[69,2551,2429],{"class":82},[69,2553,2554],{"class":86},"str",[69,2556,2429],{"class":82},[69,2558,2451],{"class":86},[69,2560,2561],{"class":71,"line":401},[69,2562,2563],{"class":75},"\u002F\u002Fc++风格字符串\n",[69,2565,2566],{"class":71,"line":470},[69,2567,2568],{"class":75},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[69,2570,2571,2574,2576,2578],{"class":71,"line":475},[69,2572,2573],{"class":86},"string str2",[69,2575,1019],{"class":82},[69,2577,2446],{"class":1022},[69,2579,130],{"class":86},[69,2581,2582,2584,2586,2589,2591],{"class":71,"line":482},[69,2583,2426],{"class":86},[69,2585,2429],{"class":82},[69,2587,2588],{"class":86},"str2",[69,2590,2429],{"class":82},[69,2592,2451],{"class":86},[19,2594,2596],{"id":2595},"_136布尔类型bool","1.3.6布尔类型bool",[59,2598,2600],{"className":1386,"code":2599,"language":1388,"meta":64,"style":64},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[66,2601,2602,2617],{"__ignoreMap":64},[69,2603,2604,2607,2610,2612,2615],{"class":71,"line":72},[69,2605,2606],{"class":82},"bool",[69,2608,2609],{"class":86}," flag",[69,2611,1019],{"class":82},[69,2613,2614],{"class":90},"true",[69,2616,130],{"class":86},[69,2618,2619,2622,2625,2628,2630,2632],{"class":71,"line":79},[69,2620,2621],{"class":86},"cout",[69,2623,2624],{"class":82},"\u003C\u003Csizeof",[69,2626,2627],{"class":86},"(flag)",[69,2629,2429],{"class":82},[69,2631,2494],{"class":86},[69,2633,2634],{"class":75}," \u002F\u002F查看布尔占内存空间\n",[14,2636,2638],{"id":2637},"_14键盘输入cin","1.4键盘输入cin",[59,2640,2642],{"className":1386,"code":2641,"language":1388,"meta":64,"style":64},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[66,2643,2644,2657,2674,2685],{"__ignoreMap":64},[69,2645,2646,2648,2651,2653,2655],{"class":71,"line":72},[69,2647,1401],{"class":82},[69,2649,2650],{"class":86}," a",[69,2652,1019],{"class":82},[69,2654,1583],{"class":90},[69,2656,130],{"class":86},[69,2658,2659,2661,2663,2666,2668,2670,2672],{"class":71,"line":79},[69,2660,2621],{"class":86},[69,2662,2429],{"class":82},[69,2664,2665],{"class":1022},"\"请给整型变量a赋值\"",[69,2667,2429],{"class":82},[69,2669,187],{"class":86},[69,2671,2429],{"class":82},[69,2673,2451],{"class":86},[69,2675,2676,2679,2682],{"class":71,"line":106},[69,2677,2678],{"class":86},"cin ",[69,2680,2681],{"class":82},">>",[69,2683,2684],{"class":86}," a;\n",[69,2686,2687,2689,2691,2694,2697,2699,2701],{"class":71,"line":116},[69,2688,2426],{"class":86},[69,2690,2429],{"class":82},[69,2692,2693],{"class":1022}," \"整型变量a=\"",[69,2695,2696],{"class":82}," \u003C\u003C",[69,2698,187],{"class":86},[69,2700,2429],{"class":82},[69,2702,2451],{"class":86},[14,2704,2706],{"id":2705},"_15运算符","1.5运算符",[19,2708,2710],{"id":2709},"_151算术运算符","1.5.1算术运算符",[29,2712,2713,2716],{},[24,2714],{"alt":64,"src":2715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[37,2718,2719,2722,2725],{},[40,2720,2721],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[40,2723,2724],{},"两个小数不可以做取模运算",[40,2726,2727],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[19,2729,2731],{"id":2730},"_152赋值运算符","1.5.2赋值运算符",[29,2733,2734],{},[24,2735],{"alt":64,"src":2736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[19,2738,2740],{"id":2739},"_153比较运算符","1.5.3比较运算符",[29,2742,2743],{},[24,2744],{"alt":64,"src":2745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[19,2747,2749],{"id":2748},"_154逻辑运算符","1.5.4逻辑运算符",[29,2751,2752],{},[24,2753],{"alt":64,"src":2754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2756,2758],{"id":2757},"_16程序流程结构","1.6程序流程结构",[19,2760,2762],{"id":2761},"_161选择结构","1.6.1选择结构",[37,2764,2765],{},[40,2766,2767],{},"if语句\n单行、多行、多条件if语句",[59,2769,2771],{"className":1386,"code":2770,"language":1388,"meta":64,"style":64},"\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",[66,2772,2773,2778,2793,2798,2812,2816,2821,2830,2843,2847,2860,2864,2869,2873,2886,2891,2897,2917,2922,2936,2941,2970,2975,2992,2997,3002,3007,3021,3026],{"__ignoreMap":64},[69,2774,2775],{"class":71,"line":72},[69,2776,2777],{"class":75},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[69,2779,2780,2783,2786,2788,2791],{"class":71,"line":79},[69,2781,2782],{"class":82},"if",[69,2784,2785],{"class":86},"(score",[69,2787,2346],{"class":82},[69,2789,2790],{"class":90},"600",[69,2792,1404],{"class":86},[69,2794,2795],{"class":71,"line":106},[69,2796,2797],{"class":86},"{\n",[69,2799,2800,2803,2805,2808,2810],{"class":71,"line":116},[69,2801,2802],{"class":86},"    cout",[69,2804,2429],{"class":82},[69,2806,2807],{"class":1022},"'这是单行if语句'",[69,2809,2429],{"class":82},[69,2811,2451],{"class":86},[69,2813,2814],{"class":71,"line":133},[69,2815,142],{"class":86},[69,2817,2818],{"class":71,"line":139},[69,2819,2820],{"class":75},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[69,2822,2823,2825,2827],{"class":71,"line":401},[69,2824,2678],{"class":86},[69,2826,2681],{"class":82},[69,2828,2829],{"class":86}," score\n",[69,2831,2832,2834,2836,2839,2841],{"class":71,"line":470},[69,2833,2782],{"class":82},[69,2835,2785],{"class":86},[69,2837,2838],{"class":82},"\u003C=",[69,2840,2790],{"class":90},[69,2842,1404],{"class":86},[69,2844,2845],{"class":71,"line":475},[69,2846,2797],{"class":86},[69,2848,2849,2851,2853,2856,2858],{"class":71,"line":482},[69,2850,2802],{"class":86},[69,2852,2681],{"class":82},[69,2854,2855],{"class":1022},"\"小于等于600\"",[69,2857,2429],{"class":82},[69,2859,2451],{"class":86},[69,2861,2862],{"class":71,"line":497},[69,2863,142],{"class":86},[69,2865,2866],{"class":71,"line":502},[69,2867,2868],{"class":82},"else\n",[69,2870,2871],{"class":71,"line":509},[69,2872,2797],{"class":86},[69,2874,2875,2877,2879,2882,2884],{"class":71,"line":524},[69,2876,2802],{"class":86},[69,2878,2681],{"class":82},[69,2880,2881],{"class":1022},"\"大于600\"",[69,2883,2681],{"class":82},[69,2885,2451],{"class":86},[69,2887,2889],{"class":71,"line":2888},15,[69,2890,142],{"class":86},[69,2892,2894],{"class":71,"line":2893},16,[69,2895,2896],{"class":75},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[69,2898,2900,2902,2904,2906,2908,2911,2913,2915],{"class":71,"line":2899},17,[69,2901,2782],{"class":82},[69,2903,87],{"class":86},[69,2905,1583],{"class":90},[69,2907,1011],{"class":82},[69,2909,2910],{"class":86},"num",[69,2912,1011],{"class":82},[69,2914,124],{"class":90},[69,2916,1404],{"class":86},[69,2918,2920],{"class":71,"line":2919},18,[69,2921,2797],{"class":86},[69,2923,2925,2927,2929,2932,2934],{"class":71,"line":2924},19,[69,2926,2802],{"class":86},[69,2928,2429],{"class":82},[69,2930,2931],{"class":1022},"\"小于100\"",[69,2933,2429],{"class":82},[69,2935,2451],{"class":86},[69,2937,2939],{"class":71,"line":2938},20,[69,2940,142],{"class":86},[69,2942,2944,2947,2950,2953,2956,2958,2961,2963,2965,2968],{"class":71,"line":2943},21,[69,2945,2946],{"class":82},"else",[69,2948,2949],{"class":82}," if",[69,2951,2952],{"class":86}," (nmu",[69,2954,2955],{"class":82},">=",[69,2957,124],{"class":90},[69,2959,2960],{"class":82},"&&",[69,2962,2910],{"class":86},[69,2964,1011],{"class":82},[69,2966,2967],{"class":90},"200",[69,2969,1404],{"class":86},[69,2971,2973],{"class":71,"line":2972},22,[69,2974,2797],{"class":86},[69,2976,2978,2980,2982,2985,2987,2989],{"class":71,"line":2977},23,[69,2979,2802],{"class":86},[69,2981,2429],{"class":82},[69,2983,2984],{"class":1022},"\"不小于100且小于200\"",[69,2986,2429],{"class":82},[69,2988,2494],{"class":86},[69,2990,2991],{"class":75}," \u002F\u002F可以无限else if,python中是elif：\n",[69,2993,2995],{"class":71,"line":2994},24,[69,2996,142],{"class":86},[69,2998,3000],{"class":71,"line":2999},25,[69,3001,2868],{"class":82},[69,3003,3005],{"class":71,"line":3004},26,[69,3006,2797],{"class":86},[69,3008,3010,3012,3014,3017,3019],{"class":71,"line":3009},27,[69,3011,2802],{"class":86},[69,3013,2429],{"class":82},[69,3015,3016],{"class":1022},"\"不小于200\"",[69,3018,2429],{"class":82},[69,3020,2451],{"class":86},[69,3022,3024],{"class":71,"line":3023},28,[69,3025,142],{"class":86},[69,3027,3029],{"class":71,"line":3028},29,[69,3030,3031],{"class":75},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[37,3033,3034],{"start":79},[40,3035,3036],{},"三目运算符",[59,3038,3040],{"className":1386,"code":3039,"language":1388,"meta":64,"style":64},"\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",[66,3041,3042,3047,3052,3078,3100,3117,3122,3145,3160],{"__ignoreMap":64},[69,3043,3044],{"class":71,"line":72},[69,3045,3046],{"class":75},"\u002F\u002F创建三个变量a,b,c\n",[69,3048,3049],{"class":71,"line":79},[69,3050,3051],{"class":75},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[69,3053,3054,3056,3058,3060,3062,3065,3067,3069,3072,3074,3076],{"class":71,"line":106},[69,3055,1401],{"class":82},[69,3057,2650],{"class":86},[69,3059,1019],{"class":82},[69,3061,2087],{"class":90},[69,3063,3064],{"class":86},",b",[69,3066,1019],{"class":82},[69,3068,390],{"class":90},[69,3070,3071],{"class":86},",c",[69,3073,1019],{"class":82},[69,3075,1583],{"class":90},[69,3077,130],{"class":86},[69,3079,3080,3082,3084,3087,3089,3091,3093,3095,3097],{"class":71,"line":116},[69,3081,1679],{"class":86},[69,3083,1019],{"class":82},[69,3085,3086],{"class":86},"(a",[69,3088,2346],{"class":82},[69,3090,1654],{"class":86},[69,3092,2372],{"class":82},[69,3094,187],{"class":86},[69,3096,2246],{"class":82},[69,3098,3099],{"class":86},"b)\n",[69,3101,3102,3104,3106,3109,3111,3113,3115],{"class":71,"line":133},[69,3103,2621],{"class":86},[69,3105,2429],{"class":82},[69,3107,3108],{"class":1022},"\"c=\"",[69,3110,2429],{"class":82},[69,3112,1679],{"class":86},[69,3114,2429],{"class":82},[69,3116,2451],{"class":86},[69,3118,3119],{"class":71,"line":139},[69,3120,3121],{"class":75},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[69,3123,3124,3126,3128,3130,3132,3134,3136,3139,3141,3143],{"class":71,"line":401},[69,3125,3086],{"class":86},[69,3127,2346],{"class":82},[69,3129,1654],{"class":86},[69,3131,2372],{"class":82},[69,3133,187],{"class":86},[69,3135,2246],{"class":82},[69,3137,3138],{"class":86},"b)",[69,3140,1019],{"class":82},[69,3142,124],{"class":90},[69,3144,130],{"class":86},[69,3146,3147,3149,3151,3153,3155,3157],{"class":71,"line":470},[69,3148,2621],{"class":86},[69,3150,2429],{"class":82},[69,3152,187],{"class":86},[69,3154,2429],{"class":82},[69,3156,2494],{"class":86},[69,3158,3159],{"class":75}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[69,3161,3162,3164,3166,3168,3170,3172],{"class":71,"line":475},[69,3163,2621],{"class":86},[69,3165,2429],{"class":82},[69,3167,1654],{"class":86},[69,3169,2429],{"class":82},[69,3171,2494],{"class":86},[69,3173,3174],{"class":75}," \u002F\u002F10   a>b,b还是原值\n",[37,3176,3177],{"start":106},[40,3178,3179],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[59,3181,3183],{"className":1386,"code":3182,"language":1388,"meta":64,"style":64},"\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",[66,3184,3185,3190,3198,3211,3221,3225,3239,3252,3262,3270,3275,3300,3321,3343,3364,3386,3407,3427,3432],{"__ignoreMap":64},[69,3186,3187],{"class":71,"line":72},[69,3188,3189],{"class":75},"\u002F\u002F案例-电影打分\n",[69,3191,3192,3195],{"class":71,"line":79},[69,3193,3194],{"class":82},"#include",[69,3196,3197],{"class":1022},"\u003Ciostream>\n",[69,3199,3200,3203,3206,3209],{"class":71,"line":106},[69,3201,3202],{"class":82},"using",[69,3204,3205],{"class":82}," namespace",[69,3207,3208],{"class":109}," std",[69,3210,130],{"class":86},[69,3212,3213,3215,3218],{"class":71,"line":116},[69,3214,1401],{"class":82},[69,3216,3217],{"class":109}," main",[69,3219,3220],{"class":86},"()\n",[69,3222,3223],{"class":71,"line":133},[69,3224,2797],{"class":86},[69,3226,3227,3230,3233,3235,3237],{"class":71,"line":139},[69,3228,3229],{"class":82},"    int",[69,3231,3232],{"class":86}," score",[69,3234,1019],{"class":82},[69,3236,1583],{"class":90},[69,3238,130],{"class":86},[69,3240,3241,3243,3245,3248,3250],{"class":71,"line":401},[69,3242,2802],{"class":86},[69,3244,2429],{"class":82},[69,3246,3247],{"class":1022},"\"电影打分：\"",[69,3249,2429],{"class":82},[69,3251,2451],{"class":86},[69,3253,3254,3257,3259],{"class":71,"line":470},[69,3255,3256],{"class":86},"    cin",[69,3258,2681],{"class":82},[69,3260,3261],{"class":86},"score;\n",[69,3263,3264,3267],{"class":71,"line":475},[69,3265,3266],{"class":82},"    switch",[69,3268,3269],{"class":86},"(score)\n",[69,3271,3272],{"class":71,"line":482},[69,3273,3274],{"class":86},"    {\n",[69,3276,3277,3280,3283,3286,3288,3291,3293,3295,3298],{"class":71,"line":497},[69,3278,3279],{"class":82},"        case",[69,3281,3282],{"class":90}," 10",[69,3284,3285],{"class":86},":cout",[69,3287,2429],{"class":82},[69,3289,3290],{"class":1022},"\"经典\"",[69,3292,2429],{"class":82},[69,3294,2494],{"class":86},[69,3296,3297],{"class":82},"break",[69,3299,130],{"class":86},[69,3301,3302,3304,3307,3309,3311,3313,3315,3317,3319],{"class":71,"line":502},[69,3303,3279],{"class":82},[69,3305,3306],{"class":90}," 9",[69,3308,3285],{"class":86},[69,3310,2429],{"class":82},[69,3312,3290],{"class":1022},[69,3314,2429],{"class":82},[69,3316,2494],{"class":86},[69,3318,3297],{"class":82},[69,3320,130],{"class":86},[69,3322,3323,3325,3328,3330,3332,3335,3337,3339,3341],{"class":71,"line":509},[69,3324,3279],{"class":82},[69,3326,3327],{"class":90}," 8",[69,3329,3285],{"class":86},[69,3331,2429],{"class":82},[69,3333,3334],{"class":1022},"\"非常好\"",[69,3336,2429],{"class":82},[69,3338,2494],{"class":86},[69,3340,3297],{"class":82},[69,3342,130],{"class":86},[69,3344,3345,3347,3350,3352,3354,3356,3358,3360,3362],{"class":71,"line":524},[69,3346,3279],{"class":82},[69,3348,3349],{"class":90}," 7",[69,3351,3285],{"class":86},[69,3353,2429],{"class":82},[69,3355,3334],{"class":1022},[69,3357,2429],{"class":82},[69,3359,2494],{"class":86},[69,3361,3297],{"class":82},[69,3363,130],{"class":86},[69,3365,3366,3368,3371,3373,3375,3378,3380,3382,3384],{"class":71,"line":2888},[69,3367,3279],{"class":82},[69,3369,3370],{"class":90}," 6",[69,3372,3285],{"class":86},[69,3374,2429],{"class":82},[69,3376,3377],{"class":1022},"\"一般\"",[69,3379,2429],{"class":82},[69,3381,2494],{"class":86},[69,3383,3297],{"class":82},[69,3385,130],{"class":86},[69,3387,3388,3390,3393,3395,3397,3399,3401,3403,3405],{"class":71,"line":2893},[69,3389,3279],{"class":82},[69,3391,3392],{"class":90}," 5",[69,3394,3285],{"class":86},[69,3396,2429],{"class":82},[69,3398,3377],{"class":1022},[69,3400,2429],{"class":82},[69,3402,2494],{"class":86},[69,3404,3297],{"class":82},[69,3406,130],{"class":86},[69,3408,3409,3412,3414,3416,3419,3421,3423,3425],{"class":71,"line":2899},[69,3410,3411],{"class":82},"        default",[69,3413,3285],{"class":86},[69,3415,2429],{"class":82},[69,3417,3418],{"class":1022},"\"烂片\"",[69,3420,2429],{"class":82},[69,3422,2494],{"class":86},[69,3424,3297],{"class":82},[69,3426,130],{"class":86},[69,3428,3429],{"class":71,"line":2919},[69,3430,3431],{"class":86},"    }\n",[69,3433,3434],{"class":71,"line":2924},[69,3435,142],{"class":86},[29,3437,3438],{},"if和switch区别：",[162,3440,3441,3444],{},[40,3442,3443],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[40,3445,3446],{},"switch优点：结构清晰，执行效率高",[19,3448,3450],{"id":3449},"_162循环结构","1.6.2循环结构",[37,3452,3453],{},[40,3454,3455],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[59,3457,3459],{"className":1386,"code":3458,"language":1388,"meta":64,"style":64},"\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",[66,3460,3461,3466,3474,3478,3491,3505,3509,3529,3539,3543,3555],{"__ignoreMap":64},[69,3462,3463],{"class":71,"line":72},[69,3464,3465],{"class":75},"\u002F\u002F打印0-9数字\n",[69,3467,3468,3470,3472],{"class":71,"line":79},[69,3469,1401],{"class":82},[69,3471,3217],{"class":109},[69,3473,3220],{"class":86},[69,3475,3476],{"class":71,"line":106},[69,3477,2797],{"class":86},[69,3479,3480,3482,3485,3487,3489],{"class":71,"line":116},[69,3481,3229],{"class":82},[69,3483,3484],{"class":86}," num",[69,3486,1019],{"class":82},[69,3488,1583],{"class":90},[69,3490,130],{"class":86},[69,3492,3493,3496,3499,3501,3503],{"class":71,"line":133},[69,3494,3495],{"class":82},"    while",[69,3497,3498],{"class":86},"(num",[69,3500,1011],{"class":82},[69,3502,390],{"class":90},[69,3504,1404],{"class":86},[69,3506,3507],{"class":71,"line":139},[69,3508,3274],{"class":86},[69,3510,3511,3514,3517,3519,3521,3523,3526],{"class":71,"line":401},[69,3512,3513],{"class":109},"       std",[69,3515,3516],{"class":86},"::cout",[69,3518,2429],{"class":82},[69,3520,2910],{"class":86},[69,3522,2429],{"class":82},[69,3524,3525],{"class":109},"std",[69,3527,3528],{"class":86},"::endl;\n",[69,3530,3531,3534,3537],{"class":71,"line":470},[69,3532,3533],{"class":86},"        num",[69,3535,3536],{"class":82},"++",[69,3538,130],{"class":86},[69,3540,3541],{"class":71,"line":475},[69,3542,3431],{"class":86},[69,3544,3545,3548,3550,3553],{"class":71,"line":482},[69,3546,3547],{"class":109},"    system",[69,3549,1398],{"class":86},[69,3551,3552],{"class":1022},"\"pause\"",[69,3554,1404],{"class":86},[69,3556,3557],{"class":71,"line":497},[69,3558,142],{"class":86},[29,3560,3561],{},"注意：写好循环条件，避免死循环情况",[59,3563,3565],{"className":1386,"code":3564,"language":1388,"meta":64,"style":64},"\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",[66,3566,3567,3572,3579,3586,3596,3604,3608,3613,3640,3645,3650,3658,3685,3690,3695,3708,3718,3722,3732,3737,3750,3755,3769,3774,3789,3793,3806,3810,3815,3819,3833,3841,3846,3852,3858,3863],{"__ignoreMap":64},[69,3568,3569],{"class":71,"line":72},[69,3570,3571],{"class":75},"\u002F\u002F循环结构-猜数字\n",[69,3573,3574,3576],{"class":71,"line":79},[69,3575,3194],{"class":82},[69,3577,3578],{"class":1022}," \u003Ciostream>\n",[69,3580,3581,3583],{"class":71,"line":106},[69,3582,3194],{"class":82},[69,3584,3585],{"class":1022}," \u003Cctime>\n",[69,3587,3588,3590,3592,3594],{"class":71,"line":116},[69,3589,3202],{"class":82},[69,3591,3205],{"class":82},[69,3593,3208],{"class":109},[69,3595,130],{"class":86},[69,3597,3598,3600,3602],{"class":71,"line":133},[69,3599,1401],{"class":82},[69,3601,3217],{"class":109},[69,3603,3220],{"class":86},[69,3605,3606],{"class":71,"line":139},[69,3607,2797],{"class":86},[69,3609,3610],{"class":71,"line":401},[69,3611,3612],{"class":75},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[69,3614,3615,3618,3621,3624,3627,3629,3632,3634,3637],{"class":71,"line":470},[69,3616,3617],{"class":109},"    srand",[69,3619,3620],{"class":86},"((",[69,3622,3623],{"class":82},"unsigned",[69,3625,3626],{"class":82}," int",[69,3628,1818],{"class":86},[69,3630,3631],{"class":109},"time",[69,3633,1398],{"class":86},[69,3635,3636],{"class":90},"NULL",[69,3638,3639],{"class":86},"));\n",[69,3641,3642],{"class":71,"line":475},[69,3643,3644],{"emptyLinePlaceholder":1325},"\n",[69,3646,3647],{"class":71,"line":482},[69,3648,3649],{"class":75},"    \u002F\u002F1.系统生成随机数\n",[69,3651,3652,3655],{"class":71,"line":497},[69,3653,3654],{"class":75},"    \u002F\u002Frand()%100",[69,3656,3657],{"class":75}," \u002F\u002F生成0-99的随机数\n",[69,3659,3660,3662,3664,3666,3669,3672,3674,3676,3678,3680,3682],{"class":71,"line":502},[69,3661,3229],{"class":82},[69,3663,3484],{"class":86},[69,3665,1019],{"class":82},[69,3667,3668],{"class":109},"rand",[69,3670,3671],{"class":86},"()",[69,3673,127],{"class":82},[69,3675,124],{"class":90},[69,3677,1869],{"class":82},[69,3679,1609],{"class":90},[69,3681,1450],{"class":86},[69,3683,3684],{"class":75}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[69,3686,3687],{"class":71,"line":509},[69,3688,3689],{"class":75},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[69,3691,3692],{"class":71,"line":524},[69,3693,3694],{"class":75},"    \u002F\u002F2.玩家猜测\n",[69,3696,3697,3699,3702,3704,3706],{"class":71,"line":2888},[69,3698,3229],{"class":82},[69,3700,3701],{"class":86}," val",[69,3703,1019],{"class":82},[69,3705,1583],{"class":90},[69,3707,130],{"class":86},[69,3709,3710,3712,3714,3716],{"class":71,"line":2893},[69,3711,3495],{"class":82},[69,3713,87],{"class":86},[69,3715,1609],{"class":90},[69,3717,1404],{"class":86},[69,3719,3720],{"class":71,"line":2899},[69,3721,3274],{"class":86},[69,3723,3724,3727,3729],{"class":71,"line":2919},[69,3725,3726],{"class":86},"        cin",[69,3728,2681],{"class":82},[69,3730,3731],{"class":86},"val;\n",[69,3733,3734],{"class":71,"line":2924},[69,3735,3736],{"class":75},"        \u002F\u002F3.判断玩家猜测\n",[69,3738,3739,3742,3745,3747],{"class":71,"line":2938},[69,3740,3741],{"class":82},"        if",[69,3743,3744],{"class":86},"(val",[69,3746,1011],{"class":82},[69,3748,3749],{"class":86},"num) \n",[69,3751,3752],{"class":71,"line":2943},[69,3753,3754],{"class":86},"        {\n",[69,3756,3757,3760,3762,3765,3767],{"class":71,"line":2972},[69,3758,3759],{"class":86},"            cout",[69,3761,2429],{"class":82},[69,3763,3764],{"class":1022},"\"猜小了！\"",[69,3766,2429],{"class":82},[69,3768,2451],{"class":86},[69,3770,3771],{"class":71,"line":2977},[69,3772,3773],{"class":86},"        }\n",[69,3775,3776,3779,3781,3784,3786],{"class":71,"line":2994},[69,3777,3778],{"class":82},"        else",[69,3780,2949],{"class":82},[69,3782,3783],{"class":86}," (val",[69,3785,2346],{"class":82},[69,3787,3788],{"class":86},"num)\n",[69,3790,3791],{"class":71,"line":2999},[69,3792,3754],{"class":86},[69,3794,3795,3797,3799,3802,3804],{"class":71,"line":3004},[69,3796,3759],{"class":86},[69,3798,2429],{"class":82},[69,3800,3801],{"class":1022},"\"猜大了！\"",[69,3803,2429],{"class":82},[69,3805,2451],{"class":86},[69,3807,3808],{"class":71,"line":3009},[69,3809,3773],{"class":86},[69,3811,3812],{"class":71,"line":3023},[69,3813,3814],{"class":82},"        else\n",[69,3816,3817],{"class":71,"line":3028},[69,3818,3754],{"class":86},[69,3820,3822,3824,3826,3829,3831],{"class":71,"line":3821},30,[69,3823,3759],{"class":86},[69,3825,2429],{"class":82},[69,3827,3828],{"class":1022},"\"猜对了！\"",[69,3830,2429],{"class":82},[69,3832,2451],{"class":86},[69,3834,3836,3839],{"class":71,"line":3835},31,[69,3837,3838],{"class":82},"            break",[69,3840,130],{"class":86},[69,3842,3844],{"class":71,"line":3843},32,[69,3845,3773],{"class":86},[69,3847,3849],{"class":71,"line":3848},33,[69,3850,3851],{"class":75},"        \u002F\u002F猜对 退出游戏\n",[69,3853,3855],{"class":71,"line":3854},34,[69,3856,3857],{"class":75},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[69,3859,3861],{"class":71,"line":3860},35,[69,3862,3431],{"class":86},[69,3864,3866],{"class":71,"line":3865},36,[69,3867,142],{"class":86},[37,3869,3870],{"start":79},[40,3871,3872,3873,3876],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[195,3874,3875],{},"do...while会先执行一次循环语句","，在判断循环语句",[59,3878,3880],{"className":1386,"code":3879,"language":1388,"meta":64,"style":64},"\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",[66,3881,3882,3887,3895,3899,3911,3919,3923,3940,3947,3951,3964,3974],{"__ignoreMap":64},[69,3883,3884],{"class":71,"line":72},[69,3885,3886],{"class":75},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[69,3888,3889,3891,3893],{"class":71,"line":79},[69,3890,1401],{"class":82},[69,3892,3217],{"class":109},[69,3894,3220],{"class":86},[69,3896,3897],{"class":71,"line":106},[69,3898,2797],{"class":86},[69,3900,3901,3903,3905,3907,3909],{"class":71,"line":116},[69,3902,3229],{"class":82},[69,3904,3484],{"class":86},[69,3906,1019],{"class":82},[69,3908,1583],{"class":90},[69,3910,130],{"class":86},[69,3912,3913,3916],{"class":71,"line":133},[69,3914,3915],{"class":82},"    do",[69,3917,3918],{"class":86}," \n",[69,3920,3921],{"class":71,"line":139},[69,3922,3274],{"class":86},[69,3924,3925,3928,3930,3932,3934,3936,3938],{"class":71,"line":401},[69,3926,3927],{"class":109},"        std",[69,3929,3516],{"class":86},[69,3931,2429],{"class":82},[69,3933,2910],{"class":86},[69,3935,2429],{"class":82},[69,3937,3525],{"class":109},[69,3939,3528],{"class":86},[69,3941,3942,3944],{"class":71,"line":470},[69,3943,3533],{"class":86},[69,3945,3946],{"class":82},"++\n",[69,3948,3949],{"class":71,"line":475},[69,3950,3431],{"class":86},[69,3952,3953,3955,3957,3959,3961],{"class":71,"line":482},[69,3954,3495],{"class":82},[69,3956,3498],{"class":86},[69,3958,1011],{"class":82},[69,3960,390],{"class":90},[69,3962,3963],{"class":86},");\n",[69,3965,3966,3968,3970,3972],{"class":71,"line":497},[69,3967,3547],{"class":109},[69,3969,1398],{"class":86},[69,3971,3552],{"class":1022},[69,3973,3963],{"class":86},[69,3975,3976],{"class":71,"line":502},[69,3977,142],{"class":86},[29,3979,3980],{},"案例-水仙花数",[29,3982,3983],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[29,3985,3986],{},"例如：1^3+5^3+3^3=153",[29,3988,3989],{},"请用do...while语句，求出所有3位数的水仙花数",[59,3991,3993],{"className":1386,"code":3992,"language":1388,"meta":64,"style":64},"#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",[66,3994,3995,4001,4011,4019,4023,4028,4040,4046,4050,4055,4071,4087,4103,4118,4137,4152,4200,4204,4216,4220,4228,4232,4246],{"__ignoreMap":64},[69,3996,3997,3999],{"class":71,"line":72},[69,3998,3194],{"class":82},[69,4000,3578],{"class":1022},[69,4002,4003,4005,4007,4009],{"class":71,"line":79},[69,4004,3202],{"class":82},[69,4006,3205],{"class":82},[69,4008,3208],{"class":109},[69,4010,130],{"class":86},[69,4012,4013,4015,4017],{"class":71,"line":106},[69,4014,1401],{"class":82},[69,4016,3217],{"class":109},[69,4018,3220],{"class":86},[69,4020,4021],{"class":71,"line":116},[69,4022,2797],{"class":86},[69,4024,4025],{"class":71,"line":133},[69,4026,4027],{"class":75},"    \u002F\u002F1.先打印所有三位数字\n",[69,4029,4030,4032,4034,4036,4038],{"class":71,"line":139},[69,4031,3229],{"class":82},[69,4033,3484],{"class":86},[69,4035,1019],{"class":82},[69,4037,124],{"class":90},[69,4039,130],{"class":86},[69,4041,4042,4044],{"class":71,"line":401},[69,4043,3915],{"class":82},[69,4045,3918],{"class":86},[69,4047,4048],{"class":71,"line":470},[69,4049,3274],{"class":86},[69,4051,4052],{"class":71,"line":475},[69,4053,4054],{"class":75},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[69,4056,4057,4060,4062,4064,4066,4068],{"class":71,"line":482},[69,4058,4059],{"class":82},"        int",[69,4061,2650],{"class":86},[69,4063,1019],{"class":82},[69,4065,1583],{"class":90},[69,4067,1450],{"class":86},[69,4069,4070],{"class":75}," \u002F\u002F个位\n",[69,4072,4073,4075,4078,4080,4082,4084],{"class":71,"line":497},[69,4074,4059],{"class":82},[69,4076,4077],{"class":86}," b",[69,4079,1019],{"class":82},[69,4081,1583],{"class":90},[69,4083,1450],{"class":86},[69,4085,4086],{"class":75}," \u002F\u002F十位\n",[69,4088,4089,4091,4094,4096,4098,4100],{"class":71,"line":502},[69,4090,4059],{"class":82},[69,4092,4093],{"class":86}," c",[69,4095,1019],{"class":82},[69,4097,1583],{"class":90},[69,4099,1450],{"class":86},[69,4101,4102],{"class":75}," \u002F\u002F百位\n",[69,4104,4105,4108,4110,4112,4114,4116],{"class":71,"line":509},[69,4106,4107],{"class":86},"        a",[69,4109,1019],{"class":82},[69,4111,2910],{"class":86},[69,4113,127],{"class":82},[69,4115,390],{"class":90},[69,4117,130],{"class":86},[69,4119,4120,4123,4125,4127,4129,4131,4133,4135],{"class":71,"line":524},[69,4121,4122],{"class":86},"        b",[69,4124,1019],{"class":82},[69,4126,2910],{"class":86},[69,4128,1972],{"class":82},[69,4130,390],{"class":90},[69,4132,127],{"class":82},[69,4134,390],{"class":90},[69,4136,130],{"class":86},[69,4138,4139,4142,4144,4146,4148,4150],{"class":71,"line":2888},[69,4140,4141],{"class":86},"        c",[69,4143,1019],{"class":82},[69,4145,2910],{"class":86},[69,4147,1972],{"class":82},[69,4149,124],{"class":90},[69,4151,130],{"class":86},[69,4153,4154,4156,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176,4178,4180,4182,4184,4186,4188,4191,4194,4197],{"class":71,"line":2893},[69,4155,3741],{"class":82},[69,4157,3086],{"class":86},[69,4159,1843],{"class":82},[69,4161,187],{"class":86},[69,4163,1843],{"class":82},[69,4165,187],{"class":86},[69,4167,1869],{"class":82},[69,4169,1654],{"class":86},[69,4171,1843],{"class":82},[69,4173,1654],{"class":86},[69,4175,1843],{"class":82},[69,4177,1654],{"class":86},[69,4179,1869],{"class":82},[69,4181,1679],{"class":86},[69,4183,1843],{"class":82},[69,4185,1679],{"class":86},[69,4187,1843],{"class":82},[69,4189,4190],{"class":86},"c ",[69,4192,4193],{"class":82},"==",[69,4195,4196],{"class":86}," num)",[69,4198,4199],{"class":75}," \u002F\u002F如果是水仙花数，才打印\n",[69,4201,4202],{"class":71,"line":2899},[69,4203,3754],{"class":86},[69,4205,4206,4208,4210,4212,4214],{"class":71,"line":2919},[69,4207,3759],{"class":86},[69,4209,2429],{"class":82},[69,4211,2910],{"class":86},[69,4213,2429],{"class":82},[69,4215,2451],{"class":86},[69,4217,4218],{"class":71,"line":2924},[69,4219,3773],{"class":86},[69,4221,4222,4224,4226],{"class":71,"line":2938},[69,4223,3533],{"class":86},[69,4225,3536],{"class":82},[69,4227,130],{"class":86},[69,4229,4230],{"class":71,"line":2943},[69,4231,3431],{"class":86},[69,4233,4234,4236,4239,4241,4244],{"class":71,"line":2972},[69,4235,3495],{"class":82},[69,4237,4238],{"class":86}," (num ",[69,4240,1011],{"class":82},[69,4242,4243],{"class":90}," 1000",[69,4245,3963],{"class":86},[69,4247,4248],{"class":71,"line":2977},[69,4249,142],{"class":86},[37,4251,4252],{"start":106},[40,4253,4254],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[59,4256,4258],{"className":1386,"code":4257,"language":1388,"meta":64,"style":64},"\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",[66,4259,4260,4265,4294,4298,4310,4314,4319,4330,4337,4341,4355,4359,4366,4370,4382,4391],{"__ignoreMap":64},[69,4261,4262],{"class":71,"line":72},[69,4263,4264],{"class":75},"\u002F\u002F从数字0-9打印\n",[69,4266,4267,4270,4272,4274,4277,4279,4281,4284,4286,4288,4290,4292],{"class":71,"line":79},[69,4268,4269],{"class":82},"for",[69,4271,1398],{"class":86},[69,4273,1401],{"class":82},[69,4275,4276],{"class":86}," i",[69,4278,1019],{"class":82},[69,4280,1583],{"class":90},[69,4282,4283],{"class":86},";i",[69,4285,1011],{"class":82},[69,4287,390],{"class":90},[69,4289,4283],{"class":86},[69,4291,3536],{"class":82},[69,4293,1404],{"class":86},[69,4295,4296],{"class":71,"line":106},[69,4297,2797],{"class":86},[69,4299,4300,4302,4304,4306,4308],{"class":71,"line":116},[69,4301,2802],{"class":86},[69,4303,2429],{"class":82},[69,4305,1830],{"class":86},[69,4307,2429],{"class":82},[69,4309,2451],{"class":86},[69,4311,4312],{"class":71,"line":133},[69,4313,142],{"class":86},[69,4315,4316],{"class":71,"line":139},[69,4317,4318],{"class":75},"\u002F\u002F上式可以进行拆分\n",[69,4320,4321,4323,4325,4327],{"class":71,"line":401},[69,4322,1401],{"class":82},[69,4324,4276],{"class":86},[69,4326,1019],{"class":82},[69,4328,4329],{"class":90},"0\n",[69,4331,4332,4334],{"class":71,"line":470},[69,4333,4269],{"class":82},[69,4335,4336],{"class":86},"(;;;)\n",[69,4338,4339],{"class":71,"line":475},[69,4340,2797],{"class":86},[69,4342,4343,4346,4349,4351,4353],{"class":71,"line":482},[69,4344,4345],{"class":82},"    if",[69,4347,4348],{"class":86},"(i",[69,4350,2955],{"class":82},[69,4352,390],{"class":90},[69,4354,1404],{"class":86},[69,4356,4357],{"class":71,"line":497},[69,4358,3274],{"class":86},[69,4360,4361,4364],{"class":71,"line":502},[69,4362,4363],{"class":82},"        break",[69,4365,130],{"class":86},[69,4367,4368],{"class":71,"line":509},[69,4369,3431],{"class":86},[69,4371,4372,4374,4376,4378,4380],{"class":71,"line":524},[69,4373,2802],{"class":86},[69,4375,2429],{"class":82},[69,4377,1830],{"class":86},[69,4379,2429],{"class":82},[69,4381,2451],{"class":86},[69,4383,4384,4387,4389],{"class":71,"line":2888},[69,4385,4386],{"class":86},"    i",[69,4388,3536],{"class":82},[69,4390,130],{"class":86},[69,4392,4393],{"class":71,"line":2893},[69,4394,142],{"class":86},[29,4396,4397],{},"小练习",[59,4399,4401],{"className":1386,"code":4400,"language":1388,"meta":64,"style":64},"#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",[66,4402,4403,4409,4419,4427,4431,4436,4441,4469,4473,4478,4483,4524,4528,4541,4545,4549,4553,4565,4569,4573],{"__ignoreMap":64},[69,4404,4405,4407],{"class":71,"line":72},[69,4406,3194],{"class":82},[69,4408,3197],{"class":1022},[69,4410,4411,4413,4415,4417],{"class":71,"line":79},[69,4412,3202],{"class":82},[69,4414,3205],{"class":82},[69,4416,3208],{"class":109},[69,4418,130],{"class":86},[69,4420,4421,4423,4425],{"class":71,"line":106},[69,4422,1401],{"class":82},[69,4424,3217],{"class":109},[69,4426,3220],{"class":86},[69,4428,4429],{"class":71,"line":116},[69,4430,2797],{"class":86},[69,4432,4433],{"class":71,"line":133},[69,4434,4435],{"class":75},"    \u002F\u002F敲桌子案例\n",[69,4437,4438],{"class":71,"line":139},[69,4439,4440],{"class":75},"    \u002F\u002F1.先输出1-100的数字\n",[69,4442,4443,4446,4448,4450,4452,4454,4456,4459,4461,4463,4465,4467],{"class":71,"line":401},[69,4444,4445],{"class":82},"    for",[69,4447,1398],{"class":86},[69,4449,1401],{"class":82},[69,4451,4276],{"class":86},[69,4453,1019],{"class":82},[69,4455,1609],{"class":90},[69,4457,4458],{"class":86},"; i",[69,4460,2838],{"class":82},[69,4462,124],{"class":90},[69,4464,4458],{"class":86},[69,4466,3536],{"class":82},[69,4468,1404],{"class":86},[69,4470,4471],{"class":71,"line":470},[69,4472,3274],{"class":86},[69,4474,4475],{"class":71,"line":475},[69,4476,4477],{"class":75},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[69,4479,4480],{"class":71,"line":482},[69,4481,4482],{"class":75},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[69,4484,4485,4487,4489,4491,4493,4495,4497,4500,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522],{"class":71,"line":497},[69,4486,3741],{"class":82},[69,4488,4348],{"class":86},[69,4490,127],{"class":82},[69,4492,1758],{"class":90},[69,4494,4193],{"class":82},[69,4496,1583],{"class":90},[69,4498,4499],{"class":82}," ||",[69,4501,4276],{"class":86},[69,4503,127],{"class":82},[69,4505,390],{"class":90},[69,4507,4193],{"class":82},[69,4509,1758],{"class":90},[69,4511,4499],{"class":82},[69,4513,4276],{"class":86},[69,4515,1972],{"class":82},[69,4517,390],{"class":90},[69,4519,4193],{"class":82},[69,4521,1758],{"class":90},[69,4523,1404],{"class":86},[69,4525,4526],{"class":71,"line":502},[69,4527,3754],{"class":86},[69,4529,4530,4532,4534,4537,4539],{"class":71,"line":509},[69,4531,3759],{"class":86},[69,4533,2429],{"class":82},[69,4535,4536],{"class":1022},"\"敲桌子\"",[69,4538,2429],{"class":82},[69,4540,2451],{"class":86},[69,4542,4543],{"class":71,"line":524},[69,4544,3773],{"class":86},[69,4546,4547],{"class":71,"line":2888},[69,4548,3814],{"class":82},[69,4550,4551],{"class":71,"line":2893},[69,4552,3754],{"class":86},[69,4554,4555,4557,4559,4561,4563],{"class":71,"line":2899},[69,4556,3759],{"class":86},[69,4558,2429],{"class":82},[69,4560,1830],{"class":86},[69,4562,2429],{"class":82},[69,4564,2451],{"class":86},[69,4566,4567],{"class":71,"line":2919},[69,4568,3773],{"class":86},[69,4570,4571],{"class":71,"line":2924},[69,4572,3431],{"class":86},[69,4574,4575],{"class":71,"line":2938},[69,4576,142],{"class":86},[29,4578,4579],{},"嵌套实现星图",[59,4581,4583],{"className":1386,"code":4582,"language":1388,"meta":64,"style":64},"#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",[66,4584,4585,4591,4601,4609,4613,4639,4643,4672,4676,4687,4691,4700,4704],{"__ignoreMap":64},[69,4586,4587,4589],{"class":71,"line":72},[69,4588,3194],{"class":82},[69,4590,3197],{"class":1022},[69,4592,4593,4595,4597,4599],{"class":71,"line":79},[69,4594,3202],{"class":82},[69,4596,3205],{"class":82},[69,4598,3208],{"class":109},[69,4600,130],{"class":86},[69,4602,4603,4605,4607],{"class":71,"line":106},[69,4604,1401],{"class":82},[69,4606,3217],{"class":109},[69,4608,3220],{"class":86},[69,4610,4611],{"class":71,"line":116},[69,4612,2797],{"class":86},[69,4614,4615,4617,4619,4621,4623,4625,4627,4629,4631,4633,4635,4637],{"class":71,"line":133},[69,4616,4445],{"class":82},[69,4618,87],{"class":86},[69,4620,1401],{"class":82},[69,4622,4276],{"class":86},[69,4624,1019],{"class":82},[69,4626,1583],{"class":90},[69,4628,4283],{"class":86},[69,4630,1011],{"class":82},[69,4632,390],{"class":90},[69,4634,4283],{"class":86},[69,4636,3536],{"class":82},[69,4638,1404],{"class":86},[69,4640,4641],{"class":71,"line":139},[69,4642,3274],{"class":86},[69,4644,4645,4648,4650,4652,4655,4657,4659,4662,4664,4666,4668,4670],{"class":71,"line":401},[69,4646,4647],{"class":82},"        for",[69,4649,87],{"class":86},[69,4651,1401],{"class":82},[69,4653,4654],{"class":86}," j",[69,4656,1019],{"class":82},[69,4658,1583],{"class":90},[69,4660,4661],{"class":86},";j",[69,4663,1011],{"class":82},[69,4665,390],{"class":90},[69,4667,4661],{"class":86},[69,4669,3536],{"class":82},[69,4671,1404],{"class":86},[69,4673,4674],{"class":71,"line":470},[69,4675,3754],{"class":86},[69,4677,4678,4680,4682,4685],{"class":71,"line":475},[69,4679,3759],{"class":86},[69,4681,2429],{"class":82},[69,4683,4684],{"class":1022},"\"*\"",[69,4686,130],{"class":86},[69,4688,4689],{"class":71,"line":482},[69,4690,3773],{"class":86},[69,4692,4693,4696,4698],{"class":71,"line":497},[69,4694,4695],{"class":86},"        cout",[69,4697,2429],{"class":82},[69,4699,2451],{"class":86},[69,4701,4702],{"class":71,"line":502},[69,4703,3431],{"class":86},[69,4705,4706],{"class":71,"line":509},[69,4707,142],{"class":86},[29,4709,4710],{},"乘法口诀表",[59,4712,4714],{"className":1386,"code":4713,"language":1388,"meta":64,"style":64},"#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",[66,4715,4716,4722,4732,4740,4744,4770,4774,4799,4803,4843,4847,4855,4859],{"__ignoreMap":64},[69,4717,4718,4720],{"class":71,"line":72},[69,4719,3194],{"class":82},[69,4721,3578],{"class":1022},[69,4723,4724,4726,4728,4730],{"class":71,"line":79},[69,4725,3202],{"class":82},[69,4727,3205],{"class":82},[69,4729,3208],{"class":109},[69,4731,130],{"class":86},[69,4733,4734,4736,4738],{"class":71,"line":106},[69,4735,1401],{"class":82},[69,4737,3217],{"class":109},[69,4739,3220],{"class":86},[69,4741,4742],{"class":71,"line":116},[69,4743,2797],{"class":86},[69,4745,4746,4748,4750,4752,4754,4756,4758,4760,4762,4764,4766,4768],{"class":71,"line":133},[69,4747,4445],{"class":82},[69,4749,1398],{"class":86},[69,4751,1401],{"class":82},[69,4753,4276],{"class":86},[69,4755,1019],{"class":82},[69,4757,1609],{"class":90},[69,4759,4283],{"class":86},[69,4761,1011],{"class":82},[69,4763,390],{"class":90},[69,4765,4283],{"class":86},[69,4767,3536],{"class":82},[69,4769,1404],{"class":86},[69,4771,4772],{"class":71,"line":139},[69,4773,3274],{"class":86},[69,4775,4776,4778,4780,4782,4784,4786,4788,4790,4792,4795,4797],{"class":71,"line":401},[69,4777,4647],{"class":82},[69,4779,1398],{"class":86},[69,4781,1401],{"class":82},[69,4783,4654],{"class":86},[69,4785,1019],{"class":82},[69,4787,1609],{"class":90},[69,4789,4661],{"class":86},[69,4791,2838],{"class":82},[69,4793,4794],{"class":86},"i;j",[69,4796,3536],{"class":82},[69,4798,1404],{"class":86},[69,4800,4801],{"class":71,"line":470},[69,4802,3754],{"class":86},[69,4804,4805,4807,4809,4811,4813,4815,4817,4819,4821,4824,4826,4828,4830,4832,4834,4837,4839,4841],{"class":71,"line":475},[69,4806,3759],{"class":86},[69,4808,2429],{"class":82},[69,4810,1855],{"class":86},[69,4812,2429],{"class":82},[69,4814,4684],{"class":1022},[69,4816,2429],{"class":82},[69,4818,1830],{"class":86},[69,4820,2429],{"class":82},[69,4822,4823],{"class":1022},"\"=\"",[69,4825,2429],{"class":82},[69,4827,1830],{"class":86},[69,4829,1843],{"class":82},[69,4831,1855],{"class":86},[69,4833,2429],{"class":82},[69,4835,4836],{"class":1022},"'",[69,4838,2486],{"class":90},[69,4840,4836],{"class":1022},[69,4842,130],{"class":86},[69,4844,4845],{"class":71,"line":482},[69,4846,3773],{"class":86},[69,4848,4849,4851,4853],{"class":71,"line":497},[69,4850,4695],{"class":86},[69,4852,2429],{"class":82},[69,4854,2451],{"class":86},[69,4856,4857],{"class":71,"line":502},[69,4858,3431],{"class":86},[69,4860,4861],{"class":71,"line":509},[69,4862,142],{"class":86},[19,4864,4866],{"id":4865},"_163跳出语句","1.6.3跳出语句",[37,4868,4869],{},[40,4870,4871],{},"break语句\n作用：用于跳出选择结构或者循环结构",[29,4873,4874],{},"break使用时机：",[162,4876,4877,4880,4883],{},[40,4878,4879],{},"出现在switch条件语句中，作用是终止case并跳出switch",[40,4881,4882],{},"出现在循环结构中，作用是跳出当前的循环结构",[40,4884,4885],{},"出现在嵌套循环中，跳出最近的内层循环语句",[37,4887,4888,4891],{"start":79},[40,4889,4890],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[40,4892,4893],{},"goto语句\n语法：goto 标记;",[29,4895,4896],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[59,4898,4900],{"className":1386,"code":4899,"language":1388,"meta":64,"style":64},"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",[66,4901,4902,4910,4914,4927,4937,4950,4963,4976,4984,5000],{"__ignoreMap":64},[69,4903,4904,4906,4908],{"class":71,"line":72},[69,4905,1401],{"class":82},[69,4907,3217],{"class":109},[69,4909,3220],{"class":86},[69,4911,4912],{"class":71,"line":79},[69,4913,2797],{"class":86},[69,4915,4916,4918,4920,4923,4925],{"class":71,"line":106},[69,4917,2802],{"class":86},[69,4919,2429],{"class":82},[69,4921,4922],{"class":1022},"\"1\"",[69,4924,2429],{"class":82},[69,4926,2451],{"class":86},[69,4928,4929,4932,4935],{"class":71,"line":116},[69,4930,4931],{"class":82},"    goto",[69,4933,4934],{"class":109}," FLAG",[69,4936,130],{"class":86},[69,4938,4939,4941,4943,4946,4948],{"class":71,"line":133},[69,4940,2802],{"class":86},[69,4942,2429],{"class":82},[69,4944,4945],{"class":1022},"\"2\"",[69,4947,2429],{"class":82},[69,4949,2451],{"class":86},[69,4951,4952,4954,4956,4959,4961],{"class":71,"line":139},[69,4953,2802],{"class":86},[69,4955,2429],{"class":82},[69,4957,4958],{"class":1022},"\"3\"",[69,4960,2429],{"class":82},[69,4962,2451],{"class":86},[69,4964,4965,4967,4969,4972,4974],{"class":71,"line":401},[69,4966,2802],{"class":86},[69,4968,2429],{"class":82},[69,4970,4971],{"class":1022},"\"4\"",[69,4973,2429],{"class":82},[69,4975,2451],{"class":86},[69,4977,4978,4981],{"class":71,"line":470},[69,4979,4980],{"class":109},"    FLAG",[69,4982,4983],{"class":86},":\n",[69,4985,4986,4988,4990,4993,4995,4997],{"class":71,"line":475},[69,4987,2802],{"class":86},[69,4989,2429],{"class":82},[69,4991,4992],{"class":1022},"\"5\"",[69,4994,2429],{"class":82},[69,4996,2494],{"class":86},[69,4998,4999],{"class":75},"\u002F\u002F跳过了2,3,4,直接到5\n",[69,5001,5002],{"class":71,"line":482},[69,5003,142],{"class":86},[14,5005,5007],{"id":5006},"_17数组","1.7数组",[19,5009,5011],{"id":5010},"_171一维数组","1.7.1一维数组",[37,5013,5014],{},[40,5015,5016],{},"一维数组定义方式",[1530,5018,5019,5029],{},[1533,5020,5021],{},[1536,5022,5023,5026],{},[1539,5024,5025],{},"方式",[1539,5027,5028],{},"注意事项",[1576,5030,5031,5045,5055],{},[1536,5032,5033,5039],{},[1581,5034,5035,5036,1450],{},"数据类型 数组名",[69,5037,5038],{},"数组长度",[1581,5040,5041,5042,5044],{},"这种方式是先定义再arr",[69,5043,1830],{},"赋值",[1536,5046,5047,5052],{},[1581,5048,5035,5049,5051],{},[69,5050,5038],{},"={值1,值2....};",[1581,5053,5054],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1536,5056,5057,5061],{},[1581,5058,5035,5059,5051],{},[69,5060],{},[1581,5062,5063,5064,5066],{},"int arr",[69,5065],{},";这是不正确的，按照这样的方式定义必须有初始长度",[37,5068,5069],{"start":79},[40,5070,5071],{},"一维数组数组名\n用途：",[162,5073,5074],{},[40,5075,5076],{},"1.可以统计整个数组在内存中的长度：",[59,5078,5080],{"className":1386,"code":5079,"language":1388,"meta":64,"style":64},"sizeof(arr);\nsizeof(arr[0]);\n",[66,5081,5082,5089],{"__ignoreMap":64},[69,5083,5084,5086],{"class":71,"line":72},[69,5085,1395],{"class":82},[69,5087,5088],{"class":86},"(arr);\n",[69,5090,5091,5093,5096,5098],{"class":71,"line":79},[69,5092,1395],{"class":82},[69,5094,5095],{"class":86},"(arr[",[69,5097,1583],{"class":90},[69,5099,5100],{"class":86},"]);\n",[162,5102,5103],{},[40,5104,5105],{},"2.可以获取数组在内存中的首地址:",[59,5107,5109],{"className":1386,"code":5108,"language":1388,"meta":64,"style":64},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[66,5110,5111,5116,5129,5134],{"__ignoreMap":64},[69,5112,5113],{"class":71,"line":72},[69,5114,5115],{"class":75},"\u002F\u002F查看16进制的首地址\n",[69,5117,5118,5120,5122,5125,5127],{"class":71,"line":79},[69,5119,2621],{"class":86},[69,5121,2429],{"class":82},[69,5123,5124],{"class":86},"arr",[69,5126,2429],{"class":82},[69,5128,2451],{"class":86},[69,5130,5131],{"class":71,"line":106},[69,5132,5133],{"class":75},"\u002F\u002F看10进制数\n",[69,5135,5136,5138,5140,5142,5144,5146,5148,5151,5153,5155,5157],{"class":71,"line":116},[69,5137,2621],{"class":86},[69,5139,2429],{"class":82},[69,5141,1398],{"class":86},[69,5143,1401],{"class":82},[69,5145,1818],{"class":86},[69,5147,1742],{"class":82},[69,5149,5150],{"class":86},"arr[",[69,5152,1583],{"class":90},[69,5154,2326],{"class":86},[69,5156,2429],{"class":82},[69,5158,2451],{"class":86},[29,5160,5161],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[162,5163,5164],{},[40,5165,5166],{},"1️⃣五只小猪称体重",[59,5168,5170],{"className":1386,"code":5169,"language":1388,"meta":64,"style":64},"#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",[66,5171,5172,5178,5188,5196,5200,5240,5253,5279,5283,5295,5299,5309,5313,5317,5330,5340],{"__ignoreMap":64},[69,5173,5174,5176],{"class":71,"line":72},[69,5175,3194],{"class":82},[69,5177,3197],{"class":1022},[69,5179,5180,5182,5184,5186],{"class":71,"line":79},[69,5181,3202],{"class":82},[69,5183,3205],{"class":82},[69,5185,3208],{"class":109},[69,5187,130],{"class":86},[69,5189,5190,5192,5194],{"class":71,"line":106},[69,5191,1401],{"class":82},[69,5193,3217],{"class":109},[69,5195,3220],{"class":86},[69,5197,5198],{"class":71,"line":116},[69,5199,2797],{"class":86},[69,5201,5202,5204,5207,5209,5211,5213,5215,5218,5220,5223,5225,5227,5229,5232,5234,5237],{"class":71,"line":133},[69,5203,3229],{"class":82},[69,5205,5206],{"class":86}," arr[",[69,5208,1709],{"class":90},[69,5210,2326],{"class":86},[69,5212,1019],{"class":82},[69,5214,2283],{"class":86},[69,5216,5217],{"class":90},"300",[69,5219,1767],{"class":86},[69,5221,5222],{"class":90},"350",[69,5224,1767],{"class":86},[69,5226,2967],{"class":90},[69,5228,1767],{"class":86},[69,5230,5231],{"class":90},"400",[69,5233,1767],{"class":86},[69,5235,5236],{"class":90},"250",[69,5238,5239],{"class":86},"};\n",[69,5241,5242,5244,5247,5249,5251],{"class":71,"line":139},[69,5243,3229],{"class":82},[69,5245,5246],{"class":86}," tmp",[69,5248,1019],{"class":82},[69,5250,1583],{"class":90},[69,5252,130],{"class":86},[69,5254,5255,5257,5259,5261,5263,5265,5267,5269,5271,5273,5275,5277],{"class":71,"line":401},[69,5256,4445],{"class":82},[69,5258,87],{"class":86},[69,5260,1401],{"class":82},[69,5262,4276],{"class":86},[69,5264,1019],{"class":82},[69,5266,1583],{"class":90},[69,5268,4283],{"class":86},[69,5270,1011],{"class":82},[69,5272,1709],{"class":90},[69,5274,4283],{"class":86},[69,5276,3536],{"class":82},[69,5278,1404],{"class":86},[69,5280,5281],{"class":71,"line":470},[69,5282,3274],{"class":86},[69,5284,5285,5287,5290,5292],{"class":71,"line":475},[69,5286,3741],{"class":82},[69,5288,5289],{"class":86},"(tmp",[69,5291,1011],{"class":82},[69,5293,5294],{"class":86},"arr[i])\n",[69,5296,5297],{"class":71,"line":482},[69,5298,3754],{"class":86},[69,5300,5301,5304,5306],{"class":71,"line":497},[69,5302,5303],{"class":86},"            tmp",[69,5305,1019],{"class":82},[69,5307,5308],{"class":86},"arr[i];\n",[69,5310,5311],{"class":71,"line":502},[69,5312,3773],{"class":86},[69,5314,5315],{"class":71,"line":509},[69,5316,3431],{"class":86},[69,5318,5319,5321,5323,5326,5328],{"class":71,"line":524},[69,5320,2802],{"class":86},[69,5322,2429],{"class":82},[69,5324,5325],{"class":86},"tmp",[69,5327,2429],{"class":82},[69,5329,2451],{"class":86},[69,5331,5332,5335,5338],{"class":71,"line":2888},[69,5333,5334],{"class":82},"    return",[69,5336,5337],{"class":90}," 0",[69,5339,130],{"class":86},[69,5341,5342],{"class":71,"line":2893},[69,5343,142],{"class":86},[162,5345,5346],{},[40,5347,5348],{},"2️⃣数组元素逆置",[59,5350,5352],{"className":1386,"code":5351,"language":1388,"meta":64,"style":64},"\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",[66,5353,5354,5359,5365,5375,5383,5387,5422,5438,5470,5483,5488,5493,5505,5515,5525,5530,5539,5549,5554,5559,5586,5590,5606,5610,5621,5630],{"__ignoreMap":64},[69,5355,5356],{"class":71,"line":72},[69,5357,5358],{"class":75},"\u002F\u002F元素逆置\n",[69,5360,5361,5363],{"class":71,"line":79},[69,5362,3194],{"class":82},[69,5364,3197],{"class":1022},[69,5366,5367,5369,5371,5373],{"class":71,"line":106},[69,5368,3202],{"class":82},[69,5370,3205],{"class":82},[69,5372,3208],{"class":109},[69,5374,130],{"class":86},[69,5376,5377,5379,5381],{"class":71,"line":116},[69,5378,1401],{"class":82},[69,5380,3217],{"class":109},[69,5382,3220],{"class":86},[69,5384,5385],{"class":71,"line":133},[69,5386,2797],{"class":86},[69,5388,5389,5392,5394,5396,5398,5400,5402,5404,5406,5408,5410,5412,5414,5416,5418,5420],{"class":71,"line":139},[69,5390,5391],{"class":82},"   int",[69,5393,5206],{"class":86},[69,5395,1709],{"class":90},[69,5397,2326],{"class":86},[69,5399,1019],{"class":82},[69,5401,2283],{"class":86},[69,5403,1609],{"class":90},[69,5405,1767],{"class":86},[69,5407,1471],{"class":90},[69,5409,1767],{"class":86},[69,5411,1465],{"class":90},[69,5413,1767],{"class":86},[69,5415,1684],{"class":90},[69,5417,1767],{"class":86},[69,5419,1709],{"class":90},[69,5421,5239],{"class":86},[69,5423,5424,5426,5429,5431,5433,5435],{"class":71,"line":401},[69,5425,5391],{"class":82},[69,5427,5428],{"class":86}," start",[69,5430,1019],{"class":82},[69,5432,1583],{"class":90},[69,5434,1450],{"class":86},[69,5436,5437],{"class":75},"\u002F\u002F起始下标\n",[69,5439,5440,5442,5445,5448,5451,5454,5456,5458,5461,5463,5465,5467],{"class":71,"line":470},[69,5441,5391],{"class":82},[69,5443,5444],{"class":86}," end",[69,5446,5447],{"class":82},"=sizeof",[69,5449,5450],{"class":86},"(arr)",[69,5452,5453],{"class":82},"\u002Fsizeof",[69,5455,5095],{"class":86},[69,5457,1583],{"class":90},[69,5459,5460],{"class":86},"])",[69,5462,1920],{"class":82},[69,5464,1609],{"class":90},[69,5466,1450],{"class":86},[69,5468,5469],{"class":75},"\u002F\u002F结束下标\n",[69,5471,5472,5475,5478,5480],{"class":71,"line":475},[69,5473,5474],{"class":82},"   while",[69,5476,5477],{"class":86}," (start",[69,5479,1011],{"class":82},[69,5481,5482],{"class":86},"end)\n",[69,5484,5485],{"class":71,"line":482},[69,5486,5487],{"class":86},"   {\n",[69,5489,5490],{"class":71,"line":497},[69,5491,5492],{"class":75},"    \u002F\u002F实现元素互换代码\n",[69,5494,5495,5497,5500,5502],{"class":71,"line":502},[69,5496,3229],{"class":82},[69,5498,5499],{"class":86}," temp",[69,5501,1019],{"class":82},[69,5503,5504],{"class":86},"arr[start];\n",[69,5506,5507,5510,5512],{"class":71,"line":509},[69,5508,5509],{"class":86},"    arr[start]",[69,5511,1019],{"class":82},[69,5513,5514],{"class":86},"arr[end];\n",[69,5516,5517,5520,5522],{"class":71,"line":524},[69,5518,5519],{"class":86},"    arr[end]",[69,5521,1019],{"class":82},[69,5523,5524],{"class":86},"temp;\n",[69,5526,5527],{"class":71,"line":2888},[69,5528,5529],{"class":75},"    \u002F\u002F下标更新\n",[69,5531,5532,5535,5537],{"class":71,"line":2893},[69,5533,5534],{"class":86},"    start",[69,5536,3536],{"class":82},[69,5538,130],{"class":86},[69,5540,5541,5544,5547],{"class":71,"line":2899},[69,5542,5543],{"class":86},"    end",[69,5545,5546],{"class":82},"--",[69,5548,130],{"class":86},[69,5550,5551],{"class":71,"line":2919},[69,5552,5553],{"class":86},"   }\n",[69,5555,5556],{"class":71,"line":2924},[69,5557,5558],{"class":75},"   \u002F\u002F输出逆置后的数组\n",[69,5560,5561,5564,5566,5568,5570,5572,5574,5576,5578,5580,5582,5584],{"class":71,"line":2938},[69,5562,5563],{"class":82},"   for",[69,5565,87],{"class":86},[69,5567,1401],{"class":82},[69,5569,4276],{"class":86},[69,5571,1019],{"class":82},[69,5573,1583],{"class":90},[69,5575,4283],{"class":86},[69,5577,1011],{"class":82},[69,5579,1709],{"class":90},[69,5581,4283],{"class":86},[69,5583,3536],{"class":82},[69,5585,1404],{"class":86},[69,5587,5588],{"class":71,"line":2943},[69,5589,5487],{"class":86},[69,5591,5592,5594,5596,5599,5601,5604],{"class":71,"line":2972},[69,5593,2802],{"class":86},[69,5595,2429],{"class":82},[69,5597,5598],{"class":86},"arr[i]",[69,5600,2429],{"class":82},[69,5602,5603],{"class":1022},"\" \"",[69,5605,130],{"class":86},[69,5607,5608],{"class":71,"line":2977},[69,5609,5553],{"class":86},[69,5611,5612,5615,5617,5619],{"class":71,"line":2994},[69,5613,5614],{"class":109},"   system",[69,5616,1398],{"class":86},[69,5618,3552],{"class":1022},[69,5620,3963],{"class":86},[69,5622,5623,5626,5628],{"class":71,"line":2999},[69,5624,5625],{"class":82},"   return",[69,5627,5337],{"class":90},[69,5629,130],{"class":86},[69,5631,5632],{"class":71,"line":3004},[69,5633,142],{"class":86},[162,5635,5636],{},[40,5637,5638],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[59,5640,5642],{"className":1386,"code":5641,"language":1388,"meta":64,"style":64},"\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",[66,5643,5644,5649,5655,5665,5673,5677,5729,5742,5768,5772,5786,5790,5795,5800,5830,5834,5839,5873,5877,5882,5902,5907,5919,5935,5950,5955,5959,5963,5976,6002,6006,6020,6024,6032],{"__ignoreMap":64},[69,5645,5646],{"class":71,"line":72},[69,5647,5648],{"class":75},"\u002F\u002F冒泡排序,升序\n",[69,5650,5651,5653],{"class":71,"line":79},[69,5652,3194],{"class":82},[69,5654,3197],{"class":1022},[69,5656,5657,5659,5661,5663],{"class":71,"line":106},[69,5658,3202],{"class":82},[69,5660,3205],{"class":82},[69,5662,3208],{"class":109},[69,5664,130],{"class":86},[69,5666,5667,5669,5671],{"class":71,"line":116},[69,5668,1401],{"class":82},[69,5670,3217],{"class":109},[69,5672,3220],{"class":86},[69,5674,5675],{"class":71,"line":133},[69,5676,2797],{"class":86},[69,5678,5679,5681,5683,5685,5688,5690,5693,5695,5697,5699,5701,5703,5705,5707,5709,5711,5713,5715,5717,5719,5721,5723,5725,5727],{"class":71,"line":139},[69,5680,3229],{"class":82},[69,5682,5206],{"class":86},[69,5684,1809],{"class":90},[69,5686,5687],{"class":86},"] ",[69,5689,1019],{"class":82},[69,5691,5692],{"class":86}," {",[69,5694,1684],{"class":90},[69,5696,1767],{"class":86},[69,5698,1471],{"class":90},[69,5700,1767],{"class":86},[69,5702,1784],{"class":90},[69,5704,1767],{"class":86},[69,5706,1583],{"class":90},[69,5708,1767],{"class":86},[69,5710,1709],{"class":90},[69,5712,1767],{"class":86},[69,5714,1758],{"class":90},[69,5716,1767],{"class":86},[69,5718,1609],{"class":90},[69,5720,1767],{"class":86},[69,5722,1465],{"class":90},[69,5724,1767],{"class":86},[69,5726,1809],{"class":90},[69,5728,5239],{"class":86},[69,5730,5731,5733,5735,5738,5740],{"class":71,"line":401},[69,5732,2802],{"class":86},[69,5734,2429],{"class":82},[69,5736,5737],{"class":1022},"\"排序前：\"",[69,5739,2429],{"class":82},[69,5741,2451],{"class":86},[69,5743,5744,5746,5748,5750,5752,5754,5756,5758,5760,5762,5764,5766],{"class":71,"line":470},[69,5745,4445],{"class":82},[69,5747,87],{"class":86},[69,5749,1401],{"class":82},[69,5751,4276],{"class":86},[69,5753,1019],{"class":82},[69,5755,1583],{"class":90},[69,5757,4283],{"class":86},[69,5759,1011],{"class":82},[69,5761,1809],{"class":90},[69,5763,4283],{"class":86},[69,5765,3536],{"class":82},[69,5767,1404],{"class":86},[69,5769,5770],{"class":71,"line":475},[69,5771,3274],{"class":86},[69,5773,5774,5776,5778,5780,5782,5784],{"class":71,"line":482},[69,5775,4695],{"class":86},[69,5777,2429],{"class":82},[69,5779,5598],{"class":86},[69,5781,2429],{"class":82},[69,5783,5603],{"class":1022},[69,5785,130],{"class":86},[69,5787,5788],{"class":71,"line":497},[69,5789,3431],{"class":86},[69,5791,5792],{"class":71,"line":502},[69,5793,5794],{"class":75},"    \u002F\u002F开始冒泡排序\n",[69,5796,5797],{"class":71,"line":509},[69,5798,5799],{"class":75},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[69,5801,5802,5804,5806,5808,5810,5812,5814,5816,5818,5820,5822,5824,5826,5828],{"class":71,"line":524},[69,5803,4445],{"class":82},[69,5805,87],{"class":86},[69,5807,1401],{"class":82},[69,5809,4276],{"class":86},[69,5811,1019],{"class":82},[69,5813,1583],{"class":90},[69,5815,4283],{"class":86},[69,5817,1011],{"class":82},[69,5819,1809],{"class":90},[69,5821,1920],{"class":82},[69,5823,1609],{"class":90},[69,5825,4283],{"class":86},[69,5827,3536],{"class":82},[69,5829,1404],{"class":86},[69,5831,5832],{"class":71,"line":2888},[69,5833,3274],{"class":86},[69,5835,5836],{"class":71,"line":2893},[69,5837,5838],{"class":75},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[69,5840,5841,5843,5845,5847,5849,5851,5853,5855,5857,5859,5861,5863,5865,5867,5869,5871],{"class":71,"line":2899},[69,5842,4647],{"class":82},[69,5844,87],{"class":86},[69,5846,1401],{"class":82},[69,5848,4654],{"class":86},[69,5850,1019],{"class":82},[69,5852,1583],{"class":90},[69,5854,4661],{"class":86},[69,5856,1011],{"class":82},[69,5858,1809],{"class":90},[69,5860,1920],{"class":82},[69,5862,1830],{"class":86},[69,5864,1920],{"class":82},[69,5866,1609],{"class":90},[69,5868,4661],{"class":86},[69,5870,3536],{"class":82},[69,5872,1404],{"class":86},[69,5874,5875],{"class":71,"line":2919},[69,5876,3754],{"class":86},[69,5878,5879],{"class":71,"line":2924},[69,5880,5881],{"class":75},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[69,5883,5884,5887,5890,5892,5895,5897,5899],{"class":71,"line":2938},[69,5885,5886],{"class":82},"            if",[69,5888,5889],{"class":86},"(arr[j]",[69,5891,2346],{"class":82},[69,5893,5894],{"class":86},"arr[j",[69,5896,1869],{"class":82},[69,5898,1609],{"class":90},[69,5900,5901],{"class":86},"])\n",[69,5903,5904],{"class":71,"line":2943},[69,5905,5906],{"class":86},"            {\n",[69,5908,5909,5912,5914,5916],{"class":71,"line":2972},[69,5910,5911],{"class":82},"                int",[69,5913,5499],{"class":86},[69,5915,1019],{"class":82},[69,5917,5918],{"class":86},"arr[j];\n",[69,5920,5921,5924,5926,5928,5930,5932],{"class":71,"line":2977},[69,5922,5923],{"class":86},"                arr[j]",[69,5925,1019],{"class":82},[69,5927,5894],{"class":86},[69,5929,1869],{"class":82},[69,5931,1609],{"class":90},[69,5933,5934],{"class":86},"];\n",[69,5936,5937,5940,5942,5944,5946,5948],{"class":71,"line":2994},[69,5938,5939],{"class":86},"                arr[j",[69,5941,1869],{"class":82},[69,5943,1609],{"class":90},[69,5945,2326],{"class":86},[69,5947,1019],{"class":82},[69,5949,5524],{"class":86},[69,5951,5952],{"class":71,"line":2999},[69,5953,5954],{"class":86},"            }\n",[69,5956,5957],{"class":71,"line":3004},[69,5958,3773],{"class":86},[69,5960,5961],{"class":71,"line":3009},[69,5962,3431],{"class":86},[69,5964,5965,5967,5969,5972,5974],{"class":71,"line":3023},[69,5966,2802],{"class":86},[69,5968,2429],{"class":82},[69,5970,5971],{"class":1022},"\"排序后：\"",[69,5973,2429],{"class":82},[69,5975,2451],{"class":86},[69,5977,5978,5980,5982,5984,5986,5988,5990,5992,5994,5996,5998,6000],{"class":71,"line":3028},[69,5979,4445],{"class":82},[69,5981,87],{"class":86},[69,5983,1401],{"class":82},[69,5985,4276],{"class":86},[69,5987,1019],{"class":82},[69,5989,1583],{"class":90},[69,5991,4283],{"class":86},[69,5993,1011],{"class":82},[69,5995,1809],{"class":90},[69,5997,4283],{"class":86},[69,5999,3536],{"class":82},[69,6001,1404],{"class":86},[69,6003,6004],{"class":71,"line":3821},[69,6005,3274],{"class":86},[69,6007,6008,6010,6012,6014,6016,6018],{"class":71,"line":3835},[69,6009,4695],{"class":86},[69,6011,2429],{"class":82},[69,6013,5598],{"class":86},[69,6015,2429],{"class":82},[69,6017,5603],{"class":1022},[69,6019,130],{"class":86},[69,6021,6022],{"class":71,"line":3843},[69,6023,3431],{"class":86},[69,6025,6026,6028,6030],{"class":71,"line":3848},[69,6027,5334],{"class":82},[69,6029,5337],{"class":90},[69,6031,130],{"class":86},[69,6033,6034],{"class":71,"line":3854},[69,6035,142],{"class":86},[19,6037,6039],{"id":6038},"_172二维数组","1.7.2二维数组",[37,6041,6042],{},[40,6043,6044],{},"二维数组的四种定义方式",[1530,6046,6047,6056],{},[1533,6048,6049],{},[1536,6050,6051,6054],{},[1539,6052,6053],{},"序号",[1539,6055,5025],{},[1576,6057,6058,6068,6077,6086,6095],{},[1536,6059,6060,6062],{},[1581,6061,1609],{},[1581,6063,6064,6065,1450],{},"数据类型 数组名[行数]",[69,6066,6067],{},"列数",[1536,6069,6070,6072],{},[1581,6071,1471],{},[1581,6073,6064,6074,6076],{},[69,6075,6067],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1536,6078,6079,6081],{},[1581,6080,1465],{},[1581,6082,6064,6083,6085],{},[69,6084,6067],{},"={数据1,数据2,数据3...}",[1536,6087,6088,6090],{},[1581,6089,1684],{},[1581,6091,6092,6093,6085],{},"数据类型 数组名[]",[69,6094,6067],{},[1536,6096,6097,6100],{},[1581,6098,6099],{},"注意：不能只省略列数",[1581,6101],{},[37,6103,6104],{"start":79},[40,6105,6106],{},"二维数组数组名",[162,6108,6109,6112],{},[40,6110,6111],{},"1.查看二维数组所占内存空间",[40,6113,6114],{},"2.获取二维数组首地址",[29,6116,6117],{},"已知二维数组，求二维数组的行数与列数",[59,6119,6121],{"className":1386,"code":6120,"language":1388,"meta":64,"style":64},"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",[66,6122,6123,6131,6135,6153,6157,6175,6191,6196,6221,6254],{"__ignoreMap":64},[69,6124,6125,6127,6129],{"class":71,"line":72},[69,6126,1401],{"class":82},[69,6128,3217],{"class":109},[69,6130,3220],{"class":86},[69,6132,6133],{"class":71,"line":79},[69,6134,2797],{"class":86},[69,6136,6137,6139,6141,6143,6146,6148,6150],{"class":71,"line":106},[69,6138,3229],{"class":82},[69,6140,5206],{"class":86},[69,6142,1471],{"class":90},[69,6144,6145],{"class":86},"][",[69,6147,1465],{"class":90},[69,6149,2326],{"class":86},[69,6151,6152],{"class":82},"=\n",[69,6154,6155],{"class":71,"line":116},[69,6156,3274],{"class":86},[69,6158,6159,6162,6164,6166,6168,6170,6172],{"class":71,"line":133},[69,6160,6161],{"class":86},"        {",[69,6163,1609],{"class":90},[69,6165,1767],{"class":86},[69,6167,1471],{"class":90},[69,6169,1767],{"class":86},[69,6171,1465],{"class":90},[69,6173,6174],{"class":86},"},\n",[69,6176,6177,6179,6181,6183,6185,6187,6189],{"class":71,"line":139},[69,6178,6161],{"class":86},[69,6180,1684],{"class":90},[69,6182,1767],{"class":86},[69,6184,1709],{"class":90},[69,6186,1767],{"class":86},[69,6188,1733],{"class":90},[69,6190,142],{"class":86},[69,6192,6193],{"class":71,"line":401},[69,6194,6195],{"class":86},"    };\n",[69,6197,6198,6200,6202,6205,6207,6209,6211,6213,6215,6217,6219],{"class":71,"line":470},[69,6199,2802],{"class":86},[69,6201,2429],{"class":82},[69,6203,6204],{"class":1022},"\"二维数组的行数\"",[69,6206,2624],{"class":82},[69,6208,5450],{"class":86},[69,6210,5453],{"class":82},[69,6212,5095],{"class":86},[69,6214,1583],{"class":90},[69,6216,5460],{"class":86},[69,6218,2429],{"class":82},[69,6220,2451],{"class":86},[69,6222,6223,6225,6227,6230,6232,6234,6236,6238,6240,6242,6244,6246,6248,6250,6252],{"class":71,"line":475},[69,6224,2802],{"class":86},[69,6226,2429],{"class":82},[69,6228,6229],{"class":1022},"\"二维数组的列数\"",[69,6231,2624],{"class":82},[69,6233,5095],{"class":86},[69,6235,1583],{"class":90},[69,6237,5460],{"class":86},[69,6239,5453],{"class":82},[69,6241,5095],{"class":86},[69,6243,1583],{"class":90},[69,6245,6145],{"class":86},[69,6247,1583],{"class":90},[69,6249,5460],{"class":86},[69,6251,2429],{"class":82},[69,6253,2451],{"class":86},[69,6255,6256],{"class":71,"line":482},[69,6257,142],{"class":86},[29,6259,6260],{},"查看二维数组首地址",[59,6262,6264],{"className":1386,"code":6263,"language":1388,"meta":64,"style":64},"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",[66,6265,6266,6283,6309,6334],{"__ignoreMap":64},[69,6267,6268,6270,6272,6275,6277,6279,6281],{"class":71,"line":72},[69,6269,2621],{"class":86},[69,6271,2429],{"class":82},[69,6273,6274],{"class":1022},"\"二维数组首地址：\"",[69,6276,2429],{"class":82},[69,6278,5124],{"class":86},[69,6280,2429],{"class":82},[69,6282,2451],{"class":86},[69,6284,6285,6287,6289,6292,6294,6296,6298,6301,6303,6305,6307],{"class":71,"line":79},[69,6286,2621],{"class":86},[69,6288,2429],{"class":82},[69,6290,6291],{"class":1022},"\"二维数组第一行的首地址：\"",[69,6293,2429],{"class":82},[69,6295,1398],{"class":86},[69,6297,1401],{"class":82},[69,6299,6300],{"class":86},")arr[",[69,6302,1583],{"class":90},[69,6304,2326],{"class":86},[69,6306,2429],{"class":82},[69,6308,2451],{"class":86},[69,6310,6311,6313,6315,6318,6320,6322,6324,6326,6328,6330,6332],{"class":71,"line":106},[69,6312,2621],{"class":86},[69,6314,2429],{"class":82},[69,6316,6317],{"class":1022},"\"二维数组第二行的首地址：\"",[69,6319,2429],{"class":82},[69,6321,1398],{"class":86},[69,6323,1401],{"class":82},[69,6325,6300],{"class":86},[69,6327,1609],{"class":90},[69,6329,2326],{"class":86},[69,6331,2429],{"class":82},[69,6333,2451],{"class":86},[69,6335,6336,6338,6340,6343,6345,6347,6349,6351,6353,6355,6357,6359,6361,6363,6365,6367],{"class":71,"line":116},[69,6337,2621],{"class":86},[69,6339,2429],{"class":82},[69,6341,6342],{"class":1022},"\"二维数组第一个元素的首地址:\"",[69,6344,2429],{"class":82},[69,6346,1398],{"class":86},[69,6348,1401],{"class":82},[69,6350,1818],{"class":86},[69,6352,1742],{"class":82},[69,6354,5150],{"class":86},[69,6356,1583],{"class":90},[69,6358,6145],{"class":86},[69,6360,1583],{"class":90},[69,6362,2326],{"class":86},[69,6364,2429],{"class":82},[69,6366,2494],{"class":86},[69,6368,6369],{"class":75},"\u002F\u002F对于数，要加取址符\n",[1297,6371,6372],{},"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":64,"searchDepth":79,"depth":79,"links":6374},[6375,6376,6377,6385,6386,6392,6397],{"id":1341,"depth":79,"text":1342},{"id":1348,"depth":79,"text":1349},{"id":1363,"depth":79,"text":1364,"children":6378},[6379,6380,6381,6382,6383,6384],{"id":1367,"depth":106,"text":1368},{"id":1414,"depth":106,"text":1415},{"id":1479,"depth":106,"text":1480},{"id":2410,"depth":106,"text":2411},{"id":2500,"depth":106,"text":2501},{"id":2595,"depth":106,"text":2596},{"id":2637,"depth":79,"text":2638},{"id":2705,"depth":79,"text":2706,"children":6387},[6388,6389,6390,6391],{"id":2709,"depth":106,"text":2710},{"id":2730,"depth":106,"text":2731},{"id":2739,"depth":106,"text":2740},{"id":2748,"depth":106,"text":2749},{"id":2757,"depth":79,"text":2758,"children":6393},[6394,6395,6396],{"id":2761,"depth":106,"text":2762},{"id":3449,"depth":106,"text":3450},{"id":4865,"depth":106,"text":4866},{"id":5006,"depth":79,"text":5007,"children":6398},[6399,6400],{"id":5010,"depth":106,"text":5011},{"id":6038,"depth":106,"text":6039},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1333,"description":64},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6407,"title":6408,"body":6409,"description":64,"extension":1323,"meta":7507,"navigation":1325,"path":7508,"seo":7509,"stem":7510,"__hash__":7511},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6410,"toc":7499},[6411,6414,6418,6426,6432,6435,6501,6505,6508,6584,6588,6591,6594,6597,6810,6814,6819,6883,6888,6955,6960,7051,7054,7159,7163,7166,7172,7316,7320,7323,7337,7340,7385,7388,7496],[10,6412,6408],{"id":6413},"_2函数",[14,6415,6417],{"id":6416},"_21函数概述","2.1函数概述",[37,6419,6420,6423],{},[40,6421,6422],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[40,6424,6425],{},"语法：",[59,6427,6430],{"className":6428,"code":6429,"language":540,"meta":64},[538],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[66,6431,6429],{"__ignoreMap":64},[29,6433,6434],{},"小案例",[59,6436,6438],{"className":1386,"code":6437,"language":1388,"meta":64,"style":64},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[66,6439,6440,6445,6469,6473,6490,6497],{"__ignoreMap":64},[69,6441,6442],{"class":71,"line":72},[69,6443,6444],{"class":75},"\u002F\u002Fnum1,num2形参\n",[69,6446,6447,6449,6452,6454,6456,6460,6462,6464,6467],{"class":71,"line":79},[69,6448,1401],{"class":82},[69,6450,6451],{"class":109}," add",[69,6453,1398],{"class":86},[69,6455,1401],{"class":82},[69,6457,6459],{"class":6458},"s4XuR"," num1",[69,6461,1767],{"class":86},[69,6463,1401],{"class":82},[69,6465,6466],{"class":6458}," num2",[69,6468,1404],{"class":86},[69,6470,6471],{"class":71,"line":106},[69,6472,2797],{"class":86},[69,6474,6475,6477,6480,6482,6485,6487],{"class":71,"line":116},[69,6476,3229],{"class":82},[69,6478,6479],{"class":86}," sum",[69,6481,1019],{"class":82},[69,6483,6484],{"class":86},"num1",[69,6486,1869],{"class":82},[69,6488,6489],{"class":86},"num2;\n",[69,6491,6492,6494],{"class":71,"line":133},[69,6493,5334],{"class":82},[69,6495,6496],{"class":86}," sum;\n",[69,6498,6499],{"class":71,"line":139},[69,6500,142],{"class":86},[14,6502,6504],{"id":6503},"_22函数调用","2.2函数调用",[29,6506,6507],{},"调用刚刚写的求和函数",[59,6509,6511],{"className":1386,"code":6510,"language":1388,"meta":64,"style":64},"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",[66,6512,6513,6521,6525,6530,6542,6554,6563,6568,6580],{"__ignoreMap":64},[69,6514,6515,6517,6519],{"class":71,"line":72},[69,6516,1401],{"class":82},[69,6518,3217],{"class":109},[69,6520,3220],{"class":86},[69,6522,6523],{"class":71,"line":79},[69,6524,2797],{"class":86},[69,6526,6527],{"class":71,"line":106},[69,6528,6529],{"class":75},"    \u002F\u002Fa,b实参\n",[69,6531,6532,6534,6536,6538,6540],{"class":71,"line":116},[69,6533,3229],{"class":82},[69,6535,2650],{"class":86},[69,6537,1019],{"class":82},[69,6539,1583],{"class":90},[69,6541,130],{"class":86},[69,6543,6544,6546,6548,6550,6552],{"class":71,"line":133},[69,6545,3229],{"class":82},[69,6547,4077],{"class":86},[69,6549,1019],{"class":82},[69,6551,1583],{"class":90},[69,6553,130],{"class":86},[69,6555,6556,6558,6560],{"class":71,"line":139},[69,6557,3256],{"class":86},[69,6559,2681],{"class":82},[69,6561,6562],{"class":86},"a,b;\n",[69,6564,6565],{"class":71,"line":401},[69,6566,6567],{"class":75},"    \u002F\u002F调用函数时，实参值传给了形参\n",[69,6569,6570,6572,6574,6577],{"class":71,"line":470},[69,6571,2802],{"class":86},[69,6573,2429],{"class":82},[69,6575,6576],{"class":109},"add",[69,6578,6579],{"class":86},"(a,b);\n",[69,6581,6582],{"class":71,"line":475},[69,6583,142],{"class":86},[14,6585,6587],{"id":6586},"_23值传递","2.3值传递",[29,6589,6590],{},"值传递就是函数调用时实参将数值传给形参",[29,6592,6593],{},"值传递时，如果形参发生任何改变，不会影响实参",[29,6595,6596],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[59,6598,6600],{"className":1386,"code":6599,"language":1388,"meta":64,"style":64},"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",[66,6601,6602,6624,6628,6641,6658,6676,6687,6696,6705,6718,6734,6750,6759,6763,6771,6775,6787,6799,6806],{"__ignoreMap":64},[69,6603,6604,6607,6610,6612,6614,6616,6618,6620,6622],{"class":71,"line":72},[69,6605,6606],{"class":82},"void",[69,6608,6609],{"class":109}," swap",[69,6611,1398],{"class":86},[69,6613,1401],{"class":82},[69,6615,6459],{"class":6458},[69,6617,1767],{"class":86},[69,6619,1401],{"class":82},[69,6621,6466],{"class":6458},[69,6623,1404],{"class":86},[69,6625,6626],{"class":71,"line":79},[69,6627,2797],{"class":86},[69,6629,6630,6632,6634,6637,6639],{"class":71,"line":106},[69,6631,2802],{"class":86},[69,6633,2429],{"class":82},[69,6635,6636],{"class":1022},"\"交换前：\"",[69,6638,2429],{"class":82},[69,6640,2451],{"class":86},[69,6642,6643,6645,6647,6650,6652,6654,6656],{"class":71,"line":116},[69,6644,2802],{"class":86},[69,6646,2429],{"class":82},[69,6648,6649],{"class":1022},"\"num1=\"",[69,6651,2429],{"class":82},[69,6653,6484],{"class":86},[69,6655,2429],{"class":82},[69,6657,2451],{"class":86},[69,6659,6660,6662,6664,6667,6669,6672,6674],{"class":71,"line":133},[69,6661,2802],{"class":86},[69,6663,2429],{"class":82},[69,6665,6666],{"class":1022},"\"num2=\"",[69,6668,2429],{"class":82},[69,6670,6671],{"class":86},"num2",[69,6673,2429],{"class":82},[69,6675,2451],{"class":86},[69,6677,6678,6680,6682,6684],{"class":71,"line":139},[69,6679,3229],{"class":82},[69,6681,5499],{"class":86},[69,6683,1019],{"class":82},[69,6685,6686],{"class":86},"num1;\n",[69,6688,6689,6692,6694],{"class":71,"line":401},[69,6690,6691],{"class":86},"    num1",[69,6693,1019],{"class":82},[69,6695,6489],{"class":86},[69,6697,6698,6701,6703],{"class":71,"line":470},[69,6699,6700],{"class":86},"    num2",[69,6702,1019],{"class":82},[69,6704,5524],{"class":86},[69,6706,6707,6709,6711,6714,6716],{"class":71,"line":475},[69,6708,2802],{"class":86},[69,6710,2429],{"class":82},[69,6712,6713],{"class":1022},"\"交换后：\"",[69,6715,2429],{"class":82},[69,6717,2451],{"class":86},[69,6719,6720,6722,6724,6726,6728,6730,6732],{"class":71,"line":482},[69,6721,2802],{"class":86},[69,6723,2429],{"class":82},[69,6725,6649],{"class":1022},[69,6727,2429],{"class":82},[69,6729,6484],{"class":86},[69,6731,2429],{"class":82},[69,6733,2451],{"class":86},[69,6735,6736,6738,6740,6742,6744,6746,6748],{"class":71,"line":497},[69,6737,2802],{"class":86},[69,6739,2429],{"class":82},[69,6741,6666],{"class":1022},[69,6743,2429],{"class":82},[69,6745,6671],{"class":86},[69,6747,2429],{"class":82},[69,6749,2451],{"class":86},[69,6751,6752,6754,6756],{"class":71,"line":502},[69,6753,5334],{"class":82},[69,6755,1450],{"class":86},[69,6757,6758],{"class":75},"\u002F\u002F或者不写\n",[69,6760,6761],{"class":71,"line":509},[69,6762,142],{"class":86},[69,6764,6765,6767,6769],{"class":71,"line":524},[69,6766,1401],{"class":82},[69,6768,3217],{"class":109},[69,6770,3220],{"class":86},[69,6772,6773],{"class":71,"line":2888},[69,6774,2797],{"class":86},[69,6776,6777,6779,6781,6783,6785],{"class":71,"line":2893},[69,6778,3229],{"class":82},[69,6780,2650],{"class":86},[69,6782,1019],{"class":82},[69,6784,390],{"class":90},[69,6786,130],{"class":86},[69,6788,6789,6791,6793,6795,6797],{"class":71,"line":2899},[69,6790,3229],{"class":82},[69,6792,4077],{"class":86},[69,6794,1019],{"class":82},[69,6796,2087],{"class":90},[69,6798,130],{"class":86},[69,6800,6801,6804],{"class":71,"line":2919},[69,6802,6803],{"class":109},"    swap",[69,6805,6579],{"class":86},[69,6807,6808],{"class":71,"line":2924},[69,6809,142],{"class":86},[14,6811,6813],{"id":6812},"_24函数的常见形式","2.4函数的常见形式",[37,6815,6816],{},[40,6817,6818],{},"无参无返",[59,6820,6822],{"className":1386,"code":6821,"language":1388,"meta":64,"style":64},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[66,6823,6824,6833,6837,6850,6854,6862,6866,6871,6879],{"__ignoreMap":64},[69,6825,6826,6828,6831],{"class":71,"line":72},[69,6827,6606],{"class":82},[69,6829,6830],{"class":109}," test01",[69,6832,3220],{"class":86},[69,6834,6835],{"class":71,"line":79},[69,6836,2797],{"class":86},[69,6838,6839,6841,6843,6846,6848],{"class":71,"line":106},[69,6840,2802],{"class":86},[69,6842,2429],{"class":82},[69,6844,6845],{"class":1022},"\"你好\"",[69,6847,2429],{"class":82},[69,6849,2451],{"class":86},[69,6851,6852],{"class":71,"line":116},[69,6853,142],{"class":86},[69,6855,6856,6858,6860],{"class":71,"line":133},[69,6857,1401],{"class":82},[69,6859,3217],{"class":109},[69,6861,3220],{"class":86},[69,6863,6864],{"class":71,"line":139},[69,6865,2797],{"class":86},[69,6867,6868],{"class":71,"line":401},[69,6869,6870],{"class":75},"    \u002F\u002F函数调用\n",[69,6872,6873,6876],{"class":71,"line":470},[69,6874,6875],{"class":109},"    test01",[69,6877,6878],{"class":86},"();\n",[69,6880,6881],{"class":71,"line":475},[69,6882,142],{"class":86},[37,6884,6885],{"start":79},[40,6886,6887],{},"有参无返",[59,6889,6891],{"className":1386,"code":6890,"language":1388,"meta":64,"style":64},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[66,6892,6893,6908,6912,6924,6928,6936,6940,6951],{"__ignoreMap":64},[69,6894,6895,6897,6900,6902,6904,6906],{"class":71,"line":72},[69,6896,6606],{"class":82},[69,6898,6899],{"class":109}," test02",[69,6901,1398],{"class":86},[69,6903,1401],{"class":82},[69,6905,2650],{"class":6458},[69,6907,1404],{"class":86},[69,6909,6910],{"class":71,"line":79},[69,6911,2797],{"class":86},[69,6913,6914,6916,6918,6920,6922],{"class":71,"line":106},[69,6915,2802],{"class":86},[69,6917,2429],{"class":82},[69,6919,6845],{"class":1022},[69,6921,2429],{"class":82},[69,6923,2451],{"class":86},[69,6925,6926],{"class":71,"line":116},[69,6927,142],{"class":86},[69,6929,6930,6932,6934],{"class":71,"line":133},[69,6931,1401],{"class":82},[69,6933,3217],{"class":109},[69,6935,3220],{"class":86},[69,6937,6938],{"class":71,"line":139},[69,6939,2797],{"class":86},[69,6941,6942,6945,6947,6949],{"class":71,"line":401},[69,6943,6944],{"class":109},"    test02",[69,6946,1398],{"class":86},[69,6948,124],{"class":90},[69,6950,3963],{"class":86},[69,6952,6953],{"class":71,"line":470},[69,6954,142],{"class":86},[37,6956,6957],{"start":106},[40,6958,6959],{},"无参有返",[59,6961,6963],{"className":1386,"code":6962,"language":1388,"meta":64,"style":64},"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",[66,6964,6965,6974,6978,6990,6999,7003,7011,7015,7028,7047],{"__ignoreMap":64},[69,6966,6967,6969,6972],{"class":71,"line":72},[69,6968,1401],{"class":82},[69,6970,6971],{"class":109}," test03",[69,6973,3220],{"class":86},[69,6975,6976],{"class":71,"line":79},[69,6977,2797],{"class":86},[69,6979,6980,6982,6984,6986,6988],{"class":71,"line":106},[69,6981,2802],{"class":86},[69,6983,2429],{"class":82},[69,6985,6845],{"class":1022},[69,6987,2429],{"class":82},[69,6989,2451],{"class":86},[69,6991,6992,6994,6997],{"class":71,"line":116},[69,6993,5334],{"class":82},[69,6995,6996],{"class":90}," 100",[69,6998,130],{"class":86},[69,7000,7001],{"class":71,"line":133},[69,7002,142],{"class":86},[69,7004,7005,7007,7009],{"class":71,"line":139},[69,7006,1401],{"class":82},[69,7008,3217],{"class":109},[69,7010,3220],{"class":86},[69,7012,7013],{"class":71,"line":401},[69,7014,2797],{"class":86},[69,7016,7017,7019,7021,7023,7026],{"class":71,"line":470},[69,7018,3229],{"class":82},[69,7020,6459],{"class":86},[69,7022,1019],{"class":82},[69,7024,7025],{"class":109},"test03",[69,7027,6878],{"class":86},[69,7029,7030,7032,7034,7036,7038,7040,7042,7044],{"class":71,"line":475},[69,7031,2802],{"class":86},[69,7033,2429],{"class":82},[69,7035,6649],{"class":1022},[69,7037,2429],{"class":82},[69,7039,6484],{"class":86},[69,7041,2429],{"class":82},[69,7043,2494],{"class":86},[69,7045,7046],{"class":75}," \u002F\u002F100\n",[69,7048,7049],{"class":71,"line":482},[69,7050,142],{"class":86},[29,7052,7053],{},"4.有参有返",[59,7055,7057],{"className":1386,"code":7056,"language":1388,"meta":64,"style":64},"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",[66,7058,7059,7074,7078,7091,7097,7101,7110,7114,7126,7140,7155],{"__ignoreMap":64},[69,7060,7061,7063,7066,7068,7070,7072],{"class":71,"line":72},[69,7062,1401],{"class":82},[69,7064,7065],{"class":109}," test04",[69,7067,1398],{"class":86},[69,7069,1401],{"class":82},[69,7071,2650],{"class":6458},[69,7073,1404],{"class":86},[69,7075,7076],{"class":71,"line":79},[69,7077,2797],{"class":86},[69,7079,7080,7082,7084,7087,7089],{"class":71,"line":106},[69,7081,2802],{"class":86},[69,7083,2429],{"class":82},[69,7085,7086],{"class":1022},"\"hello\"",[69,7088,2429],{"class":82},[69,7090,2451],{"class":86},[69,7092,7093,7095],{"class":71,"line":116},[69,7094,5334],{"class":82},[69,7096,2684],{"class":86},[69,7098,7099],{"class":71,"line":133},[69,7100,142],{"class":86},[69,7102,7103,7105,7108],{"class":71,"line":139},[69,7104,1401],{"class":82},[69,7106,7107],{"class":109}," mian",[69,7109,3220],{"class":86},[69,7111,7112],{"class":71,"line":401},[69,7113,2797],{"class":86},[69,7115,7116,7118,7120,7122,7124],{"class":71,"line":470},[69,7117,3229],{"class":82},[69,7119,4077],{"class":86},[69,7121,1019],{"class":82},[69,7123,1609],{"class":90},[69,7125,130],{"class":86},[69,7127,7128,7130,7132,7134,7137],{"class":71,"line":475},[69,7129,3229],{"class":82},[69,7131,4093],{"class":86},[69,7133,1019],{"class":82},[69,7135,7136],{"class":109},"test04",[69,7138,7139],{"class":86},"(b);\n",[69,7141,7142,7144,7146,7148,7150,7152],{"class":71,"line":482},[69,7143,2802],{"class":86},[69,7145,2429],{"class":82},[69,7147,1679],{"class":86},[69,7149,2429],{"class":82},[69,7151,2494],{"class":86},[69,7153,7154],{"class":75}," \u002F\u002F1\n",[69,7156,7157],{"class":71,"line":497},[69,7158,142],{"class":86},[14,7160,7162],{"id":7161},"_25函数的声明","2.5函数的声明",[29,7164,7165],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[29,7167,7168,7169],{},"函数的",[195,7170,7171],{},"声明可以多次，但是函数的定义只能有一次",[59,7173,7175],{"className":1386,"code":7174,"language":1388,"meta":64,"style":64},"\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",[66,7176,7177,7182,7187,7212,7221,7225,7237,7249,7265,7269,7289,7293,7312],{"__ignoreMap":64},[69,7178,7179],{"class":71,"line":72},[69,7180,7181],{"class":75},"\u002F\u002F函数声明\n",[69,7183,7184],{"class":71,"line":79},[69,7185,7186],{"class":75},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[69,7188,7189,7191,7194,7196,7198,7200,7202,7204,7206,7209],{"class":71,"line":106},[69,7190,1401],{"class":82},[69,7192,7193],{"class":109}," max",[69,7195,1398],{"class":86},[69,7197,1401],{"class":82},[69,7199,2650],{"class":6458},[69,7201,1767],{"class":86},[69,7203,1401],{"class":82},[69,7205,4077],{"class":6458},[69,7207,7208],{"class":86},");",[69,7210,7211],{"class":75},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[69,7213,7214,7216,7218],{"class":71,"line":116},[69,7215,1401],{"class":82},[69,7217,3217],{"class":109},[69,7219,7220],{"class":86},"() \n",[69,7222,7223],{"class":71,"line":133},[69,7224,2797],{"class":86},[69,7226,7227,7229,7231,7233,7235],{"class":71,"line":139},[69,7228,3229],{"class":82},[69,7230,2650],{"class":86},[69,7232,1019],{"class":82},[69,7234,390],{"class":90},[69,7236,130],{"class":86},[69,7238,7239,7241,7243,7245,7247],{"class":71,"line":401},[69,7240,3229],{"class":82},[69,7242,4077],{"class":86},[69,7244,1019],{"class":82},[69,7246,2087],{"class":90},[69,7248,130],{"class":86},[69,7250,7251,7253,7255,7258,7261,7263],{"class":71,"line":470},[69,7252,2802],{"class":86},[69,7254,2429],{"class":82},[69,7256,7257],{"class":109},"max",[69,7259,7260],{"class":86},"(a,b)",[69,7262,2429],{"class":82},[69,7264,2451],{"class":86},[69,7266,7267],{"class":71,"line":475},[69,7268,142],{"class":86},[69,7270,7271,7273,7275,7277,7279,7281,7283,7285,7287],{"class":71,"line":482},[69,7272,1401],{"class":82},[69,7274,7193],{"class":109},[69,7276,1398],{"class":86},[69,7278,1401],{"class":82},[69,7280,2650],{"class":6458},[69,7282,1767],{"class":86},[69,7284,1401],{"class":82},[69,7286,4077],{"class":6458},[69,7288,1404],{"class":86},[69,7290,7291],{"class":71,"line":497},[69,7292,2797],{"class":86},[69,7294,7295,7297,7299,7301,7303,7305,7307,7309],{"class":71,"line":502},[69,7296,5334],{"class":82},[69,7298,2650],{"class":86},[69,7300,2346],{"class":82},[69,7302,1654],{"class":86},[69,7304,2372],{"class":82},[69,7306,187],{"class":86},[69,7308,2246],{"class":82},[69,7310,7311],{"class":86},"b;\n",[69,7313,7314],{"class":71,"line":509},[69,7315,142],{"class":86},[14,7317,7319],{"id":7318},"_26函数的分文件编写","2.6函数的分文件编写",[29,7321,7322],{},"4个步骤：",[162,7324,7325,7328,7331,7334],{},[40,7326,7327],{},"1.创建后缀名为.h的头文件",[40,7329,7330],{},"2.创建后缀名为.cpp的源文件",[40,7332,7333],{},"3.在头文件中写函数的定义",[40,7335,7336],{},"4.在源文件中写函数的定义\n示例：",[29,7338,7339],{},"头文件：swap.h",[59,7341,7343],{"className":1386,"code":7342,"language":1388,"meta":64,"style":64},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[66,7344,7345,7351,7361,7365],{"__ignoreMap":64},[69,7346,7347,7349],{"class":71,"line":72},[69,7348,3194],{"class":82},[69,7350,3197],{"class":1022},[69,7352,7353,7355,7357,7359],{"class":71,"line":79},[69,7354,3202],{"class":82},[69,7356,3205],{"class":82},[69,7358,3208],{"class":109},[69,7360,130],{"class":86},[69,7362,7363],{"class":71,"line":106},[69,7364,7181],{"class":75},[69,7366,7367,7369,7371,7373,7375,7377,7379,7381,7383],{"class":71,"line":116},[69,7368,6606],{"class":82},[69,7370,6609],{"class":109},[69,7372,1398],{"class":86},[69,7374,1401],{"class":82},[69,7376,2650],{"class":6458},[69,7378,1767],{"class":86},[69,7380,1401],{"class":82},[69,7382,4077],{"class":6458},[69,7384,3963],{"class":86},[29,7386,7387],{},"源文件：swap.cpp",[59,7389,7391],{"className":1386,"code":7390,"language":1388,"meta":64,"style":64},"#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",[66,7392,7393,7400,7405,7425,7429,7440,7449,7458,7475,7492],{"__ignoreMap":64},[69,7394,7395,7397],{"class":71,"line":72},[69,7396,3194],{"class":82},[69,7398,7399],{"class":1022}," \"swap.h\"\n",[69,7401,7402],{"class":71,"line":79},[69,7403,7404],{"class":75},"\u002F\u002F函数的定义\n",[69,7406,7407,7409,7411,7413,7415,7417,7419,7421,7423],{"class":71,"line":106},[69,7408,6606],{"class":82},[69,7410,6609],{"class":109},[69,7412,1398],{"class":86},[69,7414,1401],{"class":82},[69,7416,2650],{"class":6458},[69,7418,1767],{"class":86},[69,7420,1401],{"class":82},[69,7422,4077],{"class":6458},[69,7424,1404],{"class":86},[69,7426,7427],{"class":71,"line":116},[69,7428,2797],{"class":86},[69,7430,7431,7433,7435,7437],{"class":71,"line":133},[69,7432,3229],{"class":82},[69,7434,5499],{"class":86},[69,7436,1019],{"class":82},[69,7438,7439],{"class":86},"a;\n",[69,7441,7442,7445,7447],{"class":71,"line":139},[69,7443,7444],{"class":86},"    a",[69,7446,1019],{"class":82},[69,7448,7311],{"class":86},[69,7450,7451,7454,7456],{"class":71,"line":401},[69,7452,7453],{"class":86},"    b",[69,7455,1019],{"class":82},[69,7457,5524],{"class":86},[69,7459,7460,7462,7464,7467,7469,7471,7473],{"class":71,"line":470},[69,7461,2802],{"class":86},[69,7463,2429],{"class":82},[69,7465,7466],{"class":1022},"\"a=\"",[69,7468,2429],{"class":82},[69,7470,187],{"class":86},[69,7472,2429],{"class":82},[69,7474,2451],{"class":86},[69,7476,7477,7479,7481,7484,7486,7488,7490],{"class":71,"line":475},[69,7478,2802],{"class":86},[69,7480,2429],{"class":82},[69,7482,7483],{"class":1022},"\"b=\"",[69,7485,2429],{"class":82},[69,7487,1654],{"class":86},[69,7489,2429],{"class":82},[69,7491,2451],{"class":86},[69,7493,7494],{"class":71,"line":482},[69,7495,142],{"class":86},[1297,7497,7498],{},"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":64,"searchDepth":79,"depth":79,"links":7500},[7501,7502,7503,7504,7505,7506],{"id":6416,"depth":79,"text":6417},{"id":6503,"depth":79,"text":6504},{"id":6586,"depth":79,"text":6587},{"id":6812,"depth":79,"text":6813},{"id":7161,"depth":79,"text":7162},{"id":7318,"depth":79,"text":7319},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6408,"description":64},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7513,"title":7514,"body":7515,"description":7522,"extension":1323,"meta":8927,"navigation":1325,"path":8928,"seo":8929,"stem":8930,"__hash__":8931},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7516,"toc":8917},[7517,7520,7523,7527,7689,7693,7696,7699,7702,7705,7845,7849,7852,7855,7858,7923,7927,7932,7999,8002,8006,8009,8020,8025,8045,8048,8053,8072,8075,8079,8098,8101,8105,8340,8344,8347,8350,8353,8515,8518,8522,8525,8531,8914],[10,7518,7514],{"id":7519},"_3指针",[29,7521,7522],{},"通过指针保存一个地址，指针就是个地址",[14,7524,7526],{"id":7525},"_31定义指针","3.1定义指针",[59,7528,7530],{"className":1386,"code":7529,"language":1388,"meta":64,"style":64},"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",[66,7531,7532,7540,7544,7549,7561,7566,7574,7584,7602,7622,7626,7631,7636,7641,7655,7671,7685],{"__ignoreMap":64},[69,7533,7534,7536,7538],{"class":71,"line":72},[69,7535,1401],{"class":82},[69,7537,3217],{"class":109},[69,7539,3220],{"class":86},[69,7541,7542],{"class":71,"line":79},[69,7543,2797],{"class":86},[69,7545,7546],{"class":71,"line":106},[69,7547,7548],{"class":75},"    \u002F\u002F1.定义指针\n",[69,7550,7551,7553,7555,7557,7559],{"class":71,"line":116},[69,7552,3229],{"class":82},[69,7554,2650],{"class":86},[69,7556,1019],{"class":82},[69,7558,390],{"class":90},[69,7560,130],{"class":86},[69,7562,7563],{"class":71,"line":133},[69,7564,7565],{"class":75},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[69,7567,7568,7571],{"class":71,"line":139},[69,7569,7570],{"class":82},"    int*",[69,7572,7573],{"class":86},"p;\n",[69,7575,7576,7579,7582],{"class":71,"line":401},[69,7577,7578],{"class":86},"    p",[69,7580,7581],{"class":82},"=&",[69,7583,7439],{"class":86},[69,7585,7586,7588,7590,7593,7596,7598,7600],{"class":71,"line":470},[69,7587,2802],{"class":86},[69,7589,2429],{"class":82},[69,7591,7592],{"class":1022},"\"a的地址为：\"",[69,7594,7595],{"class":82},"\u003C\u003C&",[69,7597,187],{"class":86},[69,7599,2429],{"class":82},[69,7601,2451],{"class":86},[69,7603,7604,7606,7608,7611,7613,7615,7617,7619],{"class":71,"line":475},[69,7605,2802],{"class":86},[69,7607,2429],{"class":82},[69,7609,7610],{"class":1022},"\"指针p为：\"",[69,7612,2429],{"class":82},[69,7614,29],{"class":86},[69,7616,2429],{"class":82},[69,7618,2494],{"class":86},[69,7620,7621],{"class":75},"\u002F\u002F指针p表示的就是a的地址\n",[69,7623,7624],{"class":71,"line":482},[69,7625,3644],{"emptyLinePlaceholder":1325},[69,7627,7628],{"class":71,"line":497},[69,7629,7630],{"class":75},"    \u002F\u002F2.使用指针\n",[69,7632,7633],{"class":71,"line":502},[69,7634,7635],{"class":75},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[69,7637,7638],{"class":71,"line":509},[69,7639,7640],{"class":75},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[69,7642,7643,7646,7648,7650,7653],{"class":71,"line":524},[69,7644,7645],{"class":82},"    *",[69,7647,29],{"class":86},[69,7649,1019],{"class":82},[69,7651,7652],{"class":90},"1000",[69,7654,130],{"class":86},[69,7656,7657,7659,7662,7664,7666,7668],{"class":71,"line":2888},[69,7658,2802],{"class":86},[69,7660,7661],{"class":82},"\u003C\u003C*",[69,7663,29],{"class":86},[69,7665,2429],{"class":82},[69,7667,2494],{"class":86},[69,7669,7670],{"class":75},"\u002F\u002F1000\n",[69,7672,7673,7675,7677,7679,7681,7683],{"class":71,"line":2893},[69,7674,2802],{"class":86},[69,7676,2429],{"class":82},[69,7678,187],{"class":86},[69,7680,2429],{"class":82},[69,7682,2494],{"class":86},[69,7684,7670],{"class":75},[69,7686,7687],{"class":71,"line":2899},[69,7688,142],{"class":86},[14,7690,7692],{"id":7691},"_32指针所占的内存空间","3.2指针所占的内存空间",[29,7694,7695],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[29,7697,7698],{},"在32位操作系统下：占用4个字节空间",[29,7700,7701],{},"在64位操作系统下：占用8个字节空间",[29,7703,7704],{},"上方是不管啥数据类型的",[59,7706,7708],{"className":1386,"code":7707,"language":1388,"meta":64,"style":64},"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",[66,7709,7710,7718,7722,7727,7739,7744,7749,7754,7767,7789,7815,7841],{"__ignoreMap":64},[69,7711,7712,7714,7716],{"class":71,"line":72},[69,7713,1401],{"class":82},[69,7715,3217],{"class":109},[69,7717,3220],{"class":86},[69,7719,7720],{"class":71,"line":79},[69,7721,2797],{"class":86},[69,7723,7724],{"class":71,"line":106},[69,7725,7726],{"class":75},"    \u002F\u002F指针所占内存空间\n",[69,7728,7729,7731,7733,7735,7737],{"class":71,"line":116},[69,7730,3229],{"class":82},[69,7732,2650],{"class":86},[69,7734,1019],{"class":82},[69,7736,390],{"class":90},[69,7738,130],{"class":86},[69,7740,7741],{"class":71,"line":133},[69,7742,7743],{"class":75},"    \u002F\u002Fint *p;\n",[69,7745,7746],{"class":71,"line":139},[69,7747,7748],{"class":75},"    \u002F\u002Fp=&a;\n",[69,7750,7751],{"class":71,"line":401},[69,7752,7753],{"class":75},"    \u002F\u002F上述可以写为以下：\n",[69,7755,7756,7758,7761,7763,7765],{"class":71,"line":470},[69,7757,3229],{"class":82},[69,7759,7760],{"class":82}," *",[69,7762,29],{"class":86},[69,7764,7581],{"class":82},[69,7766,7439],{"class":86},[69,7768,7769,7772,7774,7777,7779,7782,7784,7786],{"class":71,"line":475},[69,7770,7771],{"class":86},"    cout ",[69,7773,2429],{"class":82},[69,7775,7776],{"class":1022},"\"sizeof(int *)\"",[69,7778,2624],{"class":82},[69,7780,7781],{"class":86},"(p)",[69,7783,2429],{"class":82},[69,7785,2494],{"class":86},[69,7787,7788],{"class":75},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[69,7790,7791,7793,7795,7797,7799,7801,7803,7805,7807,7809,7812],{"class":71,"line":482},[69,7792,7771],{"class":86},[69,7794,2429],{"class":82},[69,7796,7776],{"class":1022},[69,7798,2624],{"class":82},[69,7800,1398],{"class":86},[69,7802,1401],{"class":82},[69,7804,7760],{"class":82},[69,7806,1818],{"class":86},[69,7808,2429],{"class":82},[69,7810,7811],{"class":86},"endl",[69,7813,7814],{"class":75},"  \u002F\u002F4字节(32位的话)\n",[69,7816,7817,7819,7821,7824,7826,7828,7830,7832,7834,7836,7838],{"class":71,"line":497},[69,7818,7771],{"class":86},[69,7820,2429],{"class":82},[69,7822,7823],{"class":1022},"\"sizeof(char *)\"",[69,7825,2624],{"class":82},[69,7827,1398],{"class":86},[69,7829,1490],{"class":82},[69,7831,7760],{"class":82},[69,7833,1818],{"class":86},[69,7835,2429],{"class":82},[69,7837,2494],{"class":86},[69,7839,7840],{"class":75}," \u002F\u002F4字节(32位的话)\n",[69,7842,7843],{"class":71,"line":502},[69,7844,142],{"class":86},[14,7846,7848],{"id":7847},"_33空指针","3.3空指针",[29,7850,7851],{},"空指针：指针变量指向内存中编号为0的空间",[29,7853,7854],{},"用途：初始化指针变量",[29,7856,7857],{},"注意：空指针指向的内存是不可以访问的",[59,7859,7861],{"className":1386,"code":7860,"language":1388,"meta":64,"style":64},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[66,7862,7863,7871,7875,7880,7894,7899,7914,7919],{"__ignoreMap":64},[69,7864,7865,7867,7869],{"class":71,"line":72},[69,7866,1401],{"class":82},[69,7868,3217],{"class":109},[69,7870,3220],{"class":86},[69,7872,7873],{"class":71,"line":79},[69,7874,2797],{"class":86},[69,7876,7877],{"class":71,"line":106},[69,7878,7879],{"class":75},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[69,7881,7882,7884,7886,7888,7890,7892],{"class":71,"line":116},[69,7883,3229],{"class":82},[69,7885,7760],{"class":82},[69,7887,29],{"class":86},[69,7889,1019],{"class":82},[69,7891,3636],{"class":90},[69,7893,130],{"class":86},[69,7895,7896],{"class":71,"line":133},[69,7897,7898],{"class":75},"    \u002F\u002F2.空指针不能进行访问\n",[69,7900,7901,7903,7905,7907,7909,7911],{"class":71,"line":139},[69,7902,7645],{"class":82},[69,7904,29],{"class":86},[69,7906,1019],{"class":82},[69,7908,124],{"class":90},[69,7910,1450],{"class":86},[69,7912,7913],{"class":75},"\u002F\u002F直接报错，压根不能访问\n",[69,7915,7916],{"class":71,"line":401},[69,7917,7918],{"class":75},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[69,7920,7921],{"class":71,"line":470},[69,7922,142],{"class":86},[14,7924,7926],{"id":7925},"_34野指针","3.4野指针",[29,7928,7929],{},[195,7930,7931],{},"指针变量指向非法的内存空间",[59,7933,7935],{"className":1386,"code":7934,"language":1388,"meta":64,"style":64},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[66,7936,7937,7945,7949,7978,7983,7995],{"__ignoreMap":64},[69,7938,7939,7941,7943],{"class":71,"line":72},[69,7940,1401],{"class":82},[69,7942,3217],{"class":109},[69,7944,3220],{"class":86},[69,7946,7947],{"class":71,"line":79},[69,7948,2797],{"class":86},[69,7950,7951,7953,7955,7957,7959,7961,7963,7965,7967,7970,7973,7975],{"class":71,"line":106},[69,7952,3229],{"class":82},[69,7954,7760],{"class":82},[69,7956,29],{"class":86},[69,7958,1019],{"class":82},[69,7960,1398],{"class":86},[69,7962,1401],{"class":82},[69,7964,7760],{"class":82},[69,7966,1818],{"class":86},[69,7968,7969],{"class":82},"0x",[69,7971,7972],{"class":90},"1100",[69,7974,1450],{"class":86},[69,7976,7977],{"class":75}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[69,7979,7980],{"class":71,"line":116},[69,7981,7982],{"class":75},"    \u002F\u002F访问野指针报错\n",[69,7984,7985,7987,7989,7991,7993],{"class":71,"line":133},[69,7986,2802],{"class":86},[69,7988,7661],{"class":82},[69,7990,29],{"class":86},[69,7992,2429],{"class":82},[69,7994,2451],{"class":86},[69,7996,7997],{"class":71,"line":139},[69,7998,142],{"class":86},[29,8000,8001],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8003,8005],{"id":8004},"_35const修饰指针","3.5const修饰指针",[29,8007,8008],{},"三种情况：",[162,8010,8011,8014,8017],{},[40,8012,8013],{},"const修饰指针 常量指针",[40,8015,8016],{},"const修饰常量 指针常量",[40,8018,8019],{},"const即修饰指针，又修饰常量",[37,8021,8022],{},[40,8023,8024],{},"常量指针",[59,8026,8028],{"className":1386,"code":8027,"language":1388,"meta":64,"style":64},"const int *p=&a;\n",[66,8029,8030],{"__ignoreMap":64},[69,8031,8032,8035,8037,8039,8041,8043],{"class":71,"line":72},[69,8033,8034],{"class":82},"const",[69,8036,3626],{"class":82},[69,8038,7760],{"class":82},[69,8040,29],{"class":86},[69,8042,7581],{"class":82},[69,8044,7439],{"class":86},[29,8046,8047],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[37,8049,8050],{"start":79},[40,8051,8052],{},"指针常量",[59,8054,8056],{"className":1386,"code":8055,"language":1388,"meta":64,"style":64},"int *const p=&a;\n",[66,8057,8058],{"__ignoreMap":64},[69,8059,8060,8062,8065,8068,8070],{"class":71,"line":72},[69,8061,1401],{"class":82},[69,8063,8064],{"class":82}," *const",[69,8066,8067],{"class":86}," p",[69,8069,7581],{"class":82},[69,8071,7439],{"class":86},[29,8073,8074],{},"指针的指向不可以改，指针指向的值可以改",[37,8076,8077],{"start":106},[40,8078,8019],{},[59,8080,8082],{"className":1386,"code":8081,"language":1388,"meta":64,"style":64},"const int *const p=&a;\n",[66,8083,8084],{"__ignoreMap":64},[69,8085,8086,8088,8090,8092,8094,8096],{"class":71,"line":72},[69,8087,8034],{"class":82},[69,8089,3626],{"class":82},[69,8091,8064],{"class":82},[69,8093,8067],{"class":86},[69,8095,7581],{"class":82},[69,8097,7439],{"class":86},[29,8099,8100],{},"指针的指向和指针指向的值都不可以改变",[14,8102,8104],{"id":8103},"_36指针和数组","3.6指针和数组",[59,8106,8108],{"className":1386,"code":8107,"language":1388,"meta":64,"style":64},"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",[66,8109,8110,8118,8122,8127,8181,8202,8218,8234,8245,8262,8267,8281,8307,8311,8323,8332,8336],{"__ignoreMap":64},[69,8111,8112,8114,8116],{"class":71,"line":72},[69,8113,1401],{"class":82},[69,8115,3217],{"class":109},[69,8117,3220],{"class":86},[69,8119,8120],{"class":71,"line":79},[69,8121,2797],{"class":86},[69,8123,8124],{"class":71,"line":106},[69,8125,8126],{"class":75},"    \u002F\u002F利用指针访问数组中的元素\n",[69,8128,8129,8131,8133,8135,8137,8139,8141,8143,8145,8147,8149,8151,8153,8155,8157,8159,8161,8163,8165,8167,8169,8171,8173,8175,8177,8179],{"class":71,"line":116},[69,8130,3229],{"class":82},[69,8132,5206],{"class":86},[69,8134,390],{"class":90},[69,8136,2326],{"class":86},[69,8138,1019],{"class":82},[69,8140,2283],{"class":86},[69,8142,1609],{"class":90},[69,8144,1767],{"class":86},[69,8146,1471],{"class":90},[69,8148,1767],{"class":86},[69,8150,1465],{"class":90},[69,8152,1767],{"class":86},[69,8154,1684],{"class":90},[69,8156,1767],{"class":86},[69,8158,1709],{"class":90},[69,8160,1767],{"class":86},[69,8162,1733],{"class":90},[69,8164,1767],{"class":86},[69,8166,1758],{"class":90},[69,8168,1767],{"class":86},[69,8170,1784],{"class":90},[69,8172,1767],{"class":86},[69,8174,1809],{"class":90},[69,8176,1767],{"class":86},[69,8178,390],{"class":90},[69,8180,5239],{"class":86},[69,8182,8183,8185,8187,8190,8192,8194,8196,8198,8200],{"class":71,"line":133},[69,8184,2802],{"class":86},[69,8186,2429],{"class":82},[69,8188,8189],{"class":1022},"\"数组的第一个元素为：\"",[69,8191,2429],{"class":82},[69,8193,5150],{"class":86},[69,8195,1583],{"class":90},[69,8197,2326],{"class":86},[69,8199,2429],{"class":82},[69,8201,2451],{"class":86},[69,8203,8204,8206,8208,8210,8212,8215],{"class":71,"line":139},[69,8205,3229],{"class":82},[69,8207,7760],{"class":82},[69,8209,29],{"class":86},[69,8211,1019],{"class":82},[69,8213,8214],{"class":86},"arr;",[69,8216,8217],{"class":75},"\u002F\u002F注意数才要加取地址符号&\n",[69,8219,8220,8222,8224,8226,8228,8230,8232],{"class":71,"line":401},[69,8221,2802],{"class":86},[69,8223,2429],{"class":82},[69,8225,8189],{"class":1022},[69,8227,7661],{"class":82},[69,8229,29],{"class":86},[69,8231,2429],{"class":82},[69,8233,2451],{"class":86},[69,8235,8236,8238,8240,8242],{"class":71,"line":470},[69,8237,7578],{"class":86},[69,8239,3536],{"class":82},[69,8241,1450],{"class":86},[69,8243,8244],{"class":75}," \u002F\u002F让指针向后偏移4个字节\n",[69,8246,8247,8249,8251,8254,8256,8258,8260],{"class":71,"line":475},[69,8248,2802],{"class":86},[69,8250,2429],{"class":82},[69,8252,8253],{"class":1022},"\"数组的第二个元素为：\"",[69,8255,7661],{"class":82},[69,8257,29],{"class":86},[69,8259,2429],{"class":82},[69,8261,2451],{"class":86},[69,8263,8264],{"class":71,"line":482},[69,8265,8266],{"class":75},"    \u002F\u002F利用指针遍历数组\n",[69,8268,8269,8271,8273,8276,8278],{"class":71,"line":497},[69,8270,3229],{"class":82},[69,8272,7760],{"class":82},[69,8274,8275],{"class":86},"p2",[69,8277,1019],{"class":82},[69,8279,8280],{"class":86},"arr;\n",[69,8282,8283,8285,8287,8289,8291,8293,8295,8297,8299,8301,8303,8305],{"class":71,"line":502},[69,8284,4445],{"class":82},[69,8286,87],{"class":86},[69,8288,1401],{"class":82},[69,8290,4276],{"class":86},[69,8292,1019],{"class":82},[69,8294,1583],{"class":90},[69,8296,4283],{"class":86},[69,8298,1011],{"class":82},[69,8300,390],{"class":90},[69,8302,4283],{"class":86},[69,8304,3536],{"class":82},[69,8306,1404],{"class":86},[69,8308,8309],{"class":71,"line":509},[69,8310,3274],{"class":86},[69,8312,8313,8315,8317,8319,8321],{"class":71,"line":524},[69,8314,4695],{"class":86},[69,8316,7661],{"class":82},[69,8318,8275],{"class":86},[69,8320,2429],{"class":82},[69,8322,2451],{"class":86},[69,8324,8325,8328,8330],{"class":71,"line":2888},[69,8326,8327],{"class":86},"        p2",[69,8329,3536],{"class":82},[69,8331,130],{"class":86},[69,8333,8334],{"class":71,"line":2893},[69,8335,3431],{"class":86},[69,8337,8338],{"class":71,"line":2899},[69,8339,142],{"class":86},[14,8341,8343],{"id":8342},"_37指针和函数","3.7指针和函数",[29,8345,8346],{},"利用指针做函数参数，可以修改实参的值",[29,8348,8349],{},"值传递：只改变形参，不改变实参",[29,8351,8352],{},"地址传递：",[59,8354,8356],{"className":1386,"code":8355,"language":1388,"meta":64,"style":64},"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",[66,8357,8358,8383,8387,8399,8410,8420,8424,8432,8436,8448,8460,8465,8481,8496,8511],{"__ignoreMap":64},[69,8359,8360,8362,8364,8366,8368,8370,8373,8375,8377,8379,8381],{"class":71,"line":72},[69,8361,6606],{"class":82},[69,8363,6609],{"class":109},[69,8365,1398],{"class":86},[69,8367,1401],{"class":82},[69,8369,7760],{"class":82},[69,8371,8372],{"class":6458},"p1",[69,8374,1767],{"class":86},[69,8376,1401],{"class":82},[69,8378,7760],{"class":82},[69,8380,8275],{"class":6458},[69,8382,1404],{"class":86},[69,8384,8385],{"class":71,"line":79},[69,8386,2797],{"class":86},[69,8388,8389,8391,8393,8396],{"class":71,"line":106},[69,8390,3229],{"class":82},[69,8392,5499],{"class":86},[69,8394,8395],{"class":82},"=*",[69,8397,8398],{"class":86},"p1;\n",[69,8400,8401,8403,8405,8407],{"class":71,"line":116},[69,8402,7645],{"class":82},[69,8404,8372],{"class":86},[69,8406,8395],{"class":82},[69,8408,8409],{"class":86},"p2;\n",[69,8411,8412,8414,8416,8418],{"class":71,"line":133},[69,8413,7645],{"class":82},[69,8415,8275],{"class":86},[69,8417,1019],{"class":82},[69,8419,5524],{"class":86},[69,8421,8422],{"class":71,"line":139},[69,8423,142],{"class":86},[69,8425,8426,8428,8430],{"class":71,"line":401},[69,8427,1401],{"class":82},[69,8429,3217],{"class":109},[69,8431,3220],{"class":86},[69,8433,8434],{"class":71,"line":470},[69,8435,2797],{"class":86},[69,8437,8438,8440,8442,8444,8446],{"class":71,"line":475},[69,8439,3229],{"class":82},[69,8441,2650],{"class":86},[69,8443,1019],{"class":82},[69,8445,390],{"class":90},[69,8447,130],{"class":86},[69,8449,8450,8452,8454,8456,8458],{"class":71,"line":482},[69,8451,3229],{"class":82},[69,8453,4077],{"class":86},[69,8455,1019],{"class":82},[69,8457,2087],{"class":90},[69,8459,130],{"class":86},[69,8461,8462],{"class":71,"line":497},[69,8463,8464],{"class":75},"    \u002F\u002F地址传递\n",[69,8466,8467,8469,8471,8473,8476,8478],{"class":71,"line":502},[69,8468,6803],{"class":109},[69,8470,1398],{"class":86},[69,8472,1742],{"class":82},[69,8474,8475],{"class":86},"a,",[69,8477,1742],{"class":82},[69,8479,8480],{"class":86},"b);\n",[69,8482,8483,8485,8487,8489,8491,8493],{"class":71,"line":509},[69,8484,2802],{"class":86},[69,8486,2429],{"class":82},[69,8488,187],{"class":86},[69,8490,2429],{"class":82},[69,8492,2494],{"class":86},[69,8494,8495],{"class":75},"\u002F\u002F20\n",[69,8497,8498,8500,8502,8504,8506,8508],{"class":71,"line":524},[69,8499,2802],{"class":86},[69,8501,2429],{"class":82},[69,8503,1654],{"class":86},[69,8505,2429],{"class":82},[69,8507,2494],{"class":86},[69,8509,8510],{"class":75},"\u002F\u002F10\n",[69,8512,8513],{"class":71,"line":2888},[69,8514,142],{"class":86},[29,8516,8517],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8519,8521],{"id":8520},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[29,8523,8524],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[29,8526,8527,8528,8530],{},"例如数组：int arr",[69,8529,390],{},"={4,3,6,9,1,2,10,8,7,5}",[59,8532,8534],{"className":1386,"code":8533,"language":1388,"meta":64,"style":64},"#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",[66,8535,8536,8542,8552,8576,8580,8611,8615,8649,8653,8671,8675,8686,8701,8716,8720,8724,8728,8732,8736,8744,8748,8753,8807,8819,8831,8836,8844,8848,8853,8878,8882,8897,8906,8910],{"__ignoreMap":64},[69,8537,8538,8540],{"class":71,"line":72},[69,8539,3194],{"class":82},[69,8541,3197],{"class":1022},[69,8543,8544,8546,8548,8550],{"class":71,"line":79},[69,8545,3202],{"class":82},[69,8547,3205],{"class":82},[69,8549,3208],{"class":109},[69,8551,130],{"class":86},[69,8553,8554,8556,8559,8561,8563,8565,8567,8569,8571,8574],{"class":71,"line":106},[69,8555,6606],{"class":82},[69,8557,8558],{"class":109}," bubbleSort",[69,8560,1398],{"class":86},[69,8562,1401],{"class":82},[69,8564,7760],{"class":82},[69,8566,29],{"class":6458},[69,8568,1767],{"class":86},[69,8570,1401],{"class":82},[69,8572,8573],{"class":6458}," len",[69,8575,1404],{"class":86},[69,8577,8578],{"class":71,"line":116},[69,8579,2797],{"class":86},[69,8581,8582,8584,8586,8588,8590,8592,8594,8596,8598,8601,8603,8605,8607,8609],{"class":71,"line":133},[69,8583,4445],{"class":82},[69,8585,1398],{"class":86},[69,8587,1401],{"class":82},[69,8589,4276],{"class":86},[69,8591,1019],{"class":82},[69,8593,1583],{"class":90},[69,8595,4283],{"class":86},[69,8597,1011],{"class":82},[69,8599,8600],{"class":86},"len",[69,8602,1920],{"class":82},[69,8604,1609],{"class":90},[69,8606,4283],{"class":86},[69,8608,3536],{"class":82},[69,8610,1404],{"class":86},[69,8612,8613],{"class":71,"line":139},[69,8614,3274],{"class":86},[69,8616,8617,8619,8621,8623,8625,8627,8629,8631,8633,8635,8637,8639,8641,8643,8645,8647],{"class":71,"line":401},[69,8618,4647],{"class":82},[69,8620,1398],{"class":86},[69,8622,1401],{"class":82},[69,8624,4654],{"class":86},[69,8626,1019],{"class":82},[69,8628,1583],{"class":90},[69,8630,4661],{"class":86},[69,8632,1011],{"class":82},[69,8634,8600],{"class":86},[69,8636,1920],{"class":82},[69,8638,1830],{"class":86},[69,8640,1920],{"class":82},[69,8642,1609],{"class":90},[69,8644,4661],{"class":86},[69,8646,3536],{"class":82},[69,8648,1404],{"class":86},[69,8650,8651],{"class":71,"line":470},[69,8652,3754],{"class":86},[69,8654,8655,8657,8660,8662,8665,8667,8669],{"class":71,"line":475},[69,8656,5886],{"class":82},[69,8658,8659],{"class":86},"(p[j]",[69,8661,2346],{"class":82},[69,8663,8664],{"class":86},"p[j",[69,8666,1869],{"class":82},[69,8668,1609],{"class":90},[69,8670,5901],{"class":86},[69,8672,8673],{"class":71,"line":482},[69,8674,5906],{"class":86},[69,8676,8677,8679,8681,8683],{"class":71,"line":497},[69,8678,5911],{"class":82},[69,8680,5499],{"class":86},[69,8682,1019],{"class":82},[69,8684,8685],{"class":86},"p[j];\n",[69,8687,8688,8691,8693,8695,8697,8699],{"class":71,"line":502},[69,8689,8690],{"class":86},"                p[j]",[69,8692,1019],{"class":82},[69,8694,8664],{"class":86},[69,8696,1869],{"class":82},[69,8698,1609],{"class":90},[69,8700,5934],{"class":86},[69,8702,8703,8706,8708,8710,8712,8714],{"class":71,"line":509},[69,8704,8705],{"class":86},"                p[j",[69,8707,1869],{"class":82},[69,8709,1609],{"class":90},[69,8711,2326],{"class":86},[69,8713,1019],{"class":82},[69,8715,5524],{"class":86},[69,8717,8718],{"class":71,"line":524},[69,8719,5954],{"class":86},[69,8721,8722],{"class":71,"line":2888},[69,8723,3773],{"class":86},[69,8725,8726],{"class":71,"line":2893},[69,8727,3431],{"class":86},[69,8729,8730],{"class":71,"line":2899},[69,8731,142],{"class":86},[69,8733,8734],{"class":71,"line":2919},[69,8735,3644],{"emptyLinePlaceholder":1325},[69,8737,8738,8740,8742],{"class":71,"line":2924},[69,8739,1401],{"class":82},[69,8741,3217],{"class":109},[69,8743,3220],{"class":86},[69,8745,8746],{"class":71,"line":2938},[69,8747,2797],{"class":86},[69,8749,8750],{"class":71,"line":2943},[69,8751,8752],{"class":75},"    \u002F\u002F 1.创建数组\n",[69,8754,8755,8757,8759,8761,8763,8765,8767,8769,8771,8773,8775,8777,8779,8781,8783,8785,8787,8789,8791,8793,8795,8797,8799,8801,8803,8805],{"class":71,"line":2972},[69,8756,3229],{"class":82},[69,8758,5206],{"class":86},[69,8760,390],{"class":90},[69,8762,2326],{"class":86},[69,8764,1019],{"class":82},[69,8766,2283],{"class":86},[69,8768,1684],{"class":90},[69,8770,1767],{"class":86},[69,8772,1465],{"class":90},[69,8774,1767],{"class":86},[69,8776,1733],{"class":90},[69,8778,1767],{"class":86},[69,8780,1809],{"class":90},[69,8782,1767],{"class":86},[69,8784,1609],{"class":90},[69,8786,1767],{"class":86},[69,8788,1471],{"class":90},[69,8790,1767],{"class":86},[69,8792,390],{"class":90},[69,8794,1767],{"class":86},[69,8796,1784],{"class":90},[69,8798,1767],{"class":86},[69,8800,1758],{"class":90},[69,8802,1767],{"class":86},[69,8804,1709],{"class":90},[69,8806,5239],{"class":86},[69,8808,8809,8811,8813,8815,8817],{"class":71,"line":2977},[69,8810,3229],{"class":82},[69,8812,8573],{"class":86},[69,8814,1019],{"class":82},[69,8816,390],{"class":90},[69,8818,130],{"class":86},[69,8820,8821,8823,8825,8827,8829],{"class":71,"line":2994},[69,8822,3229],{"class":82},[69,8824,7760],{"class":82},[69,8826,29],{"class":86},[69,8828,1019],{"class":82},[69,8830,8280],{"class":86},[69,8832,8833],{"class":71,"line":2999},[69,8834,8835],{"class":75},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[69,8837,8838,8841],{"class":71,"line":3004},[69,8839,8840],{"class":109},"    bubbleSort",[69,8842,8843],{"class":86},"(p,len);\n",[69,8845,8846],{"class":71,"line":3009},[69,8847,3644],{"emptyLinePlaceholder":1325},[69,8849,8850],{"class":71,"line":3023},[69,8851,8852],{"class":75},"    \u002F\u002F 3.打印排序后的数组\n",[69,8854,8855,8857,8859,8861,8863,8865,8867,8869,8871,8874,8876],{"class":71,"line":3028},[69,8856,4445],{"class":82},[69,8858,87],{"class":86},[69,8860,1401],{"class":82},[69,8862,4276],{"class":86},[69,8864,1019],{"class":82},[69,8866,1583],{"class":90},[69,8868,4458],{"class":86},[69,8870,1011],{"class":82},[69,8872,8873],{"class":86},"len; i",[69,8875,3536],{"class":82},[69,8877,1404],{"class":86},[69,8879,8880],{"class":71,"line":3821},[69,8881,3274],{"class":86},[69,8883,8884,8886,8888,8890,8892,8895],{"class":71,"line":3835},[69,8885,4695],{"class":86},[69,8887,7661],{"class":82},[69,8889,29],{"class":86},[69,8891,2429],{"class":82},[69,8893,8894],{"class":1022},"\"\"",[69,8896,130],{"class":86},[69,8898,8899,8902,8904],{"class":71,"line":3843},[69,8900,8901],{"class":86},"        p",[69,8903,3536],{"class":82},[69,8905,130],{"class":86},[69,8907,8908],{"class":71,"line":3848},[69,8909,3431],{"class":86},[69,8911,8912],{"class":71,"line":3854},[69,8913,142],{"class":86},[1297,8915,8916],{},"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":64,"searchDepth":79,"depth":79,"links":8918},[8919,8920,8921,8922,8923,8924,8925,8926],{"id":7525,"depth":79,"text":7526},{"id":7691,"depth":79,"text":7692},{"id":7847,"depth":79,"text":7848},{"id":7925,"depth":79,"text":7926},{"id":8004,"depth":79,"text":8005},{"id":8103,"depth":79,"text":8104},{"id":8342,"depth":79,"text":8343},{"id":8520,"depth":79,"text":8521},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7514,"description":7522},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8933,"title":8934,"body":8935,"description":8942,"extension":1323,"meta":11916,"navigation":1325,"path":11917,"seo":11918,"stem":11919,"__hash__":11920},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8936,"toc":11907},[8937,8940,8943,8947,8950,8953,8964,9302,9305,9309,9312,9319,9574,9578,9581,9584,9739,9743,9746,9749,9955,9959,9962,10265,10268,10276,10280,10283,10434,10436,10447,10504,10508,10513,11170,11178,11181,11275,11278,11898,11904],[10,8938,8934],{"id":8939},"_4结构体",[29,8941,8942],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8944,8946],{"id":8945},"_41结构体定义与使用","4.1结构体定义与使用",[29,8948,8949],{},"语法：struct 结构体名 {结构体成员列表}；",[29,8951,8952],{},"通过结构体创建变量的方式：",[162,8954,8955,8958,8961],{},[40,8956,8957],{},"struct 结构体名 变量名",[40,8959,8960],{},"struct 结构体名 变量名={成员1值，成员2值...}",[40,8962,8963],{},"定义结构体时顺便创建变量",[59,8965,8967],{"className":1386,"code":8966,"language":1388,"meta":64,"style":64},"#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",[66,8968,8969,8975,8985,8992,8997,9005,9009,9014,9018,9023,9028,9033,9040,9045,9052,9056,9063,9067,9071,9075,9079,9083,9087,9093,9097,9103,9111,9119,9123,9128,9133,9144,9149,9161,9172,9183,9188,9212,9217,9223,9250,9255,9261,9273,9285,9297],{"__ignoreMap":64},[69,8970,8971,8973],{"class":71,"line":72},[69,8972,3194],{"class":82},[69,8974,3197],{"class":1022},[69,8976,8977,8979,8981,8983],{"class":71,"line":79},[69,8978,3202],{"class":82},[69,8980,3205],{"class":82},[69,8982,3208],{"class":109},[69,8984,130],{"class":86},[69,8986,8987,8989],{"class":71,"line":106},[69,8988,3194],{"class":82},[69,8990,8991],{"class":1022},"\u003Cstring>\n",[69,8993,8994],{"class":71,"line":116},[69,8995,8996],{"class":75},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[69,8998,8999,9002],{"class":71,"line":133},[69,9000,9001],{"class":82},"struct",[69,9003,9004],{"class":109}," Student\n",[69,9006,9007],{"class":71,"line":139},[69,9008,2797],{"class":86},[69,9010,9011],{"class":71,"line":401},[69,9012,9013],{"class":75},"    \u002F\u002F成员列表\n",[69,9015,9016],{"class":71,"line":470},[69,9017,3644],{"emptyLinePlaceholder":1325},[69,9019,9020],{"class":71,"line":475},[69,9021,9022],{"class":75},"    \u002F\u002F姓名\n",[69,9024,9025],{"class":71,"line":482},[69,9026,9027],{"class":86},"    string name;\n",[69,9029,9030],{"class":71,"line":497},[69,9031,9032],{"class":75},"    \u002F\u002F年龄\n",[69,9034,9035,9037],{"class":71,"line":502},[69,9036,3229],{"class":82},[69,9038,9039],{"class":86}," age;\n",[69,9041,9042],{"class":71,"line":509},[69,9043,9044],{"class":75},"    \u002F\u002F分数\n",[69,9046,9047,9049],{"class":71,"line":524},[69,9048,3229],{"class":82},[69,9050,9051],{"class":86}," score;\n",[69,9053,9054],{"class":71,"line":2888},[69,9055,5239],{"class":86},[69,9057,9058,9060],{"class":71,"line":2893},[69,9059,9001],{"class":82},[69,9061,9062],{"class":109}," School\n",[69,9064,9065],{"class":71,"line":2899},[69,9066,2797],{"class":86},[69,9068,9069],{"class":71,"line":2919},[69,9070,9013],{"class":75},[69,9072,9073],{"class":71,"line":2924},[69,9074,3644],{"emptyLinePlaceholder":1325},[69,9076,9077],{"class":71,"line":2938},[69,9078,9022],{"class":75},[69,9080,9081],{"class":71,"line":2943},[69,9082,9027],{"class":86},[69,9084,9085],{"class":71,"line":2972},[69,9086,9032],{"class":75},[69,9088,9089,9091],{"class":71,"line":2977},[69,9090,3229],{"class":82},[69,9092,9039],{"class":86},[69,9094,9095],{"class":71,"line":2994},[69,9096,9044],{"class":75},[69,9098,9099,9101],{"class":71,"line":2999},[69,9100,3229],{"class":82},[69,9102,9051],{"class":86},[69,9104,9105,9108],{"class":71,"line":3004},[69,9106,9107],{"class":86},"} s3;",[69,9109,9110],{"class":75}," \u002F\u002F创建结构体时就创建了变量\n",[69,9112,9113,9115,9117],{"class":71,"line":3009},[69,9114,1401],{"class":82},[69,9116,3217],{"class":109},[69,9118,3220],{"class":86},[69,9120,9121],{"class":71,"line":3023},[69,9122,2797],{"class":86},[69,9124,9125],{"class":71,"line":3028},[69,9126,9127],{"class":75},"    \u002F\u002F2.通过学生类型创建具体学生\n",[69,9129,9130],{"class":71,"line":3821},[69,9131,9132],{"class":75},"    \u002F\u002F2.1 struct Student s1;\n",[69,9134,9135,9138,9141],{"class":71,"line":3835},[69,9136,9137],{"class":82},"    struct",[69,9139,9140],{"class":109}," Student",[69,9142,9143],{"class":86}," s1;\n",[69,9145,9146],{"class":71,"line":3843},[69,9147,9148],{"class":75},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[69,9150,9151,9154,9156,9159],{"class":71,"line":3848},[69,9152,9153],{"class":86},"    s1.name",[69,9155,1019],{"class":82},[69,9157,9158],{"class":1022},"\"张三\"",[69,9160,130],{"class":86},[69,9162,9163,9166,9168,9170],{"class":71,"line":3854},[69,9164,9165],{"class":86},"    s1.age",[69,9167,1019],{"class":82},[69,9169,2037],{"class":90},[69,9171,130],{"class":86},[69,9173,9174,9177,9179,9181],{"class":71,"line":3860},[69,9175,9176],{"class":86},"    s1.score",[69,9178,1019],{"class":82},[69,9180,1645],{"class":90},[69,9182,130],{"class":86},[69,9184,9185],{"class":71,"line":3865},[69,9186,9187],{"class":75},"    \u002F\u002F输出结果\n",[69,9189,9191,9193,9195,9198,9200,9203,9205,9208,9210],{"class":71,"line":9190},37,[69,9192,2802],{"class":86},[69,9194,2429],{"class":82},[69,9196,9197],{"class":86},"s1.name",[69,9199,2429],{"class":82},[69,9201,9202],{"class":86},"s1.age",[69,9204,2429],{"class":82},[69,9206,9207],{"class":86},"s1.score",[69,9209,2429],{"class":82},[69,9211,2451],{"class":86},[69,9213,9215],{"class":71,"line":9214},38,[69,9216,3644],{"emptyLinePlaceholder":1325},[69,9218,9220],{"class":71,"line":9219},39,[69,9221,9222],{"class":75},"    \u002F\u002F2.2 struct Student s2={...}\n",[69,9224,9226,9228,9230,9233,9235,9237,9240,9242,9244,9246,9248],{"class":71,"line":9225},40,[69,9227,9137],{"class":82},[69,9229,9140],{"class":109},[69,9231,9232],{"class":86}," s2",[69,9234,1019],{"class":82},[69,9236,2283],{"class":86},[69,9238,9239],{"class":1022},"\"王五\"",[69,9241,1767],{"class":86},[69,9243,2037],{"class":90},[69,9245,1767],{"class":86},[69,9247,1645],{"class":90},[69,9249,5239],{"class":86},[69,9251,9253],{"class":71,"line":9252},41,[69,9254,3644],{"emptyLinePlaceholder":1325},[69,9256,9258],{"class":71,"line":9257},42,[69,9259,9260],{"class":75},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[69,9262,9264,9267,9269,9271],{"class":71,"line":9263},43,[69,9265,9266],{"class":86},"    s3.name",[69,9268,1019],{"class":82},[69,9270,4922],{"class":1022},[69,9272,130],{"class":86},[69,9274,9276,9279,9281,9283],{"class":71,"line":9275},44,[69,9277,9278],{"class":86},"    s3.age",[69,9280,1019],{"class":82},[69,9282,2037],{"class":90},[69,9284,130],{"class":86},[69,9286,9288,9291,9293,9295],{"class":71,"line":9287},45,[69,9289,9290],{"class":86},"    s3.score",[69,9292,1019],{"class":82},[69,9294,2087],{"class":90},[69,9296,130],{"class":86},[69,9298,9300],{"class":71,"line":9299},46,[69,9301,142],{"class":86},[29,9303,9304],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9306,9308],{"id":9307},"_42结构体数组","4.2结构体数组",[29,9310,9311],{},"将自定义的结构体放入到数组中方便维护",[29,9313,9314,9315,9318],{},"语法：struct 结构体名 数组名",[69,9316,9317],{},"元素个数","={ {}，{},...{} };",[59,9320,9322],{"className":1386,"code":9321,"language":1388,"meta":64,"style":64},"#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",[66,9323,9324,9330,9340,9346,9351,9357,9361,9365,9371,9377,9381,9385,9393,9397,9402,9417,9421,9437,9453,9457,9462,9478,9493,9508,9513,9539,9543,9566,9570],{"__ignoreMap":64},[69,9325,9326,9328],{"class":71,"line":72},[69,9327,3194],{"class":82},[69,9329,3197],{"class":1022},[69,9331,9332,9334,9336,9338],{"class":71,"line":79},[69,9333,3202],{"class":82},[69,9335,3205],{"class":82},[69,9337,3208],{"class":109},[69,9339,130],{"class":86},[69,9341,9342,9344],{"class":71,"line":106},[69,9343,3194],{"class":82},[69,9345,8991],{"class":1022},[69,9347,9348],{"class":71,"line":116},[69,9349,9350],{"class":75},"\u002F\u002F1.定义结构体\n",[69,9352,9353,9355],{"class":71,"line":133},[69,9354,9001],{"class":82},[69,9356,9004],{"class":109},[69,9358,9359],{"class":71,"line":139},[69,9360,2797],{"class":86},[69,9362,9363],{"class":71,"line":401},[69,9364,9027],{"class":86},[69,9366,9367,9369],{"class":71,"line":470},[69,9368,3229],{"class":82},[69,9370,9039],{"class":86},[69,9372,9373,9375],{"class":71,"line":475},[69,9374,3229],{"class":82},[69,9376,9051],{"class":86},[69,9378,9379],{"class":71,"line":482},[69,9380,3644],{"emptyLinePlaceholder":1325},[69,9382,9383],{"class":71,"line":497},[69,9384,5239],{"class":86},[69,9386,9387,9389,9391],{"class":71,"line":502},[69,9388,1401],{"class":82},[69,9390,3217],{"class":109},[69,9392,3220],{"class":86},[69,9394,9395],{"class":71,"line":509},[69,9396,2797],{"class":86},[69,9398,9399],{"class":71,"line":524},[69,9400,9401],{"class":75},"    \u002F\u002F2.创建结构体数组\n",[69,9403,9404,9406,9408,9411,9413,9415],{"class":71,"line":2888},[69,9405,9137],{"class":82},[69,9407,9140],{"class":109},[69,9409,9410],{"class":86}," stuArray[",[69,9412,1471],{"class":90},[69,9414,2326],{"class":86},[69,9416,6152],{"class":82},[69,9418,9419],{"class":71,"line":2893},[69,9420,3274],{"class":86},[69,9422,9423,9425,9427,9429,9431,9433,9435],{"class":71,"line":2899},[69,9424,6161],{"class":86},[69,9426,9158],{"class":1022},[69,9428,1767],{"class":86},[69,9430,2037],{"class":90},[69,9432,1767],{"class":86},[69,9434,124],{"class":90},[69,9436,6174],{"class":86},[69,9438,9439,9441,9443,9445,9447,9449,9451],{"class":71,"line":2919},[69,9440,6161],{"class":86},[69,9442,4922],{"class":1022},[69,9444,1767],{"class":86},[69,9446,1963],{"class":90},[69,9448,1767],{"class":86},[69,9450,1963],{"class":90},[69,9452,142],{"class":86},[69,9454,9455],{"class":71,"line":2924},[69,9456,3431],{"class":86},[69,9458,9459],{"class":71,"line":2938},[69,9460,9461],{"class":75},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[69,9463,9464,9467,9469,9472,9474,9476],{"class":71,"line":2943},[69,9465,9466],{"class":86},"    stuArray[",[69,9468,1609],{"class":90},[69,9470,9471],{"class":86},"].name",[69,9473,1019],{"class":82},[69,9475,4945],{"class":1022},[69,9477,130],{"class":86},[69,9479,9480,9482,9484,9487,9489,9491],{"class":71,"line":2972},[69,9481,9466],{"class":86},[69,9483,1609],{"class":90},[69,9485,9486],{"class":86},"].age",[69,9488,1019],{"class":82},[69,9490,1471],{"class":90},[69,9492,130],{"class":86},[69,9494,9495,9497,9499,9502,9504,9506],{"class":71,"line":2977},[69,9496,9466],{"class":86},[69,9498,1609],{"class":90},[69,9500,9501],{"class":86},"].score",[69,9503,1019],{"class":82},[69,9505,1471],{"class":90},[69,9507,130],{"class":86},[69,9509,9510],{"class":71,"line":2994},[69,9511,9512],{"class":75},"    \u002F\u002F4.遍历结构体数组\n",[69,9514,9515,9517,9519,9521,9523,9525,9527,9529,9531,9533,9535,9537],{"class":71,"line":2999},[69,9516,4445],{"class":82},[69,9518,87],{"class":86},[69,9520,1401],{"class":82},[69,9522,4276],{"class":86},[69,9524,1019],{"class":82},[69,9526,1583],{"class":90},[69,9528,4283],{"class":86},[69,9530,1011],{"class":82},[69,9532,1471],{"class":90},[69,9534,4283],{"class":86},[69,9536,3536],{"class":82},[69,9538,1404],{"class":86},[69,9540,9541],{"class":71,"line":3004},[69,9542,3274],{"class":86},[69,9544,9545,9547,9549,9552,9554,9557,9559,9562,9564],{"class":71,"line":3009},[69,9546,4695],{"class":86},[69,9548,2429],{"class":82},[69,9550,9551],{"class":86},"stuArray[i].name",[69,9553,2429],{"class":82},[69,9555,9556],{"class":86},"stuArray[i].age",[69,9558,2429],{"class":82},[69,9560,9561],{"class":86},"stuArray[i].score",[69,9563,2429],{"class":82},[69,9565,2451],{"class":86},[69,9567,9568],{"class":71,"line":3023},[69,9569,3431],{"class":86},[69,9571,9572],{"class":71,"line":3028},[69,9573,142],{"class":86},[14,9575,9577],{"id":9576},"_43结构体指针","4.3结构体指针",[29,9579,9580],{},"作用：通过指针访问结构体中的成员",[29,9582,9583],{},"利用操作符->可以通过结构体指针访问结构体属性",[59,9585,9587],{"className":1386,"code":9586,"language":1388,"meta":64,"style":64},"#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",[66,9588,9589,9595,9605,9611,9615,9621,9625,9629,9635,9641,9645,9653,9657,9662,9687,9692,9707,9712,9735],{"__ignoreMap":64},[69,9590,9591,9593],{"class":71,"line":72},[69,9592,3194],{"class":82},[69,9594,3197],{"class":1022},[69,9596,9597,9599,9601,9603],{"class":71,"line":79},[69,9598,3202],{"class":82},[69,9600,3205],{"class":82},[69,9602,3208],{"class":109},[69,9604,130],{"class":86},[69,9606,9607,9609],{"class":71,"line":106},[69,9608,3194],{"class":82},[69,9610,8991],{"class":1022},[69,9612,9613],{"class":71,"line":116},[69,9614,9350],{"class":75},[69,9616,9617,9619],{"class":71,"line":133},[69,9618,9001],{"class":82},[69,9620,9004],{"class":109},[69,9622,9623],{"class":71,"line":139},[69,9624,2797],{"class":86},[69,9626,9627],{"class":71,"line":401},[69,9628,9027],{"class":86},[69,9630,9631,9633],{"class":71,"line":470},[69,9632,3229],{"class":82},[69,9634,9039],{"class":86},[69,9636,9637,9639],{"class":71,"line":475},[69,9638,3229],{"class":82},[69,9640,9051],{"class":86},[69,9642,9643],{"class":71,"line":482},[69,9644,5239],{"class":86},[69,9646,9647,9649,9651],{"class":71,"line":497},[69,9648,1401],{"class":82},[69,9650,3217],{"class":109},[69,9652,3220],{"class":86},[69,9654,9655],{"class":71,"line":502},[69,9656,2797],{"class":86},[69,9658,9659],{"class":71,"line":509},[69,9660,9661],{"class":75},"    \u002F\u002F创建学生结构体变量\n",[69,9663,9664,9666,9668,9671,9673,9675,9677,9679,9681,9683,9685],{"class":71,"line":524},[69,9665,9137],{"class":82},[69,9667,9140],{"class":109},[69,9669,9670],{"class":86}," s",[69,9672,1019],{"class":82},[69,9674,2283],{"class":86},[69,9676,9158],{"class":1022},[69,9678,1767],{"class":86},[69,9680,2037],{"class":90},[69,9682,1767],{"class":86},[69,9684,2967],{"class":90},[69,9686,5239],{"class":86},[69,9688,9689],{"class":71,"line":2888},[69,9690,9691],{"class":75},"    \u002F\u002F通过指针指向结构体变量\n",[69,9693,9694,9696,9698,9700,9702,9704],{"class":71,"line":2893},[69,9695,9137],{"class":82},[69,9697,9140],{"class":109},[69,9699,7760],{"class":82},[69,9701,29],{"class":86},[69,9703,7581],{"class":82},[69,9705,9706],{"class":86},"s\n",[69,9708,9709],{"class":71,"line":2899},[69,9710,9711],{"class":75},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[69,9713,9714,9716,9718,9721,9723,9726,9728,9731,9733],{"class":71,"line":2919},[69,9715,2802],{"class":86},[69,9717,2429],{"class":82},[69,9719,9720],{"class":86},"p->name",[69,9722,2429],{"class":82},[69,9724,9725],{"class":86},"p->age",[69,9727,2429],{"class":82},[69,9729,9730],{"class":86},"p->score",[69,9732,2429],{"class":82},[69,9734,2451],{"class":86},[69,9736,9737],{"class":71,"line":2924},[69,9738,142],{"class":86},[14,9740,9742],{"id":9741},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[29,9744,9745],{},"作用：结构体中的成员可以是另一个结构体",[29,9747,9748],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[59,9750,9752],{"className":1386,"code":9751,"language":1388,"meta":64,"style":64},"#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",[66,9753,9754,9760,9770,9776,9781,9789,9793,9797,9803,9809,9813,9818,9825,9829,9836,9840,9846,9851,9855,9863,9867,9872,9877,9882,9893,9905,9916,9929,9940,9951],{"__ignoreMap":64},[69,9755,9756,9758],{"class":71,"line":72},[69,9757,3194],{"class":82},[69,9759,3197],{"class":1022},[69,9761,9762,9764,9766,9768],{"class":71,"line":79},[69,9763,3202],{"class":82},[69,9765,3205],{"class":82},[69,9767,3208],{"class":109},[69,9769,130],{"class":86},[69,9771,9772,9774],{"class":71,"line":106},[69,9773,3194],{"class":82},[69,9775,8991],{"class":1022},[69,9777,9778],{"class":71,"line":116},[69,9779,9780],{"class":75},"\u002F\u002F定义学生结构体\n",[69,9782,9783,9785,9787],{"class":71,"line":133},[69,9784,9001],{"class":82},[69,9786,9140],{"class":109},[69,9788,3918],{"class":86},[69,9790,9791],{"class":71,"line":139},[69,9792,2797],{"class":86},[69,9794,9795],{"class":71,"line":401},[69,9796,9027],{"class":86},[69,9798,9799,9801],{"class":71,"line":470},[69,9800,3229],{"class":82},[69,9802,9039],{"class":86},[69,9804,9805,9807],{"class":71,"line":475},[69,9806,3229],{"class":82},[69,9808,9051],{"class":86},[69,9810,9811],{"class":71,"line":482},[69,9812,142],{"class":86},[69,9814,9815],{"class":71,"line":497},[69,9816,9817],{"class":75},"\u002F\u002F定义老师结构体\n",[69,9819,9820,9822],{"class":71,"line":502},[69,9821,9001],{"class":82},[69,9823,9824],{"class":109}," Teacher\n",[69,9826,9827],{"class":71,"line":509},[69,9828,2797],{"class":86},[69,9830,9831,9833],{"class":71,"line":524},[69,9832,3229],{"class":82},[69,9834,9835],{"class":86}," id;\n",[69,9837,9838],{"class":71,"line":2888},[69,9839,9027],{"class":86},[69,9841,9842,9844],{"class":71,"line":2893},[69,9843,3229],{"class":82},[69,9845,9039],{"class":86},[69,9847,9848],{"class":71,"line":2899},[69,9849,9850],{"class":86},"    Student stu;\n",[69,9852,9853],{"class":71,"line":2919},[69,9854,142],{"class":86},[69,9856,9857,9859,9861],{"class":71,"line":2924},[69,9858,1401],{"class":82},[69,9860,3217],{"class":109},[69,9862,7220],{"class":86},[69,9864,9865],{"class":71,"line":2938},[69,9866,2797],{"class":86},[69,9868,9869],{"class":71,"line":2943},[69,9870,9871],{"class":75},"    \u002F\u002F结构体嵌套结构体\n",[69,9873,9874],{"class":71,"line":2972},[69,9875,9876],{"class":75},"    \u002F\u002F创建老师\n",[69,9878,9879],{"class":71,"line":2977},[69,9880,9881],{"class":86},"    Teacher t;\n",[69,9883,9884,9887,9889,9891],{"class":71,"line":2994},[69,9885,9886],{"class":86},"    t.id",[69,9888,1019],{"class":82},[69,9890,124],{"class":90},[69,9892,130],{"class":86},[69,9894,9895,9898,9900,9903],{"class":71,"line":2999},[69,9896,9897],{"class":86},"    t.name",[69,9899,1019],{"class":82},[69,9901,9902],{"class":1022},"\"老王\"",[69,9904,130],{"class":86},[69,9906,9907,9910,9912,9914],{"class":71,"line":3004},[69,9908,9909],{"class":86},"    t.age",[69,9911,1019],{"class":82},[69,9913,2037],{"class":90},[69,9915,130],{"class":86},[69,9917,9918,9921,9923,9926],{"class":71,"line":3009},[69,9919,9920],{"class":86},"    t.stu.name",[69,9922,1019],{"class":82},[69,9924,9925],{"class":1022},"\"小王\"",[69,9927,9928],{"class":86},"；\n",[69,9930,9931,9934,9936,9938],{"class":71,"line":3023},[69,9932,9933],{"class":86},"    t.stu.age",[69,9935,1019],{"class":82},[69,9937,2087],{"class":90},[69,9939,130],{"class":86},[69,9941,9942,9945,9947,9949],{"class":71,"line":3028},[69,9943,9944],{"class":86},"    t.stu.score",[69,9946,1019],{"class":82},[69,9948,1733],{"class":90},[69,9950,130],{"class":86},[69,9952,9953],{"class":71,"line":3821},[69,9954,142],{"class":86},[14,9956,9958],{"id":9957},"_45结构体做函数参数","4.5结构体做函数参数",[29,9960,9961],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[59,9963,9965],{"className":1386,"code":9964,"language":1388,"meta":64,"style":64},"#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",[66,9966,9967,9973,9983,9989,9995,9999,10003,10009,10015,10019,10024,10029,10046,10050,10083,10087,10092,10111,10115,10146,10150,10158,10162,10171,10183,10195,10207,10220,10228,10241,10253,10261],{"__ignoreMap":64},[69,9968,9969,9971],{"class":71,"line":72},[69,9970,3194],{"class":82},[69,9972,3197],{"class":1022},[69,9974,9975,9977,9979,9981],{"class":71,"line":79},[69,9976,3202],{"class":82},[69,9978,3205],{"class":82},[69,9980,3208],{"class":109},[69,9982,130],{"class":86},[69,9984,9985,9987],{"class":71,"line":106},[69,9986,3194],{"class":82},[69,9988,8991],{"class":1022},[69,9990,9991,9993],{"class":71,"line":116},[69,9992,9001],{"class":82},[69,9994,9004],{"class":109},[69,9996,9997],{"class":71,"line":133},[69,9998,2797],{"class":86},[69,10000,10001],{"class":71,"line":139},[69,10002,9027],{"class":86},[69,10004,10005,10007],{"class":71,"line":401},[69,10006,3229],{"class":82},[69,10008,9039],{"class":86},[69,10010,10011,10013],{"class":71,"line":470},[69,10012,3229],{"class":82},[69,10014,9051],{"class":86},[69,10016,10017],{"class":71,"line":475},[69,10018,5239],{"class":86},[69,10020,10021],{"class":71,"line":482},[69,10022,10023],{"class":75},"\u002F\u002F打印学生信息的函数\n",[69,10025,10026],{"class":71,"line":497},[69,10027,10028],{"class":75},"\u002F\u002F值传递\n",[69,10030,10031,10033,10036,10038,10040,10042,10044],{"class":71,"line":502},[69,10032,6606],{"class":82},[69,10034,10035],{"class":109}," printStudent1",[69,10037,1398],{"class":86},[69,10039,9001],{"class":82},[69,10041,9140],{"class":109},[69,10043,9670],{"class":6458},[69,10045,1404],{"class":86},[69,10047,10048],{"class":71,"line":509},[69,10049,2797],{"class":86},[69,10051,10052,10054,10056,10059,10061,10064,10066,10069,10071,10073,10075,10078,10080],{"class":71,"line":524},[69,10053,7771],{"class":86},[69,10055,2429],{"class":82},[69,10057,10058],{"class":86}," s.name ",[69,10060,2429],{"class":82},[69,10062,10063],{"class":1022}," \" \"",[69,10065,2696],{"class":82},[69,10067,10068],{"class":86}," s.age ",[69,10070,2429],{"class":82},[69,10072,10063],{"class":1022},[69,10074,2696],{"class":82},[69,10076,10077],{"class":86}," s.score ",[69,10079,2429],{"class":82},[69,10081,10082],{"class":86}," endl;\n",[69,10084,10085],{"class":71,"line":2888},[69,10086,142],{"class":86},[69,10088,10089],{"class":71,"line":2893},[69,10090,10091],{"class":75},"\u002F\u002F地址传递\n",[69,10093,10094,10096,10099,10101,10103,10105,10107,10109],{"class":71,"line":2899},[69,10095,6606],{"class":82},[69,10097,10098],{"class":109}," printStudent2",[69,10100,1398],{"class":86},[69,10102,9001],{"class":82},[69,10104,9140],{"class":109},[69,10106,7760],{"class":82},[69,10108,2082],{"class":6458},[69,10110,1404],{"class":86},[69,10112,10113],{"class":71,"line":2919},[69,10114,2797],{"class":86},[69,10116,10117,10119,10121,10124,10126,10128,10130,10133,10135,10137,10139,10142,10144],{"class":71,"line":2924},[69,10118,7771],{"class":86},[69,10120,2429],{"class":82},[69,10122,10123],{"class":86}," s->name ",[69,10125,2429],{"class":82},[69,10127,10063],{"class":1022},[69,10129,2696],{"class":82},[69,10131,10132],{"class":86}," s->age ",[69,10134,2429],{"class":82},[69,10136,10063],{"class":1022},[69,10138,2696],{"class":82},[69,10140,10141],{"class":86}," s->score ",[69,10143,2429],{"class":82},[69,10145,10082],{"class":86},[69,10147,10148],{"class":71,"line":2938},[69,10149,142],{"class":86},[69,10151,10152,10154,10156],{"class":71,"line":2943},[69,10153,1401],{"class":82},[69,10155,3217],{"class":109},[69,10157,3220],{"class":86},[69,10159,10160],{"class":71,"line":2972},[69,10161,2797],{"class":86},[69,10163,10164,10166,10168],{"class":71,"line":2977},[69,10165,9137],{"class":82},[69,10167,9140],{"class":109},[69,10169,10170],{"class":86}," s;\n",[69,10172,10173,10176,10178,10181],{"class":71,"line":2994},[69,10174,10175],{"class":86},"    s.name ",[69,10177,1019],{"class":82},[69,10179,10180],{"class":1022}," \"张三\"",[69,10182,130],{"class":86},[69,10184,10185,10188,10190,10193],{"class":71,"line":2999},[69,10186,10187],{"class":86},"    s.age ",[69,10189,1019],{"class":82},[69,10191,10192],{"class":90}," 20",[69,10194,130],{"class":86},[69,10196,10197,10200,10202,10205],{"class":71,"line":3004},[69,10198,10199],{"class":86},"    s.score ",[69,10201,1019],{"class":82},[69,10203,10204],{"class":90}," 85",[69,10206,130],{"class":86},[69,10208,10209,10211,10213,10216,10218],{"class":71,"line":3009},[69,10210,2802],{"class":86},[69,10212,2429],{"class":82},[69,10214,10215],{"class":1022},"\"值传递:\"",[69,10217,2429],{"class":82},[69,10219,2451],{"class":86},[69,10221,10222,10225],{"class":71,"line":3023},[69,10223,10224],{"class":109},"    printStudent1",[69,10226,10227],{"class":86},"(s);\n",[69,10229,10230,10232,10234,10237,10239],{"class":71,"line":3028},[69,10231,2802],{"class":86},[69,10233,2429],{"class":82},[69,10235,10236],{"class":1022},"\"地址传递:\"",[69,10238,2429],{"class":82},[69,10240,2451],{"class":86},[69,10242,10243,10246,10248,10250],{"class":71,"line":3821},[69,10244,10245],{"class":109},"    printStudent2",[69,10247,1398],{"class":86},[69,10249,1742],{"class":82},[69,10251,10252],{"class":86},"s); \n",[69,10254,10255,10257,10259],{"class":71,"line":3835},[69,10256,5334],{"class":82},[69,10258,5337],{"class":90},[69,10260,130],{"class":86},[69,10262,10263],{"class":71,"line":3843},[69,10264,142],{"class":86},[29,10266,10267],{},"注意：",[162,10269,10270,10273],{},[40,10271,10272],{},"1.先定义结构体，不要在函数中写结构体的定义",[40,10274,10275],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10277,10279],{"id":10278},"_46结构体中const使用场景","4.6结构体中const使用场景",[29,10281,10282],{},"用const防止误操作",[59,10284,10286],{"className":1386,"code":10285,"language":1388,"meta":64,"style":64},"#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",[66,10287,10288,10294,10304,10310,10315,10319,10323,10329,10335,10339,10355,10359,10382,10386,10394,10398,10419,10426,10430],{"__ignoreMap":64},[69,10289,10290,10292],{"class":71,"line":72},[69,10291,3194],{"class":82},[69,10293,3197],{"class":1022},[69,10295,10296,10298,10300,10302],{"class":71,"line":79},[69,10297,3202],{"class":82},[69,10299,3205],{"class":82},[69,10301,3208],{"class":109},[69,10303,130],{"class":86},[69,10305,10306,10308],{"class":71,"line":106},[69,10307,3194],{"class":82},[69,10309,8991],{"class":1022},[69,10311,10312],{"class":71,"line":116},[69,10313,10314],{"class":86},"sctuct Student\n",[69,10316,10317],{"class":71,"line":133},[69,10318,2797],{"class":86},[69,10320,10321],{"class":71,"line":139},[69,10322,9027],{"class":86},[69,10324,10325,10327],{"class":71,"line":401},[69,10326,3229],{"class":82},[69,10328,9039],{"class":86},[69,10330,10331,10333],{"class":71,"line":470},[69,10332,3229],{"class":82},[69,10334,9051],{"class":86},[69,10336,10337],{"class":71,"line":475},[69,10338,5239],{"class":86},[69,10340,10341,10343,10346,10348,10351,10353],{"class":71,"line":482},[69,10342,6606],{"class":82},[69,10344,10345],{"class":109}," printStudents",[69,10347,1398],{"class":86},[69,10349,10350],{"class":109},"student",[69,10352,9670],{"class":6458},[69,10354,1404],{"class":86},[69,10356,10357],{"class":71,"line":497},[69,10358,2797],{"class":86},[69,10360,10361,10363,10365,10368,10370,10373,10375,10378,10380],{"class":71,"line":502},[69,10362,2802],{"class":86},[69,10364,2429],{"class":82},[69,10366,10367],{"class":86},"s.name",[69,10369,2429],{"class":82},[69,10371,10372],{"class":86},"s.age",[69,10374,2429],{"class":82},[69,10376,10377],{"class":86},"s.score",[69,10379,2429],{"class":82},[69,10381,2451],{"class":86},[69,10383,10384],{"class":71,"line":509},[69,10385,142],{"class":86},[69,10387,10388,10390,10392],{"class":71,"line":524},[69,10389,1401],{"class":82},[69,10391,3217],{"class":109},[69,10393,7220],{"class":86},[69,10395,10396],{"class":71,"line":2888},[69,10397,2797],{"class":86},[69,10399,10400,10403,10405,10407,10409,10411,10413,10415,10417],{"class":71,"line":2893},[69,10401,10402],{"class":86},"    Student s",[69,10404,1019],{"class":82},[69,10406,2283],{"class":86},[69,10408,9158],{"class":1022},[69,10410,1767],{"class":86},[69,10412,2037],{"class":90},[69,10414,1767],{"class":86},[69,10416,2037],{"class":90},[69,10418,5239],{"class":86},[69,10420,10421,10424],{"class":71,"line":2899},[69,10422,10423],{"class":109},"    printStudent",[69,10425,10227],{"class":86},[69,10427,10428],{"class":71,"line":2919},[69,10429,3644],{"emptyLinePlaceholder":1325},[69,10431,10432],{"class":71,"line":2924},[69,10433,142],{"class":86},[29,10435,10267],{},[162,10437,10438,10441,10444],{},[40,10439,10440],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[40,10442,10443],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[40,10445,10446],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[59,10448,10450],{"className":1386,"code":10449,"language":1388,"meta":64,"style":64},"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",[66,10451,10452,10471,10475,10480,10500],{"__ignoreMap":64},[69,10453,10454,10456,10458,10460,10462,10465,10467,10469],{"class":71,"line":72},[69,10455,6606],{"class":82},[69,10457,10345],{"class":109},[69,10459,1398],{"class":86},[69,10461,8034],{"class":82},[69,10463,10464],{"class":109}," student",[69,10466,7760],{"class":82},[69,10468,2082],{"class":6458},[69,10470,1404],{"class":86},[69,10472,10473],{"class":71,"line":79},[69,10474,2797],{"class":86},[69,10476,10477],{"class":71,"line":106},[69,10478,10479],{"class":75},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[69,10481,10482,10484,10486,10488,10490,10492,10494,10496,10498],{"class":71,"line":116},[69,10483,2802],{"class":86},[69,10485,2429],{"class":82},[69,10487,10367],{"class":86},[69,10489,2429],{"class":82},[69,10491,10372],{"class":86},[69,10493,2429],{"class":82},[69,10495,10377],{"class":86},[69,10497,2429],{"class":82},[69,10499,2451],{"class":86},[69,10501,10502],{"class":71,"line":133},[69,10503,142],{"class":86},[14,10505,10507],{"id":10506},"_47案例","4.7案例",[37,10509,10510],{},[40,10511,10512],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[59,10514,10516],{"className":1386,"code":10515,"language":1388,"meta":64,"style":64},"#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",[66,10517,10518,10524,10534,10540,10547,10551,10557,10561,10566,10572,10578,10582,10586,10592,10596,10601,10606,10619,10623,10628,10654,10658,10670,10697,10701,10713,10723,10727,10732,10761,10765,10777,10786,10813,10824,10834,10838,10842,10846,10851,10875,10879,10903,10907,10926,10952,10956,10981,11004,11028,11033,11038,11043,11052,11057,11063,11084,11090,11104,11110,11137,11146,11152,11160,11165],{"__ignoreMap":64},[69,10519,10520,10522],{"class":71,"line":72},[69,10521,3194],{"class":82},[69,10523,3197],{"class":1022},[69,10525,10526,10528,10530,10532],{"class":71,"line":79},[69,10527,3202],{"class":82},[69,10529,3205],{"class":82},[69,10531,3208],{"class":109},[69,10533,130],{"class":86},[69,10535,10536,10538],{"class":71,"line":106},[69,10537,3194],{"class":82},[69,10539,8991],{"class":1022},[69,10541,10542,10544],{"class":71,"line":116},[69,10543,3194],{"class":82},[69,10545,10546],{"class":1022},"\u003Cctime>\n",[69,10548,10549],{"class":71,"line":133},[69,10550,9780],{"class":75},[69,10552,10553,10555],{"class":71,"line":139},[69,10554,9001],{"class":82},[69,10556,9004],{"class":109},[69,10558,10559],{"class":71,"line":401},[69,10560,2797],{"class":86},[69,10562,10563],{"class":71,"line":470},[69,10564,10565],{"class":86},"    string sName;\n",[69,10567,10568,10570],{"class":71,"line":475},[69,10569,3229],{"class":82},[69,10571,9039],{"class":86},[69,10573,10574,10576],{"class":71,"line":482},[69,10575,3229],{"class":82},[69,10577,9051],{"class":86},[69,10579,10580],{"class":71,"line":497},[69,10581,5239],{"class":86},[69,10583,10584],{"class":71,"line":502},[69,10585,9817],{"class":75},[69,10587,10588,10590],{"class":71,"line":509},[69,10589,9001],{"class":82},[69,10591,9824],{"class":109},[69,10593,10594],{"class":71,"line":524},[69,10595,2797],{"class":86},[69,10597,10598],{"class":71,"line":2888},[69,10599,10600],{"class":86},"    string tName;\n",[69,10602,10603],{"class":71,"line":2893},[69,10604,10605],{"class":75},"    \u002F\u002F学生数组\n",[69,10607,10608,10610,10612,10615,10617],{"class":71,"line":2899},[69,10609,9137],{"class":82},[69,10611,9140],{"class":109},[69,10613,10614],{"class":86}," sArray[",[69,10616,1709],{"class":90},[69,10618,5934],{"class":86},[69,10620,10621],{"class":71,"line":2919},[69,10622,5239],{"class":86},[69,10624,10625],{"class":71,"line":2924},[69,10626,10627],{"class":75},"\u002F\u002F给老师和学生赋值的函数\n",[69,10629,10630,10632,10635,10637,10639,10642,10645,10648,10650,10652],{"class":71,"line":2938},[69,10631,6606],{"class":82},[69,10633,10634],{"class":109}," allocateSpace",[69,10636,1398],{"class":86},[69,10638,9001],{"class":82},[69,10640,10641],{"class":109}," Teacher",[69,10643,10644],{"class":6458}," tArray",[69,10646,10647],{"class":86},"[],",[69,10649,1401],{"class":82},[69,10651,8573],{"class":6458},[69,10653,1404],{"class":86},[69,10655,10656],{"class":71,"line":2943},[69,10657,2797],{"class":86},[69,10659,10660,10663,10665,10668],{"class":71,"line":2972},[69,10661,10662],{"class":86},"    string nameSeed",[69,10664,1019],{"class":82},[69,10666,10667],{"class":1022},"\"ABCDE\"",[69,10669,130],{"class":86},[69,10671,10672,10674,10676,10678,10681,10683,10685,10688,10690,10693,10695],{"class":71,"line":2977},[69,10673,4445],{"class":82},[69,10675,87],{"class":86},[69,10677,1401],{"class":82},[69,10679,10680],{"class":86}," i ",[69,10682,1019],{"class":82},[69,10684,5337],{"class":90},[69,10686,10687],{"class":86},"; i ",[69,10689,1011],{"class":82},[69,10691,10692],{"class":86}," len; i",[69,10694,3536],{"class":82},[69,10696,1404],{"class":86},[69,10698,10699],{"class":71,"line":2994},[69,10700,3274],{"class":86},[69,10702,10703,10706,10708,10711],{"class":71,"line":2999},[69,10704,10705],{"class":86},"        tArray[i].tName ",[69,10707,1019],{"class":82},[69,10709,10710],{"class":1022}," \"Teacher_\"",[69,10712,130],{"class":86},[69,10714,10715,10717,10720],{"class":71,"line":3004},[69,10716,10705],{"class":86},[69,10718,10719],{"class":82},"+=",[69,10721,10722],{"class":86},"nameSeed[i];\n",[69,10724,10725],{"class":71,"line":3009},[69,10726,3644],{"emptyLinePlaceholder":1325},[69,10728,10729],{"class":71,"line":3023},[69,10730,10731],{"class":75},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[69,10733,10734,10736,10738,10740,10743,10745,10747,10750,10752,10754,10757,10759],{"class":71,"line":3028},[69,10735,4647],{"class":82},[69,10737,87],{"class":86},[69,10739,1401],{"class":82},[69,10741,10742],{"class":86}," j ",[69,10744,1019],{"class":82},[69,10746,5337],{"class":90},[69,10748,10749],{"class":86},"; j ",[69,10751,1011],{"class":82},[69,10753,3392],{"class":90},[69,10755,10756],{"class":86},"; j",[69,10758,3536],{"class":82},[69,10760,1404],{"class":86},[69,10762,10763],{"class":71,"line":3821},[69,10764,3754],{"class":86},[69,10766,10767,10770,10772,10775],{"class":71,"line":3835},[69,10768,10769],{"class":86},"            tArray[i].sArray[j].sName ",[69,10771,1019],{"class":82},[69,10773,10774],{"class":1022}," \"Student_\"",[69,10776,130],{"class":86},[69,10778,10779,10781,10783],{"class":71,"line":3843},[69,10780,10769],{"class":86},[69,10782,10719],{"class":82},[69,10784,10785],{"class":86}," nameSeed[j];\n",[69,10787,10788,10791,10794,10796,10798,10800,10802,10804,10806,10808,10810],{"class":71,"line":3848},[69,10789,10790],{"class":82},"            int",[69,10792,10793],{"class":86}," random",[69,10795,1019],{"class":82},[69,10797,3668],{"class":109},[69,10799,3671],{"class":86},[69,10801,127],{"class":82},[69,10803,2294],{"class":90},[69,10805,1869],{"class":82},[69,10807,1790],{"class":90},[69,10809,1450],{"class":86},[69,10811,10812],{"class":75},"\u002F\u002F40~99\n",[69,10814,10815,10818,10820,10822],{"class":71,"line":3854},[69,10816,10817],{"class":86},"            tArray[i].sArray[j].age ",[69,10819,1019],{"class":82},[69,10821,10192],{"class":90},[69,10823,130],{"class":86},[69,10825,10826,10829,10831],{"class":71,"line":3860},[69,10827,10828],{"class":86},"            tArray[i].sArray[j].score ",[69,10830,1019],{"class":82},[69,10832,10833],{"class":86}," random;\n",[69,10835,10836],{"class":71,"line":3865},[69,10837,3773],{"class":86},[69,10839,10840],{"class":71,"line":9190},[69,10841,3431],{"class":86},[69,10843,10844],{"class":71,"line":9214},[69,10845,142],{"class":86},[69,10847,10848],{"class":71,"line":9219},[69,10849,10850],{"class":75},"\u002F\u002F打印所有信息的函数\n",[69,10852,10853,10855,10858,10860,10862,10864,10866,10869,10871,10873],{"class":71,"line":9225},[69,10854,6606],{"class":82},[69,10856,10857],{"class":109}," printInfo",[69,10859,1398],{"class":86},[69,10861,9001],{"class":82},[69,10863,10641],{"class":109},[69,10865,10644],{"class":6458},[69,10867,10868],{"class":86},"[], ",[69,10870,1401],{"class":82},[69,10872,8573],{"class":6458},[69,10874,1404],{"class":86},[69,10876,10877],{"class":71,"line":9252},[69,10878,2797],{"class":86},[69,10880,10881,10883,10885,10887,10889,10891,10893,10895,10897,10899,10901],{"class":71,"line":9257},[69,10882,4445],{"class":82},[69,10884,87],{"class":86},[69,10886,1401],{"class":82},[69,10888,10680],{"class":86},[69,10890,1019],{"class":82},[69,10892,5337],{"class":90},[69,10894,10687],{"class":86},[69,10896,1011],{"class":82},[69,10898,10692],{"class":86},[69,10900,3536],{"class":82},[69,10902,1404],{"class":86},[69,10904,10905],{"class":71,"line":9263},[69,10906,3274],{"class":86},[69,10908,10909,10912,10914,10917,10919,10922,10924],{"class":71,"line":9275},[69,10910,10911],{"class":86},"        cout ",[69,10913,2429],{"class":82},[69,10915,10916],{"class":1022}," \"Teacher: \"",[69,10918,2696],{"class":82},[69,10920,10921],{"class":86}," tArray[i].tName ",[69,10923,2429],{"class":82},[69,10925,10082],{"class":86},[69,10927,10928,10930,10932,10934,10936,10938,10940,10942,10944,10946,10948,10950],{"class":71,"line":9287},[69,10929,4647],{"class":82},[69,10931,87],{"class":86},[69,10933,1401],{"class":82},[69,10935,10742],{"class":86},[69,10937,1019],{"class":82},[69,10939,5337],{"class":90},[69,10941,10749],{"class":86},[69,10943,1011],{"class":82},[69,10945,3392],{"class":90},[69,10947,10756],{"class":86},[69,10949,3536],{"class":82},[69,10951,1404],{"class":86},[69,10953,10954],{"class":71,"line":9299},[69,10955,3754],{"class":86},[69,10957,10959,10962,10964,10967,10969,10972,10974,10977,10979],{"class":71,"line":10958},47,[69,10960,10961],{"class":86},"            cout ",[69,10963,2429],{"class":82},[69,10965,10966],{"class":1022}," \"",[69,10968,2486],{"class":90},[69,10970,10971],{"class":1022},"Student: \"",[69,10973,2696],{"class":82},[69,10975,10976],{"class":86}," tArray[i].sArray[j].sName",[69,10978,2429],{"class":82},[69,10980,2451],{"class":86},[69,10982,10984,10986,10988,10990,10992,10995,10997,11000,11002],{"class":71,"line":10983},48,[69,10985,10961],{"class":86},[69,10987,2429],{"class":82},[69,10989,10966],{"class":1022},[69,10991,2486],{"class":90},[69,10993,10994],{"class":1022},"Age: \"",[69,10996,2696],{"class":82},[69,10998,10999],{"class":86}," tArray[i].sArray[j].age ",[69,11001,2429],{"class":82},[69,11003,10082],{"class":86},[69,11005,11007,11009,11011,11013,11015,11018,11020,11023,11025],{"class":71,"line":11006},49,[69,11008,10961],{"class":86},[69,11010,2429],{"class":82},[69,11012,10966],{"class":1022},[69,11014,2486],{"class":90},[69,11016,11017],{"class":1022},"Score: \"",[69,11019,2696],{"class":82},[69,11021,11022],{"class":86}," tArray[i].sArray[j].score ",[69,11024,2429],{"class":82},[69,11026,11027],{"class":86}," endl;   \n",[69,11029,11031],{"class":71,"line":11030},50,[69,11032,3773],{"class":86},[69,11034,11036],{"class":71,"line":11035},51,[69,11037,3431],{"class":86},[69,11039,11041],{"class":71,"line":11040},52,[69,11042,142],{"class":86},[69,11044,11046,11048,11050],{"class":71,"line":11045},53,[69,11047,1401],{"class":82},[69,11049,3217],{"class":109},[69,11051,3220],{"class":86},[69,11053,11055],{"class":71,"line":11054},54,[69,11056,2797],{"class":86},[69,11058,11060],{"class":71,"line":11059},55,[69,11061,11062],{"class":75},"    \u002F\u002F随机数种子\n",[69,11064,11066,11068,11070,11072,11074,11076,11078,11080,11082],{"class":71,"line":11065},56,[69,11067,3617],{"class":109},[69,11069,3620],{"class":86},[69,11071,3623],{"class":82},[69,11073,3626],{"class":82},[69,11075,1818],{"class":86},[69,11077,3631],{"class":109},[69,11079,1398],{"class":86},[69,11081,3636],{"class":90},[69,11083,3639],{"class":86},[69,11085,11087],{"class":71,"line":11086},57,[69,11088,11089],{"class":75},"    \u002F\u002F1.创建3名老师的数组\n",[69,11091,11093,11095,11097,11100,11102],{"class":71,"line":11092},58,[69,11094,9137],{"class":82},[69,11096,10641],{"class":109},[69,11098,11099],{"class":86}," tArray[",[69,11101,1465],{"class":90},[69,11103,5934],{"class":86},[69,11105,11107],{"class":71,"line":11106},59,[69,11108,11109],{"class":75},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[69,11111,11113,11115,11118,11120,11123,11126,11128,11130,11133,11135],{"class":71,"line":11112},60,[69,11114,3229],{"class":82},[69,11116,11117],{"class":86}," len ",[69,11119,1019],{"class":82},[69,11121,11122],{"class":82}," sizeof",[69,11124,11125],{"class":86},"(tArray) ",[69,11127,1972],{"class":82},[69,11129,11122],{"class":82},[69,11131,11132],{"class":86},"(tArray[",[69,11134,1583],{"class":90},[69,11136,5100],{"class":86},[69,11138,11140,11143],{"class":71,"line":11139},61,[69,11141,11142],{"class":109},"    allocateSpace",[69,11144,11145],{"class":86},"(tArray, len);\n",[69,11147,11149],{"class":71,"line":11148},62,[69,11150,11151],{"class":75},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[69,11153,11155,11158],{"class":71,"line":11154},63,[69,11156,11157],{"class":109},"    printInfo",[69,11159,11145],{"class":86},[69,11161,11163],{"class":71,"line":11162},64,[69,11164,3644],{"emptyLinePlaceholder":1325},[69,11166,11168],{"class":71,"line":11167},65,[69,11169,142],{"class":86},[37,11171,11172],{"start":79},[40,11173,11174,11177],{},[195,11175,11176],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[29,11179,11180],{},"五名英雄信息如下：",[59,11182,11186],{"className":11183,"code":11184,"language":11185,"meta":64,"style":64},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[66,11187,11188,11206,11223,11240,11257],{"__ignoreMap":64},[69,11189,11190,11192,11195,11197,11199,11201,11204],{"class":71,"line":72},[69,11191,6161],{"class":86},[69,11193,11194],{"class":1022},"\"刘备\"",[69,11196,1767],{"class":86},[69,11198,2162],{"class":90},[69,11200,1767],{"class":86},[69,11202,11203],{"class":1022},"\"男\"",[69,11205,6174],{"class":86},[69,11207,11208,11210,11213,11215,11217,11219,11221],{"class":71,"line":79},[69,11209,6161],{"class":86},[69,11211,11212],{"class":1022},"\"关羽\"",[69,11214,1767],{"class":86},[69,11216,2137],{"class":90},[69,11218,1767],{"class":86},[69,11220,11203],{"class":1022},[69,11222,6174],{"class":86},[69,11224,11225,11227,11230,11232,11234,11236,11238],{"class":71,"line":106},[69,11226,6161],{"class":86},[69,11228,11229],{"class":1022},"\"张飞\"",[69,11231,1767],{"class":86},[69,11233,2087],{"class":90},[69,11235,1767],{"class":86},[69,11237,11203],{"class":1022},[69,11239,6174],{"class":86},[69,11241,11242,11244,11247,11249,11251,11253,11255],{"class":71,"line":116},[69,11243,6161],{"class":86},[69,11245,11246],{"class":1022},"\"赵云\"",[69,11248,1767],{"class":86},[69,11250,2112],{"class":90},[69,11252,1767],{"class":86},[69,11254,11203],{"class":1022},[69,11256,6174],{"class":86},[69,11258,11259,11261,11264,11266,11268,11270,11273],{"class":71,"line":133},[69,11260,6161],{"class":86},[69,11262,11263],{"class":1022},"\"貂蝉\"",[69,11265,1767],{"class":86},[69,11267,2062],{"class":90},[69,11269,1767],{"class":86},[69,11271,11272],{"class":1022},"\"女\"",[69,11274,6174],{"class":86},[29,11276,11277],{},"代码：",[59,11279,11281],{"className":1386,"code":11280,"language":1388,"meta":64,"style":64},"#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",[66,11282,11283,11289,11299,11305,11312,11316,11320,11326,11331,11335,11340,11363,11367,11392,11396,11429,11434,11463,11468,11483,11509,11529,11534,11539,11543,11547,11552,11574,11578,11602,11606,11668,11672,11676,11684,11688,11693,11704,11708,11724,11740,11756,11772,11788,11792,11812,11834,11839,11852,11859,11864,11870,11875,11888,11894],{"__ignoreMap":64},[69,11284,11285,11287],{"class":71,"line":72},[69,11286,3194],{"class":82},[69,11288,3197],{"class":1022},[69,11290,11291,11293,11295,11297],{"class":71,"line":79},[69,11292,3202],{"class":82},[69,11294,3205],{"class":82},[69,11296,3208],{"class":109},[69,11298,130],{"class":86},[69,11300,11301,11303],{"class":71,"line":106},[69,11302,3194],{"class":82},[69,11304,8991],{"class":1022},[69,11306,11307,11309],{"class":71,"line":116},[69,11308,9001],{"class":82},[69,11310,11311],{"class":109}," Sanguo\n",[69,11313,11314],{"class":71,"line":133},[69,11315,2797],{"class":86},[69,11317,11318],{"class":71,"line":139},[69,11319,9027],{"class":86},[69,11321,11322,11324],{"class":71,"line":401},[69,11323,3229],{"class":82},[69,11325,9039],{"class":86},[69,11327,11328],{"class":71,"line":470},[69,11329,11330],{"class":86},"    string gender;\n",[69,11332,11333],{"class":71,"line":475},[69,11334,5239],{"class":86},[69,11336,11337],{"class":71,"line":482},[69,11338,11339],{"class":75},"\u002F\u002F定义排序函数\n",[69,11341,11342,11344,11346,11348,11351,11353,11355,11357,11359,11361],{"class":71,"line":497},[69,11343,6606],{"class":82},[69,11345,8558],{"class":109},[69,11347,1398],{"class":86},[69,11349,11350],{"class":109},"Sanguo",[69,11352,7760],{"class":82},[69,11354,2082],{"class":6458},[69,11356,1767],{"class":86},[69,11358,1401],{"class":82},[69,11360,8573],{"class":6458},[69,11362,1404],{"class":86},[69,11364,11365],{"class":71,"line":502},[69,11366,2797],{"class":86},[69,11368,11369,11371,11373,11375,11377,11379,11381,11383,11385,11388,11390],{"class":71,"line":509},[69,11370,4445],{"class":82},[69,11372,1398],{"class":86},[69,11374,1401],{"class":82},[69,11376,4276],{"class":86},[69,11378,1019],{"class":82},[69,11380,1583],{"class":90},[69,11382,4283],{"class":86},[69,11384,1011],{"class":82},[69,11386,11387],{"class":86},"len;i",[69,11389,3536],{"class":82},[69,11391,1404],{"class":86},[69,11393,11394],{"class":71,"line":524},[69,11395,3274],{"class":86},[69,11397,11398,11401,11403,11405,11407,11409,11411,11413,11415,11417,11419,11421,11423,11425,11427],{"class":71,"line":2888},[69,11399,11400],{"class":82},"     for",[69,11402,87],{"class":86},[69,11404,1401],{"class":82},[69,11406,4654],{"class":86},[69,11408,1019],{"class":82},[69,11410,1583],{"class":90},[69,11412,4661],{"class":86},[69,11414,1011],{"class":82},[69,11416,8600],{"class":86},[69,11418,1920],{"class":82},[69,11420,1609],{"class":90},[69,11422,1920],{"class":82},[69,11424,4794],{"class":86},[69,11426,3536],{"class":82},[69,11428,1404],{"class":86},[69,11430,11431],{"class":71,"line":2893},[69,11432,11433],{"class":86},"     {\n",[69,11435,11436,11439,11442,11444,11447,11449,11452,11454,11456,11458,11460],{"class":71,"line":2899},[69,11437,11438],{"class":82},"         if",[69,11440,11441],{"class":86}," ((s",[69,11443,1869],{"class":82},[69,11445,11446],{"class":86},"j)->age ",[69,11448,2346],{"class":82},[69,11450,11451],{"class":86}," (s",[69,11453,1869],{"class":82},[69,11455,1855],{"class":86},[69,11457,1869],{"class":82},[69,11459,1609],{"class":90},[69,11461,11462],{"class":86},")->age)\n",[69,11464,11465],{"class":71,"line":2919},[69,11466,11467],{"class":86},"         {\n",[69,11469,11470,11473,11475,11478,11480],{"class":71,"line":2924},[69,11471,11472],{"class":86},"             Sanguo temp",[69,11474,8395],{"class":82},[69,11476,11477],{"class":86},"(s",[69,11479,1869],{"class":82},[69,11481,11482],{"class":86},"j);\n",[69,11484,11485,11488,11490,11492,11495,11497,11499,11501,11503,11505,11507],{"class":71,"line":2938},[69,11486,11487],{"class":82},"             *",[69,11489,11477],{"class":86},[69,11491,1869],{"class":82},[69,11493,11494],{"class":86},"j)",[69,11496,8395],{"class":82},[69,11498,11477],{"class":86},[69,11500,1869],{"class":82},[69,11502,1855],{"class":86},[69,11504,1869],{"class":82},[69,11506,1609],{"class":90},[69,11508,3963],{"class":86},[69,11510,11511,11513,11515,11517,11519,11521,11523,11525,11527],{"class":71,"line":2943},[69,11512,11487],{"class":82},[69,11514,11477],{"class":86},[69,11516,1869],{"class":82},[69,11518,1855],{"class":86},[69,11520,1869],{"class":82},[69,11522,1609],{"class":90},[69,11524,1818],{"class":86},[69,11526,1019],{"class":82},[69,11528,5524],{"class":86},[69,11530,11531],{"class":71,"line":2972},[69,11532,11533],{"class":86},"         }\n",[69,11535,11536],{"class":71,"line":2977},[69,11537,11538],{"class":86},"     }\n",[69,11540,11541],{"class":71,"line":2994},[69,11542,3431],{"class":86},[69,11544,11545],{"class":71,"line":2999},[69,11546,142],{"class":86},[69,11548,11549],{"class":71,"line":3004},[69,11550,11551],{"class":75},"\u002F\u002F定义打印函数\n",[69,11553,11554,11556,11558,11560,11562,11564,11566,11568,11570,11572],{"class":71,"line":3009},[69,11555,6606],{"class":82},[69,11557,10857],{"class":109},[69,11559,1398],{"class":86},[69,11561,11350],{"class":109},[69,11563,7760],{"class":82},[69,11565,2082],{"class":6458},[69,11567,1767],{"class":86},[69,11569,1401],{"class":82},[69,11571,8573],{"class":6458},[69,11573,1404],{"class":86},[69,11575,11576],{"class":71,"line":3023},[69,11577,2797],{"class":86},[69,11579,11580,11582,11584,11586,11588,11590,11592,11594,11596,11598,11600],{"class":71,"line":3028},[69,11581,4445],{"class":82},[69,11583,87],{"class":86},[69,11585,1401],{"class":82},[69,11587,4276],{"class":86},[69,11589,1019],{"class":82},[69,11591,1583],{"class":90},[69,11593,4283],{"class":86},[69,11595,1011],{"class":82},[69,11597,11387],{"class":86},[69,11599,3536],{"class":82},[69,11601,1404],{"class":86},[69,11603,11604],{"class":71,"line":3821},[69,11605,3274],{"class":86},[69,11607,11608,11610,11612,11614,11616,11619,11621,11623,11625,11628,11630,11632,11634,11637,11639,11641,11643,11646,11648,11650,11652,11655,11657,11659,11661,11664,11666],{"class":71,"line":3835},[69,11609,4695],{"class":86},[69,11611,2429],{"class":82},[69,11613,1642],{"class":1022},[69,11615,2486],{"class":90},[69,11617,11618],{"class":1022},"姓名：\"",[69,11620,2429],{"class":82},[69,11622,11477],{"class":86},[69,11624,1869],{"class":82},[69,11626,11627],{"class":86},"i)->name",[69,11629,2429],{"class":82},[69,11631,1642],{"class":1022},[69,11633,2486],{"class":90},[69,11635,11636],{"class":1022},"年龄：\"",[69,11638,2429],{"class":82},[69,11640,11477],{"class":86},[69,11642,1869],{"class":82},[69,11644,11645],{"class":86},"i)->age",[69,11647,2429],{"class":82},[69,11649,1642],{"class":1022},[69,11651,2486],{"class":90},[69,11653,11654],{"class":1022},"性别：\"",[69,11656,2429],{"class":82},[69,11658,11477],{"class":86},[69,11660,1869],{"class":82},[69,11662,11663],{"class":86},"i)->gender",[69,11665,2429],{"class":82},[69,11667,2451],{"class":86},[69,11669,11670],{"class":71,"line":3843},[69,11671,3431],{"class":86},[69,11673,11674],{"class":71,"line":3848},[69,11675,142],{"class":86},[69,11677,11678,11680,11682],{"class":71,"line":3854},[69,11679,1401],{"class":82},[69,11681,3217],{"class":109},[69,11683,3220],{"class":86},[69,11685,11686],{"class":71,"line":3860},[69,11687,2797],{"class":86},[69,11689,11690],{"class":71,"line":3865},[69,11691,11692],{"class":75},"    \u002F\u002F定义结构体变量\n",[69,11694,11695,11698,11700,11702],{"class":71,"line":9190},[69,11696,11697],{"class":86},"    Sanguo s1[",[69,11699,1709],{"class":90},[69,11701,2326],{"class":86},[69,11703,6152],{"class":82},[69,11705,11706],{"class":71,"line":9214},[69,11707,3274],{"class":86},[69,11709,11710,11712,11714,11716,11718,11720,11722],{"class":71,"line":9219},[69,11711,6161],{"class":86},[69,11713,11194],{"class":1022},[69,11715,1767],{"class":86},[69,11717,2162],{"class":90},[69,11719,1767],{"class":86},[69,11721,11203],{"class":1022},[69,11723,6174],{"class":86},[69,11725,11726,11728,11730,11732,11734,11736,11738],{"class":71,"line":9225},[69,11727,6161],{"class":86},[69,11729,11212],{"class":1022},[69,11731,1767],{"class":86},[69,11733,2137],{"class":90},[69,11735,1767],{"class":86},[69,11737,11203],{"class":1022},[69,11739,6174],{"class":86},[69,11741,11742,11744,11746,11748,11750,11752,11754],{"class":71,"line":9252},[69,11743,6161],{"class":86},[69,11745,11229],{"class":1022},[69,11747,1767],{"class":86},[69,11749,2087],{"class":90},[69,11751,1767],{"class":86},[69,11753,11203],{"class":1022},[69,11755,6174],{"class":86},[69,11757,11758,11760,11762,11764,11766,11768,11770],{"class":71,"line":9257},[69,11759,6161],{"class":86},[69,11761,11246],{"class":1022},[69,11763,1767],{"class":86},[69,11765,2112],{"class":90},[69,11767,1767],{"class":86},[69,11769,11203],{"class":1022},[69,11771,6174],{"class":86},[69,11773,11774,11776,11778,11780,11782,11784,11786],{"class":71,"line":9263},[69,11775,6161],{"class":86},[69,11777,11263],{"class":1022},[69,11779,1767],{"class":86},[69,11781,2062],{"class":90},[69,11783,1767],{"class":86},[69,11785,11272],{"class":1022},[69,11787,6174],{"class":86},[69,11789,11790],{"class":71,"line":9275},[69,11791,6195],{"class":86},[69,11793,11794,11796,11798,11800,11803,11805,11808,11810],{"class":71,"line":9287},[69,11795,3229],{"class":82},[69,11797,8573],{"class":86},[69,11799,5447],{"class":82},[69,11801,11802],{"class":86},"(s1)",[69,11804,5453],{"class":82},[69,11806,11807],{"class":86},"(s1[",[69,11809,1583],{"class":90},[69,11811,5100],{"class":86},[69,11813,11814,11817,11819,11822,11824,11827,11830,11832],{"class":71,"line":9299},[69,11815,11816],{"class":86},"    Sanguo ",[69,11818,1843],{"class":82},[69,11820,11821],{"class":86},"s ",[69,11823,1019],{"class":82},[69,11825,11826],{"class":82}," &",[69,11828,11829],{"class":86},"s1[",[69,11831,1583],{"class":90},[69,11833,5934],{"class":86},[69,11835,11836],{"class":71,"line":10958},[69,11837,11838],{"class":75},"    \u002F\u002F排序前：\n",[69,11840,11841,11843,11845,11848,11850],{"class":71,"line":10983},[69,11842,7771],{"class":86},[69,11844,2429],{"class":82},[69,11846,11847],{"class":1022}," \"排序前：\"",[69,11849,2696],{"class":82},[69,11851,10082],{"class":86},[69,11853,11854,11856],{"class":71,"line":11006},[69,11855,11157],{"class":109},[69,11857,11858],{"class":86},"(s,len);\n",[69,11860,11861],{"class":71,"line":11030},[69,11862,11863],{"class":75},"    \u002F\u002F调用排序函数\n",[69,11865,11866,11868],{"class":71,"line":11035},[69,11867,8840],{"class":109},[69,11869,11858],{"class":86},[69,11871,11872],{"class":71,"line":11040},[69,11873,11874],{"class":75},"    \u002F\u002F排序后\n",[69,11876,11877,11879,11881,11884,11886],{"class":71,"line":11045},[69,11878,7771],{"class":86},[69,11880,2429],{"class":82},[69,11882,11883],{"class":1022}," \"排序后：\"",[69,11885,2696],{"class":82},[69,11887,10082],{"class":86},[69,11889,11890,11892],{"class":71,"line":11054},[69,11891,11157],{"class":109},[69,11893,11858],{"class":86},[69,11895,11896],{"class":71,"line":11059},[69,11897,142],{"class":86},[29,11899,11900,11901,11903],{},"注意：使用指针时直接用传首地址**&s",[69,11902,1583],{},"**",[1297,11905,11906],{},"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":64,"searchDepth":79,"depth":79,"links":11908},[11909,11910,11911,11912,11913,11914,11915],{"id":8945,"depth":79,"text":8946},{"id":9307,"depth":79,"text":9308},{"id":9576,"depth":79,"text":9577},{"id":9741,"depth":79,"text":9742},{"id":9957,"depth":79,"text":9958},{"id":10278,"depth":79,"text":10279},{"id":10506,"depth":79,"text":10507},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8934,"description":8942},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11922,"title":11923,"body":11924,"description":64,"extension":1323,"meta":13267,"navigation":1325,"path":13268,"seo":13269,"stem":13270,"__hash__":13271},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11925,"toc":13261},[11926,11929,11933,11939,11953,11958,11961,11965,11972,11978,11981,11988,11994,11999,12002,12005,12008,12572,12575,12589,12593,12598,12614,12754,12757,12763,12766,12771,12779,12887,12890,12895,12898,12903,12906,12912,12915,13258],[10,11927,11923],{"id":11928},"_5程序内存模型",[14,11930,11932],{"id":11931},"_51内存分区模型","5.1内存分区模型",[29,11934,11935,11936],{},"C++程序在执行时，将内存大方向划分为",[195,11937,11938],{},"4个区域",[162,11940,11941,11944,11947,11950],{},[40,11942,11943],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[40,11945,11946],{},"全局区：存放全局变量和静态变量以及常量",[40,11948,11949],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[40,11951,11952],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[29,11954,11955],{},[195,11956,11957],{},"内存四区意义：",[29,11959,11960],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[19,11962,11964],{"id":11963},"_511程序运行前","5.1.1程序运行前",[29,11966,11967,11968,11971],{},"​\t在程序编译后，生成了exe可执行程序，",[195,11969,11970],{},"未执行该程序前","分为两个区域",[29,11973,11974,11975],{},"​\t",[195,11976,11977],{},"代码区：",[29,11979,11980],{},"​\t\t存放 CPU 执行的机器指令",[29,11982,11983,11984,11987],{},"​\t\t代码区是",[195,11985,11986],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[29,11989,11983,11990,11993],{},[195,11991,11992],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[29,11995,11974,11996],{},[195,11997,11998],{},"全局区：",[29,12000,12001],{},"​\t\t全局变量和静态变量存放在此.",[29,12003,12004],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[29,12006,12007],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[59,12009,12011],{"className":1386,"code":12010,"language":1388,"meta":64,"style":64},"\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",[66,12012,12013,12018,12031,12044,12048,12053,12068,12083,12087,12096,12100,12105,12118,12131,12135,12140,12166,12192,12196,12223,12249,12253,12258,12274,12289,12293,12319,12345,12349,12374,12399,12403,12429,12455,12459,12475,12490,12516,12542,12546,12556,12560,12568],{"__ignoreMap":64},[69,12014,12015],{"class":71,"line":72},[69,12016,12017],{"class":75},"\u002F\u002F全局变量\n",[69,12019,12020,12022,12025,12027,12029],{"class":71,"line":79},[69,12021,1401],{"class":82},[69,12023,12024],{"class":86}," g_a ",[69,12026,1019],{"class":82},[69,12028,3282],{"class":90},[69,12030,130],{"class":86},[69,12032,12033,12035,12038,12040,12042],{"class":71,"line":106},[69,12034,1401],{"class":82},[69,12036,12037],{"class":86}," g_b ",[69,12039,1019],{"class":82},[69,12041,3282],{"class":90},[69,12043,130],{"class":86},[69,12045,12046],{"class":71,"line":116},[69,12047,3644],{"emptyLinePlaceholder":1325},[69,12049,12050],{"class":71,"line":133},[69,12051,12052],{"class":75},"\u002F\u002F全局常量\n",[69,12054,12055,12057,12059,12062,12064,12066],{"class":71,"line":139},[69,12056,8034],{"class":82},[69,12058,3626],{"class":82},[69,12060,12061],{"class":86}," c_g_a ",[69,12063,1019],{"class":82},[69,12065,3282],{"class":90},[69,12067,130],{"class":86},[69,12069,12070,12072,12074,12077,12079,12081],{"class":71,"line":401},[69,12071,8034],{"class":82},[69,12073,3626],{"class":82},[69,12075,12076],{"class":86}," c_g_b ",[69,12078,1019],{"class":82},[69,12080,3282],{"class":90},[69,12082,130],{"class":86},[69,12084,12085],{"class":71,"line":470},[69,12086,3644],{"emptyLinePlaceholder":1325},[69,12088,12089,12091,12093],{"class":71,"line":475},[69,12090,1401],{"class":82},[69,12092,3217],{"class":109},[69,12094,12095],{"class":86},"() {\n",[69,12097,12098],{"class":71,"line":482},[69,12099,3644],{"emptyLinePlaceholder":1325},[69,12101,12102],{"class":71,"line":497},[69,12103,12104],{"class":75},"    \u002F\u002F局部变量\n",[69,12106,12107,12109,12112,12114,12116],{"class":71,"line":502},[69,12108,3229],{"class":82},[69,12110,12111],{"class":86}," a ",[69,12113,1019],{"class":82},[69,12115,3282],{"class":90},[69,12117,130],{"class":86},[69,12119,12120,12122,12125,12127,12129],{"class":71,"line":509},[69,12121,3229],{"class":82},[69,12123,12124],{"class":86}," b ",[69,12126,1019],{"class":82},[69,12128,3282],{"class":90},[69,12130,130],{"class":86},[69,12132,12133],{"class":71,"line":524},[69,12134,3644],{"emptyLinePlaceholder":1325},[69,12136,12137],{"class":71,"line":2888},[69,12138,12139],{"class":75},"    \u002F\u002F打印地址\n",[69,12141,12142,12144,12146,12149,12151,12153,12155,12157,12159,12162,12164],{"class":71,"line":2893},[69,12143,7771],{"class":86},[69,12145,2429],{"class":82},[69,12147,12148],{"class":1022}," \"局部变量a地址为： \"",[69,12150,2696],{"class":82},[69,12152,87],{"class":86},[69,12154,1401],{"class":82},[69,12156,1818],{"class":86},[69,12158,1742],{"class":82},[69,12160,12161],{"class":86},"a ",[69,12163,2429],{"class":82},[69,12165,10082],{"class":86},[69,12167,12168,12170,12172,12175,12177,12179,12181,12183,12185,12188,12190],{"class":71,"line":2899},[69,12169,7771],{"class":86},[69,12171,2429],{"class":82},[69,12173,12174],{"class":1022}," \"局部变量b地址为： \"",[69,12176,2696],{"class":82},[69,12178,87],{"class":86},[69,12180,1401],{"class":82},[69,12182,1818],{"class":86},[69,12184,1742],{"class":82},[69,12186,12187],{"class":86},"b ",[69,12189,2429],{"class":82},[69,12191,10082],{"class":86},[69,12193,12194],{"class":71,"line":2919},[69,12195,3644],{"emptyLinePlaceholder":1325},[69,12197,12198,12200,12202,12205,12207,12210,12212,12214,12216,12219,12221],{"class":71,"line":2924},[69,12199,7771],{"class":86},[69,12201,2429],{"class":82},[69,12203,12204],{"class":1022}," \"全局变量g_a地址为： \"",[69,12206,2696],{"class":82},[69,12208,12209],{"class":86},"  (",[69,12211,1401],{"class":82},[69,12213,1818],{"class":86},[69,12215,1742],{"class":82},[69,12217,12218],{"class":86},"g_a ",[69,12220,2429],{"class":82},[69,12222,10082],{"class":86},[69,12224,12225,12227,12229,12232,12234,12236,12238,12240,12242,12245,12247],{"class":71,"line":2938},[69,12226,7771],{"class":86},[69,12228,2429],{"class":82},[69,12230,12231],{"class":1022}," \"全局变量g_b地址为： \"",[69,12233,2696],{"class":82},[69,12235,12209],{"class":86},[69,12237,1401],{"class":82},[69,12239,1818],{"class":86},[69,12241,1742],{"class":82},[69,12243,12244],{"class":86},"g_b ",[69,12246,2429],{"class":82},[69,12248,10082],{"class":86},[69,12250,12251],{"class":71,"line":2943},[69,12252,3644],{"emptyLinePlaceholder":1325},[69,12254,12255],{"class":71,"line":2972},[69,12256,12257],{"class":75},"    \u002F\u002F静态变量\n",[69,12259,12260,12263,12265,12268,12270,12272],{"class":71,"line":2977},[69,12261,12262],{"class":82},"    static",[69,12264,3626],{"class":82},[69,12266,12267],{"class":86}," s_a ",[69,12269,1019],{"class":82},[69,12271,3282],{"class":90},[69,12273,130],{"class":86},[69,12275,12276,12278,12280,12283,12285,12287],{"class":71,"line":2994},[69,12277,12262],{"class":82},[69,12279,3626],{"class":82},[69,12281,12282],{"class":86}," s_b ",[69,12284,1019],{"class":82},[69,12286,3282],{"class":90},[69,12288,130],{"class":86},[69,12290,12291],{"class":71,"line":2999},[69,12292,3644],{"emptyLinePlaceholder":1325},[69,12294,12295,12297,12299,12302,12304,12306,12308,12310,12312,12315,12317],{"class":71,"line":3004},[69,12296,7771],{"class":86},[69,12298,2429],{"class":82},[69,12300,12301],{"class":1022}," \"静态变量s_a地址为： \"",[69,12303,2696],{"class":82},[69,12305,87],{"class":86},[69,12307,1401],{"class":82},[69,12309,1818],{"class":86},[69,12311,1742],{"class":82},[69,12313,12314],{"class":86},"s_a ",[69,12316,2429],{"class":82},[69,12318,10082],{"class":86},[69,12320,12321,12323,12325,12328,12330,12332,12334,12336,12338,12341,12343],{"class":71,"line":3009},[69,12322,7771],{"class":86},[69,12324,2429],{"class":82},[69,12326,12327],{"class":1022}," \"静态变量s_b地址为： \"",[69,12329,2696],{"class":82},[69,12331,87],{"class":86},[69,12333,1401],{"class":82},[69,12335,1818],{"class":86},[69,12337,1742],{"class":82},[69,12339,12340],{"class":86},"s_b ",[69,12342,2429],{"class":82},[69,12344,10082],{"class":86},[69,12346,12347],{"class":71,"line":3023},[69,12348,3644],{"emptyLinePlaceholder":1325},[69,12350,12351,12353,12355,12358,12360,12362,12364,12366,12368,12370,12372],{"class":71,"line":3028},[69,12352,7771],{"class":86},[69,12354,2429],{"class":82},[69,12356,12357],{"class":1022}," \"字符串常量地址为： \"",[69,12359,2696],{"class":82},[69,12361,87],{"class":86},[69,12363,1401],{"class":82},[69,12365,1818],{"class":86},[69,12367,1742],{"class":82},[69,12369,2446],{"class":1022},[69,12371,2696],{"class":82},[69,12373,10082],{"class":86},[69,12375,12376,12378,12380,12382,12384,12386,12388,12390,12392,12395,12397],{"class":71,"line":3821},[69,12377,7771],{"class":86},[69,12379,2429],{"class":82},[69,12381,12357],{"class":1022},[69,12383,2696],{"class":82},[69,12385,87],{"class":86},[69,12387,1401],{"class":82},[69,12389,1818],{"class":86},[69,12391,1742],{"class":82},[69,12393,12394],{"class":1022},"\"hello world1\"",[69,12396,2696],{"class":82},[69,12398,10082],{"class":86},[69,12400,12401],{"class":71,"line":3835},[69,12402,3644],{"emptyLinePlaceholder":1325},[69,12404,12405,12407,12409,12412,12414,12416,12418,12420,12422,12425,12427],{"class":71,"line":3843},[69,12406,7771],{"class":86},[69,12408,2429],{"class":82},[69,12410,12411],{"class":1022}," \"全局常量c_g_a地址为： \"",[69,12413,2696],{"class":82},[69,12415,87],{"class":86},[69,12417,1401],{"class":82},[69,12419,1818],{"class":86},[69,12421,1742],{"class":82},[69,12423,12424],{"class":86},"c_g_a ",[69,12426,2429],{"class":82},[69,12428,10082],{"class":86},[69,12430,12431,12433,12435,12438,12440,12442,12444,12446,12448,12451,12453],{"class":71,"line":3848},[69,12432,7771],{"class":86},[69,12434,2429],{"class":82},[69,12436,12437],{"class":1022}," \"全局常量c_g_b地址为： \"",[69,12439,2696],{"class":82},[69,12441,87],{"class":86},[69,12443,1401],{"class":82},[69,12445,1818],{"class":86},[69,12447,1742],{"class":82},[69,12449,12450],{"class":86},"c_g_b ",[69,12452,2429],{"class":82},[69,12454,10082],{"class":86},[69,12456,12457],{"class":71,"line":3854},[69,12458,3644],{"emptyLinePlaceholder":1325},[69,12460,12461,12464,12466,12469,12471,12473],{"class":71,"line":3860},[69,12462,12463],{"class":82},"    const",[69,12465,3626],{"class":82},[69,12467,12468],{"class":86}," c_l_a ",[69,12470,1019],{"class":82},[69,12472,3282],{"class":90},[69,12474,130],{"class":86},[69,12476,12477,12479,12481,12484,12486,12488],{"class":71,"line":3865},[69,12478,12463],{"class":82},[69,12480,3626],{"class":82},[69,12482,12483],{"class":86}," c_l_b ",[69,12485,1019],{"class":82},[69,12487,3282],{"class":90},[69,12489,130],{"class":86},[69,12491,12492,12494,12496,12499,12501,12503,12505,12507,12509,12512,12514],{"class":71,"line":9190},[69,12493,7771],{"class":86},[69,12495,2429],{"class":82},[69,12497,12498],{"class":1022}," \"局部常量c_l_a地址为： \"",[69,12500,2696],{"class":82},[69,12502,87],{"class":86},[69,12504,1401],{"class":82},[69,12506,1818],{"class":86},[69,12508,1742],{"class":82},[69,12510,12511],{"class":86},"c_l_a ",[69,12513,2429],{"class":82},[69,12515,10082],{"class":86},[69,12517,12518,12520,12522,12525,12527,12529,12531,12533,12535,12538,12540],{"class":71,"line":9214},[69,12519,7771],{"class":86},[69,12521,2429],{"class":82},[69,12523,12524],{"class":1022}," \"局部常量c_l_b地址为： \"",[69,12526,2696],{"class":82},[69,12528,87],{"class":86},[69,12530,1401],{"class":82},[69,12532,1818],{"class":86},[69,12534,1742],{"class":82},[69,12536,12537],{"class":86},"c_l_b ",[69,12539,2429],{"class":82},[69,12541,10082],{"class":86},[69,12543,12544],{"class":71,"line":9219},[69,12545,3644],{"emptyLinePlaceholder":1325},[69,12547,12548,12550,12552,12554],{"class":71,"line":9225},[69,12549,3547],{"class":109},[69,12551,1398],{"class":86},[69,12553,3552],{"class":1022},[69,12555,3963],{"class":86},[69,12557,12558],{"class":71,"line":9252},[69,12559,3644],{"emptyLinePlaceholder":1325},[69,12561,12562,12564,12566],{"class":71,"line":9257},[69,12563,5334],{"class":82},[69,12565,5337],{"class":90},[69,12567,130],{"class":86},[69,12569,12570],{"class":71,"line":9263},[69,12571,142],{"class":86},[29,12573,12574],{},"总结：",[162,12576,12577,12580,12583,12586],{},[40,12578,12579],{},"c++中程序运行前分为全局区和代码区",[40,12581,12582],{},"代码区特点是共享和只读",[40,12584,12585],{},"全局区中存放全局变量、静态变量、常量",[40,12587,12588],{},"常量区中存放const修饰的全局常量和字符串常量",[19,12590,12592],{"id":12591},"_512程序运行后","5.1.2程序运行后",[37,12594,12595],{},[40,12596,12597],{},"栈区：",[162,12599,12600,12607],{},[40,12601,12602,12603,12606],{},"由编译器自动分配释放, 存放",[195,12604,12605],{},"函数的参数值,局部变量","等",[40,12608,12609,12610,12613],{},"注意事项：",[195,12611,12612],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[59,12615,12617],{"className":1386,"code":12616,"language":1388,"meta":64,"style":64},"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",[66,12618,12619,12630,12634,12649,12661,12665,12669,12677,12682,12697,12715,12732,12742,12750],{"__ignoreMap":64},[69,12620,12621,12623,12625,12628],{"class":71,"line":72},[69,12622,1401],{"class":82},[69,12624,7760],{"class":82},[69,12626,12627],{"class":109}," func",[69,12629,3220],{"class":86},[69,12631,12632],{"class":71,"line":79},[69,12633,2797],{"class":86},[69,12635,12636,12638,12640,12642,12644,12646],{"class":71,"line":106},[69,12637,3229],{"class":82},[69,12639,12111],{"class":86},[69,12641,1019],{"class":82},[69,12643,3282],{"class":90},[69,12645,1450],{"class":86},[69,12647,12648],{"class":75}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[69,12650,12651,12653,12655,12658],{"class":71,"line":116},[69,12652,5334],{"class":82},[69,12654,11826],{"class":82},[69,12656,12657],{"class":86},"a;",[69,12659,12660],{"class":75}," \u002F\u002F放回局部变量的地址\n",[69,12662,12663],{"class":71,"line":133},[69,12664,142],{"class":86},[69,12666,12667],{"class":71,"line":139},[69,12668,3644],{"emptyLinePlaceholder":1325},[69,12670,12671,12673,12675],{"class":71,"line":401},[69,12672,1401],{"class":82},[69,12674,3217],{"class":109},[69,12676,12095],{"class":86},[69,12678,12679],{"class":71,"line":470},[69,12680,12681],{"class":75},"    \u002F\u002F接受func的返回值\n",[69,12683,12684,12686,12688,12691,12693,12695],{"class":71,"line":475},[69,12685,3229],{"class":82},[69,12687,7760],{"class":82},[69,12689,12690],{"class":86},"p ",[69,12692,1019],{"class":82},[69,12694,12627],{"class":109},[69,12696,6878],{"class":86},[69,12698,12699,12701,12703,12705,12707,12709,12712],{"class":71,"line":482},[69,12700,7771],{"class":86},[69,12702,2429],{"class":82},[69,12704,7760],{"class":82},[69,12706,12690],{"class":86},[69,12708,2429],{"class":82},[69,12710,12711],{"class":86}," endl;",[69,12713,12714],{"class":75}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[69,12716,12717,12719,12721,12723,12725,12727,12729],{"class":71,"line":497},[69,12718,7771],{"class":86},[69,12720,2429],{"class":82},[69,12722,7760],{"class":82},[69,12724,12690],{"class":86},[69,12726,2429],{"class":82},[69,12728,12711],{"class":86},[69,12730,12731],{"class":75}," \u002F\u002F第二次这个数据不再保留\n",[69,12733,12734,12736,12738,12740],{"class":71,"line":502},[69,12735,3547],{"class":109},[69,12737,1398],{"class":86},[69,12739,3552],{"class":1022},[69,12741,3963],{"class":86},[69,12743,12744,12746,12748],{"class":71,"line":509},[69,12745,5334],{"class":82},[69,12747,5337],{"class":90},[69,12749,130],{"class":86},[69,12751,12752],{"class":71,"line":524},[69,12753,142],{"class":86},[29,12755,12756],{},"输出结果：",[29,12758,12759],{},[24,12760],{"alt":12761,"src":12762},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[29,12764,12765],{},"总结：不要返回局部变量的地址",[37,12767,12768],{"start":79},[40,12769,12770],{},"堆区",[162,12772,12773,12776],{},[40,12774,12775],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[40,12777,12778],{},"在c++中主要利用new在堆区开辟内存",[59,12780,12782],{"className":1386,"code":12781,"language":1388,"meta":64,"style":64},"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",[66,12783,12784,12799,12803,12808,12829,12836,12840,12848,12852,12857,12871,12883],{"__ignoreMap":64},[69,12785,12786,12788,12791,12794,12796],{"class":71,"line":72},[69,12787,1401],{"class":82},[69,12789,12790],{"class":82},"  *",[69,12792,12793],{"class":109},"func",[69,12795,3671],{"class":86},[69,12797,12798],{"class":75},"  \u002F\u002F函数返回指针\n",[69,12800,12801],{"class":71,"line":79},[69,12802,2797],{"class":86},[69,12804,12805],{"class":71,"line":106},[69,12806,12807],{"class":75},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[69,12809,12810,12812,12814,12816,12818,12821,12823,12825,12827],{"class":71,"line":116},[69,12811,5391],{"class":82},[69,12813,7760],{"class":82},[69,12815,29],{"class":86},[69,12817,1019],{"class":82},[69,12819,12820],{"class":82}," new",[69,12822,3626],{"class":82},[69,12824,1398],{"class":86},[69,12826,390],{"class":90},[69,12828,3963],{"class":86},[69,12830,12831,12833],{"class":71,"line":133},[69,12832,5625],{"class":82},[69,12834,12835],{"class":86}," p;\n",[69,12837,12838],{"class":71,"line":139},[69,12839,142],{"class":86},[69,12841,12842,12844,12846],{"class":71,"line":401},[69,12843,1401],{"class":82},[69,12845,3217],{"class":109},[69,12847,3220],{"class":86},[69,12849,12850],{"class":71,"line":470},[69,12851,2797],{"class":86},[69,12853,12854],{"class":71,"line":475},[69,12855,12856],{"class":75},"    \u002F\u002F在堆区开辟数据\n",[69,12858,12859,12861,12863,12865,12867,12869],{"class":71,"line":482},[69,12860,3229],{"class":82},[69,12862,7760],{"class":82},[69,12864,29],{"class":86},[69,12866,1019],{"class":82},[69,12868,12793],{"class":109},[69,12870,6878],{"class":86},[69,12872,12873,12875,12877,12879,12881],{"class":71,"line":497},[69,12874,2802],{"class":86},[69,12876,7661],{"class":82},[69,12878,29],{"class":86},[69,12880,2429],{"class":82},[69,12882,2451],{"class":86},[69,12884,12885],{"class":71,"line":502},[69,12886,142],{"class":86},[29,12888,12889],{},"图片展示：",[29,12891,12892],{},[24,12893],{"alt":12761,"src":12894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[29,12896,12897],{},"堆区内存由程序员管生死！！！",[37,12899,12900],{"start":106},[40,12901,12902],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[29,12904,12905],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[29,12907,12908,12909],{},"​语法：",[66,12910,12911],{}," new 数据类型",[29,12913,12914],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[59,12916,12918],{"className":1386,"code":12917,"language":1388,"meta":64,"style":64},"\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",[66,12919,12920,12925,12935,12939,12944,12949,12971,12975,12983,12987,13001,13013,13025,13037,13042,13047,13058,13062,13067,13075,13079,13084,13106,13132,13136,13154,13158,13184,13188,13200,13204,13209,13214,13222,13226,13230,13238,13242,13248,13254],{"__ignoreMap":64},[69,12921,12922],{"class":71,"line":72},[69,12923,12924],{"class":75},"\u002F\u002F1.new的基本语法\n",[69,12926,12927,12929,12931,12933],{"class":71,"line":79},[69,12928,1401],{"class":82},[69,12930,7760],{"class":82},[69,12932,12793],{"class":109},[69,12934,3220],{"class":86},[69,12936,12937],{"class":71,"line":106},[69,12938,2797],{"class":86},[69,12940,12941],{"class":71,"line":116},[69,12942,12943],{"class":75},"    \u002F\u002F在堆区创建整型数据\n",[69,12945,12946],{"class":71,"line":133},[69,12947,12948],{"class":75},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[69,12950,12951,12953,12955,12957,12960,12962,12964,12966,12968],{"class":71,"line":139},[69,12952,3229],{"class":82},[69,12954,7760],{"class":82},[69,12956,29],{"class":86},[69,12958,12959],{"class":82},"=new",[69,12961,3626],{"class":82},[69,12963,1398],{"class":86},[69,12965,390],{"class":90},[69,12967,7208],{"class":86},[69,12969,12970],{"class":75},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[69,12972,12973],{"class":71,"line":401},[69,12974,142],{"class":86},[69,12976,12977,12979,12981],{"class":71,"line":470},[69,12978,6606],{"class":82},[69,12980,6830],{"class":109},[69,12982,3220],{"class":86},[69,12984,12985],{"class":71,"line":475},[69,12986,2797],{"class":86},[69,12988,12989,12991,12993,12995,12997,12999],{"class":71,"line":482},[69,12990,3229],{"class":82},[69,12992,7760],{"class":82},[69,12994,29],{"class":86},[69,12996,1019],{"class":82},[69,12998,12793],{"class":109},[69,13000,6878],{"class":86},[69,13002,13003,13005,13007,13009,13011],{"class":71,"line":497},[69,13004,2802],{"class":86},[69,13006,7661],{"class":82},[69,13008,29],{"class":86},[69,13010,2429],{"class":82},[69,13012,2451],{"class":86},[69,13014,13015,13017,13019,13021,13023],{"class":71,"line":502},[69,13016,2802],{"class":86},[69,13018,7661],{"class":82},[69,13020,29],{"class":86},[69,13022,2429],{"class":82},[69,13024,2451],{"class":86},[69,13026,13027,13029,13031,13033,13035],{"class":71,"line":509},[69,13028,2802],{"class":86},[69,13030,7661],{"class":82},[69,13032,29],{"class":86},[69,13034,2429],{"class":82},[69,13036,2451],{"class":86},[69,13038,13039],{"class":71,"line":524},[69,13040,13041],{"class":75},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[69,13043,13044],{"class":71,"line":2888},[69,13045,13046],{"class":75},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[69,13048,13049,13052,13055],{"class":71,"line":2893},[69,13050,13051],{"class":82},"    delete",[69,13053,13054],{"class":86}," p;",[69,13056,13057],{"class":75},"\u002F\u002F删除这块地址\n",[69,13059,13060],{"class":71,"line":2899},[69,13061,142],{"class":86},[69,13063,13064],{"class":71,"line":2919},[69,13065,13066],{"class":75},"\u002F\u002F2.在堆区利用new开辟数组\n",[69,13068,13069,13071,13073],{"class":71,"line":2924},[69,13070,6606],{"class":82},[69,13072,6899],{"class":109},[69,13074,3220],{"class":86},[69,13076,13077],{"class":71,"line":2938},[69,13078,2797],{"class":86},[69,13080,13081],{"class":71,"line":2943},[69,13082,13083],{"class":75},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[69,13085,13086,13088,13090,13092,13094,13096,13098,13100,13103],{"class":71,"line":2972},[69,13087,3229],{"class":82},[69,13089,7760],{"class":82},[69,13091,5124],{"class":86},[69,13093,12959],{"class":82},[69,13095,3626],{"class":82},[69,13097,2277],{"class":86},[69,13099,390],{"class":90},[69,13101,13102],{"class":86},"];",[69,13104,13105],{"class":75},"\u002F\u002F10代表数组有10个元素\n",[69,13107,13108,13110,13112,13114,13116,13118,13120,13122,13124,13126,13128,13130],{"class":71,"line":2977},[69,13109,4445],{"class":82},[69,13111,87],{"class":86},[69,13113,1401],{"class":82},[69,13115,4276],{"class":86},[69,13117,1019],{"class":82},[69,13119,1583],{"class":90},[69,13121,4283],{"class":86},[69,13123,1011],{"class":82},[69,13125,390],{"class":90},[69,13127,4283],{"class":86},[69,13129,3536],{"class":82},[69,13131,1404],{"class":86},[69,13133,13134],{"class":71,"line":2994},[69,13135,3274],{"class":86},[69,13137,13138,13141,13143,13145,13147,13149,13151],{"class":71,"line":2999},[69,13139,13140],{"class":86},"        arr[i]",[69,13142,1019],{"class":82},[69,13144,1830],{"class":86},[69,13146,1869],{"class":82},[69,13148,124],{"class":90},[69,13150,1450],{"class":86},[69,13152,13153],{"class":75},"\u002F\u002F给10个元素赋值100～109\n",[69,13155,13156],{"class":71,"line":3004},[69,13157,3431],{"class":86},[69,13159,13160,13162,13164,13166,13168,13170,13172,13174,13176,13178,13180,13182],{"class":71,"line":3009},[69,13161,4445],{"class":82},[69,13163,87],{"class":86},[69,13165,1401],{"class":82},[69,13167,4276],{"class":86},[69,13169,1019],{"class":82},[69,13171,1583],{"class":90},[69,13173,4283],{"class":86},[69,13175,1011],{"class":82},[69,13177,390],{"class":90},[69,13179,4283],{"class":86},[69,13181,3536],{"class":82},[69,13183,1404],{"class":86},[69,13185,13186],{"class":71,"line":3023},[69,13187,3274],{"class":86},[69,13189,13190,13192,13194,13196,13198],{"class":71,"line":3028},[69,13191,4695],{"class":86},[69,13193,2429],{"class":82},[69,13195,5598],{"class":86},[69,13197,2429],{"class":82},[69,13199,2451],{"class":86},[69,13201,13202],{"class":71,"line":3821},[69,13203,3431],{"class":86},[69,13205,13206],{"class":71,"line":3835},[69,13207,13208],{"class":75},"    \u002F\u002F释放堆区数组\n",[69,13210,13211],{"class":71,"line":3843},[69,13212,13213],{"class":75},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[69,13215,13216,13219],{"class":71,"line":3848},[69,13217,13218],{"class":82},"    delete[]",[69,13220,13221],{"class":86}," arr;\n",[69,13223,13224],{"class":71,"line":3854},[69,13225,142],{"class":86},[69,13227,13228],{"class":71,"line":3860},[69,13229,3644],{"emptyLinePlaceholder":1325},[69,13231,13232,13234,13236],{"class":71,"line":3865},[69,13233,1401],{"class":82},[69,13235,3217],{"class":109},[69,13237,3220],{"class":86},[69,13239,13240],{"class":71,"line":9190},[69,13241,2797],{"class":86},[69,13243,13244,13246],{"class":71,"line":9214},[69,13245,6875],{"class":109},[69,13247,6878],{"class":86},[69,13249,13250,13252],{"class":71,"line":9219},[69,13251,6944],{"class":109},[69,13253,6878],{"class":86},[69,13255,13256],{"class":71,"line":9225},[69,13257,142],{"class":86},[1297,13259,13260],{},"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":64,"searchDepth":79,"depth":79,"links":13262},[13263],{"id":11931,"depth":79,"text":11932,"children":13264},[13265,13266],{"id":11963,"depth":106,"text":11964},{"id":12591,"depth":106,"text":12592},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11923,"description":64},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13273,"title":13274,"body":13275,"description":64,"extension":1323,"meta":14755,"navigation":1325,"path":14756,"seo":14757,"stem":14758,"__hash__":14759},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13276,"toc":14747},[13277,13280,13284,13287,13290,13459,13463,13468,13485,13490,13642,13646,13649,13652,14045,14049,14052,14057,14060,14372,14376,14382,14542,14544,14552,14556,14559,14566,14744],[10,13278,13274],{"id":13279},"_6引用",[14,13281,13283],{"id":13282},"_61引用基本用法","6.1引用基本用法",[29,13285,13286],{},"引用的本质：给变量起别名",[29,13288,13289],{},"语法：数据类型 &别名=原名",[59,13291,13293],{"className":1386,"code":13292,"language":1388,"meta":64,"style":64},"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",[66,13294,13295,13303,13307,13319,13331,13335,13354,13373,13377,13388,13392,13411,13429,13433,13443,13447,13455],{"__ignoreMap":64},[69,13296,13297,13299,13301],{"class":71,"line":72},[69,13298,1401],{"class":82},[69,13300,3217],{"class":109},[69,13302,12095],{"class":86},[69,13304,13305],{"class":71,"line":79},[69,13306,3644],{"emptyLinePlaceholder":1325},[69,13308,13309,13311,13313,13315,13317],{"class":71,"line":106},[69,13310,3229],{"class":82},[69,13312,12111],{"class":86},[69,13314,1019],{"class":82},[69,13316,3282],{"class":90},[69,13318,130],{"class":86},[69,13320,13321,13323,13325,13327,13329],{"class":71,"line":116},[69,13322,3229],{"class":82},[69,13324,11826],{"class":82},[69,13326,12187],{"class":86},[69,13328,1019],{"class":82},[69,13330,2684],{"class":86},[69,13332,13333],{"class":71,"line":133},[69,13334,3644],{"emptyLinePlaceholder":1325},[69,13336,13337,13339,13341,13344,13346,13348,13350,13352],{"class":71,"line":139},[69,13338,7771],{"class":86},[69,13340,2429],{"class":82},[69,13342,13343],{"class":1022}," \"a = \"",[69,13345,2696],{"class":82},[69,13347,12111],{"class":86},[69,13349,2429],{"class":82},[69,13351,12711],{"class":86},[69,13353,8510],{"class":75},[69,13355,13356,13358,13360,13363,13365,13367,13369,13371],{"class":71,"line":401},[69,13357,7771],{"class":86},[69,13359,2429],{"class":82},[69,13361,13362],{"class":1022}," \"b = \"",[69,13364,2696],{"class":82},[69,13366,12124],{"class":86},[69,13368,2429],{"class":82},[69,13370,12711],{"class":86},[69,13372,8510],{"class":75},[69,13374,13375],{"class":71,"line":470},[69,13376,3644],{"emptyLinePlaceholder":1325},[69,13378,13379,13382,13384,13386],{"class":71,"line":475},[69,13380,13381],{"class":86},"    b ",[69,13383,1019],{"class":82},[69,13385,6996],{"class":90},[69,13387,130],{"class":86},[69,13389,13390],{"class":71,"line":482},[69,13391,3644],{"emptyLinePlaceholder":1325},[69,13393,13394,13396,13398,13400,13402,13404,13406,13408],{"class":71,"line":497},[69,13395,7771],{"class":86},[69,13397,2429],{"class":82},[69,13399,13343],{"class":1022},[69,13401,2696],{"class":82},[69,13403,12111],{"class":86},[69,13405,2429],{"class":82},[69,13407,12711],{"class":86},[69,13409,13410],{"class":75},"\u002F\u002F100\n",[69,13412,13413,13415,13417,13419,13421,13423,13425,13427],{"class":71,"line":502},[69,13414,7771],{"class":86},[69,13416,2429],{"class":82},[69,13418,13362],{"class":1022},[69,13420,2696],{"class":82},[69,13422,12124],{"class":86},[69,13424,2429],{"class":82},[69,13426,12711],{"class":86},[69,13428,13410],{"class":75},[69,13430,13431],{"class":71,"line":509},[69,13432,3644],{"emptyLinePlaceholder":1325},[69,13434,13435,13437,13439,13441],{"class":71,"line":524},[69,13436,3547],{"class":109},[69,13438,1398],{"class":86},[69,13440,3552],{"class":1022},[69,13442,3963],{"class":86},[69,13444,13445],{"class":71,"line":2888},[69,13446,3644],{"emptyLinePlaceholder":1325},[69,13448,13449,13451,13453],{"class":71,"line":2893},[69,13450,5334],{"class":82},[69,13452,5337],{"class":90},[69,13454,130],{"class":86},[69,13456,13457],{"class":71,"line":2899},[69,13458,142],{"class":86},[14,13460,13462],{"id":13461},"_62引用的注意事项","6.2引用的注意事项",[37,13464,13465],{},[40,13466,13467],{},"引用必须要初始化",[59,13469,13471],{"className":1386,"code":13470,"language":1388,"meta":64,"style":64},"int &b;\u002F\u002F非常错误！\n",[66,13472,13473],{"__ignoreMap":64},[69,13474,13475,13477,13479,13482],{"class":71,"line":72},[69,13476,1401],{"class":82},[69,13478,11826],{"class":82},[69,13480,13481],{"class":86},"b;",[69,13483,13484],{"class":75},"\u002F\u002F非常错误！\n",[37,13486,13487],{"start":79},[40,13488,13489],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[59,13491,13493],{"className":1386,"code":13492,"language":1388,"meta":64,"style":64},"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",[66,13494,13495,13503,13515,13527,13535,13551,13564,13582,13600,13620,13630,13638],{"__ignoreMap":64},[69,13496,13497,13499,13501],{"class":71,"line":72},[69,13498,1401],{"class":82},[69,13500,3217],{"class":109},[69,13502,12095],{"class":86},[69,13504,13505,13507,13509,13511,13513],{"class":71,"line":79},[69,13506,3229],{"class":82},[69,13508,12111],{"class":86},[69,13510,1019],{"class":82},[69,13512,3282],{"class":90},[69,13514,130],{"class":86},[69,13516,13517,13519,13521,13523,13525],{"class":71,"line":106},[69,13518,3229],{"class":82},[69,13520,12124],{"class":86},[69,13522,1019],{"class":82},[69,13524,10192],{"class":90},[69,13526,130],{"class":86},[69,13528,13529,13532],{"class":71,"line":116},[69,13530,13531],{"class":75},"    \u002F\u002Fint &c;",[69,13533,13534],{"class":75}," \u002F\u002F错误，引用必须初始化\n",[69,13536,13537,13539,13541,13543,13545,13548],{"class":71,"line":133},[69,13538,3229],{"class":82},[69,13540,11826],{"class":82},[69,13542,4190],{"class":86},[69,13544,1019],{"class":82},[69,13546,13547],{"class":86}," a;",[69,13549,13550],{"class":75}," \u002F\u002F一旦初始化后，就不可以更改\n",[69,13552,13553,13556,13558,13561],{"class":71,"line":139},[69,13554,13555],{"class":86},"    c ",[69,13557,1019],{"class":82},[69,13559,13560],{"class":86}," b;",[69,13562,13563],{"class":75}," \u002F\u002F这是赋值操作，不是更改引用\n",[69,13565,13566,13568,13570,13572,13574,13576,13578,13580],{"class":71,"line":401},[69,13567,7771],{"class":86},[69,13569,2429],{"class":82},[69,13571,13343],{"class":1022},[69,13573,2696],{"class":82},[69,13575,12111],{"class":86},[69,13577,2429],{"class":82},[69,13579,12711],{"class":86},[69,13581,8495],{"class":75},[69,13583,13584,13586,13588,13590,13592,13594,13596,13598],{"class":71,"line":470},[69,13585,7771],{"class":86},[69,13587,2429],{"class":82},[69,13589,13362],{"class":1022},[69,13591,2696],{"class":82},[69,13593,12124],{"class":86},[69,13595,2429],{"class":82},[69,13597,12711],{"class":86},[69,13599,8495],{"class":75},[69,13601,13602,13604,13606,13609,13611,13614,13616,13618],{"class":71,"line":475},[69,13603,7771],{"class":86},[69,13605,2429],{"class":82},[69,13607,13608],{"class":1022}," \"c = \"",[69,13610,2696],{"class":82},[69,13612,13613],{"class":86}," c ",[69,13615,2429],{"class":82},[69,13617,12711],{"class":86},[69,13619,8495],{"class":75},[69,13621,13622,13624,13626,13628],{"class":71,"line":482},[69,13623,3547],{"class":109},[69,13625,1398],{"class":86},[69,13627,3552],{"class":1022},[69,13629,3963],{"class":86},[69,13631,13632,13634,13636],{"class":71,"line":497},[69,13633,5334],{"class":82},[69,13635,5337],{"class":90},[69,13637,130],{"class":86},[69,13639,13640],{"class":71,"line":502},[69,13641,142],{"class":86},[14,13643,13645],{"id":13644},"_63引用做函数参数","6.3引用做函数参数",[29,13647,13648],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[29,13650,13651],{},"优点：可以简化指针修改实参",[59,13653,13655],{"className":1386,"code":13654,"language":1388,"meta":64,"style":64},"\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",[66,13656,13657,13662,13684,13695,13705,13714,13718,13722,13727,13749,13761,13773,13783,13787,13791,13796,13818,13828,13836,13844,13848,13852,13860,13864,13876,13888,13892,13903,13929,13933,13953,13977,13981,13991,14015,14019,14029,14033,14041],{"__ignoreMap":64},[69,13658,13659],{"class":71,"line":72},[69,13660,13661],{"class":75},"\u002F\u002F1. 值传递\n",[69,13663,13664,13666,13669,13671,13673,13675,13678,13680,13682],{"class":71,"line":79},[69,13665,6606],{"class":82},[69,13667,13668],{"class":109}," mySwap01",[69,13670,1398],{"class":86},[69,13672,1401],{"class":82},[69,13674,2650],{"class":6458},[69,13676,13677],{"class":86},", ",[69,13679,1401],{"class":82},[69,13681,4077],{"class":6458},[69,13683,103],{"class":86},[69,13685,13686,13688,13691,13693],{"class":71,"line":106},[69,13687,3229],{"class":82},[69,13689,13690],{"class":86}," temp ",[69,13692,1019],{"class":82},[69,13694,2684],{"class":86},[69,13696,13697,13700,13702],{"class":71,"line":116},[69,13698,13699],{"class":86},"    a ",[69,13701,1019],{"class":82},[69,13703,13704],{"class":86}," b;\n",[69,13706,13707,13709,13711],{"class":71,"line":133},[69,13708,13381],{"class":86},[69,13710,1019],{"class":82},[69,13712,13713],{"class":86}," temp;\n",[69,13715,13716],{"class":71,"line":139},[69,13717,142],{"class":86},[69,13719,13720],{"class":71,"line":401},[69,13721,3644],{"emptyLinePlaceholder":1325},[69,13723,13724],{"class":71,"line":470},[69,13725,13726],{"class":75},"\u002F\u002F2. 地址传递\n",[69,13728,13729,13731,13734,13736,13739,13741,13743,13745,13747],{"class":71,"line":475},[69,13730,6606],{"class":82},[69,13732,13733],{"class":109}," mySwap02",[69,13735,1398],{"class":86},[69,13737,13738],{"class":82},"int*",[69,13740,2650],{"class":6458},[69,13742,13677],{"class":86},[69,13744,13738],{"class":82},[69,13746,4077],{"class":6458},[69,13748,103],{"class":86},[69,13750,13751,13753,13755,13757,13759],{"class":71,"line":482},[69,13752,3229],{"class":82},[69,13754,13690],{"class":86},[69,13756,1019],{"class":82},[69,13758,7760],{"class":82},[69,13760,7439],{"class":86},[69,13762,13763,13765,13767,13769,13771],{"class":71,"line":497},[69,13764,7645],{"class":82},[69,13766,12161],{"class":86},[69,13768,1019],{"class":82},[69,13770,7760],{"class":82},[69,13772,7311],{"class":86},[69,13774,13775,13777,13779,13781],{"class":71,"line":502},[69,13776,7645],{"class":82},[69,13778,12187],{"class":86},[69,13780,1019],{"class":82},[69,13782,13713],{"class":86},[69,13784,13785],{"class":71,"line":509},[69,13786,142],{"class":86},[69,13788,13789],{"class":71,"line":524},[69,13790,3644],{"emptyLinePlaceholder":1325},[69,13792,13793],{"class":71,"line":2888},[69,13794,13795],{"class":75},"\u002F\u002F3. 引用传递\n",[69,13797,13798,13800,13803,13805,13808,13810,13812,13814,13816],{"class":71,"line":2893},[69,13799,6606],{"class":82},[69,13801,13802],{"class":109}," mySwap03",[69,13804,1398],{"class":86},[69,13806,13807],{"class":82},"int&",[69,13809,2650],{"class":6458},[69,13811,13677],{"class":86},[69,13813,13807],{"class":82},[69,13815,4077],{"class":6458},[69,13817,103],{"class":86},[69,13819,13820,13822,13824,13826],{"class":71,"line":2899},[69,13821,3229],{"class":82},[69,13823,13690],{"class":86},[69,13825,1019],{"class":82},[69,13827,2684],{"class":86},[69,13829,13830,13832,13834],{"class":71,"line":2919},[69,13831,13699],{"class":86},[69,13833,1019],{"class":82},[69,13835,13704],{"class":86},[69,13837,13838,13840,13842],{"class":71,"line":2924},[69,13839,13381],{"class":86},[69,13841,1019],{"class":82},[69,13843,13713],{"class":86},[69,13845,13846],{"class":71,"line":2938},[69,13847,142],{"class":86},[69,13849,13850],{"class":71,"line":2943},[69,13851,3644],{"emptyLinePlaceholder":1325},[69,13853,13854,13856,13858],{"class":71,"line":2972},[69,13855,1401],{"class":82},[69,13857,3217],{"class":109},[69,13859,12095],{"class":86},[69,13861,13862],{"class":71,"line":2977},[69,13863,3644],{"emptyLinePlaceholder":1325},[69,13865,13866,13868,13870,13872,13874],{"class":71,"line":2994},[69,13867,3229],{"class":82},[69,13869,12111],{"class":86},[69,13871,1019],{"class":82},[69,13873,3282],{"class":90},[69,13875,130],{"class":86},[69,13877,13878,13880,13882,13884,13886],{"class":71,"line":2999},[69,13879,3229],{"class":82},[69,13881,12124],{"class":86},[69,13883,1019],{"class":82},[69,13885,10192],{"class":90},[69,13887,130],{"class":86},[69,13889,13890],{"class":71,"line":3004},[69,13891,3644],{"emptyLinePlaceholder":1325},[69,13893,13894,13897,13900],{"class":71,"line":3009},[69,13895,13896],{"class":109},"    mySwap01",[69,13898,13899],{"class":86},"(a, b);",[69,13901,13902],{"class":75},"\u002F\u002F值传递，形参不会修饰实参\n",[69,13904,13905,13907,13909,13912,13914,13916,13918,13921,13923,13925,13927],{"class":71,"line":3023},[69,13906,7771],{"class":86},[69,13908,2429],{"class":82},[69,13910,13911],{"class":1022}," \"a:\"",[69,13913,2696],{"class":82},[69,13915,12111],{"class":86},[69,13917,2429],{"class":82},[69,13919,13920],{"class":1022}," \" b:\"",[69,13922,2696],{"class":82},[69,13924,12124],{"class":86},[69,13926,2429],{"class":82},[69,13928,10082],{"class":86},[69,13930,13931],{"class":71,"line":3028},[69,13932,3644],{"emptyLinePlaceholder":1325},[69,13934,13935,13938,13940,13942,13945,13947,13950],{"class":71,"line":3821},[69,13936,13937],{"class":109},"    mySwap02",[69,13939,1398],{"class":86},[69,13941,1742],{"class":82},[69,13943,13944],{"class":86},"a, ",[69,13946,1742],{"class":82},[69,13948,13949],{"class":86},"b);",[69,13951,13952],{"class":75},"\u002F\u002F地址传递，形参会修饰实参\n",[69,13954,13955,13957,13959,13961,13963,13965,13967,13969,13971,13973,13975],{"class":71,"line":3835},[69,13956,7771],{"class":86},[69,13958,2429],{"class":82},[69,13960,13911],{"class":1022},[69,13962,2696],{"class":82},[69,13964,12111],{"class":86},[69,13966,2429],{"class":82},[69,13968,13920],{"class":1022},[69,13970,2696],{"class":82},[69,13972,12124],{"class":86},[69,13974,2429],{"class":82},[69,13976,10082],{"class":86},[69,13978,13979],{"class":71,"line":3843},[69,13980,3644],{"emptyLinePlaceholder":1325},[69,13982,13983,13986,13988],{"class":71,"line":3848},[69,13984,13985],{"class":109},"    mySwap03",[69,13987,13899],{"class":86},[69,13989,13990],{"class":75},"\u002F\u002F引用传递，形参会修饰实参\n",[69,13992,13993,13995,13997,13999,14001,14003,14005,14007,14009,14011,14013],{"class":71,"line":3854},[69,13994,7771],{"class":86},[69,13996,2429],{"class":82},[69,13998,13911],{"class":1022},[69,14000,2696],{"class":82},[69,14002,12111],{"class":86},[69,14004,2429],{"class":82},[69,14006,13920],{"class":1022},[69,14008,2696],{"class":82},[69,14010,12124],{"class":86},[69,14012,2429],{"class":82},[69,14014,10082],{"class":86},[69,14016,14017],{"class":71,"line":3860},[69,14018,3644],{"emptyLinePlaceholder":1325},[69,14020,14021,14023,14025,14027],{"class":71,"line":3865},[69,14022,3547],{"class":109},[69,14024,1398],{"class":86},[69,14026,3552],{"class":1022},[69,14028,3963],{"class":86},[69,14030,14031],{"class":71,"line":9190},[69,14032,3644],{"emptyLinePlaceholder":1325},[69,14034,14035,14037,14039],{"class":71,"line":9214},[69,14036,5334],{"class":82},[69,14038,5337],{"class":90},[69,14040,130],{"class":86},[69,14042,14043],{"class":71,"line":9219},[69,14044,142],{"class":86},[14,14046,14048],{"id":14047},"_64引用做函数的返回值","6.4引用做函数的返回值",[29,14050,14051],{},"作用：引用是可以作为函数的返回值存在的",[29,14053,10267,14054],{},[195,14055,14056],{},"不要返回局部变量引用",[29,14058,14059],{},"用法：函数调用作为左值",[59,14061,14063],{"className":11183,"code":14062,"language":11185,"meta":64,"style":64},"\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",[66,14064,14065,14070,14078,14093,14099,14103,14107,14112,14120,14137,14143,14147,14151,14159,14163,14168,14182,14202,14221,14225,14230,14243,14263,14281,14285,14301,14305,14324,14342,14346,14356,14360,14368],{"__ignoreMap":64},[69,14066,14067],{"class":71,"line":72},[69,14068,14069],{"class":75},"\u002F\u002F返回局部变量引用\n",[69,14071,14072,14074,14076],{"class":71,"line":79},[69,14073,13807],{"class":82},[69,14075,6830],{"class":109},[69,14077,12095],{"class":86},[69,14079,14080,14082,14084,14086,14088,14090],{"class":71,"line":106},[69,14081,3229],{"class":82},[69,14083,12111],{"class":86},[69,14085,1019],{"class":82},[69,14087,3282],{"class":90},[69,14089,1450],{"class":86},[69,14091,14092],{"class":75}," \u002F\u002F局部变量\n",[69,14094,14095,14097],{"class":71,"line":116},[69,14096,5334],{"class":82},[69,14098,2684],{"class":86},[69,14100,14101],{"class":71,"line":133},[69,14102,142],{"class":86},[69,14104,14105],{"class":71,"line":139},[69,14106,3644],{"emptyLinePlaceholder":1325},[69,14108,14109],{"class":71,"line":401},[69,14110,14111],{"class":75},"\u002F\u002F返回静态变量引用\n",[69,14113,14114,14116,14118],{"class":71,"line":470},[69,14115,13807],{"class":82},[69,14117,6899],{"class":109},[69,14119,12095],{"class":86},[69,14121,14122,14124,14126,14128,14130,14132,14134],{"class":71,"line":475},[69,14123,12262],{"class":82},[69,14125,3626],{"class":82},[69,14127,12111],{"class":86},[69,14129,1019],{"class":82},[69,14131,10192],{"class":90},[69,14133,1450],{"class":86},[69,14135,14136],{"class":75},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[69,14138,14139,14141],{"class":71,"line":482},[69,14140,5334],{"class":82},[69,14142,2684],{"class":86},[69,14144,14145],{"class":71,"line":497},[69,14146,142],{"class":86},[69,14148,14149],{"class":71,"line":502},[69,14150,3644],{"emptyLinePlaceholder":1325},[69,14152,14153,14155,14157],{"class":71,"line":509},[69,14154,1401],{"class":82},[69,14156,3217],{"class":109},[69,14158,12095],{"class":86},[69,14160,14161],{"class":71,"line":524},[69,14162,3644],{"emptyLinePlaceholder":1325},[69,14164,14165],{"class":71,"line":2888},[69,14166,14167],{"class":75},"    \u002F\u002F不能返回局部变量的引用\n",[69,14169,14170,14173,14176,14178,14180],{"class":71,"line":2893},[69,14171,14172],{"class":82},"    int&",[69,14174,14175],{"class":86}," ref ",[69,14177,1019],{"class":82},[69,14179,6830],{"class":109},[69,14181,6878],{"class":86},[69,14183,14184,14186,14188,14191,14193,14195,14197,14199],{"class":71,"line":2899},[69,14185,7771],{"class":86},[69,14187,2429],{"class":82},[69,14189,14190],{"class":1022}," \"ref = \"",[69,14192,2696],{"class":82},[69,14194,14175],{"class":86},[69,14196,2429],{"class":82},[69,14198,12711],{"class":86},[69,14200,14201],{"class":75},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[69,14203,14204,14206,14208,14210,14212,14214,14216,14218],{"class":71,"line":2919},[69,14205,7771],{"class":86},[69,14207,2429],{"class":82},[69,14209,14190],{"class":1022},[69,14211,2696],{"class":82},[69,14213,14175],{"class":86},[69,14215,2429],{"class":82},[69,14217,12711],{"class":86},[69,14219,14220],{"class":75},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[69,14222,14223],{"class":71,"line":2924},[69,14224,3644],{"emptyLinePlaceholder":1325},[69,14226,14227],{"class":71,"line":2938},[69,14228,14229],{"class":75},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[69,14231,14232,14234,14237,14239,14241],{"class":71,"line":2943},[69,14233,14172],{"class":82},[69,14235,14236],{"class":86}," ref2 ",[69,14238,1019],{"class":82},[69,14240,6899],{"class":109},[69,14242,6878],{"class":86},[69,14244,14245,14247,14249,14252,14254,14256,14258,14260],{"class":71,"line":2972},[69,14246,7771],{"class":86},[69,14248,2429],{"class":82},[69,14250,14251],{"class":1022}," \"ref2 = \"",[69,14253,2696],{"class":82},[69,14255,14236],{"class":86},[69,14257,2429],{"class":82},[69,14259,12711],{"class":86},[69,14261,14262],{"class":75}," \u002F\u002F20\n",[69,14264,14265,14267,14269,14271,14273,14275,14277,14279],{"class":71,"line":2977},[69,14266,7771],{"class":86},[69,14268,2429],{"class":82},[69,14270,14251],{"class":1022},[69,14272,2696],{"class":82},[69,14274,14236],{"class":86},[69,14276,2429],{"class":82},[69,14278,12711],{"class":86},[69,14280,14262],{"class":75},[69,14282,14283],{"class":71,"line":2994},[69,14284,3644],{"emptyLinePlaceholder":1325},[69,14286,14287,14289,14292,14294,14296,14298],{"class":71,"line":2999},[69,14288,6944],{"class":109},[69,14290,14291],{"class":86},"() ",[69,14293,1019],{"class":82},[69,14295,4243],{"class":90},[69,14297,1450],{"class":86},[69,14299,14300],{"class":75},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[69,14302,14303],{"class":71,"line":3004},[69,14304,3644],{"emptyLinePlaceholder":1325},[69,14306,14307,14309,14311,14313,14315,14317,14319,14321],{"class":71,"line":3009},[69,14308,7771],{"class":86},[69,14310,2429],{"class":82},[69,14312,14251],{"class":1022},[69,14314,2696],{"class":82},[69,14316,14236],{"class":86},[69,14318,2429],{"class":82},[69,14320,12711],{"class":86},[69,14322,14323],{"class":75}," \u002F\u002F1000\n",[69,14325,14326,14328,14330,14332,14334,14336,14338,14340],{"class":71,"line":3023},[69,14327,7771],{"class":86},[69,14329,2429],{"class":82},[69,14331,14251],{"class":1022},[69,14333,2696],{"class":82},[69,14335,14236],{"class":86},[69,14337,2429],{"class":82},[69,14339,12711],{"class":86},[69,14341,14323],{"class":75},[69,14343,14344],{"class":71,"line":3028},[69,14345,3644],{"emptyLinePlaceholder":1325},[69,14347,14348,14350,14352,14354],{"class":71,"line":3821},[69,14349,3547],{"class":109},[69,14351,1398],{"class":86},[69,14353,3552],{"class":1022},[69,14355,3963],{"class":86},[69,14357,14358],{"class":71,"line":3835},[69,14359,3644],{"emptyLinePlaceholder":1325},[69,14361,14362,14364,14366],{"class":71,"line":3843},[69,14363,5334],{"class":82},[69,14365,5337],{"class":90},[69,14367,130],{"class":86},[69,14369,14370],{"class":71,"line":3848},[69,14371,142],{"class":86},[14,14373,14375],{"id":14374},"_65引用的本质","6.5引用的本质",[29,14377,14378,14379],{},"本质：",[195,14380,14381],{},"引用的本质在c++内部实现是一个指针常量.",[59,14383,14385],{"className":1386,"code":14384,"language":1388,"meta":64,"style":64},"\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",[66,14386,14387,14392,14408,14422,14426,14435,14447,14452,14457,14468,14481,14485,14501,14518,14522,14530,14538],{"__ignoreMap":64},[69,14388,14389],{"class":71,"line":72},[69,14390,14391],{"class":75},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[69,14393,14394,14396,14398,14400,14402,14405],{"class":71,"line":79},[69,14395,6606],{"class":82},[69,14397,12627],{"class":109},[69,14399,1398],{"class":86},[69,14401,13807],{"class":82},[69,14403,14404],{"class":6458}," ref",[69,14406,14407],{"class":86},"){\n",[69,14409,14410,14413,14415,14417,14419],{"class":71,"line":106},[69,14411,14412],{"class":86},"    ref ",[69,14414,1019],{"class":82},[69,14416,6996],{"class":90},[69,14418,1450],{"class":86},[69,14420,14421],{"class":75}," \u002F\u002F ref是引用，转换为*ref = 100\n",[69,14423,14424],{"class":71,"line":116},[69,14425,142],{"class":86},[69,14427,14428,14430,14432],{"class":71,"line":133},[69,14429,1401],{"class":82},[69,14431,3217],{"class":109},[69,14433,14434],{"class":86},"(){\n",[69,14436,14437,14439,14441,14443,14445],{"class":71,"line":139},[69,14438,3229],{"class":82},[69,14440,12111],{"class":86},[69,14442,1019],{"class":82},[69,14444,3282],{"class":90},[69,14446,130],{"class":86},[69,14448,14449],{"class":71,"line":401},[69,14450,14451],{"class":86},"    \n",[69,14453,14454],{"class":71,"line":470},[69,14455,14456],{"class":75},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[69,14458,14459,14461,14463,14465],{"class":71,"line":475},[69,14460,14172],{"class":82},[69,14462,14175],{"class":86},[69,14464,1019],{"class":82},[69,14466,14467],{"class":86}," a; \n",[69,14469,14470,14472,14474,14476,14478],{"class":71,"line":482},[69,14471,14412],{"class":86},[69,14473,1019],{"class":82},[69,14475,10192],{"class":90},[69,14477,1450],{"class":86},[69,14479,14480],{"class":75}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[69,14482,14483],{"class":71,"line":497},[69,14484,14451],{"class":86},[69,14486,14487,14489,14491,14493,14495,14497,14499],{"class":71,"line":502},[69,14488,7771],{"class":86},[69,14490,2429],{"class":82},[69,14492,13911],{"class":1022},[69,14494,2696],{"class":82},[69,14496,12111],{"class":86},[69,14498,2429],{"class":82},[69,14500,10082],{"class":86},[69,14502,14503,14505,14507,14510,14512,14514,14516],{"class":71,"line":509},[69,14504,7771],{"class":86},[69,14506,2429],{"class":82},[69,14508,14509],{"class":1022}," \"ref:\"",[69,14511,2696],{"class":82},[69,14513,14175],{"class":86},[69,14515,2429],{"class":82},[69,14517,10082],{"class":86},[69,14519,14520],{"class":71,"line":524},[69,14521,14451],{"class":86},[69,14523,14524,14527],{"class":71,"line":2888},[69,14525,14526],{"class":109},"    func",[69,14528,14529],{"class":86},"(a);\n",[69,14531,14532,14534,14536],{"class":71,"line":2893},[69,14533,5334],{"class":82},[69,14535,5337],{"class":90},[69,14537,130],{"class":86},[69,14539,14540],{"class":71,"line":2899},[69,14541,142],{"class":86},[29,14543,12574],{},[37,14545,14546,14549],{},[40,14547,14548],{},"引用的本质，就是一个指针常量",[40,14550,14551],{},"引用一旦初始化，就不可以发生改变",[14,14553,14555],{"id":14554},"_66常量引用","6.6常量引用",[29,14557,14558],{},"作用：常量引用主要用来修饰形参",[29,14560,14561,14562,14565],{},"在函数形参列表中，可以加",[195,14563,14564],{},"const修饰形参","，防止形参改变实参",[59,14567,14569],{"className":1386,"code":14568,"language":1388,"meta":64,"style":64},"\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",[66,14570,14571,14576,14581,14600,14605,14618,14622,14626,14634,14638,14643,14648,14662,14666,14674,14686,14690,14695,14707,14714,14718,14728,14732,14740],{"__ignoreMap":64},[69,14572,14573],{"class":71,"line":72},[69,14574,14575],{"class":75},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[69,14577,14578],{"class":71,"line":79},[69,14579,14580],{"class":75},"\u002F\u002F加上const就不能修改实参的\n",[69,14582,14583,14585,14588,14590,14592,14595,14598],{"class":71,"line":106},[69,14584,6606],{"class":82},[69,14586,14587],{"class":109}," showValue",[69,14589,1398],{"class":86},[69,14591,8034],{"class":82},[69,14593,14594],{"class":82}," int&",[69,14596,14597],{"class":6458}," v",[69,14599,103],{"class":86},[69,14601,14602],{"class":71,"line":116},[69,14603,14604],{"class":75},"    \u002F\u002Fv += 100;\n",[69,14606,14607,14609,14611,14614,14616],{"class":71,"line":133},[69,14608,7771],{"class":86},[69,14610,2429],{"class":82},[69,14612,14613],{"class":86}," v ",[69,14615,2429],{"class":82},[69,14617,10082],{"class":86},[69,14619,14620],{"class":71,"line":139},[69,14621,142],{"class":86},[69,14623,14624],{"class":71,"line":401},[69,14625,3644],{"emptyLinePlaceholder":1325},[69,14627,14628,14630,14632],{"class":71,"line":470},[69,14629,1401],{"class":82},[69,14631,3217],{"class":109},[69,14633,12095],{"class":86},[69,14635,14636],{"class":71,"line":475},[69,14637,3644],{"emptyLinePlaceholder":1325},[69,14639,14640],{"class":71,"line":482},[69,14641,14642],{"class":75},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[69,14644,14645],{"class":71,"line":497},[69,14646,14647],{"class":75},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[69,14649,14650,14652,14654,14656,14658,14660],{"class":71,"line":502},[69,14651,12463],{"class":82},[69,14653,14594],{"class":82},[69,14655,14175],{"class":86},[69,14657,1019],{"class":82},[69,14659,3282],{"class":90},[69,14661,130],{"class":86},[69,14663,14664],{"class":71,"line":509},[69,14665,3644],{"emptyLinePlaceholder":1325},[69,14667,14668,14671],{"class":71,"line":524},[69,14669,14670],{"class":75},"    \u002F\u002Fref = 100;",[69,14672,14673],{"class":75},"  \u002F\u002F加入const后不可以修改变量\n",[69,14675,14676,14678,14680,14682,14684],{"class":71,"line":2888},[69,14677,7771],{"class":86},[69,14679,2429],{"class":82},[69,14681,14175],{"class":86},[69,14683,2429],{"class":82},[69,14685,10082],{"class":86},[69,14687,14688],{"class":71,"line":2893},[69,14689,3644],{"emptyLinePlaceholder":1325},[69,14691,14692],{"class":71,"line":2899},[69,14693,14694],{"class":75},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[69,14696,14697,14699,14701,14703,14705],{"class":71,"line":2919},[69,14698,3229],{"class":82},[69,14700,12111],{"class":86},[69,14702,1019],{"class":82},[69,14704,3282],{"class":90},[69,14706,130],{"class":86},[69,14708,14709,14712],{"class":71,"line":2924},[69,14710,14711],{"class":109},"    showValue",[69,14713,14529],{"class":86},[69,14715,14716],{"class":71,"line":2938},[69,14717,3644],{"emptyLinePlaceholder":1325},[69,14719,14720,14722,14724,14726],{"class":71,"line":2943},[69,14721,3547],{"class":109},[69,14723,1398],{"class":86},[69,14725,3552],{"class":1022},[69,14727,3963],{"class":86},[69,14729,14730],{"class":71,"line":2972},[69,14731,3644],{"emptyLinePlaceholder":1325},[69,14733,14734,14736,14738],{"class":71,"line":2977},[69,14735,5334],{"class":82},[69,14737,5337],{"class":90},[69,14739,130],{"class":86},[69,14741,14742],{"class":71,"line":2994},[69,14743,142],{"class":86},[1297,14745,14746],{},"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":64,"searchDepth":79,"depth":79,"links":14748},[14749,14750,14751,14752,14753,14754],{"id":13282,"depth":79,"text":13283},{"id":13461,"depth":79,"text":13462},{"id":13644,"depth":79,"text":13645},{"id":14047,"depth":79,"text":14048},{"id":14374,"depth":79,"text":14375},{"id":14554,"depth":79,"text":14555},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13274,"description":64},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14761,"title":14762,"body":14763,"description":64,"extension":1323,"meta":15844,"navigation":1325,"path":15845,"seo":15846,"stem":15847,"__hash__":15848},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14764,"toc":15836},[14765,14768,14772,14775,14780,15012,15014,15025,15029,15032,15040,15144,15147,15151,15154,15158,15161,15166,15188,15194,15521,15524,15528,15536,15833],[10,14766,14762],{"id":14767},"_7函数高级部分",[14,14769,14771],{"id":14770},"_71函数默认参数","7.1函数默认参数",[29,14773,14774],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[29,14776,6425,14777],{},[66,14778,14779],{}," 返回值类型  函数名 （参数= 默认值）{}",[59,14781,14783],{"className":1386,"code":14782,"language":1388,"meta":64,"style":64},"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",[66,14784,14785,14820,14835,14839,14843,14848,14853,14882,14902,14912,14916,14920,14928,14932,14960,14982,14986,14996,15000,15008],{"__ignoreMap":64},[69,14786,14787,14789,14791,14793,14795,14797,14799,14801,14803,14806,14808,14810,14812,14814,14816,14818],{"class":71,"line":72},[69,14788,1401],{"class":82},[69,14790,12627],{"class":109},[69,14792,1398],{"class":86},[69,14794,1401],{"class":82},[69,14796,2650],{"class":6458},[69,14798,13677],{"class":86},[69,14800,1401],{"class":82},[69,14802,4077],{"class":6458},[69,14804,14805],{"class":82}," =",[69,14807,3282],{"class":90},[69,14809,13677],{"class":86},[69,14811,1401],{"class":82},[69,14813,4093],{"class":6458},[69,14815,14805],{"class":82},[69,14817,3282],{"class":90},[69,14819,103],{"class":86},[69,14821,14822,14824,14826,14828,14830,14832],{"class":71,"line":79},[69,14823,5334],{"class":82},[69,14825,12111],{"class":86},[69,14827,1869],{"class":82},[69,14829,12124],{"class":86},[69,14831,1869],{"class":82},[69,14833,14834],{"class":86}," c;\n",[69,14836,14837],{"class":71,"line":106},[69,14838,142],{"class":86},[69,14840,14841],{"class":71,"line":116},[69,14842,3644],{"emptyLinePlaceholder":1325},[69,14844,14845],{"class":71,"line":133},[69,14846,14847],{"class":75},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[69,14849,14850],{"class":71,"line":139},[69,14851,14852],{"class":75},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[69,14854,14855,14857,14860,14862,14864,14866,14868,14870,14872,14874,14876,14878,14880],{"class":71,"line":401},[69,14856,1401],{"class":82},[69,14858,14859],{"class":109}," func2",[69,14861,1398],{"class":86},[69,14863,1401],{"class":82},[69,14865,2650],{"class":6458},[69,14867,14805],{"class":82},[69,14869,3282],{"class":90},[69,14871,13677],{"class":86},[69,14873,1401],{"class":82},[69,14875,4077],{"class":6458},[69,14877,14805],{"class":82},[69,14879,3282],{"class":90},[69,14881,3963],{"class":86},[69,14883,14884,14886,14888,14890,14892,14894,14896,14898,14900],{"class":71,"line":470},[69,14885,1401],{"class":82},[69,14887,14859],{"class":109},[69,14889,1398],{"class":86},[69,14891,1401],{"class":82},[69,14893,2650],{"class":6458},[69,14895,13677],{"class":86},[69,14897,1401],{"class":82},[69,14899,4077],{"class":6458},[69,14901,103],{"class":86},[69,14903,14904,14906,14908,14910],{"class":71,"line":475},[69,14905,5334],{"class":82},[69,14907,12111],{"class":86},[69,14909,1869],{"class":82},[69,14911,13704],{"class":86},[69,14913,14914],{"class":71,"line":482},[69,14915,142],{"class":86},[69,14917,14918],{"class":71,"line":497},[69,14919,3644],{"emptyLinePlaceholder":1325},[69,14921,14922,14924,14926],{"class":71,"line":502},[69,14923,1401],{"class":82},[69,14925,3217],{"class":109},[69,14927,12095],{"class":86},[69,14929,14930],{"class":71,"line":509},[69,14931,3644],{"emptyLinePlaceholder":1325},[69,14933,14934,14936,14938,14941,14943,14945,14947,14949,14951,14953,14956,14958],{"class":71,"line":524},[69,14935,7771],{"class":86},[69,14937,2429],{"class":82},[69,14939,14940],{"class":1022}," \"ret = \"",[69,14942,2696],{"class":82},[69,14944,12627],{"class":109},[69,14946,1398],{"class":86},[69,14948,2087],{"class":90},[69,14950,13677],{"class":86},[69,14952,2087],{"class":90},[69,14954,14955],{"class":86},") ",[69,14957,2429],{"class":82},[69,14959,10082],{"class":86},[69,14961,14962,14964,14966,14968,14970,14972,14974,14976,14978,14980],{"class":71,"line":2888},[69,14963,7771],{"class":86},[69,14965,2429],{"class":82},[69,14967,14940],{"class":1022},[69,14969,2696],{"class":82},[69,14971,12627],{"class":109},[69,14973,1398],{"class":86},[69,14975,124],{"class":90},[69,14977,14955],{"class":86},[69,14979,2429],{"class":82},[69,14981,10082],{"class":86},[69,14983,14984],{"class":71,"line":2893},[69,14985,3644],{"emptyLinePlaceholder":1325},[69,14987,14988,14990,14992,14994],{"class":71,"line":2899},[69,14989,3547],{"class":109},[69,14991,1398],{"class":86},[69,14993,3552],{"class":1022},[69,14995,3963],{"class":86},[69,14997,14998],{"class":71,"line":2919},[69,14999,3644],{"emptyLinePlaceholder":1325},[69,15001,15002,15004,15006],{"class":71,"line":2924},[69,15003,5334],{"class":82},[69,15005,5337],{"class":90},[69,15007,130],{"class":86},[69,15009,15010],{"class":71,"line":2938},[69,15011,142],{"class":86},[29,15013,12574],{},[37,15015,15016,15019,15022],{},[40,15017,15018],{},"我传就用我；没传就用你",[40,15020,15021],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[40,15023,15024],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15026,15028],{"id":15027},"_72函数的占位参数","7.2函数的占位参数",[29,15030,15031],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[29,15033,15034,15036,15037],{},[195,15035,6425],{}," ",[66,15038,15039],{},"返回值类型 函数名 (数据类型){}",[59,15041,15043],{"className":1386,"code":15042,"language":1388,"meta":64,"style":64},"\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",[66,15044,15045,15050,15068,15081,15085,15093,15097,15114,15118,15128,15132,15140],{"__ignoreMap":64},[69,15046,15047],{"class":71,"line":72},[69,15048,15049],{"class":75},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[69,15051,15052,15054,15056,15058,15060,15062,15064,15066],{"class":71,"line":79},[69,15053,6606],{"class":82},[69,15055,12627],{"class":109},[69,15057,1398],{"class":86},[69,15059,1401],{"class":82},[69,15061,2650],{"class":6458},[69,15063,13677],{"class":86},[69,15065,1401],{"class":82},[69,15067,103],{"class":86},[69,15069,15070,15072,15074,15077,15079],{"class":71,"line":106},[69,15071,7771],{"class":86},[69,15073,2429],{"class":82},[69,15075,15076],{"class":1022}," \"this is func\"",[69,15078,2696],{"class":82},[69,15080,10082],{"class":86},[69,15082,15083],{"class":71,"line":116},[69,15084,142],{"class":86},[69,15086,15087,15089,15091],{"class":71,"line":133},[69,15088,1401],{"class":82},[69,15090,3217],{"class":109},[69,15092,12095],{"class":86},[69,15094,15095],{"class":71,"line":139},[69,15096,3644],{"emptyLinePlaceholder":1325},[69,15098,15099,15101,15103,15105,15107,15109,15111],{"class":71,"line":401},[69,15100,14526],{"class":109},[69,15102,1398],{"class":86},[69,15104,390],{"class":90},[69,15106,1767],{"class":86},[69,15108,390],{"class":90},[69,15110,7208],{"class":86},[69,15112,15113],{"class":75}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[69,15115,15116],{"class":71,"line":470},[69,15117,3644],{"emptyLinePlaceholder":1325},[69,15119,15120,15122,15124,15126],{"class":71,"line":475},[69,15121,3547],{"class":109},[69,15123,1398],{"class":86},[69,15125,3552],{"class":1022},[69,15127,3963],{"class":86},[69,15129,15130],{"class":71,"line":482},[69,15131,3644],{"emptyLinePlaceholder":1325},[69,15133,15134,15136,15138],{"class":71,"line":497},[69,15135,5334],{"class":82},[69,15137,5337],{"class":90},[69,15139,130],{"class":86},[69,15141,15142],{"class":71,"line":502},[69,15143,142],{"class":86},[29,15145,15146],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15148,15150],{"id":15149},"_73函数重载","7.3函数重载",[29,15152,15153],{},"意思是函数名是可以相同的",[19,15155,15157],{"id":15156},"_731基本语法","7.3.1基本语法",[29,15159,15160],{},"作用：函数名可以相同，提高复用性",[29,15162,15163],{},[195,15164,15165],{},"函数重载满足条件：",[162,15167,15168,15171,15174],{},[40,15169,15170],{},"同一个作用域下",[40,15172,15173],{},"函数名称相同",[40,15175,15176,15177,15180,15181,15184,15185],{},"函数参数",[195,15178,15179],{},"类型不同","  或者 ",[195,15182,15183],{},"个数不同"," 或者 ",[195,15186,15187],{},"顺序不同",[29,15189,15190,15193],{},[195,15191,15192],{},"注意:","  函数的返回值不可以作为函数重载的条件",[59,15195,15197],{"className":11183,"code":15196,"language":11185,"meta":64,"style":64},"\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",[66,15198,15199,15204,15212,15216,15229,15233,15247,15251,15264,15268,15283,15287,15300,15304,15325,15329,15342,15346,15366,15370,15383,15387,15391,15396,15401,15406,15411,15416,15420,15424,15432,15436,15442,15452,15462,15476,15491,15495,15505,15509,15517],{"__ignoreMap":64},[69,15200,15201],{"class":71,"line":72},[69,15202,15203],{"class":75},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[69,15205,15206,15208,15210],{"class":71,"line":79},[69,15207,6606],{"class":82},[69,15209,12627],{"class":109},[69,15211,3220],{"class":86},[69,15213,15214],{"class":71,"line":106},[69,15215,2797],{"class":86},[69,15217,15218,15220,15222,15225,15227],{"class":71,"line":116},[69,15219,7771],{"class":86},[69,15221,2429],{"class":82},[69,15223,15224],{"class":1022}," \"func 的调用！\"",[69,15226,2696],{"class":82},[69,15228,10082],{"class":86},[69,15230,15231],{"class":71,"line":133},[69,15232,142],{"class":86},[69,15234,15235,15237,15239,15241,15243,15245],{"class":71,"line":139},[69,15236,6606],{"class":82},[69,15238,12627],{"class":109},[69,15240,1398],{"class":86},[69,15242,1401],{"class":82},[69,15244,2650],{"class":6458},[69,15246,1404],{"class":86},[69,15248,15249],{"class":71,"line":401},[69,15250,2797],{"class":86},[69,15252,15253,15255,15257,15260,15262],{"class":71,"line":470},[69,15254,7771],{"class":86},[69,15256,2429],{"class":82},[69,15258,15259],{"class":1022}," \"func (int a) 的调用！\"",[69,15261,2696],{"class":82},[69,15263,10082],{"class":86},[69,15265,15266],{"class":71,"line":475},[69,15267,142],{"class":86},[69,15269,15270,15272,15274,15276,15279,15281],{"class":71,"line":482},[69,15271,6606],{"class":82},[69,15273,12627],{"class":109},[69,15275,1398],{"class":86},[69,15277,15278],{"class":82},"double",[69,15280,2650],{"class":6458},[69,15282,1404],{"class":86},[69,15284,15285],{"class":71,"line":497},[69,15286,2797],{"class":86},[69,15288,15289,15291,15293,15296,15298],{"class":71,"line":502},[69,15290,7771],{"class":86},[69,15292,2429],{"class":82},[69,15294,15295],{"class":1022}," \"func (double a)的调用！\"",[69,15297,2696],{"class":82},[69,15299,10082],{"class":86},[69,15301,15302],{"class":71,"line":509},[69,15303,142],{"class":86},[69,15305,15306,15308,15310,15312,15314,15316,15319,15321,15323],{"class":71,"line":524},[69,15307,6606],{"class":82},[69,15309,12627],{"class":109},[69,15311,1398],{"class":86},[69,15313,1401],{"class":82},[69,15315,2650],{"class":6458},[69,15317,15318],{"class":86}," ,",[69,15320,15278],{"class":82},[69,15322,4077],{"class":6458},[69,15324,1404],{"class":86},[69,15326,15327],{"class":71,"line":2888},[69,15328,2797],{"class":86},[69,15330,15331,15333,15335,15338,15340],{"class":71,"line":2893},[69,15332,7771],{"class":86},[69,15334,2429],{"class":82},[69,15336,15337],{"class":1022}," \"func (int a ,double b) 的调用！\"",[69,15339,2696],{"class":82},[69,15341,10082],{"class":86},[69,15343,15344],{"class":71,"line":2899},[69,15345,142],{"class":86},[69,15347,15348,15350,15352,15354,15356,15358,15360,15362,15364],{"class":71,"line":2919},[69,15349,6606],{"class":82},[69,15351,12627],{"class":109},[69,15353,1398],{"class":86},[69,15355,15278],{"class":82},[69,15357,2650],{"class":6458},[69,15359,15318],{"class":86},[69,15361,1401],{"class":82},[69,15363,4077],{"class":6458},[69,15365,1404],{"class":86},[69,15367,15368],{"class":71,"line":2924},[69,15369,2797],{"class":86},[69,15371,15372,15374,15376,15379,15381],{"class":71,"line":2938},[69,15373,7771],{"class":86},[69,15375,2429],{"class":82},[69,15377,15378],{"class":1022}," \"func (double a ,int b)的调用！\"",[69,15380,2696],{"class":82},[69,15382,10082],{"class":86},[69,15384,15385],{"class":71,"line":2943},[69,15386,142],{"class":86},[69,15388,15389],{"class":71,"line":2972},[69,15390,3644],{"emptyLinePlaceholder":1325},[69,15392,15393],{"class":71,"line":2977},[69,15394,15395],{"class":75},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[69,15397,15398],{"class":71,"line":2994},[69,15399,15400],{"class":75},"\u002F\u002Fint func(double a, int b)\n",[69,15402,15403],{"class":71,"line":2999},[69,15404,15405],{"class":75},"\u002F\u002F{\n",[69,15407,15408],{"class":71,"line":3004},[69,15409,15410],{"class":75},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[69,15412,15413],{"class":71,"line":3009},[69,15414,15415],{"class":75},"\u002F\u002F}\n",[69,15417,15418],{"class":71,"line":3023},[69,15419,3644],{"emptyLinePlaceholder":1325},[69,15421,15422],{"class":71,"line":3028},[69,15423,3644],{"emptyLinePlaceholder":1325},[69,15425,15426,15428,15430],{"class":71,"line":3821},[69,15427,1401],{"class":82},[69,15429,3217],{"class":109},[69,15431,12095],{"class":86},[69,15433,15434],{"class":71,"line":3835},[69,15435,3644],{"emptyLinePlaceholder":1325},[69,15437,15438,15440],{"class":71,"line":3843},[69,15439,14526],{"class":109},[69,15441,6878],{"class":86},[69,15443,15444,15446,15448,15450],{"class":71,"line":3848},[69,15445,14526],{"class":109},[69,15447,1398],{"class":86},[69,15449,390],{"class":90},[69,15451,3963],{"class":86},[69,15453,15454,15456,15458,15460],{"class":71,"line":3854},[69,15455,14526],{"class":109},[69,15457,1398],{"class":86},[69,15459,1444],{"class":90},[69,15461,3963],{"class":86},[69,15463,15464,15466,15468,15470,15472,15474],{"class":71,"line":3860},[69,15465,14526],{"class":109},[69,15467,1398],{"class":86},[69,15469,390],{"class":90},[69,15471,1767],{"class":86},[69,15473,1444],{"class":90},[69,15475,3963],{"class":86},[69,15477,15478,15480,15482,15484,15487,15489],{"class":71,"line":3865},[69,15479,14526],{"class":109},[69,15481,1398],{"class":86},[69,15483,1444],{"class":90},[69,15485,15486],{"class":86}," , ",[69,15488,390],{"class":90},[69,15490,3963],{"class":86},[69,15492,15493],{"class":71,"line":9190},[69,15494,14451],{"class":86},[69,15496,15497,15499,15501,15503],{"class":71,"line":9214},[69,15498,3547],{"class":109},[69,15500,1398],{"class":86},[69,15502,3552],{"class":1022},[69,15504,3963],{"class":86},[69,15506,15507],{"class":71,"line":9219},[69,15508,3644],{"emptyLinePlaceholder":1325},[69,15510,15511,15513,15515],{"class":71,"line":9225},[69,15512,5334],{"class":82},[69,15514,5337],{"class":90},[69,15516,130],{"class":86},[69,15518,15519],{"class":71,"line":9252},[69,15520,142],{"class":86},[29,15522,15523],{},"重点：函数返回值不可以作为函数重载条件！",[19,15525,15527],{"id":15526},"_732注意事项","7.3.2注意事项",[162,15529,15530,15533],{},[40,15531,15532],{},"引用作为重载条件!!!",[40,15534,15535],{},"函数重载碰到函数默认参数",[59,15537,15539],{"className":1386,"code":15538,"language":1388,"meta":64,"style":64},"\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",[66,15540,15541,15546,15551,15555,15571,15575,15588,15592,15596,15614,15618,15631,15635,15639,15643,15648,15652,15676,15680,15693,15697,15701,15715,15719,15732,15736,15740,15748,15752,15764,15774,15787,15791,15795,15803,15807,15817,15821,15829],{"__ignoreMap":64},[69,15542,15543],{"class":71,"line":72},[69,15544,15545],{"class":75},"\u002F\u002F函数重载注意事项\n",[69,15547,15548],{"class":71,"line":79},[69,15549,15550],{"class":75},"\u002F\u002F1、引用作为重载条件\n",[69,15552,15553],{"class":71,"line":106},[69,15554,3644],{"emptyLinePlaceholder":1325},[69,15556,15557,15559,15561,15563,15565,15567,15569],{"class":71,"line":116},[69,15558,6606],{"class":82},[69,15560,12627],{"class":109},[69,15562,1398],{"class":86},[69,15564,1401],{"class":82},[69,15566,11826],{"class":82},[69,15568,187],{"class":6458},[69,15570,1404],{"class":86},[69,15572,15573],{"class":71,"line":133},[69,15574,2797],{"class":86},[69,15576,15577,15579,15581,15584,15586],{"class":71,"line":139},[69,15578,7771],{"class":86},[69,15580,2429],{"class":82},[69,15582,15583],{"class":1022}," \"func (int &a) 调用 \"",[69,15585,2696],{"class":82},[69,15587,10082],{"class":86},[69,15589,15590],{"class":71,"line":401},[69,15591,142],{"class":86},[69,15593,15594],{"class":71,"line":470},[69,15595,3644],{"emptyLinePlaceholder":1325},[69,15597,15598,15600,15602,15604,15606,15608,15610,15612],{"class":71,"line":475},[69,15599,6606],{"class":82},[69,15601,12627],{"class":109},[69,15603,1398],{"class":86},[69,15605,8034],{"class":82},[69,15607,3626],{"class":82},[69,15609,11826],{"class":82},[69,15611,187],{"class":6458},[69,15613,1404],{"class":86},[69,15615,15616],{"class":71,"line":482},[69,15617,2797],{"class":86},[69,15619,15620,15622,15624,15627,15629],{"class":71,"line":497},[69,15621,7771],{"class":86},[69,15623,2429],{"class":82},[69,15625,15626],{"class":1022}," \"func (const int &a) 调用 \"",[69,15628,2696],{"class":82},[69,15630,10082],{"class":86},[69,15632,15633],{"class":71,"line":502},[69,15634,142],{"class":86},[69,15636,15637],{"class":71,"line":509},[69,15638,3644],{"emptyLinePlaceholder":1325},[69,15640,15641],{"class":71,"line":524},[69,15642,3644],{"emptyLinePlaceholder":1325},[69,15644,15645],{"class":71,"line":2888},[69,15646,15647],{"class":75},"\u002F\u002F2、函数重载碰到函数默认参数\n",[69,15649,15650],{"class":71,"line":2893},[69,15651,3644],{"emptyLinePlaceholder":1325},[69,15653,15654,15656,15658,15660,15662,15664,15666,15668,15670,15672,15674],{"class":71,"line":2899},[69,15655,6606],{"class":82},[69,15657,14859],{"class":109},[69,15659,1398],{"class":86},[69,15661,1401],{"class":82},[69,15663,2650],{"class":6458},[69,15665,13677],{"class":86},[69,15667,1401],{"class":82},[69,15669,4077],{"class":6458},[69,15671,14805],{"class":82},[69,15673,3282],{"class":90},[69,15675,1404],{"class":86},[69,15677,15678],{"class":71,"line":2919},[69,15679,2797],{"class":86},[69,15681,15682,15684,15686,15689,15691],{"class":71,"line":2924},[69,15683,7771],{"class":86},[69,15685,2429],{"class":82},[69,15687,15688],{"class":1022}," \"func2(int a, int b = 10) 调用\"",[69,15690,2696],{"class":82},[69,15692,10082],{"class":86},[69,15694,15695],{"class":71,"line":2938},[69,15696,142],{"class":86},[69,15698,15699],{"class":71,"line":2943},[69,15700,3644],{"emptyLinePlaceholder":1325},[69,15702,15703,15705,15707,15709,15711,15713],{"class":71,"line":2972},[69,15704,6606],{"class":82},[69,15706,14859],{"class":109},[69,15708,1398],{"class":86},[69,15710,1401],{"class":82},[69,15712,2650],{"class":6458},[69,15714,1404],{"class":86},[69,15716,15717],{"class":71,"line":2977},[69,15718,2797],{"class":86},[69,15720,15721,15723,15725,15728,15730],{"class":71,"line":2994},[69,15722,7771],{"class":86},[69,15724,2429],{"class":82},[69,15726,15727],{"class":1022}," \"func2(int a) 调用\"",[69,15729,2696],{"class":82},[69,15731,10082],{"class":86},[69,15733,15734],{"class":71,"line":2999},[69,15735,142],{"class":86},[69,15737,15738],{"class":71,"line":3004},[69,15739,3644],{"emptyLinePlaceholder":1325},[69,15741,15742,15744,15746],{"class":71,"line":3009},[69,15743,1401],{"class":82},[69,15745,3217],{"class":109},[69,15747,12095],{"class":86},[69,15749,15750],{"class":71,"line":3023},[69,15751,14451],{"class":86},[69,15753,15754,15756,15758,15760,15762],{"class":71,"line":3028},[69,15755,3229],{"class":82},[69,15757,12111],{"class":86},[69,15759,1019],{"class":82},[69,15761,3282],{"class":90},[69,15763,130],{"class":86},[69,15765,15766,15768,15771],{"class":71,"line":3821},[69,15767,14526],{"class":109},[69,15769,15770],{"class":86},"(a);",[69,15772,15773],{"class":75}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[69,15775,15776,15778,15780,15782,15784],{"class":71,"line":3835},[69,15777,14526],{"class":109},[69,15779,1398],{"class":86},[69,15781,390],{"class":90},[69,15783,7208],{"class":86},[69,15785,15786],{"class":75},"\u002F\u002F调用有const   10是个常量\n",[69,15788,15789],{"class":71,"line":3843},[69,15790,3644],{"emptyLinePlaceholder":1325},[69,15792,15793],{"class":71,"line":3848},[69,15794,3644],{"emptyLinePlaceholder":1325},[69,15796,15797,15800],{"class":71,"line":3854},[69,15798,15799],{"class":75},"    \u002F\u002Ffunc2(10);",[69,15801,15802],{"class":75}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[69,15804,15805],{"class":71,"line":3860},[69,15806,3644],{"emptyLinePlaceholder":1325},[69,15808,15809,15811,15813,15815],{"class":71,"line":3865},[69,15810,3547],{"class":109},[69,15812,1398],{"class":86},[69,15814,3552],{"class":1022},[69,15816,3963],{"class":86},[69,15818,15819],{"class":71,"line":9190},[69,15820,3644],{"emptyLinePlaceholder":1325},[69,15822,15823,15825,15827],{"class":71,"line":9214},[69,15824,5334],{"class":82},[69,15826,5337],{"class":90},[69,15828,130],{"class":86},[69,15830,15831],{"class":71,"line":9219},[69,15832,142],{"class":86},[1297,15834,15835],{},"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":64,"searchDepth":79,"depth":79,"links":15837},[15838,15839,15840],{"id":14770,"depth":79,"text":14771},{"id":15027,"depth":79,"text":15028},{"id":15149,"depth":79,"text":15150,"children":15841},[15842,15843],{"id":15156,"depth":106,"text":15157},{"id":15526,"depth":106,"text":15527},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14762,"description":64},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15850,"title":15851,"body":15852,"description":24604,"extension":1323,"meta":24605,"navigation":1325,"path":24606,"seo":24607,"stem":24608,"__hash__":24609},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15853,"toc":24585},[15854,15857,15863,15870,15874,15877,15880,15883,15887,15891,15894,15897,15905,15910,15913,15920,15925,16084,16087,16340,16343,16346,16349,16354,16357,16360,16371,16376,16612,16616,16626,16629,16637,16784,16788,16791,16794,16798,17242,17246,17254,17262,18174,18181,18186,18814,18817,18820,18823,18942,18945,19032,19035,19161,19164,19258,19261,19614,19618,19626,19630,19637,19640,19643,19654,19660,19665,19677,19685,19705,19713,19730,19916,19919,19923,19926,19929,19932,19935,19938,19941,19944,20404,20410,20414,20417,20428,21015,21018,21507,21511,21514,21517,21520,21523,21526,21534,21930,21934,21937,21940,22387,22390,22393,22398,22401,22406,22409,22413,22416,22418,22424,22427,22733,22743,22784,22788,22791,22793,22826,22829,23136,23138,23153,23156,23179,23188,23194,23197,23201,23204,23207,23212,23223,23228,23236,23241,23371,23374,23377,23552,23557,23769,23773,23776,23890,23895,24134,24138,24142,24145,24148,24153,24258,24261,24264,24267,24271,24382,24385,24388,24393,24445,24448,24451,24456,24502,24505,24510,24578,24580,24583],[10,15855,15851],{"id":15856},"_8类和对象",[29,15858,15859,15860],{},"C++面向对象的三大特性为",[195,15861,15862],{},"封装、继承、多态",[29,15864,15865,15866,15869],{},"C++认为",[195,15867,15868],{},"万事万物都皆为对象","，对象上有其属性和行为",[29,15871,15872],{},[195,15873,327],{},[29,15875,15876],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[29,15878,15879],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[29,15881,15882],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15884,15886],{"id":15885},"_81封装","8.1封装",[19,15888,15890],{"id":15889},"_811封装的意义","8.1.1封装的意义",[29,15892,15893],{},"封装是C++面向对象三大特性之一",[29,15895,15896],{},"封装的意义：",[162,15898,15899,15902],{},[40,15900,15901],{},"将属性和行为作为一个整体，表现生活中的事物",[40,15903,15904],{},"将属性和行为加以权限控制",[29,15906,15907],{},[195,15908,15909],{},"封装意义一：",[29,15911,15912],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[29,15914,15915,15036,15917],{},[195,15916,6425],{},[66,15918,15919],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[37,15921,15922],{},[40,15923,15924],{},"**示例1：**设计一个圆类，求圆的周长",[59,15926,15928],{"className":1386,"code":15927,"language":1388,"meta":64,"style":64},"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",[66,15929,15930,15938,15942,15947,15952,15957,15962,15969,15974,15984,15988,16006,16010,16014,16022,16026,16031,16036,16041,16046,16057,16080],{"__ignoreMap":64},[69,15931,15932,15935],{"class":71,"line":72},[69,15933,15934],{"class":82},"class",[69,15936,15937],{"class":109}," Circle\n",[69,15939,15940],{"class":71,"line":79},[69,15941,2797],{"class":86},[69,15943,15944],{"class":71,"line":106},[69,15945,15946],{"class":75},"    \u002F\u002F访问权限\n",[69,15948,15949],{"class":71,"line":116},[69,15950,15951],{"class":75},"    \u002F\u002F公共权限\n",[69,15953,15954],{"class":71,"line":133},[69,15955,15956],{"class":82},"public:\n",[69,15958,15959],{"class":71,"line":139},[69,15960,15961],{"class":75},"    \u002F\u002F属性\n",[69,15963,15964,15966],{"class":71,"line":401},[69,15965,3229],{"class":82},[69,15967,15968],{"class":86}," m_r;\n",[69,15970,15971],{"class":71,"line":470},[69,15972,15973],{"class":75},"    \u002F\u002F行为\n",[69,15975,15976,15979,15982],{"class":71,"line":475},[69,15977,15978],{"class":82},"    double",[69,15980,15981],{"class":109}," calculateZC",[69,15983,3220],{"class":86},[69,15985,15986],{"class":71,"line":482},[69,15987,3274],{"class":86},[69,15989,15990,15993,15996,15998,16001,16003],{"class":71,"line":497},[69,15991,15992],{"class":82},"        return",[69,15994,15995],{"class":90}," 2",[69,15997,1843],{"class":82},[69,15999,16000],{"class":86},"PI",[69,16002,1843],{"class":82},[69,16004,16005],{"class":86},"m_r;\n",[69,16007,16008],{"class":71,"line":502},[69,16009,3431],{"class":86},[69,16011,16012],{"class":71,"line":509},[69,16013,5239],{"class":86},[69,16015,16016,16018,16020],{"class":71,"line":524},[69,16017,1401],{"class":82},[69,16019,3217],{"class":109},[69,16021,3220],{"class":86},[69,16023,16024],{"class":71,"line":2888},[69,16025,2797],{"class":86},[69,16027,16028],{"class":71,"line":2893},[69,16029,16030],{"class":75},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[69,16032,16033],{"class":71,"line":2899},[69,16034,16035],{"class":75},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[69,16037,16038],{"class":71,"line":2919},[69,16039,16040],{"class":86},"    Circle c1;\n",[69,16042,16043],{"class":71,"line":2924},[69,16044,16045],{"class":75},"    \u002F\u002F给圆对象 的属性进行赋值\n",[69,16047,16048,16051,16053,16055],{"class":71,"line":2938},[69,16049,16050],{"class":86},"    c1.m_r",[69,16052,1019],{"class":82},[69,16054,390],{"class":90},[69,16056,130],{"class":86},[69,16058,16059,16061,16063,16066,16068,16071,16074,16076,16078],{"class":71,"line":2943},[69,16060,2802],{"class":86},[69,16062,2429],{"class":82},[69,16064,16065],{"class":1022},"\"圆的周长\"",[69,16067,2429],{"class":82},[69,16069,16070],{"class":86},"c1.",[69,16072,16073],{"class":109},"calculateZC",[69,16075,3671],{"class":86},[69,16077,2429],{"class":82},[69,16079,2451],{"class":86},[69,16081,16082],{"class":71,"line":2972},[69,16083,142],{"class":86},[29,16085,16086],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[59,16088,16090],{"className":1386,"code":16089,"language":1388,"meta":64,"style":64},"#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",[66,16091,16092,16098,16108,16114,16120,16124,16128,16133,16140,16145,16163,16167,16177,16181,16186,16202,16206,16216,16220,16225,16233,16237,16269,16273,16277,16285,16289,16294,16299,16313,16327,16336],{"__ignoreMap":64},[69,16093,16094,16096],{"class":71,"line":72},[69,16095,3194],{"class":82},[69,16097,3197],{"class":1022},[69,16099,16100,16102,16104,16106],{"class":71,"line":79},[69,16101,3202],{"class":82},[69,16103,3205],{"class":82},[69,16105,3208],{"class":109},[69,16107,130],{"class":86},[69,16109,16110,16112],{"class":71,"line":106},[69,16111,3194],{"class":82},[69,16113,8991],{"class":1022},[69,16115,16116,16118],{"class":71,"line":116},[69,16117,15934],{"class":82},[69,16119,9004],{"class":109},[69,16121,16122],{"class":71,"line":133},[69,16123,2797],{"class":86},[69,16125,16126],{"class":71,"line":139},[69,16127,15956],{"class":82},[69,16129,16130],{"class":71,"line":401},[69,16131,16132],{"class":86},"    string m_name;\n",[69,16134,16135,16137],{"class":71,"line":470},[69,16136,3229],{"class":82},[69,16138,16139],{"class":86}," m_id;\n",[69,16141,16142],{"class":71,"line":475},[69,16143,16144],{"class":75},"    \u002F\u002F赋值姓名\n",[69,16146,16147,16150,16153,16155,16158,16161],{"class":71,"line":482},[69,16148,16149],{"class":82},"    void",[69,16151,16152],{"class":109}," setName",[69,16154,1398],{"class":86},[69,16156,16157],{"class":109},"string",[69,16159,16160],{"class":6458}," name",[69,16162,1404],{"class":86},[69,16164,16165],{"class":71,"line":497},[69,16166,3274],{"class":86},[69,16168,16169,16172,16174],{"class":71,"line":502},[69,16170,16171],{"class":86},"        m_name",[69,16173,1019],{"class":82},[69,16175,16176],{"class":86},"name;\n",[69,16178,16179],{"class":71,"line":509},[69,16180,3431],{"class":86},[69,16182,16183],{"class":71,"line":524},[69,16184,16185],{"class":75},"    \u002F\u002F赋值学号\n",[69,16187,16188,16190,16193,16195,16197,16200],{"class":71,"line":2888},[69,16189,16149],{"class":82},[69,16191,16192],{"class":109}," setId",[69,16194,1398],{"class":86},[69,16196,1401],{"class":82},[69,16198,16199],{"class":6458}," id",[69,16201,1404],{"class":86},[69,16203,16204],{"class":71,"line":2893},[69,16205,3274],{"class":86},[69,16207,16208,16211,16213],{"class":71,"line":2899},[69,16209,16210],{"class":86},"        m_id",[69,16212,1019],{"class":82},[69,16214,16215],{"class":86},"id;\n",[69,16217,16218],{"class":71,"line":2919},[69,16219,3431],{"class":86},[69,16221,16222],{"class":71,"line":2924},[69,16223,16224],{"class":75},"    \u002F\u002F打印学生信息\n",[69,16226,16227,16229,16231],{"class":71,"line":2938},[69,16228,16149],{"class":82},[69,16230,10857],{"class":109},[69,16232,3220],{"class":86},[69,16234,16235],{"class":71,"line":2943},[69,16236,3274],{"class":86},[69,16238,16239,16241,16243,16246,16248,16251,16253,16255,16257,16260,16262,16265,16267],{"class":71,"line":2972},[69,16240,4695],{"class":86},[69,16242,2429],{"class":82},[69,16244,16245],{"class":1022},"\"姓名：\"",[69,16247,2429],{"class":82},[69,16249,16250],{"class":86},"m_name",[69,16252,2429],{"class":82},[69,16254,5603],{"class":1022},[69,16256,2429],{"class":82},[69,16258,16259],{"class":1022},"\"学号：\"",[69,16261,2429],{"class":82},[69,16263,16264],{"class":86},"m_id",[69,16266,2429],{"class":82},[69,16268,2451],{"class":86},[69,16270,16271],{"class":71,"line":2977},[69,16272,3431],{"class":86},[69,16274,16275],{"class":71,"line":2994},[69,16276,5239],{"class":86},[69,16278,16279,16281,16283],{"class":71,"line":2999},[69,16280,1401],{"class":82},[69,16282,3217],{"class":109},[69,16284,3220],{"class":86},[69,16286,16287],{"class":71,"line":3004},[69,16288,2797],{"class":86},[69,16290,16291],{"class":71,"line":3009},[69,16292,16293],{"class":75},"    \u002F\u002F实例化\n",[69,16295,16296],{"class":71,"line":3023},[69,16297,16298],{"class":86},"    Student s1;\n",[69,16300,16301,16304,16307,16309,16311],{"class":71,"line":3028},[69,16302,16303],{"class":86},"    s1.",[69,16305,16306],{"class":109},"setName",[69,16308,1398],{"class":86},[69,16310,9158],{"class":1022},[69,16312,3963],{"class":86},[69,16314,16315,16317,16320,16322,16325],{"class":71,"line":3821},[69,16316,16303],{"class":86},[69,16318,16319],{"class":109},"setId",[69,16321,1398],{"class":86},[69,16323,16324],{"class":90},"123456",[69,16326,3963],{"class":86},[69,16328,16329,16331,16334],{"class":71,"line":3835},[69,16330,16303],{"class":86},[69,16332,16333],{"class":109},"printInfo",[69,16335,6878],{"class":86},[69,16337,16338],{"class":71,"line":3843},[69,16339,142],{"class":86},[29,16341,16342],{},"类中的属性和行为统称为成员",[29,16344,16345],{},"属性：成员属性(成员变量)",[29,16347,16348],{},"方法：成员函数(成员方法)",[29,16350,16351],{},[195,16352,16353],{},"封装意义二：",[29,16355,16356],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[29,16358,16359],{},"访问权限有三种：",[37,16361,16362,16365,16368],{},[40,16363,16364],{},"public        公共权限",[40,16366,16367],{},"protected 保护权限",[40,16369,16370],{},"private      私有权限",[29,16372,16373],{},[195,16374,16375],{},"示例：",[59,16377,16379],{"className":11183,"code":16378,"language":11185,"meta":64,"style":64},"\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",[66,16380,16381,16386,16391,16396,16401,16405,16412,16416,16421,16425,16430,16434,16439,16444,16449,16453,16458,16463,16470,16474,16478,16486,16490,16501,16513,16525,16529,16533,16537,16545,16549,16554,16566,16574,16582,16586,16596,16600,16608],{"__ignoreMap":64},[69,16382,16383],{"class":71,"line":72},[69,16384,16385],{"class":75},"\u002F\u002F三种权限\n",[69,16387,16388],{"class":71,"line":79},[69,16389,16390],{"class":75},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[69,16392,16393],{"class":71,"line":106},[69,16394,16395],{"class":75},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[69,16397,16398],{"class":71,"line":116},[69,16399,16400],{"class":75},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[69,16402,16403],{"class":71,"line":133},[69,16404,3644],{"emptyLinePlaceholder":1325},[69,16406,16407,16409],{"class":71,"line":139},[69,16408,15934],{"class":82},[69,16410,16411],{"class":109}," Person\n",[69,16413,16414],{"class":71,"line":401},[69,16415,2797],{"class":86},[69,16417,16418],{"class":71,"line":470},[69,16419,16420],{"class":75},"    \u002F\u002F姓名  公共权限\n",[69,16422,16423],{"class":71,"line":475},[69,16424,15956],{"class":82},[69,16426,16427],{"class":71,"line":482},[69,16428,16429],{"class":86},"    string m_Name;\n",[69,16431,16432],{"class":71,"line":497},[69,16433,3644],{"emptyLinePlaceholder":1325},[69,16435,16436],{"class":71,"line":502},[69,16437,16438],{"class":75},"    \u002F\u002F汽车  保护权限\n",[69,16440,16441],{"class":71,"line":509},[69,16442,16443],{"class":82},"protected:\n",[69,16445,16446],{"class":71,"line":524},[69,16447,16448],{"class":86},"    string m_Car;\n",[69,16450,16451],{"class":71,"line":2888},[69,16452,3644],{"emptyLinePlaceholder":1325},[69,16454,16455],{"class":71,"line":2893},[69,16456,16457],{"class":75},"    \u002F\u002F银行卡密码  私有权限\n",[69,16459,16460],{"class":71,"line":2899},[69,16461,16462],{"class":82},"private:\n",[69,16464,16465,16467],{"class":71,"line":2919},[69,16466,3229],{"class":82},[69,16468,16469],{"class":86}," m_Password;\n",[69,16471,16472],{"class":71,"line":2924},[69,16473,3644],{"emptyLinePlaceholder":1325},[69,16475,16476],{"class":71,"line":2938},[69,16477,15956],{"class":82},[69,16479,16480,16482,16484],{"class":71,"line":2943},[69,16481,16149],{"class":82},[69,16483,12627],{"class":109},[69,16485,3220],{"class":86},[69,16487,16488],{"class":71,"line":2972},[69,16489,3274],{"class":86},[69,16491,16492,16495,16497,16499],{"class":71,"line":2977},[69,16493,16494],{"class":86},"        m_Name ",[69,16496,1019],{"class":82},[69,16498,10180],{"class":1022},[69,16500,130],{"class":86},[69,16502,16503,16506,16508,16511],{"class":71,"line":2994},[69,16504,16505],{"class":86},"        m_Car ",[69,16507,1019],{"class":82},[69,16509,16510],{"class":1022}," \"拖拉机\"",[69,16512,130],{"class":86},[69,16514,16515,16518,16520,16523],{"class":71,"line":2999},[69,16516,16517],{"class":86},"        m_Password ",[69,16519,1019],{"class":82},[69,16521,16522],{"class":90}," 123456",[69,16524,130],{"class":86},[69,16526,16527],{"class":71,"line":3004},[69,16528,3431],{"class":86},[69,16530,16531],{"class":71,"line":3009},[69,16532,5239],{"class":86},[69,16534,16535],{"class":71,"line":3023},[69,16536,3644],{"emptyLinePlaceholder":1325},[69,16538,16539,16541,16543],{"class":71,"line":3028},[69,16540,1401],{"class":82},[69,16542,3217],{"class":109},[69,16544,12095],{"class":86},[69,16546,16547],{"class":71,"line":3821},[69,16548,3644],{"emptyLinePlaceholder":1325},[69,16550,16551],{"class":71,"line":3835},[69,16552,16553],{"class":86},"    Person p;\n",[69,16555,16556,16559,16561,16564],{"class":71,"line":3843},[69,16557,16558],{"class":86},"    p.m_Name ",[69,16560,1019],{"class":82},[69,16562,16563],{"class":1022}," \"李四\"",[69,16565,130],{"class":86},[69,16567,16568,16571],{"class":71,"line":3848},[69,16569,16570],{"class":75},"    \u002F\u002Fp.m_Car = \"奔驰\";",[69,16572,16573],{"class":75},"  \u002F\u002F保护权限类外访问不到\n",[69,16575,16576,16579],{"class":71,"line":3854},[69,16577,16578],{"class":75},"    \u002F\u002Fp.m_Password = 123;",[69,16580,16581],{"class":75}," \u002F\u002F私有权限类外访问不到\n",[69,16583,16584],{"class":71,"line":3860},[69,16585,3644],{"emptyLinePlaceholder":1325},[69,16587,16588,16590,16592,16594],{"class":71,"line":3865},[69,16589,3547],{"class":109},[69,16591,1398],{"class":86},[69,16593,3552],{"class":1022},[69,16595,3963],{"class":86},[69,16597,16598],{"class":71,"line":9190},[69,16599,3644],{"emptyLinePlaceholder":1325},[69,16601,16602,16604,16606],{"class":71,"line":9214},[69,16603,5334],{"class":82},[69,16605,5337],{"class":90},[69,16607,130],{"class":86},[69,16609,16610],{"class":71,"line":9219},[69,16611,142],{"class":86},[19,16613,16615],{"id":16614},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[29,16617,16618,16619,16622,16623],{},"在C++中 struct和class唯一的",[195,16620,16621],{},"区别","就在于 ",[195,16624,16625],{},"默认的访问权限不同",[29,16627,16628],{},"区别：",[162,16630,16631,16634],{},[40,16632,16633],{},"struct 默认权限为公共",[40,16635,16636],{},"class   默认权限为私有",[59,16638,16640],{"className":11183,"code":16639,"language":11185,"meta":64,"style":64},"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",[66,16641,16642,16649,16653,16663,16667,16671,16678,16682,16692,16696,16700,16708,16712,16717,16731,16735,16740,16754,16758,16768,16772,16780],{"__ignoreMap":64},[69,16643,16644,16646],{"class":71,"line":72},[69,16645,15934],{"class":82},[69,16647,16648],{"class":109}," C1\n",[69,16650,16651],{"class":71,"line":79},[69,16652,2797],{"class":86},[69,16654,16655,16657,16660],{"class":71,"line":106},[69,16656,3229],{"class":82},[69,16658,16659],{"class":86},"  m_A;",[69,16661,16662],{"class":75}," \u002F\u002F默认是私有权限\n",[69,16664,16665],{"class":71,"line":116},[69,16666,5239],{"class":86},[69,16668,16669],{"class":71,"line":133},[69,16670,3644],{"emptyLinePlaceholder":1325},[69,16672,16673,16675],{"class":71,"line":139},[69,16674,9001],{"class":82},[69,16676,16677],{"class":109}," C2\n",[69,16679,16680],{"class":71,"line":401},[69,16681,2797],{"class":86},[69,16683,16684,16686,16689],{"class":71,"line":470},[69,16685,3229],{"class":82},[69,16687,16688],{"class":86}," m_A;",[69,16690,16691],{"class":75},"  \u002F\u002F默认是公共权限\n",[69,16693,16694],{"class":71,"line":475},[69,16695,5239],{"class":86},[69,16697,16698],{"class":71,"line":482},[69,16699,3644],{"emptyLinePlaceholder":1325},[69,16701,16702,16704,16706],{"class":71,"line":497},[69,16703,1401],{"class":82},[69,16705,3217],{"class":109},[69,16707,12095],{"class":86},[69,16709,16710],{"class":71,"line":502},[69,16711,3644],{"emptyLinePlaceholder":1325},[69,16713,16714],{"class":71,"line":509},[69,16715,16716],{"class":86},"    C1 c1;\n",[69,16718,16719,16722,16724,16726,16728],{"class":71,"line":524},[69,16720,16721],{"class":86},"    c1.m_A ",[69,16723,1019],{"class":82},[69,16725,3282],{"class":90},[69,16727,1450],{"class":86},[69,16729,16730],{"class":75}," \u002F\u002F错误，访问权限是私有\n",[69,16732,16733],{"class":71,"line":2888},[69,16734,3644],{"emptyLinePlaceholder":1325},[69,16736,16737],{"class":71,"line":2893},[69,16738,16739],{"class":86},"    C2 c2;\n",[69,16741,16742,16745,16747,16749,16751],{"class":71,"line":2899},[69,16743,16744],{"class":86},"    c2.m_A ",[69,16746,1019],{"class":82},[69,16748,3282],{"class":90},[69,16750,1450],{"class":86},[69,16752,16753],{"class":75}," \u002F\u002F正确，访问权限是公共\n",[69,16755,16756],{"class":71,"line":2919},[69,16757,3644],{"emptyLinePlaceholder":1325},[69,16759,16760,16762,16764,16766],{"class":71,"line":2924},[69,16761,3547],{"class":109},[69,16763,1398],{"class":86},[69,16765,3552],{"class":1022},[69,16767,3963],{"class":86},[69,16769,16770],{"class":71,"line":2938},[69,16771,3644],{"emptyLinePlaceholder":1325},[69,16773,16774,16776,16778],{"class":71,"line":2943},[69,16775,5334],{"class":82},[69,16777,5337],{"class":90},[69,16779,130],{"class":86},[69,16781,16782],{"class":71,"line":2972},[69,16783,142],{"class":86},[19,16785,16787],{"id":16786},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[29,16789,16790],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[29,16792,16793],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[29,16795,16796],{},[195,16797,16375],{},[59,16799,16801],{"className":11183,"code":16800,"language":11185,"meta":64,"style":64},"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",[66,16802,16803,16812,16816,16820,16825,16839,16848,16852,16862,16866,16873,16877,16881,16885,16890,16899,16906,16910,16915,16931,16954,16967,16974,16978,16987,16991,16995,17000,17016,17026,17030,17034,17038,17046,17050,17060,17064,17072,17076,17080,17088,17092,17096,17101,17114,17137,17141,17146,17159,17181,17185,17190,17204,17212,17216,17226,17230,17238],{"__ignoreMap":64},[69,16804,16805,16807,16810],{"class":71,"line":72},[69,16806,15934],{"class":82},[69,16808,16809],{"class":109}," Person",[69,16811,113],{"class":86},[69,16813,16814],{"class":71,"line":79},[69,16815,15956],{"class":82},[69,16817,16818],{"class":71,"line":106},[69,16819,3644],{"emptyLinePlaceholder":1325},[69,16821,16822],{"class":71,"line":116},[69,16823,16824],{"class":75},"    \u002F\u002F姓名设置可读可写\n",[69,16826,16827,16829,16831,16833,16835,16837],{"class":71,"line":133},[69,16828,16149],{"class":82},[69,16830,16152],{"class":109},[69,16832,1398],{"class":86},[69,16834,16157],{"class":109},[69,16836,16160],{"class":6458},[69,16838,103],{"class":86},[69,16840,16841,16843,16845],{"class":71,"line":139},[69,16842,16494],{"class":86},[69,16844,1019],{"class":82},[69,16846,16847],{"class":86}," name;\n",[69,16849,16850],{"class":71,"line":401},[69,16851,3431],{"class":86},[69,16853,16854,16857,16860],{"class":71,"line":470},[69,16855,16856],{"class":109},"    string",[69,16858,16859],{"class":109}," getName",[69,16861,3220],{"class":86},[69,16863,16864],{"class":71,"line":475},[69,16865,3274],{"class":86},[69,16867,16868,16870],{"class":71,"line":482},[69,16869,15992],{"class":82},[69,16871,16872],{"class":86}," m_Name;\n",[69,16874,16875],{"class":71,"line":497},[69,16876,3431],{"class":86},[69,16878,16879],{"class":71,"line":502},[69,16880,3644],{"emptyLinePlaceholder":1325},[69,16882,16883],{"class":71,"line":509},[69,16884,3644],{"emptyLinePlaceholder":1325},[69,16886,16887],{"class":71,"line":524},[69,16888,16889],{"class":75},"    \u002F\u002F获取年龄 \n",[69,16891,16892,16894,16897],{"class":71,"line":2888},[69,16893,3229],{"class":82},[69,16895,16896],{"class":109}," getAge",[69,16898,12095],{"class":86},[69,16900,16901,16903],{"class":71,"line":2893},[69,16902,15992],{"class":82},[69,16904,16905],{"class":86}," m_Age;\n",[69,16907,16908],{"class":71,"line":2899},[69,16909,3431],{"class":86},[69,16911,16912],{"class":71,"line":2919},[69,16913,16914],{"class":75},"    \u002F\u002F设置年龄\n",[69,16916,16917,16919,16922,16924,16926,16929],{"class":71,"line":2924},[69,16918,16149],{"class":82},[69,16920,16921],{"class":109}," setAge",[69,16923,1398],{"class":86},[69,16925,1401],{"class":82},[69,16927,16928],{"class":6458}," age",[69,16930,103],{"class":86},[69,16932,16933,16935,16938,16940,16942,16944,16947,16949,16952],{"class":71,"line":2938},[69,16934,3741],{"class":82},[69,16936,16937],{"class":86}," (age ",[69,16939,1011],{"class":82},[69,16941,5337],{"class":90},[69,16943,4499],{"class":82},[69,16945,16946],{"class":86}," age ",[69,16948,2346],{"class":82},[69,16950,16951],{"class":90}," 150",[69,16953,103],{"class":86},[69,16955,16956,16958,16960,16963,16965],{"class":71,"line":2943},[69,16957,10961],{"class":86},[69,16959,2429],{"class":82},[69,16961,16962],{"class":1022}," \"你个老妖精!\"",[69,16964,2696],{"class":82},[69,16966,10082],{"class":86},[69,16968,16969,16972],{"class":71,"line":2972},[69,16970,16971],{"class":82},"            return",[69,16973,130],{"class":86},[69,16975,16976],{"class":71,"line":2977},[69,16977,3773],{"class":86},[69,16979,16980,16983,16985],{"class":71,"line":2994},[69,16981,16982],{"class":86},"        m_Age ",[69,16984,1019],{"class":82},[69,16986,9039],{"class":86},[69,16988,16989],{"class":71,"line":2999},[69,16990,3431],{"class":86},[69,16992,16993],{"class":71,"line":3004},[69,16994,3644],{"emptyLinePlaceholder":1325},[69,16996,16997],{"class":71,"line":3009},[69,16998,16999],{"class":75},"    \u002F\u002F情人设置为只写\n",[69,17001,17002,17004,17007,17009,17011,17014],{"class":71,"line":3023},[69,17003,16149],{"class":82},[69,17005,17006],{"class":109}," setLover",[69,17008,1398],{"class":86},[69,17010,16157],{"class":109},[69,17012,17013],{"class":6458}," lover",[69,17015,103],{"class":86},[69,17017,17018,17021,17023],{"class":71,"line":3028},[69,17019,17020],{"class":86},"        m_Lover ",[69,17022,1019],{"class":82},[69,17024,17025],{"class":86}," lover;\n",[69,17027,17028],{"class":71,"line":3821},[69,17029,3431],{"class":86},[69,17031,17032],{"class":71,"line":3835},[69,17033,3644],{"emptyLinePlaceholder":1325},[69,17035,17036],{"class":71,"line":3843},[69,17037,16462],{"class":82},[69,17039,17040,17043],{"class":71,"line":3848},[69,17041,17042],{"class":86},"    string m_Name;",[69,17044,17045],{"class":75}," \u002F\u002F可读可写  姓名\n",[69,17047,17048],{"class":71,"line":3854},[69,17049,14451],{"class":86},[69,17051,17052,17054,17057],{"class":71,"line":3860},[69,17053,3229],{"class":82},[69,17055,17056],{"class":86}," m_Age;",[69,17058,17059],{"class":75}," \u002F\u002F只读  年龄\n",[69,17061,17062],{"class":71,"line":3865},[69,17063,3644],{"emptyLinePlaceholder":1325},[69,17065,17066,17069],{"class":71,"line":9190},[69,17067,17068],{"class":86},"    string m_Lover;",[69,17070,17071],{"class":75}," \u002F\u002F只写  情人\n",[69,17073,17074],{"class":71,"line":9214},[69,17075,5239],{"class":86},[69,17077,17078],{"class":71,"line":9219},[69,17079,3644],{"emptyLinePlaceholder":1325},[69,17081,17082,17084,17086],{"class":71,"line":9225},[69,17083,1401],{"class":82},[69,17085,3217],{"class":109},[69,17087,12095],{"class":86},[69,17089,17090],{"class":71,"line":9252},[69,17091,3644],{"emptyLinePlaceholder":1325},[69,17093,17094],{"class":71,"line":9257},[69,17095,16553],{"class":86},[69,17097,17098],{"class":71,"line":9263},[69,17099,17100],{"class":75},"    \u002F\u002F姓名设置\n",[69,17102,17103,17106,17108,17110,17112],{"class":71,"line":9275},[69,17104,17105],{"class":86},"    p.",[69,17107,16306],{"class":109},[69,17109,1398],{"class":86},[69,17111,9158],{"class":1022},[69,17113,3963],{"class":86},[69,17115,17116,17118,17120,17123,17125,17128,17131,17133,17135],{"class":71,"line":9287},[69,17117,7771],{"class":86},[69,17119,2429],{"class":82},[69,17121,17122],{"class":1022}," \"姓名： \"",[69,17124,2696],{"class":82},[69,17126,17127],{"class":86}," p.",[69,17129,17130],{"class":109},"getName",[69,17132,14291],{"class":86},[69,17134,2429],{"class":82},[69,17136,10082],{"class":86},[69,17138,17139],{"class":71,"line":9299},[69,17140,3644],{"emptyLinePlaceholder":1325},[69,17142,17143],{"class":71,"line":10958},[69,17144,17145],{"class":75},"    \u002F\u002F年龄设置\n",[69,17147,17148,17150,17153,17155,17157],{"class":71,"line":10983},[69,17149,17105],{"class":86},[69,17151,17152],{"class":109},"setAge",[69,17154,1398],{"class":86},[69,17156,2043],{"class":90},[69,17158,3963],{"class":86},[69,17160,17161,17163,17165,17168,17170,17172,17175,17177,17179],{"class":71,"line":11006},[69,17162,7771],{"class":86},[69,17164,2429],{"class":82},[69,17166,17167],{"class":1022}," \"年龄： \"",[69,17169,2696],{"class":82},[69,17171,17127],{"class":86},[69,17173,17174],{"class":109},"getAge",[69,17176,14291],{"class":86},[69,17178,2429],{"class":82},[69,17180,10082],{"class":86},[69,17182,17183],{"class":71,"line":11030},[69,17184,3644],{"emptyLinePlaceholder":1325},[69,17186,17187],{"class":71,"line":11035},[69,17188,17189],{"class":75},"    \u002F\u002F情人设置\n",[69,17191,17192,17194,17197,17199,17202],{"class":71,"line":11040},[69,17193,17105],{"class":86},[69,17195,17196],{"class":109},"setLover",[69,17198,1398],{"class":86},[69,17200,17201],{"class":1022},"\"苍井\"",[69,17203,3963],{"class":86},[69,17205,17206,17209],{"class":71,"line":11045},[69,17207,17208],{"class":75},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[69,17210,17211],{"class":75},"  \u002F\u002F只写属性，不可以读取\n",[69,17213,17214],{"class":71,"line":11054},[69,17215,3644],{"emptyLinePlaceholder":1325},[69,17217,17218,17220,17222,17224],{"class":71,"line":11059},[69,17219,3547],{"class":109},[69,17221,1398],{"class":86},[69,17223,3552],{"class":1022},[69,17225,3963],{"class":86},[69,17227,17228],{"class":71,"line":11065},[69,17229,3644],{"emptyLinePlaceholder":1325},[69,17231,17232,17234,17236],{"class":71,"line":11086},[69,17233,5334],{"class":82},[69,17235,5337],{"class":90},[69,17237,130],{"class":86},[69,17239,17240],{"class":71,"line":11092},[69,17241,142],{"class":86},[19,17243,17245],{"id":17244},"_814封装案例","8.1.4封装案例",[37,17247,17248],{},[40,17249,17250,17253],{},[195,17251,17252],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[162,17255,17256,17259],{},[40,17257,17258],{},"求出立方体的面积和体积",[40,17260,17261],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[59,17263,17265],{"className":1386,"code":17264,"language":1388,"meta":64,"style":64},"#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",[66,17266,17267,17273,17283,17290,17294,17298,17303,17333,17337,17347,17357,17367,17371,17380,17384,17420,17424,17433,17437,17453,17457,17462,17471,17475,17482,17486,17495,17499,17506,17510,17519,17523,17530,17534,17539,17556,17560,17606,17610,17619,17623,17627,17631,17640,17644,17648,17653,17657,17663,17669,17675,17679,17683,17688,17710,17714,17768,17772,17780,17784,17789,17794,17807,17814,17830,17841,17847,17870,17876,17899,17913,17933,17939,17950,17973,17995,18000,18006,18020,18033,18038,18052,18057,18063,18068,18082,18087,18092,18106,18118,18123,18136,18141,18146,18151,18164,18169],{"__ignoreMap":64},[69,17268,17269,17271],{"class":71,"line":72},[69,17270,3194],{"class":82},[69,17272,3197],{"class":1022},[69,17274,17275,17277,17279,17281],{"class":71,"line":79},[69,17276,3202],{"class":82},[69,17278,3205],{"class":82},[69,17280,3208],{"class":109},[69,17282,130],{"class":86},[69,17284,17285,17287],{"class":71,"line":106},[69,17286,15934],{"class":82},[69,17288,17289],{"class":109}," Cube\n",[69,17291,17292],{"class":71,"line":116},[69,17293,2797],{"class":86},[69,17295,17296],{"class":71,"line":133},[69,17297,15956],{"class":82},[69,17299,17300],{"class":71,"line":139},[69,17301,17302],{"class":75},"    \u002F\u002F输入长宽高\n",[69,17304,17305,17307,17310,17312,17314,17317,17319,17321,17324,17326,17328,17331],{"class":71,"line":401},[69,17306,16149],{"class":82},[69,17308,17309],{"class":109}," setLwh",[69,17311,1398],{"class":86},[69,17313,1401],{"class":82},[69,17315,17316],{"class":6458}," l",[69,17318,1767],{"class":86},[69,17320,1401],{"class":82},[69,17322,17323],{"class":6458}," w",[69,17325,1767],{"class":86},[69,17327,1401],{"class":82},[69,17329,17330],{"class":6458}," h",[69,17332,1404],{"class":86},[69,17334,17335],{"class":71,"line":470},[69,17336,3274],{"class":86},[69,17338,17339,17342,17344],{"class":71,"line":475},[69,17340,17341],{"class":86},"        m_L",[69,17343,1019],{"class":82},[69,17345,17346],{"class":86},"l;\n",[69,17348,17349,17352,17354],{"class":71,"line":482},[69,17350,17351],{"class":86},"        m_W",[69,17353,1019],{"class":82},[69,17355,17356],{"class":86},"w;\n",[69,17358,17359,17362,17364],{"class":71,"line":497},[69,17360,17361],{"class":86},"        m_H",[69,17363,1019],{"class":82},[69,17365,17366],{"class":86},"h;\n",[69,17368,17369],{"class":71,"line":502},[69,17370,3431],{"class":86},[69,17372,17373,17375,17378],{"class":71,"line":509},[69,17374,3229],{"class":82},[69,17376,17377],{"class":109}," mianji",[69,17379,3220],{"class":86},[69,17381,17382],{"class":71,"line":524},[69,17383,3274],{"class":86},[69,17385,17386,17388,17390,17392,17395,17397,17400,17402,17405,17407,17410,17412,17415,17417],{"class":71,"line":2888},[69,17387,15992],{"class":82},[69,17389,15995],{"class":90},[69,17391,1843],{"class":82},[69,17393,17394],{"class":86},"(m_L",[69,17396,1843],{"class":82},[69,17398,17399],{"class":86},"m_W ",[69,17401,1869],{"class":82},[69,17403,17404],{"class":86}," m_L",[69,17406,1843],{"class":82},[69,17408,17409],{"class":86},"m_H ",[69,17411,1869],{"class":82},[69,17413,17414],{"class":86}," m_W",[69,17416,1843],{"class":82},[69,17418,17419],{"class":86},"m_H);\n",[69,17421,17422],{"class":71,"line":2893},[69,17423,3431],{"class":86},[69,17425,17426,17428,17431],{"class":71,"line":2899},[69,17427,3229],{"class":82},[69,17429,17430],{"class":109}," tiji",[69,17432,3220],{"class":86},[69,17434,17435],{"class":71,"line":2919},[69,17436,3274],{"class":86},[69,17438,17439,17441,17443,17445,17448,17450],{"class":71,"line":2924},[69,17440,15992],{"class":82},[69,17442,17404],{"class":86},[69,17444,1843],{"class":82},[69,17446,17447],{"class":86},"m_W",[69,17449,1843],{"class":82},[69,17451,17452],{"class":86},"m_H;\n",[69,17454,17455],{"class":71,"line":2938},[69,17456,3431],{"class":86},[69,17458,17459],{"class":71,"line":2943},[69,17460,17461],{"class":75},"    \u002F\u002F获取长宽高\n",[69,17463,17464,17466,17469],{"class":71,"line":2972},[69,17465,3229],{"class":82},[69,17467,17468],{"class":109}," getLength",[69,17470,3220],{"class":86},[69,17472,17473],{"class":71,"line":2977},[69,17474,3274],{"class":86},[69,17476,17477,17479],{"class":71,"line":2994},[69,17478,15992],{"class":82},[69,17480,17481],{"class":86}," m_L;\n",[69,17483,17484],{"class":71,"line":2999},[69,17485,3431],{"class":86},[69,17487,17488,17490,17493],{"class":71,"line":3004},[69,17489,3229],{"class":82},[69,17491,17492],{"class":109}," getWidth",[69,17494,3220],{"class":86},[69,17496,17497],{"class":71,"line":3009},[69,17498,3274],{"class":86},[69,17500,17501,17503],{"class":71,"line":3023},[69,17502,15992],{"class":82},[69,17504,17505],{"class":86}," m_W;\n",[69,17507,17508],{"class":71,"line":3028},[69,17509,3431],{"class":86},[69,17511,17512,17514,17517],{"class":71,"line":3821},[69,17513,3229],{"class":82},[69,17515,17516],{"class":109}," getHeight",[69,17518,3220],{"class":86},[69,17520,17521],{"class":71,"line":3835},[69,17522,3274],{"class":86},[69,17524,17525,17527],{"class":71,"line":3843},[69,17526,15992],{"class":82},[69,17528,17529],{"class":86}," m_H;\n",[69,17531,17532],{"class":71,"line":3848},[69,17533,3431],{"class":86},[69,17535,17536],{"class":71,"line":3854},[69,17537,17538],{"class":75},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[69,17540,17541,17544,17547,17549,17552,17554],{"class":71,"line":3860},[69,17542,17543],{"class":82},"    bool",[69,17545,17546],{"class":109}," isEqual",[69,17548,1398],{"class":86},[69,17550,17551],{"class":109},"Cube",[69,17553,4093],{"class":6458},[69,17555,1404],{"class":86},[69,17557,17558],{"class":71,"line":3865},[69,17559,3274],{"class":86},[69,17561,17562,17564,17567,17570,17572,17574,17577,17579,17582,17585,17587,17589,17592,17594,17596,17599,17601,17603],{"class":71,"line":9190},[69,17563,3741],{"class":82},[69,17565,17566],{"class":86}," (c.",[69,17568,17569],{"class":109},"getLength",[69,17571,14291],{"class":86},[69,17573,4193],{"class":82},[69,17575,17576],{"class":86}," m_L ",[69,17578,2960],{"class":82},[69,17580,17581],{"class":86}," c.",[69,17583,17584],{"class":109},"getWidth",[69,17586,14291],{"class":86},[69,17588,4193],{"class":82},[69,17590,17591],{"class":86}," m_W ",[69,17593,2960],{"class":82},[69,17595,17581],{"class":86},[69,17597,17598],{"class":109},"getHeight",[69,17600,14291],{"class":86},[69,17602,4193],{"class":82},[69,17604,17605],{"class":86}," m_H)\n",[69,17607,17608],{"class":71,"line":9214},[69,17609,3754],{"class":86},[69,17611,17612,17614,17617],{"class":71,"line":9219},[69,17613,16971],{"class":82},[69,17615,17616],{"class":90}," true",[69,17618,130],{"class":86},[69,17620,17621],{"class":71,"line":9225},[69,17622,3773],{"class":86},[69,17624,17625],{"class":71,"line":9252},[69,17626,3814],{"class":82},[69,17628,17629],{"class":71,"line":9257},[69,17630,3754],{"class":86},[69,17632,17633,17635,17638],{"class":71,"line":9263},[69,17634,16971],{"class":82},[69,17636,17637],{"class":90}," false",[69,17639,130],{"class":86},[69,17641,17642],{"class":71,"line":9275},[69,17643,3773],{"class":86},[69,17645,17646],{"class":71,"line":9287},[69,17647,3431],{"class":86},[69,17649,17650],{"class":71,"line":9299},[69,17651,17652],{"class":75},"    \u002F\u002F私有属性\n",[69,17654,17655],{"class":71,"line":10958},[69,17656,16462],{"class":82},[69,17658,17659,17661],{"class":71,"line":10983},[69,17660,3229],{"class":82},[69,17662,17481],{"class":86},[69,17664,17665,17667],{"class":71,"line":11006},[69,17666,3229],{"class":82},[69,17668,17505],{"class":86},[69,17670,17671,17673],{"class":71,"line":11030},[69,17672,3229],{"class":82},[69,17674,17529],{"class":86},[69,17676,17677],{"class":71,"line":11035},[69,17678,3644],{"emptyLinePlaceholder":1325},[69,17680,17681],{"class":71,"line":11040},[69,17682,5239],{"class":86},[69,17684,17685],{"class":71,"line":11045},[69,17686,17687],{"class":75},"\u002F\u002F全局函数判断两个立方体是否相等\n",[69,17689,17690,17692,17694,17696,17698,17701,17703,17705,17708],{"class":71,"line":11054},[69,17691,2606],{"class":82},[69,17693,17546],{"class":109},[69,17695,1398],{"class":86},[69,17697,17551],{"class":109},[69,17699,17700],{"class":6458}," c1",[69,17702,1767],{"class":86},[69,17704,17551],{"class":109},[69,17706,17707],{"class":6458}," c2",[69,17709,1404],{"class":86},[69,17711,17712],{"class":71,"line":11059},[69,17713,2797],{"class":86},[69,17715,17716,17718,17721,17723,17725,17727,17730,17732,17735,17737,17739,17741,17743,17745,17747,17749,17751,17753,17755,17757,17759,17761,17763,17765],{"class":71,"line":11065},[69,17717,5334],{"class":82},[69,17719,17720],{"class":86}," (c1.",[69,17722,17569],{"class":109},[69,17724,14291],{"class":86},[69,17726,4193],{"class":82},[69,17728,17729],{"class":86}," c2.",[69,17731,17569],{"class":109},[69,17733,17734],{"class":86},"()) ",[69,17736,2960],{"class":82},[69,17738,17720],{"class":86},[69,17740,17584],{"class":109},[69,17742,14291],{"class":86},[69,17744,4193],{"class":82},[69,17746,17729],{"class":86},[69,17748,17584],{"class":109},[69,17750,17734],{"class":86},[69,17752,2960],{"class":82},[69,17754,17720],{"class":86},[69,17756,17598],{"class":109},[69,17758,14291],{"class":86},[69,17760,4193],{"class":82},[69,17762,17729],{"class":86},[69,17764,17598],{"class":109},[69,17766,17767],{"class":86},"());\n",[69,17769,17770],{"class":71,"line":11086},[69,17771,142],{"class":86},[69,17773,17774,17776,17778],{"class":71,"line":11092},[69,17775,1401],{"class":82},[69,17777,3217],{"class":109},[69,17779,3220],{"class":86},[69,17781,17782],{"class":71,"line":11106},[69,17783,2797],{"class":86},[69,17785,17786],{"class":71,"line":11112},[69,17787,17788],{"class":86},"    Cube c1;\n",[69,17790,17791],{"class":71,"line":11139},[69,17792,17793],{"class":75},"    \u002F\u002F输入立方体的长宽高\n",[69,17795,17796,17798,17800,17803,17805],{"class":71,"line":11148},[69,17797,2802],{"class":86},[69,17799,2429],{"class":82},[69,17801,17802],{"class":1022},"\"请输入第一个立方体的长、宽、高：\"",[69,17804,2429],{"class":82},[69,17806,2451],{"class":86},[69,17808,17809,17811],{"class":71,"line":11154},[69,17810,3229],{"class":82},[69,17812,17813],{"class":86}," l,w,h,l1,w1,h1;\n",[69,17815,17816,17818,17820,17822,17824,17826,17828],{"class":71,"line":11162},[69,17817,3256],{"class":86},[69,17819,2681],{"class":82},[69,17821,1906],{"class":86},[69,17823,2681],{"class":82},[69,17825,2182],{"class":86},[69,17827,2681],{"class":82},[69,17829,17366],{"class":86},[69,17831,17832,17835,17838],{"class":71,"line":11167},[69,17833,17834],{"class":86},"    c1.",[69,17836,17837],{"class":109},"setLwh",[69,17839,17840],{"class":86},"(l,w,h);\n",[69,17842,17844],{"class":71,"line":17843},66,[69,17845,17846],{"class":75},"    \u002F\u002F面积\n",[69,17848,17850,17852,17854,17857,17859,17861,17864,17866,17868],{"class":71,"line":17849},67,[69,17851,2802],{"class":86},[69,17853,2429],{"class":82},[69,17855,17856],{"class":1022},"\"立方体的表面积为：\"",[69,17858,2429],{"class":82},[69,17860,16070],{"class":86},[69,17862,17863],{"class":109},"mianji",[69,17865,3671],{"class":86},[69,17867,2429],{"class":82},[69,17869,2451],{"class":86},[69,17871,17873],{"class":71,"line":17872},68,[69,17874,17875],{"class":75},"    \u002F\u002F体积\n",[69,17877,17879,17881,17883,17886,17888,17890,17893,17895,17897],{"class":71,"line":17878},69,[69,17880,2802],{"class":86},[69,17882,2429],{"class":82},[69,17884,17885],{"class":1022},"\"立方体的体积为：\"",[69,17887,2429],{"class":82},[69,17889,16070],{"class":86},[69,17891,17892],{"class":109},"tiji",[69,17894,3671],{"class":86},[69,17896,2429],{"class":82},[69,17898,2451],{"class":86},[69,17900,17902,17904,17906,17909,17911],{"class":71,"line":17901},70,[69,17903,2802],{"class":86},[69,17905,2429],{"class":82},[69,17907,17908],{"class":1022},"\"请输入第二个立方体的长、宽、高：\"",[69,17910,2429],{"class":82},[69,17912,2451],{"class":86},[69,17914,17916,17918,17920,17923,17925,17928,17930],{"class":71,"line":17915},71,[69,17917,3256],{"class":86},[69,17919,2681],{"class":82},[69,17921,17922],{"class":86},"l1",[69,17924,2681],{"class":82},[69,17926,17927],{"class":86},"w1",[69,17929,2681],{"class":82},[69,17931,17932],{"class":86},"h1;\n",[69,17934,17936],{"class":71,"line":17935},72,[69,17937,17938],{"class":86},"    Cube c2;\n",[69,17940,17942,17945,17947],{"class":71,"line":17941},73,[69,17943,17944],{"class":86},"    c2.",[69,17946,17837],{"class":109},[69,17948,17949],{"class":86},"(l1,w1,h1);\n",[69,17951,17953,17955,17957,17960,17962,17965,17967,17969,17971],{"class":71,"line":17952},74,[69,17954,2802],{"class":86},[69,17956,2429],{"class":82},[69,17958,17959],{"class":1022},"\"第二个立方体的表面积为：\"",[69,17961,2429],{"class":82},[69,17963,17964],{"class":86},"c2.",[69,17966,17863],{"class":109},[69,17968,3671],{"class":86},[69,17970,2429],{"class":82},[69,17972,2451],{"class":86},[69,17974,17976,17978,17980,17983,17985,17987,17989,17991,17993],{"class":71,"line":17975},75,[69,17977,2802],{"class":86},[69,17979,2429],{"class":82},[69,17981,17982],{"class":1022},"\"第二个立方体的体积为：\"",[69,17984,2429],{"class":82},[69,17986,17964],{"class":86},[69,17988,17892],{"class":109},[69,17990,3671],{"class":86},[69,17992,2429],{"class":82},[69,17994,2451],{"class":86},[69,17996,17998],{"class":71,"line":17997},76,[69,17999,3644],{"emptyLinePlaceholder":1325},[69,18001,18003],{"class":71,"line":18002},77,[69,18004,18005],{"class":75},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[69,18007,18009,18011,18013,18016,18018],{"class":71,"line":18008},78,[69,18010,2802],{"class":86},[69,18012,2429],{"class":82},[69,18014,18015],{"class":1022},"\"内部函数判断结果：\"",[69,18017,2429],{"class":82},[69,18019,2451],{"class":86},[69,18021,18023,18025,18027,18030],{"class":71,"line":18022},79,[69,18024,4345],{"class":82},[69,18026,17720],{"class":86},[69,18028,18029],{"class":109},"isEqual",[69,18031,18032],{"class":86},"(c2))\n",[69,18034,18036],{"class":71,"line":18035},80,[69,18037,3274],{"class":86},[69,18039,18041,18043,18045,18048,18050],{"class":71,"line":18040},81,[69,18042,4695],{"class":86},[69,18044,2429],{"class":82},[69,18046,18047],{"class":1022},"\"两个立方体相等\"",[69,18049,2429],{"class":82},[69,18051,2451],{"class":86},[69,18053,18055],{"class":71,"line":18054},82,[69,18056,3431],{"class":86},[69,18058,18060],{"class":71,"line":18059},83,[69,18061,18062],{"class":82},"    else\n",[69,18064,18066],{"class":71,"line":18065},84,[69,18067,3274],{"class":86},[69,18069,18071,18073,18075,18078,18080],{"class":71,"line":18070},85,[69,18072,4695],{"class":86},[69,18074,2429],{"class":82},[69,18076,18077],{"class":1022},"\"两个立方体不相等\"",[69,18079,2429],{"class":82},[69,18081,2451],{"class":86},[69,18083,18085],{"class":71,"line":18084},86,[69,18086,3431],{"class":86},[69,18088,18090],{"class":71,"line":18089},87,[69,18091,3644],{"emptyLinePlaceholder":1325},[69,18093,18095,18097,18099,18102,18104],{"class":71,"line":18094},88,[69,18096,2802],{"class":86},[69,18098,2429],{"class":82},[69,18100,18101],{"class":1022},"\"全局函数判断结果：\"",[69,18103,2429],{"class":82},[69,18105,2451],{"class":86},[69,18107,18109,18111,18113,18115],{"class":71,"line":18108},89,[69,18110,4345],{"class":82},[69,18112,87],{"class":86},[69,18114,18029],{"class":109},[69,18116,18117],{"class":86},"(c1, c2))\n",[69,18119,18121],{"class":71,"line":18120},90,[69,18122,3274],{"class":86},[69,18124,18126,18128,18130,18132,18134],{"class":71,"line":18125},91,[69,18127,4695],{"class":86},[69,18129,2429],{"class":82},[69,18131,18047],{"class":1022},[69,18133,2429],{"class":82},[69,18135,2451],{"class":86},[69,18137,18139],{"class":71,"line":18138},92,[69,18140,3431],{"class":86},[69,18142,18144],{"class":71,"line":18143},93,[69,18145,18062],{"class":82},[69,18147,18149],{"class":71,"line":18148},94,[69,18150,3274],{"class":86},[69,18152,18154,18156,18158,18160,18162],{"class":71,"line":18153},95,[69,18155,4695],{"class":86},[69,18157,2429],{"class":82},[69,18159,18077],{"class":1022},[69,18161,2429],{"class":82},[69,18163,2451],{"class":86},[69,18165,18167],{"class":71,"line":18166},96,[69,18168,3431],{"class":86},[69,18170,18172],{"class":71,"line":18171},97,[69,18173,142],{"class":86},[37,18175,18176],{"start":79},[40,18177,18178],{},[195,18179,18180],{},"练习案例2：点和圆的关系",[162,18182,18183],{},[40,18184,18185],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[59,18187,18189],{"className":1386,"code":18188,"language":1388,"meta":64,"style":64},"#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",[66,18190,18191,18197,18207,18214,18221,18225,18229,18234,18268,18273,18289,18303,18307,18311,18318,18325,18329,18335,18339,18343,18347,18369,18392,18397,18411,18426,18430,18434,18440,18445,18450,18454,18480,18484,18514,18542,18570,18587,18591,18604,18608,18612,18616,18629,18633,18637,18645,18649,18653,18657,18662,18666,18677,18684,18693,18703,18714,18721,18734,18745,18755,18766,18773,18787,18792,18802,18810],{"__ignoreMap":64},[69,18192,18193,18195],{"class":71,"line":72},[69,18194,3194],{"class":82},[69,18196,3197],{"class":1022},[69,18198,18199,18201,18203,18205],{"class":71,"line":79},[69,18200,3202],{"class":82},[69,18202,3205],{"class":82},[69,18204,3208],{"class":109},[69,18206,130],{"class":86},[69,18208,18209,18211],{"class":71,"line":106},[69,18210,3194],{"class":82},[69,18212,18213],{"class":1022},"\u003Ccmath>\n",[69,18215,18216,18218],{"class":71,"line":116},[69,18217,15934],{"class":82},[69,18219,18220],{"class":109}," Point\n",[69,18222,18223],{"class":71,"line":133},[69,18224,2797],{"class":86},[69,18226,18227],{"class":71,"line":139},[69,18228,15956],{"class":82},[69,18230,18231],{"class":71,"line":401},[69,18232,18233],{"class":75},"    \u002F\u002F赋值\n",[69,18235,18236,18238,18241,18243,18245,18248,18250,18252,18255,18258,18260,18263,18265],{"class":71,"line":470},[69,18237,16149],{"class":82},[69,18239,18240],{"class":109}," setPoint",[69,18242,1398],{"class":86},[69,18244,15278],{"class":82},[69,18246,18247],{"class":6458}," x",[69,18249,13677],{"class":86},[69,18251,15278],{"class":82},[69,18253,18254],{"class":6458}," y",[69,18256,18257],{"class":86},") { m_x ",[69,18259,1019],{"class":82},[69,18261,18262],{"class":86}," x; m_y ",[69,18264,1019],{"class":82},[69,18266,18267],{"class":86}," y; }\n",[69,18269,18270],{"class":71,"line":475},[69,18271,18272],{"class":75},"    \u002F\u002F获取坐标\n",[69,18274,18275,18277,18280,18283,18286],{"class":71,"line":482},[69,18276,15978],{"class":82},[69,18278,18279],{"class":109}," getX",[69,18281,18282],{"class":86},"() { ",[69,18284,18285],{"class":82},"return",[69,18287,18288],{"class":86}," m_x; }\n",[69,18290,18291,18293,18296,18298,18300],{"class":71,"line":497},[69,18292,15978],{"class":82},[69,18294,18295],{"class":109}," getY",[69,18297,18282],{"class":86},[69,18299,18285],{"class":82},[69,18301,18302],{"class":86}," m_y; }\n",[69,18304,18305],{"class":71,"line":502},[69,18306,3644],{"emptyLinePlaceholder":1325},[69,18308,18309],{"class":71,"line":509},[69,18310,16462],{"class":82},[69,18312,18313,18315],{"class":71,"line":524},[69,18314,15978],{"class":82},[69,18316,18317],{"class":86}," m_x;\n",[69,18319,18320,18322],{"class":71,"line":2888},[69,18321,15978],{"class":82},[69,18323,18324],{"class":86}," m_y;\n",[69,18326,18327],{"class":71,"line":2893},[69,18328,5239],{"class":86},[69,18330,18331,18333],{"class":71,"line":2899},[69,18332,15934],{"class":82},[69,18334,15937],{"class":109},[69,18336,18337],{"class":71,"line":2919},[69,18338,2797],{"class":86},[69,18340,18341],{"class":71,"line":2924},[69,18342,15956],{"class":82},[69,18344,18345],{"class":71,"line":2938},[69,18346,18233],{"class":75},[69,18348,18349,18351,18354,18356,18358,18361,18364,18366],{"class":71,"line":2943},[69,18350,16149],{"class":82},[69,18352,18353],{"class":109}," setRadius",[69,18355,1398],{"class":86},[69,18357,15278],{"class":82},[69,18359,18360],{"class":6458}," r",[69,18362,18363],{"class":86},") { m_r ",[69,18365,1019],{"class":82},[69,18367,18368],{"class":86}," r; }\n",[69,18370,18371,18373,18376,18378,18381,18384,18387,18389],{"class":71,"line":2972},[69,18372,16149],{"class":82},[69,18374,18375],{"class":109}," setCenter",[69,18377,1398],{"class":86},[69,18379,18380],{"class":109},"Point",[69,18382,18383],{"class":6458}," center",[69,18385,18386],{"class":86},") { m_center ",[69,18388,1019],{"class":82},[69,18390,18391],{"class":86}," center; }\n",[69,18393,18394],{"class":71,"line":2977},[69,18395,18396],{"class":75},"    \u002F\u002F获取属性\n",[69,18398,18399,18401,18404,18406,18408],{"class":71,"line":2994},[69,18400,15978],{"class":82},[69,18402,18403],{"class":109}," getRadius",[69,18405,18282],{"class":86},[69,18407,18285],{"class":82},[69,18409,18410],{"class":86}," m_r; }\n",[69,18412,18413,18416,18419,18421,18423],{"class":71,"line":2999},[69,18414,18415],{"class":109},"    Point",[69,18417,18418],{"class":109}," getCenter",[69,18420,18282],{"class":86},[69,18422,18285],{"class":82},[69,18424,18425],{"class":86}," m_center; }\n",[69,18427,18428],{"class":71,"line":3004},[69,18429,3644],{"emptyLinePlaceholder":1325},[69,18431,18432],{"class":71,"line":3009},[69,18433,16462],{"class":82},[69,18435,18436,18438],{"class":71,"line":3023},[69,18437,15978],{"class":82},[69,18439,15968],{"class":86},[69,18441,18442],{"class":71,"line":3028},[69,18443,18444],{"class":75},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[69,18446,18447],{"class":71,"line":3821},[69,18448,18449],{"class":86},"    Point m_center;\n",[69,18451,18452],{"class":71,"line":3835},[69,18453,5239],{"class":86},[69,18455,18456,18458,18461,18463,18466,18468,18470,18472,18474,18476,18478],{"class":71,"line":3843},[69,18457,6606],{"class":82},[69,18459,18460],{"class":109}," isInCircle",[69,18462,1398],{"class":86},[69,18464,18465],{"class":109},"Circle",[69,18467,11826],{"class":82},[69,18469,1679],{"class":6458},[69,18471,1767],{"class":86},[69,18473,18380],{"class":109},[69,18475,11826],{"class":82},[69,18477,29],{"class":6458},[69,18479,1404],{"class":86},[69,18481,18482],{"class":71,"line":3848},[69,18483,2797],{"class":86},[69,18485,18486,18488,18491,18493,18495,18498,18501,18504,18506,18508,18510,18512],{"class":71,"line":3854},[69,18487,15978],{"class":82},[69,18489,18490],{"class":86}," dx ",[69,18492,1019],{"class":82},[69,18494,17581],{"class":86},[69,18496,18497],{"class":109},"getCenter",[69,18499,18500],{"class":86},"().",[69,18502,18503],{"class":109},"getX",[69,18505,14291],{"class":86},[69,18507,1920],{"class":82},[69,18509,17127],{"class":86},[69,18511,18503],{"class":109},[69,18513,6878],{"class":86},[69,18515,18516,18518,18521,18523,18525,18527,18529,18532,18534,18536,18538,18540],{"class":71,"line":3860},[69,18517,15978],{"class":82},[69,18519,18520],{"class":86}," dy ",[69,18522,1019],{"class":82},[69,18524,17581],{"class":86},[69,18526,18497],{"class":109},[69,18528,18500],{"class":86},[69,18530,18531],{"class":109},"getY",[69,18533,14291],{"class":86},[69,18535,1920],{"class":82},[69,18537,17127],{"class":86},[69,18539,18531],{"class":109},[69,18541,6878],{"class":86},[69,18543,18544,18546,18549,18551,18554,18557,18559,18561,18563,18565,18567],{"class":71,"line":3865},[69,18545,15978],{"class":82},[69,18547,18548],{"class":86}," distance ",[69,18550,1019],{"class":82},[69,18552,18553],{"class":109}," sqrt",[69,18555,18556],{"class":86},"(dx ",[69,18558,1843],{"class":82},[69,18560,18490],{"class":86},[69,18562,1869],{"class":82},[69,18564,18520],{"class":86},[69,18566,1843],{"class":82},[69,18568,18569],{"class":86}," dy);\n",[69,18571,18572,18574,18577,18579,18581,18584],{"class":71,"line":9190},[69,18573,4345],{"class":82},[69,18575,18576],{"class":86}," (distance ",[69,18578,1011],{"class":82},[69,18580,17581],{"class":86},[69,18582,18583],{"class":109},"getRadius",[69,18585,18586],{"class":86},"())\n",[69,18588,18589],{"class":71,"line":9214},[69,18590,3274],{"class":86},[69,18592,18593,18595,18597,18600,18602],{"class":71,"line":9219},[69,18594,10911],{"class":86},[69,18596,2429],{"class":82},[69,18598,18599],{"class":1022}," \"点在圆内\"",[69,18601,2696],{"class":82},[69,18603,10082],{"class":86},[69,18605,18606],{"class":71,"line":9225},[69,18607,3431],{"class":86},[69,18609,18610],{"class":71,"line":9252},[69,18611,18062],{"class":82},[69,18613,18614],{"class":71,"line":9257},[69,18615,3274],{"class":86},[69,18617,18618,18620,18622,18625,18627],{"class":71,"line":9263},[69,18619,10911],{"class":86},[69,18621,2429],{"class":82},[69,18623,18624],{"class":1022}," \"点在圆外\"",[69,18626,2696],{"class":82},[69,18628,10082],{"class":86},[69,18630,18631],{"class":71,"line":9275},[69,18632,3431],{"class":86},[69,18634,18635],{"class":71,"line":9287},[69,18636,142],{"class":86},[69,18638,18639,18641,18643],{"class":71,"line":9299},[69,18640,1401],{"class":82},[69,18642,3217],{"class":109},[69,18644,3220],{"class":86},[69,18646,18647],{"class":71,"line":10958},[69,18648,2797],{"class":86},[69,18650,18651],{"class":71,"line":10983},[69,18652,16293],{"class":75},[69,18654,18655],{"class":71,"line":11006},[69,18656,16040],{"class":86},[69,18658,18659],{"class":71,"line":11030},[69,18660,18661],{"class":86},"    Point p1;\n",[69,18663,18664],{"class":71,"line":11035},[69,18665,18233],{"class":75},[69,18667,18668,18670,18672,18675],{"class":71,"line":11040},[69,18669,2802],{"class":86},[69,18671,2429],{"class":82},[69,18673,18674],{"class":1022},"\"请输入圆的半径：\"",[69,18676,130],{"class":86},[69,18678,18679,18681],{"class":71,"line":11045},[69,18680,15978],{"class":82},[69,18682,18683],{"class":86}," r;\n",[69,18685,18686,18688,18690],{"class":71,"line":11054},[69,18687,3256],{"class":86},[69,18689,2681],{"class":82},[69,18691,18692],{"class":86},"r;\n",[69,18694,18695,18697,18700],{"class":71,"line":11059},[69,18696,17834],{"class":86},[69,18698,18699],{"class":109},"setRadius",[69,18701,18702],{"class":86},"(r);\n",[69,18704,18705,18707,18709,18712],{"class":71,"line":11065},[69,18706,2802],{"class":86},[69,18708,2429],{"class":82},[69,18710,18711],{"class":1022},"\"请输入圆心坐标：\"",[69,18713,130],{"class":86},[69,18715,18716,18718],{"class":71,"line":11086},[69,18717,15978],{"class":82},[69,18719,18720],{"class":86}," x, y;\n",[69,18722,18723,18725,18727,18729,18731],{"class":71,"line":11092},[69,18724,3256],{"class":86},[69,18726,2681],{"class":82},[69,18728,2207],{"class":86},[69,18730,2681],{"class":82},[69,18732,18733],{"class":86},"y;\n",[69,18735,18736,18739,18742],{"class":71,"line":11106},[69,18737,18738],{"class":86},"    p1.",[69,18740,18741],{"class":109},"setPoint",[69,18743,18744],{"class":86},"(x, y);\n",[69,18746,18747,18749,18752],{"class":71,"line":11112},[69,18748,17834],{"class":86},[69,18750,18751],{"class":109},"setCenter",[69,18753,18754],{"class":86},"(p1);\n",[69,18756,18757,18759,18761,18764],{"class":71,"line":11139},[69,18758,2802],{"class":86},[69,18760,2429],{"class":82},[69,18762,18763],{"class":1022},"\"请输入测试点坐标：\"",[69,18765,130],{"class":86},[69,18767,18768,18770],{"class":71,"line":11148},[69,18769,15978],{"class":82},[69,18771,18772],{"class":86}," x1, y1;\n",[69,18774,18775,18777,18779,18782,18784],{"class":71,"line":11154},[69,18776,3256],{"class":86},[69,18778,2681],{"class":82},[69,18780,18781],{"class":86},"x1",[69,18783,2681],{"class":82},[69,18785,18786],{"class":86},"y1;\n",[69,18788,18789],{"class":71,"line":11162},[69,18790,18791],{"class":86},"    Point p2;\n",[69,18793,18794,18797,18799],{"class":71,"line":11167},[69,18795,18796],{"class":86},"    p2.",[69,18798,18741],{"class":109},[69,18800,18801],{"class":86},"(x1, y1);\n",[69,18803,18804,18807],{"class":71,"line":17843},[69,18805,18806],{"class":109},"    isInCircle",[69,18808,18809],{"class":86},"(c1, p2);\n",[69,18811,18812],{"class":71,"line":17849},[69,18813,142],{"class":86},[29,18815,18816],{},"在类中可以让另一个类作为本来的成员",[29,18818,18819],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[29,18821,18822],{},"创建point.h",[59,18824,18826],{"className":1386,"code":18825,"language":1388,"meta":64,"style":64},"#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",[66,18827,18828,18839,18845,18855,18861,18865,18870,18874,18878,18898,18902,18910,18918,18922,18926,18932,18938],{"__ignoreMap":64},[69,18829,18830,18833,18836],{"class":71,"line":72},[69,18831,18832],{"class":82},"#pragma",[69,18834,18835],{"class":109}," once",[69,18837,18838],{"class":75}," \u002F\u002F防止头文件重复包含\n",[69,18840,18841,18843],{"class":71,"line":79},[69,18842,3194],{"class":82},[69,18844,3197],{"class":1022},[69,18846,18847,18849,18851,18853],{"class":71,"line":106},[69,18848,3202],{"class":82},[69,18850,3205],{"class":82},[69,18852,3208],{"class":109},[69,18854,130],{"class":86},[69,18856,18857,18859],{"class":71,"line":116},[69,18858,15934],{"class":82},[69,18860,18220],{"class":109},[69,18862,18863],{"class":71,"line":133},[69,18864,2797],{"class":86},[69,18866,18867],{"class":71,"line":139},[69,18868,18869],{"class":75},"\u002F\u002F做好声明与变量定义就可以\n",[69,18871,18872],{"class":71,"line":401},[69,18873,15956],{"class":82},[69,18875,18876],{"class":71,"line":470},[69,18877,18233],{"class":75},[69,18879,18880,18882,18884,18886,18888,18890,18892,18894,18896],{"class":71,"line":475},[69,18881,16149],{"class":82},[69,18883,18240],{"class":109},[69,18885,1398],{"class":86},[69,18887,15278],{"class":82},[69,18889,18247],{"class":6458},[69,18891,13677],{"class":86},[69,18893,15278],{"class":82},[69,18895,18254],{"class":6458},[69,18897,3963],{"class":86},[69,18899,18900],{"class":71,"line":482},[69,18901,18272],{"class":75},[69,18903,18904,18906,18908],{"class":71,"line":497},[69,18905,15978],{"class":82},[69,18907,18279],{"class":109},[69,18909,6878],{"class":86},[69,18911,18912,18914,18916],{"class":71,"line":502},[69,18913,15978],{"class":82},[69,18915,18295],{"class":109},[69,18917,6878],{"class":86},[69,18919,18920],{"class":71,"line":509},[69,18921,3644],{"emptyLinePlaceholder":1325},[69,18923,18924],{"class":71,"line":524},[69,18925,16462],{"class":82},[69,18927,18928,18930],{"class":71,"line":2888},[69,18929,15978],{"class":82},[69,18931,18317],{"class":86},[69,18933,18934,18936],{"class":71,"line":2893},[69,18935,15978],{"class":82},[69,18937,18324],{"class":86},[69,18939,18940],{"class":71,"line":2899},[69,18941,5239],{"class":86},[29,18943,18944],{},"创建point.cpp",[59,18946,18948],{"className":1386,"code":18947,"language":1388,"meta":64,"style":64},"#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",[66,18949,18950,18957,18962,18996,19000,19016],{"__ignoreMap":64},[69,18951,18952,18954],{"class":71,"line":72},[69,18953,3194],{"class":82},[69,18955,18956],{"class":1022},"\u003Cpoint.h>\n",[69,18958,18959],{"class":71,"line":79},[69,18960,18961],{"class":75},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[69,18963,18964,18966,18969,18972,18974,18976,18978,18980,18982,18984,18986,18988,18990,18992,18994],{"class":71,"line":106},[69,18965,16149],{"class":82},[69,18967,18968],{"class":109}," Point",[69,18970,18971],{"class":86},"::",[69,18973,18741],{"class":109},[69,18975,1398],{"class":86},[69,18977,15278],{"class":82},[69,18979,18247],{"class":6458},[69,18981,13677],{"class":86},[69,18983,15278],{"class":82},[69,18985,18254],{"class":6458},[69,18987,18257],{"class":86},[69,18989,1019],{"class":82},[69,18991,18262],{"class":86},[69,18993,1019],{"class":82},[69,18995,18267],{"class":86},[69,18997,18998],{"class":71,"line":116},[69,18999,18272],{"class":75},[69,19001,19002,19004,19006,19008,19010,19012,19014],{"class":71,"line":133},[69,19003,15978],{"class":82},[69,19005,18968],{"class":109},[69,19007,18971],{"class":86},[69,19009,18503],{"class":109},[69,19011,18282],{"class":86},[69,19013,18285],{"class":82},[69,19015,18288],{"class":86},[69,19017,19018,19020,19022,19024,19026,19028,19030],{"class":71,"line":139},[69,19019,15978],{"class":82},[69,19021,18968],{"class":109},[69,19023,18971],{"class":86},[69,19025,18531],{"class":109},[69,19027,18282],{"class":86},[69,19029,18285],{"class":82},[69,19031,18302],{"class":86},[29,19033,19034],{},"创建circle.h",[59,19036,19038],{"className":1386,"code":19037,"language":1388,"meta":64,"style":64},"#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",[66,19039,19040,19047,19053,19063,19069,19075,19079,19083,19087,19101,19115,19119,19127,19135,19139,19143,19149,19153,19157],{"__ignoreMap":64},[69,19041,19042,19044],{"class":71,"line":72},[69,19043,18832],{"class":82},[69,19045,19046],{"class":109}," once\n",[69,19048,19049,19051],{"class":71,"line":79},[69,19050,3194],{"class":82},[69,19052,3197],{"class":1022},[69,19054,19055,19057,19059,19061],{"class":71,"line":106},[69,19056,3202],{"class":82},[69,19058,3205],{"class":82},[69,19060,3208],{"class":109},[69,19062,130],{"class":86},[69,19064,19065,19067],{"class":71,"line":116},[69,19066,3194],{"class":82},[69,19068,18956],{"class":1022},[69,19070,19071,19073],{"class":71,"line":133},[69,19072,15934],{"class":82},[69,19074,15937],{"class":109},[69,19076,19077],{"class":71,"line":139},[69,19078,2797],{"class":86},[69,19080,19081],{"class":71,"line":401},[69,19082,15956],{"class":82},[69,19084,19085],{"class":71,"line":470},[69,19086,18233],{"class":75},[69,19088,19089,19091,19093,19095,19097,19099],{"class":71,"line":475},[69,19090,16149],{"class":82},[69,19092,18353],{"class":109},[69,19094,1398],{"class":86},[69,19096,15278],{"class":82},[69,19098,18360],{"class":6458},[69,19100,3963],{"class":86},[69,19102,19103,19105,19107,19109,19111,19113],{"class":71,"line":482},[69,19104,16149],{"class":82},[69,19106,18375],{"class":109},[69,19108,1398],{"class":86},[69,19110,18380],{"class":109},[69,19112,18383],{"class":6458},[69,19114,3963],{"class":86},[69,19116,19117],{"class":71,"line":497},[69,19118,18396],{"class":75},[69,19120,19121,19123,19125],{"class":71,"line":502},[69,19122,15978],{"class":82},[69,19124,18403],{"class":109},[69,19126,6878],{"class":86},[69,19128,19129,19131,19133],{"class":71,"line":509},[69,19130,18415],{"class":109},[69,19132,18418],{"class":109},[69,19134,6878],{"class":86},[69,19136,19137],{"class":71,"line":524},[69,19138,3644],{"emptyLinePlaceholder":1325},[69,19140,19141],{"class":71,"line":2888},[69,19142,16462],{"class":82},[69,19144,19145,19147],{"class":71,"line":2893},[69,19146,15978],{"class":82},[69,19148,15968],{"class":86},[69,19150,19151],{"class":71,"line":2899},[69,19152,18444],{"class":75},[69,19154,19155],{"class":71,"line":2919},[69,19156,18449],{"class":86},[69,19158,19159],{"class":71,"line":2924},[69,19160,5239],{"class":86},[29,19162,19163],{},"创建circle.cpp",[59,19165,19167],{"className":1386,"code":19166,"language":1388,"meta":64,"style":64},"#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",[66,19168,19169,19176,19199,19221,19226,19242],{"__ignoreMap":64},[69,19170,19171,19173],{"class":71,"line":72},[69,19172,3194],{"class":82},[69,19174,19175],{"class":1022},"\u003Ccircle.h>\n",[69,19177,19178,19180,19183,19185,19187,19189,19191,19193,19195,19197],{"class":71,"line":79},[69,19179,6606],{"class":82},[69,19181,19182],{"class":109}," Circle",[69,19184,18971],{"class":86},[69,19186,18699],{"class":109},[69,19188,1398],{"class":86},[69,19190,15278],{"class":82},[69,19192,18360],{"class":6458},[69,19194,18363],{"class":86},[69,19196,1019],{"class":82},[69,19198,18368],{"class":86},[69,19200,19201,19203,19205,19207,19209,19211,19213,19215,19217,19219],{"class":71,"line":106},[69,19202,6606],{"class":82},[69,19204,19182],{"class":109},[69,19206,18971],{"class":86},[69,19208,18751],{"class":109},[69,19210,1398],{"class":86},[69,19212,18380],{"class":109},[69,19214,18383],{"class":6458},[69,19216,18386],{"class":86},[69,19218,1019],{"class":82},[69,19220,18391],{"class":86},[69,19222,19223],{"class":71,"line":116},[69,19224,19225],{"class":75},"\u002F\u002F获取属性\n",[69,19227,19228,19230,19232,19234,19236,19238,19240],{"class":71,"line":133},[69,19229,15278],{"class":82},[69,19231,19182],{"class":109},[69,19233,18971],{"class":86},[69,19235,18583],{"class":109},[69,19237,18282],{"class":86},[69,19239,18285],{"class":82},[69,19241,18410],{"class":86},[69,19243,19244,19246,19248,19250,19252,19254,19256],{"class":71,"line":139},[69,19245,18380],{"class":109},[69,19247,19182],{"class":109},[69,19249,18971],{"class":86},[69,19251,18497],{"class":109},[69,19253,18282],{"class":86},[69,19255,18285],{"class":82},[69,19257,18425],{"class":86},[29,19259,19260],{},"使用封装的类",[59,19262,19264],{"className":1386,"code":19263,"language":1388,"meta":64,"style":64},"#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",[66,19265,19266,19272,19282,19288,19294,19318,19322,19348,19374,19398,19412,19416,19428,19432,19436,19440,19452,19456,19460,19468,19472,19476,19480,19484,19488,19498,19504,19512,19520,19530,19536,19548,19556,19564,19574,19580,19592,19596,19604,19610],{"__ignoreMap":64},[69,19267,19268,19270],{"class":71,"line":72},[69,19269,3194],{"class":82},[69,19271,3197],{"class":1022},[69,19273,19274,19276,19278,19280],{"class":71,"line":79},[69,19275,3202],{"class":82},[69,19277,3205],{"class":82},[69,19279,3208],{"class":109},[69,19281,130],{"class":86},[69,19283,19284,19286],{"class":71,"line":106},[69,19285,3194],{"class":82},[69,19287,19175],{"class":1022},[69,19289,19290,19292],{"class":71,"line":116},[69,19291,3194],{"class":82},[69,19293,18956],{"class":1022},[69,19295,19296,19298,19300,19302,19304,19306,19308,19310,19312,19314,19316],{"class":71,"line":133},[69,19297,6606],{"class":82},[69,19299,18460],{"class":109},[69,19301,1398],{"class":86},[69,19303,18465],{"class":109},[69,19305,11826],{"class":82},[69,19307,1679],{"class":6458},[69,19309,1767],{"class":86},[69,19311,18380],{"class":109},[69,19313,11826],{"class":82},[69,19315,29],{"class":6458},[69,19317,1404],{"class":86},[69,19319,19320],{"class":71,"line":139},[69,19321,2797],{"class":86},[69,19323,19324,19326,19328,19330,19332,19334,19336,19338,19340,19342,19344,19346],{"class":71,"line":401},[69,19325,15978],{"class":82},[69,19327,18490],{"class":86},[69,19329,1019],{"class":82},[69,19331,17581],{"class":86},[69,19333,18497],{"class":109},[69,19335,18500],{"class":86},[69,19337,18503],{"class":109},[69,19339,14291],{"class":86},[69,19341,1920],{"class":82},[69,19343,17127],{"class":86},[69,19345,18503],{"class":109},[69,19347,6878],{"class":86},[69,19349,19350,19352,19354,19356,19358,19360,19362,19364,19366,19368,19370,19372],{"class":71,"line":470},[69,19351,15978],{"class":82},[69,19353,18520],{"class":86},[69,19355,1019],{"class":82},[69,19357,17581],{"class":86},[69,19359,18497],{"class":109},[69,19361,18500],{"class":86},[69,19363,18531],{"class":109},[69,19365,14291],{"class":86},[69,19367,1920],{"class":82},[69,19369,17127],{"class":86},[69,19371,18531],{"class":109},[69,19373,6878],{"class":86},[69,19375,19376,19378,19380,19382,19384,19386,19388,19390,19392,19394,19396],{"class":71,"line":475},[69,19377,15978],{"class":82},[69,19379,18548],{"class":86},[69,19381,1019],{"class":82},[69,19383,18553],{"class":109},[69,19385,18556],{"class":86},[69,19387,1843],{"class":82},[69,19389,18490],{"class":86},[69,19391,1869],{"class":82},[69,19393,18520],{"class":86},[69,19395,1843],{"class":82},[69,19397,18569],{"class":86},[69,19399,19400,19402,19404,19406,19408,19410],{"class":71,"line":482},[69,19401,4345],{"class":82},[69,19403,18576],{"class":86},[69,19405,1011],{"class":82},[69,19407,17581],{"class":86},[69,19409,18583],{"class":109},[69,19411,18586],{"class":86},[69,19413,19414],{"class":71,"line":497},[69,19415,3274],{"class":86},[69,19417,19418,19420,19422,19424,19426],{"class":71,"line":502},[69,19419,10911],{"class":86},[69,19421,2429],{"class":82},[69,19423,18599],{"class":1022},[69,19425,2696],{"class":82},[69,19427,10082],{"class":86},[69,19429,19430],{"class":71,"line":509},[69,19431,3431],{"class":86},[69,19433,19434],{"class":71,"line":524},[69,19435,18062],{"class":82},[69,19437,19438],{"class":71,"line":2888},[69,19439,3274],{"class":86},[69,19441,19442,19444,19446,19448,19450],{"class":71,"line":2893},[69,19443,10911],{"class":86},[69,19445,2429],{"class":82},[69,19447,18624],{"class":1022},[69,19449,2696],{"class":82},[69,19451,10082],{"class":86},[69,19453,19454],{"class":71,"line":2899},[69,19455,3431],{"class":86},[69,19457,19458],{"class":71,"line":2919},[69,19459,142],{"class":86},[69,19461,19462,19464,19466],{"class":71,"line":2924},[69,19463,1401],{"class":82},[69,19465,3217],{"class":109},[69,19467,3220],{"class":86},[69,19469,19470],{"class":71,"line":2938},[69,19471,2797],{"class":86},[69,19473,19474],{"class":71,"line":2943},[69,19475,16293],{"class":75},[69,19477,19478],{"class":71,"line":2972},[69,19479,16040],{"class":86},[69,19481,19482],{"class":71,"line":2977},[69,19483,18661],{"class":86},[69,19485,19486],{"class":71,"line":2994},[69,19487,18233],{"class":75},[69,19489,19490,19492,19494,19496],{"class":71,"line":2999},[69,19491,2802],{"class":86},[69,19493,2429],{"class":82},[69,19495,18674],{"class":1022},[69,19497,130],{"class":86},[69,19499,19500,19502],{"class":71,"line":3004},[69,19501,15978],{"class":82},[69,19503,18683],{"class":86},[69,19505,19506,19508,19510],{"class":71,"line":3009},[69,19507,3256],{"class":86},[69,19509,2681],{"class":82},[69,19511,18692],{"class":86},[69,19513,19514,19516,19518],{"class":71,"line":3023},[69,19515,17834],{"class":86},[69,19517,18699],{"class":109},[69,19519,18702],{"class":86},[69,19521,19522,19524,19526,19528],{"class":71,"line":3028},[69,19523,2802],{"class":86},[69,19525,2429],{"class":82},[69,19527,18711],{"class":1022},[69,19529,130],{"class":86},[69,19531,19532,19534],{"class":71,"line":3821},[69,19533,15978],{"class":82},[69,19535,18720],{"class":86},[69,19537,19538,19540,19542,19544,19546],{"class":71,"line":3835},[69,19539,3256],{"class":86},[69,19541,2681],{"class":82},[69,19543,2207],{"class":86},[69,19545,2681],{"class":82},[69,19547,18733],{"class":86},[69,19549,19550,19552,19554],{"class":71,"line":3843},[69,19551,18738],{"class":86},[69,19553,18741],{"class":109},[69,19555,18744],{"class":86},[69,19557,19558,19560,19562],{"class":71,"line":3848},[69,19559,17834],{"class":86},[69,19561,18751],{"class":109},[69,19563,18754],{"class":86},[69,19565,19566,19568,19570,19572],{"class":71,"line":3854},[69,19567,2802],{"class":86},[69,19569,2429],{"class":82},[69,19571,18763],{"class":1022},[69,19573,130],{"class":86},[69,19575,19576,19578],{"class":71,"line":3860},[69,19577,15978],{"class":82},[69,19579,18772],{"class":86},[69,19581,19582,19584,19586,19588,19590],{"class":71,"line":3865},[69,19583,3256],{"class":86},[69,19585,2681],{"class":82},[69,19587,18781],{"class":86},[69,19589,2681],{"class":82},[69,19591,18786],{"class":86},[69,19593,19594],{"class":71,"line":9190},[69,19595,18791],{"class":86},[69,19597,19598,19600,19602],{"class":71,"line":9214},[69,19599,18796],{"class":86},[69,19601,18741],{"class":109},[69,19603,18801],{"class":86},[69,19605,19606,19608],{"class":71,"line":9219},[69,19607,18806],{"class":109},[69,19609,18809],{"class":86},[69,19611,19612],{"class":71,"line":9225},[69,19613,142],{"class":86},[14,19615,19617],{"id":19616},"_82对象的初始化清理","8.2对象的初始化清理",[162,19619,19620,19623],{},[40,19621,19622],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[40,19624,19625],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[19,19627,19629],{"id":19628},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[29,19631,19632,19633,19636],{},"对象的",[195,19634,19635],{},"初始化和清理","也是两个非常重要的安全问题",[29,19638,19639],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[29,19641,19642],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[29,19644,19645,19646,19649,19650,19653],{},"c++利用了",[195,19647,19648],{},"构造函数","和",[195,19651,19652],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[29,19655,19656,19657],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[195,19658,19659],{},"我们不提供构造和析构，编译器会提供",[29,19661,19662],{},[195,19663,19664],{},"编译器提供的构造函数和析构函数是空实现。",[162,19666,19667,19670],{},[40,19668,19669],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[40,19671,19672,19673,19676],{},"析构函数：主要作用在于对象",[195,19674,19675],{},"销毁前","系统自动调用，执行一些清理工作。",[29,19678,19679,19682],{},[195,19680,19681],{},"构造函数语法：",[66,19683,19684],{},"类名(){}",[37,19686,19687,19690,19693,19696,19699],{},[40,19688,19689],{},"构造函数，没有返回值也不写void",[40,19691,19692],{},"函数名称与类名相同",[40,19694,19695],{},"构造函数可以有参数，因此可以发生重载",[40,19697,19698],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[40,19700,19701,19702,1818],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[66,19703,19704],{},"Person(){}",[29,19706,19707,15036,19710],{},[195,19708,19709],{},"析构函数语法：",[66,19711,19712],{},"~类名(){}",[37,19714,19715,19718,19721,19727],{},[40,19716,19717],{},"析构函数，没有返回值也不写void",[40,19719,19720],{},"函数名称与类名相同,在名称前加上符号  ~",[40,19722,19723,19724],{},"析构函数不可以有参数，因此",[195,19725,19726],{},"不可以发生重载",[40,19728,19729],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[59,19731,19733],{"className":1386,"code":19732,"language":1388,"meta":64,"style":64},"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",[66,19734,19735,19741,19745,19749,19754,19761,19765,19778,19782,19787,19794,19798,19811,19815,19819,19823,19827,19835,19839,19847,19851,19855,19863,19867,19872,19876,19883,19887,19900,19904,19912],{"__ignoreMap":64},[69,19736,19737,19739],{"class":71,"line":72},[69,19738,15934],{"class":82},[69,19740,16411],{"class":109},[69,19742,19743],{"class":71,"line":79},[69,19744,2797],{"class":86},[69,19746,19747],{"class":71,"line":106},[69,19748,15956],{"class":82},[69,19750,19751],{"class":71,"line":116},[69,19752,19753],{"class":75},"    \u002F\u002F构造函数\n",[69,19755,19756,19759],{"class":71,"line":133},[69,19757,19758],{"class":109},"    Person",[69,19760,3220],{"class":86},[69,19762,19763],{"class":71,"line":139},[69,19764,3274],{"class":86},[69,19766,19767,19769,19771,19774,19776],{"class":71,"line":401},[69,19768,10911],{"class":86},[69,19770,2429],{"class":82},[69,19772,19773],{"class":1022}," \"Person的构造函数调用\"",[69,19775,2696],{"class":82},[69,19777,10082],{"class":86},[69,19779,19780],{"class":71,"line":470},[69,19781,3431],{"class":86},[69,19783,19784],{"class":71,"line":475},[69,19785,19786],{"class":75},"    \u002F\u002F析构函数\n",[69,19788,19789,19792],{"class":71,"line":482},[69,19790,19791],{"class":109},"    ~Person",[69,19793,3220],{"class":86},[69,19795,19796],{"class":71,"line":497},[69,19797,3274],{"class":86},[69,19799,19800,19802,19804,19807,19809],{"class":71,"line":502},[69,19801,10911],{"class":86},[69,19803,2429],{"class":82},[69,19805,19806],{"class":1022}," \"Person的析构函数调用\"",[69,19808,2696],{"class":82},[69,19810,10082],{"class":86},[69,19812,19813],{"class":71,"line":509},[69,19814,3431],{"class":86},[69,19816,19817],{"class":71,"line":524},[69,19818,3644],{"emptyLinePlaceholder":1325},[69,19820,19821],{"class":71,"line":2888},[69,19822,5239],{"class":86},[69,19824,19825],{"class":71,"line":2893},[69,19826,3644],{"emptyLinePlaceholder":1325},[69,19828,19829,19831,19833],{"class":71,"line":2899},[69,19830,6606],{"class":82},[69,19832,6830],{"class":109},[69,19834,3220],{"class":86},[69,19836,19837],{"class":71,"line":2919},[69,19838,2797],{"class":86},[69,19840,19841,19844],{"class":71,"line":2924},[69,19842,19843],{"class":86},"    Person p;",[69,19845,19846],{"class":75},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[69,19848,19849],{"class":71,"line":2938},[69,19850,142],{"class":86},[69,19852,19853],{"class":71,"line":2943},[69,19854,3644],{"emptyLinePlaceholder":1325},[69,19856,19857,19859,19861],{"class":71,"line":2972},[69,19858,1401],{"class":82},[69,19860,3217],{"class":109},[69,19862,12095],{"class":86},[69,19864,19865],{"class":71,"line":2977},[69,19866,14451],{"class":86},[69,19868,19869],{"class":71,"line":2994},[69,19870,19871],{"class":75},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[69,19873,19874],{"class":71,"line":2999},[69,19875,3644],{"emptyLinePlaceholder":1325},[69,19877,19878,19880],{"class":71,"line":3004},[69,19879,19843],{"class":86},[69,19881,19882],{"class":75},"\u002F\u002F只有构造函数\n",[69,19884,19885],{"class":71,"line":3009},[69,19886,3644],{"emptyLinePlaceholder":1325},[69,19888,19889,19891,19893,19895,19897],{"class":71,"line":3023},[69,19890,3547],{"class":109},[69,19892,1398],{"class":86},[69,19894,3552],{"class":1022},[69,19896,7208],{"class":86},[69,19898,19899],{"class":75},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[69,19901,19902],{"class":71,"line":3028},[69,19903,3644],{"emptyLinePlaceholder":1325},[69,19905,19906,19908,19910],{"class":71,"line":3821},[69,19907,5334],{"class":82},[69,19909,5337],{"class":90},[69,19911,130],{"class":86},[69,19913,19914],{"class":71,"line":3835},[69,19915,142],{"class":86},[29,19917,19918],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[19,19920,19922],{"id":19921},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[29,19924,19925],{},"两种分类方式：",[29,19927,19928],{},"​\t按参数分为： 有参构造和无参构造",[29,19930,19931],{},"​\t按类型分为： 普通构造和拷贝构造",[29,19933,19934],{},"三种调用方式：",[29,19936,19937],{},"​\t括号法",[29,19939,19940],{},"​\t显示法",[29,19942,19943],{},"​\t隐式转换法",[59,19945,19947],{"className":1386,"code":19946,"language":1388,"meta":64,"style":64},"#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",[66,19948,19949,19955,19965,19970,19975,19980,19985,19989,19997,20001,20005,20009,20015,20019,20032,20036,20048,20052,20061,20074,20078,20082,20088,20092,20105,20109,20114,20130,20134,20139,20148,20161,20165,20171,20175,20180,20188,20192,20197,20201,20209,20213,20218,20223,20228,20233,20238,20242,20247,20252,20257,20262,20266,20271,20276,20292,20304,20309,20313,20318,20323,20328,20332,20337,20351,20364,20368,20376,20380,20386,20392,20400],{"__ignoreMap":64},[69,19950,19951,19953],{"class":71,"line":72},[69,19952,3194],{"class":82},[69,19954,3197],{"class":1022},[69,19956,19957,19959,19961,19963],{"class":71,"line":79},[69,19958,3202],{"class":82},[69,19960,3205],{"class":82},[69,19962,3208],{"class":109},[69,19964,130],{"class":86},[69,19966,19967],{"class":71,"line":106},[69,19968,19969],{"class":75},"\u002F\u002F1.构造函数的分类及调用\n",[69,19971,19972],{"class":71,"line":116},[69,19973,19974],{"class":75},"\u002F\u002F分类\n",[69,19976,19977],{"class":71,"line":133},[69,19978,19979],{"class":75},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[69,19981,19982],{"class":71,"line":139},[69,19983,19984],{"class":75},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[69,19986,19987],{"class":71,"line":401},[69,19988,3644],{"emptyLinePlaceholder":1325},[69,19990,19991,19993,19995],{"class":71,"line":470},[69,19992,15934],{"class":82},[69,19994,16809],{"class":109},[69,19996,3918],{"class":86},[69,19998,19999],{"class":71,"line":475},[69,20000,2797],{"class":86},[69,20002,20003],{"class":71,"line":482},[69,20004,15956],{"class":82},[69,20006,20007],{"class":71,"line":497},[69,20008,19753],{"class":75},[69,20010,20011,20013],{"class":71,"line":502},[69,20012,19758],{"class":109},[69,20014,3220],{"class":86},[69,20016,20017],{"class":71,"line":509},[69,20018,3274],{"class":86},[69,20020,20021,20023,20025,20028,20030],{"class":71,"line":524},[69,20022,4695],{"class":86},[69,20024,2429],{"class":82},[69,20026,20027],{"class":1022},"\"Person构造函数无参构造\"",[69,20029,2429],{"class":82},[69,20031,2451],{"class":86},[69,20033,20034],{"class":71,"line":2888},[69,20035,3431],{"class":86},[69,20037,20038,20040,20042,20044,20046],{"class":71,"line":2893},[69,20039,19758],{"class":109},[69,20041,1398],{"class":86},[69,20043,1401],{"class":82},[69,20045,2650],{"class":6458},[69,20047,1404],{"class":86},[69,20049,20050],{"class":71,"line":2899},[69,20051,3274],{"class":86},[69,20053,20054,20057,20059],{"class":71,"line":2919},[69,20055,20056],{"class":86},"        age",[69,20058,1019],{"class":82},[69,20060,7439],{"class":86},[69,20062,20063,20065,20067,20070,20072],{"class":71,"line":2924},[69,20064,4695],{"class":86},[69,20066,2429],{"class":82},[69,20068,20069],{"class":1022},"\"Person构造函数有参构造\"",[69,20071,2429],{"class":82},[69,20073,2451],{"class":86},[69,20075,20076],{"class":71,"line":2938},[69,20077,3431],{"class":86},[69,20079,20080],{"class":71,"line":2943},[69,20081,19786],{"class":75},[69,20083,20084,20086],{"class":71,"line":2972},[69,20085,19791],{"class":109},[69,20087,3220],{"class":86},[69,20089,20090],{"class":71,"line":2977},[69,20091,3274],{"class":86},[69,20093,20094,20096,20098,20101,20103],{"class":71,"line":2994},[69,20095,4695],{"class":86},[69,20097,2429],{"class":82},[69,20099,20100],{"class":1022},"\"Person析构函数被调用\"",[69,20102,2429],{"class":82},[69,20104,2451],{"class":86},[69,20106,20107],{"class":71,"line":2999},[69,20108,3431],{"class":86},[69,20110,20111],{"class":71,"line":3004},[69,20112,20113],{"class":75},"    \u002F\u002F拷贝构造函数\n",[69,20115,20116,20118,20120,20122,20124,20126,20128],{"class":71,"line":3009},[69,20117,19758],{"class":109},[69,20119,1398],{"class":86},[69,20121,8034],{"class":82},[69,20123,16809],{"class":109},[69,20125,11826],{"class":82},[69,20127,29],{"class":6458},[69,20129,1404],{"class":86},[69,20131,20132],{"class":71,"line":3023},[69,20133,3274],{"class":86},[69,20135,20136],{"class":71,"line":3028},[69,20137,20138],{"class":75},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[69,20140,20141,20143,20145],{"class":71,"line":3821},[69,20142,20056],{"class":86},[69,20144,1019],{"class":82},[69,20146,20147],{"class":86},"p.age;\n",[69,20149,20150,20152,20154,20157,20159],{"class":71,"line":3835},[69,20151,4695],{"class":86},[69,20153,2429],{"class":82},[69,20155,20156],{"class":1022},"\"Person拷贝构造函数被调用\"",[69,20158,2429],{"class":82},[69,20160,2451],{"class":86},[69,20162,20163],{"class":71,"line":3843},[69,20164,3431],{"class":86},[69,20166,20167,20169],{"class":71,"line":3848},[69,20168,3229],{"class":82},[69,20170,9039],{"class":86},[69,20172,20173],{"class":71,"line":3854},[69,20174,5239],{"class":86},[69,20176,20177],{"class":71,"line":3860},[69,20178,20179],{"class":75},"\u002F\u002F调用\n",[69,20181,20182,20184,20186],{"class":71,"line":3865},[69,20183,6606],{"class":82},[69,20185,6830],{"class":109},[69,20187,3220],{"class":86},[69,20189,20190],{"class":71,"line":9190},[69,20191,2797],{"class":86},[69,20193,20194],{"class":71,"line":9214},[69,20195,20196],{"class":75},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[69,20198,20199],{"class":71,"line":9219},[69,20200,142],{"class":86},[69,20202,20203,20205,20207],{"class":71,"line":9225},[69,20204,6606],{"class":82},[69,20206,6899],{"class":109},[69,20208,3220],{"class":86},[69,20210,20211],{"class":71,"line":9252},[69,20212,2797],{"class":86},[69,20214,20215],{"class":71,"line":9257},[69,20216,20217],{"class":75},"    \u002F\u002F1.括号法\n",[69,20219,20220],{"class":71,"line":9263},[69,20221,20222],{"class":75},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[69,20224,20225],{"class":71,"line":9275},[69,20226,20227],{"class":75},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[69,20229,20230],{"class":71,"line":9287},[69,20231,20232],{"class":75},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[69,20234,20235],{"class":71,"line":9299},[69,20236,20237],{"class":75},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[69,20239,20240],{"class":71,"line":10958},[69,20241,3644],{"emptyLinePlaceholder":1325},[69,20243,20244],{"class":71,"line":10983},[69,20245,20246],{"class":75},"    \u002F\u002F注意事项\n",[69,20248,20249],{"class":71,"line":11006},[69,20250,20251],{"class":75},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[69,20253,20254],{"class":71,"line":11030},[69,20255,20256],{"class":75},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[69,20258,20259],{"class":71,"line":11035},[69,20260,20261],{"class":75},"    \u002F\u002F Person p4();\n",[69,20263,20264],{"class":71,"line":11040},[69,20265,3644],{"emptyLinePlaceholder":1325},[69,20267,20268],{"class":71,"line":11045},[69,20269,20270],{"class":75},"    \u002F\u002F2.显示法\n",[69,20272,20273],{"class":71,"line":11054},[69,20274,20275],{"class":86},"    Person p1;\n",[69,20277,20278,20281,20283,20286,20288,20290],{"class":71,"line":11059},[69,20279,20280],{"class":86},"    Person p2",[69,20282,1019],{"class":82},[69,20284,20285],{"class":109},"Person",[69,20287,1398],{"class":86},[69,20289,390],{"class":90},[69,20291,3963],{"class":86},[69,20293,20294,20297,20299,20301],{"class":71,"line":11065},[69,20295,20296],{"class":86},"    Person p3",[69,20298,1019],{"class":82},[69,20300,20285],{"class":109},[69,20302,20303],{"class":86},"(p2);\n",[69,20305,20306],{"class":71,"line":11086},[69,20307,20308],{"class":75},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[69,20310,20311],{"class":71,"line":11092},[69,20312,3644],{"emptyLinePlaceholder":1325},[69,20314,20315],{"class":71,"line":11106},[69,20316,20317],{"class":75},"    \u002F\u002F 注意事项2\n",[69,20319,20320],{"class":71,"line":11112},[69,20321,20322],{"class":75},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[69,20324,20325],{"class":71,"line":11139},[69,20326,20327],{"class":75},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[69,20329,20330],{"class":71,"line":11148},[69,20331,3644],{"emptyLinePlaceholder":1325},[69,20333,20334],{"class":71,"line":11154},[69,20335,20336],{"class":75},"    \u002F\u002F3.隐士转换法\n",[69,20338,20339,20342,20344,20346,20348],{"class":71,"line":11162},[69,20340,20341],{"class":86},"    Person p4",[69,20343,1019],{"class":82},[69,20345,390],{"class":90},[69,20347,1450],{"class":86},[69,20349,20350],{"class":75},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[69,20352,20353,20356,20358,20361],{"class":71,"line":11167},[69,20354,20355],{"class":86},"    Person p5",[69,20357,1019],{"class":82},[69,20359,20360],{"class":86},"p4;",[69,20362,20363],{"class":75}," \u002F\u002F 这里会调用拷贝构造函数\n",[69,20365,20366],{"class":71,"line":17843},[69,20367,142],{"class":86},[69,20369,20370,20372,20374],{"class":71,"line":17849},[69,20371,1401],{"class":82},[69,20373,3217],{"class":109},[69,20375,3220],{"class":86},[69,20377,20378],{"class":71,"line":17872},[69,20379,2797],{"class":86},[69,20381,20382,20384],{"class":71,"line":17878},[69,20383,6875],{"class":109},[69,20385,6878],{"class":86},[69,20387,20388,20390],{"class":71,"line":17901},[69,20389,6944],{"class":109},[69,20391,6878],{"class":86},[69,20393,20394,20396,20398],{"class":71,"line":17915},[69,20395,5334],{"class":82},[69,20397,5337],{"class":90},[69,20399,130],{"class":86},[69,20401,20402],{"class":71,"line":17935},[69,20403,142],{"class":86},[29,20405,20406,20409],{},[195,20407,20408],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[19,20411,20413],{"id":20412},"_823拷贝构造函数","8.2.3拷贝构造函数",[29,20415,20416],{},"C++中拷贝构造函数调用时机通常有三种情况",[162,20418,20419,20422,20425],{},[40,20420,20421],{},"使用一个已经创建完毕的对象来初始化一个新对象",[40,20423,20424],{},"值传递的方式给函数参数传值",[40,20426,20427],{},"以值方式返回局部对象",[59,20429,20431],{"className":1386,"code":20430,"language":1388,"meta":64,"style":64},"#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",[66,20432,20433,20439,20449,20453,20458,20462,20467,20472,20477,20483,20487,20491,20497,20501,20514,20518,20523,20535,20539,20547,20560,20564,20568,20584,20588,20597,20610,20614,20620,20624,20636,20640,20646,20650,20654,20662,20666,20679,20687,20705,20709,20714,20719,20734,20738,20751,20755,20763,20767,20771,20779,20783,20788,20797,20801,20805,20830,20840,20844,20852,20856,20867,20892,20896,20900,20904,20912,20916,20921,20926,20933,20938,20943,20948,20953,20957,20962,20966,20971,20975,20980,20985,20989,20993,20998,21003,21011],{"__ignoreMap":64},[69,20434,20435,20437],{"class":71,"line":72},[69,20436,3194],{"class":82},[69,20438,3197],{"class":1022},[69,20440,20441,20443,20445,20447],{"class":71,"line":79},[69,20442,3202],{"class":82},[69,20444,3205],{"class":82},[69,20446,3208],{"class":109},[69,20448,130],{"class":86},[69,20450,20451],{"class":71,"line":106},[69,20452,3644],{"emptyLinePlaceholder":1325},[69,20454,20455],{"class":71,"line":116},[69,20456,20457],{"class":75},"\u002F\u002F拷贝构造函数调用时机\n",[69,20459,20460],{"class":71,"line":133},[69,20461,3644],{"emptyLinePlaceholder":1325},[69,20463,20464],{"class":71,"line":139},[69,20465,20466],{"class":75},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[69,20468,20469],{"class":71,"line":401},[69,20470,20471],{"class":75},"\u002F\u002F2.值传递的方式给函数参数传值\n",[69,20473,20474],{"class":71,"line":470},[69,20475,20476],{"class":75},"\u002F\u002F3.以值方式返回局部对象\n",[69,20478,20479,20481],{"class":71,"line":475},[69,20480,15934],{"class":82},[69,20482,16411],{"class":109},[69,20484,20485],{"class":71,"line":482},[69,20486,2797],{"class":86},[69,20488,20489],{"class":71,"line":497},[69,20490,15956],{"class":82},[69,20492,20493,20495],{"class":71,"line":502},[69,20494,19758],{"class":109},[69,20496,3220],{"class":86},[69,20498,20499],{"class":71,"line":509},[69,20500,3274],{"class":86},[69,20502,20503,20505,20507,20510,20512],{"class":71,"line":524},[69,20504,10911],{"class":86},[69,20506,2429],{"class":82},[69,20508,20509],{"class":1022}," \"Person的默认构造函数调用\"",[69,20511,2696],{"class":82},[69,20513,10082],{"class":86},[69,20515,20516],{"class":71,"line":2888},[69,20517,3431],{"class":86},[69,20519,20520],{"class":71,"line":2893},[69,20521,20522],{"class":75},"    \u002F\u002F有参构造\n",[69,20524,20525,20527,20529,20531,20533],{"class":71,"line":2899},[69,20526,19758],{"class":109},[69,20528,1398],{"class":86},[69,20530,1401],{"class":82},[69,20532,16928],{"class":6458},[69,20534,1404],{"class":86},[69,20536,20537],{"class":71,"line":2919},[69,20538,3274],{"class":86},[69,20540,20541,20543,20545],{"class":71,"line":2924},[69,20542,16982],{"class":86},[69,20544,1019],{"class":82},[69,20546,9039],{"class":86},[69,20548,20549,20551,20553,20556,20558],{"class":71,"line":2938},[69,20550,10911],{"class":86},[69,20552,2429],{"class":82},[69,20554,20555],{"class":1022}," \"Person的有参构造函数调用\"",[69,20557,2696],{"class":82},[69,20559,10082],{"class":86},[69,20561,20562],{"class":71,"line":2943},[69,20563,3431],{"class":86},[69,20565,20566],{"class":71,"line":2972},[69,20567,20113],{"class":75},[69,20569,20570,20572,20574,20576,20578,20580,20582],{"class":71,"line":2977},[69,20571,19758],{"class":109},[69,20573,1398],{"class":86},[69,20575,8034],{"class":82},[69,20577,16809],{"class":109},[69,20579,11826],{"class":82},[69,20581,29],{"class":6458},[69,20583,1404],{"class":86},[69,20585,20586],{"class":71,"line":2994},[69,20587,3274],{"class":86},[69,20589,20590,20592,20594],{"class":71,"line":2999},[69,20591,16982],{"class":86},[69,20593,1019],{"class":82},[69,20595,20596],{"class":86}," p.m_Age;\n",[69,20598,20599,20601,20603,20606,20608],{"class":71,"line":3004},[69,20600,10911],{"class":86},[69,20602,2429],{"class":82},[69,20604,20605],{"class":1022}," \"Person的拷贝构造函数调用\"",[69,20607,2696],{"class":82},[69,20609,10082],{"class":86},[69,20611,20612],{"class":71,"line":3009},[69,20613,3431],{"class":86},[69,20615,20616,20618],{"class":71,"line":3023},[69,20617,19791],{"class":109},[69,20619,3220],{"class":86},[69,20621,20622],{"class":71,"line":3028},[69,20623,3274],{"class":86},[69,20625,20626,20628,20630,20632,20634],{"class":71,"line":3821},[69,20627,10911],{"class":86},[69,20629,2429],{"class":82},[69,20631,19806],{"class":1022},[69,20633,2696],{"class":82},[69,20635,10082],{"class":86},[69,20637,20638],{"class":71,"line":3835},[69,20639,3431],{"class":86},[69,20641,20642,20644],{"class":71,"line":3843},[69,20643,3229],{"class":82},[69,20645,16905],{"class":86},[69,20647,20648],{"class":71,"line":3848},[69,20649,5239],{"class":86},[69,20651,20652],{"class":71,"line":3854},[69,20653,20466],{"class":75},[69,20655,20656,20658,20660],{"class":71,"line":3860},[69,20657,6606],{"class":82},[69,20659,6830],{"class":109},[69,20661,3220],{"class":86},[69,20663,20664],{"class":71,"line":3865},[69,20665,2797],{"class":86},[69,20667,20668,20671,20673,20675,20677],{"class":71,"line":9190},[69,20669,20670],{"class":86},"    Person ",[69,20672,8372],{"class":109},[69,20674,1398],{"class":86},[69,20676,2087],{"class":90},[69,20678,3963],{"class":86},[69,20680,20681,20683,20685],{"class":71,"line":9214},[69,20682,20670],{"class":86},[69,20684,8275],{"class":109},[69,20686,18754],{"class":86},[69,20688,20689,20691,20693,20696,20698,20701,20703],{"class":71,"line":9219},[69,20690,2802],{"class":86},[69,20692,2429],{"class":82},[69,20694,20695],{"class":1022},"\"P2的年龄为：\"",[69,20697,2429],{"class":82},[69,20699,20700],{"class":86},"p2.m_Age",[69,20702,2429],{"class":82},[69,20704,2451],{"class":86},[69,20706,20707],{"class":71,"line":9225},[69,20708,142],{"class":86},[69,20710,20711],{"class":71,"line":9252},[69,20712,20713],{"class":75},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[69,20715,20716],{"class":71,"line":9257},[69,20717,20718],{"class":75},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[69,20720,20721,20723,20726,20728,20730,20732],{"class":71,"line":9263},[69,20722,6606],{"class":82},[69,20724,20725],{"class":109}," doWork",[69,20727,1398],{"class":86},[69,20729,20285],{"class":109},[69,20731,8067],{"class":6458},[69,20733,1404],{"class":86},[69,20735,20736],{"class":71,"line":9275},[69,20737,2797],{"class":86},[69,20739,20740,20742,20744,20747,20749],{"class":71,"line":9287},[69,20741,7771],{"class":86},[69,20743,2429],{"class":82},[69,20745,20746],{"class":1022}," \"doWork函数调用\"",[69,20748,2696],{"class":82},[69,20750,10082],{"class":86},[69,20752,20753],{"class":71,"line":9299},[69,20754,142],{"class":86},[69,20756,20757,20759,20761],{"class":71,"line":10958},[69,20758,6606],{"class":82},[69,20760,6899],{"class":109},[69,20762,3220],{"class":86},[69,20764,20765],{"class":71,"line":10983},[69,20766,2797],{"class":86},[69,20768,20769],{"class":71,"line":11006},[69,20770,16553],{"class":86},[69,20772,20773,20776],{"class":71,"line":11030},[69,20774,20775],{"class":109},"    doWork",[69,20777,20778],{"class":86},"(p);\n",[69,20780,20781],{"class":71,"line":11035},[69,20782,142],{"class":86},[69,20784,20785],{"class":71,"line":11040},[69,20786,20787],{"class":75},"\u002F\u002F 3.以值方式返回局部对象\n",[69,20789,20790,20792,20795],{"class":71,"line":11045},[69,20791,20285],{"class":109},[69,20793,20794],{"class":109}," doWork2",[69,20796,3220],{"class":86},[69,20798,20799],{"class":71,"line":11054},[69,20800,2797],{"class":86},[69,20802,20803],{"class":71,"line":11059},[69,20804,20275],{"class":86},[69,20806,20807,20809,20811,20813,20815,20817,20819,20821,20823,20825,20827],{"class":71,"line":11065},[69,20808,2802],{"class":86},[69,20810,2429],{"class":82},[69,20812,1398],{"class":86},[69,20814,1401],{"class":82},[69,20816,7760],{"class":82},[69,20818,1818],{"class":86},[69,20820,1742],{"class":82},[69,20822,8372],{"class":86},[69,20824,2429],{"class":82},[69,20826,2494],{"class":86},[69,20828,20829],{"class":75},"\u002F\u002F打印p1的地址\n",[69,20831,20832,20834,20837],{"class":71,"line":11086},[69,20833,5334],{"class":82},[69,20835,20836],{"class":86}," p1;",[69,20838,20839],{"class":75},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[69,20841,20842],{"class":71,"line":11092},[69,20843,142],{"class":86},[69,20845,20846,20848,20850],{"class":71,"line":11106},[69,20847,6606],{"class":82},[69,20849,6971],{"class":109},[69,20851,3220],{"class":86},[69,20853,20854],{"class":71,"line":11112},[69,20855,2797],{"class":86},[69,20857,20858,20861,20863,20865],{"class":71,"line":11139},[69,20859,20860],{"class":86},"    Person p ",[69,20862,1019],{"class":82},[69,20864,20794],{"class":109},[69,20866,6878],{"class":86},[69,20868,20869,20871,20873,20875,20877,20879,20881,20883,20885,20887,20889],{"class":71,"line":11148},[69,20870,2802],{"class":86},[69,20872,2429],{"class":82},[69,20874,1398],{"class":86},[69,20876,1401],{"class":82},[69,20878,7760],{"class":82},[69,20880,1818],{"class":86},[69,20882,1742],{"class":82},[69,20884,29],{"class":86},[69,20886,2429],{"class":82},[69,20888,2494],{"class":86},[69,20890,20891],{"class":75},"\u002F\u002F打印p的地址\n",[69,20893,20894],{"class":71,"line":11154},[69,20895,142],{"class":86},[69,20897,20898],{"class":71,"line":11162},[69,20899,3644],{"emptyLinePlaceholder":1325},[69,20901,20902],{"class":71,"line":11167},[69,20903,3644],{"emptyLinePlaceholder":1325},[69,20905,20906,20908,20910],{"class":71,"line":17843},[69,20907,1401],{"class":82},[69,20909,3217],{"class":109},[69,20911,3220],{"class":86},[69,20913,20914],{"class":71,"line":17849},[69,20915,2797],{"class":86},[69,20917,20918],{"class":71,"line":17872},[69,20919,20920],{"class":75},"    \u002F\u002F test01();\n",[69,20922,20923],{"class":71,"line":17878},[69,20924,20925],{"class":75},"    \u002F\u002F test02();\n",[69,20927,20928,20931],{"class":71,"line":17901},[69,20929,20930],{"class":109},"    test03",[69,20932,6878],{"class":86},[69,20934,20935],{"class":71,"line":17915},[69,20936,20937],{"class":75},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[69,20939,20940],{"class":71,"line":17935},[69,20941,20942],{"class":75},"\u002F\u002F 输出结果如下：\n",[69,20944,20945],{"class":71,"line":17941},[69,20946,20947],{"class":75},"\u002F\u002F Person的默认构造函数调用\n",[69,20949,20950],{"class":71,"line":17952},[69,20951,20952],{"class":75},"\u002F\u002F 0x7fffffffceec\n",[69,20954,20955],{"class":71,"line":17975},[69,20956,20952],{"class":75},[69,20958,20959],{"class":71,"line":17997},[69,20960,20961],{"class":75},"\u002F\u002F Person的析构函数调用\n",[69,20963,20964],{"class":71,"line":18002},[69,20965,3644],{"emptyLinePlaceholder":1325},[69,20967,20968],{"class":71,"line":18008},[69,20969,20970],{"class":75},"\u002F\u002F 之前的输出结果如下：\n",[69,20972,20973],{"class":71,"line":18022},[69,20974,20947],{"class":75},[69,20976,20977],{"class":71,"line":18035},[69,20978,20979],{"class":75},"\u002F\u002F 地址\n",[69,20981,20982],{"class":71,"line":18040},[69,20983,20984],{"class":75},"\u002F\u002F Person的拷贝构造函数调用\n",[69,20986,20987],{"class":71,"line":18054},[69,20988,20961],{"class":75},[69,20990,20991],{"class":71,"line":18059},[69,20992,20979],{"class":75},[69,20994,20995],{"class":71,"line":18065},[69,20996,20997],{"class":75},"\u002F\u002F (这两次输出的地址也是不同的) \n",[69,20999,21000],{"class":71,"line":18070},[69,21001,21002],{"class":75},"\u002F\u002F Person的析构函数调用     \n",[69,21004,21005,21007,21009],{"class":71,"line":18084},[69,21006,5334],{"class":82},[69,21008,5337],{"class":90},[69,21010,130],{"class":86},[69,21012,21013],{"class":71,"line":18089},[69,21014,142],{"class":86},[29,21016,21017],{},"简化版理解",[59,21019,21021],{"className":1386,"code":21020,"language":1388,"meta":64,"style":64},"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",[66,21022,21023,21031,21035,21041,21054,21065,21069,21081,21094,21102,21106,21122,21135,21144,21148,21153,21159,21172,21176,21180,21187,21191,21195,21200,21208,21212,21228,21241,21254,21258,21263,21271,21275,21279,21284,21289,21305,21313,21320,21326,21330,21334,21339,21347,21351,21355,21378,21385,21389,21393,21401,21405,21415,21437,21441,21445,21449,21457,21461,21466,21471,21477,21481,21491,21495,21503],{"__ignoreMap":64},[69,21024,21025,21027,21029],{"class":71,"line":72},[69,21026,15934],{"class":82},[69,21028,16809],{"class":109},[69,21030,113],{"class":86},[69,21032,21033],{"class":71,"line":79},[69,21034,15956],{"class":82},[69,21036,21037,21039],{"class":71,"line":106},[69,21038,19758],{"class":109},[69,21040,12095],{"class":86},[69,21042,21043,21045,21047,21050,21052],{"class":71,"line":116},[69,21044,10911],{"class":86},[69,21046,2429],{"class":82},[69,21048,21049],{"class":1022}," \"无参构造函数!\"",[69,21051,2696],{"class":82},[69,21053,10082],{"class":86},[69,21055,21056,21059,21061,21063],{"class":71,"line":133},[69,21057,21058],{"class":86},"        mAge ",[69,21060,1019],{"class":82},[69,21062,5337],{"class":90},[69,21064,130],{"class":86},[69,21066,21067],{"class":71,"line":139},[69,21068,3431],{"class":86},[69,21070,21071,21073,21075,21077,21079],{"class":71,"line":401},[69,21072,19758],{"class":109},[69,21074,1398],{"class":86},[69,21076,1401],{"class":82},[69,21078,16928],{"class":6458},[69,21080,103],{"class":86},[69,21082,21083,21085,21087,21090,21092],{"class":71,"line":470},[69,21084,10911],{"class":86},[69,21086,2429],{"class":82},[69,21088,21089],{"class":1022}," \"有参构造函数!\"",[69,21091,2696],{"class":82},[69,21093,10082],{"class":86},[69,21095,21096,21098,21100],{"class":71,"line":475},[69,21097,21058],{"class":86},[69,21099,1019],{"class":82},[69,21101,9039],{"class":86},[69,21103,21104],{"class":71,"line":482},[69,21105,3431],{"class":86},[69,21107,21108,21110,21112,21114,21116,21118,21120],{"class":71,"line":497},[69,21109,19758],{"class":109},[69,21111,1398],{"class":86},[69,21113,8034],{"class":82},[69,21115,16809],{"class":109},[69,21117,1742],{"class":82},[69,21119,8067],{"class":6458},[69,21121,103],{"class":86},[69,21123,21124,21126,21128,21131,21133],{"class":71,"line":502},[69,21125,10911],{"class":86},[69,21127,2429],{"class":82},[69,21129,21130],{"class":1022}," \"拷贝构造函数!\"",[69,21132,2696],{"class":82},[69,21134,10082],{"class":86},[69,21136,21137,21139,21141],{"class":71,"line":509},[69,21138,21058],{"class":86},[69,21140,1019],{"class":82},[69,21142,21143],{"class":86}," p.mAge;\n",[69,21145,21146],{"class":71,"line":524},[69,21147,3431],{"class":86},[69,21149,21150],{"class":71,"line":2888},[69,21151,21152],{"class":75},"    \u002F\u002F析构函数在释放内存之前调用\n",[69,21154,21155,21157],{"class":71,"line":2893},[69,21156,19791],{"class":109},[69,21158,12095],{"class":86},[69,21160,21161,21163,21165,21168,21170],{"class":71,"line":2899},[69,21162,10911],{"class":86},[69,21164,2429],{"class":82},[69,21166,21167],{"class":1022}," \"析构函数!\"",[69,21169,2696],{"class":82},[69,21171,10082],{"class":86},[69,21173,21174],{"class":71,"line":2919},[69,21175,3431],{"class":86},[69,21177,21178],{"class":71,"line":2924},[69,21179,15956],{"class":82},[69,21181,21182,21184],{"class":71,"line":2938},[69,21183,3229],{"class":82},[69,21185,21186],{"class":86}," mAge;\n",[69,21188,21189],{"class":71,"line":2943},[69,21190,5239],{"class":86},[69,21192,21193],{"class":71,"line":2972},[69,21194,3644],{"emptyLinePlaceholder":1325},[69,21196,21197],{"class":71,"line":2977},[69,21198,21199],{"class":75},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[69,21201,21202,21204,21206],{"class":71,"line":2994},[69,21203,6606],{"class":82},[69,21205,6830],{"class":109},[69,21207,12095],{"class":86},[69,21209,21210],{"class":71,"line":2999},[69,21211,3644],{"emptyLinePlaceholder":1325},[69,21213,21214,21216,21219,21221,21223,21225],{"class":71,"line":3004},[69,21215,20670],{"class":86},[69,21217,21218],{"class":109},"man",[69,21220,1398],{"class":86},[69,21222,124],{"class":90},[69,21224,7208],{"class":86},[69,21226,21227],{"class":75}," \u002F\u002Fp对象已经创建完毕\n",[69,21229,21230,21232,21235,21238],{"class":71,"line":3009},[69,21231,20670],{"class":86},[69,21233,21234],{"class":109},"newman",[69,21236,21237],{"class":86},"(man);",[69,21239,21240],{"class":75}," \u002F\u002F调用拷贝构造函数\n",[69,21242,21243,21246,21248,21251],{"class":71,"line":3023},[69,21244,21245],{"class":86},"    Person newman2 ",[69,21247,1019],{"class":82},[69,21249,21250],{"class":86}," man;",[69,21252,21253],{"class":75}," \u002F\u002F拷贝构造\n",[69,21255,21256],{"class":71,"line":3028},[69,21257,3644],{"emptyLinePlaceholder":1325},[69,21259,21260],{"class":71,"line":3821},[69,21261,21262],{"class":75},"    \u002F\u002FPerson newman3;\n",[69,21264,21265,21268],{"class":71,"line":3835},[69,21266,21267],{"class":75},"    \u002F\u002Fnewman3 = man;",[69,21269,21270],{"class":75}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[69,21272,21273],{"class":71,"line":3843},[69,21274,142],{"class":86},[69,21276,21277],{"class":71,"line":3848},[69,21278,3644],{"emptyLinePlaceholder":1325},[69,21280,21281],{"class":71,"line":3854},[69,21282,21283],{"class":75},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[69,21285,21286],{"class":71,"line":3860},[69,21287,21288],{"class":75},"\u002F\u002F相当于Person p1 = p;\n",[69,21290,21291,21293,21295,21297,21299,21302],{"class":71,"line":3865},[69,21292,6606],{"class":82},[69,21294,20725],{"class":109},[69,21296,1398],{"class":86},[69,21298,20285],{"class":109},[69,21300,21301],{"class":6458}," p1",[69,21303,21304],{"class":86},") {}\n",[69,21306,21307,21309,21311],{"class":71,"line":9190},[69,21308,6606],{"class":82},[69,21310,6899],{"class":109},[69,21312,12095],{"class":86},[69,21314,21315,21317],{"class":71,"line":9214},[69,21316,19843],{"class":86},[69,21318,21319],{"class":75}," \u002F\u002F无参构造函数\n",[69,21321,21322,21324],{"class":71,"line":9219},[69,21323,20775],{"class":109},[69,21325,20778],{"class":86},[69,21327,21328],{"class":71,"line":9225},[69,21329,142],{"class":86},[69,21331,21332],{"class":71,"line":9252},[69,21333,3644],{"emptyLinePlaceholder":1325},[69,21335,21336],{"class":71,"line":9257},[69,21337,21338],{"class":75},"\u002F\u002F3. 以值方式返回局部对象\n",[69,21340,21341,21343,21345],{"class":71,"line":9263},[69,21342,20285],{"class":109},[69,21344,20794],{"class":109},[69,21346,3220],{"class":86},[69,21348,21349],{"class":71,"line":9275},[69,21350,2797],{"class":86},[69,21352,21353],{"class":71,"line":9287},[69,21354,20275],{"class":86},[69,21356,21357,21359,21361,21363,21365,21367,21369,21371,21374,21376],{"class":71,"line":9299},[69,21358,7771],{"class":86},[69,21360,2429],{"class":82},[69,21362,87],{"class":86},[69,21364,1401],{"class":82},[69,21366,7760],{"class":82},[69,21368,1818],{"class":86},[69,21370,1742],{"class":82},[69,21372,21373],{"class":86},"p1 ",[69,21375,2429],{"class":82},[69,21377,10082],{"class":86},[69,21379,21380,21382],{"class":71,"line":10958},[69,21381,5334],{"class":82},[69,21383,21384],{"class":86}," p1;\n",[69,21386,21387],{"class":71,"line":10983},[69,21388,142],{"class":86},[69,21390,21391],{"class":71,"line":11006},[69,21392,3644],{"emptyLinePlaceholder":1325},[69,21394,21395,21397,21399],{"class":71,"line":11030},[69,21396,6606],{"class":82},[69,21398,6971],{"class":109},[69,21400,3220],{"class":86},[69,21402,21403],{"class":71,"line":11035},[69,21404,2797],{"class":86},[69,21406,21407,21409,21411,21413],{"class":71,"line":11040},[69,21408,20860],{"class":86},[69,21410,1019],{"class":82},[69,21412,20794],{"class":109},[69,21414,6878],{"class":86},[69,21416,21417,21419,21421,21423,21425,21427,21429,21431,21433,21435],{"class":71,"line":11045},[69,21418,7771],{"class":86},[69,21420,2429],{"class":82},[69,21422,87],{"class":86},[69,21424,1401],{"class":82},[69,21426,7760],{"class":82},[69,21428,1818],{"class":86},[69,21430,1742],{"class":82},[69,21432,12690],{"class":86},[69,21434,2429],{"class":82},[69,21436,10082],{"class":86},[69,21438,21439],{"class":71,"line":11054},[69,21440,142],{"class":86},[69,21442,21443],{"class":71,"line":11059},[69,21444,3644],{"emptyLinePlaceholder":1325},[69,21446,21447],{"class":71,"line":11065},[69,21448,3644],{"emptyLinePlaceholder":1325},[69,21450,21451,21453,21455],{"class":71,"line":11086},[69,21452,1401],{"class":82},[69,21454,3217],{"class":109},[69,21456,12095],{"class":86},[69,21458,21459],{"class":71,"line":11092},[69,21460,3644],{"emptyLinePlaceholder":1325},[69,21462,21463],{"class":71,"line":11106},[69,21464,21465],{"class":75},"    \u002F\u002Ftest01();\n",[69,21467,21468],{"class":71,"line":11112},[69,21469,21470],{"class":75},"    \u002F\u002Ftest02();\n",[69,21472,21473,21475],{"class":71,"line":11139},[69,21474,20930],{"class":109},[69,21476,6878],{"class":86},[69,21478,21479],{"class":71,"line":11148},[69,21480,3644],{"emptyLinePlaceholder":1325},[69,21482,21483,21485,21487,21489],{"class":71,"line":11154},[69,21484,3547],{"class":109},[69,21486,1398],{"class":86},[69,21488,3552],{"class":1022},[69,21490,3963],{"class":86},[69,21492,21493],{"class":71,"line":11162},[69,21494,3644],{"emptyLinePlaceholder":1325},[69,21496,21497,21499,21501],{"class":71,"line":11167},[69,21498,5334],{"class":82},[69,21500,5337],{"class":90},[69,21502,130],{"class":86},[69,21504,21505],{"class":71,"line":17843},[69,21506,142],{"class":86},[19,21508,21510],{"id":21509},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[29,21512,21513],{},"默认情况下，c++编译器至少给一个类添加3个函数",[29,21515,21516],{},"1．默认构造函数(无参，函数体为空)",[29,21518,21519],{},"2．默认析构函数(无参，函数体为空)",[29,21521,21522],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[29,21524,21525],{},"构造函数调用规则如下：",[162,21527,21528,21531],{},[40,21529,21530],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[40,21532,21533],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[59,21535,21537],{"className":1386,"code":21536,"language":1388,"meta":64,"style":64},"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",[66,21538,21539,21547,21551,21556,21562,21574,21578,21583,21595,21604,21616,21620,21624,21640,21649,21661,21665,21669,21675,21687,21691,21695,21701,21705,21709,21717,21721,21733,21738,21746,21750,21768,21772,21776,21784,21788,21793,21801,21816,21829,21833,21838,21845,21861,21874,21878,21882,21890,21894,21900,21904,21914,21918,21926],{"__ignoreMap":64},[69,21540,21541,21543,21545],{"class":71,"line":72},[69,21542,15934],{"class":82},[69,21544,16809],{"class":109},[69,21546,113],{"class":86},[69,21548,21549],{"class":71,"line":79},[69,21550,15956],{"class":82},[69,21552,21553],{"class":71,"line":106},[69,21554,21555],{"class":75},"    \u002F\u002F无参（默认）构造函数\n",[69,21557,21558,21560],{"class":71,"line":116},[69,21559,19758],{"class":109},[69,21561,12095],{"class":86},[69,21563,21564,21566,21568,21570,21572],{"class":71,"line":133},[69,21565,10911],{"class":86},[69,21567,2429],{"class":82},[69,21569,21049],{"class":1022},[69,21571,2696],{"class":82},[69,21573,10082],{"class":86},[69,21575,21576],{"class":71,"line":139},[69,21577,3431],{"class":86},[69,21579,21580],{"class":71,"line":401},[69,21581,21582],{"class":75},"    \u002F\u002F有参构造函数\n",[69,21584,21585,21587,21589,21591,21593],{"class":71,"line":470},[69,21586,19758],{"class":109},[69,21588,1398],{"class":86},[69,21590,1401],{"class":82},[69,21592,2650],{"class":6458},[69,21594,103],{"class":86},[69,21596,21597,21600,21602],{"class":71,"line":475},[69,21598,21599],{"class":86},"        age ",[69,21601,1019],{"class":82},[69,21603,2684],{"class":86},[69,21605,21606,21608,21610,21612,21614],{"class":71,"line":482},[69,21607,10911],{"class":86},[69,21609,2429],{"class":82},[69,21611,21089],{"class":1022},[69,21613,2696],{"class":82},[69,21615,10082],{"class":86},[69,21617,21618],{"class":71,"line":497},[69,21619,3431],{"class":86},[69,21621,21622],{"class":71,"line":502},[69,21623,20113],{"class":75},[69,21625,21626,21628,21630,21632,21634,21636,21638],{"class":71,"line":509},[69,21627,19758],{"class":109},[69,21629,1398],{"class":86},[69,21631,8034],{"class":82},[69,21633,16809],{"class":109},[69,21635,1742],{"class":82},[69,21637,8067],{"class":6458},[69,21639,103],{"class":86},[69,21641,21642,21644,21646],{"class":71,"line":524},[69,21643,21599],{"class":86},[69,21645,1019],{"class":82},[69,21647,21648],{"class":86}," p.age;\n",[69,21650,21651,21653,21655,21657,21659],{"class":71,"line":2888},[69,21652,10911],{"class":86},[69,21654,2429],{"class":82},[69,21656,21130],{"class":1022},[69,21658,2696],{"class":82},[69,21660,10082],{"class":86},[69,21662,21663],{"class":71,"line":2893},[69,21664,3431],{"class":86},[69,21666,21667],{"class":71,"line":2899},[69,21668,19786],{"class":75},[69,21670,21671,21673],{"class":71,"line":2919},[69,21672,19791],{"class":109},[69,21674,12095],{"class":86},[69,21676,21677,21679,21681,21683,21685],{"class":71,"line":2924},[69,21678,10911],{"class":86},[69,21680,2429],{"class":82},[69,21682,21167],{"class":1022},[69,21684,2696],{"class":82},[69,21686,10082],{"class":86},[69,21688,21689],{"class":71,"line":2938},[69,21690,3431],{"class":86},[69,21692,21693],{"class":71,"line":2943},[69,21694,15956],{"class":82},[69,21696,21697,21699],{"class":71,"line":2972},[69,21698,3229],{"class":82},[69,21700,9039],{"class":86},[69,21702,21703],{"class":71,"line":2977},[69,21704,5239],{"class":86},[69,21706,21707],{"class":71,"line":2994},[69,21708,3644],{"emptyLinePlaceholder":1325},[69,21710,21711,21713,21715],{"class":71,"line":2999},[69,21712,6606],{"class":82},[69,21714,6830],{"class":109},[69,21716,3220],{"class":86},[69,21718,21719],{"class":71,"line":3004},[69,21720,2797],{"class":86},[69,21722,21723,21725,21727,21729,21731],{"class":71,"line":3009},[69,21724,20670],{"class":86},[69,21726,8372],{"class":109},[69,21728,1398],{"class":86},[69,21730,2037],{"class":90},[69,21732,3963],{"class":86},[69,21734,21735],{"class":71,"line":3023},[69,21736,21737],{"class":75},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[69,21739,21740,21742,21744],{"class":71,"line":3028},[69,21741,20670],{"class":86},[69,21743,8275],{"class":109},[69,21745,18754],{"class":86},[69,21747,21748],{"class":71,"line":3821},[69,21749,3644],{"emptyLinePlaceholder":1325},[69,21751,21752,21754,21756,21759,21761,21764,21766],{"class":71,"line":3835},[69,21753,7771],{"class":86},[69,21755,2429],{"class":82},[69,21757,21758],{"class":1022}," \"p2的年龄为： \"",[69,21760,2696],{"class":82},[69,21762,21763],{"class":86}," p2.age ",[69,21765,2429],{"class":82},[69,21767,10082],{"class":86},[69,21769,21770],{"class":71,"line":3843},[69,21771,142],{"class":86},[69,21773,21774],{"class":71,"line":3848},[69,21775,3644],{"emptyLinePlaceholder":1325},[69,21777,21778,21780,21782],{"class":71,"line":3854},[69,21779,6606],{"class":82},[69,21781,6899],{"class":109},[69,21783,3220],{"class":86},[69,21785,21786],{"class":71,"line":3860},[69,21787,2797],{"class":86},[69,21789,21790],{"class":71,"line":3865},[69,21791,21792],{"class":75},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[69,21794,21795,21798],{"class":71,"line":9190},[69,21796,21797],{"class":86},"    Person p1;",[69,21799,21800],{"class":75}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[69,21802,21803,21805,21807,21809,21811,21813],{"class":71,"line":9214},[69,21804,20670],{"class":86},[69,21806,8275],{"class":109},[69,21808,1398],{"class":86},[69,21810,390],{"class":90},[69,21812,7208],{"class":86},[69,21814,21815],{"class":75}," \u002F\u002F用户提供的有参\n",[69,21817,21818,21820,21823,21826],{"class":71,"line":9219},[69,21819,20670],{"class":86},[69,21821,21822],{"class":109},"p3",[69,21824,21825],{"class":86},"(p2);",[69,21827,21828],{"class":75}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[69,21830,21831],{"class":71,"line":9225},[69,21832,3644],{"emptyLinePlaceholder":1325},[69,21834,21835],{"class":71,"line":9252},[69,21836,21837],{"class":75},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[69,21839,21840,21843],{"class":71,"line":9257},[69,21841,21842],{"class":86},"    Person p4;",[69,21844,21800],{"class":75},[69,21846,21847,21849,21852,21854,21856,21858],{"class":71,"line":9263},[69,21848,20670],{"class":86},[69,21850,21851],{"class":109},"p5",[69,21853,1398],{"class":86},[69,21855,390],{"class":90},[69,21857,7208],{"class":86},[69,21859,21860],{"class":75}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[69,21862,21863,21865,21868,21871],{"class":71,"line":9275},[69,21864,20670],{"class":86},[69,21866,21867],{"class":109},"p6",[69,21869,21870],{"class":86},"(p5);",[69,21872,21873],{"class":75}," \u002F\u002F用户自己提供拷贝构造\n",[69,21875,21876],{"class":71,"line":9287},[69,21877,142],{"class":86},[69,21879,21880],{"class":71,"line":9299},[69,21881,3644],{"emptyLinePlaceholder":1325},[69,21883,21884,21886,21888],{"class":71,"line":10958},[69,21885,1401],{"class":82},[69,21887,3217],{"class":109},[69,21889,12095],{"class":86},[69,21891,21892],{"class":71,"line":10983},[69,21893,3644],{"emptyLinePlaceholder":1325},[69,21895,21896,21898],{"class":71,"line":11006},[69,21897,6875],{"class":109},[69,21899,6878],{"class":86},[69,21901,21902],{"class":71,"line":11030},[69,21903,3644],{"emptyLinePlaceholder":1325},[69,21905,21906,21908,21910,21912],{"class":71,"line":11035},[69,21907,3547],{"class":109},[69,21909,1398],{"class":86},[69,21911,3552],{"class":1022},[69,21913,3963],{"class":86},[69,21915,21916],{"class":71,"line":11040},[69,21917,3644],{"emptyLinePlaceholder":1325},[69,21919,21920,21922,21924],{"class":71,"line":11045},[69,21921,5334],{"class":82},[69,21923,5337],{"class":90},[69,21925,130],{"class":86},[69,21927,21928],{"class":71,"line":11054},[69,21929,142],{"class":86},[19,21931,21933],{"id":21932},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[29,21935,21936],{},"浅拷贝：简单的赋值拷贝操作",[29,21938,21939],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[59,21941,21943],{"className":1386,"code":21942,"language":1388,"meta":64,"style":64},"#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",[66,21944,21945,21951,21961,21967,21971,21975,21980,21986,21990,22003,22007,22011,22018,22022,22032,22047,22060,22064,22069,22074,22090,22094,22107,22112,22117,22122,22131,22136,22151,22155,22159,22163,22169,22173,22178,22193,22197,22208,22222,22226,22235,22239,22245,22257,22261,22269,22273,22290,22321,22329,22357,22361,22365,22373,22377,22383],{"__ignoreMap":64},[69,21946,21947,21949],{"class":71,"line":72},[69,21948,3194],{"class":82},[69,21950,3197],{"class":1022},[69,21952,21953,21955,21957,21959],{"class":71,"line":79},[69,21954,3202],{"class":82},[69,21956,3205],{"class":82},[69,21958,3208],{"class":109},[69,21960,130],{"class":86},[69,21962,21963,21965],{"class":71,"line":106},[69,21964,15934],{"class":82},[69,21966,16411],{"class":109},[69,21968,21969],{"class":71,"line":116},[69,21970,2797],{"class":86},[69,21972,21973],{"class":71,"line":133},[69,21974,15956],{"class":82},[69,21976,21977],{"class":71,"line":139},[69,21978,21979],{"class":75},"    \u002F\u002F默认构造函数\n",[69,21981,21982,21984],{"class":71,"line":401},[69,21983,19758],{"class":109},[69,21985,3220],{"class":86},[69,21987,21988],{"class":71,"line":470},[69,21989,3274],{"class":86},[69,21991,21992,21994,21996,21999,22001],{"class":71,"line":475},[69,21993,4695],{"class":86},[69,21995,2429],{"class":82},[69,21997,21998],{"class":1022},"\"默认构造函数\"",[69,22000,2429],{"class":82},[69,22002,2451],{"class":86},[69,22004,22005],{"class":71,"line":482},[69,22006,3431],{"class":86},[69,22008,22009],{"class":71,"line":497},[69,22010,21582],{"class":75},[69,22012,22013,22015],{"class":71,"line":502},[69,22014,19791],{"class":109},[69,22016,22017],{"class":86},"(int age,int height)\n",[69,22019,22020],{"class":71,"line":509},[69,22021,3274],{"class":86},[69,22023,22024,22027,22029],{"class":71,"line":524},[69,22025,22026],{"class":86},"        m_Age",[69,22028,1019],{"class":82},[69,22030,22031],{"class":86},"age;\n",[69,22033,22034,22037,22039,22041,22044],{"class":71,"line":2888},[69,22035,22036],{"class":86},"        m_Height",[69,22038,12959],{"class":82},[69,22040,3626],{"class":82},[69,22042,22043],{"class":86},"(height);",[69,22045,22046],{"class":75},"\u002F\u002F放到堆区\n",[69,22048,22049,22051,22053,22056,22058],{"class":71,"line":2893},[69,22050,4695],{"class":86},[69,22052,2429],{"class":82},[69,22054,22055],{"class":1022},"\"有参构造函数\"",[69,22057,2429],{"class":82},[69,22059,2451],{"class":86},[69,22061,22062],{"class":71,"line":2899},[69,22063,3431],{"class":86},[69,22065,22066],{"class":71,"line":2919},[69,22067,22068],{"class":75},"    \u002F\u002F深拷贝解决上述问题\n",[69,22070,22071],{"class":71,"line":2924},[69,22072,22073],{"class":75},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[69,22075,22076,22078,22080,22082,22084,22086,22088],{"class":71,"line":2938},[69,22077,19758],{"class":109},[69,22079,1398],{"class":86},[69,22081,8034],{"class":82},[69,22083,16809],{"class":109},[69,22085,11826],{"class":82},[69,22087,29],{"class":6458},[69,22089,1404],{"class":86},[69,22091,22092],{"class":71,"line":2943},[69,22093,3274],{"class":86},[69,22095,22096,22098,22100,22103,22105],{"class":71,"line":2972},[69,22097,4695],{"class":86},[69,22099,2429],{"class":82},[69,22101,22102],{"class":1022},"\"拷贝构造函数\"",[69,22104,2429],{"class":82},[69,22106,2451],{"class":86},[69,22108,22109],{"class":71,"line":2977},[69,22110,22111],{"class":75},"        \u002F\u002F编译器默认的写如下注释部分\n",[69,22113,22114],{"class":71,"line":2994},[69,22115,22116],{"class":75},"        \u002F\u002Fm_Age=p.m_Age;\n",[69,22118,22119],{"class":71,"line":2999},[69,22120,22121],{"class":75},"        \u002F\u002Fm_Height=p.m_Height;\n",[69,22123,22124,22126,22128],{"class":71,"line":3004},[69,22125,22026],{"class":86},[69,22127,1019],{"class":82},[69,22129,22130],{"class":86},"p.m_Age;\n",[69,22132,22133],{"class":71,"line":3009},[69,22134,22135],{"class":75},"        \u002F\u002F深拷贝操作\n",[69,22137,22138,22140,22142,22144,22146,22148],{"class":71,"line":3023},[69,22139,22036],{"class":86},[69,22141,12959],{"class":82},[69,22143,3626],{"class":82},[69,22145,1398],{"class":86},[69,22147,1843],{"class":82},[69,22149,22150],{"class":86},"p.m_Height);\n",[69,22152,22153],{"class":71,"line":3028},[69,22154,3431],{"class":86},[69,22156,22157],{"class":71,"line":3821},[69,22158,3644],{"emptyLinePlaceholder":1325},[69,22160,22161],{"class":71,"line":3835},[69,22162,19786],{"class":75},[69,22164,22165,22167],{"class":71,"line":3843},[69,22166,19791],{"class":109},[69,22168,3220],{"class":86},[69,22170,22171],{"class":71,"line":3848},[69,22172,3274],{"class":86},[69,22174,22175],{"class":71,"line":3854},[69,22176,22177],{"class":75},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[69,22179,22180,22182,22185,22188,22191],{"class":71,"line":3860},[69,22181,3741],{"class":82},[69,22183,22184],{"class":86},"(m_Height ",[69,22186,22187],{"class":82},"!=",[69,22189,22190],{"class":90}," NULL",[69,22192,1404],{"class":86},[69,22194,22195],{"class":71,"line":3865},[69,22196,3754],{"class":86},[69,22198,22199,22202,22205],{"class":71,"line":9190},[69,22200,22201],{"class":82},"            delete",[69,22203,22204],{"class":86}," m_Height;",[69,22206,22207],{"class":75}," \u002F\u002F释放堆区内存\n",[69,22209,22210,22213,22215,22217,22219],{"class":71,"line":9214},[69,22211,22212],{"class":86},"            m_Height",[69,22214,1019],{"class":82},[69,22216,3636],{"class":90},[69,22218,1450],{"class":86},[69,22220,22221],{"class":75}," \u002F\u002F防止野指针\n",[69,22223,22224],{"class":71,"line":9219},[69,22225,3773],{"class":86},[69,22227,22228,22230,22232],{"class":71,"line":9225},[69,22229,4695],{"class":86},[69,22231,2429],{"class":82},[69,22233,22234],{"class":1022},"\"Person的析构函数调用\"\n",[69,22236,22237],{"class":71,"line":9252},[69,22238,3431],{"class":86},[69,22240,22241,22243],{"class":71,"line":9257},[69,22242,3229],{"class":82},[69,22244,16905],{"class":86},[69,22246,22247,22249,22251,22254],{"class":71,"line":9263},[69,22248,3229],{"class":82},[69,22250,7760],{"class":82},[69,22252,22253],{"class":86},"m_Height;",[69,22255,22256],{"class":75}," \u002F\u002F定义一个指针，指向身高\n",[69,22258,22259],{"class":71,"line":9275},[69,22260,5239],{"class":86},[69,22262,22263,22265,22267],{"class":71,"line":9287},[69,22264,6606],{"class":82},[69,22266,6830],{"class":109},[69,22268,3220],{"class":86},[69,22270,22271],{"class":71,"line":9299},[69,22272,2797],{"class":86},[69,22274,22275,22277,22279,22281,22283,22285,22288],{"class":71,"line":10958},[69,22276,20670],{"class":86},[69,22278,8372],{"class":109},[69,22280,1398],{"class":86},[69,22282,2037],{"class":90},[69,22284,1767],{"class":86},[69,22286,22287],{"class":90},"160",[69,22289,3963],{"class":86},[69,22291,22292,22294,22296,22299,22301,22304,22306,22309,22311,22314,22316,22318],{"class":71,"line":10983},[69,22293,2802],{"class":86},[69,22295,2429],{"class":82},[69,22297,22298],{"class":1022},"\"p1的年龄为:\"",[69,22300,2429],{"class":82},[69,22302,22303],{"class":86},"p1.m_Age",[69,22305,2429],{"class":82},[69,22307,22308],{"class":1022},"\"身高为：\"",[69,22310,7661],{"class":82},[69,22312,22313],{"class":86},"p1.m_Height",[69,22315,2429],{"class":82},[69,22317,2494],{"class":86},[69,22319,22320],{"class":75},"  \u002F\u002F18\n",[69,22322,22323,22325,22327],{"class":71,"line":11006},[69,22324,20670],{"class":86},[69,22326,8275],{"class":109},[69,22328,18754],{"class":86},[69,22330,22331,22333,22335,22338,22340,22342,22344,22346,22348,22351,22353,22355],{"class":71,"line":11030},[69,22332,2802],{"class":86},[69,22334,2429],{"class":82},[69,22336,22337],{"class":1022},"\"p2的年龄为：\"",[69,22339,2429],{"class":82},[69,22341,20700],{"class":86},[69,22343,2429],{"class":82},[69,22345,22308],{"class":1022},[69,22347,7661],{"class":82},[69,22349,22350],{"class":86},"p2.m_Height",[69,22352,2429],{"class":82},[69,22354,2494],{"class":86},[69,22356,22320],{"class":75},[69,22358,22359],{"class":71,"line":11035},[69,22360,14451],{"class":86},[69,22362,22363],{"class":71,"line":11040},[69,22364,142],{"class":86},[69,22366,22367,22369,22371],{"class":71,"line":11045},[69,22368,1401],{"class":82},[69,22370,3217],{"class":109},[69,22372,3220],{"class":86},[69,22374,22375],{"class":71,"line":11054},[69,22376,2797],{"class":86},[69,22378,22379,22381],{"class":71,"line":11059},[69,22380,6875],{"class":109},[69,22382,6878],{"class":86},[69,22384,22385],{"class":71,"line":11065},[69,22386,142],{"class":86},[29,22388,22389],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[29,22391,22392],{},"浅拷贝带来的问题是堆区的内存重复释放",[29,22394,22395],{},[24,22396],{"alt":64,"src":22397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[29,22399,22400],{},"浅拷贝问题要使用深拷贝来解决",[29,22402,22403],{},[24,22404],{"alt":64,"src":22405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[29,22407,22408],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[19,22410,22412],{"id":22411},"_826初始化列表","8.2.6初始化列表",[29,22414,22415],{},"作用：初始化属性",[29,22417,6425],{},[59,22419,22422],{"className":22420,"code":22421,"language":540},[538],"构造函数():属性1(值1),属性2(值2).....{}\n",[66,22423,22421],{"__ignoreMap":64},[29,22425,22426],{},"例子",[59,22428,22430],{"className":1386,"code":22429,"language":1388,"meta":64,"style":64},"#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",[66,22431,22432,22438,22448,22454,22458,22463,22467,22472,22477,22482,22487,22492,22497,22501,22506,22511,22554,22563,22581,22599,22617,22621,22625,22632,22639,22646,22650,22654,22662,22666,22670,22690,22699,22703,22707,22717,22721,22729],{"__ignoreMap":64},[69,22433,22434,22436],{"class":71,"line":72},[69,22435,3194],{"class":82},[69,22437,3197],{"class":1022},[69,22439,22440,22442,22444,22446],{"class":71,"line":79},[69,22441,3202],{"class":82},[69,22443,3205],{"class":82},[69,22445,3208],{"class":109},[69,22447,130],{"class":86},[69,22449,22450,22452],{"class":71,"line":106},[69,22451,15934],{"class":82},[69,22453,16411],{"class":109},[69,22455,22456],{"class":71,"line":116},[69,22457,2797],{"class":86},[69,22459,22460],{"class":71,"line":133},[69,22461,22462],{"class":82},"    public:\n",[69,22464,22465],{"class":71,"line":139},[69,22466,3644],{"emptyLinePlaceholder":1325},[69,22468,22469],{"class":71,"line":401},[69,22470,22471],{"class":75},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[69,22473,22474],{"class":71,"line":470},[69,22475,22476],{"class":75},"    \u002F\u002FPerson(int a, int b, int c) {\n",[69,22478,22479],{"class":71,"line":475},[69,22480,22481],{"class":75},"    \u002F\u002F  m_A = a;\n",[69,22483,22484],{"class":71,"line":482},[69,22485,22486],{"class":75},"    \u002F\u002F  m_B = b;\n",[69,22488,22489],{"class":71,"line":497},[69,22490,22491],{"class":75},"    \u002F\u002F  m_C = c;\n",[69,22493,22494],{"class":71,"line":502},[69,22495,22496],{"class":75},"    \u002F\u002F}\n",[69,22498,22499],{"class":71,"line":509},[69,22500,3644],{"emptyLinePlaceholder":1325},[69,22502,22503],{"class":71,"line":524},[69,22504,22505],{"class":75},"    \u002F\u002F初始化列表方式初始化\n",[69,22507,22508],{"class":71,"line":2888},[69,22509,22510],{"class":75},"    \u002F\u002F使用有参构造函数\n",[69,22512,22513,22515,22517,22519,22521,22523,22525,22527,22529,22531,22533,22536,22539,22542,22545,22548,22551],{"class":71,"line":2893},[69,22514,19758],{"class":109},[69,22516,1398],{"class":86},[69,22518,1401],{"class":82},[69,22520,2650],{"class":6458},[69,22522,13677],{"class":86},[69,22524,1401],{"class":82},[69,22526,4077],{"class":6458},[69,22528,13677],{"class":86},[69,22530,1401],{"class":82},[69,22532,4093],{"class":6458},[69,22534,22535],{"class":86},") :",[69,22537,22538],{"class":109},"m_A",[69,22540,22541],{"class":86},"(a), ",[69,22543,22544],{"class":109},"m_B",[69,22546,22547],{"class":86},"(b), ",[69,22549,22550],{"class":109},"m_C",[69,22552,22553],{"class":86},"(c) {}\n",[69,22555,22556,22558,22561],{"class":71,"line":2899},[69,22557,16149],{"class":82},[69,22559,22560],{"class":109}," PrintPerson",[69,22562,12095],{"class":86},[69,22564,22565,22567,22569,22572,22574,22577,22579],{"class":71,"line":2919},[69,22566,10911],{"class":86},[69,22568,2429],{"class":82},[69,22570,22571],{"class":1022}," \"mA:\"",[69,22573,2696],{"class":82},[69,22575,22576],{"class":86}," m_A ",[69,22578,2429],{"class":82},[69,22580,10082],{"class":86},[69,22582,22583,22585,22587,22590,22592,22595,22597],{"class":71,"line":2924},[69,22584,10911],{"class":86},[69,22586,2429],{"class":82},[69,22588,22589],{"class":1022}," \"mB:\"",[69,22591,2696],{"class":82},[69,22593,22594],{"class":86}," m_B ",[69,22596,2429],{"class":82},[69,22598,10082],{"class":86},[69,22600,22601,22603,22605,22608,22610,22613,22615],{"class":71,"line":2938},[69,22602,10911],{"class":86},[69,22604,2429],{"class":82},[69,22606,22607],{"class":1022}," \"mC:\"",[69,22609,2696],{"class":82},[69,22611,22612],{"class":86}," m_C ",[69,22614,2429],{"class":82},[69,22616,10082],{"class":86},[69,22618,22619],{"class":71,"line":2943},[69,22620,3431],{"class":86},[69,22622,22623],{"class":71,"line":2972},[69,22624,16462],{"class":82},[69,22626,22627,22629],{"class":71,"line":2977},[69,22628,3229],{"class":82},[69,22630,22631],{"class":86}," m_A;\n",[69,22633,22634,22636],{"class":71,"line":2994},[69,22635,3229],{"class":82},[69,22637,22638],{"class":86}," m_B;\n",[69,22640,22641,22643],{"class":71,"line":2999},[69,22642,3229],{"class":82},[69,22644,22645],{"class":86}," m_C;\n",[69,22647,22648],{"class":71,"line":3004},[69,22649,5239],{"class":86},[69,22651,22652],{"class":71,"line":3009},[69,22653,3644],{"emptyLinePlaceholder":1325},[69,22655,22656,22658,22660],{"class":71,"line":3023},[69,22657,1401],{"class":82},[69,22659,3217],{"class":109},[69,22661,7220],{"class":86},[69,22663,22664],{"class":71,"line":3028},[69,22665,2797],{"class":86},[69,22667,22668],{"class":71,"line":3821},[69,22669,3644],{"emptyLinePlaceholder":1325},[69,22671,22672,22674,22676,22678,22680,22682,22684,22686,22688],{"class":71,"line":3835},[69,22673,20670],{"class":86},[69,22675,29],{"class":109},[69,22677,1398],{"class":86},[69,22679,1609],{"class":90},[69,22681,13677],{"class":86},[69,22683,1471],{"class":90},[69,22685,13677],{"class":86},[69,22687,1465],{"class":90},[69,22689,3963],{"class":86},[69,22691,22692,22694,22697],{"class":71,"line":3843},[69,22693,17105],{"class":86},[69,22695,22696],{"class":109},"PrintPerson",[69,22698,6878],{"class":86},[69,22700,22701],{"class":71,"line":3848},[69,22702,3644],{"emptyLinePlaceholder":1325},[69,22704,22705],{"class":71,"line":3854},[69,22706,3644],{"emptyLinePlaceholder":1325},[69,22708,22709,22711,22713,22715],{"class":71,"line":3860},[69,22710,3547],{"class":109},[69,22712,1398],{"class":86},[69,22714,3552],{"class":1022},[69,22716,3963],{"class":86},[69,22718,22719],{"class":71,"line":3865},[69,22720,3644],{"emptyLinePlaceholder":1325},[69,22722,22723,22725,22727],{"class":71,"line":9190},[69,22724,5334],{"class":82},[69,22726,5337],{"class":90},[69,22728,130],{"class":86},[69,22730,22731],{"class":71,"line":9214},[69,22732,142],{"class":86},[29,22734,22735,22736,22739,22740],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[195,22737,22738],{},"参数名就是定义的对象属性","，",[195,22741,22742],{},"属性后面的值为有参构造函数的形参",[59,22744,22746],{"className":1386,"code":22745,"language":1388,"meta":64,"style":64},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[66,22747,22748],{"__ignoreMap":64},[69,22749,22750,22752,22754,22756,22759,22761,22764,22766,22769,22771,22774,22776,22779,22781],{"class":71,"line":72},[69,22751,20285],{"class":109},[69,22753,1398],{"class":86},[69,22755,1401],{"class":82},[69,22757,22758],{"class":86}," a.",[69,22760,1401],{"class":82},[69,22762,22763],{"class":86}," b,",[69,22765,1401],{"class":82},[69,22767,22768],{"class":86}," b):",[69,22770,22538],{"class":109},[69,22772,22773],{"class":86},"(a),",[69,22775,22544],{"class":109},[69,22777,22778],{"class":86},"(c),",[69,22780,22550],{"class":109},[69,22782,22783],{"class":86},"(b) {}\n",[19,22785,22787],{"id":22786},"_827类对象作为类成员","8.2.7类对象作为类成员",[29,22789,22790],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[29,22792,327],{},[59,22794,22796],{"className":1386,"code":22795,"language":1388,"meta":64,"style":64},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[66,22797,22798,22803,22808,22812,22817,22821],{"__ignoreMap":64},[69,22799,22800],{"class":71,"line":72},[69,22801,22802],{"class":86},"A{};\n",[69,22804,22805],{"class":71,"line":79},[69,22806,22807],{"class":86},"B\n",[69,22809,22810],{"class":71,"line":106},[69,22811,2797],{"class":86},[69,22813,22814],{"class":71,"line":116},[69,22815,22816],{"class":86},"    A a;\n",[69,22818,22819],{"class":71,"line":133},[69,22820,142],{"class":86},[69,22822,22823],{"class":71,"line":139},[69,22824,22825],{"class":75},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[29,22827,22828],{},"案例",[59,22830,22832],{"className":1386,"code":22831,"language":1388,"meta":64,"style":64},"\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",[66,22833,22834,22839,22846,22850,22855,22860,22874,22878,22888,22899,22903,22910,22914,22927,22931,22936,22941,22945,22951,22955,22959,22963,22994,22998,23009,23013,23019,23023,23036,23040,23044,23048,23053,23058,23062,23070,23074,23091,23110,23114,23122,23126,23132],{"__ignoreMap":64},[69,22835,22836],{"class":71,"line":72},[69,22837,22838],{"class":75},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[69,22840,22841,22843],{"class":71,"line":79},[69,22842,15934],{"class":82},[69,22844,22845],{"class":109}," Phone\n",[69,22847,22848],{"class":71,"line":106},[69,22849,2797],{"class":86},[69,22851,22852],{"class":71,"line":116},[69,22853,22854],{"class":86},"public：\n",[69,22856,22857],{"class":71,"line":133},[69,22858,22859],{"class":75},"    \u002F\u002F 赋值(构造函数)\n",[69,22861,22862,22865,22867,22869,22872],{"class":71,"line":139},[69,22863,22864],{"class":109},"    Phone",[69,22866,1398],{"class":86},[69,22868,16157],{"class":109},[69,22870,22871],{"class":6458}," pName",[69,22873,1404],{"class":86},[69,22875,22876],{"class":71,"line":401},[69,22877,3274],{"class":86},[69,22879,22880,22883,22885],{"class":71,"line":470},[69,22881,22882],{"class":86},"        m_pName",[69,22884,1019],{"class":82},[69,22886,22887],{"class":86},"pName;\n",[69,22889,22890,22892,22894,22897],{"class":71,"line":475},[69,22891,4695],{"class":86},[69,22893,2429],{"class":82},[69,22895,22896],{"class":1022},"\"Phone的构造函数调用\"",[69,22898,130],{"class":86},[69,22900,22901],{"class":71,"line":482},[69,22902,3431],{"class":86},[69,22904,22905,22908],{"class":71,"line":497},[69,22906,22907],{"class":109},"    ~Phone",[69,22909,3220],{"class":86},[69,22911,22912],{"class":71,"line":502},[69,22913,3274],{"class":86},[69,22915,22916,22918,22920,22923,22925],{"class":71,"line":509},[69,22917,4695],{"class":86},[69,22919,2429],{"class":82},[69,22921,22922],{"class":1022},"\"Phone析构函数调用\"",[69,22924,2429],{"class":82},[69,22926,2451],{"class":86},[69,22928,22929],{"class":71,"line":524},[69,22930,3431],{"class":86},[69,22932,22933],{"class":71,"line":2888},[69,22934,22935],{"class":75},"    \u002F\u002F\n",[69,22937,22938],{"class":71,"line":2893},[69,22939,22940],{"class":86},"    string m_PName;\n",[69,22942,22943],{"class":71,"line":2899},[69,22944,5239],{"class":86},[69,22946,22947,22949],{"class":71,"line":2919},[69,22948,15934],{"class":82},[69,22950,16411],{"class":109},[69,22952,22953],{"class":71,"line":2924},[69,22954,2797],{"class":86},[69,22956,22957],{"class":71,"line":2938},[69,22958,15956],{"class":82},[69,22960,22961],{"class":71,"line":2943},[69,22962,18233],{"class":75},[69,22964,22965,22967,22969,22971,22973,22975,22977,22980,22983,22985,22988,22991],{"class":71,"line":2972},[69,22966,19758],{"class":109},[69,22968,1398],{"class":86},[69,22970,16157],{"class":109},[69,22972,16160],{"class":6458},[69,22974,1767],{"class":86},[69,22976,16157],{"class":109},[69,22978,22979],{"class":6458}," pname",[69,22981,22982],{"class":86},"):",[69,22984,16250],{"class":109},[69,22986,22987],{"class":86},"(name),m_phone.",[69,22989,22990],{"class":109},"m_PName",[69,22992,22993],{"class":86},"(pname) \n",[69,22995,22996],{"class":71,"line":2977},[69,22997,3274],{"class":86},[69,22999,23000,23002,23004,23007],{"class":71,"line":2994},[69,23001,4695],{"class":86},[69,23003,2429],{"class":82},[69,23005,23006],{"class":1022},"\"Person的构造函数调用\"",[69,23008,130],{"class":86},[69,23010,23011],{"class":71,"line":2999},[69,23012,3431],{"class":86},[69,23014,23015,23017],{"class":71,"line":3004},[69,23016,19791],{"class":109},[69,23018,3220],{"class":86},[69,23020,23021],{"class":71,"line":3009},[69,23022,3274],{"class":86},[69,23024,23025,23027,23029,23032,23034],{"class":71,"line":3023},[69,23026,4695],{"class":86},[69,23028,2429],{"class":82},[69,23030,23031],{"class":1022},"\"Person析构函数调用\"",[69,23033,2429],{"class":82},[69,23035,2451],{"class":86},[69,23037,23038],{"class":71,"line":3028},[69,23039,3431],{"class":86},[69,23041,23042],{"class":71,"line":3821},[69,23043,9022],{"class":75},[69,23045,23046],{"class":71,"line":3835},[69,23047,16132],{"class":86},[69,23049,23050],{"class":71,"line":3843},[69,23051,23052],{"class":75},"    \u002F\u002F手机\n",[69,23054,23055],{"class":71,"line":3848},[69,23056,23057],{"class":86},"    Phone m_Phone;\n",[69,23059,23060],{"class":71,"line":3854},[69,23061,5239],{"class":86},[69,23063,23064,23066,23068],{"class":71,"line":3860},[69,23065,6606],{"class":82},[69,23067,6830],{"class":109},[69,23069,3220],{"class":86},[69,23071,23072],{"class":71,"line":3865},[69,23073,2797],{"class":86},[69,23075,23076,23078,23080,23082,23084,23086,23089],{"class":71,"line":9190},[69,23077,20670],{"class":86},[69,23079,29],{"class":109},[69,23081,1398],{"class":86},[69,23083,9158],{"class":1022},[69,23085,1767],{"class":86},[69,23087,23088],{"class":1022},"\"安卓\"",[69,23090,3963],{"class":86},[69,23092,23093,23095,23097,23100,23102,23105,23107],{"class":71,"line":9214},[69,23094,2802],{"class":86},[69,23096,2429],{"class":82},[69,23098,23099],{"class":86},"p.Name",[69,23101,2429],{"class":82},[69,23103,23104],{"class":1022},"\"拿着：\"",[69,23106,2429],{"class":82},[69,23108,23109],{"class":86},"p.m_phone.m_PName;\n",[69,23111,23112],{"class":71,"line":9219},[69,23113,142],{"class":86},[69,23115,23116,23118,23120],{"class":71,"line":9225},[69,23117,1401],{"class":82},[69,23119,3217],{"class":109},[69,23121,3220],{"class":86},[69,23123,23124],{"class":71,"line":9252},[69,23125,2797],{"class":86},[69,23127,23128,23130],{"class":71,"line":9257},[69,23129,6875],{"class":109},[69,23131,6878],{"class":86},[69,23133,23134],{"class":71,"line":9263},[69,23135,142],{"class":86},[29,23137,10267],{},[59,23139,23141],{"className":1386,"code":23140,"language":1388,"meta":64,"style":64},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[66,23142,23143,23148],{"__ignoreMap":64},[69,23144,23145],{"class":71,"line":72},[69,23146,23147],{"class":75},"    \u002F\u002F不需要写这个：\n",[69,23149,23150],{"class":71,"line":79},[69,23151,23152],{"class":75},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[29,23154,23155],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[59,23157,23159],{"className":1386,"code":23158,"language":1388,"meta":64,"style":64},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[66,23160,23161],{"__ignoreMap":64},[69,23162,23163,23165,23168,23170,23173,23176],{"class":71,"line":72},[69,23164,20285],{"class":109},[69,23166,23167],{"class":86},"(string name.string pname):",[69,23169,16250],{"class":109},[69,23171,23172],{"class":86},"(name),",[69,23174,23175],{"class":109},"m_phone",[69,23177,23178],{"class":86},"(pname) {}\n",[29,23180,23181,23182,1019,23185],{},"采用的是隐式转换法，实际为如下：\n",[66,23183,23184],{},"m_phone(pname)",[66,23186,23187],{},"Phone m_phone=pname",[29,23189,23190,23193],{},[195,23191,23192],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[29,23195,23196],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[19,23198,23200],{"id":23199},"_828静态对象","8.2.8静态对象",[29,23202,23203],{},"静态对象在成员对象前static，称为静态对象",[29,23205,23206],{},"静态对象分为两类：",[37,23208,23209],{},[40,23210,23211],{},"静态成员变量",[162,23213,23214,23217,23220],{},[40,23215,23216],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[40,23218,23219],{},"②在编译阶段分配内存",[40,23221,23222],{},"③类内声明，类外初始化",[37,23224,23225],{"start":79},[40,23226,23227],{},"静态成员函数",[162,23229,23230,23233],{},[40,23231,23232],{},"①所有对象共享同一个函数",[40,23234,23235],{},"②静态成员函数只能访问静态成员变量",[23237,23238,23240],"h4",{"id":23239},"_8281静态成员变量","8.2.8.1静态成员变量",[59,23242,23244],{"className":1386,"code":23243,"language":1388,"meta":64,"style":64},"#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",[66,23245,23246,23252,23262,23268,23272,23276,23281,23286,23291,23299,23303,23307,23311,23319,23323,23327,23332,23345,23349,23357,23361,23367],{"__ignoreMap":64},[69,23247,23248,23250],{"class":71,"line":72},[69,23249,3194],{"class":82},[69,23251,3197],{"class":1022},[69,23253,23254,23256,23258,23260],{"class":71,"line":79},[69,23255,3202],{"class":82},[69,23257,3205],{"class":82},[69,23259,3208],{"class":109},[69,23261,130],{"class":86},[69,23263,23264,23266],{"class":71,"line":106},[69,23265,15934],{"class":82},[69,23267,16411],{"class":109},[69,23269,23270],{"class":71,"line":116},[69,23271,2797],{"class":86},[69,23273,23274],{"class":71,"line":133},[69,23275,15956],{"class":82},[69,23277,23278],{"class":71,"line":139},[69,23279,23280],{"class":75},"    \u002F\u002F非静态成员变量\n",[69,23282,23283],{"class":71,"line":401},[69,23284,23285],{"class":75},"    \u002F\u002F int m_A;\n",[69,23287,23288],{"class":71,"line":470},[69,23289,23290],{"class":75},"    \u002F\u002F定义静态成员变量\n",[69,23292,23293,23295,23297],{"class":71,"line":475},[69,23294,12262],{"class":82},[69,23296,3626],{"class":82},[69,23298,22631],{"class":86},[69,23300,23301],{"class":71,"line":482},[69,23302,3644],{"emptyLinePlaceholder":1325},[69,23304,23305],{"class":71,"line":497},[69,23306,3644],{"emptyLinePlaceholder":1325},[69,23308,23309],{"class":71,"line":502},[69,23310,5239],{"class":86},[69,23312,23313,23315,23317],{"class":71,"line":509},[69,23314,6606],{"class":82},[69,23316,6830],{"class":109},[69,23318,3220],{"class":86},[69,23320,23321],{"class":71,"line":524},[69,23322,2797],{"class":86},[69,23324,23325],{"class":71,"line":2888},[69,23326,16553],{"class":86},[69,23328,23329],{"class":71,"line":2893},[69,23330,23331],{"class":75},"    \u002F\u002F输出类成员变量这块内存\n",[69,23333,23334,23336,23338,23341,23343],{"class":71,"line":2899},[69,23335,2802],{"class":86},[69,23337,2429],{"class":82},[69,23339,23340],{"class":86},"p.m_A",[69,23342,2429],{"class":82},[69,23344,2451],{"class":86},[69,23346,23347],{"class":71,"line":2919},[69,23348,142],{"class":86},[69,23350,23351,23353,23355],{"class":71,"line":2924},[69,23352,1401],{"class":82},[69,23354,3217],{"class":109},[69,23356,3220],{"class":86},[69,23358,23359],{"class":71,"line":2938},[69,23360,2797],{"class":86},[69,23362,23363,23365],{"class":71,"line":2943},[69,23364,6875],{"class":109},[69,23366,3220],{"class":86},[69,23368,23369],{"class":71,"line":2972},[69,23370,142],{"class":86},[29,23372,23373],{},"此时输出是报错的：无法解析外部命令",[29,23375,23376],{},"解决这一问题：必须用到类内声明，类外初始化操作",[59,23378,23380],{"className":1386,"code":23379,"language":1388,"meta":64,"style":64},"#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",[66,23381,23382,23388,23398,23404,23408,23412,23417,23425,23429,23434,23449,23457,23461,23465,23470,23475,23487,23492,23503,23508,23513,23526,23530,23538,23542,23548],{"__ignoreMap":64},[69,23383,23384,23386],{"class":71,"line":72},[69,23385,3194],{"class":82},[69,23387,3197],{"class":1022},[69,23389,23390,23392,23394,23396],{"class":71,"line":79},[69,23391,3202],{"class":82},[69,23393,3205],{"class":82},[69,23395,3208],{"class":109},[69,23397,130],{"class":86},[69,23399,23400,23402],{"class":71,"line":106},[69,23401,15934],{"class":82},[69,23403,16411],{"class":109},[69,23405,23406],{"class":71,"line":116},[69,23407,2797],{"class":86},[69,23409,23410],{"class":71,"line":133},[69,23411,15956],{"class":82},[69,23413,23414],{"class":71,"line":139},[69,23415,23416],{"class":75},"    \u002F\u002F类内声明\n",[69,23418,23419,23421,23423],{"class":71,"line":401},[69,23420,12262],{"class":82},[69,23422,3626],{"class":82},[69,23424,22631],{"class":86},[69,23426,23427],{"class":71,"line":470},[69,23428,5239],{"class":86},[69,23430,23431],{"class":71,"line":475},[69,23432,23433],{"class":75},"\u002F\u002F类外初始化\n",[69,23435,23436,23438,23440,23443,23445,23447],{"class":71,"line":482},[69,23437,1401],{"class":82},[69,23439,16809],{"class":109},[69,23441,23442],{"class":86},"::m_A",[69,23444,1019],{"class":82},[69,23446,390],{"class":90},[69,23448,130],{"class":86},[69,23450,23451,23453,23455],{"class":71,"line":497},[69,23452,6606],{"class":82},[69,23454,6830],{"class":109},[69,23456,3220],{"class":86},[69,23458,23459],{"class":71,"line":502},[69,23460,2797],{"class":86},[69,23462,23463],{"class":71,"line":509},[69,23464,16553],{"class":86},[69,23466,23467],{"class":71,"line":524},[69,23468,23469],{"class":75},"    \u002F\u002F访问变量的原内存空间\n",[69,23471,23472],{"class":71,"line":2888},[69,23473,23474],{"class":75},"    \u002F\u002F100\n",[69,23476,23477,23479,23481,23483,23485],{"class":71,"line":2893},[69,23478,2802],{"class":86},[69,23480,2429],{"class":82},[69,23482,23340],{"class":86},[69,23484,2429],{"class":82},[69,23486,2451],{"class":86},[69,23488,23489],{"class":71,"line":2899},[69,23490,23491],{"class":86},"    Person p2;\n",[69,23493,23494,23497,23499,23501],{"class":71,"line":2919},[69,23495,23496],{"class":86},"    p2.m_A",[69,23498,1019],{"class":82},[69,23500,2967],{"class":90},[69,23502,130],{"class":86},[69,23504,23505],{"class":71,"line":2924},[69,23506,23507],{"class":75},"    \u002F\u002F继续访问这片空间\n",[69,23509,23510],{"class":71,"line":2938},[69,23511,23512],{"class":75},"    \u002F\u002F200\n",[69,23514,23515,23517,23519,23522,23524],{"class":71,"line":2943},[69,23516,2802],{"class":86},[69,23518,2429],{"class":82},[69,23520,23521],{"class":86},"p2.m_A",[69,23523,2429],{"class":82},[69,23525,2451],{"class":86},[69,23527,23528],{"class":71,"line":2972},[69,23529,142],{"class":86},[69,23531,23532,23534,23536],{"class":71,"line":2977},[69,23533,1401],{"class":82},[69,23535,3217],{"class":109},[69,23537,3220],{"class":86},[69,23539,23540],{"class":71,"line":2994},[69,23541,2797],{"class":86},[69,23543,23544,23546],{"class":71,"line":2999},[69,23545,6875],{"class":109},[69,23547,6878],{"class":86},[69,23549,23550],{"class":71,"line":3004},[69,23551,142],{"class":86},[29,23553,23554],{},[195,23555,23556],{},"静态变量的访问",[59,23558,23560],{"className":1386,"code":23559,"language":1388,"meta":64,"style":64},"#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",[66,23561,23562,23568,23578,23584,23588,23592,23596,23604,23608,23613,23621,23625,23629,23643,23658,23666,23670,23675,23680,23685,23690,23702,23707,23712,23726,23743,23747,23755,23759,23765],{"__ignoreMap":64},[69,23563,23564,23566],{"class":71,"line":72},[69,23565,3194],{"class":82},[69,23567,3197],{"class":1022},[69,23569,23570,23572,23574,23576],{"class":71,"line":79},[69,23571,3202],{"class":82},[69,23573,3205],{"class":82},[69,23575,3208],{"class":109},[69,23577,130],{"class":86},[69,23579,23580,23582],{"class":71,"line":106},[69,23581,15934],{"class":82},[69,23583,16411],{"class":109},[69,23585,23586],{"class":71,"line":116},[69,23587,2797],{"class":86},[69,23589,23590],{"class":71,"line":133},[69,23591,15956],{"class":82},[69,23593,23594],{"class":71,"line":139},[69,23595,23416],{"class":75},[69,23597,23598,23600,23602],{"class":71,"line":401},[69,23599,12262],{"class":82},[69,23601,3626],{"class":82},[69,23603,22631],{"class":86},[69,23605,23606],{"class":71,"line":470},[69,23607,16462],{"class":82},[69,23609,23610],{"class":71,"line":475},[69,23611,23612],{"class":75},"    \u002F\u002F静态成员变量也是有访问权限的\n",[69,23614,23615,23617,23619],{"class":71,"line":482},[69,23616,12262],{"class":82},[69,23618,3626],{"class":82},[69,23620,22638],{"class":86},[69,23622,23623],{"class":71,"line":497},[69,23624,5239],{"class":86},[69,23626,23627],{"class":71,"line":502},[69,23628,23433],{"class":75},[69,23630,23631,23633,23635,23637,23639,23641],{"class":71,"line":509},[69,23632,1401],{"class":82},[69,23634,16809],{"class":109},[69,23636,23442],{"class":86},[69,23638,1019],{"class":82},[69,23640,390],{"class":90},[69,23642,130],{"class":86},[69,23644,23645,23647,23649,23652,23654,23656],{"class":71,"line":524},[69,23646,1401],{"class":82},[69,23648,16809],{"class":109},[69,23650,23651],{"class":86},"::m_B",[69,23653,1019],{"class":82},[69,23655,2087],{"class":90},[69,23657,130],{"class":86},[69,23659,23660,23662,23664],{"class":71,"line":2888},[69,23661,6606],{"class":82},[69,23663,6899],{"class":109},[69,23665,3220],{"class":86},[69,23667,23668],{"class":71,"line":2893},[69,23669,2797],{"class":86},[69,23671,23672],{"class":71,"line":2899},[69,23673,23674],{"class":75},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[69,23676,23677],{"class":71,"line":2919},[69,23678,23679],{"class":75},"    \u002F\u002F静态成员变量有两种访问方式：\n",[69,23681,23682],{"class":71,"line":2924},[69,23683,23684],{"class":75},"    \u002F\u002F1.通过对象进行访问\n",[69,23686,23687],{"class":71,"line":2938},[69,23688,23689],{"class":86},"    Person p;  \n",[69,23691,23692,23694,23696,23698,23700],{"class":71,"line":2943},[69,23693,2802],{"class":86},[69,23695,2429],{"class":82},[69,23697,23340],{"class":86},[69,23699,2429],{"class":82},[69,23701,2451],{"class":86},[69,23703,23704],{"class":71,"line":2972},[69,23705,23706],{"class":75},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[69,23708,23709],{"class":71,"line":2977},[69,23710,23711],{"class":75},"    \u002F\u002F2.通过类名进行访问\n",[69,23713,23714,23716,23718,23720,23722,23724],{"class":71,"line":2994},[69,23715,2802],{"class":86},[69,23717,2429],{"class":82},[69,23719,20285],{"class":109},[69,23721,23442],{"class":86},[69,23723,2429],{"class":82},[69,23725,2451],{"class":86},[69,23727,23728,23730,23732,23734,23736,23738,23740],{"class":71,"line":2999},[69,23729,2802],{"class":86},[69,23731,2429],{"class":82},[69,23733,20285],{"class":109},[69,23735,23651],{"class":86},[69,23737,2429],{"class":82},[69,23739,2494],{"class":86},[69,23741,23742],{"class":75}," \u002F\u002F没有访问权限，报错\n",[69,23744,23745],{"class":71,"line":3004},[69,23746,142],{"class":86},[69,23748,23749,23751,23753],{"class":71,"line":3009},[69,23750,1401],{"class":82},[69,23752,3217],{"class":109},[69,23754,3220],{"class":86},[69,23756,23757],{"class":71,"line":3023},[69,23758,2797],{"class":86},[69,23760,23761,23763],{"class":71,"line":3028},[69,23762,6944],{"class":109},[69,23764,6878],{"class":86},[69,23766,23767],{"class":71,"line":3821},[69,23768,142],{"class":86},[23237,23770,23772],{"id":23771},"_8282静态成员函数","8.2.8.2静态成员函数",[29,23774,23775],{},"1.静态成员函数定义与访问",[59,23777,23779],{"className":1386,"code":23778,"language":1388,"meta":64,"style":64},"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",[66,23780,23781,23787,23791,23795,23800,23811,23815,23829,23833,23837,23845,23849,23854,23859,23863,23871,23876,23886],{"__ignoreMap":64},[69,23782,23783,23785],{"class":71,"line":72},[69,23784,15934],{"class":82},[69,23786,16411],{"class":109},[69,23788,23789],{"class":71,"line":79},[69,23790,2797],{"class":86},[69,23792,23793],{"class":71,"line":106},[69,23794,15956],{"class":82},[69,23796,23797],{"class":71,"line":116},[69,23798,23799],{"class":75},"    \u002F\u002F在公共权限下定义静态成员函数\n",[69,23801,23802,23804,23807,23809],{"class":71,"line":133},[69,23803,12262],{"class":82},[69,23805,23806],{"class":82}," void",[69,23808,12627],{"class":109},[69,23810,3220],{"class":86},[69,23812,23813],{"class":71,"line":139},[69,23814,3274],{"class":86},[69,23816,23817,23820,23822,23825,23827],{"class":71,"line":401},[69,23818,23819],{"class":86},"        coout",[69,23821,2429],{"class":82},[69,23823,23824],{"class":1022},"\"静态成员函数的调用\"",[69,23826,2429],{"class":82},[69,23828,2451],{"class":86},[69,23830,23831],{"class":71,"line":470},[69,23832,3431],{"class":86},[69,23834,23835],{"class":71,"line":475},[69,23836,5239],{"class":86},[69,23838,23839,23841,23843],{"class":71,"line":482},[69,23840,6606],{"class":82},[69,23842,6830],{"class":109},[69,23844,3220],{"class":86},[69,23846,23847],{"class":71,"line":497},[69,23848,2797],{"class":86},[69,23850,23851],{"class":71,"line":502},[69,23852,23853],{"class":75},"    \u002F\u002F静态成员函数的调用方式:\n",[69,23855,23856],{"class":71,"line":509},[69,23857,23858],{"class":75},"    \u002F\u002F1.通过对象访问\n",[69,23860,23861],{"class":71,"line":524},[69,23862,16553],{"class":86},[69,23864,23865,23867,23869],{"class":71,"line":2888},[69,23866,17105],{"class":86},[69,23868,12793],{"class":109},[69,23870,6878],{"class":86},[69,23872,23873],{"class":71,"line":2893},[69,23874,23875],{"class":75},"    \u002F\u002F2.通过类名访问\n",[69,23877,23878,23880,23882,23884],{"class":71,"line":2899},[69,23879,19758],{"class":109},[69,23881,18971],{"class":86},[69,23883,12793],{"class":109},[69,23885,6878],{"class":86},[69,23887,23888],{"class":71,"line":2919},[69,23889,142],{"class":86},[37,23891,23892],{"start":79},[40,23893,23894],{},"静态成员函数只能访问静态成员变量",[59,23896,23898],{"className":1386,"code":23897,"language":1388,"meta":64,"style":64},"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",[66,23899,23900,23906,23910,23914,23918,23928,23932,23946,23951,23963,23967,23978,23988,23992,23996,24000,24010,24014,24027,24031,24035,24039,24043,24057,24065,24069,24073,24077,24081,24089,24093,24103,24108,24112,24120,24124,24130],{"__ignoreMap":64},[69,23901,23902,23904],{"class":71,"line":72},[69,23903,15934],{"class":82},[69,23905,16411],{"class":109},[69,23907,23908],{"class":71,"line":79},[69,23909,2797],{"class":86},[69,23911,23912],{"class":71,"line":106},[69,23913,15956],{"class":82},[69,23915,23916],{"class":71,"line":116},[69,23917,23799],{"class":75},[69,23919,23920,23922,23924,23926],{"class":71,"line":133},[69,23921,12262],{"class":82},[69,23923,23806],{"class":82},[69,23925,12627],{"class":109},[69,23927,3220],{"class":86},[69,23929,23930],{"class":71,"line":139},[69,23931,3274],{"class":86},[69,23933,23934,23937,23939,23941,23943],{"class":71,"line":401},[69,23935,23936],{"class":86},"        m_A",[69,23938,1019],{"class":82},[69,23940,124],{"class":90},[69,23942,1450],{"class":86},[69,23944,23945],{"class":75}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[69,23947,23948],{"class":71,"line":470},[69,23949,23950],{"class":75},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[69,23952,23953,23955,23957,23959,23961],{"class":71,"line":475},[69,23954,23819],{"class":86},[69,23956,2429],{"class":82},[69,23958,23824],{"class":1022},[69,23960,2429],{"class":82},[69,23962,2451],{"class":86},[69,23964,23965],{"class":71,"line":482},[69,23966,3431],{"class":86},[69,23968,23969,23971,23973,23975],{"class":71,"line":497},[69,23970,12262],{"class":82},[69,23972,3626],{"class":82},[69,23974,16688],{"class":86},[69,23976,23977],{"class":75}," \u002F\u002F静态成员变量\n",[69,23979,23980,23982,23985],{"class":71,"line":502},[69,23981,3229],{"class":82},[69,23983,23984],{"class":86}," m_B;",[69,23986,23987],{"class":75}," \u002F\u002F非静态成员变量\n",[69,23989,23990],{"class":71,"line":509},[69,23991,3644],{"emptyLinePlaceholder":1325},[69,23993,23994],{"class":71,"line":524},[69,23995,16462],{"class":82},[69,23997,23998],{"class":71,"line":2888},[69,23999,23612],{"class":75},[69,24001,24002,24004,24006,24008],{"class":71,"line":2893},[69,24003,12262],{"class":82},[69,24005,23806],{"class":82},[69,24007,14859],{"class":109},[69,24009,3220],{"class":86},[69,24011,24012],{"class":71,"line":2899},[69,24013,3274],{"class":86},[69,24015,24016,24018,24020,24023,24025],{"class":71,"line":2919},[69,24017,4695],{"class":86},[69,24019,2429],{"class":82},[69,24021,24022],{"class":1022},"\"这是私有权限下的静态函数调用\"",[69,24024,2429],{"class":82},[69,24026,2451],{"class":86},[69,24028,24029],{"class":71,"line":2924},[69,24030,3431],{"class":86},[69,24032,24033],{"class":71,"line":2938},[69,24034,3644],{"emptyLinePlaceholder":1325},[69,24036,24037],{"class":71,"line":2943},[69,24038,3644],{"emptyLinePlaceholder":1325},[69,24040,24041],{"class":71,"line":2972},[69,24042,5239],{"class":86},[69,24044,24045,24047,24049,24051,24053,24055],{"class":71,"line":2977},[69,24046,1401],{"class":82},[69,24048,16809],{"class":109},[69,24050,23442],{"class":86},[69,24052,1019],{"class":82},[69,24054,1583],{"class":90},[69,24056,130],{"class":86},[69,24058,24059,24061,24063],{"class":71,"line":2994},[69,24060,6606],{"class":82},[69,24062,6830],{"class":109},[69,24064,3220],{"class":86},[69,24066,24067],{"class":71,"line":2999},[69,24068,2797],{"class":86},[69,24070,24071],{"class":71,"line":3004},[69,24072,23853],{"class":75},[69,24074,24075],{"class":71,"line":3009},[69,24076,23858],{"class":75},[69,24078,24079],{"class":71,"line":3023},[69,24080,16553],{"class":86},[69,24082,24083,24085,24087],{"class":71,"line":3028},[69,24084,17105],{"class":86},[69,24086,12793],{"class":109},[69,24088,6878],{"class":86},[69,24090,24091],{"class":71,"line":3821},[69,24092,23875],{"class":75},[69,24094,24095,24097,24099,24101],{"class":71,"line":3835},[69,24096,19758],{"class":109},[69,24098,18971],{"class":86},[69,24100,12793],{"class":109},[69,24102,6878],{"class":86},[69,24104,24105],{"class":71,"line":3843},[69,24106,24107],{"class":75},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[69,24109,24110],{"class":71,"line":3848},[69,24111,142],{"class":86},[69,24113,24114,24116,24118],{"class":71,"line":3854},[69,24115,1401],{"class":82},[69,24117,3217],{"class":109},[69,24119,3220],{"class":86},[69,24121,24122],{"class":71,"line":3860},[69,24123,2797],{"class":86},[69,24125,24126,24128],{"class":71,"line":3865},[69,24127,6875],{"class":109},[69,24129,6878],{"class":86},[69,24131,24132],{"class":71,"line":9190},[69,24133,142],{"class":86},[19,24135,24137],{"id":24136},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23237,24139,24141],{"id":24140},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[29,24143,24144],{},"在c++中，类内的成员变量和成员函数分开存储",[29,24146,24147],{},"只有非静态成员变量才属于类的对象上",[24149,24150,24152],"h5",{"id":24151},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[59,24154,24156],{"className":1386,"code":24155,"language":1388,"meta":64,"style":64},"#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",[66,24157,24158,24165,24175,24181,24185,24189,24193,24201,24205,24209,24232,24236,24244,24248,24254],{"__ignoreMap":64},[69,24159,24160,24162],{"class":71,"line":72},[69,24161,3194],{"class":82},[69,24163,24164],{"class":1022},"\u003Ciostraem>\n",[69,24166,24167,24169,24171,24173],{"class":71,"line":79},[69,24168,3202],{"class":82},[69,24170,3205],{"class":82},[69,24172,3208],{"class":109},[69,24174,130],{"class":86},[69,24176,24177,24179],{"class":71,"line":106},[69,24178,15934],{"class":82},[69,24180,16411],{"class":109},[69,24182,24183],{"class":71,"line":116},[69,24184,2797],{"class":86},[69,24186,24187],{"class":71,"line":133},[69,24188,3644],{"emptyLinePlaceholder":1325},[69,24190,24191],{"class":71,"line":139},[69,24192,5239],{"class":86},[69,24194,24195,24197,24199],{"class":71,"line":401},[69,24196,6606],{"class":82},[69,24198,6830],{"class":109},[69,24200,3220],{"class":86},[69,24202,24203],{"class":71,"line":470},[69,24204,2797],{"class":86},[69,24206,24207],{"class":71,"line":475},[69,24208,16553],{"class":86},[69,24210,24211,24213,24215,24218,24220,24223,24225,24227,24229],{"class":71,"line":482},[69,24212,2802],{"class":86},[69,24214,2429],{"class":82},[69,24216,24217],{"class":1022},"\"size of p=\"",[69,24219,2429],{"class":82},[69,24221,24222],{"class":109},"sizeoif",[69,24224,7781],{"class":86},[69,24226,2429],{"class":82},[69,24228,2494],{"class":86},[69,24230,24231],{"class":75}," \u002F\u002F查看这个空类的占用的内存空间\n",[69,24233,24234],{"class":71,"line":497},[69,24235,142],{"class":86},[69,24237,24238,24240,24242],{"class":71,"line":502},[69,24239,1401],{"class":82},[69,24241,3217],{"class":109},[69,24243,3220],{"class":86},[69,24245,24246],{"class":71,"line":509},[69,24247,2797],{"class":86},[69,24249,24250,24252],{"class":71,"line":524},[69,24251,6875],{"class":109},[69,24253,6878],{"class":86},[69,24255,24256],{"class":71,"line":2888},[69,24257,142],{"class":86},[29,24259,24260],{},"输出结果为：size of p=1",[29,24262,24263],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[29,24265,24266],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24149,24268,24270],{"id":24269},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[59,24272,24274],{"className":1386,"code":24273,"language":1388,"meta":64,"style":64},"#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",[66,24275,24276,24282,24292,24300,24304,24313,24317,24325,24329,24333,24352,24356,24360,24368,24372,24378],{"__ignoreMap":64},[69,24277,24278,24280],{"class":71,"line":72},[69,24279,3194],{"class":82},[69,24281,3197],{"class":1022},[69,24283,24284,24286,24288,24290],{"class":71,"line":79},[69,24285,3202],{"class":82},[69,24287,3205],{"class":82},[69,24289,3208],{"class":109},[69,24291,130],{"class":86},[69,24293,24294,24296,24298],{"class":71,"line":106},[69,24295,15934],{"class":82},[69,24297,16809],{"class":109},[69,24299,3918],{"class":86},[69,24301,24302],{"class":71,"line":116},[69,24303,2797],{"class":86},[69,24305,24306,24308,24310],{"class":71,"line":133},[69,24307,3229],{"class":82},[69,24309,16688],{"class":86},[69,24311,24312],{"class":75},"\u002F\u002F非静态成员变量\n",[69,24314,24315],{"class":71,"line":139},[69,24316,5239],{"class":86},[69,24318,24319,24321,24323],{"class":71,"line":401},[69,24320,6606],{"class":82},[69,24322,6830],{"class":109},[69,24324,3220],{"class":86},[69,24326,24327],{"class":71,"line":470},[69,24328,2797],{"class":86},[69,24330,24331],{"class":71,"line":475},[69,24332,16553],{"class":86},[69,24334,24335,24337,24339,24341,24343,24345,24347,24349],{"class":71,"line":482},[69,24336,2802],{"class":86},[69,24338,2429],{"class":82},[69,24340,24217],{"class":1022},[69,24342,2624],{"class":82},[69,24344,7781],{"class":86},[69,24346,2429],{"class":82},[69,24348,2494],{"class":86},[69,24350,24351],{"class":75}," \u002F\u002F查看不是空对象时占用多少内存\n",[69,24353,24354],{"class":71,"line":497},[69,24355,3644],{"emptyLinePlaceholder":1325},[69,24357,24358],{"class":71,"line":502},[69,24359,142],{"class":86},[69,24361,24362,24364,24366],{"class":71,"line":509},[69,24363,1401],{"class":82},[69,24365,3217],{"class":109},[69,24367,3220],{"class":86},[69,24369,24370],{"class":71,"line":524},[69,24371,2797],{"class":86},[69,24373,24374,24376],{"class":71,"line":2888},[69,24375,6875],{"class":109},[69,24377,6878],{"class":86},[69,24379,24380],{"class":71,"line":2893},[69,24381,142],{"class":86},[29,24383,24384],{},"输出结果：size of p=4",[29,24386,24387],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[37,24389,24390],{},[40,24391,24392],{},"如果加上非静态成员变量，Person类修改如下",[59,24394,24396],{"className":1386,"code":24395,"language":1388,"meta":64,"style":64},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[66,24397,24398,24404,24408,24414,24422,24426,24431],{"__ignoreMap":64},[69,24399,24400,24402],{"class":71,"line":72},[69,24401,15934],{"class":82},[69,24403,16411],{"class":109},[69,24405,24406],{"class":71,"line":79},[69,24407,2797],{"class":86},[69,24409,24410,24412],{"class":71,"line":106},[69,24411,3229],{"class":82},[69,24413,22631],{"class":86},[69,24415,24416,24418,24420],{"class":71,"line":116},[69,24417,12262],{"class":82},[69,24419,3626],{"class":82},[69,24421,22638],{"class":86},[69,24423,24424],{"class":71,"line":133},[69,24425,5239],{"class":86},[69,24427,24428],{"class":71,"line":139},[69,24429,24430],{"class":75},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[69,24432,24433,24435,24437,24439,24441,24443],{"class":71,"line":401},[69,24434,1401],{"class":82},[69,24436,16809],{"class":109},[69,24438,23651],{"class":86},[69,24440,1019],{"class":82},[69,24442,1583],{"class":90},[69,24444,130],{"class":86},[29,24446,24447],{},"输出结果：4",[29,24449,24450],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[37,24452,24453],{"start":79},[40,24454,24455],{},"加上非静态成员函数",[59,24457,24459],{"className":1386,"code":24458,"language":1388,"meta":64,"style":64},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[66,24460,24461,24468,24472,24478,24486,24490,24494,24498],{"__ignoreMap":64},[69,24462,24463,24465],{"class":71,"line":72},[69,24464,15934],{"class":82},[69,24466,24467],{"class":109},"  Person\n",[69,24469,24470],{"class":71,"line":79},[69,24471,2797],{"class":86},[69,24473,24474,24476],{"class":71,"line":106},[69,24475,3229],{"class":82},[69,24477,22631],{"class":86},[69,24479,24480,24482,24484],{"class":71,"line":116},[69,24481,16149],{"class":82},[69,24483,12627],{"class":109},[69,24485,3220],{"class":86},[69,24487,24488],{"class":71,"line":133},[69,24489,3274],{"class":86},[69,24491,24492],{"class":71,"line":139},[69,24493,3644],{"emptyLinePlaceholder":1325},[69,24495,24496],{"class":71,"line":401},[69,24497,3431],{"class":86},[69,24499,24500],{"class":71,"line":470},[69,24501,5239],{"class":86},[29,24503,24504],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[37,24506,24507],{"start":106},[40,24508,24509],{},"加上静态成员函数",[59,24511,24513],{"className":1386,"code":24512,"language":1388,"meta":64,"style":64},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[66,24514,24515,24521,24525,24531,24539,24543,24547,24551,24562,24566,24570,24574],{"__ignoreMap":64},[69,24516,24517,24519],{"class":71,"line":72},[69,24518,15934],{"class":82},[69,24520,24467],{"class":109},[69,24522,24523],{"class":71,"line":79},[69,24524,2797],{"class":86},[69,24526,24527,24529],{"class":71,"line":106},[69,24528,3229],{"class":82},[69,24530,22631],{"class":86},[69,24532,24533,24535,24537],{"class":71,"line":116},[69,24534,16149],{"class":82},[69,24536,12627],{"class":109},[69,24538,3220],{"class":86},[69,24540,24541],{"class":71,"line":133},[69,24542,3274],{"class":86},[69,24544,24545],{"class":71,"line":139},[69,24546,3644],{"emptyLinePlaceholder":1325},[69,24548,24549],{"class":71,"line":401},[69,24550,3431],{"class":86},[69,24552,24553,24555,24557,24560],{"class":71,"line":470},[69,24554,12262],{"class":82},[69,24556,23806],{"class":82},[69,24558,24559],{"class":109}," func1",[69,24561,3220],{"class":86},[69,24563,24564],{"class":71,"line":475},[69,24565,3274],{"class":86},[69,24567,24568],{"class":71,"line":482},[69,24569,3644],{"emptyLinePlaceholder":1325},[69,24571,24572],{"class":71,"line":497},[69,24573,3431],{"class":86},[69,24575,24576],{"class":71,"line":502},[69,24577,5239],{"class":86},[29,24579,24447],{},[29,24581,24582],{},"解释：静态成员函数也不属于类上",[1297,24584,8916],{},{"title":64,"searchDepth":79,"depth":79,"links":24586},[24587,24593],{"id":15885,"depth":79,"text":15886,"children":24588},[24589,24590,24591,24592],{"id":15889,"depth":106,"text":15890},{"id":16614,"depth":106,"text":16615},{"id":16786,"depth":106,"text":16787},{"id":17244,"depth":106,"text":17245},{"id":19616,"depth":79,"text":19617,"children":24594},[24595,24596,24597,24598,24599,24600,24601,24602,24603],{"id":19628,"depth":106,"text":19629},{"id":19921,"depth":106,"text":19922},{"id":20412,"depth":106,"text":20413},{"id":21509,"depth":106,"text":21510},{"id":21932,"depth":106,"text":21933},{"id":22411,"depth":106,"text":22412},{"id":22786,"depth":106,"text":22787},{"id":23199,"depth":106,"text":23200},{"id":24136,"depth":106,"text":24137},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15851,"description":24604},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24611,"title":1388,"body":24612,"description":1322,"extension":1323,"meta":24616,"navigation":1325,"path":24618,"seo":24619,"stem":24620,"__hash__":24621},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24613,"toc":24614},[],{"title":64,"searchDepth":79,"depth":79,"links":24615},[],{"category":24617},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1388,"description":1322},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24623,"title":24624,"body":24625,"description":64,"extension":1323,"meta":25213,"navigation":1325,"path":25214,"seo":25215,"stem":25216,"__hash__":25217},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24626,"toc":25195},[24627,24630,24634,24637,24640,24643,24661,24666,24669,24672,24675,24678,24683,24686,24691,24694,24697,24701,24704,24707,24713,24716,24734,24738,24742,24745,24750,24753,24757,24760,24773,24776,24780,24783,24786,24789,24813,24816,24825,24836,24851,24883,24887,24894,24902,24906,24909,24912,24917,24921,24924,24927,24932,24935,24939,24942,24945,24950,24953,24957,24962,24966,25032,25036,25039,25042,25045,25048,25051,25057,25078,25081,25095,25103,25107,25110,25113,25118,25121,25126,25131,25134,25137,25142,25147,25150,25155,25160,25163,25168,25173,25176,25179,25184,25187,25192],[10,24628,24624],{"id":24629},"_1强化学习基本认识",[14,24631,24633],{"id":24632},"_11什么是强化学习","1.1.什么是强化学习",[29,24635,24636],{},"强化学习有两部分组成：智能体和环境；",[29,24638,24639],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[29,24641,24642],{},"强化学习与监督学习的区别:",[37,24644,24645,24648,24651,24654],{},[40,24646,24647],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[40,24649,24650],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[40,24652,24653],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[40,24655,24656,24657,24660],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[195,24658,24659],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[29,24662,24663],{},[24,24664],{"alt":64,"src":24665},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[29,24667,24668],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[29,24670,24671],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[29,24673,24674],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[29,24676,24677],{},"获取奖励",[29,24679,24680],{},[24,24681],{"alt":64,"src":24682},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[29,24684,24685],{},"强化学习可以分成标准强化学习和深度强化学习",[29,24687,24688],{},[24,24689],{"alt":64,"src":24690},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[29,24692,24693],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[29,24695,24696],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24698,24700],{"id":24699},"_12强化学习应用场景","1.2.强化学习应用场景",[29,24702,24703],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[29,24705,24706],{},"具身智能中的应用",[29,24708,24709,24712],{},[195,24710,24711],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[29,24714,24715],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[29,24717,24718,24719,24722,24723,24726,24727,24730,24731],{},"机器人是",[195,24720,24721],{},"躯体","，深度学习是",[195,24724,24725],{},"神经元****网络","，VLA是",[195,24728,24729],{},"通用的行为逻辑","，而强化学习是",[195,24732,24733],{},"教练",[14,24735,24737],{"id":24736},"_13序列决策","1.3.序列决策",[19,24739,24741],{"id":24740},"_131智能体与环境","1.3.1.智能体与环境",[29,24743,24744],{},"强化学习研究的问题是智能体agent与环境交互的问题",[29,24746,24747],{},[24,24748],{"alt":64,"src":24749},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[29,24751,24752],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[19,24754,24756],{"id":24755},"_132奖励","1.3.2.奖励",[29,24758,24759],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[29,24761,24762,24763,24772],{},"取某个策略的表现如何。强化学习的目的就是",[195,24764,24765,24766,24771],{},"最大化",[195,24767,24768],{},[195,24769,24770],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[29,24774,24775],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[19,24777,24779],{"id":24778},"_133序列决策","1.3.3.序列决策",[29,24781,24782],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[29,24784,24785],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[29,24787,24788],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[29,24790,24791,24794,24795,24797,24798,24800,24801,24803,24804,15036,24807,15036,24810],{},[531,24792,24793],{},"Ht"," = ",[531,24796,1984],{},"1*, a",[531,24799,1609],{},", r",[531,24802,1609],{},", . . . ,* ",[531,24805,24806],{},"ot",[531,24808,24809],{},", at ,",[531,24811,24812],{},"rt",[29,24814,24815],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[29,24817,24818,24794,24821,87,24823,1818],{},[531,24819,24820],{},"st",[531,24822,1447],{},[531,24824,24793],{},[29,24826,24827,24828,24831,24832,24835],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[195,24829,24830],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[195,24833,24834],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[29,24837,24838,24839,24842,24843,24846,24847,24850],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[195,24840,24841],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[195,24844,24845],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[531,24848,24849],{},"S, A, T, R, Ω, O, γ",")。",[29,24852,24853,24854,24856,24857,24859,24860,1398,24862,24865,24866,24868,24869,1398,24872,24875,24876,24878,24879,24882],{},"其中 ",[531,24855,2076],{}," 表示状态空间，为隐变量，",[531,24858,1624],{}," 为动作空间，",[531,24861,2101],{},[531,24863,24864],{},"s ′ |s, a",") 为状态转移概率，",[531,24867,2051],{}," 为奖励函数，",[531,24870,24871],{},"Ω",[531,24873,24874],{},"o|s, a",") 为观测概率，",[531,24877,1978],{}," 为观测空间，",[531,24880,24881],{},"γ"," 为折扣因子。",[14,24884,24886],{"id":24885},"_14动作空间","1.4.动作空间",[29,24888,24889,24890,24893],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[195,24891,24892],{},"动作空间"," ，动作空间分为:",[37,24895,24896,24899],{},[40,24897,24898],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[40,24900,24901],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24903,24905],{"id":24904},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[29,24907,24908],{},"由策略、价值函数、模型三部分组成",[29,24910,24911],{},"这三者组成马尔可夫决策过程",[29,24913,24914],{},[24,24915],{"alt":64,"src":24916},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[19,24918,24920],{"id":24919},"_151策略","1.5.1.策略",[29,24922,24923],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[29,24925,24926],{},"策略可分为两种：",[29,24928,24929],{},[24,24930],{"alt":64,"src":24931},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[29,24933,24934],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[19,24936,24938],{"id":24937},"_152价值函数","1.5.2.价值函数",[29,24940,24941],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[29,24943,24944],{},"价值函数中有一个折扣因子，类似于存款利息",[29,24946,24947],{},[24,24948],{"alt":64,"src":24949},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[29,24951,24952],{},"进入某个状态采取的最优动作可以通过Q函数得到",[19,24954,24956],{"id":24955},"_153模型","1.5.3.模型",[29,24958,24959],{},[24,24960],{"alt":64,"src":24961},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24963,24965],{"id":24964},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1530,24967,24968,24978],{},[1533,24969,24970],{},[1536,24971,24972,24975],{},[1539,24973,24974],{"align":1202},"类型",[1539,24976,24977],{"align":1202},"特点",[1576,24979,24980,24990,25000,25010,25022],{},[1536,24981,24982,24987],{},[1581,24983,24984],{"align":1202},[195,24985,24986],{},"基于价值的智能体",[1581,24988,24989],{"align":1202},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1536,24991,24992,24997],{},[1581,24993,24994],{"align":1202},[195,24995,24996],{},"基于策略的智能体",[1581,24998,24999],{"align":1202},"直接学习策略，没有学习价值函数",[1536,25001,25002,25007],{},[1581,25003,25004],{"align":1202},[195,25005,25006],{},"演员-评论员智能体",[1581,25008,25009],{"align":1202},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1536,25011,25012,25017],{},[1581,25013,25014],{"align":1202},[195,25015,25016],{},"有模型强化学习智能体",[1581,25018,25019],{"align":1202},[24,25020],{"alt":64,"src":25021},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1536,25023,25024,25029],{},[1581,25025,25026],{"align":1202},[195,25027,25028],{},"免模型强化学习智能体",[1581,25030,25031],{"align":1202},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25033,25035],{"id":25034},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[29,25037,25038],{},"学习和规划是序列决策的两个基本问题",[29,25040,25041],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[29,25043,25044],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[29,25046,25047],{},"强化学习用到的库：Gym",[29,25049,25050],{},"Gym可以检验强化学习算法的优劣",[29,25052,25053,25056],{},[195,25054,25055],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[59,25058,25062],{"className":25059,"code":25060,"language":25061,"meta":64,"style":64},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[66,25063,25064],{"__ignoreMap":64},[69,25065,25066,25069,25072,25075],{"class":71,"line":72},[69,25067,25068],{"class":109},"pip",[69,25070,25071],{"class":1022}," install",[69,25073,25074],{"class":1022}," gym==",[69,25076,25077],{"class":90},"0.25.2\n",[29,25079,25080],{},"显示图形界面需要",[59,25082,25084],{"className":25059,"code":25083,"language":25061,"meta":64,"style":64},"pip install pygame\n",[66,25085,25086],{"__ignoreMap":64},[69,25087,25088,25090,25092],{"class":71,"line":72},[69,25089,25068],{"class":109},[69,25091,25071],{"class":1022},[69,25093,25094],{"class":1022}," pygame\n",[29,25096,25097,25098],{},"有关Gym库的相关文档介绍：",[187,25099,25102],{"href":25100,"rel":25101},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[191],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25104,25106],{"id":25105},"_18一些补充基础概念","1.8.一些补充基础概念",[29,25108,25109],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[29,25111,25112],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[29,25114,25115],{},[24,25116],{"alt":64,"src":25117},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[29,25119,25120],{},"折扣率需要自己来设定",[29,25122,25123],{},[24,25124],{"alt":64,"src":25125},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[37,25127,25128],{},[40,25129,25130],{},"状态转移函数：",[29,25132,25133],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[29,25135,25136],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[29,25138,25139],{},[24,25140],{"alt":64,"src":25141},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[37,25143,25144],{"start":79},[40,25145,25146],{},"动作价值函数：",[29,25148,25149],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[29,25151,25152],{},[24,25153],{"alt":64,"src":25154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[37,25156,25157],{"start":106},[40,25158,25159],{},"最优动作价值函数：",[29,25161,25162],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[29,25164,25165],{},[24,25166],{"alt":64,"src":25167},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[37,25169,25170],{"start":116},[40,25171,25172],{},"状态价值函数:",[29,25174,25175],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[29,25177,25178],{},"它衡量的是“一个具体动作”的长期价值",[29,25180,25181],{},[24,25182],{"alt":64,"src":25183},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[29,25185,25186],{},"几个价值函数之间的比较：",[29,25188,25189],{},[24,25190],{"alt":64,"src":25191},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1297,25193,25194],{},"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":64,"searchDepth":79,"depth":79,"links":25196},[25197,25198,25199,25204,25205,25210,25211,25212],{"id":24632,"depth":79,"text":24633},{"id":24699,"depth":79,"text":24700},{"id":24736,"depth":79,"text":24737,"children":25200},[25201,25202,25203],{"id":24740,"depth":106,"text":24741},{"id":24755,"depth":106,"text":24756},{"id":24778,"depth":106,"text":24779},{"id":24885,"depth":79,"text":24886},{"id":24904,"depth":79,"text":24905,"children":25206},[25207,25208,25209],{"id":24919,"depth":106,"text":24920},{"id":24937,"depth":106,"text":24938},{"id":24955,"depth":106,"text":24956},{"id":24964,"depth":79,"text":24965},{"id":25034,"depth":79,"text":25035},{"id":25105,"depth":79,"text":25106},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24624,"description":64},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25219,"title":25220,"body":25221,"description":25228,"extension":1323,"meta":25239,"navigation":1325,"path":25240,"seo":25241,"stem":25242,"__hash__":25243},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25222,"toc":25237},[25223,25226,25229,25234],[10,25224,25220],{"id":25225},"_2马尔可夫决策过程",[29,25227,25228],{},"这是强化学习的基本框架",[29,25230,25231],{},[24,25232],{"alt":64,"src":25233},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[29,25235,25236],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":64,"searchDepth":79,"depth":79,"links":25238},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25220,"description":25228},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25245,"title":25246,"body":25247,"description":64,"extension":1323,"meta":25363,"navigation":1325,"path":25364,"seo":25365,"stem":25366,"__hash__":25367},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25248,"toc":25358},[25249,25252,25256,25259,25264,25269,25272,25277,25280,25285,25288,25292,25297,25300,25305,25310,25315,25318,25322,25327,25330,25335,25340,25345,25350,25353],[10,25250,25246],{"id":25251},"_3动作价值函数",[14,25253,25255],{"id":25254},"_31dqn","3.1.DQN",[29,25257,25258],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[29,25260,25261],{},[24,25262],{"alt":64,"src":25263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[29,25265,25266],{},[24,25267],{"alt":64,"src":25268},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[29,25270,25271],{},"DQN算法的描述：",[29,25273,25274],{},[24,25275],{"alt":64,"src":25276},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[29,25278,25279],{},"这里的Dense指的是全连接层",[29,25281,25282],{},[24,25283],{"alt":64,"src":25284},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[29,25286,25287],{},"当前观测的状态为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,25289,25291],{"id":25290},"_32dqn的举例","3.2.DQN的举例",[29,25293,25294],{},[24,25295],{"alt":64,"src":25296},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[29,25298,25299],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[29,25301,25302],{},[24,25303],{"alt":64,"src":25304},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[29,25306,25307],{},[24,25308],{"alt":64,"src":25309},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[29,25311,25312],{},[24,25313],{"alt":64,"src":25314},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[29,25316,25317],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25319,25321],{"id":25320},"_33td算法","3.3.TD算法",[29,25323,25324],{},[24,25325],{"alt":64,"src":25326},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[29,25328,25329],{},"强化学习TD算法公式的粗略解释：",[29,25331,25332],{},[24,25333],{"alt":64,"src":25334},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[29,25336,25337],{},[24,25338],{"alt":64,"src":25339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[29,25341,25342],{},[24,25343],{"alt":64,"src":25344},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[29,25346,25347],{},[24,25348],{"alt":64,"src":25349},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[29,25351,25352],{},"TD算法总结：",[29,25354,25355],{},[24,25356],{"alt":64,"src":25357},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":64,"searchDepth":79,"depth":79,"links":25359},[25360,25361,25362],{"id":25254,"depth":79,"text":25255},{"id":25290,"depth":79,"text":25291},{"id":25320,"depth":79,"text":25321},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25246,"description":64},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25369,"title":25370,"body":25371,"description":64,"extension":1323,"meta":25604,"navigation":1325,"path":25605,"seo":25606,"stem":25607,"__hash__":25608},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25372,"toc":25600},[25373,25376,25380,25383,25386,25391,25396,25399,25404,25409,25412,25417,25420,25425,25428,25433,25436,25441,25444,25449,25454,25457,25462,25465,25468,25473,25476,25481,25486,25490,25493,25496,25501,25506,25509,25514,25519,25522,25527,25530,25533,25538,25541,25546,25549,25554,25559,25562,25567,25572,25575,25580,25583,25588,25591],[10,25374,25370],{"id":25375},"_4策略学习",[14,25377,25379],{"id":25378},"_41概念描述","4.1.概念描述",[29,25381,25382],{},"用神经网络（策略网络）近似策略函数",[29,25384,25385],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[29,25387,25388],{},[24,25389],{"alt":64,"src":25390},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[29,25392,25393],{},[24,25394],{"alt":64,"src":25395},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[29,25397,25398],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[29,25400,25401],{},[24,25402],{"alt":64,"src":25403},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[29,25405,25406],{},[24,25407],{"alt":64,"src":25408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[29,25410,25411],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[29,25413,25414],{},[24,25415],{"alt":64,"src":25416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[29,25418,25419],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[29,25421,25422],{},[24,25423],{"alt":64,"src":25424},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[29,25426,25427],{},"改进theta要用到策略梯度算法",[29,25429,25430],{},[24,25431],{"alt":64,"src":25432},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[29,25434,25435],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[29,25437,25438],{},[24,25439],{"alt":64,"src":25440},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[29,25442,25443],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[29,25445,25446],{},[24,25447],{"alt":64,"src":25448},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[29,25450,25451],{},[24,25452],{"alt":64,"src":25453},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[29,25455,25456],{},"梯度公式总结：",[29,25458,25459],{},[24,25460],{"alt":64,"src":25461},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[29,25463,25464],{},"两个公式的分别应用场景：",[29,25466,25467],{},"对于离散的动作：",[29,25469,25470],{},[24,25471],{"alt":64,"src":25472},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[29,25474,25475],{},"对于连续的动作：",[29,25477,25478],{},[24,25479],{"alt":64,"src":25480},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[29,25482,25483],{},[24,25484],{"alt":64,"src":25485},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25487,25489],{"id":25488},"_42概率梯度算法总结","4.2.概率梯度算法总结",[29,25491,25492],{},"使用蒙特卡洛来近似计算策略梯度",[29,25494,25495],{},"蒙特卡洛法的解释如下：",[29,25497,25498],{},[24,25499],{"alt":64,"src":25500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[29,25502,25503],{},[24,25504],{"alt":64,"src":25505},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[29,25507,25508],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[37,25510,25511],{},[40,25512,25513],{},"方法一：reinforce算法",[29,25515,25516],{},[24,25517],{"alt":64,"src":25518},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[29,25520,25521],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[37,25523,25524],{"start":79},[40,25525,25526],{},"方法二：actor-critic算法",[29,25528,25529],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[29,25531,25532],{},"两个网络的构建：",[29,25534,25535],{},[24,25536],{"alt":64,"src":25537},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[29,25539,25540],{},"actor网路：",[29,25542,25543],{},[24,25544],{"alt":64,"src":25545},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[29,25547,25548],{},"critic网络",[29,25550,25551],{},[24,25552],{"alt":64,"src":25553},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[37,25555,25556],{"start":106},[40,25557,25558],{},"网络的训练",[29,25560,25561],{},"网络描述",[29,25563,25564],{},[24,25565],{"alt":64,"src":25566},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[29,25568,25569],{},[24,25570],{"alt":64,"src":25571},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[29,25573,25574],{},"TD算法更新梯度：",[29,25576,25577],{},[24,25578],{"alt":64,"src":25579},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[29,25581,25582],{},"策略网络更新梯度：",[29,25584,25585],{},[24,25586],{"alt":64,"src":25587},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[29,25589,25590],{},"训练整个流程的具体描述：",[29,25592,25593,25596,25597],{},[24,25594],{"alt":64,"src":25595},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[24,25598],{"alt":64,"src":25599},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":64,"searchDepth":79,"depth":79,"links":25601},[25602,25603],{"id":25378,"depth":79,"text":25379},{"id":25488,"depth":79,"text":25489},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25370,"description":64},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25610,"title":25611,"body":25612,"description":25619,"extension":1323,"meta":25669,"navigation":1325,"path":25670,"seo":25671,"stem":25672,"__hash__":25673},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25613,"toc":25665},[25614,25617,25620,25624,25627,25632,25636,25639,25644,25647,25652,25657,25660],[10,25615,25611],{"id":25616},"_5alphago算法",[29,25618,25619],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25621,25623],{"id":25622},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[29,25625,25626],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[29,25628,25629],{},[24,25630],{"alt":64,"src":25631},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25633,25635],{"id":25634},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[29,25637,25638],{},"采用强化学习的方式训练策略网络",[29,25640,25641],{},[24,25642],{"alt":64,"src":25643},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[29,25645,25646],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[29,25648,25649],{},[24,25650],{"alt":64,"src":25651},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[29,25653,25654],{},[24,25655],{"alt":64,"src":25656},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[29,25658,25659],{},"强化学习训练策略网络的总结：",[29,25661,25662],{},[24,25663],{"alt":64,"src":25664},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":64,"searchDepth":79,"depth":79,"links":25666},[25667,25668],{"id":25622,"depth":79,"text":25623},{"id":25634,"depth":79,"text":25635},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25611,"description":25619},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25675,"title":25676,"body":25677,"description":25684,"extension":1323,"meta":25687,"navigation":1325,"path":25688,"seo":25689,"stem":25690,"__hash__":25691},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25678,"toc":25685},[25679,25682],[10,25680,25676],{"id":25681},"_6价值网络",[29,25683,25684],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":64,"searchDepth":79,"depth":79,"links":25686},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25676,"description":25684},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25693,"title":25694,"body":25695,"description":25699,"extension":1323,"meta":25700,"navigation":1325,"path":25701,"seo":25702,"stem":25703,"__hash__":25704},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25696,"toc":25697},[],{"title":64,"searchDepth":79,"depth":79,"links":25698},[],"记录自己的强化学习笔记。",{"category":24617},"\u002Fwiki\u002F2025-12-04",{"title":25694,"description":25699},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25706,"title":25707,"body":25708,"description":1322,"extension":1323,"meta":25747,"navigation":1325,"path":25748,"seo":25749,"stem":25750,"__hash__":25751},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25709,"toc":25745},[25710,25713,25716,25722,25725,25731,25734,25739,25742],[10,25711,25707],{"id":25712},"_1-项目概览与官方资源",[29,25714,25715],{},"官方文档：",[29,25717,25718],{},[187,25719,25720],{"href":25720,"rel":25721},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[191],[29,25723,25724],{},"官方代码仓库：",[29,25726,25727],{},[187,25728,25729],{"href":25729,"rel":25730},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[191],[29,25732,25733],{},"复现大体流程：",[29,25735,25736],{},[24,25737],{"alt":64,"src":25738},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[29,25740,25741],{},"本教程的目标是打通这条链路：",[29,25743,25744],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":64,"searchDepth":79,"depth":79,"links":25746},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25707,"description":1322},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25753,"title":25754,"body":25755,"description":1322,"extension":1323,"meta":25871,"navigation":1325,"path":25872,"seo":25873,"stem":25874,"__hash__":25875},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25756,"toc":25866},[25757,25760,25764,25767,25774,25778,25781,25790,25800,25804,25834,25837,25863],[10,25758,25754],{"id":25759},"_2-环境准备与设备连接",[14,25761,25763],{"id":25762},"_21-系统与环境","2.1 系统与环境",[29,25765,25766],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[29,25768,25769,25770,25773],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[66,25771,25772],{},"lerobot"," 依赖。",[14,25775,25777],{"id":25776},"_22-机械臂串口识别","2.2 机械臂串口识别",[29,25779,25780],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[59,25782,25784],{"className":25059,"code":25783,"language":25061,"meta":64,"style":64},"lerobot-find-out\n",[66,25785,25786],{"__ignoreMap":64},[69,25787,25788],{"class":71,"line":72},[69,25789,25783],{"class":109},[29,25791,25792,25793,1604,25796,25799],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[66,25794,25795],{},"\u002Fdev\u002FttyACM0",[66,25797,25798],{},"\u002Fdev\u002FttyACM1","）。",[14,25801,25803],{"id":25802},"_23-串口授权","2.3 串口授权",[59,25805,25807],{"className":25059,"code":25806,"language":25061,"meta":64,"style":64},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[66,25808,25809,25823],{"__ignoreMap":64},[69,25810,25811,25814,25817,25820],{"class":71,"line":72},[69,25812,25813],{"class":109},"sudo",[69,25815,25816],{"class":1022}," chmod",[69,25818,25819],{"class":90}," 666",[69,25821,25822],{"class":1022}," \u002Fdev\u002FttyACM0\n",[69,25824,25825,25827,25829,25831],{"class":71,"line":79},[69,25826,25813],{"class":109},[69,25828,25816],{"class":1022},[69,25830,25819],{"class":90},[69,25832,25833],{"class":1022}," \u002Fdev\u002FttyACM1\n",[29,25835,25836],{},"说明：",[162,25838,25839,25844,25850,25860],{},[40,25840,25841,25843],{},[66,25842,25813],{},"：以 root 权限执行命令。",[40,25845,25846,25849],{},[66,25847,25848],{},"chmod","：修改设备节点权限。",[40,25851,25852,25855,25856,25859],{},[66,25853,25854],{},"666","：",[66,25857,25858],{},"rw-rw-rw-","，所有用户可读写。",[40,25861,25862],{},"串口号必须替换为你机器上的真实端口。",[1297,25864,25865],{},"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":64,"searchDepth":79,"depth":79,"links":25867},[25868,25869,25870],{"id":25762,"depth":79,"text":25763},{"id":25776,"depth":79,"text":25777},{"id":25802,"depth":79,"text":25803},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25754,"description":1322},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25877,"title":25878,"body":25879,"description":1322,"extension":1323,"meta":26040,"navigation":1325,"path":26041,"seo":26042,"stem":26043,"__hash__":26044},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25880,"toc":26036},[25881,25885,25889,25895,25898,25955,25958,25962,25965,26033],[10,25882,25884],{"id":25883},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25886,25888],{"id":25887},"_31-配置电机-id","3.1 配置电机 ID",[29,25890,25891,25892,25894],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[66,25893,1609],{},"，需要改成机械臂链路里不冲突的编号。",[29,25896,25897],{},"方式一：用 LeRobot 命令逐步写入。",[59,25899,25901],{"className":25059,"code":25900,"language":25061,"meta":64,"style":64},"# 主臂舵机配置 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",[66,25902,25903,25908,25916,25923,25928,25932,25937,25943,25950],{"__ignoreMap":64},[69,25904,25905],{"class":71,"line":72},[69,25906,25907],{"class":75},"# 主臂舵机配置 ID\n",[69,25909,25910,25913],{"class":71,"line":79},[69,25911,25912],{"class":109},"lerobot-setup-motors",[69,25914,25915],{"class":90}," \\\n",[69,25917,25918,25921],{"class":71,"line":106},[69,25919,25920],{"class":90},"  --teleop.type=so101_leader",[69,25922,25915],{"class":90},[69,25924,25925],{"class":71,"line":116},[69,25926,25927],{"class":90},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[69,25929,25930],{"class":71,"line":133},[69,25931,3644],{"emptyLinePlaceholder":1325},[69,25933,25934],{"class":71,"line":139},[69,25935,25936],{"class":75},"# 从臂舵机配置 ID\n",[69,25938,25939,25941],{"class":71,"line":401},[69,25940,25912],{"class":109},[69,25942,25915],{"class":90},[69,25944,25945,25948],{"class":71,"line":470},[69,25946,25947],{"class":90},"  --robot.type=so101_follower",[69,25949,25915],{"class":90},[69,25951,25952],{"class":71,"line":475},[69,25953,25954],{"class":90},"  --robot.port=\u002Fdev\u002FttyACM1\n",[29,25956,25957],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25959,25961],{"id":25960},"_32-机械臂校准","3.2 机械臂校准",[29,25963,25964],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[59,25966,25968],{"className":25059,"code":25967,"language":25061,"meta":64,"style":64},"# 主臂校准\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",[66,25969,25970,25975,25982,25988,25995,26000,26004,26009,26015,26021,26028],{"__ignoreMap":64},[69,25971,25972],{"class":71,"line":72},[69,25973,25974],{"class":75},"# 主臂校准\n",[69,25976,25977,25980],{"class":71,"line":79},[69,25978,25979],{"class":109},"lerobot-calibrate",[69,25981,25915],{"class":90},[69,25983,25984,25986],{"class":71,"line":106},[69,25985,25920],{"class":90},[69,25987,25915],{"class":90},[69,25989,25990,25993],{"class":71,"line":116},[69,25991,25992],{"class":90},"  --teleop.port=\u002Fdev\u002FttyACM0",[69,25994,25915],{"class":90},[69,25996,25997],{"class":71,"line":133},[69,25998,25999],{"class":90},"  --teleop.id=my_awesome_leader_arm\n",[69,26001,26002],{"class":71,"line":139},[69,26003,3644],{"emptyLinePlaceholder":1325},[69,26005,26006],{"class":71,"line":401},[69,26007,26008],{"class":75},"# 从臂校准\n",[69,26010,26011,26013],{"class":71,"line":470},[69,26012,25979],{"class":109},[69,26014,25915],{"class":90},[69,26016,26017,26019],{"class":71,"line":475},[69,26018,25947],{"class":90},[69,26020,25915],{"class":90},[69,26022,26023,26026],{"class":71,"line":482},[69,26024,26025],{"class":90},"  --robot.port=\u002Fdev\u002FttyACM1",[69,26027,25915],{"class":90},[69,26029,26030],{"class":71,"line":497},[69,26031,26032],{"class":90},"  --robot.id=my_awesome_follower_arm\n",[1297,26034,26035],{},"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":64,"searchDepth":79,"depth":79,"links":26037},[26038,26039],{"id":25887,"depth":79,"text":25888},{"id":25960,"depth":79,"text":25961},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25878,"description":1322},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26046,"title":26047,"body":26048,"description":1322,"extension":1323,"meta":26239,"navigation":1325,"path":26240,"seo":26241,"stem":26242,"__hash__":26243},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26049,"toc":26235},[26050,26053,26057,26104,26108,26121,26184,26187,26232],[10,26051,26047],{"id":26052},"_4-遥操与相机接入",[14,26054,26056],{"id":26055},"_41-不带相机遥操","4.1 不带相机遥操",[59,26058,26060],{"className":25059,"code":26059,"language":25061,"meta":64,"style":64},"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",[66,26061,26062,26069,26075,26081,26088,26094,26100],{"__ignoreMap":64},[69,26063,26064,26067],{"class":71,"line":72},[69,26065,26066],{"class":109},"lerobot-teleoperate",[69,26068,25915],{"class":90},[69,26070,26071,26073],{"class":71,"line":79},[69,26072,25947],{"class":90},[69,26074,25915],{"class":90},[69,26076,26077,26079],{"class":71,"line":106},[69,26078,26025],{"class":90},[69,26080,25915],{"class":90},[69,26082,26083,26086],{"class":71,"line":116},[69,26084,26085],{"class":90},"  --robot.id=my_awesome_follower_arm",[69,26087,25915],{"class":90},[69,26089,26090,26092],{"class":71,"line":133},[69,26091,25920],{"class":90},[69,26093,25915],{"class":90},[69,26095,26096,26098],{"class":71,"line":139},[69,26097,25992],{"class":90},[69,26099,25915],{"class":90},[69,26101,26102],{"class":71,"line":401},[69,26103,25999],{"class":90},[14,26105,26107],{"id":26106},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[59,26109,26111],{"className":25059,"code":26110,"language":25061,"meta":64,"style":64},"lerobot-find-cameras opencv\n",[66,26112,26113],{"__ignoreMap":64},[69,26114,26115,26118],{"class":71,"line":72},[69,26116,26117],{"class":109},"lerobot-find-cameras",[69,26119,26120],{"class":1022}," opencv\n",[59,26122,26124],{"className":25059,"code":26123,"language":25061,"meta":64,"style":64},"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",[66,26125,26126,26132,26138,26144,26150,26160,26166,26172,26179],{"__ignoreMap":64},[69,26127,26128,26130],{"class":71,"line":72},[69,26129,26066],{"class":109},[69,26131,25915],{"class":90},[69,26133,26134,26136],{"class":71,"line":79},[69,26135,25947],{"class":90},[69,26137,25915],{"class":90},[69,26139,26140,26142],{"class":71,"line":106},[69,26141,26025],{"class":90},[69,26143,25915],{"class":90},[69,26145,26146,26148],{"class":71,"line":116},[69,26147,26085],{"class":90},[69,26149,25915],{"class":90},[69,26151,26152,26155,26158],{"class":71,"line":133},[69,26153,26154],{"class":90},"  --robot.cameras=",[69,26156,26157],{"class":1022},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[69,26159,25915],{"class":90},[69,26161,26162,26164],{"class":71,"line":139},[69,26163,25920],{"class":90},[69,26165,25915],{"class":90},[69,26167,26168,26170],{"class":71,"line":401},[69,26169,25992],{"class":90},[69,26171,25915],{"class":90},[69,26173,26174,26177],{"class":71,"line":470},[69,26175,26176],{"class":90},"  --teleop.id=my_awesome_leader_arm",[69,26178,25915],{"class":90},[69,26180,26181],{"class":71,"line":475},[69,26182,26183],{"class":90},"  --display_data=true\n",[29,26185,26186],{},"相机参数说明：",[162,26188,26189,26195,26201,26210,26220,26226],{},[40,26190,26191,26194],{},[66,26192,26193],{},"front","：相机名称。",[40,26196,26197,26200],{},[66,26198,26199],{},"type: opencv","：相机驱动类型。",[40,26202,26203,26206,26207,25799],{},[66,26204,26205],{},"index_or_path","：设备编号或设备路径（如 ",[66,26208,26209],{},"\u002Fdev\u002Fvideo4",[40,26211,26212,26215,26216,26219],{},[66,26213,26214],{},"width"," \u002F ",[66,26217,26218],{},"height","：图像分辨率。",[40,26221,26222,26225],{},[66,26223,26224],{},"fps","：采样帧率。",[40,26227,26228,26231],{},[66,26229,26230],{},"--display_data=true","：启用实时可视化。",[1297,26233,26234],{},"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":64,"searchDepth":79,"depth":79,"links":26236},[26237,26238],{"id":26055,"depth":79,"text":26056},{"id":26106,"depth":79,"text":26107},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26047,"description":1322},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26245,"title":26246,"body":26247,"description":1322,"extension":1323,"meta":26419,"navigation":1325,"path":26420,"seo":26421,"stem":26422,"__hash__":26423},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26248,"toc":26414},[26249,26253,26257,26262,26267,26270,26312,26318,26322,26371,26376,26380,26383,26391,26396,26401,26406,26411],[10,26250,26252],{"id":26251},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26254,26256],{"id":26255},"_51-生成访问令牌","5.1 生成访问令牌",[29,26258,26259],{},[24,26260],{"alt":64,"src":26261},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[29,26263,26264],{},[24,26265],{"alt":64,"src":26266},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[29,26268,26269],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[59,26271,26273],{"className":25059,"code":26272,"language":25061,"meta":64,"style":64},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[66,26274,26275,26288],{"__ignoreMap":64},[69,26276,26277,26280,26283,26285],{"class":71,"line":72},[69,26278,26279],{"class":82},"export",[69,26281,26282],{"class":86}," HF_TOKEN",[69,26284,1019],{"class":82},[69,26286,26287],{"class":1022},"\"your_huggingface_token\"\n",[69,26289,26290,26293,26296,26299,26302,26304,26307,26309],{"class":71,"line":79},[69,26291,26292],{"class":109},"hf",[69,26294,26295],{"class":1022}," auth",[69,26297,26298],{"class":1022}," login",[69,26300,26301],{"class":90}," --token",[69,26303,10966],{"class":1022},[69,26305,26306],{"class":86},"$HF_TOKEN",[69,26308,1642],{"class":1022},[69,26310,26311],{"class":90}," --add-to-git-credential\n",[29,26313,26314,26317],{},[66,26315,26316],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26319,26321],{"id":26320},"_52-验证登录","5.2 验证登录",[59,26323,26325],{"className":25059,"code":26324,"language":25061,"meta":64,"style":64},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[66,26326,26327,26358],{"__ignoreMap":64},[69,26328,26329,26332,26334,26337,26339,26341,26344,26347,26350,26353,26356],{"class":71,"line":72},[69,26330,26331],{"class":86},"HF_USER",[69,26333,1019],{"class":82},[69,26335,26336],{"class":86},"$(",[69,26338,26292],{"class":109},[69,26340,26295],{"class":1022},[69,26342,26343],{"class":1022}," whoami",[69,26345,26346],{"class":82}," |",[69,26348,26349],{"class":109}," head",[69,26351,26352],{"class":90}," -n",[69,26354,26355],{"class":90}," 1",[69,26357,1404],{"class":86},[69,26359,26360,26363,26365,26368],{"class":71,"line":79},[69,26361,26362],{"class":90},"echo",[69,26364,10966],{"class":1022},[69,26366,26367],{"class":86},"$HF_USER",[69,26369,26370],{"class":1022},"\"\n",[29,26372,26373],{},[24,26374],{"alt":64,"src":26375},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26377,26379],{"id":26378},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[29,26381,26382],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[162,26384,26385,26388],{},[40,26386,26387],{},"Dataset Repo（用于上传演示数据）",[40,26389,26390],{},"Model Repo（用于上传训练后的 ACT 权重）",[29,26392,26393],{},[24,26394],{"alt":64,"src":26395},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[29,26397,26398],{},[24,26399],{"alt":64,"src":26400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[29,26402,26403],{},[24,26404],{"alt":64,"src":26405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[29,26407,26408],{},[24,26409],{"alt":64,"src":26410},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1297,26412,26413],{},"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":64,"searchDepth":79,"depth":79,"links":26415},[26416,26417,26418],{"id":26255,"depth":79,"text":26256},{"id":26320,"depth":79,"text":26321},{"id":26378,"depth":79,"text":26379},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26246,"description":1322},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26425,"title":26426,"body":26427,"description":1322,"extension":1323,"meta":26624,"navigation":1325,"path":26625,"seo":26626,"stem":26627,"__hash__":26628},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26428,"toc":26619},[26429,26433,26437,26533,26541,26546,26550,26566,26569,26573,26616],[10,26430,26432],{"id":26431},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26434,26436],{"id":26435},"_61-录制示教数据","6.1 录制示教数据",[59,26438,26440],{"className":25059,"code":26439,"language":25061,"meta":64,"style":64},"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",[66,26441,26442,26449,26455,26461,26467,26476,26482,26488,26494,26501,26511,26518,26528],{"__ignoreMap":64},[69,26443,26444,26447],{"class":71,"line":72},[69,26445,26446],{"class":109},"lerobot-record",[69,26448,25915],{"class":90},[69,26450,26451,26453],{"class":71,"line":79},[69,26452,25947],{"class":90},[69,26454,25915],{"class":90},[69,26456,26457,26459],{"class":71,"line":106},[69,26458,26025],{"class":90},[69,26460,25915],{"class":90},[69,26462,26463,26465],{"class":71,"line":116},[69,26464,26085],{"class":90},[69,26466,25915],{"class":90},[69,26468,26469,26471,26474],{"class":71,"line":133},[69,26470,26154],{"class":90},[69,26472,26473],{"class":1022},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[69,26475,25915],{"class":90},[69,26477,26478,26480],{"class":71,"line":139},[69,26479,25920],{"class":90},[69,26481,25915],{"class":90},[69,26483,26484,26486],{"class":71,"line":401},[69,26485,25992],{"class":90},[69,26487,25915],{"class":90},[69,26489,26490,26492],{"class":71,"line":470},[69,26491,26176],{"class":90},[69,26493,25915],{"class":90},[69,26495,26496,26499],{"class":71,"line":475},[69,26497,26498],{"class":90},"  --display_data=true",[69,26500,25915],{"class":90},[69,26502,26503,26506,26509],{"class":71,"line":482},[69,26504,26505],{"class":90},"  --dataset.repo_id=",[69,26507,26508],{"class":1022},"\"Embodied-AI-6\u002Fso101_test\"",[69,26510,25915],{"class":90},[69,26512,26513,26516],{"class":71,"line":497},[69,26514,26515],{"class":90},"  --dataset.num_episodes=10",[69,26517,25915],{"class":90},[69,26519,26520,26523,26526],{"class":71,"line":502},[69,26521,26522],{"class":90},"  --dataset.single_task=",[69,26524,26525],{"class":1022},"\"Grab the green cube\"",[69,26527,25915],{"class":90},[69,26529,26530],{"class":71,"line":509},[69,26531,26532],{"class":90},"  --resume=true\n",[162,26534,26535],{},[40,26536,26537,26540],{},[66,26538,26539],{},"--resume=true","：已有同一数据集时继续追加 episode。",[29,26542,26543],{},[24,26544],{"alt":64,"src":26545},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26547,26549],{"id":26548},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[59,26551,26553],{"className":25059,"code":26552,"language":25061,"meta":64,"style":64},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[66,26554,26555],{"__ignoreMap":64},[69,26556,26557,26560,26563],{"class":71,"line":72},[69,26558,26559],{"class":109},"rm",[69,26561,26562],{"class":90}," -rf",[69,26564,26565],{"class":1022}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[29,26567,26568],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26570,26572],{"id":26571},"_63-回放指定-episode","6.3 回放指定 episode",[59,26574,26576],{"className":25059,"code":26575,"language":25061,"meta":64,"style":64},"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",[66,26577,26578,26585,26591,26597,26603,26611],{"__ignoreMap":64},[69,26579,26580,26583],{"class":71,"line":72},[69,26581,26582],{"class":109},"lerobot-replay",[69,26584,25915],{"class":90},[69,26586,26587,26589],{"class":71,"line":79},[69,26588,25947],{"class":90},[69,26590,25915],{"class":90},[69,26592,26593,26595],{"class":71,"line":106},[69,26594,26025],{"class":90},[69,26596,25915],{"class":90},[69,26598,26599,26601],{"class":71,"line":116},[69,26600,26085],{"class":90},[69,26602,25915],{"class":90},[69,26604,26605,26607,26609],{"class":71,"line":133},[69,26606,26505],{"class":90},[69,26608,26508],{"class":1022},[69,26610,25915],{"class":90},[69,26612,26613],{"class":71,"line":139},[69,26614,26615],{"class":90},"  --dataset.episode=0\n",[1297,26617,26618],{},"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":64,"searchDepth":79,"depth":79,"links":26620},[26621,26622,26623],{"id":26435,"depth":79,"text":26436},{"id":26548,"depth":79,"text":26549},{"id":26571,"depth":79,"text":26572},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26426,"description":1322},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26630,"title":26631,"body":26632,"description":1322,"extension":1323,"meta":26760,"navigation":1325,"path":26761,"seo":26762,"stem":26763,"__hash__":26764},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26633,"toc":26758},[26634,26638,26701,26704,26751,26756],[10,26635,26637],{"id":26636},"_7-act-模型训练","7. ACT 模型训练",[59,26639,26641],{"className":25059,"code":26640,"language":25061,"meta":64,"style":64},"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",[66,26642,26643,26650,26658,26665,26672,26679,26686,26693],{"__ignoreMap":64},[69,26644,26645,26648],{"class":71,"line":72},[69,26646,26647],{"class":109},"lerobot-train",[69,26649,25915],{"class":90},[69,26651,26652,26654,26656],{"class":71,"line":79},[69,26653,26505],{"class":90},[69,26655,26508],{"class":1022},[69,26657,25915],{"class":90},[69,26659,26660,26663],{"class":71,"line":106},[69,26661,26662],{"class":90},"  --policy.type=act",[69,26664,25915],{"class":90},[69,26666,26667,26670],{"class":71,"line":116},[69,26668,26669],{"class":90},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[69,26671,25915],{"class":90},[69,26673,26674,26677],{"class":71,"line":133},[69,26675,26676],{"class":90},"  --job_name=act_so101_test",[69,26678,25915],{"class":90},[69,26680,26681,26684],{"class":71,"line":139},[69,26682,26683],{"class":90},"  --policy.device=cuda",[69,26685,25915],{"class":90},[69,26687,26688,26691],{"class":71,"line":401},[69,26689,26690],{"class":90},"  --wandb.enable=false",[69,26692,25915],{"class":90},[69,26694,26695,26698],{"class":71,"line":470},[69,26696,26697],{"class":90},"  --policy.repo_id=",[69,26699,26700],{"class":1022},"\"Embodied-AI-6\u002Flerobot_new\"\n",[29,26702,26703],{},"参数说明：",[162,26705,26706,26712,26718,26724,26730,26739,26745],{},[40,26707,26708,26711],{},[66,26709,26710],{},"--dataset.repo_id","：训练数据集仓库。",[40,26713,26714,26717],{},[66,26715,26716],{},"--policy.type=act","：策略模型类型为 ACT。",[40,26719,26720,26723],{},[66,26721,26722],{},"--output_dir","：本地训练输出目录。",[40,26725,26726,26729],{},[66,26727,26728],{},"--job_name","：训练任务名称。",[40,26731,26732,26735,26736,25799],{},[66,26733,26734],{},"--policy.device","：训练设备（如 ",[66,26737,26738],{},"cuda",[40,26740,26741,26744],{},[66,26742,26743],{},"--wandb.enable","：是否启用 WandB 可视化。",[40,26746,26747,26750],{},[66,26748,26749],{},"--policy.repo_id","：训练后模型推送目标仓库。",[29,26752,26753],{},[24,26754],{"alt":64,"src":26755},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1297,26757,26618],{},{"title":64,"searchDepth":79,"depth":79,"links":26759},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26631,"description":1322},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26766,"title":26767,"body":26768,"description":1322,"extension":1323,"meta":26855,"navigation":1325,"path":26856,"seo":26857,"stem":26858,"__hash__":26859},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26769,"toc":26853},[26770,26773,26776,26843,26851],[10,26771,26767],{"id":26772},"_8-策略部署与自动采集",[29,26774,26775],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[59,26777,26779],{"className":25059,"code":26778,"language":25061,"meta":64,"style":64},"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",[66,26780,26781,26787,26793,26799,26807,26813,26820,26828,26836],{"__ignoreMap":64},[69,26782,26783,26785],{"class":71,"line":72},[69,26784,26446],{"class":109},[69,26786,25915],{"class":90},[69,26788,26789,26791],{"class":71,"line":79},[69,26790,25947],{"class":90},[69,26792,25915],{"class":90},[69,26794,26795,26797],{"class":71,"line":106},[69,26796,26025],{"class":90},[69,26798,25915],{"class":90},[69,26800,26801,26803,26805],{"class":71,"line":116},[69,26802,26154],{"class":90},[69,26804,26473],{"class":1022},[69,26806,25915],{"class":90},[69,26808,26809,26811],{"class":71,"line":133},[69,26810,26085],{"class":90},[69,26812,25915],{"class":90},[69,26814,26815,26818],{"class":71,"line":139},[69,26816,26817],{"class":90},"  --display_data=false",[69,26819,25915],{"class":90},[69,26821,26822,26824,26826],{"class":71,"line":401},[69,26823,26505],{"class":90},[69,26825,26508],{"class":1022},[69,26827,25915],{"class":90},[69,26829,26830,26832,26834],{"class":71,"line":470},[69,26831,26522],{"class":90},[69,26833,26525],{"class":1022},[69,26835,25915],{"class":90},[69,26837,26838,26841],{"class":71,"line":475},[69,26839,26840],{"class":90},"  --policy.path=",[69,26842,26700],{"class":1022},[162,26844,26845],{},[40,26846,26847,26850],{},[66,26848,26849],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1297,26852,26618],{},{"title":64,"searchDepth":79,"depth":79,"links":26854},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26767,"description":1322},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26861,"title":26862,"body":26863,"description":1322,"extension":1323,"meta":26892,"navigation":1325,"path":26893,"seo":26894,"stem":26895,"__hash__":26896},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26864,"toc":26890},[26865,26869,26872,26878,26881,26887],[10,26866,26868],{"id":26867},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[29,26870,26871],{},"项目地址：",[29,26873,26874],{},[187,26875,26876],{"href":26876,"rel":26877},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[191],[29,26879,26880],{},"参考教程：",[29,26882,26883],{},[187,26884,26885],{"href":26885,"rel":26886},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[191],[29,26888,26889],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":64,"searchDepth":79,"depth":79,"links":26891},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26862,"description":1322},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26898,"title":26899,"body":26900,"description":26904,"extension":1323,"meta":26905,"navigation":1325,"path":26906,"seo":26907,"stem":26908,"__hash__":26909},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26901,"toc":26902},[],{"title":64,"searchDepth":79,"depth":79,"links":26903},[],"act复现",{"category":24617},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26899,"description":26904},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26911,"title":26912,"body":26913,"description":64,"extension":1323,"meta":27215,"navigation":1325,"path":27216,"seo":27217,"stem":27218,"__hash__":27219},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26914,"toc":27207},[26915,26918,26922,26932,26939,26946,26949,26956,26959,26962,26966,26978,26982,27028,27031,27034,27037,27040,27043,27047,27085,27091,27095,27149,27154,27157,27160,27165,27168,27173,27176,27179,27183,27186,27189,27193],[10,26916,26912],{"id":26917},"_1简介",[19,26919,26921],{"id":26920},"_11什么是-docker","1.1什么是 Docker？",[29,26923,26924,26925,26928,26929],{},"Docker 是一个开源的 ",[195,26926,26927],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[195,26930,26931],{},"一次构建，到处运行。",[29,26933,26934,26935,26938],{},"“ ",[195,26936,26937],{},"一次构建，到处运行"," ”也就是说：",[37,26940,26941],{},[40,26942,26943],{},[195,26944,26945],{},"之前：",[29,26947,26948],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[37,26950,26951],{},[40,26952,26953],{},[195,26954,26955],{},"使用docker后：",[29,26957,26958],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[29,26960,26961],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[19,26963,26965],{"id":26964},"_12它是怎么工作的","1.2.它是怎么工作的？",[162,26967,26968,26971],{},[40,26969,26970],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[40,26972,26973,26974,26977],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[195,26975,26976],{},"无论在哪运行都一样稳定"," 。",[19,26979,26981],{"id":26980},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1530,26983,26984,26994],{},[1533,26985,26986],{},[1536,26987,26988,26991],{},[1539,26989,26990],{"align":1202},"概念",[1539,26992,26993],{"align":1202},"解释",[1576,26995,26996,27004,27012,27020],{},[1536,26997,26998,27001],{},[1581,26999,27000],{"align":1202},"镜像",[1581,27002,27003],{"align":1202},"Image，运行容器的模板，像是一个应用快照",[1536,27005,27006,27009],{},[1581,27007,27008],{"align":1202},"容器",[1581,27010,27011],{"align":1202},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1536,27013,27014,27017],{},[1581,27015,27016],{"align":1202},"Dockerfile",[1581,27018,27019],{"align":1202},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1536,27021,27022,27025],{},[1581,27023,27024],{"align":1202},"仓库",[1581,27026,27027],{"align":1202},"Registry，存放镜像的地方，比如 Docker Hub",[29,27029,27030],{},"抽象化理解:",[29,27032,27033],{},"Docker镜像≈C++类",[29,27035,27036],{},"Docker容器≈C++类实例(即对象)",[29,27038,27039],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[29,27041,27042],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[19,27044,27046],{"id":27045},"_14类比理解","1.4.类比理解",[1530,27048,27049,27059],{},[1533,27050,27051],{},[1536,27052,27053,27056],{},[1539,27054,27055],{"align":1202},"传统部署",[1539,27057,27058],{"align":1202},"Docker部署",[1576,27060,27061,27069,27077],{},[1536,27062,27063,27066],{},[1581,27064,27065],{"align":1202},"手动安装依赖、调试版本不一致问题",[1581,27067,27068],{"align":1202},"一次打包环境和代码",[1536,27070,27071,27074],{},[1581,27072,27073],{"align":1202},"程序“裸奔”跑在系统上",[1581,27075,27076],{"align":1202},"程序“穿着容器”隔离运行",[1536,27078,27079,27082],{},[1581,27080,27081],{"align":1202},"容易“在我电脑上能跑”",[1581,27083,27084],{"align":1202},"保证“无论在哪都能跑”",[29,27086,27087,27088],{},"就像快递包裹： ",[195,27089,27090],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[19,27092,27094],{"id":27093},"_15docker-的核心优势","1.5.Docker 的核心优势",[1530,27096,27097,27107],{},[1533,27098,27099],{},[1536,27100,27101,27104],{},[1539,27102,27103],{"align":1202},"优势",[1539,27105,27106],{"align":1202},"说明",[1576,27108,27109,27117,27125,27133,27141],{},[1536,27110,27111,27114],{},[1581,27112,27113],{"align":1202},"轻量级",[1581,27115,27116],{"align":1202},"基于系统内核共享，启动速度快，占资源少",[1536,27118,27119,27122],{},[1581,27120,27121],{"align":1202},"跨平台",[1581,27123,27124],{"align":1202},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1536,27126,27127,27130],{},[1581,27128,27129],{"align":1202},"易于迁移部署",[1581,27131,27132],{"align":1202},"应用和环境一起封装，不怕依赖不一致",[1536,27134,27135,27138],{},[1581,27136,27137],{"align":1202},"易于版本控制",[1581,27139,27140],{"align":1202},"镜像版本可控，支持回滚",[1536,27142,27143,27146],{},[1581,27144,27145],{"align":1202},"生态丰富",[1581,27147,27148],{"align":1202},"Docker Hub 上有成千上万的现成镜像可用",[37,27150,27151],{},[40,27152,27153],{},"在Linux上可以几乎实现无性能损失。",[29,27155,27156],{},"docker里的发行版和本机共用Linux内核。",[29,27158,27159],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[37,27161,27162],{},[40,27163,27164],{},"可以快速部署在绝大多数Linux发行版",[29,27166,27167],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[37,27169,27170],{},[40,27171,27172],{},"配置环境简单",[29,27174,27175],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[29,27177,27178],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[37,27180,27181],{},[40,27182,27145],{},[29,27184,27185],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[29,27187,27188],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[19,27190,27192],{"id":27191},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[162,27194,27195,27198,27201,27204],{},[40,27196,27197],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[40,27199,27200],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[40,27202,27203],{},"微服务架构：每个服务一个容器，灵活组合",[40,27205,27206],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":64,"searchDepth":79,"depth":79,"links":27208},[27209,27210,27211,27212,27213,27214],{"id":26920,"depth":106,"text":26921},{"id":26964,"depth":106,"text":26965},{"id":26980,"depth":106,"text":26981},{"id":27045,"depth":106,"text":27046},{"id":27093,"depth":106,"text":27094},{"id":27191,"depth":106,"text":27192},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26912,"description":64},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27221,"title":27222,"body":27223,"description":64,"extension":1323,"meta":27955,"navigation":1325,"path":27956,"seo":27957,"stem":27958,"__hash__":27959},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27224,"toc":27950},[27225,27228,27232,27235,27238,27244,27250,27254,27263,27266,27322,27325,27376,27379,27462,27465,27502,27506,27517,27530,27537,27540,27620,27623,27673,27676,27699,27703,27710,27713,27729,27735,27738,27754,27760,27763,27779,27793,27799,27819,27825,27828,27840,27846,27849,27863,27869,27872,27892,27897,27900,27903,27907,27910,27913,27916,27923,27926,27929,27932,27937,27942,27947],[10,27226,27222],{"id":27227},"_2安装docker",[19,27229,27231],{"id":27230},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[29,27233,27234],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[29,27236,27237],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[29,27239,27240],{},[187,27241,27242],{"href":27242,"rel":27243},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[191],[29,27245,27246],{},[187,27247,27248],{"href":27248,"rel":27249},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[191],[23237,27251,27253],{"id":27252},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[29,27255,27256,27257,27262],{},"以下内容根据 ",[187,27258,27261],{"href":27259,"rel":27260},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[191],"官方文档"," 修改而来。",[29,27264,27265],{},"如果你过去安装过 docker，先删掉：",[59,27267,27269],{"className":25059,"code":27268,"language":25061,"meta":64,"style":64},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[66,27270,27271],{"__ignoreMap":64},[69,27272,27273,27275,27278,27281,27284,27287,27290,27293,27296,27299,27302,27304,27307,27310,27313,27316,27319],{"class":71,"line":72},[69,27274,4269],{"class":82},[69,27276,27277],{"class":86}," pkg ",[69,27279,27280],{"class":82},"in",[69,27282,27283],{"class":1022}," docker.io",[69,27285,27286],{"class":1022}," docker-doc",[69,27288,27289],{"class":1022}," docker-compose",[69,27291,27292],{"class":1022}," docker-compose-v2",[69,27294,27295],{"class":1022}," podman-docker",[69,27297,27298],{"class":1022}," containerd",[69,27300,27301],{"class":1022}," runc",[69,27303,430],{"class":86},[69,27305,27306],{"class":82},"do",[69,27308,27309],{"class":109}," sudo",[69,27311,27312],{"class":1022}," apt-get",[69,27314,27315],{"class":1022}," remove",[69,27317,27318],{"class":86}," $pkg; ",[69,27320,27321],{"class":82},"done\n",[29,27323,27324],{},"首先安装依赖和GPG：",[59,27326,27330],{"className":27327,"code":27328,"language":27329,"meta":64,"style":64},"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",[66,27331,27332,27337,27342,27347,27352,27357,27362,27366,27371],{"__ignoreMap":64},[69,27333,27334],{"class":71,"line":72},[69,27335,27336],{},"# Add Docker's official GPG key:\n",[69,27338,27339],{"class":71,"line":79},[69,27340,27341],{},"sudo apt-get update\n",[69,27343,27344],{"class":71,"line":106},[69,27345,27346],{},"sudo apt-get install ca-certificates curl\n",[69,27348,27349],{"class":71,"line":116},[69,27350,27351],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[69,27353,27354],{"class":71,"line":133},[69,27355,27356],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[69,27358,27359],{"class":71,"line":139},[69,27360,27361],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[69,27363,27364],{"class":71,"line":401},[69,27365,3644],{"emptyLinePlaceholder":1325},[69,27367,27368],{"class":71,"line":470},[69,27369,27370],{},"# 如果上面这行报错就弄下面这行\n",[69,27372,27373],{"class":71,"line":475},[69,27374,27375],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[29,27377,27378],{},"信任 Docker 的 GPG 公钥并添加仓库：",[59,27380,27382],{"className":25059,"code":27381,"language":25061,"meta":64,"style":64},"# 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",[66,27383,27384,27389,27395,27412,27445],{"__ignoreMap":64},[69,27385,27386],{"class":71,"line":72},[69,27387,27388],{"class":75},"# Add the repository to Apt sources:\n",[69,27390,27391,27393],{"class":71,"line":79},[69,27392,26362],{"class":90},[69,27394,25915],{"class":90},[69,27396,27397,27400,27403,27406,27409],{"class":71,"line":106},[69,27398,27399],{"class":1022},"  \"deb [arch=$(",[69,27401,27402],{"class":109},"dpkg",[69,27404,27405],{"class":90}," --print-architecture",[69,27407,27408],{"class":1022},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[69,27410,27411],{"class":90},"\\\n",[69,27413,27414,27417,27419,27421,27424,27427,27429,27431,27434,27436,27438,27441,27443],{"class":71,"line":116},[69,27415,27416],{"class":1022},"  \"",[69,27418,26336],{"class":86},[69,27420,1946],{"class":90},[69,27422,27423],{"class":1022}," \u002Fetc\u002Fos-release",[69,27425,27426],{"class":86}," && ",[69,27428,26362],{"class":90},[69,27430,10966],{"class":1022},[69,27432,27433],{"class":86},"$VERSION_CODENAME",[69,27435,1642],{"class":1022},[69,27437,1818],{"class":86},[69,27439,27440],{"class":1022},"\" stable\"",[69,27442,26346],{"class":82},[69,27444,25915],{"class":90},[69,27446,27447,27450,27453,27456,27459],{"class":71,"line":133},[69,27448,27449],{"class":109},"  sudo",[69,27451,27452],{"class":1022}," tee",[69,27454,27455],{"class":1022}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[69,27457,27458],{"class":82}," >",[69,27460,27461],{"class":1022}," \u002Fdev\u002Fnull\n",[29,27463,27464],{},"最后安装",[59,27466,27468],{"className":25059,"code":27467,"language":25061,"meta":64,"style":64},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[66,27469,27470,27479],{"__ignoreMap":64},[69,27471,27472,27474,27476],{"class":71,"line":72},[69,27473,25813],{"class":109},[69,27475,27312],{"class":1022},[69,27477,27478],{"class":1022}," update\n",[69,27480,27481,27483,27485,27487,27490,27493,27496,27499],{"class":71,"line":79},[69,27482,25813],{"class":109},[69,27484,27312],{"class":1022},[69,27486,25071],{"class":1022},[69,27488,27489],{"class":1022}," docker-ce",[69,27491,27492],{"class":1022}," docker-ce-cli",[69,27494,27495],{"class":1022}," containerd.io",[69,27497,27498],{"class":1022}," docker-buildx-plugin",[69,27500,27501],{"class":1022}," docker-compose-plugin\n",[23237,27503,27505],{"id":27504},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[29,27507,27508,27509,27512,27513,27516],{},"查看自己自己包管理工具版本（dnf是 ",[195,27510,27511],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[195,27514,27515],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[59,27518,27520],{"className":25059,"code":27519,"language":25061,"meta":64,"style":64},"dnf --version\n",[66,27521,27522],{"__ignoreMap":64},[69,27523,27524,27527],{"class":71,"line":72},[69,27525,27526],{"class":109},"dnf",[69,27528,27529],{"class":90}," --version\n",[29,27531,27256,27532,27536],{},[187,27533,27261],{"href":27534,"rel":27535},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[191]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[29,27538,27539],{},"如果你之前安装过 docker，请先删掉",[59,27541,27543],{"className":25059,"code":27542,"language":25061,"meta":64,"style":64},"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",[66,27544,27545,27559,27566,27573,27580,27587,27594,27601,27608,27615],{"__ignoreMap":64},[69,27546,27547,27549,27552,27554,27557],{"class":71,"line":72},[69,27548,25813],{"class":109},[69,27550,27551],{"class":1022}," dnf",[69,27553,27315],{"class":1022},[69,27555,27556],{"class":1022}," docker",[69,27558,25915],{"class":90},[69,27560,27561,27564],{"class":71,"line":79},[69,27562,27563],{"class":1022},"                  docker-client",[69,27565,25915],{"class":90},[69,27567,27568,27571],{"class":71,"line":106},[69,27569,27570],{"class":1022},"                  docker-client-latest",[69,27572,25915],{"class":90},[69,27574,27575,27578],{"class":71,"line":116},[69,27576,27577],{"class":1022},"                  docker-common",[69,27579,25915],{"class":90},[69,27581,27582,27585],{"class":71,"line":133},[69,27583,27584],{"class":1022},"                  docker-latest",[69,27586,25915],{"class":90},[69,27588,27589,27592],{"class":71,"line":139},[69,27590,27591],{"class":1022},"                  docker-latest-logrotate",[69,27593,25915],{"class":90},[69,27595,27596,27599],{"class":71,"line":401},[69,27597,27598],{"class":1022},"                  docker-logrotate",[69,27600,25915],{"class":90},[69,27602,27603,27606],{"class":71,"line":470},[69,27604,27605],{"class":1022},"                  docker-selinux",[69,27607,25915],{"class":90},[69,27609,27610,27613],{"class":71,"line":475},[69,27611,27612],{"class":1022},"                  docker-engine-selinux",[69,27614,25915],{"class":90},[69,27616,27617],{"class":71,"line":482},[69,27618,27619],{"class":1022},"                  docker-engine\n",[29,27621,27622],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[59,27624,27626],{"className":25059,"code":27625,"language":25061,"meta":64,"style":64},"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",[66,27627,27628,27642,27657],{"__ignoreMap":64},[69,27629,27630,27632,27634,27637,27639],{"class":71,"line":72},[69,27631,25813],{"class":109},[69,27633,27551],{"class":1022},[69,27635,27636],{"class":90}," -y",[69,27638,25071],{"class":1022},[69,27640,27641],{"class":1022}," dnf-plugins-core\n",[69,27643,27644,27646,27648,27651,27654],{"class":71,"line":79},[69,27645,25813],{"class":109},[69,27647,27551],{"class":1022},[69,27649,27650],{"class":1022}," config-manager",[69,27652,27653],{"class":1022}," addrepo",[69,27655,27656],{"class":90}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[69,27658,27659,27661,27664,27667,27670],{"class":71,"line":106},[69,27660,25813],{"class":109},[69,27662,27663],{"class":1022}," sed",[69,27665,27666],{"class":90}," -i",[69,27668,27669],{"class":1022}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[69,27671,27672],{"class":1022}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[29,27674,27675],{},"最后安装：",[59,27677,27679],{"className":25059,"code":27678,"language":25061,"meta":64,"style":64},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[66,27680,27681],{"__ignoreMap":64},[69,27682,27683,27685,27687,27689,27691,27693,27695,27697],{"class":71,"line":72},[69,27684,25813],{"class":109},[69,27686,27551],{"class":1022},[69,27688,25071],{"class":1022},[69,27690,27489],{"class":1022},[69,27692,27492],{"class":1022},[69,27694,27495],{"class":1022},[69,27696,27498],{"class":1022},[69,27698,27501],{"class":1022},[19,27700,27702],{"id":27701},"_22配置环境","2.2.配置环境",[23237,27704,27706,27709],{"id":27705},"_221检查-docker-服务状态",[195,27707,27708],{},"2.2.1.检查 Docker 服务状态"," ：",[29,27711,27712],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[59,27714,27716],{"className":25059,"code":27715,"language":25061,"meta":64,"style":64},"systemctl status docker\n",[66,27717,27718],{"__ignoreMap":64},[69,27719,27720,27723,27726],{"class":71,"line":72},[69,27721,27722],{"class":109},"systemctl",[69,27724,27725],{"class":1022}," status",[69,27727,27728],{"class":1022}," docker\n",[23237,27730,27732,27709],{"id":27731},"_222启动-docker-服务",[195,27733,27734],{},"2.2.2.启动 Docker 服务",[29,27736,27737],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[59,27739,27741],{"className":25059,"code":27740,"language":25061,"meta":64,"style":64},"sudo systemctl start docker\n",[66,27742,27743],{"__ignoreMap":64},[69,27744,27745,27747,27750,27752],{"class":71,"line":72},[69,27746,25813],{"class":109},[69,27748,27749],{"class":1022}," systemctl",[69,27751,5428],{"class":1022},[69,27753,27728],{"class":1022},[23237,27755,27757,27709],{"id":27756},"_223设置-docker-开机自启",[195,27758,27759],{},"2.2.3.设置 Docker 开机自启",[29,27761,27762],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[59,27764,27766],{"className":25059,"code":27765,"language":25061,"meta":64,"style":64},"sudo systemctl enable docker\n",[66,27767,27768],{"__ignoreMap":64},[69,27769,27770,27772,27774,27777],{"class":71,"line":72},[69,27771,25813],{"class":109},[69,27773,27749],{"class":1022},[69,27775,27776],{"class":1022}," enable",[69,27778,27728],{"class":1022},[23237,27780,27782,15036,27785,15036,27790,27709],{"id":27781},"_224将用户添加到-docker-组",[195,27783,27784],{},"2.2.4.将用户添加到",[195,27786,27787],{},[66,27788,27789],{},"docker",[195,27791,27792],{},"组",[29,27794,27795,27796,27798],{},"使用以下命令将当前用户添加到 ",[66,27797,27789],{}," 组：",[59,27800,27802],{"className":25059,"code":27801,"language":25061,"meta":64,"style":64},"sudo usermod -aG docker $USER\n",[66,27803,27804],{"__ignoreMap":64},[69,27805,27806,27808,27811,27814,27816],{"class":71,"line":72},[69,27807,25813],{"class":109},[69,27809,27810],{"class":1022}," usermod",[69,27812,27813],{"class":90}," -aG",[69,27815,27556],{"class":1022},[69,27817,27818],{"class":86}," $USER\n",[23237,27820,27822,27709],{"id":27821},"_225退出并重新登录",[195,27823,27824],{},"2.2.5.退出并重新登录",[29,27826,27827],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[59,27829,27831],{"className":25059,"code":27830,"language":25061,"meta":64,"style":64},"newgrp docker\n",[66,27832,27833],{"__ignoreMap":64},[69,27834,27835,27838],{"class":71,"line":72},[69,27836,27837],{"class":109},"newgrp",[69,27839,27728],{"class":1022},[23237,27841,27843,27709],{"id":27842},"_226重新启动-docker-服务如果需要",[195,27844,27845],{},"2.2.6.重新启动 Docker 服务（如果需要）",[29,27847,27848],{},"确保 Docker 服务正在运行，可以使用以下命令：",[59,27850,27851],{"className":25059,"code":27740,"language":25061,"meta":64,"style":64},[66,27852,27853],{"__ignoreMap":64},[69,27854,27855,27857,27859,27861],{"class":71,"line":72},[69,27856,25813],{"class":109},[69,27858,27749],{"class":1022},[69,27860,5428],{"class":1022},[69,27862,27728],{"class":1022},[23237,27864,27866,27709],{"id":27865},"_227重启电脑后检查-docker-服务状态",[195,27867,27868],{},"2.2.7.重启电脑后检查 Docker 服务状态",[29,27870,27871],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[59,27873,27875],{"className":25059,"code":27874,"language":25061,"meta":64,"style":64},"sudo reboot\nsystemctl status docker\n",[66,27876,27877,27884],{"__ignoreMap":64},[69,27878,27879,27881],{"class":71,"line":72},[69,27880,25813],{"class":109},[69,27882,27883],{"class":1022}," reboot\n",[69,27885,27886,27888,27890],{"class":71,"line":79},[69,27887,27722],{"class":109},[69,27889,27725],{"class":1022},[69,27891,27728],{"class":1022},[29,27893,27894],{},[24,27895],{"alt":64,"src":27896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[29,27898,27899],{},"第三行显示enabled说明开机自启动成功",[29,27901,27902],{},"按q退出",[19,27904,27906],{"id":27905},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[29,27908,27909],{},"优先使用linux来使用docker是比较好的",[29,27911,27912],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[29,27914,27915],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[29,27917,27918,27919],{},"官方下载安装:",[187,27920,27921],{"href":27921,"rel":27922},"https:\u002F\u002Fwww.docker.com\u002F",[191],[29,27924,27925],{},"Windows的Docker显卡直通与USB直通:",[29,27927,27928],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[29,27930,27931],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[29,27933,27934],{},[24,27935],{"alt":64,"src":27936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[29,27938,27939],{},[24,27940],{"alt":64,"src":27941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[29,27943,27944],{},[24,27945],{"alt":64,"src":27946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1297,27948,27949],{},"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":64,"searchDepth":79,"depth":79,"links":27951},[27952,27953,27954],{"id":27230,"depth":106,"text":27231},{"id":27701,"depth":106,"text":27702},{"id":27905,"depth":106,"text":27906},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27222,"description":64},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27961,"title":27962,"body":27963,"description":27970,"extension":1323,"meta":28663,"navigation":1325,"path":28664,"seo":28665,"stem":28666,"__hash__":28667},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27964,"toc":28657},[27965,27968,27971,27975,27980,27985,27988,28016,28021,28030,28033,28038,28042,28049,28054,28060,28064,28067,28071,28076,28168,28173,28191,28196,28217,28222,28238,28242,28247,28276,28281,28327,28332,28376,28384,28401,28406,28422,28427,28441,28444,28447,28450,28453,28482,28485,28490,28494,28497,28500,28506,28509,28512,28515,28577,28584,28589,28592,28610,28614,28617,28634,28637,28640,28654],[10,27966,27962],{"id":27967},"_3docker直通",[29,27969,27970],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[19,27972,27974],{"id":27973},"_31usb直通","3.1.USB直通",[29,27976,27977],{},[24,27978],{"alt":64,"src":27979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[37,27981,27982],{},[40,27983,27984],{},"方法一(不是很推荐新手)：",[29,27986,27987],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[59,27989,27991],{"className":25059,"code":27990,"language":25061,"meta":64,"style":64},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[66,27992,27993,28001,28006],{"__ignoreMap":64},[69,27994,27995,27998],{"class":71,"line":72},[69,27996,27997],{"class":109},"ls",[69,27999,28000],{"class":1022}," \u002Fdev\n",[69,28002,28003],{"class":71,"line":79},[69,28004,28005],{"class":75},"#例如\n",[69,28007,28008,28011,28013],{"class":71,"line":106},[69,28009,28010],{"class":86},"--device",[69,28012,1019],{"class":82},[69,28014,28015],{"class":1022},"\u002Fdev\u002Ftty_USB0\n",[37,28017,28018],{"start":79},[40,28019,28020],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[59,28022,28024],{"className":25059,"code":28023,"language":25061,"meta":64,"style":64},"--privileged\n",[66,28025,28026],{"__ignoreMap":64},[69,28027,28028],{"class":71,"line":72},[69,28029,28023],{"class":109},[29,28031,28032],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[29,28034,28035],{},[24,28036],{"alt":64,"src":28037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[19,28039,28041],{"id":28040},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[29,28043,28044,28045,28048],{},"NVIDIA Container Toolkit使用户 ",[195,28046,28047],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[29,28050,28051],{},[24,28052],{"alt":64,"src":28053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[29,28055,28056],{},[187,28057,28058],{"href":28058,"rel":28059},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[191],[23237,28061,28063],{"id":28062},"_321安装","3.2.1.安装",[29,28065,28066],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24149,28068,28070],{"id":28069},"_3211ubuntu","3.2.1.1.Ubuntu",[37,28072,28073],{},[40,28074,28075],{},"配置存储库 并更新",[59,28077,28079],{"className":25059,"code":28078,"language":25061,"meta":64,"style":64},"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",[66,28080,28081,28110,28130,28142,28154,28160],{"__ignoreMap":64},[69,28082,28083,28086,28089,28092,28094,28096,28099,28102,28105,28108],{"class":71,"line":72},[69,28084,28085],{"class":109},"curl",[69,28087,28088],{"class":90}," -fsSL",[69,28090,28091],{"class":1022}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[69,28093,26346],{"class":82},[69,28095,27309],{"class":109},[69,28097,28098],{"class":1022}," gpg",[69,28100,28101],{"class":90}," --dearmor",[69,28103,28104],{"class":90}," -o",[69,28106,28107],{"class":1022}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[69,28109,25915],{"class":90},[69,28111,28112,28115,28117,28120,28123,28126,28128],{"class":71,"line":79},[69,28113,28114],{"class":86},"  && ",[69,28116,28085],{"class":109},[69,28118,28119],{"class":90}," -s",[69,28121,28122],{"class":90}," -L",[69,28124,28125],{"class":1022}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[69,28127,26346],{"class":82},[69,28129,25915],{"class":90},[69,28131,28132,28135,28138,28140],{"class":71,"line":106},[69,28133,28134],{"class":109},"    sed",[69,28136,28137],{"class":1022}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[69,28139,26346],{"class":82},[69,28141,25915],{"class":90},[69,28143,28144,28147,28149,28152],{"class":71,"line":116},[69,28145,28146],{"class":109},"    sudo",[69,28148,27452],{"class":1022},[69,28150,28151],{"class":1022}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[69,28153,25915],{"class":90},[69,28155,28156,28158],{"class":71,"line":133},[69,28157,28114],{"class":86},[69,28159,27411],{"class":90},[69,28161,28162,28164,28166],{"class":71,"line":139},[69,28163,28146],{"class":109},[69,28165,27312],{"class":1022},[69,28167,27478],{"class":1022},[37,28169,28170],{"start":79},[40,28171,28172],{},"安装nvidia-docker2",[59,28174,28176],{"className":25059,"code":28175,"language":25061,"meta":64,"style":64},"sudo apt-get install -y nvidia-docker2\n",[66,28177,28178],{"__ignoreMap":64},[69,28179,28180,28182,28184,28186,28188],{"class":71,"line":72},[69,28181,25813],{"class":109},[69,28183,27312],{"class":1022},[69,28185,25071],{"class":1022},[69,28187,27636],{"class":90},[69,28189,28190],{"class":1022}," nvidia-docker2\n",[37,28192,28193],{"start":106},[40,28194,28195],{},"使用nvidia-ctk命令配置container runtime",[59,28197,28199],{"className":25059,"code":28198,"language":25061,"meta":64,"style":64},"sudo nvidia-ctk runtime configure --runtime=docker\n",[66,28200,28201],{"__ignoreMap":64},[69,28202,28203,28205,28208,28211,28214],{"class":71,"line":72},[69,28204,25813],{"class":109},[69,28206,28207],{"class":1022}," nvidia-ctk",[69,28209,28210],{"class":1022}," runtime",[69,28212,28213],{"class":1022}," configure",[69,28215,28216],{"class":90}," --runtime=docker\n",[37,28218,28219],{"start":116},[40,28220,28221],{},"重启docker服务:",[59,28223,28225],{"className":25059,"code":28224,"language":25061,"meta":64,"style":64},"sudo systemctl restart docker\n",[66,28226,28227],{"__ignoreMap":64},[69,28228,28229,28231,28233,28236],{"class":71,"line":72},[69,28230,25813],{"class":109},[69,28232,27749],{"class":1022},[69,28234,28235],{"class":1022}," restart",[69,28237,27728],{"class":1022},[24149,28239,28241],{"id":28240},"_3212fedora","3.2.1.2.Fedora",[37,28243,28244],{},[40,28245,28246],{},"配置存储库",[59,28248,28250],{"className":25059,"code":28249,"language":25061,"meta":64,"style":64},"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",[66,28251,28252,28267],{"__ignoreMap":64},[69,28253,28254,28256,28258,28260,28263,28265],{"class":71,"line":72},[69,28255,28085],{"class":109},[69,28257,28119],{"class":90},[69,28259,28122],{"class":90},[69,28261,28262],{"class":1022}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[69,28264,26346],{"class":82},[69,28266,25915],{"class":90},[69,28268,28269,28271,28273],{"class":71,"line":79},[69,28270,25813],{"class":109},[69,28272,27452],{"class":1022},[69,28274,28275],{"class":1022}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[37,28277,28278],{"start":79},[40,28279,28280],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[59,28282,28284],{"className":25059,"code":28283,"language":25061,"meta":64,"style":64},"# 如果是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",[66,28285,28286,28291,28305,28309,28314],{"__ignoreMap":64},[69,28287,28288],{"class":71,"line":72},[69,28289,28290],{"class":75},"# 如果是RHEL或者Rocky（DNF4）\n",[69,28292,28293,28295,28297,28299,28302],{"class":71,"line":79},[69,28294,25813],{"class":109},[69,28296,27551],{"class":1022},[69,28298,27650],{"class":1022},[69,28300,28301],{"class":90}," --add-repo",[69,28303,28304],{"class":1022}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[69,28306,28307],{"class":71,"line":106},[69,28308,3644],{"emptyLinePlaceholder":1325},[69,28310,28311],{"class":71,"line":116},[69,28312,28313],{"class":75},"# 如果是Feodra41+（DNF5）\n",[69,28315,28316,28318,28320,28322,28324],{"class":71,"line":133},[69,28317,25813],{"class":109},[69,28319,27551],{"class":1022},[69,28321,27650],{"class":1022},[69,28323,27653],{"class":1022},[69,28325,28326],{"class":90}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[37,28328,28329],{"start":106},[40,28330,28331],{},"安装NVIDIA Container Toolki包",[59,28333,28335],{"className":25059,"code":28334,"language":25061,"meta":64,"style":64},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[66,28336,28337,28342,28355,28359,28364],{"__ignoreMap":64},[69,28338,28339],{"class":71,"line":72},[69,28340,28341],{"class":75},"# 如果是RHEL或者Rocky\n",[69,28343,28344,28346,28348,28350,28352],{"class":71,"line":79},[69,28345,25813],{"class":109},[69,28347,27551],{"class":1022},[69,28349,25071],{"class":1022},[69,28351,27636],{"class":90},[69,28353,28354],{"class":1022}," nvidia-container-toolkit\n",[69,28356,28357],{"class":71,"line":106},[69,28358,3644],{"emptyLinePlaceholder":1325},[69,28360,28361],{"class":71,"line":116},[69,28362,28363],{"class":75},"# 如果是Fedora\n",[69,28365,28366,28368,28370,28372,28374],{"class":71,"line":133},[69,28367,25813],{"class":109},[69,28369,27551],{"class":1022},[69,28371,25071],{"class":1022},[69,28373,27636],{"class":90},[69,28375,28354],{"class":1022},[37,28377,28378],{"start":116},[40,28379,28380,28381,28383],{},"安装nvidia-docker2 ： 在Fedora上使用",[66,28382,27526],{},"进行安装",[59,28385,28387],{"className":25059,"code":28386,"language":25061,"meta":64,"style":64},"sudo dnf install -y nvidia-docker2\n",[66,28388,28389],{"__ignoreMap":64},[69,28390,28391,28393,28395,28397,28399],{"class":71,"line":72},[69,28392,25813],{"class":109},[69,28394,27551],{"class":1022},[69,28396,25071],{"class":1022},[69,28398,27636],{"class":90},[69,28400,28190],{"class":1022},[37,28402,28403],{"start":133},[40,28404,28405],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[59,28407,28408],{"className":25059,"code":28198,"language":25061,"meta":64,"style":64},[66,28409,28410],{"__ignoreMap":64},[69,28411,28412,28414,28416,28418,28420],{"class":71,"line":72},[69,28413,25813],{"class":109},[69,28415,28207],{"class":1022},[69,28417,28210],{"class":1022},[69,28419,28213],{"class":1022},[69,28421,28216],{"class":90},[37,28423,28424],{"start":139},[40,28425,28426],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[59,28428,28429],{"className":25059,"code":28224,"language":25061,"meta":64,"style":64},[66,28430,28431],{"__ignoreMap":64},[69,28432,28433,28435,28437,28439],{"class":71,"line":72},[69,28434,25813],{"class":109},[69,28436,27749],{"class":1022},[69,28438,28235],{"class":1022},[69,28440,27728],{"class":1022},[29,28442,28443],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[29,28445,28446],{},"方法：",[29,28448,28449],{},"1️⃣nvidia-smi",[29,28451,28452],{},"2️⃣运行nvidia cuda 容器进行测试",[59,28454,28456],{"className":25059,"code":28455,"language":25061,"meta":64,"style":64},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[66,28457,28458],{"__ignoreMap":64},[69,28459,28460,28462,28464,28467,28470,28473,28476,28479],{"class":71,"line":72},[69,28461,25813],{"class":109},[69,28463,27556],{"class":1022},[69,28465,28466],{"class":1022}," run",[69,28468,28469],{"class":90}," --rm",[69,28471,28472],{"class":90}," --gpus",[69,28474,28475],{"class":1022}," all",[69,28477,28478],{"class":1022}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[69,28480,28481],{"class":1022}," nvidia-smi\n",[29,28483,28484],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[29,28486,28487],{},[24,28488],{"alt":64,"src":28489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[19,28491,28493],{"id":28492},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[29,28495,28496],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[29,28498,28499],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[29,28501,28502],{},[187,28503,28504],{"href":28504,"rel":28505},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[191],[29,28507,28508],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[29,28510,28511],{},"我们只需要找到对应的Docker镜像当底包即可。",[29,28513,28514],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1530,28516,28517,28533],{},[1533,28518,28519],{},[1536,28520,28521,28524,28527,28530],{},[1539,28522,28523],{"align":1202},"镜像类型",[1539,28525,28526],{"align":1202},"适用场景",[1539,28528,28529],{"align":1202},"示例标签",[1539,28531,28532],{"align":1202},"大小",[1576,28534,28535,28549,28563],{},[1536,28536,28537,28540,28543,28546],{},[1581,28538,28539],{"align":1202},"base",[1581,28541,28542],{"align":1202},"仅需 CUDA 运行时库",[1581,28544,28545],{"align":1202},"12.4.0-base-ubuntu22.04",[1581,28547,28548],{"align":1202},"~240MB",[1536,28550,28551,28554,28557,28560],{},[1581,28552,28553],{"align":1202},"runtime",[1581,28555,28556],{"align":1202},"部署编译后的应用（含数学库）",[1581,28558,28559],{"align":1202},"12.4.0-runtime-ubuntu22.04",[1581,28561,28562],{"align":1202},"~2GB",[1536,28564,28565,28568,28571,28574],{},[1581,28566,28567],{"align":1202},"devel",[1581,28569,28570],{"align":1202},"开发环境（含编译工具）",[1581,28572,28573],{"align":1202},"12.4.0-devel-ubuntu22.04",[1581,28575,28576],{"align":1202},"~3GB",[29,28578,28579,28580,28583],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[66,28581,28582],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[29,28585,28586],{},[24,28587],{"alt":64,"src":28588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[29,28590,28591],{},"在dockerfile里就可以开头这么写：",[59,28593,28595],{"className":25059,"code":28594,"language":25061,"meta":64,"style":64},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[66,28596,28597,28602],{"__ignoreMap":64},[69,28598,28599],{"class":71,"line":72},[69,28600,28601],{"class":75},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[69,28603,28604,28607],{"class":71,"line":79},[69,28605,28606],{"class":109},"FROM",[69,28608,28609],{"class":1022}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[19,28611,28613],{"id":28612},"_34配置以太网","3.4.配置以太网",[29,28615,28616],{},"指定网络模式",[59,28618,28620],{"className":25059,"code":28619,"language":25061,"meta":64,"style":64},"--net=host \\\n",[66,28621,28622],{"__ignoreMap":64},[69,28623,28624,28627,28629,28632],{"class":71,"line":72},[69,28625,28626],{"class":86},"--net",[69,28628,1019],{"class":82},[69,28630,28631],{"class":1022},"host",[69,28633,25915],{"class":109},[29,28635,28636],{},"启动参数里加上这行即可。具体在下方",[29,28638,28639],{},"--net选项：指定网络模式，该选项有以下参数可选：",[162,28641,28642,28645,28648,28651],{},[40,28643,28644],{},"--net=bridge:默认选项，表示连接到默认的网桥",[40,28646,28647],{},"--net=host:容器使用宿主机的网络",[40,28649,28650],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[40,28652,28653],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1297,28655,28656],{},"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":64,"searchDepth":79,"depth":79,"links":28658},[28659,28660,28661,28662],{"id":27973,"depth":106,"text":27974},{"id":28040,"depth":106,"text":28041},{"id":28492,"depth":106,"text":28493},{"id":28612,"depth":106,"text":28613},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27962,"description":27970},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28669,"title":28670,"body":28671,"description":28678,"extension":1323,"meta":28684,"navigation":1325,"path":28685,"seo":28686,"stem":28687,"__hash__":28688},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28672,"toc":28682},[28673,28676,28679],[10,28674,28670],{"id":28675},"_4dockerhub换源",[29,28677,28678],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[29,28680,28681],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":64,"searchDepth":79,"depth":79,"links":28683},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28670,"description":28678},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28690,"title":28691,"body":28692,"description":64,"extension":1323,"meta":29704,"navigation":1325,"path":29705,"seo":29706,"stem":29707,"__hash__":29708},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28693,"toc":29699},[28694,28697,28701,28707,28711,28714,29054,29057,29060,29063,29068,29073,29076,29079,29082,29085,29104,29107,29118,29124,29306,29316,29332,29595,29597,29622,29637,29646,29696],[10,28695,28691],{"id":28696},"_5docker命令学习",[19,28698,28700],{"id":28699},"_51参考文档","5.1.参考文档",[29,28702,28703],{},[187,28704,28705],{"href":28705,"rel":28706},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[191],[19,28708,28710],{"id":28709},"_52常用命令","5.2.常用命令",[29,28712,28713],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1530,28715,28716,28729],{},[1533,28717,28718],{},[1536,28719,28720,28723,28726],{},[1539,28721,28722],{"align":1202},"命令",[1539,28724,28725],{"align":1202},"描述",[1539,28727,28728],{"align":1202},"示例",[1576,28730,28731,28742,28753,28764,28775,28786,28797,28808,28818,28829,28840,28851,28861,28872,28883,28894,28904,28914,28924,28934,28945,28956,28967,28978,28989,29000,29010,29021,29032,29043],{},[1536,28732,28733,28736,28739],{},[1581,28734,28735],{"align":1202},"docker run",[1581,28737,28738],{"align":1202},"创建并启动一个新的容器。",[1581,28740,28741],{"align":1202},"docker run -it ubuntu bash",[1536,28743,28744,28747,28750],{},[1581,28745,28746],{"align":1202},"docker build",[1581,28748,28749],{"align":1202},"通过指定的 Dockerfile 创建一个新的镜像。",[1581,28751,28752],{"align":1202},"docker build -t myimage .",[1536,28754,28755,28758,28761],{},[1581,28756,28757],{"align":1202},"docker pull",[1581,28759,28760],{"align":1202},"从 Docker 仓库拉取镜像。",[1581,28762,28763],{"align":1202},"docker pull ubuntu",[1536,28765,28766,28769,28772],{},[1581,28767,28768],{"align":1202},"docker push",[1581,28770,28771],{"align":1202},"将本地镜像推送到 Docker 仓库。",[1581,28773,28774],{"align":1202},"docker push myimage",[1536,28776,28777,28780,28783],{},[1581,28778,28779],{"align":1202},"docker stop",[1581,28781,28782],{"align":1202},"停止一个正在运行的容器。",[1581,28784,28785],{"align":1202},"docker stop container_id",[1536,28787,28788,28791,28794],{},[1581,28789,28790],{"align":1202},"docker start",[1581,28792,28793],{"align":1202},"启动一个已经存在的容器。",[1581,28795,28796],{"align":1202},"docker start container_id",[1536,28798,28799,28802,28805],{},[1581,28800,28801],{"align":1202},"docker restart",[1581,28803,28804],{"align":1202},"重新启动容器。",[1581,28806,28807],{"align":1202},"docker restart container_id",[1536,28809,28810,28813,28816],{},[1581,28811,28812],{"align":1202},"docker ps",[1581,28814,28815],{"align":1202},"列出当前正在运行的容器。",[1581,28817,28812],{"align":1202},[1536,28819,28820,28823,28826],{},[1581,28821,28822],{"align":1202},"docker rm",[1581,28824,28825],{"align":1202},"删除一个或多个停止的容器。",[1581,28827,28828],{"align":1202},"docker rm container_id",[1536,28830,28831,28834,28837],{},[1581,28832,28833],{"align":1202},"docker exec",[1581,28835,28836],{"align":1202},"在一个正在运行的容器中执行命令。",[1581,28838,28839],{"align":1202},"docker exec -it container_id bash",[1536,28841,28842,28845,28848],{},[1581,28843,28844],{"align":1202},"docker logs",[1581,28846,28847],{"align":1202},"查看容器的日志输出。",[1581,28849,28850],{"align":1202},"docker logs container_id",[1536,28852,28853,28856,28859],{},[1581,28854,28855],{"align":1202},"docker images",[1581,28857,28858],{"align":1202},"列出本地所有镜像。",[1581,28860,28855],{"align":1202},[1536,28862,28863,28866,28869],{},[1581,28864,28865],{"align":1202},"docker rmi",[1581,28867,28868],{"align":1202},"删除一个或多个镜像。",[1581,28870,28871],{"align":1202},"docker rmi myimage",[1536,28873,28874,28877,28880],{},[1581,28875,28876],{"align":1202},"docker network",[1581,28878,28879],{"align":1202},"管理 Docker 网络。",[1581,28881,28882],{"align":1202},"docker network ls",[1536,28884,28885,28888,28891],{},[1581,28886,28887],{"align":1202},"docker volume",[1581,28889,28890],{"align":1202},"管理 Docker 数据卷。",[1581,28892,28893],{"align":1202},"docker volume ls",[1536,28895,28896,28899,28902],{},[1581,28897,28898],{"align":1202},"docker-compose up",[1581,28900,28901],{"align":1202},"启动 docker-compose.yml 中定义的所有服务。",[1581,28903,28898],{"align":1202},[1536,28905,28906,28909,28912],{},[1581,28907,28908],{"align":1202},"docker-compose down",[1581,28910,28911],{"align":1202},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1581,28913,28908],{"align":1202},[1536,28915,28916,28919,28922],{},[1581,28917,28918],{"align":1202},"docker info",[1581,28920,28921],{"align":1202},"显示 Docker 系统的详细信息。",[1581,28923,28918],{"align":1202},[1536,28925,28926,28929,28932],{},[1581,28927,28928],{"align":1202},"docker stats",[1581,28930,28931],{"align":1202},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1581,28933,28928],{"align":1202},[1536,28935,28936,28939,28942],{},[1581,28937,28938],{"align":1202},"docker inspect",[1581,28940,28941],{"align":1202},"查看容器或镜像的详细信息（JSON 格式）。",[1581,28943,28944],{"align":1202},"docker inspect container_id",[1536,28946,28947,28950,28953],{},[1581,28948,28949],{"align":1202},"docker save",[1581,28951,28952],{"align":1202},"将一个镜像保存为 tar 文件。",[1581,28954,28955],{"align":1202},"docker save -o myimage.tar myimage",[1536,28957,28958,28961,28964],{},[1581,28959,28960],{"align":1202},"docker load",[1581,28962,28963],{"align":1202},"从 tar 文件中加载镜像。",[1581,28965,28966],{"align":1202},"docker load -i myimage.tar",[1536,28968,28969,28972,28975],{},[1581,28970,28971],{"align":1202},"docker tag",[1581,28973,28974],{"align":1202},"为镜像添加标签（tag）。",[1581,28976,28977],{"align":1202},"docker tag myimage myimage:v1",[1536,28979,28980,28983,28986],{},[1581,28981,28982],{"align":1202},"docker buildx build",[1581,28984,28985],{"align":1202},"使用 Buildx 构建多架构镜像。",[1581,28987,28988],{"align":1202},"docker buildx build -t myimage .",[1536,28990,28991,28994,28997],{},[1581,28992,28993],{"align":1202},"docker buildx create",[1581,28995,28996],{"align":1202},"创建一个新的 Buildx 构建实例。",[1581,28998,28999],{"align":1202},"docker buildx create –use",[1536,29001,29002,29005,29008],{},[1581,29003,29004],{"align":1202},"docker buildx ls",[1581,29006,29007],{"align":1202},"列出所有可用的 Buildx 构建实例。",[1581,29009,29004],{"align":1202},[1536,29011,29012,29015,29018],{},[1581,29013,29014],{"align":1202},"docker buildx use",[1581,29016,29017],{"align":1202},"设置当前的 Buildx 构建实例。",[1581,29019,29020],{"align":1202},"docker buildx use mybuilder",[1536,29022,29023,29026,29029],{},[1581,29024,29025],{"align":1202},"docker buildx bake",[1581,29027,29028],{"align":1202},"使用 Bake 文件批量构建镜像。",[1581,29030,29031],{"align":1202},"docker buildx bake -f bake.hcl",[1536,29033,29034,29037,29040],{},[1581,29035,29036],{"align":1202},"docker buildx build –push",[1581,29038,29039],{"align":1202},"构建镜像并推送到镜像仓库。",[1581,29041,29042],{"align":1202},"docker buildx build –push -t myimage .",[1536,29044,29045,29048,29051],{},[1581,29046,29047],{"align":1202},"docker buildx build –platform",[1581,29049,29050],{"align":1202},"构建镜像并为多个平台生成支持。",[1581,29052,29053],{"align":1202},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[29,29055,29056],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[29,29058,29059],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[29,29061,29062],{},"docker images 可以查看已经下载的镜像",[29,29064,29065],{},[24,29066],{"alt":64,"src":29067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[29,29069,29070],{},[195,29071,29072],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[29,29074,29075],{},"docker rmi $(docker images -q) 删除所有的镜像",[29,29077,29078],{},"docker container logs 查看容器日志",[29,29080,29081],{},"docker top 查看容器里的进程",[29,29083,29084],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[59,29086,29088],{"className":25059,"code":29087,"language":25061,"meta":64,"style":64},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[66,29089,29090],{"__ignoreMap":64},[69,29091,29092,29095,29098,29101],{"class":71,"line":72},[69,29093,29094],{"class":109},"如：docker",[69,29096,29097],{"class":1022}," cp",[69,29099,29100],{"class":1022}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[69,29102,29103],{"class":1022}," \u002Fmydata\u002Fnginx\n",[29,29105,29106],{},"docker run时在启动容器的时候会有几个常用的选项：",[162,29108,29109,29112,29115],{},[40,29110,29111],{},"-d选项：表示后台运行",[40,29113,29114],{},"-P选项：随机端口映射",[40,29116,29117],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[19,29119,29121],{"id":29120},"_53run命令的参数非常重要",[195,29122,29123],{},"5.3.run命令的参数（非常重要）",[1530,29125,29126,29139],{},[1533,29127,29128],{},[1536,29129,29130,29133,29136],{},[1539,29131,29132],{"align":1202},"参数\u002F配置",[1539,29134,29135],{"align":1202},"功能说明",[1539,29137,29138],{"align":1202},"重要性与参考依据",[1576,29140,29141,29152,29163,29174,29185,29196,29207,29218,29229,29240,29251,29262,29273,29284,29295],{},[1536,29142,29143,29146,29149],{},[1581,29144,29145],{"align":1202},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1581,29147,29148],{"align":1202},"指定容器名称，便于后续管理",[1581,29150,29151],{"align":1202},"替代随机生成的容器名。",[1536,29153,29154,29157,29160],{},[1581,29155,29156],{"align":1202},"–gpus all",[1581,29158,29159],{"align":1202},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1581,29161,29162],{"align":1202},"用于CUDA加速等GPU依赖任务。",[1536,29164,29165,29168,29171],{},[1581,29166,29167],{"align":1202},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1581,29169,29170],{"align":1202},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1581,29172,29173],{"align":1202},"确保容器内GPU功能完整67。",[1536,29175,29176,29179,29182],{},[1581,29177,29178],{"align":1202},"-dit",[1581,29180,29181],{"align":1202},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1581,29183,29184],{"align":1202},"允许容器在后台运行并支持交互操作。",[1536,29186,29187,29190,29193],{},[1581,29188,29189],{"align":1202},"–privileged",[1581,29191,29192],{"align":1202},"赋予容器完全主机权限（可访问设备、内核模块等）",[1581,29194,29195],{"align":1202},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1536,29197,29198,29201,29204],{},[1581,29199,29200],{"align":1202},"–net=host",[1581,29202,29203],{"align":1202},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1581,29205,29206],{"align":1202},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1536,29208,29209,29212,29215],{},[1581,29210,29211],{"align":1202},"–group-add audio–group-add video–group-add dialout",[1581,29213,29214],{"align":1202},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1581,29216,29217],{"align":1202},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1536,29219,29220,29223,29226],{},[1581,29221,29222],{"align":1202},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1581,29224,29225],{"align":1202},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1581,29227,29228],{"align":1202},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1536,29230,29231,29234,29237],{},[1581,29232,29233],{"align":1202},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1581,29235,29236],{"align":1202},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1581,29238,29239],{"align":1202},"实现容器内图形显示。",[1536,29241,29242,29245,29248],{},[1581,29243,29244],{"align":1202},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1581,29246,29247],{"align":1202},"挂载X11认证文件（只读）",[1581,29249,29250],{"align":1202},"确保容器有权连接宿主机显示服务。",[1536,29252,29253,29256,29259],{},[1581,29254,29255],{"align":1202},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1581,29257,29258],{"align":1202},"挂载Wayland显示协议相关目录",[1581,29260,29261],{"align":1202},"支持Wayland协议的图形显示。",[1536,29263,29264,29267,29270],{},[1581,29265,29266],{"align":1202},"–ulimit nofile=1024:524288",[1581,29268,29269],{"align":1202},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1581,29271,29272],{"align":1202},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1536,29274,29275,29278,29281],{},[1581,29276,29277],{"align":1202},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1581,29279,29280],{"align":1202},"挂载宿主机用户目录到容器内同名路径",[1581,29282,29283],{"align":1202},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1536,29285,29286,29289,29292],{},[1581,29287,29288],{"align":1202},"-w \u002Fhome\u002Ftungchiahui",[1581,29290,29291],{"align":1202},"设置容器启动后的默认工作目录",[1581,29293,29294],{"align":1202},"直接进入项目路径，方便执行命令2324。",[1536,29296,29297,29300,29303],{},[1581,29298,29299],{"align":1202},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1581,29301,29302],{"align":1202},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1581,29304,29305],{"align":1202},"提供预配置的深度学习与机器人开发环境。",[29,29307,29308,29309,29311,29312,29315],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[66,29310,25813],{},"加不加",[66,29313,29314],{},"sudo -E","都无所谓。",[29,29317,29318,29319,29321,29322,29324,29325,29328,29329,29331],{},"用户已经被加到docker组了，不用",[66,29320,25813],{},"也行跑，其次，",[66,29323,25813],{},"运行的话，你的",[66,29326,29327],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[66,29330,29327],{},"更不可能变了。",[59,29333,29335],{"className":25059,"code":29334,"language":25061,"meta":64,"style":64},"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",[66,29336,29337,29350,29360,29370,29382,29389,29396,29403,29413,29422,29431,29445,29457,29469,29478,29488,29497,29512,29545,29572,29583,29590],{"__ignoreMap":64},[69,29338,29339,29341,29343,29345,29348],{"class":71,"line":72},[69,29340,25813],{"class":109},[69,29342,27556],{"class":1022},[69,29344,28466],{"class":1022},[69,29346,29347],{"class":90}," --name=ros_opencv_cuda",[69,29349,25915],{"class":90},[69,29351,29352,29355,29358],{"class":71,"line":79},[69,29353,29354],{"class":86},"--gpus ",[69,29356,29357],{"class":1022},"all",[69,29359,25915],{"class":90},[69,29361,29362,29365,29368],{"class":71,"line":106},[69,29363,29364],{"class":86},"-e ",[69,29366,29367],{"class":1022},"NVIDIA_DRIVER_CAPABILITIES=all",[69,29369,25915],{"class":90},[69,29371,29372,29374,29377,29380],{"class":71,"line":116},[69,29373,29364],{"class":86},[69,29375,29376],{"class":1022},"DISPLAY=",[69,29378,29379],{"class":86},"$DISPLAY ",[69,29381,27411],{"class":90},[69,29383,29384,29387],{"class":71,"line":133},[69,29385,29386],{"class":86},"-dit ",[69,29388,27411],{"class":90},[69,29390,29391,29394],{"class":71,"line":139},[69,29392,29393],{"class":86},"--privileged ",[69,29395,27411],{"class":90},[69,29397,29398,29401],{"class":71,"line":401},[69,29399,29400],{"class":86},"--net=host ",[69,29402,27411],{"class":90},[69,29404,29405,29408,29411],{"class":71,"line":470},[69,29406,29407],{"class":86},"--group-add ",[69,29409,29410],{"class":1022},"audio",[69,29412,25915],{"class":90},[69,29414,29415,29417,29420],{"class":71,"line":475},[69,29416,29407],{"class":86},[69,29418,29419],{"class":1022},"video",[69,29421,25915],{"class":90},[69,29423,29424,29426,29429],{"class":71,"line":482},[69,29425,29407],{"class":86},[69,29427,29428],{"class":1022},"dialout",[69,29430,25915],{"class":90},[69,29432,29433,29435,29438,29440,29443],{"class":71,"line":497},[69,29434,29364],{"class":86},[69,29436,29437],{"class":1022},"XAUTHORITY=",[69,29439,29327],{"class":86},[69,29441,29442],{"class":1022},"\u002F.Xauthority",[69,29444,25915],{"class":90},[69,29446,29447,29449,29452,29455],{"class":71,"line":502},[69,29448,29364],{"class":86},[69,29450,29451],{"class":1022},"WAYLAND_DISPLAY=",[69,29453,29454],{"class":86},"$WAYLAND_DISPLAY ",[69,29456,27411],{"class":90},[69,29458,29459,29461,29464,29467],{"class":71,"line":509},[69,29460,29364],{"class":86},[69,29462,29463],{"class":1022},"XDG_RUNTIME_DIR=",[69,29465,29466],{"class":86},"$XDG_RUNTIME_DIR ",[69,29468,27411],{"class":90},[69,29470,29471,29473,29476],{"class":71,"line":524},[69,29472,29364],{"class":86},[69,29474,29475],{"class":1022},"QT_QPA_PLATFORM=xcb",[69,29477,25915],{"class":90},[69,29479,29480,29483,29486],{"class":71,"line":2888},[69,29481,29482],{"class":86},"-v ",[69,29484,29485],{"class":1022},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[69,29487,25915],{"class":90},[69,29489,29490,29492,29495],{"class":71,"line":2893},[69,29491,29482],{"class":86},[69,29493,29494],{"class":1022},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[69,29496,25915],{"class":90},[69,29498,29499,29502,29505,29507,29510],{"class":71,"line":2899},[69,29500,29501],{"class":86},"-v $HOME",[69,29503,29504],{"class":1022},"\u002F.Xauthority:",[69,29506,29327],{"class":86},[69,29508,29509],{"class":1022},"\u002F.Xauthority:ro",[69,29511,25915],{"class":90},[69,29513,29514,29516,29519,29521,29524,29527,29529,29532,29534,29536,29538,29540,29543],{"class":71,"line":2919},[69,29515,29482],{"class":86},[69,29517,29518],{"class":1022},"\u002Frun\u002Fuser\u002F",[69,29520,26336],{"class":86},[69,29522,29523],{"class":109},"id",[69,29525,29526],{"class":90}," -u",[69,29528,1818],{"class":86},[69,29530,29531],{"class":1022},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[69,29533,26336],{"class":86},[69,29535,29523],{"class":109},[69,29537,29526],{"class":90},[69,29539,1818],{"class":86},[69,29541,29542],{"class":1022},"\u002Fwayland-0",[69,29544,25915],{"class":90},[69,29546,29547,29549,29551,29553,29555,29557,29559,29562,29564,29566,29568,29570],{"class":71,"line":2924},[69,29548,29482],{"class":86},[69,29550,29518],{"class":1022},[69,29552,26336],{"class":86},[69,29554,29523],{"class":109},[69,29556,29526],{"class":90},[69,29558,1818],{"class":86},[69,29560,29561],{"class":1022},":\u002Frun\u002Fuser\u002F",[69,29563,26336],{"class":86},[69,29565,29523],{"class":109},[69,29567,29526],{"class":90},[69,29569,14955],{"class":86},[69,29571,27411],{"class":90},[69,29573,29574,29576,29578,29581],{"class":71,"line":2938},[69,29575,29501],{"class":86},[69,29577,2246],{"class":1022},[69,29579,29580],{"class":86},"$HOME ",[69,29582,27411],{"class":90},[69,29584,29585,29588],{"class":71,"line":2943},[69,29586,29587],{"class":86},"-w $HOME ",[69,29589,27411],{"class":90},[69,29591,29592],{"class":71,"line":2972},[69,29593,29594],{"class":86},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[29,29596,10267],{},[37,29598,29599,29607,29610,29613],{},[40,29600,29601,15036,29603,29606],{},[66,29602,29367],{},[66,29604,29605],{},"--gpus all","没有英伟达显卡请注释。",[40,29608,29609],{},"--name后面请自己为容器起名。",[40,29611,29612],{},"最后一行仓库名称请你自己找对应的镜像填上。",[40,29614,29615,29616,29621],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[531,29617,29618],{},[195,29619,29620],{},"请不要加","。",[59,29623,29625],{"className":25059,"code":29624,"language":25061,"meta":64,"style":64},"--ulimit nofile=1024:524288 \\\n",[66,29626,29627],{"__ignoreMap":64},[69,29628,29629,29632,29635],{"class":71,"line":72},[69,29630,29631],{"class":109},"--ulimit",[69,29633,29634],{"class":1022}," nofile=1024:524288",[69,29636,25915],{"class":90},[29,29638,29639,29640,29645],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[531,29641,29642],{},[195,29643,29644],{},"不建议","**.**",[59,29647,29649],{"className":25059,"code":29648,"language":25061,"meta":64,"style":64},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[66,29650,29651,29678,29687],{"__ignoreMap":64},[69,29652,29653,29656,29659,29661,29663,29665,29667,29669,29671,29674,29676],{"class":71,"line":72},[69,29654,29655],{"class":109},"--user",[69,29657,29658],{"class":86}," $(",[69,29660,29523],{"class":109},[69,29662,29526],{"class":90},[69,29664,1818],{"class":86},[69,29666,2246],{"class":1022},[69,29668,26336],{"class":86},[69,29670,29523],{"class":109},[69,29672,29673],{"class":90}," -g",[69,29675,14955],{"class":86},[69,29677,27411],{"class":90},[69,29679,29680,29682,29685],{"class":71,"line":79},[69,29681,29482],{"class":86},[69,29683,29684],{"class":1022},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[69,29686,25915],{"class":90},[69,29688,29689,29691,29694],{"class":71,"line":106},[69,29690,29482],{"class":86},[69,29692,29693],{"class":1022},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[69,29695,25915],{"class":90},[1297,29697,29698],{},"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":64,"searchDepth":79,"depth":79,"links":29700},[29701,29702,29703],{"id":28699,"depth":106,"text":28700},{"id":28709,"depth":106,"text":28710},{"id":29120,"depth":106,"text":29123},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28691,"description":64},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29710,"title":29711,"body":29712,"description":64,"extension":1323,"meta":31335,"navigation":1325,"path":31336,"seo":31337,"stem":31338,"__hash__":31339},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29713,"toc":31330},[29714,29717,29721,29724,29946,29950,29954,29957,30063,30068,30071,30076,30079,30084,30087,30092,30095,30107,30110,30115,30122,30150,30157,30233,30238,30241,30264,30266,30341,30346,30349,30353,30361,30366,30371,30375,30386,30392,30395,30398,30422,30425,30428,30456,30459,30462,30927,30930,30935,30940,30944,30967,30972,30976,30980,30983,30986,30989,31016,31019,31022,31040,31043,31046,31068,31076,31081,31086,31090,31093,31096,31099,31102,31147,31150,31168,31171,31176,31179,31200,31203,31259,31262,31267,31271,31274,31281,31284,31287,31292,31295,31311,31314,31327],[10,29715,29711],{"id":29716},"_6手动创建docker镜像",[19,29718,29720],{"id":29719},"_61dockerfile","6.1.DockerFile",[29,29722,29723],{},"常用命令：",[1530,29725,29726,29737],{},[1533,29727,29728],{},[1536,29729,29730,29733,29735],{},[1539,29731,29732],{"align":1202},"指令",[1539,29734,27106],{"align":1202},[1539,29736,28728],{"align":1202},[1576,29738,29739,29749,29765,29776,29787,29798,29809,29820,29831,29845,29859,29870,29884,29895,29906,29920,29935],{},[1536,29740,29741,29743,29746],{},[1581,29742,28606],{"align":1202},[1581,29744,29745],{"align":1202},"指定基础镜像，是 Dockerfile 的起点",[1581,29747,29748],{"align":1202},"FROM ubuntu:22.04",[1536,29750,29751,29754,29757],{},[1581,29752,29753],{"align":1202},"LABEL",[1581,29755,29756],{"align":1202},"添加元数据（如作者、版本等）",[1581,29758,29759,29760,29764],{"align":1202},"LABEL maintainer=”",[187,29761,29763],{"href":29762},"mailto:you@example.com","you@example.com","”",[1536,29766,29767,29770,29773],{},[1581,29768,29769],{"align":1202},"ENV",[1581,29771,29772],{"align":1202},"设置环境变量",[1581,29774,29775],{"align":1202},"ENV PORT=8080",[1536,29777,29778,29781,29784],{},[1581,29779,29780],{"align":1202},"ARG",[1581,29782,29783],{"align":1202},"构建参数，只在构建期间可用",[1581,29785,29786],{"align":1202},"ARG VERSION=1.0",[1536,29788,29789,29792,29795],{},[1581,29790,29791],{"align":1202},"RUN",[1581,29793,29794],{"align":1202},"构建镜像时运行命令",[1581,29796,29797],{"align":1202},"RUN apt-get update && apt-get install -y curl",[1536,29799,29800,29803,29806],{},[1581,29801,29802],{"align":1202},"COPY",[1581,29804,29805],{"align":1202},"复制文件到镜像中",[1581,29807,29808],{"align":1202},"COPY . \u002Fapp",[1536,29810,29811,29814,29817],{},[1581,29812,29813],{"align":1202},"ADD",[1581,29815,29816],{"align":1202},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1581,29818,29819],{"align":1202},"ADD archive.tar.gz \u002Fdata\u002F",[1536,29821,29822,29825,29828],{},[1581,29823,29824],{"align":1202},"WORKDIR",[1581,29826,29827],{"align":1202},"设置工作目录",[1581,29829,29830],{"align":1202},"WORKDIR \u002Fopt",[1536,29832,29833,29836,29839],{},[1581,29834,29835],{"align":1202},"CMD",[1581,29837,29838],{"align":1202},"设置容器启动时默认命令（可被 docker run 覆盖）",[1581,29840,29841,29842],{"align":1202},"CMD ",[69,29843,29844],{},"“node”, “index.js”",[1536,29846,29847,29850,29853],{},[1581,29848,29849],{"align":1202},"ENTRYPOINT",[1581,29851,29852],{"align":1202},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1581,29854,29855,29856],{"align":1202},"ENTRYPOINT ",[69,29857,29858],{},"“python3”",[1536,29860,29861,29864,29867],{},[1581,29862,29863],{"align":1202},"EXPOSE",[1581,29865,29866],{"align":1202},"声明镜像内服务监听的端口（不会自动映射）",[1581,29868,29869],{"align":1202},"EXPOSE 80",[1536,29871,29872,29875,29878],{},[1581,29873,29874],{"align":1202},"VOLUME",[1581,29876,29877],{"align":1202},"声明数据卷挂载点",[1581,29879,29880,29881],{"align":1202},"VOLUME ",[69,29882,29883],{},"“\u002Fdata”",[1536,29885,29886,29889,29892],{},[1581,29887,29888],{"align":1202},"USER",[1581,29890,29891],{"align":1202},"设置后续命令执行的用户",[1581,29893,29894],{"align":1202},"USER appuser",[1536,29896,29897,29900,29903],{},[1581,29898,29899],{"align":1202},"ONBUILD",[1581,29901,29902],{"align":1202},"当镜像作为其他镜像基础镜像时触发的构建指令",[1581,29904,29905],{"align":1202},"ONBUILD COPY . \u002Fsrc",[1536,29907,29908,29911,29914],{},[1581,29909,29910],{"align":1202},"SHELL",[1581,29912,29913],{"align":1202},"更改默认 shell，比如将 sh -c 改为 bash -c",[1581,29915,29916,29917],{"align":1202},"SHELL ",[69,29918,29919],{},"“\u002Fbin\u002Fbash”, “-c”",[1536,29921,29922,29925,29928],{},[1581,29923,29924],{"align":1202},"HEALTHCHECK",[1581,29926,29927],{"align":1202},"定义容器运行时的健康检查命令",[1581,29929,29930,29931],{"align":1202},"`HEALTHCHECK CMD curl –fail ",[187,29932,29933],{"href":29933,"rel":29934},"http:\u002F\u002Flocalhost:8080",[191],[1536,29936,29937,29940,29943],{},[1581,29938,29939],{"align":1202},"STOPSIGNAL",[1581,29941,29942],{"align":1202},"容器停止时发送的信号",[1581,29944,29945],{"align":1202},"STOPSIGNAL SIGKILL",[19,29947,29949],{"id":29948},"_62自己创建容器","6.2.自己创建容器",[23237,29951,29953],{"id":29952},"_621手动创建","6.2.1.手动创建",[29,29955,29956],{},"在x86电脑上编译x86的：",[59,29958,29960],{"className":25059,"code":29959,"language":25061,"meta":64,"style":64},"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",[66,29961,29962,29978,29982,29995,29999,30012,30016,30029,30033,30046,30050],{"__ignoreMap":64},[69,29963,29964,29966,29969,29972,29975],{"class":71,"line":72},[69,29965,27789],{"class":109},[69,29967,29968],{"class":1022}," build",[69,29970,29971],{"class":90}," -t",[69,29973,29974],{"class":1022}," ros-melodic-cuda118-cudnn8-bionic:latest",[69,29976,29977],{"class":1022}," .\n",[69,29979,29980],{"class":71,"line":79},[69,29981,3644],{"emptyLinePlaceholder":1325},[69,29983,29984,29986,29988,29990,29993],{"class":71,"line":106},[69,29985,27789],{"class":109},[69,29987,29968],{"class":1022},[69,29989,29971],{"class":90},[69,29991,29992],{"class":1022}," ros-noetic-focal:latest",[69,29994,29977],{"class":1022},[69,29996,29997],{"class":71,"line":116},[69,29998,3644],{"emptyLinePlaceholder":1325},[69,30000,30001,30003,30005,30007,30010],{"class":71,"line":133},[69,30002,27789],{"class":109},[69,30004,29968],{"class":1022},[69,30006,29971],{"class":90},[69,30008,30009],{"class":1022}," ros-humble-jammy:latest",[69,30011,29977],{"class":1022},[69,30013,30014],{"class":71,"line":139},[69,30015,3644],{"emptyLinePlaceholder":1325},[69,30017,30018,30020,30022,30024,30027],{"class":71,"line":401},[69,30019,27789],{"class":109},[69,30021,29968],{"class":1022},[69,30023,29971],{"class":90},[69,30025,30026],{"class":1022}," ros-jazzy-noble:latest",[69,30028,29977],{"class":1022},[69,30030,30031],{"class":71,"line":470},[69,30032,3644],{"emptyLinePlaceholder":1325},[69,30034,30035,30037,30039,30041,30044],{"class":71,"line":475},[69,30036,27789],{"class":109},[69,30038,29968],{"class":1022},[69,30040,29971],{"class":90},[69,30042,30043],{"class":1022}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[69,30045,29977],{"class":1022},[69,30047,30048],{"class":71,"line":482},[69,30049,3644],{"emptyLinePlaceholder":1325},[69,30051,30052,30054,30056,30058,30061],{"class":71,"line":497},[69,30053,27789],{"class":109},[69,30055,29968],{"class":1022},[69,30057,29971],{"class":90},[69,30059,30060],{"class":1022}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[69,30062,29977],{"class":1022},[29,30064,30065],{},[24,30066],{"alt":64,"src":30067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[29,30069,30070],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[29,30072,30073],{},[24,30074],{"alt":64,"src":30075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[29,30077,30078],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[37,30080,30081],{},[40,30082,30083],{},"创建 Docker Hub 账户",[29,30085,30086],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[37,30088,30089],{"start":79},[40,30090,30091],{},"登录 Docker Hub",[29,30093,30094],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[59,30096,30098],{"className":25059,"code":30097,"language":25061,"meta":64,"style":64},"docker login\n",[66,30099,30100],{"__ignoreMap":64},[69,30101,30102,30104],{"class":71,"line":72},[69,30103,27789],{"class":109},[69,30105,30106],{"class":1022}," login\n",[29,30108,30109],{},"输入你的 Docker Hub 用户名和密码进行验证。",[37,30111,30112],{},[40,30113,30114],{},"为你的镜像打标签",[29,30116,30117,30118,30121],{},"Docker Hub 使用 ",[66,30119,30120],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[59,30123,30125],{"className":25059,"code":30124,"language":25061,"meta":64,"style":64},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[66,30126,30127],{"__ignoreMap":64},[69,30128,30129,30131,30134,30136,30139,30142,30145,30147],{"class":71,"line":72},[69,30130,27789],{"class":109},[69,30132,30133],{"class":1022}," tag",[69,30135,30026],{"class":1022},[69,30137,30138],{"class":82}," \u003C",[69,30140,30141],{"class":1022},"你的用户",[69,30143,30144],{"class":86},"名",[69,30146,2346],{"class":82},[69,30148,30149],{"class":1022},"\u002Fros-jazzy-noble:latest\n",[29,30151,30152,30153,30156],{},"例如，如果你的 Docker Hub 用户名是 ",[66,30154,30155],{},"tungchiahui","，你应该执行：",[59,30158,30160],{"className":25059,"code":30159,"language":25061,"meta":64,"style":64},"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",[66,30161,30162,30173,30177,30188,30192,30203,30207,30218,30222],{"__ignoreMap":64},[69,30163,30164,30166,30168,30170],{"class":71,"line":72},[69,30165,27789],{"class":109},[69,30167,30133],{"class":1022},[69,30169,29992],{"class":1022},[69,30171,30172],{"class":1022}," tungchiahui\u002Fros-noetic-focal:latest\n",[69,30174,30175],{"class":71,"line":79},[69,30176,3644],{"emptyLinePlaceholder":1325},[69,30178,30179,30181,30183,30185],{"class":71,"line":106},[69,30180,27789],{"class":109},[69,30182,30133],{"class":1022},[69,30184,30009],{"class":1022},[69,30186,30187],{"class":1022}," tungchiahui\u002Fros-humble-jammy:latest\n",[69,30189,30190],{"class":71,"line":116},[69,30191,3644],{"emptyLinePlaceholder":1325},[69,30193,30194,30196,30198,30200],{"class":71,"line":133},[69,30195,27789],{"class":109},[69,30197,30133],{"class":1022},[69,30199,30026],{"class":1022},[69,30201,30202],{"class":1022}," tungchiahui\u002Fros-jazzy-noble:latest\n",[69,30204,30205],{"class":71,"line":139},[69,30206,3644],{"emptyLinePlaceholder":1325},[69,30208,30209,30211,30213,30215],{"class":71,"line":401},[69,30210,27789],{"class":109},[69,30212,30133],{"class":1022},[69,30214,30043],{"class":1022},[69,30216,30217],{"class":1022}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[69,30219,30220],{"class":71,"line":470},[69,30221,3644],{"emptyLinePlaceholder":1325},[69,30223,30224,30226,30228,30230],{"class":71,"line":475},[69,30225,27789],{"class":109},[69,30227,30133],{"class":1022},[69,30229,30060],{"class":1022},[69,30231,30232],{"class":1022}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[37,30234,30235],{"start":79},[40,30236,30237],{},"推送镜像到 Docker Hub",[29,30239,30240],{},"使用以下命令将镜像推送到 Docker Hub：",[59,30242,30244],{"className":25059,"code":30243,"language":25061,"meta":64,"style":64},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[66,30245,30246],{"__ignoreMap":64},[69,30247,30248,30250,30253,30255,30257,30259,30261],{"class":71,"line":72},[69,30249,27789],{"class":109},[69,30251,30252],{"class":1022}," push",[69,30254,30138],{"class":82},[69,30256,30141],{"class":1022},[69,30258,30144],{"class":86},[69,30260,2346],{"class":82},[69,30262,30263],{"class":1022},"\u002Fros-noetic-jazzy-noble:latest\n",[29,30265,327],{},[59,30267,30269],{"className":25059,"code":30268,"language":25061,"meta":64,"style":64},"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",[66,30270,30271,30279,30283,30291,30295,30303,30307,30316,30320,30328,30332],{"__ignoreMap":64},[69,30272,30273,30275,30277],{"class":71,"line":72},[69,30274,27789],{"class":109},[69,30276,30252],{"class":1022},[69,30278,30172],{"class":1022},[69,30280,30281],{"class":71,"line":79},[69,30282,3644],{"emptyLinePlaceholder":1325},[69,30284,30285,30287,30289],{"class":71,"line":106},[69,30286,27789],{"class":109},[69,30288,30252],{"class":1022},[69,30290,30187],{"class":1022},[69,30292,30293],{"class":71,"line":116},[69,30294,3644],{"emptyLinePlaceholder":1325},[69,30296,30297,30299,30301],{"class":71,"line":133},[69,30298,27789],{"class":109},[69,30300,30252],{"class":1022},[69,30302,30202],{"class":1022},[69,30304,30305],{"class":71,"line":139},[69,30306,3644],{"emptyLinePlaceholder":1325},[69,30308,30309,30311,30313],{"class":71,"line":401},[69,30310,27789],{"class":109},[69,30312,30252],{"class":1022},[69,30314,30315],{"class":1022}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[69,30317,30318],{"class":71,"line":470},[69,30319,3644],{"emptyLinePlaceholder":1325},[69,30321,30322,30324,30326],{"class":71,"line":475},[69,30323,27789],{"class":109},[69,30325,30252],{"class":1022},[69,30327,30232],{"class":1022},[69,30329,30330],{"class":71,"line":482},[69,30331,3644],{"emptyLinePlaceholder":1325},[69,30333,30334,30336,30338],{"class":71,"line":497},[69,30335,27789],{"class":109},[69,30337,30252],{"class":1022},[69,30339,30340],{"class":1022}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[37,30342,30343],{"start":106},[40,30344,30345],{},"验证推送成功",[29,30347,30348],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[29,30350,30351],{},[195,30352,5028],{},[162,30354,30355,30358],{},[40,30356,30357],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[40,30359,30360],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[29,30362,30363],{},[24,30364],{"alt":64,"src":30365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[29,30367,30368],{},[24,30369],{"alt":64,"src":30370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23237,30372,30374],{"id":30373},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[29,30376,30377,30378,30381,30382,30385],{},"如果您想在 ",[195,30379,30380],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[195,30383,30384],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[29,30387,30388,30389],{},"1. ",[195,30390,30391],{},"启用 Docker 跨平台构建",[29,30393,30394],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[29,30396,30397],{},"第一步：启用 buildx（只需执行一次）",[59,30399,30401],{"className":25059,"code":30400,"language":25061,"meta":64,"style":64},"docker buildx create --name multiarch_builder --use\n",[66,30402,30403],{"__ignoreMap":64},[69,30404,30405,30407,30410,30413,30416,30419],{"class":71,"line":72},[69,30406,27789],{"class":109},[69,30408,30409],{"class":1022}," buildx",[69,30411,30412],{"class":1022}," create",[69,30414,30415],{"class":90}," --name",[69,30417,30418],{"class":1022}," multiarch_builder",[69,30420,30421],{"class":90}," --use\n",[29,30423,30424],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[29,30426,30427],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[59,30429,30431],{"className":25059,"code":30430,"language":25061,"meta":64,"style":64},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[66,30432,30433],{"__ignoreMap":64},[69,30434,30435,30437,30439,30441,30444,30447,30450,30453],{"class":71,"line":72},[69,30436,27789],{"class":109},[69,30438,28466],{"class":1022},[69,30440,28469],{"class":90},[69,30442,30443],{"class":90}," --privileged",[69,30445,30446],{"class":1022}," multiarch\u002Fqemu-user-static",[69,30448,30449],{"class":90}," --reset",[69,30451,30452],{"class":90}," -p",[69,30454,30455],{"class":1022}," yes\n",[29,30457,30458],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[29,30460,30461],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[59,30463,30465],{"className":25059,"code":30464,"language":25061,"meta":64,"style":64},"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",[66,30466,30467,30509,30513,30518,30528,30538,30547,30553,30557,30561,30571,30579,30588,30594,30598,30602,30612,30620,30629,30635,30639,30643,30653,30661,30670,30676,30680,30684,30694,30702,30711,30717,30721,30725,30735,30743,30752,30758,30762,30766,30776,30784,30793,30799,30803,30807,30817,30825,30834,30840,30844,30848,30858,30866,30875,30881,30885,30889,30900,30908,30917,30923],{"__ignoreMap":64},[69,30468,30469,30471,30473,30475,30478,30481,30483,30485,30488,30490,30492,30494,30496,30499,30502,30504,30507],{"class":71,"line":72},[69,30470,27789],{"class":109},[69,30472,30409],{"class":1022},[69,30474,29968],{"class":1022},[69,30476,30477],{"class":90}," --platform",[69,30479,30480],{"class":1022}," linux\u002Famd64,linux\u002Farm64",[69,30482,29971],{"class":90},[69,30484,30138],{"class":82},[69,30486,30487],{"class":1022},"你的镜像",[69,30489,30144],{"class":86},[69,30491,2346],{"class":82},[69,30493,2246],{"class":1022},[69,30495,1011],{"class":82},[69,30497,30498],{"class":1022},"标",[69,30500,30501],{"class":86},"签",[69,30503,2346],{"class":82},[69,30505,30506],{"class":90}," --push",[69,30508,29977],{"class":1022},[69,30510,30511],{"class":71,"line":79},[69,30512,3644],{"emptyLinePlaceholder":1325},[69,30514,30515],{"class":71,"line":106},[69,30516,30517],{"class":75},"# 例子：\n",[69,30519,30520,30522,30524,30526],{"class":71,"line":116},[69,30521,27789],{"class":109},[69,30523,30409],{"class":1022},[69,30525,29968],{"class":1022},[69,30527,25915],{"class":90},[69,30529,30530,30533,30536],{"class":71,"line":133},[69,30531,30532],{"class":86},"--platform ",[69,30534,30535],{"class":1022},"linux\u002Famd64,linux\u002Farm64",[69,30537,25915],{"class":90},[69,30539,30540,30542,30545],{"class":71,"line":139},[69,30541,29971],{"class":90},[69,30543,30544],{"class":1022}," tungchiahui\u002Fros:noetic-focal",[69,30546,25915],{"class":90},[69,30548,30549,30551],{"class":71,"line":401},[69,30550,30506],{"class":90},[69,30552,25915],{"class":90},[69,30554,30555],{"class":71,"line":470},[69,30556,29977],{"class":1022},[69,30558,30559],{"class":71,"line":475},[69,30560,3644],{"emptyLinePlaceholder":1325},[69,30562,30563,30565,30567,30569],{"class":71,"line":482},[69,30564,27789],{"class":109},[69,30566,30409],{"class":1022},[69,30568,29968],{"class":1022},[69,30570,25915],{"class":90},[69,30572,30573,30575,30577],{"class":71,"line":497},[69,30574,30532],{"class":86},[69,30576,30535],{"class":1022},[69,30578,25915],{"class":90},[69,30580,30581,30583,30586],{"class":71,"line":502},[69,30582,29971],{"class":90},[69,30584,30585],{"class":1022}," tungchiahui\u002Fros:humble-jammy",[69,30587,25915],{"class":90},[69,30589,30590,30592],{"class":71,"line":509},[69,30591,30506],{"class":90},[69,30593,25915],{"class":90},[69,30595,30596],{"class":71,"line":524},[69,30597,29977],{"class":1022},[69,30599,30600],{"class":71,"line":2888},[69,30601,3644],{"emptyLinePlaceholder":1325},[69,30603,30604,30606,30608,30610],{"class":71,"line":2893},[69,30605,27789],{"class":109},[69,30607,30409],{"class":1022},[69,30609,29968],{"class":1022},[69,30611,25915],{"class":90},[69,30613,30614,30616,30618],{"class":71,"line":2899},[69,30615,30532],{"class":86},[69,30617,30535],{"class":1022},[69,30619,25915],{"class":90},[69,30621,30622,30624,30627],{"class":71,"line":2919},[69,30623,29971],{"class":90},[69,30625,30626],{"class":1022}," tungchiahui\u002Fros:jazzy-noble",[69,30628,25915],{"class":90},[69,30630,30631,30633],{"class":71,"line":2924},[69,30632,30506],{"class":90},[69,30634,25915],{"class":90},[69,30636,30637],{"class":71,"line":2938},[69,30638,29977],{"class":1022},[69,30640,30641],{"class":71,"line":2943},[69,30642,3644],{"emptyLinePlaceholder":1325},[69,30644,30645,30647,30649,30651],{"class":71,"line":2972},[69,30646,27556],{"class":109},[69,30648,30409],{"class":1022},[69,30650,29968],{"class":1022},[69,30652,25915],{"class":90},[69,30654,30655,30657,30659],{"class":71,"line":2977},[69,30656,30532],{"class":86},[69,30658,30535],{"class":1022},[69,30660,25915],{"class":90},[69,30662,30663,30665,30668],{"class":71,"line":2994},[69,30664,29971],{"class":90},[69,30666,30667],{"class":1022}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[69,30669,25915],{"class":90},[69,30671,30672,30674],{"class":71,"line":2999},[69,30673,30506],{"class":90},[69,30675,25915],{"class":90},[69,30677,30678],{"class":71,"line":3004},[69,30679,29977],{"class":1022},[69,30681,30682],{"class":71,"line":3009},[69,30683,3644],{"emptyLinePlaceholder":1325},[69,30685,30686,30688,30690,30692],{"class":71,"line":3023},[69,30687,27789],{"class":109},[69,30689,30409],{"class":1022},[69,30691,29968],{"class":1022},[69,30693,25915],{"class":90},[69,30695,30696,30698,30700],{"class":71,"line":3028},[69,30697,30532],{"class":86},[69,30699,30535],{"class":1022},[69,30701,25915],{"class":90},[69,30703,30704,30706,30709],{"class":71,"line":3821},[69,30705,29971],{"class":90},[69,30707,30708],{"class":1022}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[69,30710,25915],{"class":90},[69,30712,30713,30715],{"class":71,"line":3835},[69,30714,30506],{"class":90},[69,30716,25915],{"class":90},[69,30718,30719],{"class":71,"line":3843},[69,30720,29977],{"class":1022},[69,30722,30723],{"class":71,"line":3848},[69,30724,3644],{"emptyLinePlaceholder":1325},[69,30726,30727,30729,30731,30733],{"class":71,"line":3854},[69,30728,27556],{"class":109},[69,30730,30409],{"class":1022},[69,30732,29968],{"class":1022},[69,30734,25915],{"class":90},[69,30736,30737,30739,30741],{"class":71,"line":3860},[69,30738,30532],{"class":86},[69,30740,30535],{"class":1022},[69,30742,25915],{"class":90},[69,30744,30745,30747,30750],{"class":71,"line":3865},[69,30746,29971],{"class":90},[69,30748,30749],{"class":1022}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[69,30751,25915],{"class":90},[69,30753,30754,30756],{"class":71,"line":9190},[69,30755,30506],{"class":90},[69,30757,25915],{"class":90},[69,30759,30760],{"class":71,"line":9214},[69,30761,29977],{"class":1022},[69,30763,30764],{"class":71,"line":9219},[69,30765,3644],{"emptyLinePlaceholder":1325},[69,30767,30768,30770,30772,30774],{"class":71,"line":9225},[69,30769,27789],{"class":109},[69,30771,30409],{"class":1022},[69,30773,29968],{"class":1022},[69,30775,25915],{"class":90},[69,30777,30778,30780,30782],{"class":71,"line":9252},[69,30779,30532],{"class":86},[69,30781,30535],{"class":1022},[69,30783,25915],{"class":90},[69,30785,30786,30788,30791],{"class":71,"line":9257},[69,30787,29971],{"class":90},[69,30789,30790],{"class":1022}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[69,30792,25915],{"class":90},[69,30794,30795,30797],{"class":71,"line":9263},[69,30796,30506],{"class":90},[69,30798,25915],{"class":90},[69,30800,30801],{"class":71,"line":9275},[69,30802,29977],{"class":1022},[69,30804,30805],{"class":71,"line":9287},[69,30806,3644],{"emptyLinePlaceholder":1325},[69,30808,30809,30811,30813,30815],{"class":71,"line":9299},[69,30810,27789],{"class":109},[69,30812,30409],{"class":1022},[69,30814,29968],{"class":1022},[69,30816,25915],{"class":90},[69,30818,30819,30821,30823],{"class":71,"line":10958},[69,30820,30532],{"class":86},[69,30822,30535],{"class":1022},[69,30824,25915],{"class":90},[69,30826,30827,30829,30832],{"class":71,"line":10983},[69,30828,29971],{"class":90},[69,30830,30831],{"class":1022}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[69,30833,25915],{"class":90},[69,30835,30836,30838],{"class":71,"line":11006},[69,30837,30506],{"class":90},[69,30839,25915],{"class":90},[69,30841,30842],{"class":71,"line":11030},[69,30843,29977],{"class":1022},[69,30845,30846],{"class":71,"line":11035},[69,30847,3644],{"emptyLinePlaceholder":1325},[69,30849,30850,30852,30854,30856],{"class":71,"line":11040},[69,30851,27556],{"class":109},[69,30853,30409],{"class":1022},[69,30855,29968],{"class":1022},[69,30857,25915],{"class":90},[69,30859,30860,30862,30864],{"class":71,"line":11045},[69,30861,30532],{"class":86},[69,30863,30535],{"class":1022},[69,30865,25915],{"class":90},[69,30867,30868,30870,30873],{"class":71,"line":11054},[69,30869,29971],{"class":90},[69,30871,30872],{"class":1022}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[69,30874,25915],{"class":90},[69,30876,30877,30879],{"class":71,"line":11059},[69,30878,30506],{"class":90},[69,30880,25915],{"class":90},[69,30882,30883],{"class":71,"line":11065},[69,30884,29977],{"class":1022},[69,30886,30887],{"class":71,"line":11086},[69,30888,3644],{"emptyLinePlaceholder":1325},[69,30890,30891,30894,30896,30898],{"class":71,"line":11092},[69,30892,30893],{"class":109},"  docker",[69,30895,30409],{"class":1022},[69,30897,29968],{"class":1022},[69,30899,25915],{"class":90},[69,30901,30902,30904,30906],{"class":71,"line":11106},[69,30903,30532],{"class":86},[69,30905,30535],{"class":1022},[69,30907,25915],{"class":90},[69,30909,30910,30912,30915],{"class":71,"line":11112},[69,30911,29971],{"class":90},[69,30913,30914],{"class":1022}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[69,30916,25915],{"class":90},[69,30918,30919,30921],{"class":71,"line":11139},[69,30920,30506],{"class":90},[69,30922,25915],{"class":90},[69,30924,30925],{"class":71,"line":11148},[69,30926,29977],{"class":1022},[29,30928,30929],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[29,30931,30932],{},[24,30933],{"alt":64,"src":30934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[29,30936,30937],{},[24,30938],{"alt":64,"src":30939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23237,30941,30943],{"id":30942},"_623清除构建缓存","6.2.3.清除构建缓存",[59,30945,30947],{"className":25059,"code":30946,"language":25061,"meta":64,"style":64},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[66,30948,30949,30954],{"__ignoreMap":64},[69,30950,30951],{"class":71,"line":72},[69,30952,30953],{"class":75},"# 清理BuildKit构建缓存\n",[69,30955,30956,30958,30961,30964],{"class":71,"line":79},[69,30957,27789],{"class":109},[69,30959,30960],{"class":1022}," builder",[69,30962,30963],{"class":1022}," prune",[69,30965,30966],{"class":90}," -f\n",[29,30968,30969],{},[24,30970],{"alt":64,"src":30971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[19,30973,30975],{"id":30974},"_63补充","6.3.补充",[23237,30977,30979],{"id":30978},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[29,30981,30982],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[29,30984,30985],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[29,30987,30988],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[59,30990,30992],{"className":25059,"code":30991,"language":25061,"meta":64,"style":64},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[66,30993,30994,31001],{"__ignoreMap":64},[69,30995,30996,30998],{"class":71,"line":72},[69,30997,28606],{"class":109},[69,30999,31000],{"class":1022}," nginx\n",[69,31002,31003,31005,31008,31011,31013],{"class":71,"line":79},[69,31004,29791],{"class":109},[69,31006,31007],{"class":1022}," echo",[69,31009,31010],{"class":1022}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[69,31012,27458],{"class":82},[69,31014,31015],{"class":1022}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[29,31017,31018],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[29,31020,31021],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[59,31023,31025],{"className":25059,"code":31024,"language":25061,"meta":64,"style":64},"docker build -t nginx:tuling .\n",[66,31026,31027],{"__ignoreMap":64},[69,31028,31029,31031,31033,31035,31038],{"class":71,"line":72},[69,31030,27789],{"class":109},[69,31032,29968],{"class":1022},[69,31034,29971],{"class":90},[69,31036,31037],{"class":1022}," nginx:tuling",[69,31039,29977],{"class":1022},[29,31041,31042],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[29,31044,31045],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[59,31047,31049],{"className":25059,"code":31048,"language":25061,"meta":64,"style":64},"docker run -d -p 92:80 nginx:tuling\n",[66,31050,31051],{"__ignoreMap":64},[69,31052,31053,31055,31057,31060,31062,31065],{"class":71,"line":72},[69,31054,27789],{"class":109},[69,31056,28466],{"class":1022},[69,31058,31059],{"class":90}," -d",[69,31061,30452],{"class":90},[69,31063,31064],{"class":1022}," 92:80",[69,31066,31067],{"class":1022}," nginx:tuling\n",[29,31069,31070,31071],{},"4、访问 ",[187,31072,31075],{"href":31073,"rel":31074},"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",[191],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[29,31077,31078],{},[24,31079],{"alt":64,"src":31080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[29,31082,31083],{},[24,31084],{"alt":64,"src":31085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23237,31087,31089],{"id":31088},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[29,31091,31092],{},"只需要知道大体流程即可",[29,31094,31095],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[29,31097,31098],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[29,31100,31101],{},"2、在Dockerfile中添加以下内容",[59,31103,31105],{"className":27327,"code":31104,"language":27329,"meta":64,"style":64},"# 基于哪个镜像\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",[66,31106,31107,31112,31117,31122,31127,31132,31137,31142],{"__ignoreMap":64},[69,31108,31109],{"class":71,"line":72},[69,31110,31111],{},"# 基于哪个镜像\n",[69,31113,31114],{"class":71,"line":79},[69,31115,31116],{},"From java:8\n",[69,31118,31119],{"class":71,"line":106},[69,31120,31121],{},"# 复制文件到容器\n",[69,31123,31124],{"class":71,"line":116},[69,31125,31126],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[69,31128,31129],{"class":71,"line":133},[69,31130,31131],{},"# 声明需要暴露的端口\n",[69,31133,31134],{"class":71,"line":139},[69,31135,31136],{},"EXPOSE 8877\n",[69,31138,31139],{"class":71,"line":401},[69,31140,31141],{},"# 配置容器启动后执行的命令\n",[69,31143,31144],{"class":71,"line":470},[69,31145,31146],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[29,31148,31149],{},"3、使用docker build命令构建镜像",[59,31151,31153],{"className":25059,"code":31152,"language":25061,"meta":64,"style":64},"docker build -t tulingmall-member:0.0.5 .\n",[66,31154,31155],{"__ignoreMap":64},[69,31156,31157,31159,31161,31163,31166],{"class":71,"line":72},[69,31158,27789],{"class":109},[69,31160,29968],{"class":1022},[69,31162,29971],{"class":90},[69,31164,31165],{"class":1022}," tulingmall-member:0.0.5",[69,31167,29977],{"class":1022},[29,31169,31170],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[29,31172,31173],{},[24,31174],{"alt":64,"src":31175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[29,31177,31178],{},"4、启动镜像，加-d可在后台启动",[59,31180,31182],{"className":25059,"code":31181,"language":25061,"meta":64,"style":64},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[66,31183,31184],{"__ignoreMap":64},[69,31185,31186,31188,31190,31192,31194,31197],{"class":71,"line":72},[69,31187,27789],{"class":109},[69,31189,28466],{"class":1022},[69,31191,31059],{"class":90},[69,31193,30452],{"class":90},[69,31195,31196],{"class":1022}," 8877:8877",[69,31198,31199],{"class":1022}," tulingmall-member:0.0.5\n",[29,31201,31202],{},"加上JVM参数：",[59,31204,31206],{"className":25059,"code":31205,"language":25061,"meta":64,"style":64},"# --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",[66,31207,31208,31213,31228,31238,31247,31254],{"__ignoreMap":64},[69,31209,31210],{"class":71,"line":72},[69,31211,31212],{"class":75},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[69,31214,31215,31217,31219,31222,31224,31226],{"class":71,"line":79},[69,31216,27789],{"class":109},[69,31218,28466],{"class":1022},[69,31220,31221],{"class":90},"  -d",[69,31223,30452],{"class":90},[69,31225,31196],{"class":1022},[69,31227,25915],{"class":90},[69,31229,31230,31232,31235],{"class":71,"line":106},[69,31231,29364],{"class":86},[69,31233,31234],{"class":1022},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[69,31236,31237],{"class":90},"  \\\n",[69,31239,31240,31242,31245],{"class":71,"line":116},[69,31241,29364],{"class":86},[69,31243,31244],{"class":1022},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[69,31246,31237],{"class":90},[69,31248,31249,31252],{"class":71,"line":133},[69,31250,31251],{"class":86},"--cap-add=SYS_PTRACE  ",[69,31253,27411],{"class":90},[69,31255,31256],{"class":71,"line":139},[69,31257,31258],{"class":86},"tulingmall-member:0.0.5\n",[29,31260,31261],{},"5、访问会员服务接口",[29,31263,31264],{},[24,31265],{"alt":64,"src":31266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23237,31268,31270],{"id":31269},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[29,31272,31273],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[29,31275,31276,31277],{},"阿里云docker镜像仓库：",[187,31278,31279],{"href":31279,"rel":31280},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[191],[29,31282,31283],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[29,31285,31286],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[29,31288,31289],{},[24,31290],{"alt":64,"src":31291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[29,31293,31294],{},"要把镜像推送到镜像仓库",[59,31296,31298],{"className":25059,"code":31297,"language":25061,"meta":64,"style":64},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[66,31299,31300],{"__ignoreMap":64},[69,31301,31302,31304,31306,31308],{"class":71,"line":72},[69,31303,27789],{"class":109},[69,31305,30133],{"class":1022},[69,31307,31165],{"class":1022},[69,31309,31310],{"class":1022}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[29,31312,31313],{},"最后将镜像推送到远程仓库",[59,31315,31317],{"className":25059,"code":31316,"language":25061,"meta":64,"style":64},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[66,31318,31319],{"__ignoreMap":64},[69,31320,31321,31323,31325],{"class":71,"line":72},[69,31322,27789],{"class":109},[69,31324,30252],{"class":1022},[69,31326,31310],{"class":1022},[1297,31328,31329],{},"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":64,"searchDepth":79,"depth":79,"links":31331},[31332,31333,31334],{"id":29719,"depth":106,"text":29720},{"id":29948,"depth":106,"text":29949},{"id":30974,"depth":106,"text":30975},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29711,"description":64},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31341,"title":31342,"body":31343,"description":64,"extension":1323,"meta":31486,"navigation":1325,"path":31487,"seo":31488,"stem":31489,"__hash__":31490},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31344,"toc":31484},[31345,31348,31353,31358,31361,31366,31371,31374,31379,31384,31387,31392,31395,31398,31401,31404,31407,31410,31430,31452,31455,31458,31478,31481],[10,31346,31342],{"id":31347},"_7vscode远程开发",[37,31349,31350],{},[40,31351,31352],{},"插件1：微软Docker工具",[29,31354,31355],{},[24,31356],{"alt":64,"src":31357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[29,31359,31360],{},"docker扩展插件已经进化为container tools了，请安装container tools",[29,31362,31363],{},[24,31364],{"alt":64,"src":31365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[37,31367,31368],{"start":79},[40,31369,31370],{},"插件2：微软Docker远程开发工具",[29,31372,31373],{},"下面这是远程开发的插件。",[29,31375,31376],{},[24,31377],{"alt":64,"src":31378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[29,31380,31381],{},[24,31382],{"alt":64,"src":31383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[29,31385,31386],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[29,31388,31389],{},[24,31390],{"alt":64,"src":31391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[29,31393,31394],{},"安装完拓展之后，vscode进行链接：",[29,31396,31397],{},"1.按ctrl+shift+p",[29,31399,31400],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[29,31402,31403],{},"3.选择目前运行的容器",[29,31405,31406],{},"4.VS Code 会在新窗口中打开并连接到容器",[29,31408,31409],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[59,31411,31413],{"className":25059,"code":31412,"language":25061,"meta":64,"style":64},"docker run -v 主机目录:容器目录 image-name\n",[66,31414,31415],{"__ignoreMap":64},[69,31416,31417,31419,31421,31424,31427],{"class":71,"line":72},[69,31418,27789],{"class":109},[69,31420,28466],{"class":1022},[69,31422,31423],{"class":90}," -v",[69,31425,31426],{"class":1022}," 主机目录:容器目录",[69,31428,31429],{"class":1022}," image-name\n",[59,31431,31433],{"className":25059,"code":31432,"language":25061,"meta":64,"style":64},"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",[66,31434,31435],{"__ignoreMap":64},[69,31436,31437,31439,31441,31444,31446,31449],{"class":71,"line":72},[69,31438,27789],{"class":109},[69,31440,28466],{"class":1022},[69,31442,31443],{"class":90}," -it",[69,31445,31423],{"class":90},[69,31447,31448],{"class":1022}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[69,31450,31451],{"class":1022}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[29,31453,31454],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[29,31456,31457],{},"查看挂载情况：",[59,31459,31461],{"className":25059,"code":31460,"language":25061,"meta":64,"style":64},"mount | grep -i project\n",[66,31462,31463],{"__ignoreMap":64},[69,31464,31465,31468,31470,31473,31475],{"class":71,"line":72},[69,31466,31467],{"class":109},"mount",[69,31469,26346],{"class":82},[69,31471,31472],{"class":109}," grep",[69,31474,27666],{"class":90},[69,31476,31477],{"class":1022}," project\n",[29,31479,31480],{},"也可以通过ls来进行查看",[1297,31482,31483],{},"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":64,"searchDepth":79,"depth":79,"links":31485},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31342,"description":64},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31492,"title":31493,"body":31494,"description":1322,"extension":1323,"meta":31498,"navigation":1325,"path":31500,"seo":31501,"stem":31502,"__hash__":31503},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31495,"toc":31496},[],{"title":64,"searchDepth":79,"depth":79,"links":31497},[],{"category":31499},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31493,"description":1322},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31505,"title":31506,"body":31507,"description":1322,"extension":1323,"meta":31511,"navigation":1325,"path":31512,"seo":31513,"stem":31514,"__hash__":31515},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31508,"toc":31509},[],{"title":64,"searchDepth":79,"depth":79,"links":31510},[],{"category":31499},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31506,"description":1322},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31517,"title":31518,"body":31519,"description":1322,"extension":1323,"meta":31812,"navigation":1325,"path":31813,"seo":31814,"stem":31815,"__hash__":31816},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31520,"toc":31810},[31521,31524,31532,31547,31552,31603,31606,31612,31799,31804,31807],[10,31522,31518],{"id":31523},"_1验证深度学习环境",[29,31525,31526,31527],{},"关于环境的安装，看",[187,31528,31531],{"href":31529,"rel":31530},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[191],"Pytorch-->深度学习",[29,31533,31534,31535,31538,31539,31542,31543,31546],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[66,31536,31537],{},"pytorch-cuda=12.4"," 是一个“ ",[195,31540,31541],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[195,31544,31545],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[29,31548,31549],{},[24,31550],{"alt":64,"src":31551},"\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",[59,31553,31555],{"className":25059,"code":31554,"language":25061,"meta":64,"style":64},"# 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",[66,31556,31557,31562],{"__ignoreMap":64},[69,31558,31559],{"class":71,"line":72},[69,31560,31561],{"class":75},"# CUDA 12.4\n",[69,31563,31564,31567,31569,31572,31575,31578,31581,31584,31586,31589,31592,31595,31598,31600],{"class":71,"line":79},[69,31565,31566],{"class":109},"conda",[69,31568,25071],{"class":1022},[69,31570,31571],{"class":1022}," pytorch==",[69,31573,31574],{"class":90},"2.5.1",[69,31576,31577],{"class":1022}," torchvision==",[69,31579,31580],{"class":90},"0.20.1",[69,31582,31583],{"class":1022}," torchaudio==",[69,31585,31574],{"class":90},[69,31587,31588],{"class":1022}," pytorch-cuda=",[69,31590,31591],{"class":90},"12.4",[69,31593,31594],{"class":90}," -c",[69,31596,31597],{"class":1022}," pytorch",[69,31599,31594],{"class":90},[69,31601,31602],{"class":1022}," nvidia\n",[29,31604,31605],{},"）：",[29,31607,31608],{},[187,31609,31610],{"href":31610,"rel":31611},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[191],[59,31613,31617],{"className":31614,"code":31615,"language":31616,"meta":64,"style":64},"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",[66,31618,31619,31624,31632,31637,31647,31663,31668,31678,31715,31722,31734,31750,31755,31765,31777,31787],{"__ignoreMap":64},[69,31620,31621],{"class":71,"line":72},[69,31622,31623],{"class":75},"# 对深度学习环境进行测试\n",[69,31625,31626,31629],{"class":71,"line":79},[69,31627,31628],{"class":82},"import",[69,31630,31631],{"class":86}," torch\n",[69,31633,31634],{"class":71,"line":106},[69,31635,31636],{"class":75},"# 查看cuda是否被激活\n",[69,31638,31639,31642,31644],{"class":71,"line":116},[69,31640,31641],{"class":86},"flag",[69,31643,1019],{"class":82},[69,31645,31646],{"class":86},"torch.cuda.is_available()\n",[69,31648,31649,31652,31654,31657,31660],{"class":71,"line":133},[69,31650,31651],{"class":90},"print",[69,31653,1398],{"class":86},[69,31655,31656],{"class":1022},"\"cuda:\"",[69,31658,31659],{"class":86},", flag)   ",[69,31661,31662],{"class":75},"#返回true的话说明被激活\n",[69,31664,31665],{"class":71,"line":139},[69,31666,31667],{"class":75},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[69,31669,31670,31673,31675],{"class":71,"line":401},[69,31671,31672],{"class":86},"ngpu",[69,31674,1019],{"class":82},[69,31676,31677],{"class":90},"1\n",[69,31679,31680,31683,31685,31688,31691,31693,31696,31699,31702,31704,31706,31708,31710,31713],{"class":71,"line":470},[69,31681,31682],{"class":86},"device",[69,31684,1019],{"class":82},[69,31686,31687],{"class":86},"torch.device(",[69,31689,31690],{"class":1022},"\"cuda:0\"",[69,31692,2949],{"class":82},[69,31694,31695],{"class":86},"(torch.cuda.is_available() ",[69,31697,31698],{"class":82},"and",[69,31700,31701],{"class":86}," ngpu",[69,31703,2346],{"class":82},[69,31705,1583],{"class":90},[69,31707,14955],{"class":86},[69,31709,2946],{"class":82},[69,31711,31712],{"class":1022}," \"cpu\"",[69,31714,1404],{"class":86},[69,31716,31717,31719],{"class":71,"line":475},[69,31718,31651],{"class":90},[69,31720,31721],{"class":86},"(device)\n",[69,31723,31724,31726,31729,31731],{"class":71,"line":482},[69,31725,31651],{"class":90},[69,31727,31728],{"class":86},"(torch.cuda.get_device_name(",[69,31730,1583],{"class":90},[69,31732,31733],{"class":86},"))\n",[69,31735,31736,31738,31741,31743,31745,31747],{"class":71,"line":497},[69,31737,31651],{"class":90},[69,31739,31740],{"class":86},"(torch.rand(",[69,31742,1465],{"class":90},[69,31744,1767],{"class":86},[69,31746,1465],{"class":90},[69,31748,31749],{"class":86},").cuda())\n",[69,31751,31752],{"class":71,"line":502},[69,31753,31754],{"class":75},"# 查看cuda和cudnn的版本\n",[69,31756,31757,31760,31762],{"class":71,"line":509},[69,31758,31759],{"class":86},"cuda_version",[69,31761,1019],{"class":82},[69,31763,31764],{"class":86},"torch.version.cuda\n",[69,31766,31767,31769,31771,31774],{"class":71,"line":524},[69,31768,31651],{"class":90},[69,31770,1398],{"class":86},[69,31772,31773],{"class":1022},"\"cuda version\"",[69,31775,31776],{"class":86},",cuda_version)\n",[69,31778,31779,31782,31784],{"class":71,"line":2888},[69,31780,31781],{"class":86},"cudnn_version",[69,31783,1019],{"class":82},[69,31785,31786],{"class":86},"torch.backends.cudnn.version()\n",[69,31788,31789,31791,31793,31796],{"class":71,"line":2893},[69,31790,31651],{"class":90},[69,31792,1398],{"class":86},[69,31794,31795],{"class":1022},"\"cudnn version\"",[69,31797,31798],{"class":86},",cudnn_version)\n",[29,31800,31801],{},[24,31802],{"alt":64,"src":31803},"\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",[29,31805,31806],{},"cuda:0 指的是一块显卡",[1297,31808,31809],{},"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":64,"searchDepth":79,"depth":79,"links":31811},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31518,"description":1322},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31818,"title":31819,"body":31820,"description":1322,"extension":1323,"meta":51624,"navigation":1325,"path":51625,"seo":51626,"stem":51627,"__hash__":51628},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31821,"toc":51618},[31822,31825,31829,31833,31836,31841,31846,31849,31854,31859,31864,31867,31871,31876,31880,31885,31888,31893,31896,31899,31902,31905,31910,31913,31918,31923,31928,31933,31936,31940,31943,31948,32552,32557,32560,32565,32568,32571,33035,33038,33041,33044,33047,35098,35101,35106,35111,35906,35909,35914,36692,36696,38355,38359,39073,39077,39081,39086,39091,39096,39099,39104,39109,39114,39119,39124,39128,39133,40415,40420,40423,40426,40429,40584,40587,40590,41806,41811,42506,42510,42514,42519,42524,42527,42532,42537,42542,42547,42552,42557,42562,42567,42572,42577,42582,42587,42592,42597,42602,42607,42612,42617,42622,42627,42632,42637,42642,42647,42652,42657,42662,42667,42672,42677,42681,42685,42688,44166,44170,45817,45821,46515,46519,46522,46525,47069,47072,47076,47079,48476,48480,48483,49061,50848,50852,50855,51615],[10,31823,31819],{"id":31824},"_2经典神经网络",[19,31826,31828],{"id":31827},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23237,31830,31832],{"id":31831},"_211原理介绍","2.1.1.原理介绍",[29,31834,31835],{},"LeNet-5",[37,31837,31838],{},[40,31839,31840],{},"原理",[29,31842,31843],{},[24,31844],{"alt":64,"src":31845},"\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",[29,31847,31848],{},"B是batch批次；C是channel通道",[37,31850,31851],{"start":79},[40,31852,31853],{},"网络参数详细",[29,31855,31856],{},[24,31857],{"alt":64,"src":31858},"\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",[29,31860,31861],{},[24,31862],{"alt":64,"src":31863},"\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",[29,31865,31866],{},"AlexNet",[37,31868,31869],{},[40,31870,31840],{},[29,31872,31873],{},[24,31874],{"alt":64,"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-006.png",[37,31877,31878],{"start":79},[40,31879,31853],{},[29,31881,31882],{},[24,31883],{"alt":64,"src":31884},"\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",[29,31886,31887],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[29,31889,31890],{},[24,31891],{"alt":64,"src":31892},"\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",[29,31894,31895],{},"数据处理中的图像增强操作:",[29,31897,31898],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[29,31900,31901],{},"①增加数据量，保证训练数据充足；②防止过拟合",[29,31903,31904],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[29,31906,31907],{},[24,31908],{"alt":64,"src":31909},"\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",[29,31911,31912],{},"提升网络精确度的方法：LRN正则化",[29,31914,31915],{},[24,31916],{"alt":64,"src":31917},"\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",[29,31919,31920],{},[24,31921],{"alt":64,"src":31922},"\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",[37,31924,31925],{"start":106},[40,31926,31927],{},"AlexNet的总结",[29,31929,31930],{},[24,31931],{"alt":64,"src":31932},"\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",[29,31934,31935],{},"比LeNet模型要深一丢丢",[23237,31937,31939],{"id":31938},"_212代码实现","2.1.2.代码实现",[29,31941,31942],{},"（1）LeNet",[37,31944,31945],{},[40,31946,31947],{},"模型搭建",[59,31949,31951],{"className":31614,"code":31950,"language":31616,"meta":64,"style":64},"# 导入库\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",[66,31952,31953,31958,31964,31969,31982,31987,31999,32003,32023,32028,32033,32044,32049,32068,32072,32077,32126,32138,32143,32172,32207,32234,32239,32251,32256,32276,32295,32314,32318,32323,32333,32350,32361,32376,32387,32398,32413,32428,32439,32446,32450,32464,32469,32492,32497,32502,32507,32511,32516,32521,32531],{"__ignoreMap":64},[69,31954,31955],{"class":71,"line":72},[69,31956,31957],{"class":75},"# 导入库\n",[69,31959,31960,31962],{"class":71,"line":79},[69,31961,31628],{"class":82},[69,31963,31631],{"class":86},[69,31965,31966],{"class":71,"line":106},[69,31967,31968],{"class":75},"# 导入神经网络层\n",[69,31970,31971,31974,31977,31979],{"class":71,"line":116},[69,31972,31973],{"class":82},"from",[69,31975,31976],{"class":86}," torch ",[69,31978,31628],{"class":82},[69,31980,31981],{"class":86}," nn\n",[69,31983,31984],{"class":71,"line":133},[69,31985,31986],{"class":75},"# 导入展示神经网络参数的包\n",[69,31988,31989,31991,31994,31996],{"class":71,"line":139},[69,31990,31973],{"class":82},[69,31992,31993],{"class":86}," torchsummary ",[69,31995,31628],{"class":82},[69,31997,31998],{"class":86}," summary\n",[69,32000,32001],{"class":71,"line":401},[69,32002,3644],{"emptyLinePlaceholder":1325},[69,32004,32005,32007,32010,32012,32015,32017,32020],{"class":71,"line":470},[69,32006,15934],{"class":82},[69,32008,32009],{"class":109}," LeNet",[69,32011,1398],{"class":86},[69,32013,32014],{"class":109},"nn",[69,32016,1946],{"class":86},[69,32018,32019],{"class":109},"Module",[69,32021,32022],{"class":86},"):\n",[69,32024,32025],{"class":71,"line":475},[69,32026,32027],{"class":75},"    # 模型初始化:\n",[69,32029,32030],{"class":71,"line":482},[69,32031,32032],{"class":75},"    # 定义一些网络层和激活函数\n",[69,32034,32035,32038,32041],{"class":71,"line":497},[69,32036,32037],{"class":82},"    def",[69,32039,32040],{"class":90}," __init__",[69,32042,32043],{"class":86},"(self):\n",[69,32045,32046],{"class":71,"line":502},[69,32047,32048],{"class":75},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[69,32050,32051,32054,32057,32060,32063,32066],{"class":71,"line":509},[69,32052,32053],{"class":90},"        super",[69,32055,32056],{"class":86},"(LeNet,",[69,32058,32059],{"class":90},"self",[69,32061,32062],{"class":86},").",[69,32064,32065],{"class":90},"__init__",[69,32067,3220],{"class":86},[69,32069,32070],{"class":71,"line":524},[69,32071,3644],{"emptyLinePlaceholder":1325},[69,32073,32074],{"class":71,"line":2888},[69,32075,32076],{"class":75},"        # 定义网络层\n",[69,32078,32079,32082,32085,32087,32090,32093,32095,32097,32099,32102,32104,32106,32108,32111,32113,32115,32117,32120,32122,32124],{"class":71,"line":2893},[69,32080,32081],{"class":90},"        self",[69,32083,32084],{"class":86},".c1",[69,32086,1019],{"class":82},[69,32088,32089],{"class":86},"nn.Conv2d(",[69,32091,32092],{"class":6458},"in_channels",[69,32094,1019],{"class":82},[69,32096,1609],{"class":90},[69,32098,1767],{"class":86},[69,32100,32101],{"class":6458},"out_channels",[69,32103,1019],{"class":82},[69,32105,1733],{"class":90},[69,32107,1767],{"class":86},[69,32109,32110],{"class":6458},"kernel_size",[69,32112,1019],{"class":82},[69,32114,1709],{"class":90},[69,32116,1767],{"class":86},[69,32118,32119],{"class":6458},"padding",[69,32121,1019],{"class":82},[69,32123,1471],{"class":90},[69,32125,1404],{"class":86},[69,32127,32128,32130,32133,32135],{"class":71,"line":2899},[69,32129,32081],{"class":90},[69,32131,32132],{"class":86},".sig",[69,32134,1019],{"class":82},[69,32136,32137],{"class":86},"nn.Sigmoid()\n",[69,32139,32140],{"class":71,"line":2919},[69,32141,32142],{"class":75},"        # 定义池化\n",[69,32144,32145,32147,32150,32152,32155,32157,32159,32161,32163,32166,32168,32170],{"class":71,"line":2924},[69,32146,32081],{"class":90},[69,32148,32149],{"class":86},".s2",[69,32151,1019],{"class":82},[69,32153,32154],{"class":86},"nn.AvgPool2d(",[69,32156,32110],{"class":6458},[69,32158,1019],{"class":82},[69,32160,1471],{"class":90},[69,32162,1767],{"class":86},[69,32164,32165],{"class":6458},"stride",[69,32167,1019],{"class":82},[69,32169,1471],{"class":90},[69,32171,1404],{"class":86},[69,32173,32174,32176,32179,32181,32183,32185,32187,32189,32191,32193,32195,32197,32199,32201,32203,32205],{"class":71,"line":2938},[69,32175,32081],{"class":90},[69,32177,32178],{"class":86},".c3",[69,32180,1019],{"class":82},[69,32182,32089],{"class":86},[69,32184,32092],{"class":6458},[69,32186,1019],{"class":82},[69,32188,1733],{"class":90},[69,32190,1767],{"class":86},[69,32192,32101],{"class":6458},[69,32194,1019],{"class":82},[69,32196,691],{"class":90},[69,32198,1767],{"class":86},[69,32200,32110],{"class":6458},[69,32202,1019],{"class":82},[69,32204,1709],{"class":90},[69,32206,1404],{"class":86},[69,32208,32209,32211,32214,32216,32218,32220,32222,32224,32226,32228,32230,32232],{"class":71,"line":2943},[69,32210,32081],{"class":90},[69,32212,32213],{"class":86},".s4",[69,32215,1019],{"class":82},[69,32217,32154],{"class":86},[69,32219,32110],{"class":6458},[69,32221,1019],{"class":82},[69,32223,1471],{"class":90},[69,32225,1767],{"class":86},[69,32227,32165],{"class":6458},[69,32229,1019],{"class":82},[69,32231,1471],{"class":90},[69,32233,1404],{"class":86},[69,32235,32236],{"class":71,"line":2972},[69,32237,32238],{"class":75},"        # 定义平展层\n",[69,32240,32241,32243,32246,32248],{"class":71,"line":2977},[69,32242,32081],{"class":90},[69,32244,32245],{"class":86},".flatten",[69,32247,1019],{"class":82},[69,32249,32250],{"class":86},"nn.Flatten()\n",[69,32252,32253],{"class":71,"line":2994},[69,32254,32255],{"class":75},"        # 定义全连接层\n",[69,32257,32258,32260,32263,32265,32268,32270,32272,32274],{"class":71,"line":2999},[69,32259,32081],{"class":90},[69,32261,32262],{"class":86},".f5",[69,32264,1019],{"class":82},[69,32266,32267],{"class":86},"nn.Linear(",[69,32269,5231],{"class":90},[69,32271,1767],{"class":86},[69,32273,2204],{"class":90},[69,32275,1404],{"class":86},[69,32277,32278,32280,32283,32285,32287,32289,32291,32293],{"class":71,"line":3004},[69,32279,32081],{"class":90},[69,32281,32282],{"class":86},".f6",[69,32284,1019],{"class":82},[69,32286,32267],{"class":86},[69,32288,2204],{"class":90},[69,32290,1767],{"class":86},[69,32292,2098],{"class":90},[69,32294,1404],{"class":86},[69,32296,32297,32299,32302,32304,32306,32308,32310,32312],{"class":71,"line":3009},[69,32298,32081],{"class":90},[69,32300,32301],{"class":86},".f7",[69,32303,1019],{"class":82},[69,32305,32267],{"class":86},[69,32307,2098],{"class":90},[69,32309,1767],{"class":86},[69,32311,390],{"class":90},[69,32313,1404],{"class":86},[69,32315,32316],{"class":71,"line":3023},[69,32317,3644],{"emptyLinePlaceholder":1325},[69,32319,32320],{"class":71,"line":3028},[69,32321,32322],{"class":75},"    # 写工具->写前向传播\n",[69,32324,32325,32327,32330],{"class":71,"line":3821},[69,32326,32037],{"class":82},[69,32328,32329],{"class":109}," forward",[69,32331,32332],{"class":86},"(self,x):\n",[69,32334,32335,32338,32340,32342,32345,32347],{"class":71,"line":3835},[69,32336,32337],{"class":86},"        x",[69,32339,1019],{"class":82},[69,32341,32059],{"class":90},[69,32343,32344],{"class":86},".sig(",[69,32346,32059],{"class":90},[69,32348,32349],{"class":86},".c1(x))\n",[69,32351,32352,32354,32356,32358],{"class":71,"line":3843},[69,32353,32337],{"class":86},[69,32355,1019],{"class":82},[69,32357,32059],{"class":90},[69,32359,32360],{"class":86},".s2(x)\n",[69,32362,32363,32365,32367,32369,32371,32373],{"class":71,"line":3848},[69,32364,32337],{"class":86},[69,32366,1019],{"class":82},[69,32368,32059],{"class":90},[69,32370,32344],{"class":86},[69,32372,32059],{"class":90},[69,32374,32375],{"class":86},".c3(x))\n",[69,32377,32378,32380,32382,32384],{"class":71,"line":3854},[69,32379,32337],{"class":86},[69,32381,1019],{"class":82},[69,32383,32059],{"class":90},[69,32385,32386],{"class":86},".s4(x)\n",[69,32388,32389,32391,32393,32395],{"class":71,"line":3860},[69,32390,32337],{"class":86},[69,32392,1019],{"class":82},[69,32394,32059],{"class":90},[69,32396,32397],{"class":86},".flatten(x)\n",[69,32399,32400,32402,32404,32406,32408,32410],{"class":71,"line":3865},[69,32401,32337],{"class":86},[69,32403,1019],{"class":82},[69,32405,32059],{"class":90},[69,32407,32344],{"class":86},[69,32409,32059],{"class":90},[69,32411,32412],{"class":86},".f5(x))\n",[69,32414,32415,32417,32419,32421,32423,32425],{"class":71,"line":9190},[69,32416,32337],{"class":86},[69,32418,1019],{"class":82},[69,32420,32059],{"class":90},[69,32422,32344],{"class":86},[69,32424,32059],{"class":90},[69,32426,32427],{"class":86},".f6(x))\n",[69,32429,32430,32432,32434,32436],{"class":71,"line":9214},[69,32431,32337],{"class":86},[69,32433,1019],{"class":82},[69,32435,32059],{"class":90},[69,32437,32438],{"class":86},".f7(x)\n",[69,32440,32441,32443],{"class":71,"line":9219},[69,32442,15992],{"class":82},[69,32444,32445],{"class":86}," x\n",[69,32447,32448],{"class":71,"line":9225},[69,32449,3644],{"emptyLinePlaceholder":1325},[69,32451,32452,32454,32457,32459,32462],{"class":71,"line":9252},[69,32453,2782],{"class":82},[69,32455,32456],{"class":90}," __name__",[69,32458,4193],{"class":82},[69,32460,32461],{"class":1022},"\"__main__\"",[69,32463,4983],{"class":86},[69,32465,32466],{"class":71,"line":9257},[69,32467,32468],{"class":75},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[69,32470,32471,32474,32476,32478,32481,32483,32486,32488,32490],{"class":71,"line":9263},[69,32472,32473],{"class":86},"    device",[69,32475,1019],{"class":82},[69,32477,31687],{"class":86},[69,32479,32480],{"class":1022},"\"cuda\"",[69,32482,2949],{"class":82},[69,32484,32485],{"class":86}," torch.cuda.is_available() ",[69,32487,2946],{"class":82},[69,32489,31712],{"class":1022},[69,32491,1404],{"class":86},[69,32493,32494],{"class":71,"line":9275},[69,32495,32496],{"class":75},"    # 如果就是想指定用cpu用下方代码:\n",[69,32498,32499],{"class":71,"line":9287},[69,32500,32501],{"class":75},"    # device=\"cpu\"\n",[69,32503,32504],{"class":71,"line":9299},[69,32505,32506],{"class":75},"    # print(device)\n",[69,32508,32509],{"class":71,"line":10958},[69,32510,3644],{"emptyLinePlaceholder":1325},[69,32512,32513],{"class":71,"line":10983},[69,32514,32515],{"class":75},"    # 实例化模型\n",[69,32517,32518],{"class":71,"line":11006},[69,32519,32520],{"class":75},"    # 将模型放到设备中去运行\n",[69,32522,32523,32526,32528],{"class":71,"line":11030},[69,32524,32525],{"class":86},"    model",[69,32527,1019],{"class":82},[69,32529,32530],{"class":86},"LeNet().to(device)\n",[69,32532,32533,32536,32539,32541,32543,32545,32547,32549],{"class":71,"line":11035},[69,32534,32535],{"class":90},"    print",[69,32537,32538],{"class":86},"(summary(model,(",[69,32540,1609],{"class":90},[69,32542,1767],{"class":86},[69,32544,2288],{"class":90},[69,32546,1767],{"class":86},[69,32548,2288],{"class":90},[69,32550,32551],{"class":86},")))\n",[29,32553,32554],{},[24,32555],{"alt":64,"src":32556},"\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",[29,32558,32559],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[37,32561,32562],{"start":79},[40,32563,32564],{},"训练",[29,32566,32567],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[29,32569,32570],{},"在训练之前可以将数据展示看一下",[59,32572,32574],{"className":31614,"code":32573,"language":31616,"meta":64,"style":64},"# 建立画图的函数，用于展示数据\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",[66,32575,32576,32581,32586,32598,32610,32623,32628,32640,32645,32657,32662,32674,32678,32682,32703,32715,32720,32741,32752,32756,32761,32779,32790,32795,32806,32811,32822,32826,32831,32846,32859,32864,32869,32882,32895,32908,32913,32917,32922,32942,32959,32979,32992,33005,33015,33030],{"__ignoreMap":64},[69,32577,32578],{"class":71,"line":72},[69,32579,32580],{"class":75},"# 建立画图的函数，用于展示数据\n",[69,32582,32583],{"class":71,"line":79},[69,32584,32585],{"class":75},"# torchvision中包含很多内置的数据集\n",[69,32587,32588,32590,32593,32595],{"class":71,"line":106},[69,32589,31973],{"class":82},[69,32591,32592],{"class":86}," sklearn.externals.array_api_compat.torch ",[69,32594,31628],{"class":82},[69,32596,32597],{"class":86}," squeeze\n",[69,32599,32600,32602,32605,32607],{"class":71,"line":116},[69,32601,31973],{"class":82},[69,32603,32604],{"class":86}," torchvision.datasets ",[69,32606,31628],{"class":82},[69,32608,32609],{"class":86}," FashionMNIST\n",[69,32611,32612,32614,32617,32620],{"class":71,"line":133},[69,32613,31628],{"class":82},[69,32615,32616],{"class":86}," numpy ",[69,32618,32619],{"class":82},"as",[69,32621,32622],{"class":86}," np\n",[69,32624,32625],{"class":71,"line":139},[69,32626,32627],{"class":75},"# 引入处理数据集的包\n",[69,32629,32630,32632,32635,32637],{"class":71,"line":401},[69,32631,31973],{"class":82},[69,32633,32634],{"class":86}," torchvision ",[69,32636,31628],{"class":82},[69,32638,32639],{"class":86}," transforms\n",[69,32641,32642],{"class":71,"line":470},[69,32643,32644],{"class":75},"# 从torch库中引入数据处理的包\n",[69,32646,32647,32649,32652,32654],{"class":71,"line":475},[69,32648,31628],{"class":82},[69,32650,32651],{"class":86}," torch.utils.data ",[69,32653,32619],{"class":82},[69,32655,32656],{"class":86}," Data\n",[69,32658,32659],{"class":71,"line":482},[69,32660,32661],{"class":75},"# 导入画图的库\n",[69,32663,32664,32666,32669,32671],{"class":71,"line":497},[69,32665,31628],{"class":82},[69,32667,32668],{"class":86}," matplotlib.pyplot ",[69,32670,32619],{"class":82},[69,32672,32673],{"class":86}," plt\n",[69,32675,32676],{"class":71,"line":502},[69,32677,3644],{"emptyLinePlaceholder":1325},[69,32679,32680],{"class":71,"line":509},[69,32681,3644],{"emptyLinePlaceholder":1325},[69,32683,32684,32687,32689,32692,32695,32697,32700],{"class":71,"line":524},[69,32685,32686],{"class":86},"train_data",[69,32688,1019],{"class":82},[69,32690,32691],{"class":86},"FashionMNIST(",[69,32693,32694],{"class":6458},"root",[69,32696,1019],{"class":82},[69,32698,32699],{"class":1022},"'.\u002Fdata'",[69,32701,32702],{"class":86},",\n",[69,32704,32705,32708,32710,32713],{"class":71,"line":2888},[69,32706,32707],{"class":6458},"                        train",[69,32709,1019],{"class":82},[69,32711,32712],{"class":90},"True",[69,32714,32702],{"class":86},[69,32716,32717],{"class":71,"line":2893},[69,32718,32719],{"class":75},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[69,32721,32722,32725,32727,32730,32733,32735,32738],{"class":71,"line":2899},[69,32723,32724],{"class":6458},"                        transform",[69,32726,1019],{"class":82},[69,32728,32729],{"class":86},"transforms.Compose([transforms.Resize(",[69,32731,32732],{"class":6458},"size",[69,32734,1019],{"class":82},[69,32736,32737],{"class":90},"224",[69,32739,32740],{"class":86},"),transforms.ToTensor()]),\n",[69,32742,32743,32746,32748,32750],{"class":71,"line":2919},[69,32744,32745],{"class":6458},"                        download",[69,32747,1019],{"class":82},[69,32749,32712],{"class":90},[69,32751,1404],{"class":86},[69,32753,32754],{"class":71,"line":2924},[69,32755,3644],{"emptyLinePlaceholder":1325},[69,32757,32758],{"class":71,"line":2938},[69,32759,32760],{"class":75},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[69,32762,32763,32766,32768,32771,32774,32776],{"class":71,"line":2943},[69,32764,32765],{"class":86},"train_loader",[69,32767,1019],{"class":82},[69,32769,32770],{"class":86},"Data.DataLoader(",[69,32772,32773],{"class":6458},"dataset",[69,32775,1019],{"class":82},[69,32777,32778],{"class":86},"train_data,\n",[69,32780,32781,32784,32786,32788],{"class":71,"line":2972},[69,32782,32783],{"class":6458},"                             batch_size",[69,32785,1019],{"class":82},[69,32787,1595],{"class":90},[69,32789,32702],{"class":86},[69,32791,32792],{"class":71,"line":2977},[69,32793,32794],{"class":75},"                             # 数据是否打乱\n",[69,32796,32797,32800,32802,32804],{"class":71,"line":2994},[69,32798,32799],{"class":6458},"                             shuffle",[69,32801,1019],{"class":82},[69,32803,32712],{"class":90},[69,32805,32702],{"class":86},[69,32807,32808],{"class":71,"line":2999},[69,32809,32810],{"class":75},"                             # 规定加载数据的进程\n",[69,32812,32813,32816,32818,32820],{"class":71,"line":3004},[69,32814,32815],{"class":6458},"                             num_workers",[69,32817,1019],{"class":82},[69,32819,1583],{"class":90},[69,32821,1404],{"class":86},[69,32823,32824],{"class":71,"line":3009},[69,32825,3644],{"emptyLinePlaceholder":1325},[69,32827,32828],{"class":71,"line":3023},[69,32829,32830],{"class":75},"# 获得一个batch的数据\n",[69,32832,32833,32835,32838,32840,32843],{"class":71,"line":3028},[69,32834,4269],{"class":82},[69,32836,32837],{"class":86}," step,(b_x,b_y) ",[69,32839,27280],{"class":82},[69,32841,32842],{"class":90}," enumerate",[69,32844,32845],{"class":86},"(train_loader):\n",[69,32847,32848,32850,32853,32855,32857],{"class":71,"line":3821},[69,32849,4345],{"class":82},[69,32851,32852],{"class":86}," step ",[69,32854,2346],{"class":82},[69,32856,5337],{"class":90},[69,32858,4983],{"class":86},[69,32860,32861],{"class":71,"line":3835},[69,32862,32863],{"class":82},"        break\n",[69,32865,32866],{"class":71,"line":3843},[69,32867,32868],{"class":75},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[69,32870,32871,32874,32876,32879],{"class":71,"line":3848},[69,32872,32873],{"class":86},"batch_x",[69,32875,1019],{"class":82},[69,32877,32878],{"class":86},"b_x.squeeze().numpy()  ",[69,32880,32881],{"class":75},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[69,32883,32884,32887,32889,32892],{"class":71,"line":3854},[69,32885,32886],{"class":86},"batch_y",[69,32888,1019],{"class":82},[69,32890,32891],{"class":86},"b_y.numpy()   ",[69,32893,32894],{"class":75},"#将张量转换成功numpy数组\n",[69,32896,32897,32900,32902,32905],{"class":71,"line":3860},[69,32898,32899],{"class":86},"class_label",[69,32901,1019],{"class":82},[69,32903,32904],{"class":86},"train_data.classes  ",[69,32906,32907],{"class":75},"#训练集标签\n",[69,32909,32910],{"class":71,"line":3865},[69,32911,32912],{"class":75},"# print(class_label)\n",[69,32914,32915],{"class":71,"line":9190},[69,32916,3644],{"emptyLinePlaceholder":1325},[69,32918,32919],{"class":71,"line":9214},[69,32920,32921],{"class":75},"# 可视化一个batch的图像\n",[69,32923,32924,32927,32930,32932,32934,32936,32938,32940],{"class":71,"line":9219},[69,32925,32926],{"class":86},"plt.figure(",[69,32928,32929],{"class":6458},"figsize",[69,32931,1019],{"class":82},[69,32933,1398],{"class":86},[69,32935,1886],{"class":90},[69,32937,1767],{"class":86},[69,32939,1709],{"class":90},[69,32941,31733],{"class":86},[69,32943,32944,32946,32949,32951,32954,32956],{"class":71,"line":9225},[69,32945,4269],{"class":82},[69,32947,32948],{"class":86}," ii ",[69,32950,27280],{"class":82},[69,32952,32953],{"class":86}," np.arange(",[69,32955,8600],{"class":90},[69,32957,32958],{"class":86},"(batch_y)):\n",[69,32960,32961,32964,32966,32968,32970,32973,32975,32977],{"class":71,"line":9252},[69,32962,32963],{"class":86},"    plt.subplot(",[69,32965,1684],{"class":90},[69,32967,1767],{"class":86},[69,32969,691],{"class":90},[69,32971,32972],{"class":86},",ii ",[69,32974,1869],{"class":82},[69,32976,26355],{"class":90},[69,32978,1404],{"class":86},[69,32980,32981,32984,32987,32989],{"class":71,"line":9257},[69,32982,32983],{"class":86},"    plt.imshow(batch_x[ii,:,:],",[69,32985,32986],{"class":6458},"cmap",[69,32988,1019],{"class":82},[69,32990,32991],{"class":86},"plt.cm.gray)\n",[69,32993,32994,32997,32999,33001,33003],{"class":71,"line":9263},[69,32995,32996],{"class":86},"    plt.title(class_label[batch_y[ii]],",[69,32998,32732],{"class":6458},[69,33000,1019],{"class":82},[69,33002,390],{"class":90},[69,33004,1404],{"class":86},[69,33006,33007,33010,33013],{"class":71,"line":9275},[69,33008,33009],{"class":86},"    plt.axis(",[69,33011,33012],{"class":1022},"\"off\"",[69,33014,1404],{"class":86},[69,33016,33017,33020,33023,33025,33028],{"class":71,"line":9287},[69,33018,33019],{"class":86},"    plt.subplots_adjust(",[69,33021,33022],{"class":6458},"wspace",[69,33024,1019],{"class":82},[69,33026,33027],{"class":90},"0.05",[69,33029,1404],{"class":86},[69,33031,33032],{"class":71,"line":9299},[69,33033,33034],{"class":86},"plt.show()\n",[29,33036,33037],{},"用matplotlib进行展示的过程可以后续再补",[29,33039,33040],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[29,33042,33043],{},"训练次数就是按照批次过整个训练集数据的次数",[29,33045,33046],{},"模型训练：",[59,33048,33050],{"className":31614,"code":33049,"language":31616,"meta":64,"style":64},"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",[66,33051,33052,33059,33066,33070,33082,33088,33099,33109,33119,33129,33139,33144,33156,33166,33170,33174,33179,33190,33203,33214,33231,33242,33281,33297,33309,33320,33325,33336,33352,33363,33374,33385,33392,33396,33401,33406,33410,33415,33425,33446,33450,33454,33459,33464,33469,33489,33493,33498,33508,33512,33517,33526,33531,33536,33541,33551,33555,33559,33564,33569,33579,33584,33594,33599,33608,33613,33622,33627,33636,33640,33645,33655,33659,33663,33668,33683,33711,33726,33730,33735,33740,33749,33754,33763,33768,33777,33782,33791,33796,33805,33810,33819,33824,33837,33842,33852,33857,33867,33873,33879,33885,33891,33902,33908,33928,33934,33945,33951,33957,33963,33969,33975,33981,33987,34007,34013,34029,34035,34049,34055,34070,34076,34085,34091,34100,34106,34112,34121,34127,34138,34144,34163,34169,34180,34186,34206,34222,34228,34242,34248,34254,34265,34271,34277,34287,34293,34304,34310,34320,34325,34331,34380,34427,34432,34438,34457,34463,34483,34489,34495,34505,34510,34516,34532,34577,34583,34589,34595,34606,34612,34618,34624,34642,34656,34665,34674,34683,34692,34698,34704,34712,34717,34723,34734,34740,34760,34766,34772,34778,34795,34801,34807,34813,34819,34825,34852,34876,34882,34888,34894,34905,34916,34922,34939,34962,34985,34991,34996,35005,35015,35021,35026,35032,35045,35051,35062,35073,35092],{"__ignoreMap":64},[69,33053,33054,33056],{"class":71,"line":72},[69,33055,31628],{"class":82},[69,33057,33058],{"class":86}," copy\n",[69,33060,33061,33063],{"class":71,"line":79},[69,33062,31628],{"class":82},[69,33064,33065],{"class":86}," time\n",[69,33067,33068],{"class":71,"line":106},[69,33069,3644],{"emptyLinePlaceholder":1325},[69,33071,33072,33074,33077,33079],{"class":71,"line":116},[69,33073,31628],{"class":82},[69,33075,33076],{"class":86}," pandas ",[69,33078,32619],{"class":82},[69,33080,33081],{"class":86}," pd\n",[69,33083,33084,33086],{"class":71,"line":133},[69,33085,31628],{"class":82},[69,33087,31631],{"class":86},[69,33089,33090,33092,33094,33096],{"class":71,"line":139},[69,33091,31973],{"class":82},[69,33093,32651],{"class":86},[69,33095,31628],{"class":82},[69,33097,33098],{"class":86}," Dataset\n",[69,33100,33101,33103,33105,33107],{"class":71,"line":401},[69,33102,31973],{"class":82},[69,33104,32604],{"class":86},[69,33106,31628],{"class":82},[69,33108,32609],{"class":86},[69,33110,33111,33113,33115,33117],{"class":71,"line":470},[69,33112,31973],{"class":82},[69,33114,32634],{"class":86},[69,33116,31628],{"class":82},[69,33118,32639],{"class":86},[69,33120,33121,33123,33125,33127],{"class":71,"line":475},[69,33122,31628],{"class":82},[69,33124,32651],{"class":86},[69,33126,32619],{"class":82},[69,33128,32656],{"class":86},[69,33130,33131,33133,33135,33137],{"class":71,"line":482},[69,33132,31628],{"class":82},[69,33134,32668],{"class":86},[69,33136,32619],{"class":82},[69,33138,32673],{"class":86},[69,33140,33141],{"class":71,"line":497},[69,33142,33143],{"class":75},"# 导入模型\n",[69,33145,33146,33148,33151,33153],{"class":71,"line":502},[69,33147,31973],{"class":82},[69,33149,33150],{"class":86}," model ",[69,33152,31628],{"class":82},[69,33154,33155],{"class":86}," LeNet\n",[69,33157,33158,33160,33162,33164],{"class":71,"line":509},[69,33159,31973],{"class":82},[69,33161,31976],{"class":86},[69,33163,31628],{"class":82},[69,33165,31981],{"class":86},[69,33167,33168],{"class":71,"line":524},[69,33169,3644],{"emptyLinePlaceholder":1325},[69,33171,33172],{"class":71,"line":2888},[69,33173,3644],{"emptyLinePlaceholder":1325},[69,33175,33176],{"class":71,"line":2893},[69,33177,33178],{"class":75},"# 处理训练集与验证集函数--->划分数据集\n",[69,33180,33181,33184,33187],{"class":71,"line":2899},[69,33182,33183],{"class":82},"def",[69,33185,33186],{"class":109}," train_val_data_process",[69,33188,33189],{"class":86},"():\n",[69,33191,33192,33195,33197,33199,33201],{"class":71,"line":2919},[69,33193,33194],{"class":86},"    train_data",[69,33196,1019],{"class":82},[69,33198,32691],{"class":86},[69,33200,32699],{"class":1022},[69,33202,32702],{"class":86},[69,33204,33205,33208,33210,33212],{"class":71,"line":2924},[69,33206,33207],{"class":6458},"                            train",[69,33209,1019],{"class":82},[69,33211,32712],{"class":90},[69,33213,32702],{"class":86},[69,33215,33216,33219,33221,33223,33225,33227,33229],{"class":71,"line":2938},[69,33217,33218],{"class":6458},"                            transform",[69,33220,1019],{"class":82},[69,33222,32729],{"class":86},[69,33224,32732],{"class":6458},[69,33226,1019],{"class":82},[69,33228,2288],{"class":90},[69,33230,32740],{"class":86},[69,33232,33233,33236,33238,33240],{"class":71,"line":2943},[69,33234,33235],{"class":6458},"                            download",[69,33237,1019],{"class":82},[69,33239,32712],{"class":90},[69,33241,1404],{"class":86},[69,33243,33244,33247,33249,33252,33255,33257,33260,33262,33264,33267,33269,33271,33274,33276,33278],{"class":71,"line":2972},[69,33245,33246],{"class":86},"    train_data,val_data",[69,33248,1019],{"class":82},[69,33250,33251],{"class":86},"Data.random_split(train_data,[",[69,33253,33254],{"class":90},"round",[69,33256,1398],{"class":86},[69,33258,33259],{"class":90},"0.8",[69,33261,1843],{"class":82},[69,33263,8600],{"class":90},[69,33265,33266],{"class":86},"(train_data)),",[69,33268,33254],{"class":90},[69,33270,1398],{"class":86},[69,33272,33273],{"class":90},"0.2",[69,33275,1843],{"class":82},[69,33277,8600],{"class":90},[69,33279,33280],{"class":86},"(train_data))])\n",[69,33282,33283,33286,33288,33291,33293,33295],{"class":71,"line":2977},[69,33284,33285],{"class":86},"    train_dataloader ",[69,33287,1019],{"class":82},[69,33289,33290],{"class":86}," Data.DataLoader(",[69,33292,32773],{"class":6458},[69,33294,1019],{"class":82},[69,33296,32778],{"class":86},[69,33298,33299,33302,33304,33307],{"class":71,"line":2994},[69,33300,33301],{"class":6458},"                                       batch_size",[69,33303,1019],{"class":82},[69,33305,33306],{"class":90},"128",[69,33308,32702],{"class":86},[69,33310,33311,33314,33316,33318],{"class":71,"line":2999},[69,33312,33313],{"class":6458},"                                       shuffle",[69,33315,1019],{"class":82},[69,33317,32712],{"class":90},[69,33319,32702],{"class":86},[69,33321,33322],{"class":71,"line":3004},[69,33323,33324],{"class":75},"                                       # 规定8个进程\n",[69,33326,33327,33330,33332,33334],{"class":71,"line":3009},[69,33328,33329],{"class":6458},"                                       num_workers",[69,33331,1019],{"class":82},[69,33333,1784],{"class":90},[69,33335,1404],{"class":86},[69,33337,33338,33341,33343,33345,33347,33349],{"class":71,"line":3023},[69,33339,33340],{"class":86},"    val_dataloader",[69,33342,1019],{"class":82},[69,33344,32770],{"class":86},[69,33346,32773],{"class":6458},[69,33348,1019],{"class":82},[69,33350,33351],{"class":86},"val_data,\n",[69,33353,33354,33357,33359,33361],{"class":71,"line":3028},[69,33355,33356],{"class":6458},"                                   batch_size",[69,33358,1019],{"class":82},[69,33360,33306],{"class":90},[69,33362,32702],{"class":86},[69,33364,33365,33368,33370,33372],{"class":71,"line":3821},[69,33366,33367],{"class":6458},"                                   shuffle",[69,33369,1019],{"class":82},[69,33371,32712],{"class":90},[69,33373,32702],{"class":86},[69,33375,33376,33379,33381,33383],{"class":71,"line":3835},[69,33377,33378],{"class":6458},"                                   num_workers",[69,33380,1019],{"class":82},[69,33382,1784],{"class":90},[69,33384,1404],{"class":86},[69,33386,33387,33389],{"class":71,"line":3843},[69,33388,5334],{"class":82},[69,33390,33391],{"class":86}," train_dataloader,val_dataloader\n",[69,33393,33394],{"class":71,"line":3848},[69,33395,3644],{"emptyLinePlaceholder":1325},[69,33397,33398],{"class":71,"line":3854},[69,33399,33400],{"class":75},"# 验证是否出错\n",[69,33402,33403],{"class":71,"line":3860},[69,33404,33405],{"class":75},"# train_val_data_process()\n",[69,33407,33408],{"class":71,"line":3865},[69,33409,3644],{"emptyLinePlaceholder":1325},[69,33411,33412],{"class":71,"line":9190},[69,33413,33414],{"class":75},"# 定义模型训练函数\n",[69,33416,33417,33419,33422],{"class":71,"line":9214},[69,33418,33183],{"class":82},[69,33420,33421],{"class":109}," train_model_process",[69,33423,33424],{"class":86},"(model,train_dataloader,val_dataloader,num_epochs):\n",[69,33426,33427,33429,33431,33433,33435,33437,33439,33441,33444],{"class":71,"line":9219},[69,33428,32473],{"class":86},[69,33430,1019],{"class":82},[69,33432,31687],{"class":86},[69,33434,32480],{"class":1022},[69,33436,2949],{"class":82},[69,33438,32485],{"class":86},[69,33440,2946],{"class":82},[69,33442,33443],{"class":1022}," 'cpu'",[69,33445,1404],{"class":86},[69,33447,33448],{"class":71,"line":9225},[69,33449,3644],{"emptyLinePlaceholder":1325},[69,33451,33452],{"class":71,"line":9252},[69,33453,3644],{"emptyLinePlaceholder":1325},[69,33455,33456],{"class":71,"line":9257},[69,33457,33458],{"class":75},"    # 定义优化器\n",[69,33460,33461],{"class":71,"line":9263},[69,33462,33463],{"class":75},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[69,33465,33466],{"class":71,"line":9275},[69,33467,33468],{"class":75},"    # lr为学习率\n",[69,33470,33471,33474,33476,33479,33482,33484,33487],{"class":71,"line":9287},[69,33472,33473],{"class":86},"    optimizer",[69,33475,1019],{"class":82},[69,33477,33478],{"class":86},"torch.optim.Adam(model.parameters(),",[69,33480,33481],{"class":6458},"lr",[69,33483,1019],{"class":82},[69,33485,33486],{"class":90},"0.001",[69,33488,1404],{"class":86},[69,33490,33491],{"class":71,"line":9299},[69,33492,3644],{"emptyLinePlaceholder":1325},[69,33494,33495],{"class":71,"line":10958},[69,33496,33497],{"class":75},"    # 定义损失函数使用交叉熵损失函数\n",[69,33499,33500,33503,33505],{"class":71,"line":10983},[69,33501,33502],{"class":86},"    criterion",[69,33504,1019],{"class":82},[69,33506,33507],{"class":86},"nn.CrossEntropyLoss()\n",[69,33509,33510],{"class":71,"line":11006},[69,33511,3644],{"emptyLinePlaceholder":1325},[69,33513,33514],{"class":71,"line":11030},[69,33515,33516],{"class":75},"    # 将模型放到GPU中进行训练\n",[69,33518,33519,33521,33523],{"class":71,"line":11035},[69,33520,32525],{"class":86},[69,33522,1019],{"class":82},[69,33524,33525],{"class":86},"model.to(device)\n",[69,33527,33528],{"class":71,"line":11040},[69,33529,33530],{"class":75},"    # 复制当前模型的参数\n",[69,33532,33533],{"class":71,"line":11045},[69,33534,33535],{"class":75},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[69,33537,33538],{"class":71,"line":11054},[69,33539,33540],{"class":75},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[69,33542,33543,33546,33548],{"class":71,"line":11059},[69,33544,33545],{"class":86},"    best_model_wts",[69,33547,1019],{"class":82},[69,33549,33550],{"class":86},"copy.deepcopy(model.state_dict())\n",[69,33552,33553],{"class":71,"line":11065},[69,33554,3644],{"emptyLinePlaceholder":1325},[69,33556,33557],{"class":71,"line":11086},[69,33558,3644],{"emptyLinePlaceholder":1325},[69,33560,33561],{"class":71,"line":11092},[69,33562,33563],{"class":75},"    # 初始化参数\n",[69,33565,33566],{"class":71,"line":11106},[69,33567,33568],{"class":75},"    # 最高准确度\n",[69,33570,33571,33574,33576],{"class":71,"line":11112},[69,33572,33573],{"class":86},"    best_acc",[69,33575,1019],{"class":82},[69,33577,33578],{"class":90},"0.0\n",[69,33580,33581],{"class":71,"line":11139},[69,33582,33583],{"class":75},"    # 训练集损失列表\n",[69,33585,33586,33589,33591],{"class":71,"line":11148},[69,33587,33588],{"class":86},"    train_loss_all",[69,33590,1019],{"class":82},[69,33592,33593],{"class":86},"[]\n",[69,33595,33596],{"class":71,"line":11154},[69,33597,33598],{"class":75},"    # 验证集函数列表\n",[69,33600,33601,33604,33606],{"class":71,"line":11162},[69,33602,33603],{"class":86},"    val_loss_all",[69,33605,1019],{"class":82},[69,33607,33593],{"class":86},[69,33609,33610],{"class":71,"line":11167},[69,33611,33612],{"class":75},"    # 训练集准确度列表\n",[69,33614,33615,33618,33620],{"class":71,"line":17843},[69,33616,33617],{"class":86},"    train_acc_all",[69,33619,1019],{"class":82},[69,33621,33593],{"class":86},[69,33623,33624],{"class":71,"line":17849},[69,33625,33626],{"class":75},"    # 验证集准确度列表\n",[69,33628,33629,33632,33634],{"class":71,"line":17872},[69,33630,33631],{"class":86},"    val_acc_all",[69,33633,1019],{"class":82},[69,33635,33593],{"class":86},[69,33637,33638],{"class":71,"line":17878},[69,33639,3644],{"emptyLinePlaceholder":1325},[69,33641,33642],{"class":71,"line":17901},[69,33643,33644],{"class":75},"    # 保存当前时间--->方便看每轮训练的时间\n",[69,33646,33647,33650,33652],{"class":71,"line":17915},[69,33648,33649],{"class":86},"    since",[69,33651,1019],{"class":82},[69,33653,33654],{"class":86},"time.time()\n",[69,33656,33657],{"class":71,"line":17935},[69,33658,3644],{"emptyLinePlaceholder":1325},[69,33660,33661],{"class":71,"line":17941},[69,33662,3644],{"emptyLinePlaceholder":1325},[69,33664,33665],{"class":71,"line":17952},[69,33666,33667],{"class":75},"    # 准备工作完成--->开始训练模型\n",[69,33669,33670,33672,33675,33677,33680],{"class":71,"line":17975},[69,33671,4445],{"class":82},[69,33673,33674],{"class":86}," epoch ",[69,33676,27280],{"class":82},[69,33678,33679],{"class":90}," range",[69,33681,33682],{"class":86},"(num_epochs):\n",[69,33684,33685,33688,33690,33693,33696,33698,33700,33702,33705,33707,33709],{"class":71,"line":17997},[69,33686,33687],{"class":90},"        print",[69,33689,1398],{"class":86},[69,33691,33692],{"class":1022},"\"Epoch ",[69,33694,33695],{"class":90},"{}",[69,33697,1972],{"class":1022},[69,33699,33695],{"class":90},[69,33701,1642],{"class":1022},[69,33703,33704],{"class":86},".format(epoch,num_epochs",[69,33706,1920],{"class":82},[69,33708,1609],{"class":90},[69,33710,31733],{"class":86},[69,33712,33713,33715,33717,33720,33722,33724],{"class":71,"line":18002},[69,33714,33687],{"class":90},[69,33716,1398],{"class":86},[69,33718,33719],{"class":1022},"\"-\"",[69,33721,1843],{"class":82},[69,33723,390],{"class":90},[69,33725,1404],{"class":86},[69,33727,33728],{"class":71,"line":18008},[69,33729,3644],{"emptyLinePlaceholder":1325},[69,33731,33732],{"class":71,"line":18022},[69,33733,33734],{"class":75},"        # 初始化参数\n",[69,33736,33737],{"class":71,"line":18035},[69,33738,33739],{"class":75},"        # 训练集损失函数\n",[69,33741,33742,33745,33747],{"class":71,"line":18040},[69,33743,33744],{"class":86},"        train_loss",[69,33746,1019],{"class":82},[69,33748,33578],{"class":90},[69,33750,33751],{"class":71,"line":18054},[69,33752,33753],{"class":75},"        # 训练集准确度\n",[69,33755,33756,33759,33761],{"class":71,"line":18059},[69,33757,33758],{"class":86},"        train_corrects",[69,33760,1019],{"class":82},[69,33762,4329],{"class":90},[69,33764,33765],{"class":71,"line":18065},[69,33766,33767],{"class":75},"        # 验证集损失函数\n",[69,33769,33770,33773,33775],{"class":71,"line":18070},[69,33771,33772],{"class":86},"        val_loss",[69,33774,1019],{"class":82},[69,33776,33578],{"class":90},[69,33778,33779],{"class":71,"line":18084},[69,33780,33781],{"class":75},"        # 验证集准确度\n",[69,33783,33784,33787,33789],{"class":71,"line":18089},[69,33785,33786],{"class":86},"        val_corrects",[69,33788,1019],{"class":82},[69,33790,4329],{"class":90},[69,33792,33793],{"class":71,"line":18094},[69,33794,33795],{"class":75},"        # 训练集样本数量\n",[69,33797,33798,33801,33803],{"class":71,"line":18108},[69,33799,33800],{"class":86},"        train_num",[69,33802,1019],{"class":82},[69,33804,4329],{"class":90},[69,33806,33807],{"class":71,"line":18120},[69,33808,33809],{"class":75},"        # 验证集样本数量\n",[69,33811,33812,33815,33817],{"class":71,"line":18125},[69,33813,33814],{"class":86},"        val_num",[69,33816,1019],{"class":82},[69,33818,4329],{"class":90},[69,33820,33821],{"class":71,"line":18138},[69,33822,33823],{"class":75},"        # 将数据放到设备,并开始训练\n",[69,33825,33826,33828,33830,33832,33834],{"class":71,"line":18143},[69,33827,4647],{"class":82},[69,33829,32837],{"class":86},[69,33831,27280],{"class":82},[69,33833,32842],{"class":90},[69,33835,33836],{"class":86},"(train_dataloader):\n",[69,33838,33839],{"class":71,"line":18148},[69,33840,33841],{"class":75},"            # 将特征放入到训练设备\n",[69,33843,33844,33847,33849],{"class":71,"line":18153},[69,33845,33846],{"class":86},"            b_x",[69,33848,1019],{"class":82},[69,33850,33851],{"class":86},"b_x.to(device)\n",[69,33853,33854],{"class":71,"line":18166},[69,33855,33856],{"class":75},"            # 将标签放入到训练设备当中\n",[69,33858,33859,33862,33864],{"class":71,"line":18171},[69,33860,33861],{"class":86},"            b_y",[69,33863,1019],{"class":82},[69,33865,33866],{"class":86},"b_y.to(device)\n",[69,33868,33870],{"class":71,"line":33869},98,[69,33871,33872],{"class":75},"            # 设置模型为训练模式\n",[69,33874,33876],{"class":71,"line":33875},99,[69,33877,33878],{"class":86},"            model.train()\n",[69,33880,33882],{"class":71,"line":33881},100,[69,33883,33884],{"class":75},"            # 将数据放到模型当中,开始前向传播\n",[69,33886,33888],{"class":71,"line":33887},101,[69,33889,33890],{"class":75},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[69,33892,33894,33897,33899],{"class":71,"line":33893},102,[69,33895,33896],{"class":86},"            output",[69,33898,1019],{"class":82},[69,33900,33901],{"class":86},"model(b_x)\n",[69,33903,33905],{"class":71,"line":33904},103,[69,33906,33907],{"class":75},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[69,33909,33911,33914,33916,33919,33922,33924,33926],{"class":71,"line":33910},104,[69,33912,33913],{"class":86},"            pre_lab",[69,33915,1019],{"class":82},[69,33917,33918],{"class":86},"torch.argmax(output,",[69,33920,33921],{"class":6458},"dim",[69,33923,1019],{"class":82},[69,33925,1609],{"class":90},[69,33927,1404],{"class":86},[69,33929,33931],{"class":71,"line":33930},105,[69,33932,33933],{"class":75},"            # 计算每一个batch的损失函数\n",[69,33935,33937,33940,33942],{"class":71,"line":33936},106,[69,33938,33939],{"class":86},"            loss",[69,33941,1019],{"class":82},[69,33943,33944],{"class":86},"criterion(output,b_y)\n",[69,33946,33948],{"class":71,"line":33947},107,[69,33949,33950],{"class":75},"            # 将梯度初始化为0\n",[69,33952,33954],{"class":71,"line":33953},108,[69,33955,33956],{"class":86},"            optimizer.zero_grad()\n",[69,33958,33960],{"class":71,"line":33959},109,[69,33961,33962],{"class":75},"            # 梯度置为0后再进行反向传播\n",[69,33964,33966],{"class":71,"line":33965},110,[69,33967,33968],{"class":86},"            loss.backward()\n",[69,33970,33972],{"class":71,"line":33971},111,[69,33973,33974],{"class":75},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[69,33976,33978],{"class":71,"line":33977},112,[69,33979,33980],{"class":86},"            optimizer.step()\n",[69,33982,33984],{"class":71,"line":33983},113,[69,33985,33986],{"class":75},"            # loss.item()指的是batch的平均损失\n",[69,33988,33990,33993,33995,33998,34000,34003,34005],{"class":71,"line":33989},114,[69,33991,33992],{"class":86},"            train_loss",[69,33994,10719],{"class":82},[69,33996,33997],{"class":86},"loss.item()",[69,33999,1843],{"class":82},[69,34001,34002],{"class":86},"b_x.size(",[69,34004,1583],{"class":90},[69,34006,1404],{"class":86},[69,34008,34010],{"class":71,"line":34009},115,[69,34011,34012],{"class":75},"            # 计算每个批次中正确预测的数量\n",[69,34014,34016,34019,34021,34024,34026],{"class":71,"line":34015},116,[69,34017,34018],{"class":86},"            train_corrects",[69,34020,10719],{"class":82},[69,34022,34023],{"class":86},"torch.sum(pre_lab",[69,34025,4193],{"class":82},[69,34027,34028],{"class":86},"b_y.data)\n",[69,34030,34032],{"class":71,"line":34031},117,[69,34033,34034],{"class":75},"            # 计算目前为止一共处理了多少样本\n",[69,34036,34038,34041,34043,34045,34047],{"class":71,"line":34037},118,[69,34039,34040],{"class":86},"            train_num",[69,34042,10719],{"class":82},[69,34044,34002],{"class":86},[69,34046,1583],{"class":90},[69,34048,1404],{"class":86},[69,34050,34052],{"class":71,"line":34051},119,[69,34053,34054],{"class":75},"        # 验证数据\n",[69,34056,34058,34060,34063,34065,34067],{"class":71,"line":34057},120,[69,34059,4647],{"class":82},[69,34061,34062],{"class":86}," step ,(b_x,b_y) ",[69,34064,27280],{"class":82},[69,34066,32842],{"class":90},[69,34068,34069],{"class":86},"(val_dataloader):\n",[69,34071,34073],{"class":71,"line":34072},121,[69,34074,34075],{"class":75},"            # 将特征放到验证设备当中\n",[69,34077,34079,34081,34083],{"class":71,"line":34078},122,[69,34080,33846],{"class":86},[69,34082,1019],{"class":82},[69,34084,33851],{"class":86},[69,34086,34088],{"class":71,"line":34087},123,[69,34089,34090],{"class":75},"            # 将标签放到放到训练设备当中\n",[69,34092,34094,34096,34098],{"class":71,"line":34093},124,[69,34095,33861],{"class":86},[69,34097,1019],{"class":82},[69,34099,33866],{"class":86},[69,34101,34103],{"class":71,"line":34102},125,[69,34104,34105],{"class":75},"            # 开启验证模式，设置模型为评估模式\n",[69,34107,34109],{"class":71,"line":34108},126,[69,34110,34111],{"class":86},"            model.eval()\n",[69,34113,34115,34118],{"class":71,"line":34114},127,[69,34116,34117],{"class":82},"            with",[69,34119,34120],{"class":86}," torch.no_grad():\n",[69,34122,34124],{"class":71,"line":34123},128,[69,34125,34126],{"class":75},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[69,34128,34130,34133,34135],{"class":71,"line":34129},129,[69,34131,34132],{"class":86},"                output ",[69,34134,1019],{"class":82},[69,34136,34137],{"class":86}," model(b_x)\n",[69,34139,34141],{"class":71,"line":34140},130,[69,34142,34143],{"class":75},"                # 查找每一行中最大值对应的下标\n",[69,34145,34147,34150,34152,34155,34157,34159,34161],{"class":71,"line":34146},131,[69,34148,34149],{"class":86},"                pre_lab ",[69,34151,1019],{"class":82},[69,34153,34154],{"class":86}," torch.argmax(output, ",[69,34156,33921],{"class":6458},[69,34158,1019],{"class":82},[69,34160,1609],{"class":90},[69,34162,1404],{"class":86},[69,34164,34166],{"class":71,"line":34165},132,[69,34167,34168],{"class":75},"                # 计算验证集上的当前 batch 损失\n",[69,34170,34172,34175,34177],{"class":71,"line":34171},133,[69,34173,34174],{"class":86},"                val_batch_loss ",[69,34176,1019],{"class":82},[69,34178,34179],{"class":86}," criterion(output, b_y)\n",[69,34181,34183],{"class":71,"line":34182},134,[69,34184,34185],{"class":75},"                # 对损失函数进行累加（按样本数加权）\n",[69,34187,34189,34192,34194,34197,34199,34202,34204],{"class":71,"line":34188},135,[69,34190,34191],{"class":86},"                val_loss ",[69,34193,10719],{"class":82},[69,34195,34196],{"class":86}," val_batch_loss.item() ",[69,34198,1843],{"class":82},[69,34200,34201],{"class":86}," b_x.size(",[69,34203,1583],{"class":90},[69,34205,1404],{"class":86},[69,34207,34209,34212,34214,34217,34219],{"class":71,"line":34208},136,[69,34210,34211],{"class":86},"                val_corrects ",[69,34213,10719],{"class":82},[69,34215,34216],{"class":86}," torch.sum(pre_lab ",[69,34218,4193],{"class":82},[69,34220,34221],{"class":86}," b_y.data)\n",[69,34223,34225],{"class":71,"line":34224},137,[69,34226,34227],{"class":75},"                # 当前用于验证的样本数量\n",[69,34229,34231,34234,34236,34238,34240],{"class":71,"line":34230},138,[69,34232,34233],{"class":86},"            val_num ",[69,34235,10719],{"class":82},[69,34237,34201],{"class":86},[69,34239,1583],{"class":90},[69,34241,1404],{"class":86},[69,34243,34245],{"class":71,"line":34244},139,[69,34246,34247],{"class":75},"        # 计算并保存每一次迭代的loss值和准确率\n",[69,34249,34251],{"class":71,"line":34250},140,[69,34252,34253],{"class":75},"        # 计算并保存训练集的loss值\n",[69,34255,34257,34260,34262],{"class":71,"line":34256},141,[69,34258,34259],{"class":86},"        train_loss_all.append(train_loss",[69,34261,1972],{"class":82},[69,34263,34264],{"class":86},"train_num)\n",[69,34266,34268],{"class":71,"line":34267},142,[69,34269,34270],{"class":75},"        # 取双精度\n",[69,34272,34274],{"class":71,"line":34273},143,[69,34275,34276],{"class":75},"        # 计算并保存训练集的准确率\n",[69,34278,34280,34283,34285],{"class":71,"line":34279},144,[69,34281,34282],{"class":86},"        train_acc_all.append(train_corrects.double().item()",[69,34284,1972],{"class":82},[69,34286,34264],{"class":86},[69,34288,34290],{"class":71,"line":34289},145,[69,34291,34292],{"class":75},"        # 计算并保存验证集的loss值\n",[69,34294,34296,34299,34301],{"class":71,"line":34295},146,[69,34297,34298],{"class":86},"        val_loss_all.append(val_loss",[69,34300,1972],{"class":82},[69,34302,34303],{"class":86},"val_num)\n",[69,34305,34307],{"class":71,"line":34306},147,[69,34308,34309],{"class":75},"        # 计算并保存验证集的准确率\n",[69,34311,34313,34316,34318],{"class":71,"line":34312},148,[69,34314,34315],{"class":86},"        val_acc_all.append(val_corrects.double().item()",[69,34317,1972],{"class":82},[69,34319,34303],{"class":86},[69,34321,34323],{"class":71,"line":34322},149,[69,34324,3644],{"emptyLinePlaceholder":1325},[69,34326,34328],{"class":71,"line":34327},150,[69,34329,34330],{"class":75},"        # 打印训练一轮的loss值和准确率\n",[69,34332,34334,34336,34338,34340,34342,34345,34347,34350,34352,34355,34357,34359,34361,34363,34366,34368,34370,34373,34375,34377],{"class":71,"line":34333},151,[69,34335,33687],{"class":90},[69,34337,1398],{"class":86},[69,34339,4836],{"class":1022},[69,34341,33695],{"class":90},[69,34343,34344],{"class":1022},"train loss:",[69,34346,2283],{"class":90},[69,34348,34349],{"class":82},":.4f",[69,34351,2332],{"class":90},[69,34353,34354],{"class":1022}," train acc:",[69,34356,2283],{"class":90},[69,34358,34349],{"class":82},[69,34360,2332],{"class":90},[69,34362,4836],{"class":1022},[69,34364,34365],{"class":86},".format(epoch,train_loss_all[",[69,34367,1920],{"class":82},[69,34369,1609],{"class":90},[69,34371,34372],{"class":86},"],train_acc_all[",[69,34374,1920],{"class":82},[69,34376,1609],{"class":90},[69,34378,34379],{"class":86},"]))\n",[69,34381,34383,34385,34387,34389,34391,34394,34396,34398,34400,34403,34405,34407,34409,34411,34414,34416,34418,34421,34423,34425],{"class":71,"line":34382},152,[69,34384,33687],{"class":90},[69,34386,1398],{"class":86},[69,34388,4836],{"class":1022},[69,34390,33695],{"class":90},[69,34392,34393],{"class":1022},"val loss:",[69,34395,2283],{"class":90},[69,34397,34349],{"class":82},[69,34399,2332],{"class":90},[69,34401,34402],{"class":1022}," val acc:",[69,34404,2283],{"class":90},[69,34406,34349],{"class":82},[69,34408,2332],{"class":90},[69,34410,4836],{"class":1022},[69,34412,34413],{"class":86},".format(epoch,val_loss_all[",[69,34415,1920],{"class":82},[69,34417,1609],{"class":90},[69,34419,34420],{"class":86},"],val_acc_all[",[69,34422,1920],{"class":82},[69,34424,1609],{"class":90},[69,34426,34379],{"class":86},[69,34428,34430],{"class":71,"line":34429},153,[69,34431,3644],{"emptyLinePlaceholder":1325},[69,34433,34435],{"class":71,"line":34434},154,[69,34436,34437],{"class":75},"        # 判断准确度--->保存最优模型\n",[69,34439,34441,34443,34446,34448,34450,34452,34454],{"class":71,"line":34440},155,[69,34442,3741],{"class":82},[69,34444,34445],{"class":86}," val_acc_all[",[69,34447,1920],{"class":82},[69,34449,1609],{"class":90},[69,34451,2326],{"class":86},[69,34453,2346],{"class":82},[69,34455,34456],{"class":86},"best_acc:\n",[69,34458,34460],{"class":71,"line":34459},156,[69,34461,34462],{"class":75},"            # 保存当前模型准确度\n",[69,34464,34466,34469,34471,34473,34476,34478,34480],{"class":71,"line":34465},157,[69,34467,34468],{"class":86},"            best_acc:",[69,34470,1436],{"class":90},[69,34472,1019],{"class":82},[69,34474,34475],{"class":86},"val_acc_all[",[69,34477,1920],{"class":82},[69,34479,1609],{"class":90},[69,34481,34482],{"class":86},"]\n",[69,34484,34486],{"class":71,"line":34485},158,[69,34487,34488],{"class":75},"            # 保存当前的准确度\n",[69,34490,34492],{"class":71,"line":34491},159,[69,34493,34494],{"class":75},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[69,34496,34498,34501,34503],{"class":71,"line":34497},160,[69,34499,34500],{"class":86},"            best_model_wts",[69,34502,1019],{"class":82},[69,34504,33550],{"class":86},[69,34506,34508],{"class":71,"line":34507},161,[69,34509,3644],{"emptyLinePlaceholder":1325},[69,34511,34513],{"class":71,"line":34512},162,[69,34514,34515],{"class":75},"        # 计算耗时\n",[69,34517,34519,34522,34524,34527,34529],{"class":71,"line":34518},163,[69,34520,34521],{"class":86},"        time_use",[69,34523,1019],{"class":82},[69,34525,34526],{"class":86},"time.time()",[69,34528,1920],{"class":82},[69,34530,34531],{"class":86},"since\n",[69,34533,34535,34537,34539,34542,34544,34547,34549,34551,34553,34555,34557,34560,34563,34566,34568,34571,34573,34575],{"class":71,"line":34534},164,[69,34536,33687],{"class":90},[69,34538,1398],{"class":86},[69,34540,34541],{"class":1022},"'训练和验证耗费的时间",[69,34543,2283],{"class":90},[69,34545,34546],{"class":82},":.0f",[69,34548,2332],{"class":90},[69,34550,1932],{"class":1022},[69,34552,2283],{"class":90},[69,34554,34546],{"class":82},[69,34556,2332],{"class":90},[69,34558,34559],{"class":1022},"s'",[69,34561,34562],{"class":86},".format(time_use",[69,34564,34565],{"class":82},"\u002F\u002F",[69,34567,2294],{"class":90},[69,34569,34570],{"class":86},",time_use",[69,34572,127],{"class":82},[69,34574,2294],{"class":90},[69,34576,31733],{"class":86},[69,34578,34580],{"class":71,"line":34579},165,[69,34581,34582],{"class":75},"    # 选择最优参数\n",[69,34584,34586],{"class":71,"line":34585},166,[69,34587,34588],{"class":75},"    # 加载最高准确率下的模型参数\n",[69,34590,34592],{"class":71,"line":34591},167,[69,34593,34594],{"class":75},"    # model.load_state_dict(best_model_wts)\n",[69,34596,34598,34601,34604],{"class":71,"line":34597},168,[69,34599,34600],{"class":86},"    torch.save(model.state_dict(best_model_wts), ",[69,34602,34603],{"class":1022},"'.\u002Fbest_model.pth'",[69,34605,1404],{"class":86},[69,34607,34609],{"class":71,"line":34608},169,[69,34610,34611],{"class":75},"    # 或者写成\n",[69,34613,34615],{"class":71,"line":34614},170,[69,34616,34617],{"class":75},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[69,34619,34621],{"class":71,"line":34620},171,[69,34622,34623],{"class":75},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[69,34625,34627,34630,34632,34635,34638,34640],{"class":71,"line":34626},172,[69,34628,34629],{"class":86},"    train_process",[69,34631,1019],{"class":82},[69,34633,34634],{"class":86},"pd.DataFrame(",[69,34636,34637],{"class":6458},"data",[69,34639,1019],{"class":82},[69,34641,2797],{"class":86},[69,34643,34645,34648,34650,34653],{"class":71,"line":34644},173,[69,34646,34647],{"class":1022},"        \"epoch\"",[69,34649,2246],{"class":86},[69,34651,34652],{"class":90},"range",[69,34654,34655],{"class":86},"(num_epochs),\n",[69,34657,34659,34662],{"class":71,"line":34658},174,[69,34660,34661],{"class":1022},"        \"train_loss_all\"",[69,34663,34664],{"class":86},":train_loss_all,\n",[69,34666,34668,34671],{"class":71,"line":34667},175,[69,34669,34670],{"class":1022},"        \"val_loss_all\"",[69,34672,34673],{"class":86},":val_loss_all,\n",[69,34675,34677,34680],{"class":71,"line":34676},176,[69,34678,34679],{"class":1022},"        \"train_acc_all\"",[69,34681,34682],{"class":86},":train_acc_all,\n",[69,34684,34686,34689],{"class":71,"line":34685},177,[69,34687,34688],{"class":1022},"        \"val_acc_all\"",[69,34690,34691],{"class":86},":val_acc_all\n",[69,34693,34695],{"class":71,"line":34694},178,[69,34696,34697],{"class":86},"    })\n",[69,34699,34701],{"class":71,"line":34700},179,[69,34702,34703],{"class":75},"    # 返回训练保存的过程\n",[69,34705,34707,34709],{"class":71,"line":34706},180,[69,34708,5334],{"class":82},[69,34710,34711],{"class":86}," train_process\n",[69,34713,34715],{"class":71,"line":34714},181,[69,34716,3644],{"emptyLinePlaceholder":1325},[69,34718,34720],{"class":71,"line":34719},182,[69,34721,34722],{"class":75},"# 将loss值和精度按照图片的形式展示出来\n",[69,34724,34726,34728,34731],{"class":71,"line":34725},183,[69,34727,33183],{"class":82},[69,34729,34730],{"class":109}," matplot_acc_loss",[69,34732,34733],{"class":86},"(train_process):\n",[69,34735,34737],{"class":71,"line":34736},184,[69,34738,34739],{"class":75},"    # 设置图的大小\n",[69,34741,34743,34746,34748,34750,34752,34754,34756,34758],{"class":71,"line":34742},185,[69,34744,34745],{"class":86},"    plt.figure(",[69,34747,32929],{"class":6458},[69,34749,1019],{"class":82},[69,34751,1398],{"class":86},[69,34753,1886],{"class":90},[69,34755,1767],{"class":86},[69,34757,1684],{"class":90},[69,34759,31733],{"class":86},[69,34761,34763],{"class":71,"line":34762},186,[69,34764,34765],{"class":75},"    # 设置图中有几张图\n",[69,34767,34769],{"class":71,"line":34768},187,[69,34770,34771],{"class":75},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[69,34773,34775],{"class":71,"line":34774},188,[69,34776,34777],{"class":75},"    # ①loss图\n",[69,34779,34781,34783,34785,34787,34789,34791,34793],{"class":71,"line":34780},189,[69,34782,32963],{"class":86},[69,34784,1609],{"class":90},[69,34786,1767],{"class":86},[69,34788,1471],{"class":90},[69,34790,1767],{"class":86},[69,34792,1609],{"class":90},[69,34794,1404],{"class":86},[69,34796,34798],{"class":71,"line":34797},190,[69,34799,34800],{"class":75},"    # 补充:\n",[69,34802,34804],{"class":71,"line":34803},191,[69,34805,34806],{"class":75},"    # plt.subplot(nrows, ncols, index)\n",[69,34808,34810],{"class":71,"line":34809},192,[69,34811,34812],{"class":75},"    # nrows：行数\n",[69,34814,34816],{"class":71,"line":34815},193,[69,34817,34818],{"class":75},"    # ncols：列数\n",[69,34820,34822],{"class":71,"line":34821},194,[69,34823,34824],{"class":75},"    # index：目前选中第几个子图（从1开始）\n",[69,34826,34828,34831,34834,34837,34840,34842,34845,34847,34850],{"class":71,"line":34827},195,[69,34829,34830],{"class":86},"    plt.plot(train_process[",[69,34832,34833],{"class":1022},"\"epoch\"",[69,34835,34836],{"class":86},"],train_process.train_loss_all,",[69,34838,34839],{"class":1022},"'ro-'",[69,34841,1767],{"class":86},[69,34843,34844],{"class":6458},"label",[69,34846,1019],{"class":82},[69,34848,34849],{"class":1022},"'train loss'",[69,34851,1404],{"class":86},[69,34853,34855,34857,34859,34862,34865,34867,34869,34871,34874],{"class":71,"line":34854},196,[69,34856,34830],{"class":86},[69,34858,34833],{"class":1022},[69,34860,34861],{"class":86},"],train_process.val_loss_all,",[69,34863,34864],{"class":1022},"'bs--'",[69,34866,1767],{"class":86},[69,34868,34844],{"class":6458},[69,34870,1019],{"class":82},[69,34872,34873],{"class":1022},"'val loss'",[69,34875,1404],{"class":86},[69,34877,34879],{"class":71,"line":34878},197,[69,34880,34881],{"class":75},"    # 添加一个图例\n",[69,34883,34885],{"class":71,"line":34884},198,[69,34886,34887],{"class":86},"    plt.legend()\n",[69,34889,34891],{"class":71,"line":34890},199,[69,34892,34893],{"class":75},"    # 给轴添加标签\n",[69,34895,34897,34900,34903],{"class":71,"line":34896},200,[69,34898,34899],{"class":86},"    plt.xlabel(",[69,34901,34902],{"class":1022},"'epoch'",[69,34904,1404],{"class":86},[69,34906,34908,34911,34914],{"class":71,"line":34907},201,[69,34909,34910],{"class":86},"    plt.ylabel(",[69,34912,34913],{"class":1022},"'loss'",[69,34915,1404],{"class":86},[69,34917,34919],{"class":71,"line":34918},202,[69,34920,34921],{"class":75},"    # ②准确度图\n",[69,34923,34925,34927,34929,34931,34933,34935,34937],{"class":71,"line":34924},203,[69,34926,32963],{"class":86},[69,34928,1609],{"class":90},[69,34930,1767],{"class":86},[69,34932,1471],{"class":90},[69,34934,1767],{"class":86},[69,34936,1471],{"class":90},[69,34938,1404],{"class":86},[69,34940,34942,34944,34946,34949,34951,34953,34955,34957,34960],{"class":71,"line":34941},204,[69,34943,34830],{"class":86},[69,34945,34833],{"class":1022},[69,34947,34948],{"class":86},"],train_process.train_acc_all,",[69,34950,34839],{"class":1022},[69,34952,1767],{"class":86},[69,34954,34844],{"class":6458},[69,34956,1019],{"class":82},[69,34958,34959],{"class":1022},"'train acc'",[69,34961,1404],{"class":86},[69,34963,34965,34967,34969,34972,34974,34976,34978,34980,34983],{"class":71,"line":34964},205,[69,34966,34830],{"class":86},[69,34968,34833],{"class":1022},[69,34970,34971],{"class":86},"],train_process.val_acc_all,",[69,34973,34864],{"class":1022},[69,34975,1767],{"class":86},[69,34977,34844],{"class":6458},[69,34979,1019],{"class":82},[69,34981,34982],{"class":1022},"'val acc'",[69,34984,1404],{"class":86},[69,34986,34988],{"class":71,"line":34987},206,[69,34989,34990],{"class":75},"    # 添加图例\n",[69,34992,34994],{"class":71,"line":34993},207,[69,34995,34887],{"class":86},[69,34997,34999,35001,35003],{"class":71,"line":34998},208,[69,35000,34899],{"class":86},[69,35002,34833],{"class":1022},[69,35004,1404],{"class":86},[69,35006,35008,35010,35013],{"class":71,"line":35007},209,[69,35009,34910],{"class":86},[69,35011,35012],{"class":1022},"\"acc\"",[69,35014,1404],{"class":86},[69,35016,35018],{"class":71,"line":35017},210,[69,35019,35020],{"class":86},"    plt.show()\n",[69,35022,35024],{"class":71,"line":35023},211,[69,35025,3644],{"emptyLinePlaceholder":1325},[69,35027,35029],{"class":71,"line":35028},212,[69,35030,35031],{"class":75},"# 正式开始训练:\n",[69,35033,35035,35037,35039,35041,35043],{"class":71,"line":35034},213,[69,35036,2782],{"class":82},[69,35038,32456],{"class":90},[69,35040,4193],{"class":82},[69,35042,32461],{"class":1022},[69,35044,4983],{"class":86},[69,35046,35048],{"class":71,"line":35047},214,[69,35049,35050],{"class":75},"    # 将模型实例化\n",[69,35052,35054,35057,35059],{"class":71,"line":35053},215,[69,35055,35056],{"class":86},"    LeNet",[69,35058,1019],{"class":82},[69,35060,35061],{"class":86},"LeNet()\n",[69,35063,35065,35068,35070],{"class":71,"line":35064},216,[69,35066,35067],{"class":86},"    train_dataloader,val_dataloader",[69,35069,1019],{"class":82},[69,35071,35072],{"class":86},"train_val_data_process()\n",[69,35074,35076,35078,35080,35083,35086,35088,35090],{"class":71,"line":35075},217,[69,35077,34629],{"class":86},[69,35079,1019],{"class":82},[69,35081,35082],{"class":86},"train_model_process(LeNet,train_dataloader,val_dataloader,",[69,35084,35085],{"class":6458},"num_epochs",[69,35087,1019],{"class":82},[69,35089,2087],{"class":90},[69,35091,1404],{"class":86},[69,35093,35095],{"class":71,"line":35094},218,[69,35096,35097],{"class":86},"    matplot_acc_loss(train_process)\n",[29,35099,35100],{},"画图的补充点学习：",[29,35102,35103],{},[24,35104],{"alt":64,"src":35105},"\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",[37,35107,35108],{"start":106},[40,35109,35110],{},"测试",[59,35112,35114],{"className":31614,"code":35113,"language":31616,"meta":64,"style":64},"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",[66,35115,35116,35122,35132,35144,35154,35159,35169,35179,35183,35188,35197,35214,35226,35243,35254,35270,35275,35286,35297,35308,35315,35319,35324,35334,35339,35356,35364,35368,35373,35382,35391,35395,35400,35405,35410,35417,35422,35434,35444,35454,35459,35463,35468,35477,35482,35498,35503,35508,35513,35527,35532,35546,35550,35555,35570,35575,35587,35591,35596,35608,35613,35621,35626,35631,35641,35646,35655,35660,35665,35669,35674,35679,35695,35703,35708,35713,35772,35778,35783,35794,35802,35810,35814,35819,35823,35828,35836,35841,35857,35862,35872,35882],{"__ignoreMap":64},[69,35117,35118,35120],{"class":71,"line":72},[69,35119,31628],{"class":82},[69,35121,31631],{"class":86},[69,35123,35124,35126,35128,35130],{"class":71,"line":79},[69,35125,31628],{"class":82},[69,35127,32651],{"class":86},[69,35129,32619],{"class":82},[69,35131,32656],{"class":86},[69,35133,35134,35136,35139,35141],{"class":71,"line":106},[69,35135,31973],{"class":82},[69,35137,35138],{"class":86}," jupyter_client.consoleapp ",[69,35140,31628],{"class":82},[69,35142,35143],{"class":86}," classes\n",[69,35145,35146,35148,35150,35152],{"class":71,"line":116},[69,35147,31973],{"class":82},[69,35149,32634],{"class":86},[69,35151,31628],{"class":82},[69,35153,32639],{"class":86},[69,35155,35156],{"class":71,"line":133},[69,35157,35158],{"class":75},"# 导入数据集\n",[69,35160,35161,35163,35165,35167],{"class":71,"line":139},[69,35162,31973],{"class":82},[69,35164,32604],{"class":86},[69,35166,31628],{"class":82},[69,35168,32609],{"class":86},[69,35170,35171,35173,35175,35177],{"class":71,"line":401},[69,35172,31973],{"class":82},[69,35174,33150],{"class":86},[69,35176,31628],{"class":82},[69,35178,33155],{"class":86},[69,35180,35181],{"class":71,"line":470},[69,35182,3644],{"emptyLinePlaceholder":1325},[69,35184,35185],{"class":71,"line":475},[69,35186,35187],{"class":75},"# 测试数据处理\n",[69,35189,35190,35192,35195],{"class":71,"line":482},[69,35191,33183],{"class":82},[69,35193,35194],{"class":109}," test_data_process",[69,35196,33189],{"class":86},[69,35198,35199,35202,35204,35206,35208,35210,35212],{"class":71,"line":497},[69,35200,35201],{"class":86},"    test_data",[69,35203,1019],{"class":82},[69,35205,32691],{"class":86},[69,35207,32694],{"class":6458},[69,35209,1019],{"class":82},[69,35211,32699],{"class":1022},[69,35213,32702],{"class":86},[69,35215,35216,35219,35221,35224],{"class":71,"line":502},[69,35217,35218],{"class":6458},"                           train",[69,35220,1019],{"class":82},[69,35222,35223],{"class":90},"False",[69,35225,32702],{"class":86},[69,35227,35228,35231,35233,35235,35237,35239,35241],{"class":71,"line":509},[69,35229,35230],{"class":6458},"                           transform",[69,35232,1019],{"class":82},[69,35234,32729],{"class":86},[69,35236,32732],{"class":6458},[69,35238,1019],{"class":82},[69,35240,2288],{"class":90},[69,35242,32740],{"class":86},[69,35244,35245,35248,35250,35252],{"class":71,"line":524},[69,35246,35247],{"class":6458},"                           download",[69,35249,1019],{"class":82},[69,35251,32712],{"class":90},[69,35253,1404],{"class":86},[69,35255,35256,35259,35261,35263,35265,35267],{"class":71,"line":2888},[69,35257,35258],{"class":86},"    test_dataloader",[69,35260,1019],{"class":82},[69,35262,32770],{"class":86},[69,35264,32773],{"class":6458},[69,35266,1019],{"class":82},[69,35268,35269],{"class":86},"test_data,\n",[69,35271,35272],{"class":71,"line":2893},[69,35273,35274],{"class":75},"                                    # 这里是一张一张进行测试\n",[69,35276,35277,35280,35282,35284],{"class":71,"line":2899},[69,35278,35279],{"class":6458},"                                    batch_size",[69,35281,1019],{"class":82},[69,35283,1609],{"class":90},[69,35285,32702],{"class":86},[69,35287,35288,35291,35293,35295],{"class":71,"line":2919},[69,35289,35290],{"class":6458},"                                    shuffle",[69,35292,1019],{"class":82},[69,35294,32712],{"class":90},[69,35296,32702],{"class":86},[69,35298,35299,35302,35304,35306],{"class":71,"line":2924},[69,35300,35301],{"class":6458},"                                    num_workers",[69,35303,1019],{"class":82},[69,35305,1583],{"class":90},[69,35307,1404],{"class":86},[69,35309,35310,35312],{"class":71,"line":2938},[69,35311,5334],{"class":82},[69,35313,35314],{"class":86}," test_dataloader\n",[69,35316,35317],{"class":71,"line":2943},[69,35318,3644],{"emptyLinePlaceholder":1325},[69,35320,35321],{"class":71,"line":2972},[69,35322,35323],{"class":75},"# 定义模型测试函数\n",[69,35325,35326,35328,35331],{"class":71,"line":2977},[69,35327,33183],{"class":82},[69,35329,35330],{"class":109}," test_model_process",[69,35332,35333],{"class":86},"(model,test_dataloader):\n",[69,35335,35336],{"class":71,"line":2994},[69,35337,35338],{"class":75},"    # 将模型放到设备当中，先进行判断\n",[69,35340,35341,35343,35345,35347,35349,35351,35353],{"class":71,"line":2999},[69,35342,32473],{"class":86},[69,35344,1019],{"class":82},[69,35346,32480],{"class":1022},[69,35348,2949],{"class":82},[69,35350,32485],{"class":86},[69,35352,2946],{"class":82},[69,35354,35355],{"class":1022}," \"cpu\"\n",[69,35357,35358,35360,35362],{"class":71,"line":3004},[69,35359,32525],{"class":86},[69,35361,1019],{"class":82},[69,35363,33525],{"class":86},[69,35365,35366],{"class":71,"line":3009},[69,35367,3644],{"emptyLinePlaceholder":1325},[69,35369,35370],{"class":71,"line":3023},[69,35371,35372],{"class":75},"    # 设置初始化参数\n",[69,35374,35375,35378,35380],{"class":71,"line":3028},[69,35376,35377],{"class":86},"    test_corrects",[69,35379,1019],{"class":82},[69,35381,33578],{"class":90},[69,35383,35384,35387,35389],{"class":71,"line":3821},[69,35385,35386],{"class":86},"    test_num",[69,35388,1019],{"class":82},[69,35390,4329],{"class":90},[69,35392,35393],{"class":71,"line":3835},[69,35394,3644],{"emptyLinePlaceholder":1325},[69,35396,35397],{"class":71,"line":3843},[69,35398,35399],{"class":75},"    # 进行模型测试\n",[69,35401,35402],{"class":71,"line":3848},[69,35403,35404],{"class":75},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[69,35406,35407],{"class":71,"line":3854},[69,35408,35409],{"class":75},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[69,35411,35412,35415],{"class":71,"line":3860},[69,35413,35414],{"class":82},"    with",[69,35416,34120],{"class":86},[69,35418,35419],{"class":71,"line":3865},[69,35420,35421],{"class":75},"        # 从数据中进行\n",[69,35423,35424,35426,35429,35431],{"class":71,"line":9190},[69,35425,4647],{"class":82},[69,35427,35428],{"class":86}," test_data_x,test_data_y ",[69,35430,27280],{"class":82},[69,35432,35433],{"class":86}," test_dataloader:\n",[69,35435,35436,35439,35441],{"class":71,"line":9214},[69,35437,35438],{"class":86},"            test_data_x",[69,35440,1019],{"class":82},[69,35442,35443],{"class":86},"test_data_x.to(device)\n",[69,35445,35446,35449,35451],{"class":71,"line":9219},[69,35447,35448],{"class":86},"            test_data_y",[69,35450,1019],{"class":82},[69,35452,35453],{"class":86},"test_data_y.to(device)\n",[69,35455,35456],{"class":71,"line":9225},[69,35457,35458],{"class":75},"            # 设置为验证模式\n",[69,35460,35461],{"class":71,"line":9252},[69,35462,34111],{"class":86},[69,35464,35465],{"class":71,"line":9257},[69,35466,35467],{"class":75},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[69,35469,35470,35472,35474],{"class":71,"line":9263},[69,35471,33896],{"class":86},[69,35473,1019],{"class":82},[69,35475,35476],{"class":86},"model(test_data_x)\n",[69,35478,35479],{"class":71,"line":9275},[69,35480,35481],{"class":75},"            # 查找每一行中最大值对应的下标\n",[69,35483,35484,35486,35488,35490,35492,35494,35496],{"class":71,"line":9287},[69,35485,33913],{"class":86},[69,35487,1019],{"class":82},[69,35489,33918],{"class":86},[69,35491,33921],{"class":6458},[69,35493,1019],{"class":82},[69,35495,1609],{"class":90},[69,35497,1404],{"class":86},[69,35499,35500],{"class":71,"line":9299},[69,35501,35502],{"class":75},"            # 计算正确率\n",[69,35504,35505],{"class":71,"line":10958},[69,35506,35507],{"class":75},"            # .data表示是一个不带梯度信息的tensor\n",[69,35509,35510],{"class":71,"line":10983},[69,35511,35512],{"class":75},"            # 如果预测正确，则准确度test_corrects加1\n",[69,35514,35515,35518,35520,35522,35524],{"class":71,"line":11006},[69,35516,35517],{"class":86},"            test_corrects",[69,35519,10719],{"class":82},[69,35521,34023],{"class":86},[69,35523,4193],{"class":82},[69,35525,35526],{"class":86},"test_data_y.data)\n",[69,35528,35529],{"class":71,"line":11030},[69,35530,35531],{"class":75},"            # 将所有的测试样本进行累计\n",[69,35533,35534,35537,35539,35542,35544],{"class":71,"line":11035},[69,35535,35536],{"class":86},"            test_num",[69,35538,10719],{"class":82},[69,35540,35541],{"class":86},"test_data_x.size(",[69,35543,1583],{"class":90},[69,35545,1404],{"class":86},[69,35547,35548],{"class":71,"line":11040},[69,35549,3644],{"emptyLinePlaceholder":1325},[69,35551,35552],{"class":71,"line":11045},[69,35553,35554],{"class":75},"        # 计算准确度\n",[69,35556,35557,35560,35562,35565,35567],{"class":71,"line":11054},[69,35558,35559],{"class":86},"        test_acc",[69,35561,1019],{"class":82},[69,35563,35564],{"class":86},"test_corrects.double().item()",[69,35566,1972],{"class":82},[69,35568,35569],{"class":86},"test_num\n",[69,35571,35572],{"class":71,"line":11059},[69,35573,35574],{"class":75},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[69,35576,35577,35579,35581,35584],{"class":71,"line":11065},[69,35578,33687],{"class":90},[69,35580,1398],{"class":86},[69,35582,35583],{"class":1022},"\"测试的准确率：\"",[69,35585,35586],{"class":86},",test_acc)\n",[69,35588,35589],{"class":71,"line":11086},[69,35590,3644],{"emptyLinePlaceholder":1325},[69,35592,35593],{"class":71,"line":11092},[69,35594,35595],{"class":75},"# 实现模型的测试功能\n",[69,35597,35598,35600,35602,35604,35606],{"class":71,"line":11106},[69,35599,2782],{"class":82},[69,35601,32456],{"class":90},[69,35603,4193],{"class":82},[69,35605,32461],{"class":1022},[69,35607,4983],{"class":86},[69,35609,35610],{"class":71,"line":11112},[69,35611,35612],{"class":75},"    # 加载模型\n",[69,35614,35615,35617,35619],{"class":71,"line":11139},[69,35616,32525],{"class":86},[69,35618,1019],{"class":82},[69,35620,35061],{"class":86},[69,35622,35623],{"class":71,"line":11148},[69,35624,35625],{"class":75},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[69,35627,35628],{"class":71,"line":11154},[69,35629,35630],{"class":75},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[69,35632,35633,35636,35639],{"class":71,"line":11162},[69,35634,35635],{"class":86},"    model.load_state_dict(torch.load(",[69,35637,35638],{"class":1022},"'best_model.pth'",[69,35640,31733],{"class":86},[69,35642,35643],{"class":71,"line":11167},[69,35644,35645],{"class":75},"    # 数据加载\n",[69,35647,35648,35650,35652],{"class":71,"line":17843},[69,35649,35258],{"class":86},[69,35651,1019],{"class":82},[69,35653,35654],{"class":86},"test_data_process()\n",[69,35656,35657],{"class":71,"line":17849},[69,35658,35659],{"class":75},"    # 加载模型测试的函数\n",[69,35661,35662],{"class":71,"line":17872},[69,35663,35664],{"class":86},"    test_model_process(model,test_dataloader)\n",[69,35666,35667],{"class":71,"line":17878},[69,35668,3644],{"emptyLinePlaceholder":1325},[69,35670,35671],{"class":71,"line":17901},[69,35672,35673],{"class":75},"    # 验证集推理实现：\n",[69,35675,35676],{"class":71,"line":17915},[69,35677,35678],{"class":75},"    # 加载数据加载的更详细一些\n",[69,35680,35681,35683,35685,35687,35689,35691,35693],{"class":71,"line":17935},[69,35682,32473],{"class":86},[69,35684,1019],{"class":82},[69,35686,32480],{"class":1022},[69,35688,2949],{"class":82},[69,35690,32485],{"class":86},[69,35692,2946],{"class":82},[69,35694,35355],{"class":1022},[69,35696,35697,35699,35701],{"class":71,"line":17941},[69,35698,32525],{"class":86},[69,35700,1019],{"class":82},[69,35702,33525],{"class":86},[69,35704,35705],{"class":71,"line":17952},[69,35706,35707],{"class":75},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[69,35709,35710],{"class":71,"line":17975},[69,35711,35712],{"class":75},"    # 顺序不可改变\n",[69,35714,35715,35718,35720,35722,35725,35727,35730,35732,35735,35737,35740,35742,35745,35747,35750,35752,35755,35757,35760,35762,35765,35767,35770],{"class":71,"line":17997},[69,35716,35717],{"class":86},"    classes",[69,35719,1019],{"class":82},[69,35721,2277],{"class":86},[69,35723,35724],{"class":1022},"'T-shirt\u002Ftop'",[69,35726,1767],{"class":86},[69,35728,35729],{"class":1022},"'Trouser'",[69,35731,1767],{"class":86},[69,35733,35734],{"class":1022},"'Pullover'",[69,35736,1767],{"class":86},[69,35738,35739],{"class":1022},"'Dress'",[69,35741,1767],{"class":86},[69,35743,35744],{"class":1022},"'Coat'",[69,35746,1767],{"class":86},[69,35748,35749],{"class":1022},"'Sandal'",[69,35751,1767],{"class":86},[69,35753,35754],{"class":1022},"'Shirt'",[69,35756,1767],{"class":86},[69,35758,35759],{"class":1022},"'Sneaker'",[69,35761,1767],{"class":86},[69,35763,35764],{"class":1022},"'Bag'",[69,35766,1767],{"class":86},[69,35768,35769],{"class":1022},"'Ankle boot'",[69,35771,34482],{"class":86},[69,35773,35774,35776],{"class":71,"line":18002},[69,35775,35414],{"class":82},[69,35777,34120],{"class":86},[69,35779,35780],{"class":71,"line":18008},[69,35781,35782],{"class":75},"        # 将数据和标签都放到设备当中\n",[69,35784,35785,35787,35790,35792],{"class":71,"line":18022},[69,35786,4647],{"class":82},[69,35788,35789],{"class":86}," b_x,b_y ",[69,35791,27280],{"class":82},[69,35793,35433],{"class":86},[69,35795,35796,35798,35800],{"class":71,"line":18035},[69,35797,33846],{"class":86},[69,35799,1019],{"class":82},[69,35801,33851],{"class":86},[69,35803,35804,35806,35808],{"class":71,"line":18040},[69,35805,33861],{"class":86},[69,35807,1019],{"class":82},[69,35809,33866],{"class":86},[69,35811,35812],{"class":71,"line":18054},[69,35813,3644],{"emptyLinePlaceholder":1325},[69,35815,35816],{"class":71,"line":18059},[69,35817,35818],{"class":75},"            # 设置模型为验证模式\n",[69,35820,35821],{"class":71,"line":18065},[69,35822,34111],{"class":86},[69,35824,35825],{"class":71,"line":18070},[69,35826,35827],{"class":75},"            # 模型推理结果\n",[69,35829,35830,35832,35834],{"class":71,"line":18084},[69,35831,33896],{"class":86},[69,35833,1019],{"class":82},[69,35835,33901],{"class":86},[69,35837,35838],{"class":71,"line":18089},[69,35839,35840],{"class":75},"            # 获取最大下标，最大下标就是类别号\n",[69,35842,35843,35845,35847,35849,35851,35853,35855],{"class":71,"line":18094},[69,35844,33913],{"class":86},[69,35846,1019],{"class":82},[69,35848,33918],{"class":86},[69,35850,33921],{"class":6458},[69,35852,1019],{"class":82},[69,35854,1609],{"class":90},[69,35856,1404],{"class":86},[69,35858,35859],{"class":71,"line":18108},[69,35860,35861],{"class":75},"            # 取出张量中的数值\n",[69,35863,35864,35867,35869],{"class":71,"line":18120},[69,35865,35866],{"class":86},"            result",[69,35868,1019],{"class":82},[69,35870,35871],{"class":86},"pre_lab.item()\n",[69,35873,35874,35877,35879],{"class":71,"line":18125},[69,35875,35876],{"class":86},"            label",[69,35878,1019],{"class":82},[69,35880,35881],{"class":86},"b_y.item()\n",[69,35883,35884,35887,35889,35892,35895,35898,35900,35903],{"class":71,"line":18138},[69,35885,35886],{"class":90},"            print",[69,35888,1398],{"class":86},[69,35890,35891],{"class":1022},"\"预测值：\"",[69,35893,35894],{"class":86},",classes[result],",[69,35896,35897],{"class":1022},"\"------\"",[69,35899,1767],{"class":86},[69,35901,35902],{"class":1022},"\"真实值：\"",[69,35904,35905],{"class":86},",classes[label])\n",[29,35907,35908],{},"（2）AlexNet",[37,35910,35911],{},[40,35912,35913],{},"神经网络构建",[59,35915,35917],{"className":31614,"code":35916,"language":31616,"meta":64,"style":64},"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",[66,35918,35919,35925,35935,35945,35957,35961,35978,35986,36001,36013,36055,36082,36125,36151,36195,36238,36281,36308,36312,36322,36327,36355,36374,36393,36397,36402,36410,36425,36435,36449,36459,36474,36489,36504,36515,36519,36524,36534,36549,36554,36568,36583,36595,36600,36611,36616,36622,36627,36639,36659,36664,36673],{"__ignoreMap":64},[69,35920,35921,35923],{"class":71,"line":72},[69,35922,31628],{"class":82},[69,35924,31631],{"class":86},[69,35926,35927,35929,35931,35933],{"class":71,"line":79},[69,35928,31973],{"class":82},[69,35930,31976],{"class":86},[69,35932,31628],{"class":82},[69,35934,31981],{"class":86},[69,35936,35937,35939,35941,35943],{"class":71,"line":106},[69,35938,31973],{"class":82},[69,35940,31993],{"class":86},[69,35942,31628],{"class":82},[69,35944,31998],{"class":86},[69,35946,35947,35949,35952,35954],{"class":71,"line":116},[69,35948,31628],{"class":82},[69,35950,35951],{"class":86}," torch.nn.functional ",[69,35953,32619],{"class":82},[69,35955,35956],{"class":86}," F\n",[69,35958,35959],{"class":71,"line":133},[69,35960,3644],{"emptyLinePlaceholder":1325},[69,35962,35963,35965,35968,35970,35972,35974,35976],{"class":71,"line":139},[69,35964,15934],{"class":82},[69,35966,35967],{"class":109}," AlexNet",[69,35969,1398],{"class":86},[69,35971,32014],{"class":109},[69,35973,1946],{"class":86},[69,35975,32019],{"class":109},[69,35977,32022],{"class":86},[69,35979,35980,35982,35984],{"class":71,"line":401},[69,35981,32037],{"class":82},[69,35983,32040],{"class":90},[69,35985,32043],{"class":86},[69,35987,35988,35990,35993,35995,35997,35999],{"class":71,"line":470},[69,35989,32053],{"class":90},[69,35991,35992],{"class":86},"(AlexNet,",[69,35994,32059],{"class":90},[69,35996,32062],{"class":86},[69,35998,32065],{"class":90},[69,36000,3220],{"class":86},[69,36002,36003,36005,36008,36010],{"class":71,"line":475},[69,36004,32081],{"class":90},[69,36006,36007],{"class":86},".ReLu",[69,36009,1019],{"class":82},[69,36011,36012],{"class":86},"nn.ReLU()\n",[69,36014,36015,36017,36019,36021,36023,36025,36027,36029,36031,36033,36035,36037,36039,36041,36043,36045,36047,36049,36051,36053],{"class":71,"line":482},[69,36016,32081],{"class":90},[69,36018,32084],{"class":86},[69,36020,1019],{"class":82},[69,36022,32089],{"class":86},[69,36024,32092],{"class":6458},[69,36026,1019],{"class":82},[69,36028,1609],{"class":90},[69,36030,1767],{"class":86},[69,36032,32101],{"class":6458},[69,36034,1019],{"class":82},[69,36036,1601],{"class":90},[69,36038,1767],{"class":86},[69,36040,32110],{"class":6458},[69,36042,1019],{"class":82},[69,36044,1860],{"class":90},[69,36046,1767],{"class":86},[69,36048,32165],{"class":6458},[69,36050,1019],{"class":82},[69,36052,1684],{"class":90},[69,36054,1404],{"class":86},[69,36056,36057,36059,36061,36063,36066,36068,36070,36072,36074,36076,36078,36080],{"class":71,"line":497},[69,36058,32081],{"class":90},[69,36060,32149],{"class":86},[69,36062,1019],{"class":82},[69,36064,36065],{"class":86},"nn.MaxPool2d(",[69,36067,32110],{"class":6458},[69,36069,1019],{"class":82},[69,36071,1465],{"class":90},[69,36073,1767],{"class":86},[69,36075,32165],{"class":6458},[69,36077,1019],{"class":82},[69,36079,1471],{"class":90},[69,36081,1404],{"class":86},[69,36083,36084,36086,36088,36090,36092,36094,36096,36098,36100,36102,36104,36107,36109,36111,36113,36115,36117,36119,36121,36123],{"class":71,"line":502},[69,36085,32081],{"class":90},[69,36087,32178],{"class":86},[69,36089,1019],{"class":82},[69,36091,32089],{"class":86},[69,36093,32092],{"class":6458},[69,36095,1019],{"class":82},[69,36097,1601],{"class":90},[69,36099,1767],{"class":86},[69,36101,32101],{"class":6458},[69,36103,1019],{"class":82},[69,36105,36106],{"class":90},"256",[69,36108,1767],{"class":86},[69,36110,32110],{"class":6458},[69,36112,1019],{"class":82},[69,36114,1709],{"class":90},[69,36116,1767],{"class":86},[69,36118,32119],{"class":6458},[69,36120,1019],{"class":82},[69,36122,1471],{"class":90},[69,36124,1404],{"class":86},[69,36126,36127,36129,36131,36133,36135,36137,36139,36141,36143,36145,36147,36149],{"class":71,"line":509},[69,36128,32081],{"class":90},[69,36130,32213],{"class":86},[69,36132,1019],{"class":82},[69,36134,36065],{"class":86},[69,36136,32110],{"class":6458},[69,36138,1019],{"class":82},[69,36140,1465],{"class":90},[69,36142,1767],{"class":86},[69,36144,32165],{"class":6458},[69,36146,1019],{"class":82},[69,36148,1471],{"class":90},[69,36150,1404],{"class":86},[69,36152,36153,36155,36158,36160,36162,36164,36166,36168,36170,36172,36174,36177,36179,36181,36183,36185,36187,36189,36191,36193],{"class":71,"line":524},[69,36154,32081],{"class":90},[69,36156,36157],{"class":86},".c5",[69,36159,1019],{"class":82},[69,36161,32089],{"class":86},[69,36163,32092],{"class":6458},[69,36165,1019],{"class":82},[69,36167,36106],{"class":90},[69,36169,1767],{"class":86},[69,36171,32101],{"class":6458},[69,36173,1019],{"class":82},[69,36175,36176],{"class":90},"384",[69,36178,1767],{"class":86},[69,36180,32110],{"class":6458},[69,36182,1019],{"class":82},[69,36184,1465],{"class":90},[69,36186,1767],{"class":86},[69,36188,32119],{"class":6458},[69,36190,1019],{"class":82},[69,36192,1609],{"class":90},[69,36194,1404],{"class":86},[69,36196,36197,36199,36202,36204,36206,36208,36210,36212,36214,36216,36218,36220,36222,36224,36226,36228,36230,36232,36234,36236],{"class":71,"line":2888},[69,36198,32081],{"class":90},[69,36200,36201],{"class":86},".c6",[69,36203,1019],{"class":82},[69,36205,32089],{"class":86},[69,36207,32092],{"class":6458},[69,36209,1019],{"class":82},[69,36211,36176],{"class":90},[69,36213,1767],{"class":86},[69,36215,32101],{"class":6458},[69,36217,1019],{"class":82},[69,36219,36176],{"class":90},[69,36221,1767],{"class":86},[69,36223,32110],{"class":6458},[69,36225,1019],{"class":82},[69,36227,1465],{"class":90},[69,36229,1767],{"class":86},[69,36231,32119],{"class":6458},[69,36233,1019],{"class":82},[69,36235,1609],{"class":90},[69,36237,1404],{"class":86},[69,36239,36240,36242,36245,36247,36249,36251,36253,36255,36257,36259,36261,36263,36265,36267,36269,36271,36273,36275,36277,36279],{"class":71,"line":2893},[69,36241,32081],{"class":90},[69,36243,36244],{"class":86},".c7",[69,36246,1019],{"class":82},[69,36248,32089],{"class":86},[69,36250,32092],{"class":6458},[69,36252,1019],{"class":82},[69,36254,36176],{"class":90},[69,36256,1767],{"class":86},[69,36258,32101],{"class":6458},[69,36260,1019],{"class":82},[69,36262,36106],{"class":90},[69,36264,1767],{"class":86},[69,36266,32110],{"class":6458},[69,36268,1019],{"class":82},[69,36270,1465],{"class":90},[69,36272,1767],{"class":86},[69,36274,32119],{"class":6458},[69,36276,1019],{"class":82},[69,36278,1609],{"class":90},[69,36280,1404],{"class":86},[69,36282,36283,36285,36288,36290,36292,36294,36296,36298,36300,36302,36304,36306],{"class":71,"line":2899},[69,36284,32081],{"class":90},[69,36286,36287],{"class":86},".s8",[69,36289,1019],{"class":82},[69,36291,36065],{"class":86},[69,36293,32110],{"class":6458},[69,36295,1019],{"class":82},[69,36297,1465],{"class":90},[69,36299,1767],{"class":86},[69,36301,32165],{"class":6458},[69,36303,1019],{"class":82},[69,36305,1471],{"class":90},[69,36307,1404],{"class":86},[69,36309,36310],{"class":71,"line":2919},[69,36311,32238],{"class":75},[69,36313,36314,36316,36318,36320],{"class":71,"line":2924},[69,36315,32081],{"class":90},[69,36317,32245],{"class":86},[69,36319,1019],{"class":82},[69,36321,32250],{"class":86},[69,36323,36324],{"class":71,"line":2938},[69,36325,36326],{"class":75},"       # 定义全连接层\n",[69,36328,36329,36331,36334,36336,36338,36340,36342,36344,36346,36348,36350,36353],{"class":71,"line":2943},[69,36330,32081],{"class":90},[69,36332,36333],{"class":86},".f1",[69,36335,1019],{"class":82},[69,36337,32267],{"class":86},[69,36339,1733],{"class":90},[69,36341,1843],{"class":82},[69,36343,1733],{"class":90},[69,36345,1843],{"class":82},[69,36347,36106],{"class":90},[69,36349,1767],{"class":86},[69,36351,36352],{"class":90},"4096",[69,36354,1404],{"class":86},[69,36356,36357,36359,36362,36364,36366,36368,36370,36372],{"class":71,"line":2972},[69,36358,32081],{"class":90},[69,36360,36361],{"class":86},".f2",[69,36363,1019],{"class":82},[69,36365,32267],{"class":86},[69,36367,36352],{"class":90},[69,36369,1767],{"class":86},[69,36371,36352],{"class":90},[69,36373,1404],{"class":86},[69,36375,36376,36378,36381,36383,36385,36387,36389,36391],{"class":71,"line":2977},[69,36377,32081],{"class":90},[69,36379,36380],{"class":86},".f3",[69,36382,1019],{"class":82},[69,36384,32267],{"class":86},[69,36386,36352],{"class":90},[69,36388,1767],{"class":86},[69,36390,390],{"class":90},[69,36392,1404],{"class":86},[69,36394,36395],{"class":71,"line":2994},[69,36396,3644],{"emptyLinePlaceholder":1325},[69,36398,36399],{"class":71,"line":2999},[69,36400,36401],{"class":75},"    # 定义前向传播\n",[69,36403,36404,36406,36408],{"class":71,"line":3004},[69,36405,32037],{"class":82},[69,36407,32329],{"class":109},[69,36409,32332],{"class":86},[69,36411,36412,36414,36416,36418,36421,36423],{"class":71,"line":3009},[69,36413,32337],{"class":86},[69,36415,1019],{"class":82},[69,36417,32059],{"class":90},[69,36419,36420],{"class":86},".ReLu(",[69,36422,32059],{"class":90},[69,36424,32349],{"class":86},[69,36426,36427,36429,36431,36433],{"class":71,"line":3023},[69,36428,32337],{"class":86},[69,36430,1019],{"class":82},[69,36432,32059],{"class":90},[69,36434,32360],{"class":86},[69,36436,36437,36439,36441,36443,36445,36447],{"class":71,"line":3028},[69,36438,32337],{"class":86},[69,36440,1019],{"class":82},[69,36442,32059],{"class":90},[69,36444,36420],{"class":86},[69,36446,32059],{"class":90},[69,36448,32375],{"class":86},[69,36450,36451,36453,36455,36457],{"class":71,"line":3821},[69,36452,32337],{"class":86},[69,36454,1019],{"class":82},[69,36456,32059],{"class":90},[69,36458,32386],{"class":86},[69,36460,36461,36463,36465,36467,36469,36471],{"class":71,"line":3835},[69,36462,32337],{"class":86},[69,36464,1019],{"class":82},[69,36466,32059],{"class":90},[69,36468,36420],{"class":86},[69,36470,32059],{"class":90},[69,36472,36473],{"class":86},".c5(x))\n",[69,36475,36476,36478,36480,36482,36484,36486],{"class":71,"line":3843},[69,36477,32337],{"class":86},[69,36479,1019],{"class":82},[69,36481,32059],{"class":90},[69,36483,36420],{"class":86},[69,36485,32059],{"class":90},[69,36487,36488],{"class":86},".c6(x))\n",[69,36490,36491,36493,36495,36497,36499,36501],{"class":71,"line":3848},[69,36492,32337],{"class":86},[69,36494,1019],{"class":82},[69,36496,32059],{"class":90},[69,36498,36420],{"class":86},[69,36500,32059],{"class":90},[69,36502,36503],{"class":86},".c7(x))\n",[69,36505,36506,36508,36510,36512],{"class":71,"line":3854},[69,36507,32337],{"class":86},[69,36509,1019],{"class":82},[69,36511,32059],{"class":90},[69,36513,36514],{"class":86},".s8(x)\n",[69,36516,36517],{"class":71,"line":3860},[69,36518,3644],{"emptyLinePlaceholder":1325},[69,36520,36521],{"class":71,"line":3865},[69,36522,36523],{"class":75},"        # 展平加线性全连接层\n",[69,36525,36526,36528,36530,36532],{"class":71,"line":9190},[69,36527,32337],{"class":86},[69,36529,1019],{"class":82},[69,36531,32059],{"class":90},[69,36533,32397],{"class":86},[69,36535,36536,36538,36540,36542,36544,36546],{"class":71,"line":9214},[69,36537,32337],{"class":86},[69,36539,1019],{"class":82},[69,36541,32059],{"class":90},[69,36543,36420],{"class":86},[69,36545,32059],{"class":90},[69,36547,36548],{"class":86},".f1(x))\n",[69,36550,36551],{"class":71,"line":9219},[69,36552,36553],{"class":75},"        # 还需要dropout对神经元随机进行失活\n",[69,36555,36556,36558,36560,36563,36566],{"class":71,"line":9225},[69,36557,32337],{"class":86},[69,36559,1019],{"class":82},[69,36561,36562],{"class":86},"F.dropout(x,",[69,36564,36565],{"class":90},"0.5",[69,36567,1404],{"class":86},[69,36569,36570,36572,36574,36576,36578,36580],{"class":71,"line":9252},[69,36571,32337],{"class":86},[69,36573,1019],{"class":82},[69,36575,32059],{"class":90},[69,36577,36420],{"class":86},[69,36579,32059],{"class":90},[69,36581,36582],{"class":86},".f2(x))\n",[69,36584,36585,36587,36589,36591,36593],{"class":71,"line":9257},[69,36586,32337],{"class":86},[69,36588,1019],{"class":82},[69,36590,36562],{"class":86},[69,36592,36565],{"class":90},[69,36594,1404],{"class":86},[69,36596,36597],{"class":71,"line":9263},[69,36598,36599],{"class":75},"        # 直接输出\n",[69,36601,36602,36604,36606,36608],{"class":71,"line":9275},[69,36603,32337],{"class":86},[69,36605,1019],{"class":82},[69,36607,32059],{"class":90},[69,36609,36610],{"class":86},".f3(x)\n",[69,36612,36613],{"class":71,"line":9287},[69,36614,36615],{"class":75},"        # 前向传播输出\n",[69,36617,36618,36620],{"class":71,"line":9299},[69,36619,15992],{"class":82},[69,36621,32445],{"class":86},[69,36623,36624],{"class":71,"line":10958},[69,36625,36626],{"class":75},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[69,36628,36629,36631,36633,36635,36637],{"class":71,"line":10983},[69,36630,2782],{"class":82},[69,36632,32456],{"class":90},[69,36634,4193],{"class":82},[69,36636,32461],{"class":1022},[69,36638,4983],{"class":86},[69,36640,36641,36643,36645,36647,36649,36651,36653,36655,36657],{"class":71,"line":11006},[69,36642,32473],{"class":86},[69,36644,1019],{"class":82},[69,36646,31687],{"class":86},[69,36648,32480],{"class":1022},[69,36650,2949],{"class":82},[69,36652,32485],{"class":86},[69,36654,2946],{"class":82},[69,36656,31712],{"class":1022},[69,36658,1404],{"class":86},[69,36660,36661],{"class":71,"line":11030},[69,36662,36663],{"class":75},"    # 模型实例化，然后将实例化的模型放到设备中\n",[69,36665,36666,36668,36670],{"class":71,"line":11035},[69,36667,32525],{"class":86},[69,36669,1019],{"class":82},[69,36671,36672],{"class":86},"AlexNet().to(device)\n",[69,36674,36675,36677,36679,36681,36683,36686,36688,36690],{"class":71,"line":11040},[69,36676,32535],{"class":90},[69,36678,32538],{"class":86},[69,36680,1609],{"class":90},[69,36682,1767],{"class":86},[69,36684,36685],{"class":90},"227",[69,36687,1767],{"class":86},[69,36689,36685],{"class":90},[69,36691,32551],{"class":86},[37,36693,36694],{"start":79},[40,36695,32564],{},[59,36697,36699],{"className":31614,"code":36698,"language":31616,"meta":64,"style":64},"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",[66,36700,36701,36707,36713,36723,36729,36739,36749,36759,36769,36779,36783,36794,36804,36808,36812,36816,36824,36836,36846,36862,36872,36904,36918,36928,36938,36942,36952,36966,36976,36986,36996,37002,37006,37010,37014,37018,37022,37030,37050,37054,37058,37062,37066,37070,37086,37090,37094,37102,37106,37110,37118,37122,37126,37130,37138,37142,37146,37150,37154,37162,37166,37174,37178,37186,37190,37198,37202,37210,37214,37218,37226,37230,37234,37238,37250,37274,37288,37292,37296,37300,37308,37312,37320,37324,37332,37336,37344,37348,37356,37360,37368,37372,37384,37388,37396,37400,37408,37412,37416,37420,37424,37432,37436,37452,37456,37464,37468,37472,37476,37480,37484,37488,37492,37508,37512,37524,37528,37540,37544,37556,37560,37568,37572,37580,37584,37588,37593,37599,37603,37612,37616,37633,37637,37646,37650,37668,37681,37686,37699,37703,37707,37715,37719,37723,37731,37735,37743,37747,37755,37759,37763,37805,37847,37851,37855,37871,37875,37891,37895,37899,37907,37911,37915,37927,37965,37970,37975,37984,37988,38002,38012,38018,38024,38030,38036,38040,38044,38050,38054,38058,38066,38070,38088,38092,38096,38100,38116,38120,38124,38128,38132,38136,38156,38176,38180,38184,38188,38196,38204,38208,38224,38244,38264,38268,38272,38280,38288,38292,38296,38300,38312,38316,38326,38334,38351],{"__ignoreMap":64},[69,36702,36703,36705],{"class":71,"line":72},[69,36704,31628],{"class":82},[69,36706,33058],{"class":86},[69,36708,36709,36711],{"class":71,"line":79},[69,36710,31628],{"class":82},[69,36712,33065],{"class":86},[69,36714,36715,36717,36719,36721],{"class":71,"line":106},[69,36716,31628],{"class":82},[69,36718,33076],{"class":86},[69,36720,32619],{"class":82},[69,36722,33081],{"class":86},[69,36724,36725,36727],{"class":71,"line":116},[69,36726,31628],{"class":82},[69,36728,31631],{"class":86},[69,36730,36731,36733,36735,36737],{"class":71,"line":133},[69,36732,31973],{"class":82},[69,36734,32651],{"class":86},[69,36736,31628],{"class":82},[69,36738,33098],{"class":86},[69,36740,36741,36743,36745,36747],{"class":71,"line":139},[69,36742,31973],{"class":82},[69,36744,32604],{"class":86},[69,36746,31628],{"class":82},[69,36748,32609],{"class":86},[69,36750,36751,36753,36755,36757],{"class":71,"line":401},[69,36752,31973],{"class":82},[69,36754,32634],{"class":86},[69,36756,31628],{"class":82},[69,36758,32639],{"class":86},[69,36760,36761,36763,36765,36767],{"class":71,"line":470},[69,36762,31628],{"class":82},[69,36764,32651],{"class":86},[69,36766,32619],{"class":82},[69,36768,32656],{"class":86},[69,36770,36771,36773,36775,36777],{"class":71,"line":475},[69,36772,31628],{"class":82},[69,36774,32668],{"class":86},[69,36776,32619],{"class":82},[69,36778,32673],{"class":86},[69,36780,36781],{"class":71,"line":482},[69,36782,33143],{"class":75},[69,36784,36785,36787,36789,36791],{"class":71,"line":497},[69,36786,31973],{"class":82},[69,36788,33150],{"class":86},[69,36790,31628],{"class":82},[69,36792,36793],{"class":86}," AlexNet\n",[69,36795,36796,36798,36800,36802],{"class":71,"line":502},[69,36797,31973],{"class":82},[69,36799,31976],{"class":86},[69,36801,31628],{"class":82},[69,36803,31981],{"class":86},[69,36805,36806],{"class":71,"line":509},[69,36807,3644],{"emptyLinePlaceholder":1325},[69,36809,36810],{"class":71,"line":524},[69,36811,3644],{"emptyLinePlaceholder":1325},[69,36813,36814],{"class":71,"line":2888},[69,36815,33178],{"class":75},[69,36817,36818,36820,36822],{"class":71,"line":2893},[69,36819,33183],{"class":82},[69,36821,33186],{"class":109},[69,36823,33189],{"class":86},[69,36825,36826,36828,36830,36832,36834],{"class":71,"line":2899},[69,36827,33194],{"class":86},[69,36829,1019],{"class":82},[69,36831,32691],{"class":86},[69,36833,32699],{"class":1022},[69,36835,32702],{"class":86},[69,36837,36838,36840,36842,36844],{"class":71,"line":2919},[69,36839,33207],{"class":6458},[69,36841,1019],{"class":82},[69,36843,32712],{"class":90},[69,36845,32702],{"class":86},[69,36847,36848,36850,36852,36854,36856,36858,36860],{"class":71,"line":2924},[69,36849,33218],{"class":6458},[69,36851,1019],{"class":82},[69,36853,32729],{"class":86},[69,36855,32732],{"class":6458},[69,36857,1019],{"class":82},[69,36859,36685],{"class":90},[69,36861,32740],{"class":86},[69,36863,36864,36866,36868,36870],{"class":71,"line":2938},[69,36865,33235],{"class":6458},[69,36867,1019],{"class":82},[69,36869,32712],{"class":90},[69,36871,1404],{"class":86},[69,36873,36874,36876,36878,36880,36882,36884,36886,36888,36890,36892,36894,36896,36898,36900,36902],{"class":71,"line":2943},[69,36875,33246],{"class":86},[69,36877,1019],{"class":82},[69,36879,33251],{"class":86},[69,36881,33254],{"class":90},[69,36883,1398],{"class":86},[69,36885,33259],{"class":90},[69,36887,1843],{"class":82},[69,36889,8600],{"class":90},[69,36891,33266],{"class":86},[69,36893,33254],{"class":90},[69,36895,1398],{"class":86},[69,36897,33273],{"class":90},[69,36899,1843],{"class":82},[69,36901,8600],{"class":90},[69,36903,33280],{"class":86},[69,36905,36906,36908,36910,36912,36914,36916],{"class":71,"line":2972},[69,36907,33285],{"class":86},[69,36909,1019],{"class":82},[69,36911,33290],{"class":86},[69,36913,32773],{"class":6458},[69,36915,1019],{"class":82},[69,36917,32778],{"class":86},[69,36919,36920,36922,36924,36926],{"class":71,"line":2977},[69,36921,33301],{"class":6458},[69,36923,1019],{"class":82},[69,36925,33306],{"class":90},[69,36927,32702],{"class":86},[69,36929,36930,36932,36934,36936],{"class":71,"line":2994},[69,36931,33313],{"class":6458},[69,36933,1019],{"class":82},[69,36935,32712],{"class":90},[69,36937,32702],{"class":86},[69,36939,36940],{"class":71,"line":2999},[69,36941,33324],{"class":75},[69,36943,36944,36946,36948,36950],{"class":71,"line":3004},[69,36945,33329],{"class":6458},[69,36947,1019],{"class":82},[69,36949,1784],{"class":90},[69,36951,1404],{"class":86},[69,36953,36954,36956,36958,36960,36962,36964],{"class":71,"line":3009},[69,36955,33340],{"class":86},[69,36957,1019],{"class":82},[69,36959,32770],{"class":86},[69,36961,32773],{"class":6458},[69,36963,1019],{"class":82},[69,36965,33351],{"class":86},[69,36967,36968,36970,36972,36974],{"class":71,"line":3023},[69,36969,33356],{"class":6458},[69,36971,1019],{"class":82},[69,36973,33306],{"class":90},[69,36975,32702],{"class":86},[69,36977,36978,36980,36982,36984],{"class":71,"line":3028},[69,36979,33367],{"class":6458},[69,36981,1019],{"class":82},[69,36983,32712],{"class":90},[69,36985,32702],{"class":86},[69,36987,36988,36990,36992,36994],{"class":71,"line":3821},[69,36989,33378],{"class":6458},[69,36991,1019],{"class":82},[69,36993,1784],{"class":90},[69,36995,1404],{"class":86},[69,36997,36998,37000],{"class":71,"line":3835},[69,36999,5334],{"class":82},[69,37001,33391],{"class":86},[69,37003,37004],{"class":71,"line":3843},[69,37005,3644],{"emptyLinePlaceholder":1325},[69,37007,37008],{"class":71,"line":3848},[69,37009,33400],{"class":75},[69,37011,37012],{"class":71,"line":3854},[69,37013,33405],{"class":75},[69,37015,37016],{"class":71,"line":3860},[69,37017,3644],{"emptyLinePlaceholder":1325},[69,37019,37020],{"class":71,"line":3865},[69,37021,33414],{"class":75},[69,37023,37024,37026,37028],{"class":71,"line":9190},[69,37025,33183],{"class":82},[69,37027,33421],{"class":109},[69,37029,33424],{"class":86},[69,37031,37032,37034,37036,37038,37040,37042,37044,37046,37048],{"class":71,"line":9214},[69,37033,32473],{"class":86},[69,37035,1019],{"class":82},[69,37037,31687],{"class":86},[69,37039,32480],{"class":1022},[69,37041,2949],{"class":82},[69,37043,32485],{"class":86},[69,37045,2946],{"class":82},[69,37047,33443],{"class":1022},[69,37049,1404],{"class":86},[69,37051,37052],{"class":71,"line":9219},[69,37053,3644],{"emptyLinePlaceholder":1325},[69,37055,37056],{"class":71,"line":9225},[69,37057,3644],{"emptyLinePlaceholder":1325},[69,37059,37060],{"class":71,"line":9252},[69,37061,33458],{"class":75},[69,37063,37064],{"class":71,"line":9257},[69,37065,33463],{"class":75},[69,37067,37068],{"class":71,"line":9263},[69,37069,33468],{"class":75},[69,37071,37072,37074,37076,37078,37080,37082,37084],{"class":71,"line":9275},[69,37073,33473],{"class":86},[69,37075,1019],{"class":82},[69,37077,33478],{"class":86},[69,37079,33481],{"class":6458},[69,37081,1019],{"class":82},[69,37083,33486],{"class":90},[69,37085,1404],{"class":86},[69,37087,37088],{"class":71,"line":9287},[69,37089,3644],{"emptyLinePlaceholder":1325},[69,37091,37092],{"class":71,"line":9299},[69,37093,33497],{"class":75},[69,37095,37096,37098,37100],{"class":71,"line":10958},[69,37097,33502],{"class":86},[69,37099,1019],{"class":82},[69,37101,33507],{"class":86},[69,37103,37104],{"class":71,"line":10983},[69,37105,3644],{"emptyLinePlaceholder":1325},[69,37107,37108],{"class":71,"line":11006},[69,37109,33516],{"class":75},[69,37111,37112,37114,37116],{"class":71,"line":11030},[69,37113,32525],{"class":86},[69,37115,1019],{"class":82},[69,37117,33525],{"class":86},[69,37119,37120],{"class":71,"line":11035},[69,37121,33530],{"class":75},[69,37123,37124],{"class":71,"line":11040},[69,37125,33535],{"class":75},[69,37127,37128],{"class":71,"line":11045},[69,37129,33540],{"class":75},[69,37131,37132,37134,37136],{"class":71,"line":11054},[69,37133,33545],{"class":86},[69,37135,1019],{"class":82},[69,37137,33550],{"class":86},[69,37139,37140],{"class":71,"line":11059},[69,37141,3644],{"emptyLinePlaceholder":1325},[69,37143,37144],{"class":71,"line":11065},[69,37145,3644],{"emptyLinePlaceholder":1325},[69,37147,37148],{"class":71,"line":11086},[69,37149,33563],{"class":75},[69,37151,37152],{"class":71,"line":11092},[69,37153,33568],{"class":75},[69,37155,37156,37158,37160],{"class":71,"line":11106},[69,37157,33573],{"class":86},[69,37159,1019],{"class":82},[69,37161,33578],{"class":90},[69,37163,37164],{"class":71,"line":11112},[69,37165,33583],{"class":75},[69,37167,37168,37170,37172],{"class":71,"line":11139},[69,37169,33588],{"class":86},[69,37171,1019],{"class":82},[69,37173,33593],{"class":86},[69,37175,37176],{"class":71,"line":11148},[69,37177,33598],{"class":75},[69,37179,37180,37182,37184],{"class":71,"line":11154},[69,37181,33603],{"class":86},[69,37183,1019],{"class":82},[69,37185,33593],{"class":86},[69,37187,37188],{"class":71,"line":11162},[69,37189,33612],{"class":75},[69,37191,37192,37194,37196],{"class":71,"line":11167},[69,37193,33617],{"class":86},[69,37195,1019],{"class":82},[69,37197,33593],{"class":86},[69,37199,37200],{"class":71,"line":17843},[69,37201,33626],{"class":75},[69,37203,37204,37206,37208],{"class":71,"line":17849},[69,37205,33631],{"class":86},[69,37207,1019],{"class":82},[69,37209,33593],{"class":86},[69,37211,37212],{"class":71,"line":17872},[69,37213,3644],{"emptyLinePlaceholder":1325},[69,37215,37216],{"class":71,"line":17878},[69,37217,33644],{"class":75},[69,37219,37220,37222,37224],{"class":71,"line":17901},[69,37221,33649],{"class":86},[69,37223,1019],{"class":82},[69,37225,33654],{"class":86},[69,37227,37228],{"class":71,"line":17915},[69,37229,3644],{"emptyLinePlaceholder":1325},[69,37231,37232],{"class":71,"line":17935},[69,37233,3644],{"emptyLinePlaceholder":1325},[69,37235,37236],{"class":71,"line":17941},[69,37237,33667],{"class":75},[69,37239,37240,37242,37244,37246,37248],{"class":71,"line":17952},[69,37241,4445],{"class":82},[69,37243,33674],{"class":86},[69,37245,27280],{"class":82},[69,37247,33679],{"class":90},[69,37249,33682],{"class":86},[69,37251,37252,37254,37256,37258,37260,37262,37264,37266,37268,37270,37272],{"class":71,"line":17975},[69,37253,33687],{"class":90},[69,37255,1398],{"class":86},[69,37257,33692],{"class":1022},[69,37259,33695],{"class":90},[69,37261,1972],{"class":1022},[69,37263,33695],{"class":90},[69,37265,1642],{"class":1022},[69,37267,33704],{"class":86},[69,37269,1920],{"class":82},[69,37271,1609],{"class":90},[69,37273,31733],{"class":86},[69,37275,37276,37278,37280,37282,37284,37286],{"class":71,"line":17997},[69,37277,33687],{"class":90},[69,37279,1398],{"class":86},[69,37281,33719],{"class":1022},[69,37283,1843],{"class":82},[69,37285,390],{"class":90},[69,37287,1404],{"class":86},[69,37289,37290],{"class":71,"line":18002},[69,37291,3644],{"emptyLinePlaceholder":1325},[69,37293,37294],{"class":71,"line":18008},[69,37295,33734],{"class":75},[69,37297,37298],{"class":71,"line":18022},[69,37299,33739],{"class":75},[69,37301,37302,37304,37306],{"class":71,"line":18035},[69,37303,33744],{"class":86},[69,37305,1019],{"class":82},[69,37307,33578],{"class":90},[69,37309,37310],{"class":71,"line":18040},[69,37311,33753],{"class":75},[69,37313,37314,37316,37318],{"class":71,"line":18054},[69,37315,33758],{"class":86},[69,37317,1019],{"class":82},[69,37319,4329],{"class":90},[69,37321,37322],{"class":71,"line":18059},[69,37323,33767],{"class":75},[69,37325,37326,37328,37330],{"class":71,"line":18065},[69,37327,33772],{"class":86},[69,37329,1019],{"class":82},[69,37331,33578],{"class":90},[69,37333,37334],{"class":71,"line":18070},[69,37335,33781],{"class":75},[69,37337,37338,37340,37342],{"class":71,"line":18084},[69,37339,33786],{"class":86},[69,37341,1019],{"class":82},[69,37343,4329],{"class":90},[69,37345,37346],{"class":71,"line":18089},[69,37347,33795],{"class":75},[69,37349,37350,37352,37354],{"class":71,"line":18094},[69,37351,33800],{"class":86},[69,37353,1019],{"class":82},[69,37355,4329],{"class":90},[69,37357,37358],{"class":71,"line":18108},[69,37359,33809],{"class":75},[69,37361,37362,37364,37366],{"class":71,"line":18120},[69,37363,33814],{"class":86},[69,37365,1019],{"class":82},[69,37367,4329],{"class":90},[69,37369,37370],{"class":71,"line":18125},[69,37371,33823],{"class":75},[69,37373,37374,37376,37378,37380,37382],{"class":71,"line":18138},[69,37375,4647],{"class":82},[69,37377,32837],{"class":86},[69,37379,27280],{"class":82},[69,37381,32842],{"class":90},[69,37383,33836],{"class":86},[69,37385,37386],{"class":71,"line":18143},[69,37387,33841],{"class":75},[69,37389,37390,37392,37394],{"class":71,"line":18148},[69,37391,33846],{"class":86},[69,37393,1019],{"class":82},[69,37395,33851],{"class":86},[69,37397,37398],{"class":71,"line":18153},[69,37399,33856],{"class":75},[69,37401,37402,37404,37406],{"class":71,"line":18166},[69,37403,33861],{"class":86},[69,37405,1019],{"class":82},[69,37407,33866],{"class":86},[69,37409,37410],{"class":71,"line":18171},[69,37411,33872],{"class":75},[69,37413,37414],{"class":71,"line":33869},[69,37415,33878],{"class":86},[69,37417,37418],{"class":71,"line":33875},[69,37419,33884],{"class":75},[69,37421,37422],{"class":71,"line":33881},[69,37423,33890],{"class":75},[69,37425,37426,37428,37430],{"class":71,"line":33887},[69,37427,33896],{"class":86},[69,37429,1019],{"class":82},[69,37431,33901],{"class":86},[69,37433,37434],{"class":71,"line":33893},[69,37435,33907],{"class":75},[69,37437,37438,37440,37442,37444,37446,37448,37450],{"class":71,"line":33904},[69,37439,33913],{"class":86},[69,37441,1019],{"class":82},[69,37443,33918],{"class":86},[69,37445,33921],{"class":6458},[69,37447,1019],{"class":82},[69,37449,1609],{"class":90},[69,37451,1404],{"class":86},[69,37453,37454],{"class":71,"line":33910},[69,37455,33933],{"class":75},[69,37457,37458,37460,37462],{"class":71,"line":33930},[69,37459,33939],{"class":86},[69,37461,1019],{"class":82},[69,37463,33944],{"class":86},[69,37465,37466],{"class":71,"line":33936},[69,37467,33950],{"class":75},[69,37469,37470],{"class":71,"line":33947},[69,37471,33956],{"class":86},[69,37473,37474],{"class":71,"line":33953},[69,37475,33962],{"class":75},[69,37477,37478],{"class":71,"line":33959},[69,37479,33968],{"class":86},[69,37481,37482],{"class":71,"line":33965},[69,37483,33974],{"class":75},[69,37485,37486],{"class":71,"line":33971},[69,37487,33980],{"class":86},[69,37489,37490],{"class":71,"line":33977},[69,37491,33986],{"class":75},[69,37493,37494,37496,37498,37500,37502,37504,37506],{"class":71,"line":33983},[69,37495,33992],{"class":86},[69,37497,10719],{"class":82},[69,37499,33997],{"class":86},[69,37501,1843],{"class":82},[69,37503,34002],{"class":86},[69,37505,1583],{"class":90},[69,37507,1404],{"class":86},[69,37509,37510],{"class":71,"line":33989},[69,37511,34012],{"class":75},[69,37513,37514,37516,37518,37520,37522],{"class":71,"line":34009},[69,37515,34018],{"class":86},[69,37517,10719],{"class":82},[69,37519,34023],{"class":86},[69,37521,4193],{"class":82},[69,37523,34028],{"class":86},[69,37525,37526],{"class":71,"line":34015},[69,37527,34034],{"class":75},[69,37529,37530,37532,37534,37536,37538],{"class":71,"line":34031},[69,37531,34040],{"class":86},[69,37533,10719],{"class":82},[69,37535,34002],{"class":86},[69,37537,1583],{"class":90},[69,37539,1404],{"class":86},[69,37541,37542],{"class":71,"line":34037},[69,37543,34054],{"class":75},[69,37545,37546,37548,37550,37552,37554],{"class":71,"line":34051},[69,37547,4647],{"class":82},[69,37549,34062],{"class":86},[69,37551,27280],{"class":82},[69,37553,32842],{"class":90},[69,37555,34069],{"class":86},[69,37557,37558],{"class":71,"line":34057},[69,37559,34075],{"class":75},[69,37561,37562,37564,37566],{"class":71,"line":34072},[69,37563,33846],{"class":86},[69,37565,1019],{"class":82},[69,37567,33851],{"class":86},[69,37569,37570],{"class":71,"line":34078},[69,37571,34090],{"class":75},[69,37573,37574,37576,37578],{"class":71,"line":34087},[69,37575,33861],{"class":86},[69,37577,1019],{"class":82},[69,37579,33866],{"class":86},[69,37581,37582],{"class":71,"line":34093},[69,37583,34105],{"class":75},[69,37585,37586],{"class":71,"line":34102},[69,37587,34111],{"class":86},[69,37589,37590],{"class":71,"line":34108},[69,37591,37592],{"class":75},"            # 验证时不计算梯度以节省内存\u002F计算\n",[69,37594,37595,37597],{"class":71,"line":34114},[69,37596,34117],{"class":82},[69,37598,34120],{"class":86},[69,37600,37601],{"class":71,"line":34123},[69,37602,34126],{"class":75},[69,37604,37605,37608,37610],{"class":71,"line":34129},[69,37606,37607],{"class":86},"                output",[69,37609,1019],{"class":82},[69,37611,33901],{"class":86},[69,37613,37614],{"class":71,"line":34140},[69,37615,34143],{"class":75},[69,37617,37618,37621,37623,37625,37627,37629,37631],{"class":71,"line":34146},[69,37619,37620],{"class":86},"                pre_lab",[69,37622,1019],{"class":82},[69,37624,33918],{"class":86},[69,37626,33921],{"class":6458},[69,37628,1019],{"class":82},[69,37630,1609],{"class":90},[69,37632,1404],{"class":86},[69,37634,37635],{"class":71,"line":34165},[69,37636,34168],{"class":75},[69,37638,37639,37642,37644],{"class":71,"line":34171},[69,37640,37641],{"class":86},"                val_batch_loss",[69,37643,1019],{"class":82},[69,37645,33944],{"class":86},[69,37647,37648],{"class":71,"line":34182},[69,37649,34185],{"class":75},[69,37651,37652,37655,37657,37660,37662,37664,37666],{"class":71,"line":34188},[69,37653,37654],{"class":86},"                val_loss",[69,37656,10719],{"class":82},[69,37658,37659],{"class":86},"val_batch_loss.item()",[69,37661,1843],{"class":82},[69,37663,34002],{"class":86},[69,37665,1583],{"class":90},[69,37667,1404],{"class":86},[69,37669,37670,37673,37675,37677,37679],{"class":71,"line":34208},[69,37671,37672],{"class":86},"                val_corrects",[69,37674,10719],{"class":82},[69,37676,34023],{"class":86},[69,37678,4193],{"class":82},[69,37680,34028],{"class":86},[69,37682,37683],{"class":71,"line":34224},[69,37684,37685],{"class":75},"            # 当前用于验证的样本数量\n",[69,37687,37688,37691,37693,37695,37697],{"class":71,"line":34230},[69,37689,37690],{"class":86},"            val_num",[69,37692,10719],{"class":82},[69,37694,34002],{"class":86},[69,37696,1583],{"class":90},[69,37698,1404],{"class":86},[69,37700,37701],{"class":71,"line":34244},[69,37702,34247],{"class":75},[69,37704,37705],{"class":71,"line":34250},[69,37706,34253],{"class":75},[69,37708,37709,37711,37713],{"class":71,"line":34256},[69,37710,34259],{"class":86},[69,37712,1972],{"class":82},[69,37714,34264],{"class":86},[69,37716,37717],{"class":71,"line":34267},[69,37718,34270],{"class":75},[69,37720,37721],{"class":71,"line":34273},[69,37722,34276],{"class":75},[69,37724,37725,37727,37729],{"class":71,"line":34279},[69,37726,34282],{"class":86},[69,37728,1972],{"class":82},[69,37730,34264],{"class":86},[69,37732,37733],{"class":71,"line":34289},[69,37734,34292],{"class":75},[69,37736,37737,37739,37741],{"class":71,"line":34295},[69,37738,34298],{"class":86},[69,37740,1972],{"class":82},[69,37742,34303],{"class":86},[69,37744,37745],{"class":71,"line":34306},[69,37746,34309],{"class":75},[69,37748,37749,37751,37753],{"class":71,"line":34312},[69,37750,34315],{"class":86},[69,37752,1972],{"class":82},[69,37754,34303],{"class":86},[69,37756,37757],{"class":71,"line":34322},[69,37758,3644],{"emptyLinePlaceholder":1325},[69,37760,37761],{"class":71,"line":34327},[69,37762,34330],{"class":75},[69,37764,37765,37767,37769,37771,37773,37775,37777,37779,37781,37783,37785,37787,37789,37791,37793,37795,37797,37799,37801,37803],{"class":71,"line":34333},[69,37766,33687],{"class":90},[69,37768,1398],{"class":86},[69,37770,4836],{"class":1022},[69,37772,33695],{"class":90},[69,37774,34344],{"class":1022},[69,37776,2283],{"class":90},[69,37778,34349],{"class":82},[69,37780,2332],{"class":90},[69,37782,34354],{"class":1022},[69,37784,2283],{"class":90},[69,37786,34349],{"class":82},[69,37788,2332],{"class":90},[69,37790,4836],{"class":1022},[69,37792,34365],{"class":86},[69,37794,1920],{"class":82},[69,37796,1609],{"class":90},[69,37798,34372],{"class":86},[69,37800,1920],{"class":82},[69,37802,1609],{"class":90},[69,37804,34379],{"class":86},[69,37806,37807,37809,37811,37813,37815,37817,37819,37821,37823,37825,37827,37829,37831,37833,37835,37837,37839,37841,37843,37845],{"class":71,"line":34382},[69,37808,33687],{"class":90},[69,37810,1398],{"class":86},[69,37812,4836],{"class":1022},[69,37814,33695],{"class":90},[69,37816,34393],{"class":1022},[69,37818,2283],{"class":90},[69,37820,34349],{"class":82},[69,37822,2332],{"class":90},[69,37824,34402],{"class":1022},[69,37826,2283],{"class":90},[69,37828,34349],{"class":82},[69,37830,2332],{"class":90},[69,37832,4836],{"class":1022},[69,37834,34413],{"class":86},[69,37836,1920],{"class":82},[69,37838,1609],{"class":90},[69,37840,34420],{"class":86},[69,37842,1920],{"class":82},[69,37844,1609],{"class":90},[69,37846,34379],{"class":86},[69,37848,37849],{"class":71,"line":34429},[69,37850,3644],{"emptyLinePlaceholder":1325},[69,37852,37853],{"class":71,"line":34434},[69,37854,34437],{"class":75},[69,37856,37857,37859,37861,37863,37865,37867,37869],{"class":71,"line":34440},[69,37858,3741],{"class":82},[69,37860,34445],{"class":86},[69,37862,1920],{"class":82},[69,37864,1609],{"class":90},[69,37866,2326],{"class":86},[69,37868,2346],{"class":82},[69,37870,34456],{"class":86},[69,37872,37873],{"class":71,"line":34459},[69,37874,34462],{"class":75},[69,37876,37877,37879,37881,37883,37885,37887,37889],{"class":71,"line":34465},[69,37878,34468],{"class":86},[69,37880,1436],{"class":90},[69,37882,1019],{"class":82},[69,37884,34475],{"class":86},[69,37886,1920],{"class":82},[69,37888,1609],{"class":90},[69,37890,34482],{"class":86},[69,37892,37893],{"class":71,"line":34485},[69,37894,34488],{"class":75},[69,37896,37897],{"class":71,"line":34491},[69,37898,34494],{"class":75},[69,37900,37901,37903,37905],{"class":71,"line":34497},[69,37902,34500],{"class":86},[69,37904,1019],{"class":82},[69,37906,33550],{"class":86},[69,37908,37909],{"class":71,"line":34507},[69,37910,3644],{"emptyLinePlaceholder":1325},[69,37912,37913],{"class":71,"line":34512},[69,37914,34515],{"class":75},[69,37916,37917,37919,37921,37923,37925],{"class":71,"line":34518},[69,37918,34521],{"class":86},[69,37920,1019],{"class":82},[69,37922,34526],{"class":86},[69,37924,1920],{"class":82},[69,37926,34531],{"class":86},[69,37928,37929,37931,37933,37935,37937,37939,37941,37943,37945,37947,37949,37951,37953,37955,37957,37959,37961,37963],{"class":71,"line":34534},[69,37930,33687],{"class":90},[69,37932,1398],{"class":86},[69,37934,34541],{"class":1022},[69,37936,2283],{"class":90},[69,37938,34546],{"class":82},[69,37940,2332],{"class":90},[69,37942,1932],{"class":1022},[69,37944,2283],{"class":90},[69,37946,34546],{"class":82},[69,37948,2332],{"class":90},[69,37950,34559],{"class":1022},[69,37952,34562],{"class":86},[69,37954,34565],{"class":82},[69,37956,2294],{"class":90},[69,37958,34570],{"class":86},[69,37960,127],{"class":82},[69,37962,2294],{"class":90},[69,37964,31733],{"class":86},[69,37966,37967],{"class":71,"line":34579},[69,37968,37969],{"class":75},"    # 选择最优参数并保存\n",[69,37971,37972],{"class":71,"line":34585},[69,37973,37974],{"class":75},"    # 保存最佳模型权重字典\n",[69,37976,37977,37980,37982],{"class":71,"line":34591},[69,37978,37979],{"class":86},"    torch.save(best_model_wts,",[69,37981,34603],{"class":1022},[69,37983,1404],{"class":86},[69,37985,37986],{"class":71,"line":34597},[69,37987,34623],{"class":75},[69,37989,37990,37992,37994,37996,37998,38000],{"class":71,"line":34608},[69,37991,34629],{"class":86},[69,37993,1019],{"class":82},[69,37995,34634],{"class":86},[69,37997,34637],{"class":6458},[69,37999,1019],{"class":82},[69,38001,2797],{"class":86},[69,38003,38004,38006,38008,38010],{"class":71,"line":34614},[69,38005,34647],{"class":1022},[69,38007,2246],{"class":86},[69,38009,34652],{"class":90},[69,38011,34655],{"class":86},[69,38013,38014,38016],{"class":71,"line":34620},[69,38015,34661],{"class":1022},[69,38017,34664],{"class":86},[69,38019,38020,38022],{"class":71,"line":34626},[69,38021,34670],{"class":1022},[69,38023,34673],{"class":86},[69,38025,38026,38028],{"class":71,"line":34644},[69,38027,34679],{"class":1022},[69,38029,34682],{"class":86},[69,38031,38032,38034],{"class":71,"line":34658},[69,38033,34688],{"class":1022},[69,38035,34691],{"class":86},[69,38037,38038],{"class":71,"line":34667},[69,38039,34697],{"class":86},[69,38041,38042],{"class":71,"line":34676},[69,38043,34703],{"class":75},[69,38045,38046,38048],{"class":71,"line":34685},[69,38047,5334],{"class":82},[69,38049,34711],{"class":86},[69,38051,38052],{"class":71,"line":34694},[69,38053,3644],{"emptyLinePlaceholder":1325},[69,38055,38056],{"class":71,"line":34700},[69,38057,34722],{"class":75},[69,38059,38060,38062,38064],{"class":71,"line":34706},[69,38061,33183],{"class":82},[69,38063,34730],{"class":109},[69,38065,34733],{"class":86},[69,38067,38068],{"class":71,"line":34714},[69,38069,34739],{"class":75},[69,38071,38072,38074,38076,38078,38080,38082,38084,38086],{"class":71,"line":34719},[69,38073,34745],{"class":86},[69,38075,32929],{"class":6458},[69,38077,1019],{"class":82},[69,38079,1398],{"class":86},[69,38081,1886],{"class":90},[69,38083,1767],{"class":86},[69,38085,1684],{"class":90},[69,38087,31733],{"class":86},[69,38089,38090],{"class":71,"line":34725},[69,38091,34765],{"class":75},[69,38093,38094],{"class":71,"line":34736},[69,38095,34771],{"class":75},[69,38097,38098],{"class":71,"line":34742},[69,38099,34777],{"class":75},[69,38101,38102,38104,38106,38108,38110,38112,38114],{"class":71,"line":34762},[69,38103,32963],{"class":86},[69,38105,1609],{"class":90},[69,38107,1767],{"class":86},[69,38109,1471],{"class":90},[69,38111,1767],{"class":86},[69,38113,1609],{"class":90},[69,38115,1404],{"class":86},[69,38117,38118],{"class":71,"line":34768},[69,38119,34800],{"class":75},[69,38121,38122],{"class":71,"line":34774},[69,38123,34806],{"class":75},[69,38125,38126],{"class":71,"line":34780},[69,38127,34812],{"class":75},[69,38129,38130],{"class":71,"line":34797},[69,38131,34818],{"class":75},[69,38133,38134],{"class":71,"line":34803},[69,38135,34824],{"class":75},[69,38137,38138,38140,38142,38144,38146,38148,38150,38152,38154],{"class":71,"line":34809},[69,38139,34830],{"class":86},[69,38141,34833],{"class":1022},[69,38143,34836],{"class":86},[69,38145,34839],{"class":1022},[69,38147,1767],{"class":86},[69,38149,34844],{"class":6458},[69,38151,1019],{"class":82},[69,38153,34849],{"class":1022},[69,38155,1404],{"class":86},[69,38157,38158,38160,38162,38164,38166,38168,38170,38172,38174],{"class":71,"line":34815},[69,38159,34830],{"class":86},[69,38161,34833],{"class":1022},[69,38163,34861],{"class":86},[69,38165,34864],{"class":1022},[69,38167,1767],{"class":86},[69,38169,34844],{"class":6458},[69,38171,1019],{"class":82},[69,38173,34873],{"class":1022},[69,38175,1404],{"class":86},[69,38177,38178],{"class":71,"line":34821},[69,38179,34881],{"class":75},[69,38181,38182],{"class":71,"line":34827},[69,38183,34887],{"class":86},[69,38185,38186],{"class":71,"line":34854},[69,38187,34893],{"class":75},[69,38189,38190,38192,38194],{"class":71,"line":34878},[69,38191,34899],{"class":86},[69,38193,34902],{"class":1022},[69,38195,1404],{"class":86},[69,38197,38198,38200,38202],{"class":71,"line":34884},[69,38199,34910],{"class":86},[69,38201,34913],{"class":1022},[69,38203,1404],{"class":86},[69,38205,38206],{"class":71,"line":34890},[69,38207,34921],{"class":75},[69,38209,38210,38212,38214,38216,38218,38220,38222],{"class":71,"line":34896},[69,38211,32963],{"class":86},[69,38213,1609],{"class":90},[69,38215,1767],{"class":86},[69,38217,1471],{"class":90},[69,38219,1767],{"class":86},[69,38221,1471],{"class":90},[69,38223,1404],{"class":86},[69,38225,38226,38228,38230,38232,38234,38236,38238,38240,38242],{"class":71,"line":34907},[69,38227,34830],{"class":86},[69,38229,34833],{"class":1022},[69,38231,34948],{"class":86},[69,38233,34839],{"class":1022},[69,38235,1767],{"class":86},[69,38237,34844],{"class":6458},[69,38239,1019],{"class":82},[69,38241,34959],{"class":1022},[69,38243,1404],{"class":86},[69,38245,38246,38248,38250,38252,38254,38256,38258,38260,38262],{"class":71,"line":34918},[69,38247,34830],{"class":86},[69,38249,34833],{"class":1022},[69,38251,34971],{"class":86},[69,38253,34864],{"class":1022},[69,38255,1767],{"class":86},[69,38257,34844],{"class":6458},[69,38259,1019],{"class":82},[69,38261,34982],{"class":1022},[69,38263,1404],{"class":86},[69,38265,38266],{"class":71,"line":34924},[69,38267,34990],{"class":75},[69,38269,38270],{"class":71,"line":34941},[69,38271,34887],{"class":86},[69,38273,38274,38276,38278],{"class":71,"line":34964},[69,38275,34899],{"class":86},[69,38277,34833],{"class":1022},[69,38279,1404],{"class":86},[69,38281,38282,38284,38286],{"class":71,"line":34987},[69,38283,34910],{"class":86},[69,38285,35012],{"class":1022},[69,38287,1404],{"class":86},[69,38289,38290],{"class":71,"line":34993},[69,38291,35020],{"class":86},[69,38293,38294],{"class":71,"line":34998},[69,38295,3644],{"emptyLinePlaceholder":1325},[69,38297,38298],{"class":71,"line":35007},[69,38299,35031],{"class":75},[69,38301,38302,38304,38306,38308,38310],{"class":71,"line":35017},[69,38303,2782],{"class":82},[69,38305,32456],{"class":90},[69,38307,4193],{"class":82},[69,38309,32461],{"class":1022},[69,38311,4983],{"class":86},[69,38313,38314],{"class":71,"line":35023},[69,38315,35050],{"class":75},[69,38317,38318,38321,38323],{"class":71,"line":35028},[69,38319,38320],{"class":86},"    AlexNet",[69,38322,1019],{"class":82},[69,38324,38325],{"class":86},"AlexNet()\n",[69,38327,38328,38330,38332],{"class":71,"line":35034},[69,38329,35067],{"class":86},[69,38331,1019],{"class":82},[69,38333,35072],{"class":86},[69,38335,38336,38338,38340,38343,38345,38347,38349],{"class":71,"line":35047},[69,38337,34629],{"class":86},[69,38339,1019],{"class":82},[69,38341,38342],{"class":86},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[69,38344,35085],{"class":6458},[69,38346,1019],{"class":82},[69,38348,2087],{"class":90},[69,38350,1404],{"class":86},[69,38352,38353],{"class":71,"line":35053},[69,38354,35097],{"class":86},[37,38356,38357],{"start":106},[40,38358,35110],{},[59,38360,38362],{"className":31614,"code":38361,"language":31616,"meta":64,"style":64},"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",[66,38363,38364,38370,38380,38390,38400,38404,38414,38424,38435,38439,38443,38447,38455,38471,38481,38497,38507,38521,38525,38535,38545,38555,38561,38565,38569,38577,38581,38597,38605,38609,38613,38621,38629,38633,38637,38641,38645,38651,38655,38665,38673,38681,38685,38689,38693,38701,38705,38721,38725,38729,38733,38745,38749,38761,38765,38769,38781,38785,38795,38799,38803,38815,38819,38827,38831,38835,38843,38847,38855,38859,38863,38867,38871,38875,38891,38899,38903,38907,38955,38961,38965,38975,38983,38991,38995,38999,39003,39007,39015,39019,39035,39039,39047,39055],{"__ignoreMap":64},[69,38365,38366,38368],{"class":71,"line":72},[69,38367,31628],{"class":82},[69,38369,31631],{"class":86},[69,38371,38372,38374,38376,38378],{"class":71,"line":79},[69,38373,31628],{"class":82},[69,38375,32651],{"class":86},[69,38377,32619],{"class":82},[69,38379,32656],{"class":86},[69,38381,38382,38384,38386,38388],{"class":71,"line":106},[69,38383,31973],{"class":82},[69,38385,35138],{"class":86},[69,38387,31628],{"class":82},[69,38389,35143],{"class":86},[69,38391,38392,38394,38396,38398],{"class":71,"line":116},[69,38393,31973],{"class":82},[69,38395,32634],{"class":86},[69,38397,31628],{"class":82},[69,38399,32639],{"class":86},[69,38401,38402],{"class":71,"line":133},[69,38403,35158],{"class":75},[69,38405,38406,38408,38410,38412],{"class":71,"line":139},[69,38407,31973],{"class":82},[69,38409,32604],{"class":86},[69,38411,31628],{"class":82},[69,38413,32609],{"class":86},[69,38415,38416,38418,38420,38422],{"class":71,"line":401},[69,38417,31973],{"class":82},[69,38419,33150],{"class":86},[69,38421,31628],{"class":82},[69,38423,36793],{"class":86},[69,38425,38426,38428,38431,38433],{"class":71,"line":470},[69,38427,31973],{"class":82},[69,38429,38430],{"class":86}," 练习.AlexNet.model ",[69,38432,31628],{"class":82},[69,38434,36793],{"class":86},[69,38436,38437],{"class":71,"line":475},[69,38438,3644],{"emptyLinePlaceholder":1325},[69,38440,38441],{"class":71,"line":482},[69,38442,3644],{"emptyLinePlaceholder":1325},[69,38444,38445],{"class":71,"line":497},[69,38446,35187],{"class":75},[69,38448,38449,38451,38453],{"class":71,"line":502},[69,38450,33183],{"class":82},[69,38452,35194],{"class":109},[69,38454,33189],{"class":86},[69,38456,38457,38459,38461,38463,38465,38467,38469],{"class":71,"line":509},[69,38458,35201],{"class":86},[69,38460,1019],{"class":82},[69,38462,32691],{"class":86},[69,38464,32694],{"class":6458},[69,38466,1019],{"class":82},[69,38468,32699],{"class":1022},[69,38470,32702],{"class":86},[69,38472,38473,38475,38477,38479],{"class":71,"line":524},[69,38474,35218],{"class":6458},[69,38476,1019],{"class":82},[69,38478,35223],{"class":90},[69,38480,32702],{"class":86},[69,38482,38483,38485,38487,38489,38491,38493,38495],{"class":71,"line":2888},[69,38484,35230],{"class":6458},[69,38486,1019],{"class":82},[69,38488,32729],{"class":86},[69,38490,32732],{"class":6458},[69,38492,1019],{"class":82},[69,38494,36685],{"class":90},[69,38496,32740],{"class":86},[69,38498,38499,38501,38503,38505],{"class":71,"line":2893},[69,38500,35247],{"class":6458},[69,38502,1019],{"class":82},[69,38504,32712],{"class":90},[69,38506,1404],{"class":86},[69,38508,38509,38511,38513,38515,38517,38519],{"class":71,"line":2899},[69,38510,35258],{"class":86},[69,38512,1019],{"class":82},[69,38514,32770],{"class":86},[69,38516,32773],{"class":6458},[69,38518,1019],{"class":82},[69,38520,35269],{"class":86},[69,38522,38523],{"class":71,"line":2919},[69,38524,35274],{"class":75},[69,38526,38527,38529,38531,38533],{"class":71,"line":2924},[69,38528,35279],{"class":6458},[69,38530,1019],{"class":82},[69,38532,1609],{"class":90},[69,38534,32702],{"class":86},[69,38536,38537,38539,38541,38543],{"class":71,"line":2938},[69,38538,35290],{"class":6458},[69,38540,1019],{"class":82},[69,38542,32712],{"class":90},[69,38544,32702],{"class":86},[69,38546,38547,38549,38551,38553],{"class":71,"line":2943},[69,38548,35301],{"class":6458},[69,38550,1019],{"class":82},[69,38552,1583],{"class":90},[69,38554,1404],{"class":86},[69,38556,38557,38559],{"class":71,"line":2972},[69,38558,5334],{"class":82},[69,38560,35314],{"class":86},[69,38562,38563],{"class":71,"line":2977},[69,38564,3644],{"emptyLinePlaceholder":1325},[69,38566,38567],{"class":71,"line":2994},[69,38568,35323],{"class":75},[69,38570,38571,38573,38575],{"class":71,"line":2999},[69,38572,33183],{"class":82},[69,38574,35330],{"class":109},[69,38576,35333],{"class":86},[69,38578,38579],{"class":71,"line":3004},[69,38580,35338],{"class":75},[69,38582,38583,38585,38587,38589,38591,38593,38595],{"class":71,"line":3009},[69,38584,32473],{"class":86},[69,38586,1019],{"class":82},[69,38588,32480],{"class":1022},[69,38590,2949],{"class":82},[69,38592,32485],{"class":86},[69,38594,2946],{"class":82},[69,38596,35355],{"class":1022},[69,38598,38599,38601,38603],{"class":71,"line":3023},[69,38600,32525],{"class":86},[69,38602,1019],{"class":82},[69,38604,33525],{"class":86},[69,38606,38607],{"class":71,"line":3028},[69,38608,3644],{"emptyLinePlaceholder":1325},[69,38610,38611],{"class":71,"line":3821},[69,38612,35372],{"class":75},[69,38614,38615,38617,38619],{"class":71,"line":3835},[69,38616,35377],{"class":86},[69,38618,1019],{"class":82},[69,38620,33578],{"class":90},[69,38622,38623,38625,38627],{"class":71,"line":3843},[69,38624,35386],{"class":86},[69,38626,1019],{"class":82},[69,38628,4329],{"class":90},[69,38630,38631],{"class":71,"line":3848},[69,38632,3644],{"emptyLinePlaceholder":1325},[69,38634,38635],{"class":71,"line":3854},[69,38636,35399],{"class":75},[69,38638,38639],{"class":71,"line":3860},[69,38640,35404],{"class":75},[69,38642,38643],{"class":71,"line":3865},[69,38644,35409],{"class":75},[69,38646,38647,38649],{"class":71,"line":9190},[69,38648,35414],{"class":82},[69,38650,34120],{"class":86},[69,38652,38653],{"class":71,"line":9214},[69,38654,35421],{"class":75},[69,38656,38657,38659,38661,38663],{"class":71,"line":9219},[69,38658,4647],{"class":82},[69,38660,35428],{"class":86},[69,38662,27280],{"class":82},[69,38664,35433],{"class":86},[69,38666,38667,38669,38671],{"class":71,"line":9225},[69,38668,35438],{"class":86},[69,38670,1019],{"class":82},[69,38672,35443],{"class":86},[69,38674,38675,38677,38679],{"class":71,"line":9252},[69,38676,35448],{"class":86},[69,38678,1019],{"class":82},[69,38680,35453],{"class":86},[69,38682,38683],{"class":71,"line":9257},[69,38684,35458],{"class":75},[69,38686,38687],{"class":71,"line":9263},[69,38688,34111],{"class":86},[69,38690,38691],{"class":71,"line":9275},[69,38692,35467],{"class":75},[69,38694,38695,38697,38699],{"class":71,"line":9287},[69,38696,33896],{"class":86},[69,38698,1019],{"class":82},[69,38700,35476],{"class":86},[69,38702,38703],{"class":71,"line":9299},[69,38704,35481],{"class":75},[69,38706,38707,38709,38711,38713,38715,38717,38719],{"class":71,"line":10958},[69,38708,33913],{"class":86},[69,38710,1019],{"class":82},[69,38712,33918],{"class":86},[69,38714,33921],{"class":6458},[69,38716,1019],{"class":82},[69,38718,1609],{"class":90},[69,38720,1404],{"class":86},[69,38722,38723],{"class":71,"line":10983},[69,38724,35502],{"class":75},[69,38726,38727],{"class":71,"line":11006},[69,38728,35507],{"class":75},[69,38730,38731],{"class":71,"line":11030},[69,38732,35512],{"class":75},[69,38734,38735,38737,38739,38741,38743],{"class":71,"line":11035},[69,38736,35517],{"class":86},[69,38738,10719],{"class":82},[69,38740,34023],{"class":86},[69,38742,4193],{"class":82},[69,38744,35526],{"class":86},[69,38746,38747],{"class":71,"line":11040},[69,38748,35531],{"class":75},[69,38750,38751,38753,38755,38757,38759],{"class":71,"line":11045},[69,38752,35536],{"class":86},[69,38754,10719],{"class":82},[69,38756,35541],{"class":86},[69,38758,1583],{"class":90},[69,38760,1404],{"class":86},[69,38762,38763],{"class":71,"line":11054},[69,38764,3644],{"emptyLinePlaceholder":1325},[69,38766,38767],{"class":71,"line":11059},[69,38768,35554],{"class":75},[69,38770,38771,38773,38775,38777,38779],{"class":71,"line":11065},[69,38772,35559],{"class":86},[69,38774,1019],{"class":82},[69,38776,35564],{"class":86},[69,38778,1972],{"class":82},[69,38780,35569],{"class":86},[69,38782,38783],{"class":71,"line":11086},[69,38784,35574],{"class":75},[69,38786,38787,38789,38791,38793],{"class":71,"line":11092},[69,38788,33687],{"class":90},[69,38790,1398],{"class":86},[69,38792,35583],{"class":1022},[69,38794,35586],{"class":86},[69,38796,38797],{"class":71,"line":11106},[69,38798,3644],{"emptyLinePlaceholder":1325},[69,38800,38801],{"class":71,"line":11112},[69,38802,35595],{"class":75},[69,38804,38805,38807,38809,38811,38813],{"class":71,"line":11139},[69,38806,2782],{"class":82},[69,38808,32456],{"class":90},[69,38810,4193],{"class":82},[69,38812,32461],{"class":1022},[69,38814,4983],{"class":86},[69,38816,38817],{"class":71,"line":11148},[69,38818,35612],{"class":75},[69,38820,38821,38823,38825],{"class":71,"line":11154},[69,38822,32525],{"class":86},[69,38824,1019],{"class":82},[69,38826,38325],{"class":86},[69,38828,38829],{"class":71,"line":11162},[69,38830,35625],{"class":75},[69,38832,38833],{"class":71,"line":11167},[69,38834,35630],{"class":75},[69,38836,38837,38839,38841],{"class":71,"line":17843},[69,38838,35635],{"class":86},[69,38840,35638],{"class":1022},[69,38842,31733],{"class":86},[69,38844,38845],{"class":71,"line":17849},[69,38846,35645],{"class":75},[69,38848,38849,38851,38853],{"class":71,"line":17872},[69,38850,35258],{"class":86},[69,38852,1019],{"class":82},[69,38854,35654],{"class":86},[69,38856,38857],{"class":71,"line":17878},[69,38858,35659],{"class":75},[69,38860,38861],{"class":71,"line":17901},[69,38862,35664],{"class":86},[69,38864,38865],{"class":71,"line":17915},[69,38866,3644],{"emptyLinePlaceholder":1325},[69,38868,38869],{"class":71,"line":17935},[69,38870,35673],{"class":75},[69,38872,38873],{"class":71,"line":17941},[69,38874,35678],{"class":75},[69,38876,38877,38879,38881,38883,38885,38887,38889],{"class":71,"line":17952},[69,38878,32473],{"class":86},[69,38880,1019],{"class":82},[69,38882,32480],{"class":1022},[69,38884,2949],{"class":82},[69,38886,32485],{"class":86},[69,38888,2946],{"class":82},[69,38890,35355],{"class":1022},[69,38892,38893,38895,38897],{"class":71,"line":17975},[69,38894,32525],{"class":86},[69,38896,1019],{"class":82},[69,38898,33525],{"class":86},[69,38900,38901],{"class":71,"line":17997},[69,38902,35707],{"class":75},[69,38904,38905],{"class":71,"line":18002},[69,38906,35712],{"class":75},[69,38908,38909,38911,38913,38915,38917,38919,38921,38923,38925,38927,38929,38931,38933,38935,38937,38939,38941,38943,38945,38947,38949,38951,38953],{"class":71,"line":18008},[69,38910,35717],{"class":86},[69,38912,1019],{"class":82},[69,38914,2277],{"class":86},[69,38916,35724],{"class":1022},[69,38918,1767],{"class":86},[69,38920,35729],{"class":1022},[69,38922,1767],{"class":86},[69,38924,35734],{"class":1022},[69,38926,1767],{"class":86},[69,38928,35739],{"class":1022},[69,38930,1767],{"class":86},[69,38932,35744],{"class":1022},[69,38934,1767],{"class":86},[69,38936,35749],{"class":1022},[69,38938,1767],{"class":86},[69,38940,35754],{"class":1022},[69,38942,1767],{"class":86},[69,38944,35759],{"class":1022},[69,38946,1767],{"class":86},[69,38948,35764],{"class":1022},[69,38950,1767],{"class":86},[69,38952,35769],{"class":1022},[69,38954,34482],{"class":86},[69,38956,38957,38959],{"class":71,"line":18022},[69,38958,35414],{"class":82},[69,38960,34120],{"class":86},[69,38962,38963],{"class":71,"line":18035},[69,38964,35782],{"class":75},[69,38966,38967,38969,38971,38973],{"class":71,"line":18040},[69,38968,4647],{"class":82},[69,38970,35789],{"class":86},[69,38972,27280],{"class":82},[69,38974,35433],{"class":86},[69,38976,38977,38979,38981],{"class":71,"line":18054},[69,38978,33846],{"class":86},[69,38980,1019],{"class":82},[69,38982,33851],{"class":86},[69,38984,38985,38987,38989],{"class":71,"line":18059},[69,38986,33861],{"class":86},[69,38988,1019],{"class":82},[69,38990,33866],{"class":86},[69,38992,38993],{"class":71,"line":18065},[69,38994,3644],{"emptyLinePlaceholder":1325},[69,38996,38997],{"class":71,"line":18070},[69,38998,35818],{"class":75},[69,39000,39001],{"class":71,"line":18084},[69,39002,34111],{"class":86},[69,39004,39005],{"class":71,"line":18089},[69,39006,35827],{"class":75},[69,39008,39009,39011,39013],{"class":71,"line":18094},[69,39010,33896],{"class":86},[69,39012,1019],{"class":82},[69,39014,33901],{"class":86},[69,39016,39017],{"class":71,"line":18108},[69,39018,35840],{"class":75},[69,39020,39021,39023,39025,39027,39029,39031,39033],{"class":71,"line":18120},[69,39022,33913],{"class":86},[69,39024,1019],{"class":82},[69,39026,33918],{"class":86},[69,39028,33921],{"class":6458},[69,39030,1019],{"class":82},[69,39032,1609],{"class":90},[69,39034,1404],{"class":86},[69,39036,39037],{"class":71,"line":18125},[69,39038,35861],{"class":75},[69,39040,39041,39043,39045],{"class":71,"line":18138},[69,39042,35866],{"class":86},[69,39044,1019],{"class":82},[69,39046,35871],{"class":86},[69,39048,39049,39051,39053],{"class":71,"line":18143},[69,39050,35876],{"class":86},[69,39052,1019],{"class":82},[69,39054,35881],{"class":86},[69,39056,39057,39059,39061,39063,39065,39067,39069,39071],{"class":71,"line":18148},[69,39058,35886],{"class":90},[69,39060,1398],{"class":86},[69,39062,35891],{"class":1022},[69,39064,35894],{"class":86},[69,39066,35897],{"class":1022},[69,39068,1767],{"class":86},[69,39070,35902],{"class":1022},[69,39072,35905],{"class":86},[19,39074,39076],{"id":39075},"_22vgg","2.2.VGG",[23237,39078,39080],{"id":39079},"_221原理","2.2.1.原理",[29,39082,39083],{},[24,39084],{"alt":64,"src":39085},"\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",[29,39087,39088],{},[24,39089],{"alt":64,"src":39090},"\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",[29,39092,39093],{},[24,39094],{"alt":64,"src":39095},"\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",[29,39097,39098],{},"参数详细描述：",[29,39100,39101],{},[24,39102],{"alt":64,"src":39103},"\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",[29,39105,39106],{},[24,39107],{"alt":64,"src":39108},"\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",[29,39110,39111],{},[24,39112],{"alt":64,"src":39113},"\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",[29,39115,39116],{},[24,39117],{"alt":64,"src":39118},"\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",[29,39120,39121],{},[24,39122],{"alt":64,"src":39123},"\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",[23237,39125,39127],{"id":39126},"_222代码实现","2.2.2.代码实现",[37,39129,39130],{},[40,39131,39132],{},"网络搭建",[59,39134,39136],{"className":31614,"code":39135,"language":31616,"meta":64,"style":64},"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",[66,39137,39138,39144,39156,39166,39176,39180,39197,39205,39224,39229,39234,39246,39284,39289,39325,39329,39358,39363,39368,39379,39415,39419,39455,39459,39487,39491,39496,39507,39543,39547,39583,39587,39623,39627,39655,39659,39664,39675,39712,39716,39752,39756,39792,39796,39824,39828,39833,39844,39880,39884,39920,39924,39960,39964,39992,39996,40001,40012,40017,40022,40027,40048,40052,40064,40068,40080,40084,40088,40093,40098,40113,40118,40128,40133,40148,40153,40172,40177,40186,40191,40201,40206,40211,40225,40230,40244,40252,40256,40260,40268,40279,40290,40301,40312,40323,40334,40340,40344,40349,40362,40382,40388,40397],{"__ignoreMap":64},[69,39139,39140,39142],{"class":71,"line":72},[69,39141,31628],{"class":82},[69,39143,31631],{"class":86},[69,39145,39146,39148,39151,39153],{"class":71,"line":79},[69,39147,31973],{"class":82},[69,39149,39150],{"class":86}," sympy.core.sympify ",[69,39152,31628],{"class":82},[69,39154,39155],{"class":86}," kernS\n",[69,39157,39158,39160,39162,39164],{"class":71,"line":106},[69,39159,31973],{"class":82},[69,39161,31976],{"class":86},[69,39163,31628],{"class":82},[69,39165,31981],{"class":86},[69,39167,39168,39170,39172,39174],{"class":71,"line":116},[69,39169,31973],{"class":82},[69,39171,31993],{"class":86},[69,39173,31628],{"class":82},[69,39175,31998],{"class":86},[69,39177,39178],{"class":71,"line":133},[69,39179,3644],{"emptyLinePlaceholder":1325},[69,39181,39182,39184,39187,39189,39191,39193,39195],{"class":71,"line":139},[69,39183,15934],{"class":82},[69,39185,39186],{"class":109}," VGG16",[69,39188,1398],{"class":86},[69,39190,32014],{"class":109},[69,39192,1946],{"class":86},[69,39194,32019],{"class":109},[69,39196,32022],{"class":86},[69,39198,39199,39201,39203],{"class":71,"line":401},[69,39200,32037],{"class":82},[69,39202,32040],{"class":90},[69,39204,32043],{"class":86},[69,39206,39207,39209,39211,39214,39216,39218,39220,39222],{"class":71,"line":470},[69,39208,32053],{"class":90},[69,39210,1398],{"class":86},[69,39212,39213],{"class":90},"VGG16",[69,39215,13677],{"class":86},[69,39217,32059],{"class":90},[69,39219,32062],{"class":86},[69,39221,32065],{"class":90},[69,39223,3220],{"class":86},[69,39225,39226],{"class":71,"line":475},[69,39227,39228],{"class":75},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[69,39230,39231],{"class":71,"line":482},[69,39232,39233],{"class":75},"        # 这里用的是灰度图\n",[69,39235,39236,39238,39241,39243],{"class":71,"line":497},[69,39237,32081],{"class":90},[69,39239,39240],{"class":86},".block1",[69,39242,1019],{"class":82},[69,39244,39245],{"class":86},"nn.Sequential(\n",[69,39247,39248,39251,39253,39255,39257,39259,39261,39263,39265,39267,39269,39271,39273,39275,39277,39279,39281],{"class":71,"line":502},[69,39249,39250],{"class":86},"            nn.Conv2d(",[69,39252,32092],{"class":6458},[69,39254,1019],{"class":82},[69,39256,1609],{"class":90},[69,39258,1767],{"class":86},[69,39260,32101],{"class":6458},[69,39262,1019],{"class":82},[69,39264,1595],{"class":90},[69,39266,1767],{"class":86},[69,39268,32110],{"class":6458},[69,39270,1019],{"class":82},[69,39272,1465],{"class":90},[69,39274,1767],{"class":86},[69,39276,32119],{"class":6458},[69,39278,1019],{"class":82},[69,39280,1609],{"class":90},[69,39282,39283],{"class":86},"),\n",[69,39285,39286],{"class":71,"line":509},[69,39287,39288],{"class":86},"            nn.ReLU(),\n",[69,39290,39291,39293,39295,39297,39299,39301,39303,39305,39307,39309,39311,39313,39315,39317,39319,39321,39323],{"class":71,"line":524},[69,39292,39250],{"class":86},[69,39294,32092],{"class":6458},[69,39296,1019],{"class":82},[69,39298,1595],{"class":90},[69,39300,1767],{"class":86},[69,39302,32101],{"class":6458},[69,39304,1019],{"class":82},[69,39306,1595],{"class":90},[69,39308,1767],{"class":86},[69,39310,32110],{"class":6458},[69,39312,1019],{"class":82},[69,39314,1465],{"class":90},[69,39316,1767],{"class":86},[69,39318,32119],{"class":6458},[69,39320,1019],{"class":82},[69,39322,1609],{"class":90},[69,39324,39283],{"class":86},[69,39326,39327],{"class":71,"line":2888},[69,39328,39288],{"class":86},[69,39330,39331,39334,39336,39338,39340,39342,39344,39346,39348,39350,39352,39354,39356],{"class":71,"line":2893},[69,39332,39333],{"class":86},"            nn.MaxPool2d(",[69,39335,32110],{"class":6458},[69,39337,1019],{"class":82},[69,39339,1471],{"class":90},[69,39341,1767],{"class":86},[69,39343,32165],{"class":6458},[69,39345,1019],{"class":82},[69,39347,1471],{"class":90},[69,39349,1767],{"class":86},[69,39351,32119],{"class":6458},[69,39353,1019],{"class":82},[69,39355,1583],{"class":90},[69,39357,1404],{"class":86},[69,39359,39360],{"class":71,"line":2899},[69,39361,39362],{"class":86},"        )\n",[69,39364,39365],{"class":71,"line":2919},[69,39366,39367],{"class":75},"        # 第二层\n",[69,39369,39370,39372,39375,39377],{"class":71,"line":2924},[69,39371,32081],{"class":90},[69,39373,39374],{"class":86},".block2",[69,39376,1019],{"class":82},[69,39378,39245],{"class":86},[69,39380,39381,39383,39385,39387,39389,39391,39393,39395,39397,39399,39401,39403,39405,39407,39409,39411,39413],{"class":71,"line":2938},[69,39382,39250],{"class":86},[69,39384,32092],{"class":6458},[69,39386,1019],{"class":82},[69,39388,1595],{"class":90},[69,39390,1767],{"class":86},[69,39392,32101],{"class":6458},[69,39394,1019],{"class":82},[69,39396,33306],{"class":90},[69,39398,1767],{"class":86},[69,39400,32110],{"class":6458},[69,39402,1019],{"class":82},[69,39404,1465],{"class":90},[69,39406,1767],{"class":86},[69,39408,32119],{"class":6458},[69,39410,1019],{"class":82},[69,39412,1609],{"class":90},[69,39414,39283],{"class":86},[69,39416,39417],{"class":71,"line":2943},[69,39418,39288],{"class":86},[69,39420,39421,39423,39425,39427,39429,39431,39433,39435,39437,39439,39441,39443,39445,39447,39449,39451,39453],{"class":71,"line":2972},[69,39422,39250],{"class":86},[69,39424,32092],{"class":6458},[69,39426,1019],{"class":82},[69,39428,33306],{"class":90},[69,39430,1767],{"class":86},[69,39432,32101],{"class":6458},[69,39434,1019],{"class":82},[69,39436,33306],{"class":90},[69,39438,1767],{"class":86},[69,39440,32110],{"class":6458},[69,39442,1019],{"class":82},[69,39444,1465],{"class":90},[69,39446,1767],{"class":86},[69,39448,32119],{"class":6458},[69,39450,1019],{"class":82},[69,39452,1609],{"class":90},[69,39454,39283],{"class":86},[69,39456,39457],{"class":71,"line":2977},[69,39458,39288],{"class":86},[69,39460,39461,39463,39465,39467,39469,39471,39473,39475,39477,39479,39481,39483,39485],{"class":71,"line":2994},[69,39462,39333],{"class":86},[69,39464,32110],{"class":6458},[69,39466,1019],{"class":82},[69,39468,1471],{"class":90},[69,39470,1767],{"class":86},[69,39472,32165],{"class":6458},[69,39474,1019],{"class":82},[69,39476,1471],{"class":90},[69,39478,1767],{"class":86},[69,39480,32119],{"class":6458},[69,39482,1019],{"class":82},[69,39484,1583],{"class":90},[69,39486,1404],{"class":86},[69,39488,39489],{"class":71,"line":2999},[69,39490,39362],{"class":86},[69,39492,39493],{"class":71,"line":3004},[69,39494,39495],{"class":75},"        # 第三层\n",[69,39497,39498,39500,39503,39505],{"class":71,"line":3009},[69,39499,32081],{"class":90},[69,39501,39502],{"class":86},".block3",[69,39504,1019],{"class":82},[69,39506,39245],{"class":86},[69,39508,39509,39511,39513,39515,39517,39519,39521,39523,39525,39527,39529,39531,39533,39535,39537,39539,39541],{"class":71,"line":3023},[69,39510,39250],{"class":86},[69,39512,32092],{"class":6458},[69,39514,1019],{"class":82},[69,39516,33306],{"class":90},[69,39518,1767],{"class":86},[69,39520,32101],{"class":6458},[69,39522,1019],{"class":82},[69,39524,36106],{"class":90},[69,39526,1767],{"class":86},[69,39528,32110],{"class":6458},[69,39530,1019],{"class":82},[69,39532,1465],{"class":90},[69,39534,1767],{"class":86},[69,39536,32119],{"class":6458},[69,39538,1019],{"class":82},[69,39540,1609],{"class":90},[69,39542,39283],{"class":86},[69,39544,39545],{"class":71,"line":3028},[69,39546,39288],{"class":86},[69,39548,39549,39551,39553,39555,39557,39559,39561,39563,39565,39567,39569,39571,39573,39575,39577,39579,39581],{"class":71,"line":3821},[69,39550,39250],{"class":86},[69,39552,32092],{"class":6458},[69,39554,1019],{"class":82},[69,39556,36106],{"class":90},[69,39558,1767],{"class":86},[69,39560,32101],{"class":6458},[69,39562,1019],{"class":82},[69,39564,36106],{"class":90},[69,39566,1767],{"class":86},[69,39568,32110],{"class":6458},[69,39570,1019],{"class":82},[69,39572,1465],{"class":90},[69,39574,1767],{"class":86},[69,39576,32119],{"class":6458},[69,39578,1019],{"class":82},[69,39580,1609],{"class":90},[69,39582,39283],{"class":86},[69,39584,39585],{"class":71,"line":3835},[69,39586,39288],{"class":86},[69,39588,39589,39591,39593,39595,39597,39599,39601,39603,39605,39607,39609,39611,39613,39615,39617,39619,39621],{"class":71,"line":3843},[69,39590,39250],{"class":86},[69,39592,32092],{"class":6458},[69,39594,1019],{"class":82},[69,39596,36106],{"class":90},[69,39598,1767],{"class":86},[69,39600,32101],{"class":6458},[69,39602,1019],{"class":82},[69,39604,36106],{"class":90},[69,39606,1767],{"class":86},[69,39608,32110],{"class":6458},[69,39610,1019],{"class":82},[69,39612,1465],{"class":90},[69,39614,1767],{"class":86},[69,39616,32119],{"class":6458},[69,39618,1019],{"class":82},[69,39620,1609],{"class":90},[69,39622,39283],{"class":86},[69,39624,39625],{"class":71,"line":3848},[69,39626,39288],{"class":86},[69,39628,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647,39649,39651,39653],{"class":71,"line":3854},[69,39630,39333],{"class":86},[69,39632,32110],{"class":6458},[69,39634,1019],{"class":82},[69,39636,1471],{"class":90},[69,39638,1767],{"class":86},[69,39640,32165],{"class":6458},[69,39642,1019],{"class":82},[69,39644,1471],{"class":90},[69,39646,1767],{"class":86},[69,39648,32119],{"class":6458},[69,39650,1019],{"class":82},[69,39652,1583],{"class":90},[69,39654,1404],{"class":86},[69,39656,39657],{"class":71,"line":3860},[69,39658,39362],{"class":86},[69,39660,39661],{"class":71,"line":3865},[69,39662,39663],{"class":75},"        # 第四层\n",[69,39665,39666,39668,39671,39673],{"class":71,"line":9190},[69,39667,32081],{"class":90},[69,39669,39670],{"class":86},".block4",[69,39672,1019],{"class":82},[69,39674,39245],{"class":86},[69,39676,39677,39679,39681,39683,39685,39687,39689,39691,39694,39696,39698,39700,39702,39704,39706,39708,39710],{"class":71,"line":9214},[69,39678,39250],{"class":86},[69,39680,32092],{"class":6458},[69,39682,1019],{"class":82},[69,39684,36106],{"class":90},[69,39686,1767],{"class":86},[69,39688,32101],{"class":6458},[69,39690,1019],{"class":82},[69,39692,39693],{"class":90},"512",[69,39695,1767],{"class":86},[69,39697,32110],{"class":6458},[69,39699,1019],{"class":82},[69,39701,1465],{"class":90},[69,39703,1767],{"class":86},[69,39705,32119],{"class":6458},[69,39707,1019],{"class":82},[69,39709,1609],{"class":90},[69,39711,39283],{"class":86},[69,39713,39714],{"class":71,"line":9219},[69,39715,39288],{"class":86},[69,39717,39718,39720,39722,39724,39726,39728,39730,39732,39734,39736,39738,39740,39742,39744,39746,39748,39750],{"class":71,"line":9225},[69,39719,39250],{"class":86},[69,39721,32092],{"class":6458},[69,39723,1019],{"class":82},[69,39725,39693],{"class":90},[69,39727,1767],{"class":86},[69,39729,32101],{"class":6458},[69,39731,1019],{"class":82},[69,39733,39693],{"class":90},[69,39735,1767],{"class":86},[69,39737,32110],{"class":6458},[69,39739,1019],{"class":82},[69,39741,1465],{"class":90},[69,39743,1767],{"class":86},[69,39745,32119],{"class":6458},[69,39747,1019],{"class":82},[69,39749,1609],{"class":90},[69,39751,39283],{"class":86},[69,39753,39754],{"class":71,"line":9252},[69,39755,39288],{"class":86},[69,39757,39758,39760,39762,39764,39766,39768,39770,39772,39774,39776,39778,39780,39782,39784,39786,39788,39790],{"class":71,"line":9257},[69,39759,39250],{"class":86},[69,39761,32092],{"class":6458},[69,39763,1019],{"class":82},[69,39765,39693],{"class":90},[69,39767,1767],{"class":86},[69,39769,32101],{"class":6458},[69,39771,1019],{"class":82},[69,39773,39693],{"class":90},[69,39775,1767],{"class":86},[69,39777,32110],{"class":6458},[69,39779,1019],{"class":82},[69,39781,1465],{"class":90},[69,39783,1767],{"class":86},[69,39785,32119],{"class":6458},[69,39787,1019],{"class":82},[69,39789,1609],{"class":90},[69,39791,39283],{"class":86},[69,39793,39794],{"class":71,"line":9263},[69,39795,39288],{"class":86},[69,39797,39798,39800,39802,39804,39806,39808,39810,39812,39814,39816,39818,39820,39822],{"class":71,"line":9275},[69,39799,39333],{"class":86},[69,39801,32110],{"class":6458},[69,39803,1019],{"class":82},[69,39805,1471],{"class":90},[69,39807,1767],{"class":86},[69,39809,32165],{"class":6458},[69,39811,1019],{"class":82},[69,39813,1471],{"class":90},[69,39815,1767],{"class":86},[69,39817,32119],{"class":6458},[69,39819,1019],{"class":82},[69,39821,1583],{"class":90},[69,39823,1404],{"class":86},[69,39825,39826],{"class":71,"line":9287},[69,39827,39362],{"class":86},[69,39829,39830],{"class":71,"line":9299},[69,39831,39832],{"class":75},"        # 第五层\n",[69,39834,39835,39837,39840,39842],{"class":71,"line":10958},[69,39836,32081],{"class":90},[69,39838,39839],{"class":86},".block5",[69,39841,1019],{"class":82},[69,39843,39245],{"class":86},[69,39845,39846,39848,39850,39852,39854,39856,39858,39860,39862,39864,39866,39868,39870,39872,39874,39876,39878],{"class":71,"line":10983},[69,39847,39250],{"class":86},[69,39849,32092],{"class":6458},[69,39851,1019],{"class":82},[69,39853,39693],{"class":90},[69,39855,1767],{"class":86},[69,39857,32101],{"class":6458},[69,39859,1019],{"class":82},[69,39861,39693],{"class":90},[69,39863,1767],{"class":86},[69,39865,32110],{"class":6458},[69,39867,1019],{"class":82},[69,39869,1465],{"class":90},[69,39871,1767],{"class":86},[69,39873,32119],{"class":6458},[69,39875,1019],{"class":82},[69,39877,1609],{"class":90},[69,39879,39283],{"class":86},[69,39881,39882],{"class":71,"line":11006},[69,39883,39288],{"class":86},[69,39885,39886,39888,39890,39892,39894,39896,39898,39900,39902,39904,39906,39908,39910,39912,39914,39916,39918],{"class":71,"line":11030},[69,39887,39250],{"class":86},[69,39889,32092],{"class":6458},[69,39891,1019],{"class":82},[69,39893,39693],{"class":90},[69,39895,1767],{"class":86},[69,39897,32101],{"class":6458},[69,39899,1019],{"class":82},[69,39901,39693],{"class":90},[69,39903,1767],{"class":86},[69,39905,32110],{"class":6458},[69,39907,1019],{"class":82},[69,39909,1465],{"class":90},[69,39911,1767],{"class":86},[69,39913,32119],{"class":6458},[69,39915,1019],{"class":82},[69,39917,1609],{"class":90},[69,39919,39283],{"class":86},[69,39921,39922],{"class":71,"line":11035},[69,39923,39288],{"class":86},[69,39925,39926,39928,39930,39932,39934,39936,39938,39940,39942,39944,39946,39948,39950,39952,39954,39956,39958],{"class":71,"line":11040},[69,39927,39250],{"class":86},[69,39929,32092],{"class":6458},[69,39931,1019],{"class":82},[69,39933,39693],{"class":90},[69,39935,1767],{"class":86},[69,39937,32101],{"class":6458},[69,39939,1019],{"class":82},[69,39941,39693],{"class":90},[69,39943,1767],{"class":86},[69,39945,32110],{"class":6458},[69,39947,1019],{"class":82},[69,39949,1465],{"class":90},[69,39951,1767],{"class":86},[69,39953,32119],{"class":6458},[69,39955,1019],{"class":82},[69,39957,1609],{"class":90},[69,39959,39283],{"class":86},[69,39961,39962],{"class":71,"line":11045},[69,39963,39288],{"class":86},[69,39965,39966,39968,39970,39972,39974,39976,39978,39980,39982,39984,39986,39988,39990],{"class":71,"line":11054},[69,39967,39333],{"class":86},[69,39969,32110],{"class":6458},[69,39971,1019],{"class":82},[69,39973,1471],{"class":90},[69,39975,1767],{"class":86},[69,39977,32165],{"class":6458},[69,39979,1019],{"class":82},[69,39981,1471],{"class":90},[69,39983,1767],{"class":86},[69,39985,32119],{"class":6458},[69,39987,1019],{"class":82},[69,39989,1583],{"class":90},[69,39991,1404],{"class":86},[69,39993,39994],{"class":71,"line":11059},[69,39995,39362],{"class":86},[69,39997,39998],{"class":71,"line":11065},[69,39999,40000],{"class":75},"        # 全连接层\n",[69,40002,40003,40005,40008,40010],{"class":71,"line":11086},[69,40004,32081],{"class":90},[69,40006,40007],{"class":86},".block6",[69,40009,1019],{"class":82},[69,40011,39245],{"class":86},[69,40013,40014],{"class":71,"line":11092},[69,40015,40016],{"class":75},"            # 平展操作\n",[69,40018,40019],{"class":71,"line":11106},[69,40020,40021],{"class":75},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[69,40023,40024],{"class":71,"line":11112},[69,40025,40026],{"class":86},"            nn.Flatten(),\n",[69,40028,40029,40032,40034,40036,40038,40040,40042,40044,40046],{"class":71,"line":11139},[69,40030,40031],{"class":86},"            nn.Linear(",[69,40033,1758],{"class":90},[69,40035,1843],{"class":82},[69,40037,1758],{"class":90},[69,40039,1843],{"class":82},[69,40041,39693],{"class":90},[69,40043,1767],{"class":86},[69,40045,36106],{"class":90},[69,40047,39283],{"class":86},[69,40049,40050],{"class":71,"line":11148},[69,40051,39288],{"class":86},[69,40053,40054,40056,40058,40060,40062],{"class":71,"line":11154},[69,40055,40031],{"class":86},[69,40057,36106],{"class":90},[69,40059,1767],{"class":86},[69,40061,33306],{"class":90},[69,40063,39283],{"class":86},[69,40065,40066],{"class":71,"line":11162},[69,40067,39288],{"class":86},[69,40069,40070,40072,40074,40076,40078],{"class":71,"line":11167},[69,40071,40031],{"class":86},[69,40073,33306],{"class":90},[69,40075,1767],{"class":86},[69,40077,390],{"class":90},[69,40079,1404],{"class":86},[69,40081,40082],{"class":71,"line":17843},[69,40083,39362],{"class":86},[69,40085,40086],{"class":71,"line":17849},[69,40087,3644],{"emptyLinePlaceholder":1325},[69,40089,40090],{"class":71,"line":17872},[69,40091,40092],{"class":75},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[69,40094,40095],{"class":71,"line":17878},[69,40096,40097],{"class":75},"        # 循环遍历模型\n",[69,40099,40100,40102,40105,40107,40110],{"class":71,"line":17901},[69,40101,4647],{"class":82},[69,40103,40104],{"class":86}," m ",[69,40106,27280],{"class":82},[69,40108,40109],{"class":90}," self",[69,40111,40112],{"class":86},".modules():\n",[69,40114,40115],{"class":71,"line":17915},[69,40116,40117],{"class":75},"            # print(m)\n",[69,40119,40120,40122,40125],{"class":71,"line":17935},[69,40121,5886],{"class":82},[69,40123,40124],{"class":90}," isinstance",[69,40126,40127],{"class":86},"(m,nn.Conv2d):\n",[69,40129,40130],{"class":71,"line":17941},[69,40131,40132],{"class":75},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[69,40134,40135,40138,40141,40143,40146],{"class":71,"line":17952},[69,40136,40137],{"class":86},"                nn.init.kaiming_normal_(m.weight,",[69,40139,40140],{"class":6458},"nonlinearity",[69,40142,1019],{"class":82},[69,40144,40145],{"class":1022},"'relu'",[69,40147,1404],{"class":86},[69,40149,40150],{"class":71,"line":17975},[69,40151,40152],{"class":75},"                # 判断b参数是否存在\n",[69,40154,40155,40158,40161,40164,40167,40170],{"class":71,"line":17997},[69,40156,40157],{"class":82},"                if",[69,40159,40160],{"class":86}," m.bias ",[69,40162,40163],{"class":82},"is",[69,40165,40166],{"class":82}," not",[69,40168,40169],{"class":90}," None",[69,40171,4983],{"class":86},[69,40173,40174],{"class":71,"line":18002},[69,40175,40176],{"class":75},"                    # 如果参数不存在的化初始化b=0\n",[69,40178,40179,40182,40184],{"class":71,"line":18008},[69,40180,40181],{"class":86},"                    nn.init.constant_(m.bias,",[69,40183,1583],{"class":90},[69,40185,1404],{"class":86},[69,40187,40188],{"class":71,"line":18022},[69,40189,40190],{"class":75},"            # 全连接层初始化\n",[69,40192,40193,40196,40198],{"class":71,"line":18035},[69,40194,40195],{"class":82},"            elif",[69,40197,40124],{"class":90},[69,40199,40200],{"class":86},"(m,nn.Linear):\n",[69,40202,40203],{"class":71,"line":18040},[69,40204,40205],{"class":75},"                # 这个初始化方法是利用的是正太分布的方式\n",[69,40207,40208],{"class":71,"line":18054},[69,40209,40210],{"class":75},"                # 均值为0，方差为0.01\n",[69,40212,40213,40216,40218,40220,40223],{"class":71,"line":18059},[69,40214,40215],{"class":86},"                nn.init.normal_(m.weight,",[69,40217,1583],{"class":90},[69,40219,1767],{"class":86},[69,40221,40222],{"class":90},"0.01",[69,40224,1404],{"class":86},[69,40226,40227],{"class":71,"line":18065},[69,40228,40229],{"class":75},"                # 初始化b参数\n",[69,40231,40232,40234,40236,40238,40240,40242],{"class":71,"line":18070},[69,40233,40157],{"class":82},[69,40235,40160],{"class":86},[69,40237,40163],{"class":82},[69,40239,40166],{"class":82},[69,40241,40169],{"class":90},[69,40243,4983],{"class":86},[69,40245,40246,40248,40250],{"class":71,"line":18084},[69,40247,40181],{"class":86},[69,40249,1583],{"class":90},[69,40251,1404],{"class":86},[69,40253,40254],{"class":71,"line":18089},[69,40255,3644],{"emptyLinePlaceholder":1325},[69,40257,40258],{"class":71,"line":18094},[69,40259,36401],{"class":75},[69,40261,40262,40264,40266],{"class":71,"line":18108},[69,40263,32037],{"class":82},[69,40265,32329],{"class":109},[69,40267,32332],{"class":86},[69,40269,40270,40272,40274,40276],{"class":71,"line":18120},[69,40271,32337],{"class":86},[69,40273,1019],{"class":82},[69,40275,32059],{"class":90},[69,40277,40278],{"class":86},".block1(x)\n",[69,40280,40281,40283,40285,40287],{"class":71,"line":18125},[69,40282,32337],{"class":86},[69,40284,1019],{"class":82},[69,40286,32059],{"class":90},[69,40288,40289],{"class":86},".block2(x)\n",[69,40291,40292,40294,40296,40298],{"class":71,"line":18138},[69,40293,32337],{"class":86},[69,40295,1019],{"class":82},[69,40297,32059],{"class":90},[69,40299,40300],{"class":86},".block3(x)\n",[69,40302,40303,40305,40307,40309],{"class":71,"line":18143},[69,40304,32337],{"class":86},[69,40306,1019],{"class":82},[69,40308,32059],{"class":90},[69,40310,40311],{"class":86},".block4(x)\n",[69,40313,40314,40316,40318,40320],{"class":71,"line":18148},[69,40315,32337],{"class":86},[69,40317,1019],{"class":82},[69,40319,32059],{"class":90},[69,40321,40322],{"class":86},".block5(x)\n",[69,40324,40325,40327,40329,40331],{"class":71,"line":18153},[69,40326,32337],{"class":86},[69,40328,1019],{"class":82},[69,40330,32059],{"class":90},[69,40332,40333],{"class":86},".block6(x)\n",[69,40335,40336,40338],{"class":71,"line":18166},[69,40337,15992],{"class":82},[69,40339,32445],{"class":86},[69,40341,40342],{"class":71,"line":18171},[69,40343,3644],{"emptyLinePlaceholder":1325},[69,40345,40346],{"class":71,"line":33869},[69,40347,40348],{"class":75},"# 验证模型\n",[69,40350,40351,40353,40355,40357,40360],{"class":71,"line":33875},[69,40352,2782],{"class":82},[69,40354,32456],{"class":90},[69,40356,4193],{"class":82},[69,40358,40359],{"class":1022},"'__main__'",[69,40361,4983],{"class":86},[69,40363,40364,40366,40368,40370,40372,40374,40376,40378,40380],{"class":71,"line":33881},[69,40365,32473],{"class":86},[69,40367,1019],{"class":82},[69,40369,31687],{"class":86},[69,40371,32480],{"class":1022},[69,40373,2949],{"class":82},[69,40375,32485],{"class":86},[69,40377,2946],{"class":82},[69,40379,31712],{"class":1022},[69,40381,1404],{"class":86},[69,40383,40384,40386],{"class":71,"line":33887},[69,40385,32535],{"class":90},[69,40387,31721],{"class":86},[69,40389,40390,40392,40394],{"class":71,"line":33893},[69,40391,32525],{"class":86},[69,40393,1019],{"class":82},[69,40395,40396],{"class":86},"VGG16().to(device)\n",[69,40398,40399,40401,40403,40405,40407,40409,40411,40413],{"class":71,"line":33904},[69,40400,32535],{"class":90},[69,40402,32538],{"class":86},[69,40404,1609],{"class":90},[69,40406,1767],{"class":86},[69,40408,32737],{"class":90},[69,40410,1767],{"class":86},[69,40412,32737],{"class":90},[69,40414,32551],{"class":86},[37,40416,40417],{"start":79},[40,40418,40419],{},"训练代码",[29,40421,40422],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[29,40424,40425],{},"解决方式:",[29,40427,40428],{},"①权重初始化",[59,40430,40432],{"className":31614,"code":40431,"language":31616,"meta":64,"style":64},"# 权重初始化,保证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",[66,40433,40434,40439,40444,40456,40461,40469,40474,40487,40492,40506,40511,40520,40525,40534,40539,40544,40557,40562,40576],{"__ignoreMap":64},[69,40435,40436],{"class":71,"line":72},[69,40437,40438],{"class":75},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[69,40440,40441],{"class":71,"line":79},[69,40442,40443],{"class":75},"# 循环遍历模型\n",[69,40445,40446,40448,40450,40452,40454],{"class":71,"line":106},[69,40447,4269],{"class":82},[69,40449,40104],{"class":86},[69,40451,27280],{"class":82},[69,40453,40109],{"class":90},[69,40455,40112],{"class":86},[69,40457,40458],{"class":71,"line":116},[69,40459,40460],{"class":75},"    # print(m)\n",[69,40462,40463,40465,40467],{"class":71,"line":133},[69,40464,4345],{"class":82},[69,40466,40124],{"class":90},[69,40468,40127],{"class":86},[69,40470,40471],{"class":71,"line":139},[69,40472,40473],{"class":75},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[69,40475,40476,40479,40481,40483,40485],{"class":71,"line":401},[69,40477,40478],{"class":86},"        nn.init.kaiming_normal_(m.weight,",[69,40480,40140],{"class":6458},[69,40482,1019],{"class":82},[69,40484,40145],{"class":1022},[69,40486,1404],{"class":86},[69,40488,40489],{"class":71,"line":470},[69,40490,40491],{"class":75},"        # 判断b参数是否存在\n",[69,40493,40494,40496,40498,40500,40502,40504],{"class":71,"line":475},[69,40495,3741],{"class":82},[69,40497,40160],{"class":86},[69,40499,40163],{"class":82},[69,40501,40166],{"class":82},[69,40503,40169],{"class":90},[69,40505,4983],{"class":86},[69,40507,40508],{"class":71,"line":482},[69,40509,40510],{"class":75},"            # 如果参数不存在的化初始化b=0\n",[69,40512,40513,40516,40518],{"class":71,"line":497},[69,40514,40515],{"class":86},"            nn.init.constant_(m.bias,",[69,40517,1583],{"class":90},[69,40519,1404],{"class":86},[69,40521,40522],{"class":71,"line":502},[69,40523,40524],{"class":75},"    # 全连接层初始化\n",[69,40526,40527,40530,40532],{"class":71,"line":509},[69,40528,40529],{"class":82},"    elif",[69,40531,40124],{"class":90},[69,40533,40200],{"class":86},[69,40535,40536],{"class":71,"line":524},[69,40537,40538],{"class":75},"        # 这个初始化方法是利用的是正太分布的方式\n",[69,40540,40541],{"class":71,"line":2888},[69,40542,40543],{"class":75},"        # 均值为0，方差为0.01\n",[69,40545,40546,40549,40551,40553,40555],{"class":71,"line":2893},[69,40547,40548],{"class":86},"        nn.init.normal_(m.weight,",[69,40550,1583],{"class":90},[69,40552,1767],{"class":86},[69,40554,40222],{"class":90},[69,40556,1404],{"class":86},[69,40558,40559],{"class":71,"line":2899},[69,40560,40561],{"class":75},"        # 初始化b参数\n",[69,40563,40564,40566,40568,40570,40572,40574],{"class":71,"line":2919},[69,40565,3741],{"class":82},[69,40567,40160],{"class":86},[69,40569,40163],{"class":82},[69,40571,40166],{"class":82},[69,40573,40169],{"class":90},[69,40575,4983],{"class":86},[69,40577,40578,40580,40582],{"class":71,"line":2924},[69,40579,40515],{"class":86},[69,40581,1583],{"class":90},[69,40583,1404],{"class":86},[29,40585,40586],{},"②尽可能地增加批次",[29,40588,40589],{},"训练完整代码：",[59,40591,40592],{"className":31614,"code":39135,"language":31616,"meta":64,"style":64},[66,40593,40594,40600,40610,40620,40630,40634,40650,40658,40676,40680,40684,40694,40730,40734,40770,40774,40802,40806,40810,40820,40856,40860,40896,40900,40928,40932,40936,40946,40982,40986,41022,41026,41062,41066,41094,41098,41102,41112,41148,41152,41188,41192,41228,41232,41260,41264,41268,41278,41314,41318,41354,41358,41394,41398,41426,41430,41434,41444,41448,41452,41456,41476,41480,41492,41496,41508,41512,41516,41520,41524,41536,41540,41548,41552,41564,41568,41582,41586,41594,41598,41606,41610,41614,41626,41630,41644,41652,41656,41660,41668,41678,41688,41698,41708,41718,41728,41734,41738,41742,41754,41774,41780,41788],{"__ignoreMap":64},[69,40595,40596,40598],{"class":71,"line":72},[69,40597,31628],{"class":82},[69,40599,31631],{"class":86},[69,40601,40602,40604,40606,40608],{"class":71,"line":79},[69,40603,31973],{"class":82},[69,40605,39150],{"class":86},[69,40607,31628],{"class":82},[69,40609,39155],{"class":86},[69,40611,40612,40614,40616,40618],{"class":71,"line":106},[69,40613,31973],{"class":82},[69,40615,31976],{"class":86},[69,40617,31628],{"class":82},[69,40619,31981],{"class":86},[69,40621,40622,40624,40626,40628],{"class":71,"line":116},[69,40623,31973],{"class":82},[69,40625,31993],{"class":86},[69,40627,31628],{"class":82},[69,40629,31998],{"class":86},[69,40631,40632],{"class":71,"line":133},[69,40633,3644],{"emptyLinePlaceholder":1325},[69,40635,40636,40638,40640,40642,40644,40646,40648],{"class":71,"line":139},[69,40637,15934],{"class":82},[69,40639,39186],{"class":109},[69,40641,1398],{"class":86},[69,40643,32014],{"class":109},[69,40645,1946],{"class":86},[69,40647,32019],{"class":109},[69,40649,32022],{"class":86},[69,40651,40652,40654,40656],{"class":71,"line":401},[69,40653,32037],{"class":82},[69,40655,32040],{"class":90},[69,40657,32043],{"class":86},[69,40659,40660,40662,40664,40666,40668,40670,40672,40674],{"class":71,"line":470},[69,40661,32053],{"class":90},[69,40663,1398],{"class":86},[69,40665,39213],{"class":90},[69,40667,13677],{"class":86},[69,40669,32059],{"class":90},[69,40671,32062],{"class":86},[69,40673,32065],{"class":90},[69,40675,3220],{"class":86},[69,40677,40678],{"class":71,"line":475},[69,40679,39228],{"class":75},[69,40681,40682],{"class":71,"line":482},[69,40683,39233],{"class":75},[69,40685,40686,40688,40690,40692],{"class":71,"line":497},[69,40687,32081],{"class":90},[69,40689,39240],{"class":86},[69,40691,1019],{"class":82},[69,40693,39245],{"class":86},[69,40695,40696,40698,40700,40702,40704,40706,40708,40710,40712,40714,40716,40718,40720,40722,40724,40726,40728],{"class":71,"line":502},[69,40697,39250],{"class":86},[69,40699,32092],{"class":6458},[69,40701,1019],{"class":82},[69,40703,1609],{"class":90},[69,40705,1767],{"class":86},[69,40707,32101],{"class":6458},[69,40709,1019],{"class":82},[69,40711,1595],{"class":90},[69,40713,1767],{"class":86},[69,40715,32110],{"class":6458},[69,40717,1019],{"class":82},[69,40719,1465],{"class":90},[69,40721,1767],{"class":86},[69,40723,32119],{"class":6458},[69,40725,1019],{"class":82},[69,40727,1609],{"class":90},[69,40729,39283],{"class":86},[69,40731,40732],{"class":71,"line":509},[69,40733,39288],{"class":86},[69,40735,40736,40738,40740,40742,40744,40746,40748,40750,40752,40754,40756,40758,40760,40762,40764,40766,40768],{"class":71,"line":524},[69,40737,39250],{"class":86},[69,40739,32092],{"class":6458},[69,40741,1019],{"class":82},[69,40743,1595],{"class":90},[69,40745,1767],{"class":86},[69,40747,32101],{"class":6458},[69,40749,1019],{"class":82},[69,40751,1595],{"class":90},[69,40753,1767],{"class":86},[69,40755,32110],{"class":6458},[69,40757,1019],{"class":82},[69,40759,1465],{"class":90},[69,40761,1767],{"class":86},[69,40763,32119],{"class":6458},[69,40765,1019],{"class":82},[69,40767,1609],{"class":90},[69,40769,39283],{"class":86},[69,40771,40772],{"class":71,"line":2888},[69,40773,39288],{"class":86},[69,40775,40776,40778,40780,40782,40784,40786,40788,40790,40792,40794,40796,40798,40800],{"class":71,"line":2893},[69,40777,39333],{"class":86},[69,40779,32110],{"class":6458},[69,40781,1019],{"class":82},[69,40783,1471],{"class":90},[69,40785,1767],{"class":86},[69,40787,32165],{"class":6458},[69,40789,1019],{"class":82},[69,40791,1471],{"class":90},[69,40793,1767],{"class":86},[69,40795,32119],{"class":6458},[69,40797,1019],{"class":82},[69,40799,1583],{"class":90},[69,40801,1404],{"class":86},[69,40803,40804],{"class":71,"line":2899},[69,40805,39362],{"class":86},[69,40807,40808],{"class":71,"line":2919},[69,40809,39367],{"class":75},[69,40811,40812,40814,40816,40818],{"class":71,"line":2924},[69,40813,32081],{"class":90},[69,40815,39374],{"class":86},[69,40817,1019],{"class":82},[69,40819,39245],{"class":86},[69,40821,40822,40824,40826,40828,40830,40832,40834,40836,40838,40840,40842,40844,40846,40848,40850,40852,40854],{"class":71,"line":2938},[69,40823,39250],{"class":86},[69,40825,32092],{"class":6458},[69,40827,1019],{"class":82},[69,40829,1595],{"class":90},[69,40831,1767],{"class":86},[69,40833,32101],{"class":6458},[69,40835,1019],{"class":82},[69,40837,33306],{"class":90},[69,40839,1767],{"class":86},[69,40841,32110],{"class":6458},[69,40843,1019],{"class":82},[69,40845,1465],{"class":90},[69,40847,1767],{"class":86},[69,40849,32119],{"class":6458},[69,40851,1019],{"class":82},[69,40853,1609],{"class":90},[69,40855,39283],{"class":86},[69,40857,40858],{"class":71,"line":2943},[69,40859,39288],{"class":86},[69,40861,40862,40864,40866,40868,40870,40872,40874,40876,40878,40880,40882,40884,40886,40888,40890,40892,40894],{"class":71,"line":2972},[69,40863,39250],{"class":86},[69,40865,32092],{"class":6458},[69,40867,1019],{"class":82},[69,40869,33306],{"class":90},[69,40871,1767],{"class":86},[69,40873,32101],{"class":6458},[69,40875,1019],{"class":82},[69,40877,33306],{"class":90},[69,40879,1767],{"class":86},[69,40881,32110],{"class":6458},[69,40883,1019],{"class":82},[69,40885,1465],{"class":90},[69,40887,1767],{"class":86},[69,40889,32119],{"class":6458},[69,40891,1019],{"class":82},[69,40893,1609],{"class":90},[69,40895,39283],{"class":86},[69,40897,40898],{"class":71,"line":2977},[69,40899,39288],{"class":86},[69,40901,40902,40904,40906,40908,40910,40912,40914,40916,40918,40920,40922,40924,40926],{"class":71,"line":2994},[69,40903,39333],{"class":86},[69,40905,32110],{"class":6458},[69,40907,1019],{"class":82},[69,40909,1471],{"class":90},[69,40911,1767],{"class":86},[69,40913,32165],{"class":6458},[69,40915,1019],{"class":82},[69,40917,1471],{"class":90},[69,40919,1767],{"class":86},[69,40921,32119],{"class":6458},[69,40923,1019],{"class":82},[69,40925,1583],{"class":90},[69,40927,1404],{"class":86},[69,40929,40930],{"class":71,"line":2999},[69,40931,39362],{"class":86},[69,40933,40934],{"class":71,"line":3004},[69,40935,39495],{"class":75},[69,40937,40938,40940,40942,40944],{"class":71,"line":3009},[69,40939,32081],{"class":90},[69,40941,39502],{"class":86},[69,40943,1019],{"class":82},[69,40945,39245],{"class":86},[69,40947,40948,40950,40952,40954,40956,40958,40960,40962,40964,40966,40968,40970,40972,40974,40976,40978,40980],{"class":71,"line":3023},[69,40949,39250],{"class":86},[69,40951,32092],{"class":6458},[69,40953,1019],{"class":82},[69,40955,33306],{"class":90},[69,40957,1767],{"class":86},[69,40959,32101],{"class":6458},[69,40961,1019],{"class":82},[69,40963,36106],{"class":90},[69,40965,1767],{"class":86},[69,40967,32110],{"class":6458},[69,40969,1019],{"class":82},[69,40971,1465],{"class":90},[69,40973,1767],{"class":86},[69,40975,32119],{"class":6458},[69,40977,1019],{"class":82},[69,40979,1609],{"class":90},[69,40981,39283],{"class":86},[69,40983,40984],{"class":71,"line":3028},[69,40985,39288],{"class":86},[69,40987,40988,40990,40992,40994,40996,40998,41000,41002,41004,41006,41008,41010,41012,41014,41016,41018,41020],{"class":71,"line":3821},[69,40989,39250],{"class":86},[69,40991,32092],{"class":6458},[69,40993,1019],{"class":82},[69,40995,36106],{"class":90},[69,40997,1767],{"class":86},[69,40999,32101],{"class":6458},[69,41001,1019],{"class":82},[69,41003,36106],{"class":90},[69,41005,1767],{"class":86},[69,41007,32110],{"class":6458},[69,41009,1019],{"class":82},[69,41011,1465],{"class":90},[69,41013,1767],{"class":86},[69,41015,32119],{"class":6458},[69,41017,1019],{"class":82},[69,41019,1609],{"class":90},[69,41021,39283],{"class":86},[69,41023,41024],{"class":71,"line":3835},[69,41025,39288],{"class":86},[69,41027,41028,41030,41032,41034,41036,41038,41040,41042,41044,41046,41048,41050,41052,41054,41056,41058,41060],{"class":71,"line":3843},[69,41029,39250],{"class":86},[69,41031,32092],{"class":6458},[69,41033,1019],{"class":82},[69,41035,36106],{"class":90},[69,41037,1767],{"class":86},[69,41039,32101],{"class":6458},[69,41041,1019],{"class":82},[69,41043,36106],{"class":90},[69,41045,1767],{"class":86},[69,41047,32110],{"class":6458},[69,41049,1019],{"class":82},[69,41051,1465],{"class":90},[69,41053,1767],{"class":86},[69,41055,32119],{"class":6458},[69,41057,1019],{"class":82},[69,41059,1609],{"class":90},[69,41061,39283],{"class":86},[69,41063,41064],{"class":71,"line":3848},[69,41065,39288],{"class":86},[69,41067,41068,41070,41072,41074,41076,41078,41080,41082,41084,41086,41088,41090,41092],{"class":71,"line":3854},[69,41069,39333],{"class":86},[69,41071,32110],{"class":6458},[69,41073,1019],{"class":82},[69,41075,1471],{"class":90},[69,41077,1767],{"class":86},[69,41079,32165],{"class":6458},[69,41081,1019],{"class":82},[69,41083,1471],{"class":90},[69,41085,1767],{"class":86},[69,41087,32119],{"class":6458},[69,41089,1019],{"class":82},[69,41091,1583],{"class":90},[69,41093,1404],{"class":86},[69,41095,41096],{"class":71,"line":3860},[69,41097,39362],{"class":86},[69,41099,41100],{"class":71,"line":3865},[69,41101,39663],{"class":75},[69,41103,41104,41106,41108,41110],{"class":71,"line":9190},[69,41105,32081],{"class":90},[69,41107,39670],{"class":86},[69,41109,1019],{"class":82},[69,41111,39245],{"class":86},[69,41113,41114,41116,41118,41120,41122,41124,41126,41128,41130,41132,41134,41136,41138,41140,41142,41144,41146],{"class":71,"line":9214},[69,41115,39250],{"class":86},[69,41117,32092],{"class":6458},[69,41119,1019],{"class":82},[69,41121,36106],{"class":90},[69,41123,1767],{"class":86},[69,41125,32101],{"class":6458},[69,41127,1019],{"class":82},[69,41129,39693],{"class":90},[69,41131,1767],{"class":86},[69,41133,32110],{"class":6458},[69,41135,1019],{"class":82},[69,41137,1465],{"class":90},[69,41139,1767],{"class":86},[69,41141,32119],{"class":6458},[69,41143,1019],{"class":82},[69,41145,1609],{"class":90},[69,41147,39283],{"class":86},[69,41149,41150],{"class":71,"line":9219},[69,41151,39288],{"class":86},[69,41153,41154,41156,41158,41160,41162,41164,41166,41168,41170,41172,41174,41176,41178,41180,41182,41184,41186],{"class":71,"line":9225},[69,41155,39250],{"class":86},[69,41157,32092],{"class":6458},[69,41159,1019],{"class":82},[69,41161,39693],{"class":90},[69,41163,1767],{"class":86},[69,41165,32101],{"class":6458},[69,41167,1019],{"class":82},[69,41169,39693],{"class":90},[69,41171,1767],{"class":86},[69,41173,32110],{"class":6458},[69,41175,1019],{"class":82},[69,41177,1465],{"class":90},[69,41179,1767],{"class":86},[69,41181,32119],{"class":6458},[69,41183,1019],{"class":82},[69,41185,1609],{"class":90},[69,41187,39283],{"class":86},[69,41189,41190],{"class":71,"line":9252},[69,41191,39288],{"class":86},[69,41193,41194,41196,41198,41200,41202,41204,41206,41208,41210,41212,41214,41216,41218,41220,41222,41224,41226],{"class":71,"line":9257},[69,41195,39250],{"class":86},[69,41197,32092],{"class":6458},[69,41199,1019],{"class":82},[69,41201,39693],{"class":90},[69,41203,1767],{"class":86},[69,41205,32101],{"class":6458},[69,41207,1019],{"class":82},[69,41209,39693],{"class":90},[69,41211,1767],{"class":86},[69,41213,32110],{"class":6458},[69,41215,1019],{"class":82},[69,41217,1465],{"class":90},[69,41219,1767],{"class":86},[69,41221,32119],{"class":6458},[69,41223,1019],{"class":82},[69,41225,1609],{"class":90},[69,41227,39283],{"class":86},[69,41229,41230],{"class":71,"line":9263},[69,41231,39288],{"class":86},[69,41233,41234,41236,41238,41240,41242,41244,41246,41248,41250,41252,41254,41256,41258],{"class":71,"line":9275},[69,41235,39333],{"class":86},[69,41237,32110],{"class":6458},[69,41239,1019],{"class":82},[69,41241,1471],{"class":90},[69,41243,1767],{"class":86},[69,41245,32165],{"class":6458},[69,41247,1019],{"class":82},[69,41249,1471],{"class":90},[69,41251,1767],{"class":86},[69,41253,32119],{"class":6458},[69,41255,1019],{"class":82},[69,41257,1583],{"class":90},[69,41259,1404],{"class":86},[69,41261,41262],{"class":71,"line":9287},[69,41263,39362],{"class":86},[69,41265,41266],{"class":71,"line":9299},[69,41267,39832],{"class":75},[69,41269,41270,41272,41274,41276],{"class":71,"line":10958},[69,41271,32081],{"class":90},[69,41273,39839],{"class":86},[69,41275,1019],{"class":82},[69,41277,39245],{"class":86},[69,41279,41280,41282,41284,41286,41288,41290,41292,41294,41296,41298,41300,41302,41304,41306,41308,41310,41312],{"class":71,"line":10983},[69,41281,39250],{"class":86},[69,41283,32092],{"class":6458},[69,41285,1019],{"class":82},[69,41287,39693],{"class":90},[69,41289,1767],{"class":86},[69,41291,32101],{"class":6458},[69,41293,1019],{"class":82},[69,41295,39693],{"class":90},[69,41297,1767],{"class":86},[69,41299,32110],{"class":6458},[69,41301,1019],{"class":82},[69,41303,1465],{"class":90},[69,41305,1767],{"class":86},[69,41307,32119],{"class":6458},[69,41309,1019],{"class":82},[69,41311,1609],{"class":90},[69,41313,39283],{"class":86},[69,41315,41316],{"class":71,"line":11006},[69,41317,39288],{"class":86},[69,41319,41320,41322,41324,41326,41328,41330,41332,41334,41336,41338,41340,41342,41344,41346,41348,41350,41352],{"class":71,"line":11030},[69,41321,39250],{"class":86},[69,41323,32092],{"class":6458},[69,41325,1019],{"class":82},[69,41327,39693],{"class":90},[69,41329,1767],{"class":86},[69,41331,32101],{"class":6458},[69,41333,1019],{"class":82},[69,41335,39693],{"class":90},[69,41337,1767],{"class":86},[69,41339,32110],{"class":6458},[69,41341,1019],{"class":82},[69,41343,1465],{"class":90},[69,41345,1767],{"class":86},[69,41347,32119],{"class":6458},[69,41349,1019],{"class":82},[69,41351,1609],{"class":90},[69,41353,39283],{"class":86},[69,41355,41356],{"class":71,"line":11035},[69,41357,39288],{"class":86},[69,41359,41360,41362,41364,41366,41368,41370,41372,41374,41376,41378,41380,41382,41384,41386,41388,41390,41392],{"class":71,"line":11040},[69,41361,39250],{"class":86},[69,41363,32092],{"class":6458},[69,41365,1019],{"class":82},[69,41367,39693],{"class":90},[69,41369,1767],{"class":86},[69,41371,32101],{"class":6458},[69,41373,1019],{"class":82},[69,41375,39693],{"class":90},[69,41377,1767],{"class":86},[69,41379,32110],{"class":6458},[69,41381,1019],{"class":82},[69,41383,1465],{"class":90},[69,41385,1767],{"class":86},[69,41387,32119],{"class":6458},[69,41389,1019],{"class":82},[69,41391,1609],{"class":90},[69,41393,39283],{"class":86},[69,41395,41396],{"class":71,"line":11045},[69,41397,39288],{"class":86},[69,41399,41400,41402,41404,41406,41408,41410,41412,41414,41416,41418,41420,41422,41424],{"class":71,"line":11054},[69,41401,39333],{"class":86},[69,41403,32110],{"class":6458},[69,41405,1019],{"class":82},[69,41407,1471],{"class":90},[69,41409,1767],{"class":86},[69,41411,32165],{"class":6458},[69,41413,1019],{"class":82},[69,41415,1471],{"class":90},[69,41417,1767],{"class":86},[69,41419,32119],{"class":6458},[69,41421,1019],{"class":82},[69,41423,1583],{"class":90},[69,41425,1404],{"class":86},[69,41427,41428],{"class":71,"line":11059},[69,41429,39362],{"class":86},[69,41431,41432],{"class":71,"line":11065},[69,41433,40000],{"class":75},[69,41435,41436,41438,41440,41442],{"class":71,"line":11086},[69,41437,32081],{"class":90},[69,41439,40007],{"class":86},[69,41441,1019],{"class":82},[69,41443,39245],{"class":86},[69,41445,41446],{"class":71,"line":11092},[69,41447,40016],{"class":75},[69,41449,41450],{"class":71,"line":11106},[69,41451,40021],{"class":75},[69,41453,41454],{"class":71,"line":11112},[69,41455,40026],{"class":86},[69,41457,41458,41460,41462,41464,41466,41468,41470,41472,41474],{"class":71,"line":11139},[69,41459,40031],{"class":86},[69,41461,1758],{"class":90},[69,41463,1843],{"class":82},[69,41465,1758],{"class":90},[69,41467,1843],{"class":82},[69,41469,39693],{"class":90},[69,41471,1767],{"class":86},[69,41473,36106],{"class":90},[69,41475,39283],{"class":86},[69,41477,41478],{"class":71,"line":11148},[69,41479,39288],{"class":86},[69,41481,41482,41484,41486,41488,41490],{"class":71,"line":11154},[69,41483,40031],{"class":86},[69,41485,36106],{"class":90},[69,41487,1767],{"class":86},[69,41489,33306],{"class":90},[69,41491,39283],{"class":86},[69,41493,41494],{"class":71,"line":11162},[69,41495,39288],{"class":86},[69,41497,41498,41500,41502,41504,41506],{"class":71,"line":11167},[69,41499,40031],{"class":86},[69,41501,33306],{"class":90},[69,41503,1767],{"class":86},[69,41505,390],{"class":90},[69,41507,1404],{"class":86},[69,41509,41510],{"class":71,"line":17843},[69,41511,39362],{"class":86},[69,41513,41514],{"class":71,"line":17849},[69,41515,3644],{"emptyLinePlaceholder":1325},[69,41517,41518],{"class":71,"line":17872},[69,41519,40092],{"class":75},[69,41521,41522],{"class":71,"line":17878},[69,41523,40097],{"class":75},[69,41525,41526,41528,41530,41532,41534],{"class":71,"line":17901},[69,41527,4647],{"class":82},[69,41529,40104],{"class":86},[69,41531,27280],{"class":82},[69,41533,40109],{"class":90},[69,41535,40112],{"class":86},[69,41537,41538],{"class":71,"line":17915},[69,41539,40117],{"class":75},[69,41541,41542,41544,41546],{"class":71,"line":17935},[69,41543,5886],{"class":82},[69,41545,40124],{"class":90},[69,41547,40127],{"class":86},[69,41549,41550],{"class":71,"line":17941},[69,41551,40132],{"class":75},[69,41553,41554,41556,41558,41560,41562],{"class":71,"line":17952},[69,41555,40137],{"class":86},[69,41557,40140],{"class":6458},[69,41559,1019],{"class":82},[69,41561,40145],{"class":1022},[69,41563,1404],{"class":86},[69,41565,41566],{"class":71,"line":17975},[69,41567,40152],{"class":75},[69,41569,41570,41572,41574,41576,41578,41580],{"class":71,"line":17997},[69,41571,40157],{"class":82},[69,41573,40160],{"class":86},[69,41575,40163],{"class":82},[69,41577,40166],{"class":82},[69,41579,40169],{"class":90},[69,41581,4983],{"class":86},[69,41583,41584],{"class":71,"line":18002},[69,41585,40176],{"class":75},[69,41587,41588,41590,41592],{"class":71,"line":18008},[69,41589,40181],{"class":86},[69,41591,1583],{"class":90},[69,41593,1404],{"class":86},[69,41595,41596],{"class":71,"line":18022},[69,41597,40190],{"class":75},[69,41599,41600,41602,41604],{"class":71,"line":18035},[69,41601,40195],{"class":82},[69,41603,40124],{"class":90},[69,41605,40200],{"class":86},[69,41607,41608],{"class":71,"line":18040},[69,41609,40205],{"class":75},[69,41611,41612],{"class":71,"line":18054},[69,41613,40210],{"class":75},[69,41615,41616,41618,41620,41622,41624],{"class":71,"line":18059},[69,41617,40215],{"class":86},[69,41619,1583],{"class":90},[69,41621,1767],{"class":86},[69,41623,40222],{"class":90},[69,41625,1404],{"class":86},[69,41627,41628],{"class":71,"line":18065},[69,41629,40229],{"class":75},[69,41631,41632,41634,41636,41638,41640,41642],{"class":71,"line":18070},[69,41633,40157],{"class":82},[69,41635,40160],{"class":86},[69,41637,40163],{"class":82},[69,41639,40166],{"class":82},[69,41641,40169],{"class":90},[69,41643,4983],{"class":86},[69,41645,41646,41648,41650],{"class":71,"line":18084},[69,41647,40181],{"class":86},[69,41649,1583],{"class":90},[69,41651,1404],{"class":86},[69,41653,41654],{"class":71,"line":18089},[69,41655,3644],{"emptyLinePlaceholder":1325},[69,41657,41658],{"class":71,"line":18094},[69,41659,36401],{"class":75},[69,41661,41662,41664,41666],{"class":71,"line":18108},[69,41663,32037],{"class":82},[69,41665,32329],{"class":109},[69,41667,32332],{"class":86},[69,41669,41670,41672,41674,41676],{"class":71,"line":18120},[69,41671,32337],{"class":86},[69,41673,1019],{"class":82},[69,41675,32059],{"class":90},[69,41677,40278],{"class":86},[69,41679,41680,41682,41684,41686],{"class":71,"line":18125},[69,41681,32337],{"class":86},[69,41683,1019],{"class":82},[69,41685,32059],{"class":90},[69,41687,40289],{"class":86},[69,41689,41690,41692,41694,41696],{"class":71,"line":18138},[69,41691,32337],{"class":86},[69,41693,1019],{"class":82},[69,41695,32059],{"class":90},[69,41697,40300],{"class":86},[69,41699,41700,41702,41704,41706],{"class":71,"line":18143},[69,41701,32337],{"class":86},[69,41703,1019],{"class":82},[69,41705,32059],{"class":90},[69,41707,40311],{"class":86},[69,41709,41710,41712,41714,41716],{"class":71,"line":18148},[69,41711,32337],{"class":86},[69,41713,1019],{"class":82},[69,41715,32059],{"class":90},[69,41717,40322],{"class":86},[69,41719,41720,41722,41724,41726],{"class":71,"line":18153},[69,41721,32337],{"class":86},[69,41723,1019],{"class":82},[69,41725,32059],{"class":90},[69,41727,40333],{"class":86},[69,41729,41730,41732],{"class":71,"line":18166},[69,41731,15992],{"class":82},[69,41733,32445],{"class":86},[69,41735,41736],{"class":71,"line":18171},[69,41737,3644],{"emptyLinePlaceholder":1325},[69,41739,41740],{"class":71,"line":33869},[69,41741,40348],{"class":75},[69,41743,41744,41746,41748,41750,41752],{"class":71,"line":33875},[69,41745,2782],{"class":82},[69,41747,32456],{"class":90},[69,41749,4193],{"class":82},[69,41751,40359],{"class":1022},[69,41753,4983],{"class":86},[69,41755,41756,41758,41760,41762,41764,41766,41768,41770,41772],{"class":71,"line":33881},[69,41757,32473],{"class":86},[69,41759,1019],{"class":82},[69,41761,31687],{"class":86},[69,41763,32480],{"class":1022},[69,41765,2949],{"class":82},[69,41767,32485],{"class":86},[69,41769,2946],{"class":82},[69,41771,31712],{"class":1022},[69,41773,1404],{"class":86},[69,41775,41776,41778],{"class":71,"line":33887},[69,41777,32535],{"class":90},[69,41779,31721],{"class":86},[69,41781,41782,41784,41786],{"class":71,"line":33893},[69,41783,32525],{"class":86},[69,41785,1019],{"class":82},[69,41787,40396],{"class":86},[69,41789,41790,41792,41794,41796,41798,41800,41802,41804],{"class":71,"line":33904},[69,41791,32535],{"class":90},[69,41793,32538],{"class":86},[69,41795,1609],{"class":90},[69,41797,1767],{"class":86},[69,41799,32737],{"class":90},[69,41801,1767],{"class":86},[69,41803,32737],{"class":90},[69,41805,32551],{"class":86},[37,41807,41808],{"start":106},[40,41809,41810],{},"测试代码",[59,41812,41814],{"className":31614,"code":41813,"language":31616,"meta":64,"style":64},"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",[66,41815,41816,41822,41832,41842,41846,41856,41867,41871,41875,41879,41887,41903,41913,41929,41939,41953,41957,41967,41977,41987,41993,41997,42001,42009,42013,42029,42037,42041,42045,42053,42061,42065,42069,42073,42077,42083,42087,42097,42105,42113,42117,42121,42125,42133,42137,42153,42157,42161,42165,42177,42181,42193,42197,42201,42213,42217,42227,42231,42235,42247,42251,42260,42264,42268,42276,42280,42288,42292,42296,42300,42304,42308,42324,42332,42336,42340,42388,42394,42398,42408,42416,42424,42428,42432,42436,42440,42448,42452,42468,42472,42480,42488],{"__ignoreMap":64},[69,41817,41818,41820],{"class":71,"line":72},[69,41819,31628],{"class":82},[69,41821,31631],{"class":86},[69,41823,41824,41826,41828,41830],{"class":71,"line":79},[69,41825,31628],{"class":82},[69,41827,32651],{"class":86},[69,41829,32619],{"class":82},[69,41831,32656],{"class":86},[69,41833,41834,41836,41838,41840],{"class":71,"line":106},[69,41835,31973],{"class":82},[69,41837,32634],{"class":86},[69,41839,31628],{"class":82},[69,41841,32639],{"class":86},[69,41843,41844],{"class":71,"line":116},[69,41845,35158],{"class":75},[69,41847,41848,41850,41852,41854],{"class":71,"line":133},[69,41849,31973],{"class":82},[69,41851,32604],{"class":86},[69,41853,31628],{"class":82},[69,41855,32609],{"class":86},[69,41857,41858,41860,41862,41864],{"class":71,"line":139},[69,41859,31973],{"class":82},[69,41861,33150],{"class":86},[69,41863,31628],{"class":82},[69,41865,41866],{"class":90}," VGG16\n",[69,41868,41869],{"class":71,"line":401},[69,41870,3644],{"emptyLinePlaceholder":1325},[69,41872,41873],{"class":71,"line":470},[69,41874,3644],{"emptyLinePlaceholder":1325},[69,41876,41877],{"class":71,"line":475},[69,41878,35187],{"class":75},[69,41880,41881,41883,41885],{"class":71,"line":482},[69,41882,33183],{"class":82},[69,41884,35194],{"class":109},[69,41886,33189],{"class":86},[69,41888,41889,41891,41893,41895,41897,41899,41901],{"class":71,"line":497},[69,41890,35201],{"class":86},[69,41892,1019],{"class":82},[69,41894,32691],{"class":86},[69,41896,32694],{"class":6458},[69,41898,1019],{"class":82},[69,41900,32699],{"class":1022},[69,41902,32702],{"class":86},[69,41904,41905,41907,41909,41911],{"class":71,"line":502},[69,41906,35218],{"class":6458},[69,41908,1019],{"class":82},[69,41910,35223],{"class":90},[69,41912,32702],{"class":86},[69,41914,41915,41917,41919,41921,41923,41925,41927],{"class":71,"line":509},[69,41916,35230],{"class":6458},[69,41918,1019],{"class":82},[69,41920,32729],{"class":86},[69,41922,32732],{"class":6458},[69,41924,1019],{"class":82},[69,41926,32737],{"class":90},[69,41928,32740],{"class":86},[69,41930,41931,41933,41935,41937],{"class":71,"line":524},[69,41932,35247],{"class":6458},[69,41934,1019],{"class":82},[69,41936,32712],{"class":90},[69,41938,1404],{"class":86},[69,41940,41941,41943,41945,41947,41949,41951],{"class":71,"line":2888},[69,41942,35258],{"class":86},[69,41944,1019],{"class":82},[69,41946,32770],{"class":86},[69,41948,32773],{"class":6458},[69,41950,1019],{"class":82},[69,41952,35269],{"class":86},[69,41954,41955],{"class":71,"line":2893},[69,41956,35274],{"class":75},[69,41958,41959,41961,41963,41965],{"class":71,"line":2899},[69,41960,35279],{"class":6458},[69,41962,1019],{"class":82},[69,41964,1609],{"class":90},[69,41966,32702],{"class":86},[69,41968,41969,41971,41973,41975],{"class":71,"line":2919},[69,41970,35290],{"class":6458},[69,41972,1019],{"class":82},[69,41974,32712],{"class":90},[69,41976,32702],{"class":86},[69,41978,41979,41981,41983,41985],{"class":71,"line":2924},[69,41980,35301],{"class":6458},[69,41982,1019],{"class":82},[69,41984,1583],{"class":90},[69,41986,1404],{"class":86},[69,41988,41989,41991],{"class":71,"line":2938},[69,41990,5334],{"class":82},[69,41992,35314],{"class":86},[69,41994,41995],{"class":71,"line":2943},[69,41996,3644],{"emptyLinePlaceholder":1325},[69,41998,41999],{"class":71,"line":2972},[69,42000,35323],{"class":75},[69,42002,42003,42005,42007],{"class":71,"line":2977},[69,42004,33183],{"class":82},[69,42006,35330],{"class":109},[69,42008,35333],{"class":86},[69,42010,42011],{"class":71,"line":2994},[69,42012,35338],{"class":75},[69,42014,42015,42017,42019,42021,42023,42025,42027],{"class":71,"line":2999},[69,42016,32473],{"class":86},[69,42018,1019],{"class":82},[69,42020,32480],{"class":1022},[69,42022,2949],{"class":82},[69,42024,32485],{"class":86},[69,42026,2946],{"class":82},[69,42028,35355],{"class":1022},[69,42030,42031,42033,42035],{"class":71,"line":3004},[69,42032,32525],{"class":86},[69,42034,1019],{"class":82},[69,42036,33525],{"class":86},[69,42038,42039],{"class":71,"line":3009},[69,42040,3644],{"emptyLinePlaceholder":1325},[69,42042,42043],{"class":71,"line":3023},[69,42044,35372],{"class":75},[69,42046,42047,42049,42051],{"class":71,"line":3028},[69,42048,35377],{"class":86},[69,42050,1019],{"class":82},[69,42052,33578],{"class":90},[69,42054,42055,42057,42059],{"class":71,"line":3821},[69,42056,35386],{"class":86},[69,42058,1019],{"class":82},[69,42060,4329],{"class":90},[69,42062,42063],{"class":71,"line":3835},[69,42064,3644],{"emptyLinePlaceholder":1325},[69,42066,42067],{"class":71,"line":3843},[69,42068,35399],{"class":75},[69,42070,42071],{"class":71,"line":3848},[69,42072,35404],{"class":75},[69,42074,42075],{"class":71,"line":3854},[69,42076,35409],{"class":75},[69,42078,42079,42081],{"class":71,"line":3860},[69,42080,35414],{"class":82},[69,42082,34120],{"class":86},[69,42084,42085],{"class":71,"line":3865},[69,42086,35421],{"class":75},[69,42088,42089,42091,42093,42095],{"class":71,"line":9190},[69,42090,4647],{"class":82},[69,42092,35428],{"class":86},[69,42094,27280],{"class":82},[69,42096,35433],{"class":86},[69,42098,42099,42101,42103],{"class":71,"line":9214},[69,42100,35438],{"class":86},[69,42102,1019],{"class":82},[69,42104,35443],{"class":86},[69,42106,42107,42109,42111],{"class":71,"line":9219},[69,42108,35448],{"class":86},[69,42110,1019],{"class":82},[69,42112,35453],{"class":86},[69,42114,42115],{"class":71,"line":9225},[69,42116,35458],{"class":75},[69,42118,42119],{"class":71,"line":9252},[69,42120,34111],{"class":86},[69,42122,42123],{"class":71,"line":9257},[69,42124,35467],{"class":75},[69,42126,42127,42129,42131],{"class":71,"line":9263},[69,42128,33896],{"class":86},[69,42130,1019],{"class":82},[69,42132,35476],{"class":86},[69,42134,42135],{"class":71,"line":9275},[69,42136,35481],{"class":75},[69,42138,42139,42141,42143,42145,42147,42149,42151],{"class":71,"line":9287},[69,42140,33913],{"class":86},[69,42142,1019],{"class":82},[69,42144,33918],{"class":86},[69,42146,33921],{"class":6458},[69,42148,1019],{"class":82},[69,42150,1609],{"class":90},[69,42152,1404],{"class":86},[69,42154,42155],{"class":71,"line":9299},[69,42156,35502],{"class":75},[69,42158,42159],{"class":71,"line":10958},[69,42160,35507],{"class":75},[69,42162,42163],{"class":71,"line":10983},[69,42164,35512],{"class":75},[69,42166,42167,42169,42171,42173,42175],{"class":71,"line":11006},[69,42168,35517],{"class":86},[69,42170,10719],{"class":82},[69,42172,34023],{"class":86},[69,42174,4193],{"class":82},[69,42176,35526],{"class":86},[69,42178,42179],{"class":71,"line":11030},[69,42180,35531],{"class":75},[69,42182,42183,42185,42187,42189,42191],{"class":71,"line":11035},[69,42184,35536],{"class":86},[69,42186,10719],{"class":82},[69,42188,35541],{"class":86},[69,42190,1583],{"class":90},[69,42192,1404],{"class":86},[69,42194,42195],{"class":71,"line":11040},[69,42196,3644],{"emptyLinePlaceholder":1325},[69,42198,42199],{"class":71,"line":11045},[69,42200,35554],{"class":75},[69,42202,42203,42205,42207,42209,42211],{"class":71,"line":11054},[69,42204,35559],{"class":86},[69,42206,1019],{"class":82},[69,42208,35564],{"class":86},[69,42210,1972],{"class":82},[69,42212,35569],{"class":86},[69,42214,42215],{"class":71,"line":11059},[69,42216,35574],{"class":75},[69,42218,42219,42221,42223,42225],{"class":71,"line":11065},[69,42220,33687],{"class":90},[69,42222,1398],{"class":86},[69,42224,35583],{"class":1022},[69,42226,35586],{"class":86},[69,42228,42229],{"class":71,"line":11086},[69,42230,3644],{"emptyLinePlaceholder":1325},[69,42232,42233],{"class":71,"line":11092},[69,42234,35595],{"class":75},[69,42236,42237,42239,42241,42243,42245],{"class":71,"line":11106},[69,42238,2782],{"class":82},[69,42240,32456],{"class":90},[69,42242,4193],{"class":82},[69,42244,32461],{"class":1022},[69,42246,4983],{"class":86},[69,42248,42249],{"class":71,"line":11112},[69,42250,35612],{"class":75},[69,42252,42253,42255,42257],{"class":71,"line":11139},[69,42254,32525],{"class":86},[69,42256,1019],{"class":82},[69,42258,42259],{"class":86},"VGG16()\n",[69,42261,42262],{"class":71,"line":11148},[69,42263,35625],{"class":75},[69,42265,42266],{"class":71,"line":11154},[69,42267,35630],{"class":75},[69,42269,42270,42272,42274],{"class":71,"line":11162},[69,42271,35635],{"class":86},[69,42273,35638],{"class":1022},[69,42275,31733],{"class":86},[69,42277,42278],{"class":71,"line":11167},[69,42279,35645],{"class":75},[69,42281,42282,42284,42286],{"class":71,"line":17843},[69,42283,35258],{"class":86},[69,42285,1019],{"class":82},[69,42287,35654],{"class":86},[69,42289,42290],{"class":71,"line":17849},[69,42291,35659],{"class":75},[69,42293,42294],{"class":71,"line":17872},[69,42295,35664],{"class":86},[69,42297,42298],{"class":71,"line":17878},[69,42299,3644],{"emptyLinePlaceholder":1325},[69,42301,42302],{"class":71,"line":17901},[69,42303,35673],{"class":75},[69,42305,42306],{"class":71,"line":17915},[69,42307,35678],{"class":75},[69,42309,42310,42312,42314,42316,42318,42320,42322],{"class":71,"line":17935},[69,42311,32473],{"class":86},[69,42313,1019],{"class":82},[69,42315,32480],{"class":1022},[69,42317,2949],{"class":82},[69,42319,32485],{"class":86},[69,42321,2946],{"class":82},[69,42323,35355],{"class":1022},[69,42325,42326,42328,42330],{"class":71,"line":17941},[69,42327,32525],{"class":86},[69,42329,1019],{"class":82},[69,42331,33525],{"class":86},[69,42333,42334],{"class":71,"line":17952},[69,42335,35707],{"class":75},[69,42337,42338],{"class":71,"line":17975},[69,42339,35712],{"class":75},[69,42341,42342,42344,42346,42348,42350,42352,42354,42356,42358,42360,42362,42364,42366,42368,42370,42372,42374,42376,42378,42380,42382,42384,42386],{"class":71,"line":17997},[69,42343,35717],{"class":86},[69,42345,1019],{"class":82},[69,42347,2277],{"class":86},[69,42349,35724],{"class":1022},[69,42351,1767],{"class":86},[69,42353,35729],{"class":1022},[69,42355,1767],{"class":86},[69,42357,35734],{"class":1022},[69,42359,1767],{"class":86},[69,42361,35739],{"class":1022},[69,42363,1767],{"class":86},[69,42365,35744],{"class":1022},[69,42367,1767],{"class":86},[69,42369,35749],{"class":1022},[69,42371,1767],{"class":86},[69,42373,35754],{"class":1022},[69,42375,1767],{"class":86},[69,42377,35759],{"class":1022},[69,42379,1767],{"class":86},[69,42381,35764],{"class":1022},[69,42383,1767],{"class":86},[69,42385,35769],{"class":1022},[69,42387,34482],{"class":86},[69,42389,42390,42392],{"class":71,"line":18002},[69,42391,35414],{"class":82},[69,42393,34120],{"class":86},[69,42395,42396],{"class":71,"line":18008},[69,42397,35782],{"class":75},[69,42399,42400,42402,42404,42406],{"class":71,"line":18022},[69,42401,4647],{"class":82},[69,42403,35789],{"class":86},[69,42405,27280],{"class":82},[69,42407,35433],{"class":86},[69,42409,42410,42412,42414],{"class":71,"line":18035},[69,42411,33846],{"class":86},[69,42413,1019],{"class":82},[69,42415,33851],{"class":86},[69,42417,42418,42420,42422],{"class":71,"line":18040},[69,42419,33861],{"class":86},[69,42421,1019],{"class":82},[69,42423,33866],{"class":86},[69,42425,42426],{"class":71,"line":18054},[69,42427,3644],{"emptyLinePlaceholder":1325},[69,42429,42430],{"class":71,"line":18059},[69,42431,35818],{"class":75},[69,42433,42434],{"class":71,"line":18065},[69,42435,34111],{"class":86},[69,42437,42438],{"class":71,"line":18070},[69,42439,35827],{"class":75},[69,42441,42442,42444,42446],{"class":71,"line":18084},[69,42443,33896],{"class":86},[69,42445,1019],{"class":82},[69,42447,33901],{"class":86},[69,42449,42450],{"class":71,"line":18089},[69,42451,35840],{"class":75},[69,42453,42454,42456,42458,42460,42462,42464,42466],{"class":71,"line":18094},[69,42455,33913],{"class":86},[69,42457,1019],{"class":82},[69,42459,33918],{"class":86},[69,42461,33921],{"class":6458},[69,42463,1019],{"class":82},[69,42465,1609],{"class":90},[69,42467,1404],{"class":86},[69,42469,42470],{"class":71,"line":18108},[69,42471,35861],{"class":75},[69,42473,42474,42476,42478],{"class":71,"line":18120},[69,42475,35866],{"class":86},[69,42477,1019],{"class":82},[69,42479,35871],{"class":86},[69,42481,42482,42484,42486],{"class":71,"line":18125},[69,42483,35876],{"class":86},[69,42485,1019],{"class":82},[69,42487,35881],{"class":86},[69,42489,42490,42492,42494,42496,42498,42500,42502,42504],{"class":71,"line":18138},[69,42491,35886],{"class":90},[69,42493,1398],{"class":86},[69,42495,35891],{"class":1022},[69,42497,35894],{"class":86},[69,42499,35897],{"class":1022},[69,42501,1767],{"class":86},[69,42503,35902],{"class":1022},[69,42505,35905],{"class":86},[19,42507,42509],{"id":42508},"_23googlenet","2.3.GoogLeNet",[23237,42511,42513],{"id":42512},"_231原理","2.3.1.原理",[37,42515,42516],{},[40,42517,42518],{},"网络结构",[29,42520,42521],{},[24,42522],{"alt":64,"src":42523},"\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",[29,42525,42526],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[29,42528,42529],{},[24,42530],{"alt":64,"src":42531},"\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",[29,42533,42534],{},[24,42535],{"alt":64,"src":42536},"\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",[29,42538,42539],{},[24,42540],{"alt":64,"src":42541},"\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",[37,42543,42544],{"start":79},[40,42545,42546],{},"1x1卷积的优点",[29,42548,42549],{},[24,42550],{"alt":64,"src":42551},"\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",[37,42553,42554],{"start":106},[40,42555,42556],{},"全局平均池化层优点",[29,42558,42559],{},[24,42560],{"alt":64,"src":42561},"\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",[29,42563,42564],{},[24,42565],{"alt":64,"src":42566},"\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",[37,42568,42569],{"start":116},[40,42570,42571],{},"参数详细描述",[29,42573,42574],{},[24,42575],{"alt":64,"src":42576},"\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",[29,42578,42579],{},[24,42580],{"alt":64,"src":42581},"\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",[29,42583,42584],{},[24,42585],{"alt":64,"src":42586},"\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",[29,42588,42589],{},[24,42590],{"alt":64,"src":42591},"\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",[29,42593,42594],{},[24,42595],{"alt":64,"src":42596},"\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",[29,42598,42599],{},[24,42600],{"alt":64,"src":42601},"\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",[29,42603,42604],{},[24,42605],{"alt":64,"src":42606},"\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",[29,42608,42609],{},[24,42610],{"alt":64,"src":42611},"\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",[29,42613,42614],{},[24,42615],{"alt":64,"src":42616},"\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",[29,42618,42619],{},[24,42620],{"alt":64,"src":42621},"\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",[29,42623,42624],{},[24,42625],{"alt":64,"src":42626},"\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",[29,42628,42629],{},[24,42630],{"alt":64,"src":42631},"\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",[29,42633,42634],{},[24,42635],{"alt":64,"src":42636},"\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",[29,42638,42639],{},[24,42640],{"alt":64,"src":42641},"\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",[29,42643,42644],{},[24,42645],{"alt":64,"src":42646},"\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",[29,42648,42649],{},[24,42650],{"alt":64,"src":42651},"\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",[29,42653,42654],{},[24,42655],{"alt":64,"src":42656},"\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",[29,42658,42659],{},[24,42660],{"alt":64,"src":42661},"\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",[29,42663,42664],{},[24,42665],{"alt":64,"src":42666},"\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",[29,42668,42669],{},[24,42670],{"alt":64,"src":42671},"\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",[29,42673,42674],{},[24,42675],{"alt":64,"src":42676},"\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",[23237,42678,42680],{"id":42679},"_232代码实现","2.3.2.代码实现",[37,42682,42683],{},[40,42684,31947],{},[29,42686,42687],{},"根据原理一步一步搭建即可",[59,42689,42691],{"className":31614,"code":42690,"language":31616,"meta":64,"style":64},"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",[66,42692,42693,42699,42709,42719,42723,42740,42749,42764,42774,42779,42812,42817,42854,42901,42906,42942,42989,42994,42999,43034,43066,43070,43078,43094,43118,43143,43164,43169,43184,43188,43192,43197,43214,43219,43228,43243,43254,43298,43302,43330,43334,43345,43373,43377,43414,43418,43446,43450,43461,43497,43529,43557,43561,43572,43606,43638,43670,43703,43737,43765,43769,43780,43813,43845,43859,43863,43876,43880,43885,43897,43905,43927,43932,43937,43942,43947,43952,43957,43971,43979,43988,44001,44016,44025,44029,44037,44048,44059,44070,44081,44092,44098,44102,44107,44119,44139,44148],{"__ignoreMap":64},[69,42694,42695,42697],{"class":71,"line":72},[69,42696,31628],{"class":82},[69,42698,31631],{"class":86},[69,42700,42701,42703,42705,42707],{"class":71,"line":79},[69,42702,31973],{"class":82},[69,42704,31976],{"class":86},[69,42706,31628],{"class":82},[69,42708,31981],{"class":86},[69,42710,42711,42713,42715,42717],{"class":71,"line":106},[69,42712,31973],{"class":82},[69,42714,31993],{"class":86},[69,42716,31628],{"class":82},[69,42718,31998],{"class":86},[69,42720,42721],{"class":71,"line":116},[69,42722,3644],{"emptyLinePlaceholder":1325},[69,42724,42725,42727,42730,42732,42734,42736,42738],{"class":71,"line":133},[69,42726,15934],{"class":82},[69,42728,42729],{"class":109}," Inception",[69,42731,1398],{"class":86},[69,42733,32014],{"class":109},[69,42735,1946],{"class":86},[69,42737,32019],{"class":109},[69,42739,32022],{"class":86},[69,42741,42742,42744,42746],{"class":71,"line":139},[69,42743,32037],{"class":82},[69,42745,32040],{"class":90},[69,42747,42748],{"class":86},"(self,in_channels,c1,c2,c3,c4):\n",[69,42750,42751,42753,42756,42758,42760,42762],{"class":71,"line":401},[69,42752,32053],{"class":90},[69,42754,42755],{"class":86},"(Inception,",[69,42757,32059],{"class":90},[69,42759,32062],{"class":86},[69,42761,32065],{"class":90},[69,42763,3220],{"class":86},[69,42765,42766,42768,42770,42772],{"class":71,"line":470},[69,42767,32081],{"class":90},[69,42769,36007],{"class":86},[69,42771,1019],{"class":82},[69,42773,36012],{"class":86},[69,42775,42776],{"class":71,"line":475},[69,42777,42778],{"class":75},"        # 路线1：定义1*1卷积\n",[69,42780,42781,42783,42786,42788,42790,42792,42794,42797,42799,42801,42804,42806,42808,42810],{"class":71,"line":482},[69,42782,32081],{"class":90},[69,42784,42785],{"class":86},".p1_1",[69,42787,1019],{"class":82},[69,42789,32089],{"class":86},[69,42791,32092],{"class":6458},[69,42793,1019],{"class":82},[69,42795,42796],{"class":86},"in_channels,",[69,42798,32101],{"class":6458},[69,42800,1019],{"class":82},[69,42802,42803],{"class":86},"c1,",[69,42805,32110],{"class":6458},[69,42807,1019],{"class":82},[69,42809,1609],{"class":90},[69,42811,1404],{"class":86},[69,42813,42814],{"class":71,"line":497},[69,42815,42816],{"class":75},"        # 路线2：定义1*1卷积和3*3\n",[69,42818,42819,42821,42824,42826,42828,42830,42832,42834,42836,42838,42841,42843,42846,42848,42850,42852],{"class":71,"line":502},[69,42820,32081],{"class":90},[69,42822,42823],{"class":86},".p2_1",[69,42825,1019],{"class":82},[69,42827,32089],{"class":86},[69,42829,32092],{"class":6458},[69,42831,1019],{"class":82},[69,42833,42796],{"class":86},[69,42835,32101],{"class":6458},[69,42837,1019],{"class":82},[69,42839,42840],{"class":86},"c2[",[69,42842,1583],{"class":90},[69,42844,42845],{"class":86},"],",[69,42847,32110],{"class":6458},[69,42849,1019],{"class":82},[69,42851,1609],{"class":90},[69,42853,1404],{"class":86},[69,42855,42856,42858,42861,42863,42865,42867,42869,42871,42873,42875,42877,42879,42881,42883,42885,42887,42889,42891,42893,42895,42897,42899],{"class":71,"line":509},[69,42857,32081],{"class":90},[69,42859,42860],{"class":86},".p2_2",[69,42862,1019],{"class":82},[69,42864,32089],{"class":86},[69,42866,32092],{"class":6458},[69,42868,1019],{"class":82},[69,42870,42840],{"class":86},[69,42872,1583],{"class":90},[69,42874,42845],{"class":86},[69,42876,32101],{"class":6458},[69,42878,1019],{"class":82},[69,42880,42840],{"class":86},[69,42882,1609],{"class":90},[69,42884,42845],{"class":86},[69,42886,32110],{"class":6458},[69,42888,1019],{"class":82},[69,42890,1465],{"class":90},[69,42892,1767],{"class":86},[69,42894,32119],{"class":6458},[69,42896,1019],{"class":82},[69,42898,1609],{"class":90},[69,42900,1404],{"class":86},[69,42902,42903],{"class":71,"line":524},[69,42904,42905],{"class":75},"        # 路线3：定义1*1卷积和5*5\n",[69,42907,42908,42910,42913,42915,42917,42919,42921,42923,42925,42927,42930,42932,42934,42936,42938,42940],{"class":71,"line":2888},[69,42909,32081],{"class":90},[69,42911,42912],{"class":86},".p3_1",[69,42914,1019],{"class":82},[69,42916,32089],{"class":86},[69,42918,32092],{"class":6458},[69,42920,1019],{"class":82},[69,42922,42796],{"class":86},[69,42924,32101],{"class":6458},[69,42926,1019],{"class":82},[69,42928,42929],{"class":86},"c3[",[69,42931,1583],{"class":90},[69,42933,42845],{"class":86},[69,42935,32110],{"class":6458},[69,42937,1019],{"class":82},[69,42939,1609],{"class":90},[69,42941,1404],{"class":86},[69,42943,42944,42946,42949,42951,42953,42955,42957,42959,42961,42963,42965,42967,42969,42971,42973,42975,42977,42979,42981,42983,42985,42987],{"class":71,"line":2893},[69,42945,32081],{"class":90},[69,42947,42948],{"class":86},".p3_2",[69,42950,1019],{"class":82},[69,42952,32089],{"class":86},[69,42954,32092],{"class":6458},[69,42956,1019],{"class":82},[69,42958,42929],{"class":86},[69,42960,1583],{"class":90},[69,42962,42845],{"class":86},[69,42964,32101],{"class":6458},[69,42966,1019],{"class":82},[69,42968,42929],{"class":86},[69,42970,1609],{"class":90},[69,42972,42845],{"class":86},[69,42974,32110],{"class":6458},[69,42976,1019],{"class":82},[69,42978,1709],{"class":90},[69,42980,1767],{"class":86},[69,42982,32119],{"class":6458},[69,42984,1019],{"class":82},[69,42986,1471],{"class":90},[69,42988,1404],{"class":86},[69,42990,42991],{"class":71,"line":2899},[69,42992,42993],{"class":75},"        # 路线4：定义3*3最大池化和1*1卷积\n",[69,42995,42996],{"class":71,"line":2919},[69,42997,42998],{"class":75},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[69,43000,43001,43003,43006,43008,43010,43012,43014,43016,43018,43020,43022,43024,43026,43028,43030,43032],{"class":71,"line":2924},[69,43002,32081],{"class":90},[69,43004,43005],{"class":86},".p4_1",[69,43007,1019],{"class":82},[69,43009,36065],{"class":86},[69,43011,32110],{"class":6458},[69,43013,1019],{"class":82},[69,43015,1465],{"class":90},[69,43017,1767],{"class":86},[69,43019,32165],{"class":6458},[69,43021,1019],{"class":82},[69,43023,1609],{"class":90},[69,43025,1767],{"class":86},[69,43027,32119],{"class":6458},[69,43029,1019],{"class":82},[69,43031,1609],{"class":90},[69,43033,1404],{"class":86},[69,43035,43036,43038,43041,43043,43045,43047,43049,43051,43053,43055,43058,43060,43062,43064],{"class":71,"line":2938},[69,43037,32081],{"class":90},[69,43039,43040],{"class":86},".p4_2",[69,43042,1019],{"class":82},[69,43044,32089],{"class":86},[69,43046,32092],{"class":6458},[69,43048,1019],{"class":82},[69,43050,42796],{"class":86},[69,43052,32101],{"class":6458},[69,43054,1019],{"class":82},[69,43056,43057],{"class":86},"c4,",[69,43059,32110],{"class":6458},[69,43061,1019],{"class":82},[69,43063,1609],{"class":90},[69,43065,1404],{"class":86},[69,43067,43068],{"class":71,"line":2943},[69,43069,3644],{"emptyLinePlaceholder":1325},[69,43071,43072,43074,43076],{"class":71,"line":2972},[69,43073,32037],{"class":82},[69,43075,32329],{"class":109},[69,43077,32332],{"class":86},[69,43079,43080,43083,43085,43087,43089,43091],{"class":71,"line":2977},[69,43081,43082],{"class":86},"        p1",[69,43084,1019],{"class":82},[69,43086,32059],{"class":90},[69,43088,36420],{"class":86},[69,43090,32059],{"class":90},[69,43092,43093],{"class":86},".p1_1(x))\n",[69,43095,43096,43098,43100,43102,43104,43106,43109,43111,43113,43115],{"class":71,"line":2994},[69,43097,8327],{"class":86},[69,43099,1019],{"class":82},[69,43101,32059],{"class":90},[69,43103,36420],{"class":86},[69,43105,32059],{"class":90},[69,43107,43108],{"class":86},".p2_2(",[69,43110,32059],{"class":90},[69,43112,36420],{"class":86},[69,43114,32059],{"class":90},[69,43116,43117],{"class":86},".p2_1(x))))\n",[69,43119,43120,43123,43125,43127,43129,43131,43134,43136,43138,43140],{"class":71,"line":2999},[69,43121,43122],{"class":86},"        p3",[69,43124,1019],{"class":82},[69,43126,32059],{"class":90},[69,43128,36420],{"class":86},[69,43130,32059],{"class":90},[69,43132,43133],{"class":86},".p3_2(",[69,43135,32059],{"class":90},[69,43137,36420],{"class":86},[69,43139,32059],{"class":90},[69,43141,43142],{"class":86},".p3_1(x))))\n",[69,43144,43145,43148,43150,43152,43154,43156,43159,43161],{"class":71,"line":3004},[69,43146,43147],{"class":86},"        p4",[69,43149,1019],{"class":82},[69,43151,32059],{"class":90},[69,43153,36420],{"class":86},[69,43155,32059],{"class":90},[69,43157,43158],{"class":86},".p4_2(",[69,43160,32059],{"class":90},[69,43162,43163],{"class":86},".p4_1(x)))\n",[69,43165,43166],{"class":71,"line":3009},[69,43167,43168],{"class":75},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[69,43170,43171,43173,43176,43178,43180,43182],{"class":71,"line":3023},[69,43172,15992],{"class":82},[69,43174,43175],{"class":86}," torch.cat((p1,p2,p3,p4),",[69,43177,33921],{"class":6458},[69,43179,1019],{"class":82},[69,43181,1609],{"class":90},[69,43183,1404],{"class":86},[69,43185,43186],{"class":71,"line":3028},[69,43187,3644],{"emptyLinePlaceholder":1325},[69,43189,43190],{"class":71,"line":3821},[69,43191,3644],{"emptyLinePlaceholder":1325},[69,43193,43194],{"class":71,"line":3835},[69,43195,43196],{"class":75},"# 搭建GoogLeNet网络\n",[69,43198,43199,43201,43204,43206,43208,43210,43212],{"class":71,"line":3843},[69,43200,15934],{"class":82},[69,43202,43203],{"class":109}," GoogLeNet",[69,43205,1398],{"class":86},[69,43207,32014],{"class":109},[69,43209,1946],{"class":86},[69,43211,32019],{"class":109},[69,43213,32022],{"class":86},[69,43215,43216],{"class":71,"line":3848},[69,43217,43218],{"class":75},"    # 必须把Inception导入到里边\n",[69,43220,43221,43223,43225],{"class":71,"line":3854},[69,43222,32037],{"class":82},[69,43224,32040],{"class":90},[69,43226,43227],{"class":86},"(self,Inception):\n",[69,43229,43230,43232,43235,43237,43239,43241],{"class":71,"line":3860},[69,43231,32053],{"class":90},[69,43233,43234],{"class":86},"(GoogLeNet,",[69,43236,32059],{"class":90},[69,43238,32062],{"class":86},[69,43240,32065],{"class":90},[69,43242,3220],{"class":86},[69,43244,43245,43247,43250,43252],{"class":71,"line":3865},[69,43246,32081],{"class":90},[69,43248,43249],{"class":86},".b1",[69,43251,1019],{"class":82},[69,43253,39245],{"class":86},[69,43255,43256,43258,43260,43262,43264,43266,43268,43270,43272,43274,43276,43278,43280,43282,43284,43286,43288,43290,43292,43294,43296],{"class":71,"line":9190},[69,43257,39250],{"class":86},[69,43259,32092],{"class":6458},[69,43261,1019],{"class":82},[69,43263,1609],{"class":90},[69,43265,1767],{"class":86},[69,43267,32101],{"class":6458},[69,43269,1019],{"class":82},[69,43271,1595],{"class":90},[69,43273,1767],{"class":86},[69,43275,32110],{"class":6458},[69,43277,1019],{"class":82},[69,43279,1758],{"class":90},[69,43281,1767],{"class":86},[69,43283,32165],{"class":6458},[69,43285,1019],{"class":82},[69,43287,1471],{"class":90},[69,43289,1767],{"class":86},[69,43291,32119],{"class":6458},[69,43293,1019],{"class":82},[69,43295,1465],{"class":90},[69,43297,39283],{"class":86},[69,43299,43300],{"class":71,"line":9214},[69,43301,39288],{"class":86},[69,43303,43304,43306,43308,43310,43312,43314,43316,43318,43320,43322,43324,43326,43328],{"class":71,"line":9219},[69,43305,39333],{"class":86},[69,43307,32110],{"class":6458},[69,43309,1019],{"class":82},[69,43311,1465],{"class":90},[69,43313,1767],{"class":86},[69,43315,32165],{"class":6458},[69,43317,1019],{"class":82},[69,43319,1471],{"class":90},[69,43321,1767],{"class":86},[69,43323,32119],{"class":6458},[69,43325,1019],{"class":82},[69,43327,1609],{"class":90},[69,43329,1404],{"class":86},[69,43331,43332],{"class":71,"line":9225},[69,43333,39362],{"class":86},[69,43335,43336,43338,43341,43343],{"class":71,"line":9252},[69,43337,32081],{"class":90},[69,43339,43340],{"class":86},".b2",[69,43342,1019],{"class":82},[69,43344,39245],{"class":86},[69,43346,43347,43349,43351,43353,43355,43357,43359,43361,43363,43365,43367,43369,43371],{"class":71,"line":9257},[69,43348,39250],{"class":86},[69,43350,32092],{"class":6458},[69,43352,1019],{"class":82},[69,43354,1595],{"class":90},[69,43356,1767],{"class":86},[69,43358,32101],{"class":6458},[69,43360,1019],{"class":82},[69,43362,1595],{"class":90},[69,43364,1767],{"class":86},[69,43366,32110],{"class":6458},[69,43368,1019],{"class":82},[69,43370,1609],{"class":90},[69,43372,39283],{"class":86},[69,43374,43375],{"class":71,"line":9263},[69,43376,39288],{"class":86},[69,43378,43379,43381,43383,43385,43387,43389,43391,43393,43396,43398,43400,43402,43404,43406,43408,43410,43412],{"class":71,"line":9275},[69,43380,39250],{"class":86},[69,43382,32092],{"class":6458},[69,43384,1019],{"class":82},[69,43386,1595],{"class":90},[69,43388,1767],{"class":86},[69,43390,32101],{"class":6458},[69,43392,1019],{"class":82},[69,43394,43395],{"class":90},"192",[69,43397,1767],{"class":86},[69,43399,32110],{"class":6458},[69,43401,1019],{"class":82},[69,43403,1465],{"class":90},[69,43405,1767],{"class":86},[69,43407,32119],{"class":6458},[69,43409,1019],{"class":82},[69,43411,1609],{"class":90},[69,43413,39283],{"class":86},[69,43415,43416],{"class":71,"line":9287},[69,43417,39288],{"class":86},[69,43419,43420,43422,43424,43426,43428,43430,43432,43434,43436,43438,43440,43442,43444],{"class":71,"line":9299},[69,43421,39333],{"class":86},[69,43423,32110],{"class":6458},[69,43425,1019],{"class":82},[69,43427,1465],{"class":90},[69,43429,1767],{"class":86},[69,43431,32165],{"class":6458},[69,43433,1019],{"class":82},[69,43435,1471],{"class":90},[69,43437,1767],{"class":86},[69,43439,32119],{"class":6458},[69,43441,1019],{"class":82},[69,43443,1609],{"class":90},[69,43445,1404],{"class":86},[69,43447,43448],{"class":71,"line":10958},[69,43449,39362],{"class":86},[69,43451,43452,43454,43457,43459],{"class":71,"line":10983},[69,43453,32081],{"class":90},[69,43455,43456],{"class":86},".b3",[69,43458,1019],{"class":82},[69,43460,39245],{"class":86},[69,43462,43463,43466,43468,43470,43472,43475,43477,43479,43481,43484,43486,43488,43490,43493,43495],{"class":71,"line":11006},[69,43464,43465],{"class":86},"            Inception(",[69,43467,43395],{"class":90},[69,43469,1767],{"class":86},[69,43471,1595],{"class":90},[69,43473,43474],{"class":86},",(",[69,43476,1601],{"class":90},[69,43478,1767],{"class":86},[69,43480,33306],{"class":90},[69,43482,43483],{"class":86},"),(",[69,43485,691],{"class":90},[69,43487,1767],{"class":86},[69,43489,1589],{"class":90},[69,43491,43492],{"class":86},"),",[69,43494,1589],{"class":90},[69,43496,39283],{"class":86},[69,43498,43499,43501,43503,43505,43507,43509,43511,43513,43515,43517,43519,43521,43523,43525,43527],{"class":71,"line":11030},[69,43500,43465],{"class":86},[69,43502,36106],{"class":90},[69,43504,1767],{"class":86},[69,43506,33306],{"class":90},[69,43508,43474],{"class":86},[69,43510,33306],{"class":90},[69,43512,1767],{"class":86},[69,43514,43395],{"class":90},[69,43516,43483],{"class":86},[69,43518,1589],{"class":90},[69,43520,1767],{"class":86},[69,43522,1601],{"class":90},[69,43524,43492],{"class":86},[69,43526,1595],{"class":90},[69,43528,39283],{"class":86},[69,43530,43531,43533,43535,43537,43539,43541,43543,43545,43547,43549,43551,43553,43555],{"class":71,"line":11035},[69,43532,39333],{"class":86},[69,43534,32110],{"class":6458},[69,43536,1019],{"class":82},[69,43538,1465],{"class":90},[69,43540,1767],{"class":86},[69,43542,32165],{"class":6458},[69,43544,1019],{"class":82},[69,43546,1471],{"class":90},[69,43548,1767],{"class":86},[69,43550,32119],{"class":6458},[69,43552,1019],{"class":82},[69,43554,1609],{"class":90},[69,43556,1404],{"class":86},[69,43558,43559],{"class":71,"line":11040},[69,43560,39362],{"class":86},[69,43562,43563,43565,43568,43570],{"class":71,"line":11045},[69,43564,32081],{"class":90},[69,43566,43567],{"class":86},".b4",[69,43569,1019],{"class":82},[69,43571,39245],{"class":86},[69,43573,43574,43576,43579,43581,43583,43585,43587,43589,43592,43594,43596,43598,43600,43602,43604],{"class":71,"line":11054},[69,43575,43465],{"class":86},[69,43577,43578],{"class":90},"480",[69,43580,1767],{"class":86},[69,43582,43395],{"class":90},[69,43584,43474],{"class":86},[69,43586,1601],{"class":90},[69,43588,1767],{"class":86},[69,43590,43591],{"class":90},"208",[69,43593,43483],{"class":86},[69,43595,691],{"class":90},[69,43597,1767],{"class":86},[69,43599,1994],{"class":90},[69,43601,43492],{"class":86},[69,43603,1595],{"class":90},[69,43605,39283],{"class":86},[69,43607,43608,43610,43612,43614,43616,43618,43620,43622,43624,43626,43628,43630,43632,43634,43636],{"class":71,"line":11059},[69,43609,43465],{"class":86},[69,43611,39693],{"class":90},[69,43613,1767],{"class":86},[69,43615,22287],{"class":90},[69,43617,43474],{"class":86},[69,43619,2005],{"class":90},[69,43621,1767],{"class":86},[69,43623,32737],{"class":90},[69,43625,43483],{"class":86},[69,43627,2187],{"class":90},[69,43629,1767],{"class":86},[69,43631,1595],{"class":90},[69,43633,43492],{"class":86},[69,43635,1595],{"class":90},[69,43637,39283],{"class":86},[69,43639,43640,43642,43644,43646,43648,43650,43652,43654,43656,43658,43660,43662,43664,43666,43668],{"class":71,"line":11065},[69,43641,43465],{"class":86},[69,43643,39693],{"class":90},[69,43645,1767],{"class":86},[69,43647,33306],{"class":90},[69,43649,43474],{"class":86},[69,43651,33306],{"class":90},[69,43653,1767],{"class":86},[69,43655,36106],{"class":90},[69,43657,43483],{"class":86},[69,43659,2187],{"class":90},[69,43661,1767],{"class":86},[69,43663,1595],{"class":90},[69,43665,43492],{"class":86},[69,43667,1595],{"class":90},[69,43669,39283],{"class":86},[69,43671,43672,43674,43676,43678,43680,43682,43684,43686,43689,43691,43693,43695,43697,43699,43701],{"class":71,"line":11086},[69,43673,43465],{"class":86},[69,43675,39693],{"class":90},[69,43677,1767],{"class":86},[69,43679,2005],{"class":90},[69,43681,43474],{"class":86},[69,43683,33306],{"class":90},[69,43685,1767],{"class":86},[69,43687,43688],{"class":90},"288",[69,43690,43483],{"class":86},[69,43692,1589],{"class":90},[69,43694,1767],{"class":86},[69,43696,1595],{"class":90},[69,43698,43492],{"class":86},[69,43700,1595],{"class":90},[69,43702,39283],{"class":86},[69,43704,43705,43707,43710,43712,43714,43716,43718,43720,43723,43725,43727,43729,43731,43733,43735],{"class":71,"line":11092},[69,43706,43465],{"class":86},[69,43708,43709],{"class":90},"528",[69,43711,1767],{"class":86},[69,43713,36106],{"class":90},[69,43715,43474],{"class":86},[69,43717,22287],{"class":90},[69,43719,1767],{"class":86},[69,43721,43722],{"class":90},"320",[69,43724,43483],{"class":86},[69,43726,1589],{"class":90},[69,43728,1767],{"class":86},[69,43730,33306],{"class":90},[69,43732,43492],{"class":86},[69,43734,33306],{"class":90},[69,43736,39283],{"class":86},[69,43738,43739,43741,43743,43745,43747,43749,43751,43753,43755,43757,43759,43761,43763],{"class":71,"line":11106},[69,43740,39333],{"class":86},[69,43742,32110],{"class":6458},[69,43744,1019],{"class":82},[69,43746,1465],{"class":90},[69,43748,1767],{"class":86},[69,43750,32165],{"class":6458},[69,43752,1019],{"class":82},[69,43754,1471],{"class":90},[69,43756,1767],{"class":86},[69,43758,32119],{"class":6458},[69,43760,1019],{"class":82},[69,43762,1609],{"class":90},[69,43764,1404],{"class":86},[69,43766,43767],{"class":71,"line":11112},[69,43768,39362],{"class":86},[69,43770,43771,43773,43776,43778],{"class":71,"line":11139},[69,43772,32081],{"class":90},[69,43774,43775],{"class":86},".b5",[69,43777,1019],{"class":82},[69,43779,39245],{"class":86},[69,43781,43782,43784,43787,43789,43791,43793,43795,43797,43799,43801,43803,43805,43807,43809,43811],{"class":71,"line":11148},[69,43783,43465],{"class":86},[69,43785,43786],{"class":90},"832",[69,43788,1767],{"class":86},[69,43790,36106],{"class":90},[69,43792,43474],{"class":86},[69,43794,22287],{"class":90},[69,43796,1767],{"class":86},[69,43798,43722],{"class":90},[69,43800,43483],{"class":86},[69,43802,1589],{"class":90},[69,43804,1767],{"class":86},[69,43806,33306],{"class":90},[69,43808,43492],{"class":86},[69,43810,33306],{"class":90},[69,43812,39283],{"class":86},[69,43814,43815,43817,43819,43821,43823,43825,43827,43829,43831,43833,43835,43837,43839,43841,43843],{"class":71,"line":11154},[69,43816,43465],{"class":86},[69,43818,43786],{"class":90},[69,43820,1767],{"class":86},[69,43822,36176],{"class":90},[69,43824,43474],{"class":86},[69,43826,43395],{"class":90},[69,43828,1767],{"class":86},[69,43830,36176],{"class":90},[69,43832,43483],{"class":86},[69,43834,1994],{"class":90},[69,43836,1767],{"class":86},[69,43838,33306],{"class":90},[69,43840,43492],{"class":86},[69,43842,33306],{"class":90},[69,43844,39283],{"class":86},[69,43846,43847,43850,43852,43854,43856],{"class":71,"line":11162},[69,43848,43849],{"class":86},"            nn.AdaptiveAvgPool2d((",[69,43851,1609],{"class":90},[69,43853,1767],{"class":86},[69,43855,1609],{"class":90},[69,43857,43858],{"class":86},")),\n",[69,43860,43861],{"class":71,"line":11167},[69,43862,40026],{"class":86},[69,43864,43865,43867,43870,43872,43874],{"class":71,"line":17843},[69,43866,40031],{"class":86},[69,43868,43869],{"class":90},"1024",[69,43871,1767],{"class":86},[69,43873,390],{"class":90},[69,43875,1404],{"class":86},[69,43877,43878],{"class":71,"line":17849},[69,43879,39362],{"class":86},[69,43881,43882],{"class":71,"line":17872},[69,43883,43884],{"class":75},"        # 对模型参数初始化\n",[69,43886,43887,43889,43891,43893,43895],{"class":71,"line":17878},[69,43888,4647],{"class":82},[69,43890,40104],{"class":86},[69,43892,27280],{"class":82},[69,43894,40109],{"class":90},[69,43896,40112],{"class":86},[69,43898,43899,43901,43903],{"class":71,"line":17901},[69,43900,5886],{"class":82},[69,43902,40124],{"class":90},[69,43904,40127],{"class":86},[69,43906,43907,43909,43912,43914,43917,43919,43921,43923,43925],{"class":71,"line":17915},[69,43908,40137],{"class":86},[69,43910,43911],{"class":6458},"mode",[69,43913,1019],{"class":82},[69,43915,43916],{"class":1022},"'fan_out'",[69,43918,1767],{"class":86},[69,43920,40140],{"class":6458},[69,43922,1019],{"class":82},[69,43924,40145],{"class":1022},[69,43926,1404],{"class":86},[69,43928,43929],{"class":71,"line":17935},[69,43930,43931],{"class":75},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[69,43933,43934],{"class":71,"line":17941},[69,43935,43936],{"class":75},"                # ② mode = 'fan_out'决定使用的fan值：\n",[69,43938,43939],{"class":71,"line":17952},[69,43940,43941],{"class":75},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[69,43943,43944],{"class":71,"line":17975},[69,43945,43946],{"class":75},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[69,43948,43949],{"class":71,"line":17997},[69,43950,43951],{"class":75},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[69,43953,43954],{"class":71,"line":18002},[69,43955,43956],{"class":75},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[69,43958,43959,43961,43963,43965,43967,43969],{"class":71,"line":18008},[69,43960,40157],{"class":82},[69,43962,40160],{"class":86},[69,43964,40163],{"class":82},[69,43966,40166],{"class":82},[69,43968,40169],{"class":90},[69,43970,4983],{"class":86},[69,43972,43973,43975,43977],{"class":71,"line":18022},[69,43974,40181],{"class":86},[69,43976,1583],{"class":90},[69,43978,1404],{"class":86},[69,43980,43981,43984,43986],{"class":71,"line":18035},[69,43982,43983],{"class":82},"                elif",[69,43985,40124],{"class":90},[69,43987,40200],{"class":86},[69,43989,43990,43993,43995,43997,43999],{"class":71,"line":18040},[69,43991,43992],{"class":86},"                    nn.init.normal_(m.weight,",[69,43994,1583],{"class":90},[69,43996,1767],{"class":86},[69,43998,40222],{"class":90},[69,44000,1404],{"class":86},[69,44002,44003,44006,44008,44010,44012,44014],{"class":71,"line":18054},[69,44004,44005],{"class":82},"                    if",[69,44007,40160],{"class":86},[69,44009,40163],{"class":82},[69,44011,40166],{"class":82},[69,44013,40169],{"class":90},[69,44015,4983],{"class":86},[69,44017,44018,44021,44023],{"class":71,"line":18059},[69,44019,44020],{"class":86},"                        nn.init.constant_(m.bias,",[69,44022,1583],{"class":90},[69,44024,1404],{"class":86},[69,44026,44027],{"class":71,"line":18065},[69,44028,36401],{"class":75},[69,44030,44031,44033,44035],{"class":71,"line":18070},[69,44032,32037],{"class":82},[69,44034,32329],{"class":109},[69,44036,32332],{"class":86},[69,44038,44039,44041,44043,44045],{"class":71,"line":18084},[69,44040,32337],{"class":86},[69,44042,1019],{"class":82},[69,44044,32059],{"class":90},[69,44046,44047],{"class":86},".b1(x)\n",[69,44049,44050,44052,44054,44056],{"class":71,"line":18089},[69,44051,32337],{"class":86},[69,44053,1019],{"class":82},[69,44055,32059],{"class":90},[69,44057,44058],{"class":86},".b2(x)\n",[69,44060,44061,44063,44065,44067],{"class":71,"line":18094},[69,44062,32337],{"class":86},[69,44064,1019],{"class":82},[69,44066,32059],{"class":90},[69,44068,44069],{"class":86},".b3(x)\n",[69,44071,44072,44074,44076,44078],{"class":71,"line":18108},[69,44073,32337],{"class":86},[69,44075,1019],{"class":82},[69,44077,32059],{"class":90},[69,44079,44080],{"class":86},".b4(x)\n",[69,44082,44083,44085,44087,44089],{"class":71,"line":18120},[69,44084,32337],{"class":86},[69,44086,1019],{"class":82},[69,44088,32059],{"class":90},[69,44090,44091],{"class":86},".b5(x)\n",[69,44093,44094,44096],{"class":71,"line":18125},[69,44095,15992],{"class":82},[69,44097,32445],{"class":86},[69,44099,44100],{"class":71,"line":18138},[69,44101,3644],{"emptyLinePlaceholder":1325},[69,44103,44104],{"class":71,"line":18143},[69,44105,44106],{"class":75},"# 模型展示\n",[69,44108,44109,44111,44113,44115,44117],{"class":71,"line":18148},[69,44110,2782],{"class":82},[69,44112,32456],{"class":90},[69,44114,4193],{"class":82},[69,44116,32461],{"class":1022},[69,44118,4983],{"class":86},[69,44120,44121,44123,44125,44127,44129,44131,44133,44135,44137],{"class":71,"line":18153},[69,44122,32473],{"class":86},[69,44124,1019],{"class":82},[69,44126,31687],{"class":86},[69,44128,32480],{"class":1022},[69,44130,2949],{"class":82},[69,44132,32485],{"class":86},[69,44134,2946],{"class":82},[69,44136,31712],{"class":1022},[69,44138,1404],{"class":86},[69,44140,44141,44143,44145],{"class":71,"line":18166},[69,44142,32525],{"class":86},[69,44144,1019],{"class":82},[69,44146,44147],{"class":86},"GoogLeNet(Inception).to(device)\n",[69,44149,44150,44152,44154,44156,44158,44160,44162,44164],{"class":71,"line":18171},[69,44151,32535],{"class":90},[69,44153,32538],{"class":86},[69,44155,1609],{"class":90},[69,44157,1767],{"class":86},[69,44159,32737],{"class":90},[69,44161,1767],{"class":86},[69,44163,32737],{"class":90},[69,44165,32551],{"class":86},[37,44167,44168],{"start":79},[40,44169,40419],{},[59,44171,44173],{"className":31614,"code":44172,"language":31616,"meta":64,"style":64},"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",[66,44174,44175,44181,44187,44197,44203,44213,44223,44233,44243,44253,44257,44268,44278,44282,44286,44290,44298,44310,44320,44336,44346,44378,44392,44402,44412,44416,44426,44440,44450,44460,44470,44476,44480,44484,44488,44492,44496,44504,44524,44528,44532,44536,44540,44544,44560,44564,44568,44576,44580,44584,44592,44596,44600,44604,44612,44616,44620,44624,44628,44636,44640,44648,44652,44660,44664,44672,44676,44684,44688,44692,44700,44704,44708,44712,44724,44748,44762,44766,44770,44774,44782,44786,44794,44798,44806,44810,44818,44822,44830,44834,44842,44846,44858,44862,44870,44874,44882,44886,44890,44894,44898,44906,44910,44926,44930,44938,44942,44946,44950,44954,44958,44962,44966,44982,44986,44998,45002,45014,45018,45030,45034,45042,45046,45054,45058,45062,45066,45072,45076,45084,45088,45104,45108,45116,45120,45136,45148,45152,45164,45168,45172,45180,45184,45188,45196,45200,45208,45212,45220,45224,45228,45270,45312,45316,45320,45336,45340,45356,45360,45364,45372,45376,45380,45392,45430,45434,45438,45446,45450,45464,45474,45480,45486,45492,45498,45502,45506,45512,45516,45520,45528,45532,45550,45554,45558,45562,45578,45582,45586,45590,45594,45598,45618,45638,45642,45646,45650,45658,45666,45670,45686,45706,45726,45730,45734,45742,45750,45754,45758,45762,45774,45778,45788,45796,45813],{"__ignoreMap":64},[69,44176,44177,44179],{"class":71,"line":72},[69,44178,31628],{"class":82},[69,44180,33058],{"class":86},[69,44182,44183,44185],{"class":71,"line":79},[69,44184,31628],{"class":82},[69,44186,33065],{"class":86},[69,44188,44189,44191,44193,44195],{"class":71,"line":106},[69,44190,31628],{"class":82},[69,44192,33076],{"class":86},[69,44194,32619],{"class":82},[69,44196,33081],{"class":86},[69,44198,44199,44201],{"class":71,"line":116},[69,44200,31628],{"class":82},[69,44202,31631],{"class":86},[69,44204,44205,44207,44209,44211],{"class":71,"line":133},[69,44206,31973],{"class":82},[69,44208,32651],{"class":86},[69,44210,31628],{"class":82},[69,44212,33098],{"class":86},[69,44214,44215,44217,44219,44221],{"class":71,"line":139},[69,44216,31973],{"class":82},[69,44218,32604],{"class":86},[69,44220,31628],{"class":82},[69,44222,32609],{"class":86},[69,44224,44225,44227,44229,44231],{"class":71,"line":401},[69,44226,31973],{"class":82},[69,44228,32634],{"class":86},[69,44230,31628],{"class":82},[69,44232,32639],{"class":86},[69,44234,44235,44237,44239,44241],{"class":71,"line":470},[69,44236,31628],{"class":82},[69,44238,32651],{"class":86},[69,44240,32619],{"class":82},[69,44242,32656],{"class":86},[69,44244,44245,44247,44249,44251],{"class":71,"line":475},[69,44246,31628],{"class":82},[69,44248,32668],{"class":86},[69,44250,32619],{"class":82},[69,44252,32673],{"class":86},[69,44254,44255],{"class":71,"line":482},[69,44256,33143],{"class":75},[69,44258,44259,44261,44263,44265],{"class":71,"line":497},[69,44260,31973],{"class":82},[69,44262,33150],{"class":86},[69,44264,31628],{"class":82},[69,44266,44267],{"class":86}," GoogLeNet, Inception\n",[69,44269,44270,44272,44274,44276],{"class":71,"line":502},[69,44271,31973],{"class":82},[69,44273,31976],{"class":86},[69,44275,31628],{"class":82},[69,44277,31981],{"class":86},[69,44279,44280],{"class":71,"line":509},[69,44281,3644],{"emptyLinePlaceholder":1325},[69,44283,44284],{"class":71,"line":524},[69,44285,3644],{"emptyLinePlaceholder":1325},[69,44287,44288],{"class":71,"line":2888},[69,44289,33178],{"class":75},[69,44291,44292,44294,44296],{"class":71,"line":2893},[69,44293,33183],{"class":82},[69,44295,33186],{"class":109},[69,44297,33189],{"class":86},[69,44299,44300,44302,44304,44306,44308],{"class":71,"line":2899},[69,44301,33194],{"class":86},[69,44303,1019],{"class":82},[69,44305,32691],{"class":86},[69,44307,32699],{"class":1022},[69,44309,32702],{"class":86},[69,44311,44312,44314,44316,44318],{"class":71,"line":2919},[69,44313,33207],{"class":6458},[69,44315,1019],{"class":82},[69,44317,32712],{"class":90},[69,44319,32702],{"class":86},[69,44321,44322,44324,44326,44328,44330,44332,44334],{"class":71,"line":2924},[69,44323,33218],{"class":6458},[69,44325,1019],{"class":82},[69,44327,32729],{"class":86},[69,44329,32732],{"class":6458},[69,44331,1019],{"class":82},[69,44333,36685],{"class":90},[69,44335,32740],{"class":86},[69,44337,44338,44340,44342,44344],{"class":71,"line":2938},[69,44339,33235],{"class":6458},[69,44341,1019],{"class":82},[69,44343,32712],{"class":90},[69,44345,1404],{"class":86},[69,44347,44348,44350,44352,44354,44356,44358,44360,44362,44364,44366,44368,44370,44372,44374,44376],{"class":71,"line":2943},[69,44349,33246],{"class":86},[69,44351,1019],{"class":82},[69,44353,33251],{"class":86},[69,44355,33254],{"class":90},[69,44357,1398],{"class":86},[69,44359,33259],{"class":90},[69,44361,1843],{"class":82},[69,44363,8600],{"class":90},[69,44365,33266],{"class":86},[69,44367,33254],{"class":90},[69,44369,1398],{"class":86},[69,44371,33273],{"class":90},[69,44373,1843],{"class":82},[69,44375,8600],{"class":90},[69,44377,33280],{"class":86},[69,44379,44380,44382,44384,44386,44388,44390],{"class":71,"line":2972},[69,44381,33285],{"class":86},[69,44383,1019],{"class":82},[69,44385,33290],{"class":86},[69,44387,32773],{"class":6458},[69,44389,1019],{"class":82},[69,44391,32778],{"class":86},[69,44393,44394,44396,44398,44400],{"class":71,"line":2977},[69,44395,33301],{"class":6458},[69,44397,1019],{"class":82},[69,44399,1589],{"class":90},[69,44401,32702],{"class":86},[69,44403,44404,44406,44408,44410],{"class":71,"line":2994},[69,44405,33313],{"class":6458},[69,44407,1019],{"class":82},[69,44409,32712],{"class":90},[69,44411,32702],{"class":86},[69,44413,44414],{"class":71,"line":2999},[69,44415,33324],{"class":75},[69,44417,44418,44420,44422,44424],{"class":71,"line":3004},[69,44419,33329],{"class":6458},[69,44421,1019],{"class":82},[69,44423,1784],{"class":90},[69,44425,1404],{"class":86},[69,44427,44428,44430,44432,44434,44436,44438],{"class":71,"line":3009},[69,44429,33340],{"class":86},[69,44431,1019],{"class":82},[69,44433,32770],{"class":86},[69,44435,32773],{"class":6458},[69,44437,1019],{"class":82},[69,44439,33351],{"class":86},[69,44441,44442,44444,44446,44448],{"class":71,"line":3023},[69,44443,33356],{"class":6458},[69,44445,1019],{"class":82},[69,44447,1589],{"class":90},[69,44449,32702],{"class":86},[69,44451,44452,44454,44456,44458],{"class":71,"line":3028},[69,44453,33367],{"class":6458},[69,44455,1019],{"class":82},[69,44457,32712],{"class":90},[69,44459,32702],{"class":86},[69,44461,44462,44464,44466,44468],{"class":71,"line":3821},[69,44463,33378],{"class":6458},[69,44465,1019],{"class":82},[69,44467,1784],{"class":90},[69,44469,1404],{"class":86},[69,44471,44472,44474],{"class":71,"line":3835},[69,44473,5334],{"class":82},[69,44475,33391],{"class":86},[69,44477,44478],{"class":71,"line":3843},[69,44479,3644],{"emptyLinePlaceholder":1325},[69,44481,44482],{"class":71,"line":3848},[69,44483,33400],{"class":75},[69,44485,44486],{"class":71,"line":3854},[69,44487,33405],{"class":75},[69,44489,44490],{"class":71,"line":3860},[69,44491,3644],{"emptyLinePlaceholder":1325},[69,44493,44494],{"class":71,"line":3865},[69,44495,33414],{"class":75},[69,44497,44498,44500,44502],{"class":71,"line":9190},[69,44499,33183],{"class":82},[69,44501,33421],{"class":109},[69,44503,33424],{"class":86},[69,44505,44506,44508,44510,44512,44514,44516,44518,44520,44522],{"class":71,"line":9214},[69,44507,32473],{"class":86},[69,44509,1019],{"class":82},[69,44511,31687],{"class":86},[69,44513,32480],{"class":1022},[69,44515,2949],{"class":82},[69,44517,32485],{"class":86},[69,44519,2946],{"class":82},[69,44521,33443],{"class":1022},[69,44523,1404],{"class":86},[69,44525,44526],{"class":71,"line":9219},[69,44527,3644],{"emptyLinePlaceholder":1325},[69,44529,44530],{"class":71,"line":9225},[69,44531,3644],{"emptyLinePlaceholder":1325},[69,44533,44534],{"class":71,"line":9252},[69,44535,33458],{"class":75},[69,44537,44538],{"class":71,"line":9257},[69,44539,33463],{"class":75},[69,44541,44542],{"class":71,"line":9263},[69,44543,33468],{"class":75},[69,44545,44546,44548,44550,44552,44554,44556,44558],{"class":71,"line":9275},[69,44547,33473],{"class":86},[69,44549,1019],{"class":82},[69,44551,33478],{"class":86},[69,44553,33481],{"class":6458},[69,44555,1019],{"class":82},[69,44557,33486],{"class":90},[69,44559,1404],{"class":86},[69,44561,44562],{"class":71,"line":9287},[69,44563,3644],{"emptyLinePlaceholder":1325},[69,44565,44566],{"class":71,"line":9299},[69,44567,33497],{"class":75},[69,44569,44570,44572,44574],{"class":71,"line":10958},[69,44571,33502],{"class":86},[69,44573,1019],{"class":82},[69,44575,33507],{"class":86},[69,44577,44578],{"class":71,"line":10983},[69,44579,3644],{"emptyLinePlaceholder":1325},[69,44581,44582],{"class":71,"line":11006},[69,44583,33516],{"class":75},[69,44585,44586,44588,44590],{"class":71,"line":11030},[69,44587,32525],{"class":86},[69,44589,1019],{"class":82},[69,44591,33525],{"class":86},[69,44593,44594],{"class":71,"line":11035},[69,44595,33530],{"class":75},[69,44597,44598],{"class":71,"line":11040},[69,44599,33535],{"class":75},[69,44601,44602],{"class":71,"line":11045},[69,44603,33540],{"class":75},[69,44605,44606,44608,44610],{"class":71,"line":11054},[69,44607,33545],{"class":86},[69,44609,1019],{"class":82},[69,44611,33550],{"class":86},[69,44613,44614],{"class":71,"line":11059},[69,44615,3644],{"emptyLinePlaceholder":1325},[69,44617,44618],{"class":71,"line":11065},[69,44619,3644],{"emptyLinePlaceholder":1325},[69,44621,44622],{"class":71,"line":11086},[69,44623,33563],{"class":75},[69,44625,44626],{"class":71,"line":11092},[69,44627,33568],{"class":75},[69,44629,44630,44632,44634],{"class":71,"line":11106},[69,44631,33573],{"class":86},[69,44633,1019],{"class":82},[69,44635,33578],{"class":90},[69,44637,44638],{"class":71,"line":11112},[69,44639,33583],{"class":75},[69,44641,44642,44644,44646],{"class":71,"line":11139},[69,44643,33588],{"class":86},[69,44645,1019],{"class":82},[69,44647,33593],{"class":86},[69,44649,44650],{"class":71,"line":11148},[69,44651,33598],{"class":75},[69,44653,44654,44656,44658],{"class":71,"line":11154},[69,44655,33603],{"class":86},[69,44657,1019],{"class":82},[69,44659,33593],{"class":86},[69,44661,44662],{"class":71,"line":11162},[69,44663,33612],{"class":75},[69,44665,44666,44668,44670],{"class":71,"line":11167},[69,44667,33617],{"class":86},[69,44669,1019],{"class":82},[69,44671,33593],{"class":86},[69,44673,44674],{"class":71,"line":17843},[69,44675,33626],{"class":75},[69,44677,44678,44680,44682],{"class":71,"line":17849},[69,44679,33631],{"class":86},[69,44681,1019],{"class":82},[69,44683,33593],{"class":86},[69,44685,44686],{"class":71,"line":17872},[69,44687,3644],{"emptyLinePlaceholder":1325},[69,44689,44690],{"class":71,"line":17878},[69,44691,33644],{"class":75},[69,44693,44694,44696,44698],{"class":71,"line":17901},[69,44695,33649],{"class":86},[69,44697,1019],{"class":82},[69,44699,33654],{"class":86},[69,44701,44702],{"class":71,"line":17915},[69,44703,3644],{"emptyLinePlaceholder":1325},[69,44705,44706],{"class":71,"line":17935},[69,44707,3644],{"emptyLinePlaceholder":1325},[69,44709,44710],{"class":71,"line":17941},[69,44711,33667],{"class":75},[69,44713,44714,44716,44718,44720,44722],{"class":71,"line":17952},[69,44715,4445],{"class":82},[69,44717,33674],{"class":86},[69,44719,27280],{"class":82},[69,44721,33679],{"class":90},[69,44723,33682],{"class":86},[69,44725,44726,44728,44730,44732,44734,44736,44738,44740,44742,44744,44746],{"class":71,"line":17975},[69,44727,33687],{"class":90},[69,44729,1398],{"class":86},[69,44731,33692],{"class":1022},[69,44733,33695],{"class":90},[69,44735,1972],{"class":1022},[69,44737,33695],{"class":90},[69,44739,1642],{"class":1022},[69,44741,33704],{"class":86},[69,44743,1920],{"class":82},[69,44745,1609],{"class":90},[69,44747,31733],{"class":86},[69,44749,44750,44752,44754,44756,44758,44760],{"class":71,"line":17997},[69,44751,33687],{"class":90},[69,44753,1398],{"class":86},[69,44755,33719],{"class":1022},[69,44757,1843],{"class":82},[69,44759,390],{"class":90},[69,44761,1404],{"class":86},[69,44763,44764],{"class":71,"line":18002},[69,44765,3644],{"emptyLinePlaceholder":1325},[69,44767,44768],{"class":71,"line":18008},[69,44769,33734],{"class":75},[69,44771,44772],{"class":71,"line":18022},[69,44773,33739],{"class":75},[69,44775,44776,44778,44780],{"class":71,"line":18035},[69,44777,33744],{"class":86},[69,44779,1019],{"class":82},[69,44781,33578],{"class":90},[69,44783,44784],{"class":71,"line":18040},[69,44785,33753],{"class":75},[69,44787,44788,44790,44792],{"class":71,"line":18054},[69,44789,33758],{"class":86},[69,44791,1019],{"class":82},[69,44793,4329],{"class":90},[69,44795,44796],{"class":71,"line":18059},[69,44797,33767],{"class":75},[69,44799,44800,44802,44804],{"class":71,"line":18065},[69,44801,33772],{"class":86},[69,44803,1019],{"class":82},[69,44805,33578],{"class":90},[69,44807,44808],{"class":71,"line":18070},[69,44809,33781],{"class":75},[69,44811,44812,44814,44816],{"class":71,"line":18084},[69,44813,33786],{"class":86},[69,44815,1019],{"class":82},[69,44817,4329],{"class":90},[69,44819,44820],{"class":71,"line":18089},[69,44821,33795],{"class":75},[69,44823,44824,44826,44828],{"class":71,"line":18094},[69,44825,33800],{"class":86},[69,44827,1019],{"class":82},[69,44829,4329],{"class":90},[69,44831,44832],{"class":71,"line":18108},[69,44833,33809],{"class":75},[69,44835,44836,44838,44840],{"class":71,"line":18120},[69,44837,33814],{"class":86},[69,44839,1019],{"class":82},[69,44841,4329],{"class":90},[69,44843,44844],{"class":71,"line":18125},[69,44845,33823],{"class":75},[69,44847,44848,44850,44852,44854,44856],{"class":71,"line":18138},[69,44849,4647],{"class":82},[69,44851,32837],{"class":86},[69,44853,27280],{"class":82},[69,44855,32842],{"class":90},[69,44857,33836],{"class":86},[69,44859,44860],{"class":71,"line":18143},[69,44861,33841],{"class":75},[69,44863,44864,44866,44868],{"class":71,"line":18148},[69,44865,33846],{"class":86},[69,44867,1019],{"class":82},[69,44869,33851],{"class":86},[69,44871,44872],{"class":71,"line":18153},[69,44873,33856],{"class":75},[69,44875,44876,44878,44880],{"class":71,"line":18166},[69,44877,33861],{"class":86},[69,44879,1019],{"class":82},[69,44881,33866],{"class":86},[69,44883,44884],{"class":71,"line":18171},[69,44885,33872],{"class":75},[69,44887,44888],{"class":71,"line":33869},[69,44889,33878],{"class":86},[69,44891,44892],{"class":71,"line":33875},[69,44893,33884],{"class":75},[69,44895,44896],{"class":71,"line":33881},[69,44897,33890],{"class":75},[69,44899,44900,44902,44904],{"class":71,"line":33887},[69,44901,33896],{"class":86},[69,44903,1019],{"class":82},[69,44905,33901],{"class":86},[69,44907,44908],{"class":71,"line":33893},[69,44909,33907],{"class":75},[69,44911,44912,44914,44916,44918,44920,44922,44924],{"class":71,"line":33904},[69,44913,33913],{"class":86},[69,44915,1019],{"class":82},[69,44917,33918],{"class":86},[69,44919,33921],{"class":6458},[69,44921,1019],{"class":82},[69,44923,1609],{"class":90},[69,44925,1404],{"class":86},[69,44927,44928],{"class":71,"line":33910},[69,44929,33933],{"class":75},[69,44931,44932,44934,44936],{"class":71,"line":33930},[69,44933,33939],{"class":86},[69,44935,1019],{"class":82},[69,44937,33944],{"class":86},[69,44939,44940],{"class":71,"line":33936},[69,44941,33950],{"class":75},[69,44943,44944],{"class":71,"line":33947},[69,44945,33956],{"class":86},[69,44947,44948],{"class":71,"line":33953},[69,44949,33962],{"class":75},[69,44951,44952],{"class":71,"line":33959},[69,44953,33968],{"class":86},[69,44955,44956],{"class":71,"line":33965},[69,44957,33974],{"class":75},[69,44959,44960],{"class":71,"line":33971},[69,44961,33980],{"class":86},[69,44963,44964],{"class":71,"line":33977},[69,44965,33986],{"class":75},[69,44967,44968,44970,44972,44974,44976,44978,44980],{"class":71,"line":33983},[69,44969,33992],{"class":86},[69,44971,10719],{"class":82},[69,44973,33997],{"class":86},[69,44975,1843],{"class":82},[69,44977,34002],{"class":86},[69,44979,1583],{"class":90},[69,44981,1404],{"class":86},[69,44983,44984],{"class":71,"line":33989},[69,44985,34012],{"class":75},[69,44987,44988,44990,44992,44994,44996],{"class":71,"line":34009},[69,44989,34018],{"class":86},[69,44991,10719],{"class":82},[69,44993,34023],{"class":86},[69,44995,4193],{"class":82},[69,44997,34028],{"class":86},[69,44999,45000],{"class":71,"line":34015},[69,45001,34034],{"class":75},[69,45003,45004,45006,45008,45010,45012],{"class":71,"line":34031},[69,45005,34040],{"class":86},[69,45007,10719],{"class":82},[69,45009,34002],{"class":86},[69,45011,1583],{"class":90},[69,45013,1404],{"class":86},[69,45015,45016],{"class":71,"line":34037},[69,45017,34054],{"class":75},[69,45019,45020,45022,45024,45026,45028],{"class":71,"line":34051},[69,45021,4647],{"class":82},[69,45023,34062],{"class":86},[69,45025,27280],{"class":82},[69,45027,32842],{"class":90},[69,45029,34069],{"class":86},[69,45031,45032],{"class":71,"line":34057},[69,45033,34075],{"class":75},[69,45035,45036,45038,45040],{"class":71,"line":34072},[69,45037,33846],{"class":86},[69,45039,1019],{"class":82},[69,45041,33851],{"class":86},[69,45043,45044],{"class":71,"line":34078},[69,45045,34090],{"class":75},[69,45047,45048,45050,45052],{"class":71,"line":34087},[69,45049,33861],{"class":86},[69,45051,1019],{"class":82},[69,45053,33866],{"class":86},[69,45055,45056],{"class":71,"line":34093},[69,45057,34105],{"class":75},[69,45059,45060],{"class":71,"line":34102},[69,45061,34111],{"class":86},[69,45063,45064],{"class":71,"line":34108},[69,45065,37592],{"class":75},[69,45067,45068,45070],{"class":71,"line":34114},[69,45069,34117],{"class":82},[69,45071,34120],{"class":86},[69,45073,45074],{"class":71,"line":34123},[69,45075,34126],{"class":75},[69,45077,45078,45080,45082],{"class":71,"line":34129},[69,45079,37607],{"class":86},[69,45081,1019],{"class":82},[69,45083,33901],{"class":86},[69,45085,45086],{"class":71,"line":34140},[69,45087,34143],{"class":75},[69,45089,45090,45092,45094,45096,45098,45100,45102],{"class":71,"line":34146},[69,45091,37620],{"class":86},[69,45093,1019],{"class":82},[69,45095,33918],{"class":86},[69,45097,33921],{"class":6458},[69,45099,1019],{"class":82},[69,45101,1609],{"class":90},[69,45103,1404],{"class":86},[69,45105,45106],{"class":71,"line":34165},[69,45107,34168],{"class":75},[69,45109,45110,45112,45114],{"class":71,"line":34171},[69,45111,37641],{"class":86},[69,45113,1019],{"class":82},[69,45115,33944],{"class":86},[69,45117,45118],{"class":71,"line":34182},[69,45119,34185],{"class":75},[69,45121,45122,45124,45126,45128,45130,45132,45134],{"class":71,"line":34188},[69,45123,37654],{"class":86},[69,45125,10719],{"class":82},[69,45127,37659],{"class":86},[69,45129,1843],{"class":82},[69,45131,34002],{"class":86},[69,45133,1583],{"class":90},[69,45135,1404],{"class":86},[69,45137,45138,45140,45142,45144,45146],{"class":71,"line":34208},[69,45139,37672],{"class":86},[69,45141,10719],{"class":82},[69,45143,34023],{"class":86},[69,45145,4193],{"class":82},[69,45147,34028],{"class":86},[69,45149,45150],{"class":71,"line":34224},[69,45151,37685],{"class":75},[69,45153,45154,45156,45158,45160,45162],{"class":71,"line":34230},[69,45155,37690],{"class":86},[69,45157,10719],{"class":82},[69,45159,34002],{"class":86},[69,45161,1583],{"class":90},[69,45163,1404],{"class":86},[69,45165,45166],{"class":71,"line":34244},[69,45167,34247],{"class":75},[69,45169,45170],{"class":71,"line":34250},[69,45171,34253],{"class":75},[69,45173,45174,45176,45178],{"class":71,"line":34256},[69,45175,34259],{"class":86},[69,45177,1972],{"class":82},[69,45179,34264],{"class":86},[69,45181,45182],{"class":71,"line":34267},[69,45183,34270],{"class":75},[69,45185,45186],{"class":71,"line":34273},[69,45187,34276],{"class":75},[69,45189,45190,45192,45194],{"class":71,"line":34279},[69,45191,34282],{"class":86},[69,45193,1972],{"class":82},[69,45195,34264],{"class":86},[69,45197,45198],{"class":71,"line":34289},[69,45199,34292],{"class":75},[69,45201,45202,45204,45206],{"class":71,"line":34295},[69,45203,34298],{"class":86},[69,45205,1972],{"class":82},[69,45207,34303],{"class":86},[69,45209,45210],{"class":71,"line":34306},[69,45211,34309],{"class":75},[69,45213,45214,45216,45218],{"class":71,"line":34312},[69,45215,34315],{"class":86},[69,45217,1972],{"class":82},[69,45219,34303],{"class":86},[69,45221,45222],{"class":71,"line":34322},[69,45223,3644],{"emptyLinePlaceholder":1325},[69,45225,45226],{"class":71,"line":34327},[69,45227,34330],{"class":75},[69,45229,45230,45232,45234,45236,45238,45240,45242,45244,45246,45248,45250,45252,45254,45256,45258,45260,45262,45264,45266,45268],{"class":71,"line":34333},[69,45231,33687],{"class":90},[69,45233,1398],{"class":86},[69,45235,4836],{"class":1022},[69,45237,33695],{"class":90},[69,45239,34344],{"class":1022},[69,45241,2283],{"class":90},[69,45243,34349],{"class":82},[69,45245,2332],{"class":90},[69,45247,34354],{"class":1022},[69,45249,2283],{"class":90},[69,45251,34349],{"class":82},[69,45253,2332],{"class":90},[69,45255,4836],{"class":1022},[69,45257,34365],{"class":86},[69,45259,1920],{"class":82},[69,45261,1609],{"class":90},[69,45263,34372],{"class":86},[69,45265,1920],{"class":82},[69,45267,1609],{"class":90},[69,45269,34379],{"class":86},[69,45271,45272,45274,45276,45278,45280,45282,45284,45286,45288,45290,45292,45294,45296,45298,45300,45302,45304,45306,45308,45310],{"class":71,"line":34382},[69,45273,33687],{"class":90},[69,45275,1398],{"class":86},[69,45277,4836],{"class":1022},[69,45279,33695],{"class":90},[69,45281,34393],{"class":1022},[69,45283,2283],{"class":90},[69,45285,34349],{"class":82},[69,45287,2332],{"class":90},[69,45289,34402],{"class":1022},[69,45291,2283],{"class":90},[69,45293,34349],{"class":82},[69,45295,2332],{"class":90},[69,45297,4836],{"class":1022},[69,45299,34413],{"class":86},[69,45301,1920],{"class":82},[69,45303,1609],{"class":90},[69,45305,34420],{"class":86},[69,45307,1920],{"class":82},[69,45309,1609],{"class":90},[69,45311,34379],{"class":86},[69,45313,45314],{"class":71,"line":34429},[69,45315,3644],{"emptyLinePlaceholder":1325},[69,45317,45318],{"class":71,"line":34434},[69,45319,34437],{"class":75},[69,45321,45322,45324,45326,45328,45330,45332,45334],{"class":71,"line":34440},[69,45323,3741],{"class":82},[69,45325,34445],{"class":86},[69,45327,1920],{"class":82},[69,45329,1609],{"class":90},[69,45331,2326],{"class":86},[69,45333,2346],{"class":82},[69,45335,34456],{"class":86},[69,45337,45338],{"class":71,"line":34459},[69,45339,34462],{"class":75},[69,45341,45342,45344,45346,45348,45350,45352,45354],{"class":71,"line":34465},[69,45343,34468],{"class":86},[69,45345,1436],{"class":90},[69,45347,1019],{"class":82},[69,45349,34475],{"class":86},[69,45351,1920],{"class":82},[69,45353,1609],{"class":90},[69,45355,34482],{"class":86},[69,45357,45358],{"class":71,"line":34485},[69,45359,34488],{"class":75},[69,45361,45362],{"class":71,"line":34491},[69,45363,34494],{"class":75},[69,45365,45366,45368,45370],{"class":71,"line":34497},[69,45367,34500],{"class":86},[69,45369,1019],{"class":82},[69,45371,33550],{"class":86},[69,45373,45374],{"class":71,"line":34507},[69,45375,3644],{"emptyLinePlaceholder":1325},[69,45377,45378],{"class":71,"line":34512},[69,45379,34515],{"class":75},[69,45381,45382,45384,45386,45388,45390],{"class":71,"line":34518},[69,45383,34521],{"class":86},[69,45385,1019],{"class":82},[69,45387,34526],{"class":86},[69,45389,1920],{"class":82},[69,45391,34531],{"class":86},[69,45393,45394,45396,45398,45400,45402,45404,45406,45408,45410,45412,45414,45416,45418,45420,45422,45424,45426,45428],{"class":71,"line":34534},[69,45395,33687],{"class":90},[69,45397,1398],{"class":86},[69,45399,34541],{"class":1022},[69,45401,2283],{"class":90},[69,45403,34546],{"class":82},[69,45405,2332],{"class":90},[69,45407,1932],{"class":1022},[69,45409,2283],{"class":90},[69,45411,34546],{"class":82},[69,45413,2332],{"class":90},[69,45415,34559],{"class":1022},[69,45417,34562],{"class":86},[69,45419,34565],{"class":82},[69,45421,2294],{"class":90},[69,45423,34570],{"class":86},[69,45425,127],{"class":82},[69,45427,2294],{"class":90},[69,45429,31733],{"class":86},[69,45431,45432],{"class":71,"line":34579},[69,45433,37969],{"class":75},[69,45435,45436],{"class":71,"line":34585},[69,45437,37974],{"class":75},[69,45439,45440,45442,45444],{"class":71,"line":34591},[69,45441,37979],{"class":86},[69,45443,34603],{"class":1022},[69,45445,1404],{"class":86},[69,45447,45448],{"class":71,"line":34597},[69,45449,34623],{"class":75},[69,45451,45452,45454,45456,45458,45460,45462],{"class":71,"line":34608},[69,45453,34629],{"class":86},[69,45455,1019],{"class":82},[69,45457,34634],{"class":86},[69,45459,34637],{"class":6458},[69,45461,1019],{"class":82},[69,45463,2797],{"class":86},[69,45465,45466,45468,45470,45472],{"class":71,"line":34614},[69,45467,34647],{"class":1022},[69,45469,2246],{"class":86},[69,45471,34652],{"class":90},[69,45473,34655],{"class":86},[69,45475,45476,45478],{"class":71,"line":34620},[69,45477,34661],{"class":1022},[69,45479,34664],{"class":86},[69,45481,45482,45484],{"class":71,"line":34626},[69,45483,34670],{"class":1022},[69,45485,34673],{"class":86},[69,45487,45488,45490],{"class":71,"line":34644},[69,45489,34679],{"class":1022},[69,45491,34682],{"class":86},[69,45493,45494,45496],{"class":71,"line":34658},[69,45495,34688],{"class":1022},[69,45497,34691],{"class":86},[69,45499,45500],{"class":71,"line":34667},[69,45501,34697],{"class":86},[69,45503,45504],{"class":71,"line":34676},[69,45505,34703],{"class":75},[69,45507,45508,45510],{"class":71,"line":34685},[69,45509,5334],{"class":82},[69,45511,34711],{"class":86},[69,45513,45514],{"class":71,"line":34694},[69,45515,3644],{"emptyLinePlaceholder":1325},[69,45517,45518],{"class":71,"line":34700},[69,45519,34722],{"class":75},[69,45521,45522,45524,45526],{"class":71,"line":34706},[69,45523,33183],{"class":82},[69,45525,34730],{"class":109},[69,45527,34733],{"class":86},[69,45529,45530],{"class":71,"line":34714},[69,45531,34739],{"class":75},[69,45533,45534,45536,45538,45540,45542,45544,45546,45548],{"class":71,"line":34719},[69,45535,34745],{"class":86},[69,45537,32929],{"class":6458},[69,45539,1019],{"class":82},[69,45541,1398],{"class":86},[69,45543,1886],{"class":90},[69,45545,1767],{"class":86},[69,45547,1684],{"class":90},[69,45549,31733],{"class":86},[69,45551,45552],{"class":71,"line":34725},[69,45553,34765],{"class":75},[69,45555,45556],{"class":71,"line":34736},[69,45557,34771],{"class":75},[69,45559,45560],{"class":71,"line":34742},[69,45561,34777],{"class":75},[69,45563,45564,45566,45568,45570,45572,45574,45576],{"class":71,"line":34762},[69,45565,32963],{"class":86},[69,45567,1609],{"class":90},[69,45569,1767],{"class":86},[69,45571,1471],{"class":90},[69,45573,1767],{"class":86},[69,45575,1609],{"class":90},[69,45577,1404],{"class":86},[69,45579,45580],{"class":71,"line":34768},[69,45581,34800],{"class":75},[69,45583,45584],{"class":71,"line":34774},[69,45585,34806],{"class":75},[69,45587,45588],{"class":71,"line":34780},[69,45589,34812],{"class":75},[69,45591,45592],{"class":71,"line":34797},[69,45593,34818],{"class":75},[69,45595,45596],{"class":71,"line":34803},[69,45597,34824],{"class":75},[69,45599,45600,45602,45604,45606,45608,45610,45612,45614,45616],{"class":71,"line":34809},[69,45601,34830],{"class":86},[69,45603,34833],{"class":1022},[69,45605,34836],{"class":86},[69,45607,34839],{"class":1022},[69,45609,1767],{"class":86},[69,45611,34844],{"class":6458},[69,45613,1019],{"class":82},[69,45615,34849],{"class":1022},[69,45617,1404],{"class":86},[69,45619,45620,45622,45624,45626,45628,45630,45632,45634,45636],{"class":71,"line":34815},[69,45621,34830],{"class":86},[69,45623,34833],{"class":1022},[69,45625,34861],{"class":86},[69,45627,34864],{"class":1022},[69,45629,1767],{"class":86},[69,45631,34844],{"class":6458},[69,45633,1019],{"class":82},[69,45635,34873],{"class":1022},[69,45637,1404],{"class":86},[69,45639,45640],{"class":71,"line":34821},[69,45641,34881],{"class":75},[69,45643,45644],{"class":71,"line":34827},[69,45645,34887],{"class":86},[69,45647,45648],{"class":71,"line":34854},[69,45649,34893],{"class":75},[69,45651,45652,45654,45656],{"class":71,"line":34878},[69,45653,34899],{"class":86},[69,45655,34902],{"class":1022},[69,45657,1404],{"class":86},[69,45659,45660,45662,45664],{"class":71,"line":34884},[69,45661,34910],{"class":86},[69,45663,34913],{"class":1022},[69,45665,1404],{"class":86},[69,45667,45668],{"class":71,"line":34890},[69,45669,34921],{"class":75},[69,45671,45672,45674,45676,45678,45680,45682,45684],{"class":71,"line":34896},[69,45673,32963],{"class":86},[69,45675,1609],{"class":90},[69,45677,1767],{"class":86},[69,45679,1471],{"class":90},[69,45681,1767],{"class":86},[69,45683,1471],{"class":90},[69,45685,1404],{"class":86},[69,45687,45688,45690,45692,45694,45696,45698,45700,45702,45704],{"class":71,"line":34907},[69,45689,34830],{"class":86},[69,45691,34833],{"class":1022},[69,45693,34948],{"class":86},[69,45695,34839],{"class":1022},[69,45697,1767],{"class":86},[69,45699,34844],{"class":6458},[69,45701,1019],{"class":82},[69,45703,34959],{"class":1022},[69,45705,1404],{"class":86},[69,45707,45708,45710,45712,45714,45716,45718,45720,45722,45724],{"class":71,"line":34918},[69,45709,34830],{"class":86},[69,45711,34833],{"class":1022},[69,45713,34971],{"class":86},[69,45715,34864],{"class":1022},[69,45717,1767],{"class":86},[69,45719,34844],{"class":6458},[69,45721,1019],{"class":82},[69,45723,34982],{"class":1022},[69,45725,1404],{"class":86},[69,45727,45728],{"class":71,"line":34924},[69,45729,34990],{"class":75},[69,45731,45732],{"class":71,"line":34941},[69,45733,34887],{"class":86},[69,45735,45736,45738,45740],{"class":71,"line":34964},[69,45737,34899],{"class":86},[69,45739,34833],{"class":1022},[69,45741,1404],{"class":86},[69,45743,45744,45746,45748],{"class":71,"line":34987},[69,45745,34910],{"class":86},[69,45747,35012],{"class":1022},[69,45749,1404],{"class":86},[69,45751,45752],{"class":71,"line":34993},[69,45753,35020],{"class":86},[69,45755,45756],{"class":71,"line":34998},[69,45757,3644],{"emptyLinePlaceholder":1325},[69,45759,45760],{"class":71,"line":35007},[69,45761,35031],{"class":75},[69,45763,45764,45766,45768,45770,45772],{"class":71,"line":35017},[69,45765,2782],{"class":82},[69,45767,32456],{"class":90},[69,45769,4193],{"class":82},[69,45771,32461],{"class":1022},[69,45773,4983],{"class":86},[69,45775,45776],{"class":71,"line":35023},[69,45777,35050],{"class":75},[69,45779,45780,45783,45785],{"class":71,"line":35028},[69,45781,45782],{"class":86},"    GoogLeNet",[69,45784,1019],{"class":82},[69,45786,45787],{"class":86},"GoogLeNet(Inception)\n",[69,45789,45790,45792,45794],{"class":71,"line":35034},[69,45791,35067],{"class":86},[69,45793,1019],{"class":82},[69,45795,35072],{"class":86},[69,45797,45798,45800,45802,45805,45807,45809,45811],{"class":71,"line":35047},[69,45799,34629],{"class":86},[69,45801,1019],{"class":82},[69,45803,45804],{"class":86},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[69,45806,35085],{"class":6458},[69,45808,1019],{"class":82},[69,45810,2337],{"class":90},[69,45812,1404],{"class":86},[69,45814,45815],{"class":71,"line":35053},[69,45816,35097],{"class":86},[37,45818,45819],{"start":106},[40,45820,41810],{},[59,45822,45824],{"className":31614,"code":45823,"language":31616,"meta":64,"style":64},"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",[66,45825,45826,45832,45842,45852,45856,45866,45877,45881,45885,45889,45897,45913,45923,45939,45949,45963,45967,45977,45987,45997,46003,46007,46011,46019,46023,46039,46047,46051,46055,46063,46071,46075,46079,46083,46087,46093,46097,46107,46115,46123,46127,46131,46135,46143,46147,46163,46167,46171,46175,46187,46191,46203,46207,46211,46223,46227,46237,46241,46245,46257,46261,46269,46273,46277,46285,46289,46297,46301,46305,46309,46313,46317,46333,46341,46345,46349,46397,46403,46407,46417,46425,46433,46437,46441,46445,46449,46457,46461,46477,46481,46489,46497],{"__ignoreMap":64},[69,45827,45828,45830],{"class":71,"line":72},[69,45829,31628],{"class":82},[69,45831,31631],{"class":86},[69,45833,45834,45836,45838,45840],{"class":71,"line":79},[69,45835,31628],{"class":82},[69,45837,32651],{"class":86},[69,45839,32619],{"class":82},[69,45841,32656],{"class":86},[69,45843,45844,45846,45848,45850],{"class":71,"line":106},[69,45845,31973],{"class":82},[69,45847,32634],{"class":86},[69,45849,31628],{"class":82},[69,45851,32639],{"class":86},[69,45853,45854],{"class":71,"line":116},[69,45855,35158],{"class":75},[69,45857,45858,45860,45862,45864],{"class":71,"line":133},[69,45859,31973],{"class":82},[69,45861,32604],{"class":86},[69,45863,31628],{"class":82},[69,45865,32609],{"class":86},[69,45867,45868,45870,45872,45874],{"class":71,"line":139},[69,45869,31973],{"class":82},[69,45871,33150],{"class":86},[69,45873,31628],{"class":82},[69,45875,45876],{"class":86}," GoogLeNet,Inception\n",[69,45878,45879],{"class":71,"line":401},[69,45880,3644],{"emptyLinePlaceholder":1325},[69,45882,45883],{"class":71,"line":470},[69,45884,3644],{"emptyLinePlaceholder":1325},[69,45886,45887],{"class":71,"line":475},[69,45888,35187],{"class":75},[69,45890,45891,45893,45895],{"class":71,"line":482},[69,45892,33183],{"class":82},[69,45894,35194],{"class":109},[69,45896,33189],{"class":86},[69,45898,45899,45901,45903,45905,45907,45909,45911],{"class":71,"line":497},[69,45900,35201],{"class":86},[69,45902,1019],{"class":82},[69,45904,32691],{"class":86},[69,45906,32694],{"class":6458},[69,45908,1019],{"class":82},[69,45910,32699],{"class":1022},[69,45912,32702],{"class":86},[69,45914,45915,45917,45919,45921],{"class":71,"line":502},[69,45916,35218],{"class":6458},[69,45918,1019],{"class":82},[69,45920,35223],{"class":90},[69,45922,32702],{"class":86},[69,45924,45925,45927,45929,45931,45933,45935,45937],{"class":71,"line":509},[69,45926,35230],{"class":6458},[69,45928,1019],{"class":82},[69,45930,32729],{"class":86},[69,45932,32732],{"class":6458},[69,45934,1019],{"class":82},[69,45936,36685],{"class":90},[69,45938,32740],{"class":86},[69,45940,45941,45943,45945,45947],{"class":71,"line":524},[69,45942,35247],{"class":6458},[69,45944,1019],{"class":82},[69,45946,32712],{"class":90},[69,45948,1404],{"class":86},[69,45950,45951,45953,45955,45957,45959,45961],{"class":71,"line":2888},[69,45952,35258],{"class":86},[69,45954,1019],{"class":82},[69,45956,32770],{"class":86},[69,45958,32773],{"class":6458},[69,45960,1019],{"class":82},[69,45962,35269],{"class":86},[69,45964,45965],{"class":71,"line":2893},[69,45966,35274],{"class":75},[69,45968,45969,45971,45973,45975],{"class":71,"line":2899},[69,45970,35279],{"class":6458},[69,45972,1019],{"class":82},[69,45974,1609],{"class":90},[69,45976,32702],{"class":86},[69,45978,45979,45981,45983,45985],{"class":71,"line":2919},[69,45980,35290],{"class":6458},[69,45982,1019],{"class":82},[69,45984,32712],{"class":90},[69,45986,32702],{"class":86},[69,45988,45989,45991,45993,45995],{"class":71,"line":2924},[69,45990,35301],{"class":6458},[69,45992,1019],{"class":82},[69,45994,1583],{"class":90},[69,45996,1404],{"class":86},[69,45998,45999,46001],{"class":71,"line":2938},[69,46000,5334],{"class":82},[69,46002,35314],{"class":86},[69,46004,46005],{"class":71,"line":2943},[69,46006,3644],{"emptyLinePlaceholder":1325},[69,46008,46009],{"class":71,"line":2972},[69,46010,35323],{"class":75},[69,46012,46013,46015,46017],{"class":71,"line":2977},[69,46014,33183],{"class":82},[69,46016,35330],{"class":109},[69,46018,35333],{"class":86},[69,46020,46021],{"class":71,"line":2994},[69,46022,35338],{"class":75},[69,46024,46025,46027,46029,46031,46033,46035,46037],{"class":71,"line":2999},[69,46026,32473],{"class":86},[69,46028,1019],{"class":82},[69,46030,32480],{"class":1022},[69,46032,2949],{"class":82},[69,46034,32485],{"class":86},[69,46036,2946],{"class":82},[69,46038,35355],{"class":1022},[69,46040,46041,46043,46045],{"class":71,"line":3004},[69,46042,32525],{"class":86},[69,46044,1019],{"class":82},[69,46046,33525],{"class":86},[69,46048,46049],{"class":71,"line":3009},[69,46050,3644],{"emptyLinePlaceholder":1325},[69,46052,46053],{"class":71,"line":3023},[69,46054,35372],{"class":75},[69,46056,46057,46059,46061],{"class":71,"line":3028},[69,46058,35377],{"class":86},[69,46060,1019],{"class":82},[69,46062,33578],{"class":90},[69,46064,46065,46067,46069],{"class":71,"line":3821},[69,46066,35386],{"class":86},[69,46068,1019],{"class":82},[69,46070,4329],{"class":90},[69,46072,46073],{"class":71,"line":3835},[69,46074,3644],{"emptyLinePlaceholder":1325},[69,46076,46077],{"class":71,"line":3843},[69,46078,35399],{"class":75},[69,46080,46081],{"class":71,"line":3848},[69,46082,35404],{"class":75},[69,46084,46085],{"class":71,"line":3854},[69,46086,35409],{"class":75},[69,46088,46089,46091],{"class":71,"line":3860},[69,46090,35414],{"class":82},[69,46092,34120],{"class":86},[69,46094,46095],{"class":71,"line":3865},[69,46096,35421],{"class":75},[69,46098,46099,46101,46103,46105],{"class":71,"line":9190},[69,46100,4647],{"class":82},[69,46102,35428],{"class":86},[69,46104,27280],{"class":82},[69,46106,35433],{"class":86},[69,46108,46109,46111,46113],{"class":71,"line":9214},[69,46110,35438],{"class":86},[69,46112,1019],{"class":82},[69,46114,35443],{"class":86},[69,46116,46117,46119,46121],{"class":71,"line":9219},[69,46118,35448],{"class":86},[69,46120,1019],{"class":82},[69,46122,35453],{"class":86},[69,46124,46125],{"class":71,"line":9225},[69,46126,35458],{"class":75},[69,46128,46129],{"class":71,"line":9252},[69,46130,34111],{"class":86},[69,46132,46133],{"class":71,"line":9257},[69,46134,35467],{"class":75},[69,46136,46137,46139,46141],{"class":71,"line":9263},[69,46138,33896],{"class":86},[69,46140,1019],{"class":82},[69,46142,35476],{"class":86},[69,46144,46145],{"class":71,"line":9275},[69,46146,35481],{"class":75},[69,46148,46149,46151,46153,46155,46157,46159,46161],{"class":71,"line":9287},[69,46150,33913],{"class":86},[69,46152,1019],{"class":82},[69,46154,33918],{"class":86},[69,46156,33921],{"class":6458},[69,46158,1019],{"class":82},[69,46160,1609],{"class":90},[69,46162,1404],{"class":86},[69,46164,46165],{"class":71,"line":9299},[69,46166,35502],{"class":75},[69,46168,46169],{"class":71,"line":10958},[69,46170,35507],{"class":75},[69,46172,46173],{"class":71,"line":10983},[69,46174,35512],{"class":75},[69,46176,46177,46179,46181,46183,46185],{"class":71,"line":11006},[69,46178,35517],{"class":86},[69,46180,10719],{"class":82},[69,46182,34023],{"class":86},[69,46184,4193],{"class":82},[69,46186,35526],{"class":86},[69,46188,46189],{"class":71,"line":11030},[69,46190,35531],{"class":75},[69,46192,46193,46195,46197,46199,46201],{"class":71,"line":11035},[69,46194,35536],{"class":86},[69,46196,10719],{"class":82},[69,46198,35541],{"class":86},[69,46200,1583],{"class":90},[69,46202,1404],{"class":86},[69,46204,46205],{"class":71,"line":11040},[69,46206,3644],{"emptyLinePlaceholder":1325},[69,46208,46209],{"class":71,"line":11045},[69,46210,35554],{"class":75},[69,46212,46213,46215,46217,46219,46221],{"class":71,"line":11054},[69,46214,35559],{"class":86},[69,46216,1019],{"class":82},[69,46218,35564],{"class":86},[69,46220,1972],{"class":82},[69,46222,35569],{"class":86},[69,46224,46225],{"class":71,"line":11059},[69,46226,35574],{"class":75},[69,46228,46229,46231,46233,46235],{"class":71,"line":11065},[69,46230,33687],{"class":90},[69,46232,1398],{"class":86},[69,46234,35583],{"class":1022},[69,46236,35586],{"class":86},[69,46238,46239],{"class":71,"line":11086},[69,46240,3644],{"emptyLinePlaceholder":1325},[69,46242,46243],{"class":71,"line":11092},[69,46244,35595],{"class":75},[69,46246,46247,46249,46251,46253,46255],{"class":71,"line":11106},[69,46248,2782],{"class":82},[69,46250,32456],{"class":90},[69,46252,4193],{"class":82},[69,46254,32461],{"class":1022},[69,46256,4983],{"class":86},[69,46258,46259],{"class":71,"line":11112},[69,46260,35612],{"class":75},[69,46262,46263,46265,46267],{"class":71,"line":11139},[69,46264,32525],{"class":86},[69,46266,1019],{"class":82},[69,46268,45787],{"class":86},[69,46270,46271],{"class":71,"line":11148},[69,46272,35625],{"class":75},[69,46274,46275],{"class":71,"line":11154},[69,46276,35630],{"class":75},[69,46278,46279,46281,46283],{"class":71,"line":11162},[69,46280,35635],{"class":86},[69,46282,35638],{"class":1022},[69,46284,31733],{"class":86},[69,46286,46287],{"class":71,"line":11167},[69,46288,35645],{"class":75},[69,46290,46291,46293,46295],{"class":71,"line":17843},[69,46292,35258],{"class":86},[69,46294,1019],{"class":82},[69,46296,35654],{"class":86},[69,46298,46299],{"class":71,"line":17849},[69,46300,35659],{"class":75},[69,46302,46303],{"class":71,"line":17872},[69,46304,35664],{"class":86},[69,46306,46307],{"class":71,"line":17878},[69,46308,3644],{"emptyLinePlaceholder":1325},[69,46310,46311],{"class":71,"line":17901},[69,46312,35673],{"class":75},[69,46314,46315],{"class":71,"line":17915},[69,46316,35678],{"class":75},[69,46318,46319,46321,46323,46325,46327,46329,46331],{"class":71,"line":17935},[69,46320,32473],{"class":86},[69,46322,1019],{"class":82},[69,46324,32480],{"class":1022},[69,46326,2949],{"class":82},[69,46328,32485],{"class":86},[69,46330,2946],{"class":82},[69,46332,35355],{"class":1022},[69,46334,46335,46337,46339],{"class":71,"line":17941},[69,46336,32525],{"class":86},[69,46338,1019],{"class":82},[69,46340,33525],{"class":86},[69,46342,46343],{"class":71,"line":17952},[69,46344,35707],{"class":75},[69,46346,46347],{"class":71,"line":17975},[69,46348,35712],{"class":75},[69,46350,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391,46393,46395],{"class":71,"line":17997},[69,46352,35717],{"class":86},[69,46354,1019],{"class":82},[69,46356,2277],{"class":86},[69,46358,35724],{"class":1022},[69,46360,1767],{"class":86},[69,46362,35729],{"class":1022},[69,46364,1767],{"class":86},[69,46366,35734],{"class":1022},[69,46368,1767],{"class":86},[69,46370,35739],{"class":1022},[69,46372,1767],{"class":86},[69,46374,35744],{"class":1022},[69,46376,1767],{"class":86},[69,46378,35749],{"class":1022},[69,46380,1767],{"class":86},[69,46382,35754],{"class":1022},[69,46384,1767],{"class":86},[69,46386,35759],{"class":1022},[69,46388,1767],{"class":86},[69,46390,35764],{"class":1022},[69,46392,1767],{"class":86},[69,46394,35769],{"class":1022},[69,46396,34482],{"class":86},[69,46398,46399,46401],{"class":71,"line":18002},[69,46400,35414],{"class":82},[69,46402,34120],{"class":86},[69,46404,46405],{"class":71,"line":18008},[69,46406,35782],{"class":75},[69,46408,46409,46411,46413,46415],{"class":71,"line":18022},[69,46410,4647],{"class":82},[69,46412,35789],{"class":86},[69,46414,27280],{"class":82},[69,46416,35433],{"class":86},[69,46418,46419,46421,46423],{"class":71,"line":18035},[69,46420,33846],{"class":86},[69,46422,1019],{"class":82},[69,46424,33851],{"class":86},[69,46426,46427,46429,46431],{"class":71,"line":18040},[69,46428,33861],{"class":86},[69,46430,1019],{"class":82},[69,46432,33866],{"class":86},[69,46434,46435],{"class":71,"line":18054},[69,46436,3644],{"emptyLinePlaceholder":1325},[69,46438,46439],{"class":71,"line":18059},[69,46440,35818],{"class":75},[69,46442,46443],{"class":71,"line":18065},[69,46444,34111],{"class":86},[69,46446,46447],{"class":71,"line":18070},[69,46448,35827],{"class":75},[69,46450,46451,46453,46455],{"class":71,"line":18084},[69,46452,33896],{"class":86},[69,46454,1019],{"class":82},[69,46456,33901],{"class":86},[69,46458,46459],{"class":71,"line":18089},[69,46460,35840],{"class":75},[69,46462,46463,46465,46467,46469,46471,46473,46475],{"class":71,"line":18094},[69,46464,33913],{"class":86},[69,46466,1019],{"class":82},[69,46468,33918],{"class":86},[69,46470,33921],{"class":6458},[69,46472,1019],{"class":82},[69,46474,1609],{"class":90},[69,46476,1404],{"class":86},[69,46478,46479],{"class":71,"line":18108},[69,46480,35861],{"class":75},[69,46482,46483,46485,46487],{"class":71,"line":18120},[69,46484,35866],{"class":86},[69,46486,1019],{"class":82},[69,46488,35871],{"class":86},[69,46490,46491,46493,46495],{"class":71,"line":18125},[69,46492,35876],{"class":86},[69,46494,1019],{"class":82},[69,46496,35881],{"class":86},[69,46498,46499,46501,46503,46505,46507,46509,46511,46513],{"class":71,"line":18138},[69,46500,35886],{"class":90},[69,46502,1398],{"class":86},[69,46504,35891],{"class":1022},[69,46506,35894],{"class":86},[69,46508,35897],{"class":1022},[69,46510,1767],{"class":86},[69,46512,35902],{"class":1022},[69,46514,35905],{"class":86},[19,46516,46518],{"id":46517},"_24训练自己的数据集","2.4.训练自己的数据集",[29,46520,46521],{},"猫狗分类任务",[29,46523,46524],{},"划分数据集和验证集",[59,46526,46528],{"className":31614,"code":46527,"language":31616,"meta":64,"style":64},"# 创建脚本，用于划分数据集和验证集\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",[66,46529,46530,46535,46542,46547,46558,46565,46569,46579,46593,46602,46606,46611,46621,46641,46645,46650,46660,46671,46684,46688,46693,46702,46712,46723,46727,46732,46742,46746,46751,46756,46761,46766,46771,46775,46785,46812,46825,46837,46864,46869,46874,46888,46893,46905,46920,46935,46943,46947,46952,46958,46970,46983,46988,46993,46998,47048,47054,47058],{"__ignoreMap":64},[69,46531,46532],{"class":71,"line":72},[69,46533,46534],{"class":75},"# 创建脚本，用于划分数据集和验证集\n",[69,46536,46537,46539],{"class":71,"line":79},[69,46538,31628],{"class":82},[69,46540,46541],{"class":86}," os\n",[69,46543,46544],{"class":71,"line":106},[69,46545,46546],{"class":75},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[69,46548,46549,46551,46554,46556],{"class":71,"line":116},[69,46550,31973],{"class":82},[69,46552,46553],{"class":86}," shutil ",[69,46555,31628],{"class":82},[69,46557,33058],{"class":86},[69,46559,46560,46562],{"class":71,"line":133},[69,46561,31628],{"class":82},[69,46563,46564],{"class":86}," random\n",[69,46566,46567],{"class":71,"line":139},[69,46568,3644],{"emptyLinePlaceholder":1325},[69,46570,46571,46573,46576],{"class":71,"line":401},[69,46572,33183],{"class":82},[69,46574,46575],{"class":109}," mkfile",[69,46577,46578],{"class":86},"(file):\n",[69,46580,46581,46583,46585,46588,46591],{"class":71,"line":470},[69,46582,4345],{"class":82},[69,46584,40166],{"class":82},[69,46586,46587],{"class":86}," os.path.exists(",[69,46589,46590],{"class":6458},"file",[69,46592,32022],{"class":86},[69,46594,46595,46598,46600],{"class":71,"line":475},[69,46596,46597],{"class":86},"        os.makedirs(",[69,46599,46590],{"class":6458},[69,46601,1404],{"class":86},[69,46603,46604],{"class":71,"line":482},[69,46605,3644],{"emptyLinePlaceholder":1325},[69,46607,46608],{"class":71,"line":497},[69,46609,46610],{"class":75},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[69,46612,46613,46616,46618],{"class":71,"line":502},[69,46614,46615],{"class":86},"file_path",[69,46617,1019],{"class":82},[69,46619,46620],{"class":1022},"'data_cat_dog'\n",[69,46622,46623,46626,46628,46631,46633,46636,46638],{"class":71,"line":509},[69,46624,46625],{"class":86},"flower_class",[69,46627,1019],{"class":82},[69,46629,46630],{"class":86},"[cla ",[69,46632,4269],{"class":82},[69,46634,46635],{"class":86}," cla ",[69,46637,27280],{"class":82},[69,46639,46640],{"class":86}," os.listdir(file_path)]\n",[69,46642,46643],{"class":71,"line":524},[69,46644,3644],{"emptyLinePlaceholder":1325},[69,46646,46647],{"class":71,"line":2888},[69,46648,46649],{"class":75},"# 创建训练集train文件夹\n",[69,46651,46652,46655,46658],{"class":71,"line":2893},[69,46653,46654],{"class":86},"mkfile(",[69,46656,46657],{"class":1022},"'data\u002Ftrain'",[69,46659,1404],{"class":86},[69,46661,46662,46664,46666,46668],{"class":71,"line":2899},[69,46663,4269],{"class":82},[69,46665,46635],{"class":86},[69,46667,27280],{"class":82},[69,46669,46670],{"class":86}," flower_class:\n",[69,46672,46673,46676,46679,46681],{"class":71,"line":2919},[69,46674,46675],{"class":86},"    mkfile(",[69,46677,46678],{"class":1022},"'data\u002Ftrain\u002F'",[69,46680,1869],{"class":82},[69,46682,46683],{"class":86},"cla)\n",[69,46685,46686],{"class":71,"line":2924},[69,46687,3644],{"emptyLinePlaceholder":1325},[69,46689,46690],{"class":71,"line":2938},[69,46691,46692],{"class":75},"# 创建验证集val文件夹\n",[69,46694,46695,46697,46700],{"class":71,"line":2943},[69,46696,46654],{"class":86},[69,46698,46699],{"class":1022},"'data\u002Ftest'",[69,46701,1404],{"class":86},[69,46703,46704,46706,46708,46710],{"class":71,"line":2972},[69,46705,4269],{"class":82},[69,46707,46635],{"class":86},[69,46709,27280],{"class":82},[69,46711,46670],{"class":86},[69,46713,46714,46716,46719,46721],{"class":71,"line":2977},[69,46715,46675],{"class":86},[69,46717,46718],{"class":1022},"'data\u002Ftest\u002F'",[69,46720,1869],{"class":82},[69,46722,46683],{"class":86},[69,46724,46725],{"class":71,"line":2994},[69,46726,3644],{"emptyLinePlaceholder":1325},[69,46728,46729],{"class":71,"line":2999},[69,46730,46731],{"class":75},"# 划分比例，训练集：测试集=9：1\n",[69,46733,46734,46737,46739],{"class":71,"line":3004},[69,46735,46736],{"class":86},"split_rate",[69,46738,1019],{"class":82},[69,46740,46741],{"class":90},"0.1\n",[69,46743,46744],{"class":71,"line":3009},[69,46745,3644],{"emptyLinePlaceholder":1325},[69,46747,46748],{"class":71,"line":3023},[69,46749,46750],{"class":75},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[69,46752,46753],{"class":71,"line":3028},[69,46754,46755],{"class":75},"# cla_path：当前类别的原始图片路径\n",[69,46757,46758],{"class":71,"line":3821},[69,46759,46760],{"class":75},"# images：当前类别下所有图片的文件名列表\n",[69,46762,46763],{"class":71,"line":3835},[69,46764,46765],{"class":75},"# num：该类别图片总数\n",[69,46767,46768],{"class":71,"line":3843},[69,46769,46770],{"class":75},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[69,46772,46773],{"class":71,"line":3848},[69,46774,3644],{"emptyLinePlaceholder":1325},[69,46776,46777,46779,46781,46783],{"class":71,"line":3854},[69,46778,4269],{"class":82},[69,46780,46635],{"class":86},[69,46782,27280],{"class":82},[69,46784,46670],{"class":86},[69,46786,46787,46790,46792,46795,46797,46800,46803,46805,46807,46809],{"class":71,"line":3860},[69,46788,46789],{"class":86},"    cla_path ",[69,46791,1019],{"class":82},[69,46793,46794],{"class":86}," file_path ",[69,46796,1869],{"class":82},[69,46798,46799],{"class":1022}," '\u002F'",[69,46801,46802],{"class":82}," +",[69,46804,46635],{"class":86},[69,46806,1869],{"class":82},[69,46808,46799],{"class":1022},[69,46810,46811],{"class":75},"  # 某一类别的子目录\n",[69,46813,46814,46817,46819,46822],{"class":71,"line":3865},[69,46815,46816],{"class":86},"    images ",[69,46818,1019],{"class":82},[69,46820,46821],{"class":86}," os.listdir(cla_path)  ",[69,46823,46824],{"class":75},"# iamges 列表存储了该目录下所有图像的名称\n",[69,46826,46827,46830,46832,46834],{"class":71,"line":9190},[69,46828,46829],{"class":86},"    num ",[69,46831,1019],{"class":82},[69,46833,8573],{"class":90},[69,46835,46836],{"class":86},"(images)\n",[69,46838,46839,46842,46844,46847,46849,46851,46853,46856,46858,46861],{"class":71,"line":9214},[69,46840,46841],{"class":86},"    eval_index ",[69,46843,1019],{"class":82},[69,46845,46846],{"class":86}," random.sample(images, ",[69,46848,1881],{"class":6458},[69,46850,1019],{"class":82},[69,46852,1401],{"class":90},[69,46854,46855],{"class":86},"(num ",[69,46857,1843],{"class":82},[69,46859,46860],{"class":86}," split_rate))  ",[69,46862,46863],{"class":75},"# 从images列表中随机抽取 k 个图像名称\n",[69,46865,46866],{"class":71,"line":9219},[69,46867,46868],{"class":75},"    # 遍历该类别下的所有图片\n",[69,46870,46871],{"class":71,"line":9225},[69,46872,46873],{"class":75},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[69,46875,46876,46878,46881,46883,46885],{"class":71,"line":9252},[69,46877,4445],{"class":82},[69,46879,46880],{"class":86}," index, image ",[69,46882,27280],{"class":82},[69,46884,32842],{"class":90},[69,46886,46887],{"class":86},"(images):\n",[69,46889,46890],{"class":71,"line":9257},[69,46891,46892],{"class":75},"        # eval_index 中保存验证集val的图像名称\n",[69,46894,46895,46897,46900,46902],{"class":71,"line":9263},[69,46896,3741],{"class":82},[69,46898,46899],{"class":86}," image ",[69,46901,27280],{"class":82},[69,46903,46904],{"class":86}," eval_index:\n",[69,46906,46907,46910,46912,46915,46917],{"class":71,"line":9275},[69,46908,46909],{"class":86},"            image_path ",[69,46911,1019],{"class":82},[69,46913,46914],{"class":86}," cla_path ",[69,46916,1869],{"class":82},[69,46918,46919],{"class":86}," image\n",[69,46921,46922,46925,46927,46930,46932],{"class":71,"line":9287},[69,46923,46924],{"class":86},"            new_path ",[69,46926,1019],{"class":82},[69,46928,46929],{"class":1022}," 'data\u002Ftest\u002F'",[69,46931,46802],{"class":82},[69,46933,46934],{"class":86}," cla\n",[69,46936,46937,46940],{"class":71,"line":9299},[69,46938,46939],{"class":86},"            copy(image_path, new_path)  ",[69,46941,46942],{"class":75},"# 将选中的图像复制到新路径\n",[69,46944,46945],{"class":71,"line":10958},[69,46946,3644],{"emptyLinePlaceholder":1325},[69,46948,46949],{"class":71,"line":10983},[69,46950,46951],{"class":75},"        # 其余的图像保存在训练集train中\n",[69,46953,46954,46956],{"class":71,"line":11006},[69,46955,3778],{"class":82},[69,46957,4983],{"class":86},[69,46959,46960,46962,46964,46966,46968],{"class":71,"line":11030},[69,46961,46909],{"class":86},[69,46963,1019],{"class":82},[69,46965,46914],{"class":86},[69,46967,1869],{"class":82},[69,46969,46919],{"class":86},[69,46971,46972,46974,46976,46979,46981],{"class":71,"line":11035},[69,46973,46924],{"class":86},[69,46975,1019],{"class":82},[69,46977,46978],{"class":1022}," 'data\u002Ftrain\u002F'",[69,46980,46802],{"class":82},[69,46982,46934],{"class":86},[69,46984,46985],{"class":71,"line":11040},[69,46986,46987],{"class":86},"            copy(image_path, new_path)\n",[69,46989,46990],{"class":71,"line":11045},[69,46991,46992],{"class":75},"            # 打印进度条信息\n",[69,46994,46995],{"class":71,"line":11054},[69,46996,46997],{"class":75},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[69,46999,47000,47002,47004,47006,47009,47011,47013,47016,47018,47020,47022,47025,47028,47030,47032,47035,47038,47040,47042,47045],{"class":71,"line":11059},[69,47001,33687],{"class":90},[69,47003,1398],{"class":86},[69,47005,1642],{"class":1022},[69,47007,47008],{"class":90},"\\r",[69,47010,2277],{"class":1022},[69,47012,33695],{"class":90},[69,47014,47015],{"class":1022},"] processing [",[69,47017,33695],{"class":90},[69,47019,1972],{"class":1022},[69,47021,33695],{"class":90},[69,47023,47024],{"class":1022},"]\"",[69,47026,47027],{"class":86},".format(cla, index ",[69,47029,1869],{"class":82},[69,47031,26355],{"class":90},[69,47033,47034],{"class":86},", num), ",[69,47036,47037],{"class":6458},"end",[69,47039,1019],{"class":82},[69,47041,8894],{"class":1022},[69,47043,47044],{"class":86},")  ",[69,47046,47047],{"class":75},"# processing bar\n",[69,47049,47050,47052],{"class":71,"line":11065},[69,47051,32535],{"class":90},[69,47053,3220],{"class":86},[69,47055,47056],{"class":71,"line":11086},[69,47057,3644],{"emptyLinePlaceholder":1325},[69,47059,47060,47062,47064,47067],{"class":71,"line":11092},[69,47061,31651],{"class":90},[69,47063,1398],{"class":86},[69,47065,47066],{"class":1022},"\"processing done!\"",[69,47068,1404],{"class":86},[29,47070,47071],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23237,47073,47075],{"id":47074},"_242模型代码","2.4.2.模型代码",[29,47077,47078],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[59,47080,47082],{"className":31614,"code":47081,"language":31616,"meta":64,"style":64},"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",[66,47083,47084,47090,47100,47110,47114,47130,47138,47152,47162,47166,47196,47200,47234,47280,47284,47318,47364,47368,47372,47406,47436,47440,47448,47462,47484,47506,47524,47528,47542,47546,47550,47566,47570,47578,47592,47602,47646,47650,47678,47682,47692,47720,47724,47760,47764,47792,47796,47806,47838,47870,47898,47902,47912,47944,47976,48008,48040,48072,48100,48104,48114,48146,48178,48190,48194,48206,48210,48214,48226,48234,48254,48258,48262,48266,48270,48274,48278,48292,48300,48308,48320,48334,48342,48346,48354,48364,48374,48384,48394,48404,48410,48414,48418,48430,48450,48458],{"__ignoreMap":64},[69,47085,47086,47088],{"class":71,"line":72},[69,47087,31628],{"class":82},[69,47089,31631],{"class":86},[69,47091,47092,47094,47096,47098],{"class":71,"line":79},[69,47093,31973],{"class":82},[69,47095,31976],{"class":86},[69,47097,31628],{"class":82},[69,47099,31981],{"class":86},[69,47101,47102,47104,47106,47108],{"class":71,"line":106},[69,47103,31973],{"class":82},[69,47105,31993],{"class":86},[69,47107,31628],{"class":82},[69,47109,31998],{"class":86},[69,47111,47112],{"class":71,"line":116},[69,47113,3644],{"emptyLinePlaceholder":1325},[69,47115,47116,47118,47120,47122,47124,47126,47128],{"class":71,"line":133},[69,47117,15934],{"class":82},[69,47119,42729],{"class":109},[69,47121,1398],{"class":86},[69,47123,32014],{"class":109},[69,47125,1946],{"class":86},[69,47127,32019],{"class":109},[69,47129,32022],{"class":86},[69,47131,47132,47134,47136],{"class":71,"line":139},[69,47133,32037],{"class":82},[69,47135,32040],{"class":90},[69,47137,42748],{"class":86},[69,47139,47140,47142,47144,47146,47148,47150],{"class":71,"line":401},[69,47141,32053],{"class":90},[69,47143,42755],{"class":86},[69,47145,32059],{"class":90},[69,47147,32062],{"class":86},[69,47149,32065],{"class":90},[69,47151,3220],{"class":86},[69,47153,47154,47156,47158,47160],{"class":71,"line":470},[69,47155,32081],{"class":90},[69,47157,36007],{"class":86},[69,47159,1019],{"class":82},[69,47161,36012],{"class":86},[69,47163,47164],{"class":71,"line":475},[69,47165,42778],{"class":75},[69,47167,47168,47170,47172,47174,47176,47178,47180,47182,47184,47186,47188,47190,47192,47194],{"class":71,"line":482},[69,47169,32081],{"class":90},[69,47171,42785],{"class":86},[69,47173,1019],{"class":82},[69,47175,32089],{"class":86},[69,47177,32092],{"class":6458},[69,47179,1019],{"class":82},[69,47181,42796],{"class":86},[69,47183,32101],{"class":6458},[69,47185,1019],{"class":82},[69,47187,42803],{"class":86},[69,47189,32110],{"class":6458},[69,47191,1019],{"class":82},[69,47193,1609],{"class":90},[69,47195,1404],{"class":86},[69,47197,47198],{"class":71,"line":497},[69,47199,42816],{"class":75},[69,47201,47202,47204,47206,47208,47210,47212,47214,47216,47218,47220,47222,47224,47226,47228,47230,47232],{"class":71,"line":502},[69,47203,32081],{"class":90},[69,47205,42823],{"class":86},[69,47207,1019],{"class":82},[69,47209,32089],{"class":86},[69,47211,32092],{"class":6458},[69,47213,1019],{"class":82},[69,47215,42796],{"class":86},[69,47217,32101],{"class":6458},[69,47219,1019],{"class":82},[69,47221,42840],{"class":86},[69,47223,1583],{"class":90},[69,47225,42845],{"class":86},[69,47227,32110],{"class":6458},[69,47229,1019],{"class":82},[69,47231,1609],{"class":90},[69,47233,1404],{"class":86},[69,47235,47236,47238,47240,47242,47244,47246,47248,47250,47252,47254,47256,47258,47260,47262,47264,47266,47268,47270,47272,47274,47276,47278],{"class":71,"line":509},[69,47237,32081],{"class":90},[69,47239,42860],{"class":86},[69,47241,1019],{"class":82},[69,47243,32089],{"class":86},[69,47245,32092],{"class":6458},[69,47247,1019],{"class":82},[69,47249,42840],{"class":86},[69,47251,1583],{"class":90},[69,47253,42845],{"class":86},[69,47255,32101],{"class":6458},[69,47257,1019],{"class":82},[69,47259,42840],{"class":86},[69,47261,1609],{"class":90},[69,47263,42845],{"class":86},[69,47265,32110],{"class":6458},[69,47267,1019],{"class":82},[69,47269,1465],{"class":90},[69,47271,1767],{"class":86},[69,47273,32119],{"class":6458},[69,47275,1019],{"class":82},[69,47277,1609],{"class":90},[69,47279,1404],{"class":86},[69,47281,47282],{"class":71,"line":524},[69,47283,42905],{"class":75},[69,47285,47286,47288,47290,47292,47294,47296,47298,47300,47302,47304,47306,47308,47310,47312,47314,47316],{"class":71,"line":2888},[69,47287,32081],{"class":90},[69,47289,42912],{"class":86},[69,47291,1019],{"class":82},[69,47293,32089],{"class":86},[69,47295,32092],{"class":6458},[69,47297,1019],{"class":82},[69,47299,42796],{"class":86},[69,47301,32101],{"class":6458},[69,47303,1019],{"class":82},[69,47305,42929],{"class":86},[69,47307,1583],{"class":90},[69,47309,42845],{"class":86},[69,47311,32110],{"class":6458},[69,47313,1019],{"class":82},[69,47315,1609],{"class":90},[69,47317,1404],{"class":86},[69,47319,47320,47322,47324,47326,47328,47330,47332,47334,47336,47338,47340,47342,47344,47346,47348,47350,47352,47354,47356,47358,47360,47362],{"class":71,"line":2893},[69,47321,32081],{"class":90},[69,47323,42948],{"class":86},[69,47325,1019],{"class":82},[69,47327,32089],{"class":86},[69,47329,32092],{"class":6458},[69,47331,1019],{"class":82},[69,47333,42929],{"class":86},[69,47335,1583],{"class":90},[69,47337,42845],{"class":86},[69,47339,32101],{"class":6458},[69,47341,1019],{"class":82},[69,47343,42929],{"class":86},[69,47345,1609],{"class":90},[69,47347,42845],{"class":86},[69,47349,32110],{"class":6458},[69,47351,1019],{"class":82},[69,47353,1709],{"class":90},[69,47355,1767],{"class":86},[69,47357,32119],{"class":6458},[69,47359,1019],{"class":82},[69,47361,1471],{"class":90},[69,47363,1404],{"class":86},[69,47365,47366],{"class":71,"line":2899},[69,47367,42993],{"class":75},[69,47369,47370],{"class":71,"line":2919},[69,47371,42998],{"class":75},[69,47373,47374,47376,47378,47380,47382,47384,47386,47388,47390,47392,47394,47396,47398,47400,47402,47404],{"class":71,"line":2924},[69,47375,32081],{"class":90},[69,47377,43005],{"class":86},[69,47379,1019],{"class":82},[69,47381,36065],{"class":86},[69,47383,32110],{"class":6458},[69,47385,1019],{"class":82},[69,47387,1465],{"class":90},[69,47389,1767],{"class":86},[69,47391,32165],{"class":6458},[69,47393,1019],{"class":82},[69,47395,1609],{"class":90},[69,47397,1767],{"class":86},[69,47399,32119],{"class":6458},[69,47401,1019],{"class":82},[69,47403,1609],{"class":90},[69,47405,1404],{"class":86},[69,47407,47408,47410,47412,47414,47416,47418,47420,47422,47424,47426,47428,47430,47432,47434],{"class":71,"line":2938},[69,47409,32081],{"class":90},[69,47411,43040],{"class":86},[69,47413,1019],{"class":82},[69,47415,32089],{"class":86},[69,47417,32092],{"class":6458},[69,47419,1019],{"class":82},[69,47421,42796],{"class":86},[69,47423,32101],{"class":6458},[69,47425,1019],{"class":82},[69,47427,43057],{"class":86},[69,47429,32110],{"class":6458},[69,47431,1019],{"class":82},[69,47433,1609],{"class":90},[69,47435,1404],{"class":86},[69,47437,47438],{"class":71,"line":2943},[69,47439,3644],{"emptyLinePlaceholder":1325},[69,47441,47442,47444,47446],{"class":71,"line":2972},[69,47443,32037],{"class":82},[69,47445,32329],{"class":109},[69,47447,32332],{"class":86},[69,47449,47450,47452,47454,47456,47458,47460],{"class":71,"line":2977},[69,47451,43082],{"class":86},[69,47453,1019],{"class":82},[69,47455,32059],{"class":90},[69,47457,36420],{"class":86},[69,47459,32059],{"class":90},[69,47461,43093],{"class":86},[69,47463,47464,47466,47468,47470,47472,47474,47476,47478,47480,47482],{"class":71,"line":2994},[69,47465,8327],{"class":86},[69,47467,1019],{"class":82},[69,47469,32059],{"class":90},[69,47471,36420],{"class":86},[69,47473,32059],{"class":90},[69,47475,43108],{"class":86},[69,47477,32059],{"class":90},[69,47479,36420],{"class":86},[69,47481,32059],{"class":90},[69,47483,43117],{"class":86},[69,47485,47486,47488,47490,47492,47494,47496,47498,47500,47502,47504],{"class":71,"line":2999},[69,47487,43122],{"class":86},[69,47489,1019],{"class":82},[69,47491,32059],{"class":90},[69,47493,36420],{"class":86},[69,47495,32059],{"class":90},[69,47497,43133],{"class":86},[69,47499,32059],{"class":90},[69,47501,36420],{"class":86},[69,47503,32059],{"class":90},[69,47505,43142],{"class":86},[69,47507,47508,47510,47512,47514,47516,47518,47520,47522],{"class":71,"line":3004},[69,47509,43147],{"class":86},[69,47511,1019],{"class":82},[69,47513,32059],{"class":90},[69,47515,36420],{"class":86},[69,47517,32059],{"class":90},[69,47519,43158],{"class":86},[69,47521,32059],{"class":90},[69,47523,43163],{"class":86},[69,47525,47526],{"class":71,"line":3009},[69,47527,43168],{"class":75},[69,47529,47530,47532,47534,47536,47538,47540],{"class":71,"line":3023},[69,47531,15992],{"class":82},[69,47533,43175],{"class":86},[69,47535,33921],{"class":6458},[69,47537,1019],{"class":82},[69,47539,1609],{"class":90},[69,47541,1404],{"class":86},[69,47543,47544],{"class":71,"line":3028},[69,47545,3644],{"emptyLinePlaceholder":1325},[69,47547,47548],{"class":71,"line":3821},[69,47549,43196],{"class":75},[69,47551,47552,47554,47556,47558,47560,47562,47564],{"class":71,"line":3835},[69,47553,15934],{"class":82},[69,47555,43203],{"class":109},[69,47557,1398],{"class":86},[69,47559,32014],{"class":109},[69,47561,1946],{"class":86},[69,47563,32019],{"class":109},[69,47565,32022],{"class":86},[69,47567,47568],{"class":71,"line":3843},[69,47569,43218],{"class":75},[69,47571,47572,47574,47576],{"class":71,"line":3848},[69,47573,32037],{"class":82},[69,47575,32040],{"class":90},[69,47577,43227],{"class":86},[69,47579,47580,47582,47584,47586,47588,47590],{"class":71,"line":3854},[69,47581,32053],{"class":90},[69,47583,43234],{"class":86},[69,47585,32059],{"class":90},[69,47587,32062],{"class":86},[69,47589,32065],{"class":90},[69,47591,3220],{"class":86},[69,47593,47594,47596,47598,47600],{"class":71,"line":3860},[69,47595,32081],{"class":90},[69,47597,43249],{"class":86},[69,47599,1019],{"class":82},[69,47601,39245],{"class":86},[69,47603,47604,47606,47608,47610,47612,47614,47616,47618,47620,47622,47624,47626,47628,47630,47632,47634,47636,47638,47640,47642,47644],{"class":71,"line":3865},[69,47605,39250],{"class":86},[69,47607,32092],{"class":6458},[69,47609,1019],{"class":82},[69,47611,1465],{"class":90},[69,47613,1767],{"class":86},[69,47615,32101],{"class":6458},[69,47617,1019],{"class":82},[69,47619,1595],{"class":90},[69,47621,1767],{"class":86},[69,47623,32110],{"class":6458},[69,47625,1019],{"class":82},[69,47627,1758],{"class":90},[69,47629,1767],{"class":86},[69,47631,32165],{"class":6458},[69,47633,1019],{"class":82},[69,47635,1471],{"class":90},[69,47637,1767],{"class":86},[69,47639,32119],{"class":6458},[69,47641,1019],{"class":82},[69,47643,1465],{"class":90},[69,47645,39283],{"class":86},[69,47647,47648],{"class":71,"line":9190},[69,47649,39288],{"class":86},[69,47651,47652,47654,47656,47658,47660,47662,47664,47666,47668,47670,47672,47674,47676],{"class":71,"line":9214},[69,47653,39333],{"class":86},[69,47655,32110],{"class":6458},[69,47657,1019],{"class":82},[69,47659,1465],{"class":90},[69,47661,1767],{"class":86},[69,47663,32165],{"class":6458},[69,47665,1019],{"class":82},[69,47667,1471],{"class":90},[69,47669,1767],{"class":86},[69,47671,32119],{"class":6458},[69,47673,1019],{"class":82},[69,47675,1609],{"class":90},[69,47677,1404],{"class":86},[69,47679,47680],{"class":71,"line":9219},[69,47681,39362],{"class":86},[69,47683,47684,47686,47688,47690],{"class":71,"line":9225},[69,47685,32081],{"class":90},[69,47687,43340],{"class":86},[69,47689,1019],{"class":82},[69,47691,39245],{"class":86},[69,47693,47694,47696,47698,47700,47702,47704,47706,47708,47710,47712,47714,47716,47718],{"class":71,"line":9252},[69,47695,39250],{"class":86},[69,47697,32092],{"class":6458},[69,47699,1019],{"class":82},[69,47701,1595],{"class":90},[69,47703,1767],{"class":86},[69,47705,32101],{"class":6458},[69,47707,1019],{"class":82},[69,47709,1595],{"class":90},[69,47711,1767],{"class":86},[69,47713,32110],{"class":6458},[69,47715,1019],{"class":82},[69,47717,1609],{"class":90},[69,47719,39283],{"class":86},[69,47721,47722],{"class":71,"line":9257},[69,47723,39288],{"class":86},[69,47725,47726,47728,47730,47732,47734,47736,47738,47740,47742,47744,47746,47748,47750,47752,47754,47756,47758],{"class":71,"line":9263},[69,47727,39250],{"class":86},[69,47729,32092],{"class":6458},[69,47731,1019],{"class":82},[69,47733,1595],{"class":90},[69,47735,1767],{"class":86},[69,47737,32101],{"class":6458},[69,47739,1019],{"class":82},[69,47741,43395],{"class":90},[69,47743,1767],{"class":86},[69,47745,32110],{"class":6458},[69,47747,1019],{"class":82},[69,47749,1465],{"class":90},[69,47751,1767],{"class":86},[69,47753,32119],{"class":6458},[69,47755,1019],{"class":82},[69,47757,1609],{"class":90},[69,47759,39283],{"class":86},[69,47761,47762],{"class":71,"line":9275},[69,47763,39288],{"class":86},[69,47765,47766,47768,47770,47772,47774,47776,47778,47780,47782,47784,47786,47788,47790],{"class":71,"line":9287},[69,47767,39333],{"class":86},[69,47769,32110],{"class":6458},[69,47771,1019],{"class":82},[69,47773,1465],{"class":90},[69,47775,1767],{"class":86},[69,47777,32165],{"class":6458},[69,47779,1019],{"class":82},[69,47781,1471],{"class":90},[69,47783,1767],{"class":86},[69,47785,32119],{"class":6458},[69,47787,1019],{"class":82},[69,47789,1609],{"class":90},[69,47791,1404],{"class":86},[69,47793,47794],{"class":71,"line":9299},[69,47795,39362],{"class":86},[69,47797,47798,47800,47802,47804],{"class":71,"line":10958},[69,47799,32081],{"class":90},[69,47801,43456],{"class":86},[69,47803,1019],{"class":82},[69,47805,39245],{"class":86},[69,47807,47808,47810,47812,47814,47816,47818,47820,47822,47824,47826,47828,47830,47832,47834,47836],{"class":71,"line":10983},[69,47809,43465],{"class":86},[69,47811,43395],{"class":90},[69,47813,1767],{"class":86},[69,47815,1595],{"class":90},[69,47817,43474],{"class":86},[69,47819,1601],{"class":90},[69,47821,1767],{"class":86},[69,47823,33306],{"class":90},[69,47825,43483],{"class":86},[69,47827,691],{"class":90},[69,47829,1767],{"class":86},[69,47831,1589],{"class":90},[69,47833,43492],{"class":86},[69,47835,1589],{"class":90},[69,47837,39283],{"class":86},[69,47839,47840,47842,47844,47846,47848,47850,47852,47854,47856,47858,47860,47862,47864,47866,47868],{"class":71,"line":11006},[69,47841,43465],{"class":86},[69,47843,36106],{"class":90},[69,47845,1767],{"class":86},[69,47847,33306],{"class":90},[69,47849,43474],{"class":86},[69,47851,33306],{"class":90},[69,47853,1767],{"class":86},[69,47855,43395],{"class":90},[69,47857,43483],{"class":86},[69,47859,1589],{"class":90},[69,47861,1767],{"class":86},[69,47863,1601],{"class":90},[69,47865,43492],{"class":86},[69,47867,1595],{"class":90},[69,47869,39283],{"class":86},[69,47871,47872,47874,47876,47878,47880,47882,47884,47886,47888,47890,47892,47894,47896],{"class":71,"line":11030},[69,47873,39333],{"class":86},[69,47875,32110],{"class":6458},[69,47877,1019],{"class":82},[69,47879,1465],{"class":90},[69,47881,1767],{"class":86},[69,47883,32165],{"class":6458},[69,47885,1019],{"class":82},[69,47887,1471],{"class":90},[69,47889,1767],{"class":86},[69,47891,32119],{"class":6458},[69,47893,1019],{"class":82},[69,47895,1609],{"class":90},[69,47897,1404],{"class":86},[69,47899,47900],{"class":71,"line":11035},[69,47901,39362],{"class":86},[69,47903,47904,47906,47908,47910],{"class":71,"line":11040},[69,47905,32081],{"class":90},[69,47907,43567],{"class":86},[69,47909,1019],{"class":82},[69,47911,39245],{"class":86},[69,47913,47914,47916,47918,47920,47922,47924,47926,47928,47930,47932,47934,47936,47938,47940,47942],{"class":71,"line":11045},[69,47915,43465],{"class":86},[69,47917,43578],{"class":90},[69,47919,1767],{"class":86},[69,47921,43395],{"class":90},[69,47923,43474],{"class":86},[69,47925,1601],{"class":90},[69,47927,1767],{"class":86},[69,47929,43591],{"class":90},[69,47931,43483],{"class":86},[69,47933,691],{"class":90},[69,47935,1767],{"class":86},[69,47937,1994],{"class":90},[69,47939,43492],{"class":86},[69,47941,1595],{"class":90},[69,47943,39283],{"class":86},[69,47945,47946,47948,47950,47952,47954,47956,47958,47960,47962,47964,47966,47968,47970,47972,47974],{"class":71,"line":11054},[69,47947,43465],{"class":86},[69,47949,39693],{"class":90},[69,47951,1767],{"class":86},[69,47953,22287],{"class":90},[69,47955,43474],{"class":86},[69,47957,2005],{"class":90},[69,47959,1767],{"class":86},[69,47961,32737],{"class":90},[69,47963,43483],{"class":86},[69,47965,2187],{"class":90},[69,47967,1767],{"class":86},[69,47969,1595],{"class":90},[69,47971,43492],{"class":86},[69,47973,1595],{"class":90},[69,47975,39283],{"class":86},[69,47977,47978,47980,47982,47984,47986,47988,47990,47992,47994,47996,47998,48000,48002,48004,48006],{"class":71,"line":11059},[69,47979,43465],{"class":86},[69,47981,39693],{"class":90},[69,47983,1767],{"class":86},[69,47985,33306],{"class":90},[69,47987,43474],{"class":86},[69,47989,33306],{"class":90},[69,47991,1767],{"class":86},[69,47993,36106],{"class":90},[69,47995,43483],{"class":86},[69,47997,2187],{"class":90},[69,47999,1767],{"class":86},[69,48001,1595],{"class":90},[69,48003,43492],{"class":86},[69,48005,1595],{"class":90},[69,48007,39283],{"class":86},[69,48009,48010,48012,48014,48016,48018,48020,48022,48024,48026,48028,48030,48032,48034,48036,48038],{"class":71,"line":11065},[69,48011,43465],{"class":86},[69,48013,39693],{"class":90},[69,48015,1767],{"class":86},[69,48017,2005],{"class":90},[69,48019,43474],{"class":86},[69,48021,33306],{"class":90},[69,48023,1767],{"class":86},[69,48025,43688],{"class":90},[69,48027,43483],{"class":86},[69,48029,1589],{"class":90},[69,48031,1767],{"class":86},[69,48033,1595],{"class":90},[69,48035,43492],{"class":86},[69,48037,1595],{"class":90},[69,48039,39283],{"class":86},[69,48041,48042,48044,48046,48048,48050,48052,48054,48056,48058,48060,48062,48064,48066,48068,48070],{"class":71,"line":11086},[69,48043,43465],{"class":86},[69,48045,43709],{"class":90},[69,48047,1767],{"class":86},[69,48049,36106],{"class":90},[69,48051,43474],{"class":86},[69,48053,22287],{"class":90},[69,48055,1767],{"class":86},[69,48057,43722],{"class":90},[69,48059,43483],{"class":86},[69,48061,1589],{"class":90},[69,48063,1767],{"class":86},[69,48065,33306],{"class":90},[69,48067,43492],{"class":86},[69,48069,33306],{"class":90},[69,48071,39283],{"class":86},[69,48073,48074,48076,48078,48080,48082,48084,48086,48088,48090,48092,48094,48096,48098],{"class":71,"line":11092},[69,48075,39333],{"class":86},[69,48077,32110],{"class":6458},[69,48079,1019],{"class":82},[69,48081,1465],{"class":90},[69,48083,1767],{"class":86},[69,48085,32165],{"class":6458},[69,48087,1019],{"class":82},[69,48089,1471],{"class":90},[69,48091,1767],{"class":86},[69,48093,32119],{"class":6458},[69,48095,1019],{"class":82},[69,48097,1609],{"class":90},[69,48099,1404],{"class":86},[69,48101,48102],{"class":71,"line":11106},[69,48103,39362],{"class":86},[69,48105,48106,48108,48110,48112],{"class":71,"line":11112},[69,48107,32081],{"class":90},[69,48109,43775],{"class":86},[69,48111,1019],{"class":82},[69,48113,39245],{"class":86},[69,48115,48116,48118,48120,48122,48124,48126,48128,48130,48132,48134,48136,48138,48140,48142,48144],{"class":71,"line":11139},[69,48117,43465],{"class":86},[69,48119,43786],{"class":90},[69,48121,1767],{"class":86},[69,48123,36106],{"class":90},[69,48125,43474],{"class":86},[69,48127,22287],{"class":90},[69,48129,1767],{"class":86},[69,48131,43722],{"class":90},[69,48133,43483],{"class":86},[69,48135,1589],{"class":90},[69,48137,1767],{"class":86},[69,48139,33306],{"class":90},[69,48141,43492],{"class":86},[69,48143,33306],{"class":90},[69,48145,39283],{"class":86},[69,48147,48148,48150,48152,48154,48156,48158,48160,48162,48164,48166,48168,48170,48172,48174,48176],{"class":71,"line":11148},[69,48149,43465],{"class":86},[69,48151,43786],{"class":90},[69,48153,1767],{"class":86},[69,48155,36176],{"class":90},[69,48157,43474],{"class":86},[69,48159,43395],{"class":90},[69,48161,1767],{"class":86},[69,48163,36176],{"class":90},[69,48165,43483],{"class":86},[69,48167,1994],{"class":90},[69,48169,1767],{"class":86},[69,48171,33306],{"class":90},[69,48173,43492],{"class":86},[69,48175,33306],{"class":90},[69,48177,39283],{"class":86},[69,48179,48180,48182,48184,48186,48188],{"class":71,"line":11154},[69,48181,43849],{"class":86},[69,48183,1609],{"class":90},[69,48185,1767],{"class":86},[69,48187,1609],{"class":90},[69,48189,43858],{"class":86},[69,48191,48192],{"class":71,"line":11162},[69,48193,40026],{"class":86},[69,48195,48196,48198,48200,48202,48204],{"class":71,"line":11167},[69,48197,40031],{"class":86},[69,48199,43869],{"class":90},[69,48201,1767],{"class":86},[69,48203,1471],{"class":90},[69,48205,1404],{"class":86},[69,48207,48208],{"class":71,"line":17843},[69,48209,39362],{"class":86},[69,48211,48212],{"class":71,"line":17849},[69,48213,43884],{"class":75},[69,48215,48216,48218,48220,48222,48224],{"class":71,"line":17872},[69,48217,4647],{"class":82},[69,48219,40104],{"class":86},[69,48221,27280],{"class":82},[69,48223,40109],{"class":90},[69,48225,40112],{"class":86},[69,48227,48228,48230,48232],{"class":71,"line":17878},[69,48229,5886],{"class":82},[69,48231,40124],{"class":90},[69,48233,40127],{"class":86},[69,48235,48236,48238,48240,48242,48244,48246,48248,48250,48252],{"class":71,"line":17901},[69,48237,40137],{"class":86},[69,48239,43911],{"class":6458},[69,48241,1019],{"class":82},[69,48243,43916],{"class":1022},[69,48245,1767],{"class":86},[69,48247,40140],{"class":6458},[69,48249,1019],{"class":82},[69,48251,40145],{"class":1022},[69,48253,1404],{"class":86},[69,48255,48256],{"class":71,"line":17915},[69,48257,43931],{"class":75},[69,48259,48260],{"class":71,"line":17935},[69,48261,43936],{"class":75},[69,48263,48264],{"class":71,"line":17941},[69,48265,43941],{"class":75},[69,48267,48268],{"class":71,"line":17952},[69,48269,43946],{"class":75},[69,48271,48272],{"class":71,"line":17975},[69,48273,43951],{"class":75},[69,48275,48276],{"class":71,"line":17997},[69,48277,43956],{"class":75},[69,48279,48280,48282,48284,48286,48288,48290],{"class":71,"line":18002},[69,48281,40157],{"class":82},[69,48283,40160],{"class":86},[69,48285,40163],{"class":82},[69,48287,40166],{"class":82},[69,48289,40169],{"class":90},[69,48291,4983],{"class":86},[69,48293,48294,48296,48298],{"class":71,"line":18008},[69,48295,40181],{"class":86},[69,48297,1583],{"class":90},[69,48299,1404],{"class":86},[69,48301,48302,48304,48306],{"class":71,"line":18022},[69,48303,43983],{"class":82},[69,48305,40124],{"class":90},[69,48307,40200],{"class":86},[69,48309,48310,48312,48314,48316,48318],{"class":71,"line":18035},[69,48311,43992],{"class":86},[69,48313,1583],{"class":90},[69,48315,1767],{"class":86},[69,48317,40222],{"class":90},[69,48319,1404],{"class":86},[69,48321,48322,48324,48326,48328,48330,48332],{"class":71,"line":18040},[69,48323,44005],{"class":82},[69,48325,40160],{"class":86},[69,48327,40163],{"class":82},[69,48329,40166],{"class":82},[69,48331,40169],{"class":90},[69,48333,4983],{"class":86},[69,48335,48336,48338,48340],{"class":71,"line":18054},[69,48337,44020],{"class":86},[69,48339,1583],{"class":90},[69,48341,1404],{"class":86},[69,48343,48344],{"class":71,"line":18059},[69,48345,36401],{"class":75},[69,48347,48348,48350,48352],{"class":71,"line":18065},[69,48349,32037],{"class":82},[69,48351,32329],{"class":109},[69,48353,32332],{"class":86},[69,48355,48356,48358,48360,48362],{"class":71,"line":18070},[69,48357,32337],{"class":86},[69,48359,1019],{"class":82},[69,48361,32059],{"class":90},[69,48363,44047],{"class":86},[69,48365,48366,48368,48370,48372],{"class":71,"line":18084},[69,48367,32337],{"class":86},[69,48369,1019],{"class":82},[69,48371,32059],{"class":90},[69,48373,44058],{"class":86},[69,48375,48376,48378,48380,48382],{"class":71,"line":18089},[69,48377,32337],{"class":86},[69,48379,1019],{"class":82},[69,48381,32059],{"class":90},[69,48383,44069],{"class":86},[69,48385,48386,48388,48390,48392],{"class":71,"line":18094},[69,48387,32337],{"class":86},[69,48389,1019],{"class":82},[69,48391,32059],{"class":90},[69,48393,44080],{"class":86},[69,48395,48396,48398,48400,48402],{"class":71,"line":18108},[69,48397,32337],{"class":86},[69,48399,1019],{"class":82},[69,48401,32059],{"class":90},[69,48403,44091],{"class":86},[69,48405,48406,48408],{"class":71,"line":18120},[69,48407,15992],{"class":82},[69,48409,32445],{"class":86},[69,48411,48412],{"class":71,"line":18125},[69,48413,3644],{"emptyLinePlaceholder":1325},[69,48415,48416],{"class":71,"line":18138},[69,48417,44106],{"class":75},[69,48419,48420,48422,48424,48426,48428],{"class":71,"line":18143},[69,48421,2782],{"class":82},[69,48423,32456],{"class":90},[69,48425,4193],{"class":82},[69,48427,32461],{"class":1022},[69,48429,4983],{"class":86},[69,48431,48432,48434,48436,48438,48440,48442,48444,48446,48448],{"class":71,"line":18148},[69,48433,32473],{"class":86},[69,48435,1019],{"class":82},[69,48437,31687],{"class":86},[69,48439,32480],{"class":1022},[69,48441,2949],{"class":82},[69,48443,32485],{"class":86},[69,48445,2946],{"class":82},[69,48447,31712],{"class":1022},[69,48449,1404],{"class":86},[69,48451,48452,48454,48456],{"class":71,"line":18153},[69,48453,32525],{"class":86},[69,48455,1019],{"class":82},[69,48457,44147],{"class":86},[69,48459,48460,48462,48464,48466,48468,48470,48472,48474],{"class":71,"line":18166},[69,48461,32535],{"class":90},[69,48463,32538],{"class":86},[69,48465,1609],{"class":90},[69,48467,1767],{"class":86},[69,48469,32737],{"class":90},[69,48471,1767],{"class":86},[69,48473,32737],{"class":90},[69,48475,32551],{"class":86},[23237,48477,48479],{"id":48478},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[29,48481,48482],{},"计算图片的均值与方差，用于训练中归一化处理操作",[59,48484,48486],{"className":31614,"code":48485,"language":31616,"meta":64,"style":64},"# 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",[66,48487,48488,48493,48506,48511,48517,48522,48532,48536,48541,48551,48555,48560,48570,48587,48591,48596,48608,48620,48651,48660,48670,48680,48684,48689,48704,48708,48713,48718,48723,48733,48738,48763,48767,48772,48787,48791,48804,48808,48813,48818,48823,48828,48833,48843,48853,48876,48884,48892,48900,48904,48916,48920,48925,48929,48933,48940,48960,48984,48991,49005,49010,49015,49019,49033,49037,49049],{"__ignoreMap":64},[69,48489,48490],{"class":71,"line":72},[69,48491,48492],{"class":75},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[69,48494,48495,48497,48500,48503],{"class":71,"line":79},[69,48496,31973],{"class":82},[69,48498,48499],{"class":90}," PIL",[69,48501,48502],{"class":82}," import",[69,48504,48505],{"class":86}," Image\n",[69,48507,48508],{"class":71,"line":106},[69,48509,48510],{"class":75},"# os 用来处理文件夹和文件路径\n",[69,48512,48513,48515],{"class":71,"line":116},[69,48514,31628],{"class":82},[69,48516,46541],{"class":86},[69,48518,48519],{"class":71,"line":133},[69,48520,48521],{"class":75},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[69,48523,48524,48526,48528,48530],{"class":71,"line":139},[69,48525,31628],{"class":82},[69,48527,32616],{"class":86},[69,48529,32619],{"class":82},[69,48531,32622],{"class":86},[69,48533,48534],{"class":71,"line":401},[69,48535,3644],{"emptyLinePlaceholder":1325},[69,48537,48538],{"class":71,"line":470},[69,48539,48540],{"class":75},"# 文件夹路径，包含所有图片文件\n",[69,48542,48543,48546,48548],{"class":71,"line":475},[69,48544,48545],{"class":86},"folder_path ",[69,48547,1019],{"class":82},[69,48549,48550],{"class":1022}," 'data_cat_dog'\n",[69,48552,48553],{"class":71,"line":482},[69,48554,3644],{"emptyLinePlaceholder":1325},[69,48556,48557],{"class":71,"line":497},[69,48558,48559],{"class":75},"# 初始化累积变量\n",[69,48561,48562,48565,48567],{"class":71,"line":502},[69,48563,48564],{"class":86},"total_pixels ",[69,48566,1019],{"class":82},[69,48568,48569],{"class":90}," 0\n",[69,48571,48572,48575,48577,48580,48582,48584],{"class":71,"line":509},[69,48573,48574],{"class":86},"sum_normalized_pixel_values ",[69,48576,1019],{"class":82},[69,48578,48579],{"class":86}," np.zeros(",[69,48581,1465],{"class":90},[69,48583,47044],{"class":86},[69,48585,48586],{"class":75},"# 如果是RGB图像，需要三个通道的均值和方差\n",[69,48588,48589],{"class":71,"line":524},[69,48590,3644],{"emptyLinePlaceholder":1325},[69,48592,48593],{"class":71,"line":2888},[69,48594,48595],{"class":75},"# 遍历文件夹中的图片文件\n",[69,48597,48598,48600,48603,48605],{"class":71,"line":2893},[69,48599,4269],{"class":82},[69,48601,48602],{"class":86}," root, dirs, files ",[69,48604,27280],{"class":82},[69,48606,48607],{"class":86}," os.walk(folder_path):\n",[69,48609,48610,48612,48615,48617],{"class":71,"line":2899},[69,48611,4445],{"class":82},[69,48613,48614],{"class":86}," filename ",[69,48616,27280],{"class":82},[69,48618,48619],{"class":86}," files:\n",[69,48621,48622,48624,48627,48630,48632,48635,48637,48640,48642,48645,48648],{"class":71,"line":2919},[69,48623,3741],{"class":82},[69,48625,48626],{"class":86}," filename.endswith((",[69,48628,48629],{"class":1022},"'.jpg'",[69,48631,13677],{"class":86},[69,48633,48634],{"class":1022},"'.jpeg'",[69,48636,13677],{"class":86},[69,48638,48639],{"class":1022},"'.png'",[69,48641,13677],{"class":86},[69,48643,48644],{"class":1022},"'.bmp'",[69,48646,48647],{"class":86},")):  ",[69,48649,48650],{"class":75},"# 可根据实际情况添加其他格式\n",[69,48652,48653,48655,48657],{"class":71,"line":2924},[69,48654,46909],{"class":86},[69,48656,1019],{"class":82},[69,48658,48659],{"class":86}," os.path.join(root, filename)\n",[69,48661,48662,48665,48667],{"class":71,"line":2938},[69,48663,48664],{"class":86},"            image ",[69,48666,1019],{"class":82},[69,48668,48669],{"class":86}," Image.open(image_path)\n",[69,48671,48672,48675,48677],{"class":71,"line":2943},[69,48673,48674],{"class":86},"            image_array ",[69,48676,1019],{"class":82},[69,48678,48679],{"class":86}," np.array(image)\n",[69,48681,48682],{"class":71,"line":2972},[69,48683,3644],{"emptyLinePlaceholder":1325},[69,48685,48686],{"class":71,"line":2977},[69,48687,48688],{"class":75},"            # 归一化像素值到0-1之间\n",[69,48690,48691,48694,48696,48699,48701],{"class":71,"line":2994},[69,48692,48693],{"class":86},"            normalized_image_array ",[69,48695,1019],{"class":82},[69,48697,48698],{"class":86}," image_array ",[69,48700,1972],{"class":82},[69,48702,48703],{"class":90}," 255.0\n",[69,48705,48706],{"class":71,"line":2999},[69,48707,3644],{"emptyLinePlaceholder":1325},[69,48709,48710],{"class":71,"line":3004},[69,48711,48712],{"class":75},"            # print(image_path)\n",[69,48714,48715],{"class":71,"line":3009},[69,48716,48717],{"class":75},"            # print(normalized_image_array.shape)\n",[69,48719,48720],{"class":71,"line":3023},[69,48721,48722],{"class":75},"            # 累积归一化后的像素值和像素数量\n",[69,48724,48725,48728,48730],{"class":71,"line":3028},[69,48726,48727],{"class":86},"            total_pixels ",[69,48729,10719],{"class":82},[69,48731,48732],{"class":86}," normalized_image_array.size\n",[69,48734,48735],{"class":71,"line":3821},[69,48736,48737],{"class":75},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[69,48739,48740,48743,48745,48748,48751,48753,48755,48757,48759,48761],{"class":71,"line":3835},[69,48741,48742],{"class":86},"            sum_normalized_pixel_values ",[69,48744,10719],{"class":82},[69,48746,48747],{"class":86}," np.sum(normalized_image_array, ",[69,48749,48750],{"class":6458},"axis",[69,48752,1019],{"class":82},[69,48754,1398],{"class":86},[69,48756,1583],{"class":90},[69,48758,13677],{"class":86},[69,48760,1609],{"class":90},[69,48762,31733],{"class":86},[69,48764,48765],{"class":71,"line":3843},[69,48766,3644],{"emptyLinePlaceholder":1325},[69,48768,48769],{"class":71,"line":3848},[69,48770,48771],{"class":75},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[69,48773,48774,48777,48779,48782,48784],{"class":71,"line":3854},[69,48775,48776],{"class":86},"mean ",[69,48778,1019],{"class":82},[69,48780,48781],{"class":86}," sum_normalized_pixel_values ",[69,48783,1972],{"class":82},[69,48785,48786],{"class":86}," total_pixels\n",[69,48788,48789],{"class":71,"line":3860},[69,48790,3644],{"emptyLinePlaceholder":1325},[69,48792,48793,48796,48798,48800,48802],{"class":71,"line":3865},[69,48794,48795],{"class":86},"sum_squared_diff ",[69,48797,1019],{"class":82},[69,48799,48579],{"class":86},[69,48801,1465],{"class":90},[69,48803,1404],{"class":86},[69,48805,48806],{"class":71,"line":9190},[69,48807,3644],{"emptyLinePlaceholder":1325},[69,48809,48810],{"class":71,"line":9214},[69,48811,48812],{"class":75},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[69,48814,48815],{"class":71,"line":9219},[69,48816,48817],{"class":75},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[69,48819,48820],{"class":71,"line":9225},[69,48821,48822],{"class":75},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[69,48824,48825],{"class":71,"line":9252},[69,48826,48827],{"class":75},"# Image.open(image_path)：打开图片\n",[69,48829,48830],{"class":71,"line":9257},[69,48831,48832],{"class":75},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[69,48834,48835,48837,48839,48841],{"class":71,"line":9263},[69,48836,4269],{"class":82},[69,48838,48602],{"class":86},[69,48840,27280],{"class":82},[69,48842,48607],{"class":86},[69,48844,48845,48847,48849,48851],{"class":71,"line":9275},[69,48846,4445],{"class":82},[69,48848,48614],{"class":86},[69,48850,27280],{"class":82},[69,48852,48619],{"class":86},[69,48854,48855,48857,48859,48861,48863,48865,48867,48869,48871,48873],{"class":71,"line":9287},[69,48856,3741],{"class":82},[69,48858,48626],{"class":86},[69,48860,48629],{"class":1022},[69,48862,13677],{"class":86},[69,48864,48634],{"class":1022},[69,48866,13677],{"class":86},[69,48868,48639],{"class":1022},[69,48870,13677],{"class":86},[69,48872,48644],{"class":1022},[69,48874,48875],{"class":86},")):\n",[69,48877,48878,48880,48882],{"class":71,"line":9299},[69,48879,46909],{"class":86},[69,48881,1019],{"class":82},[69,48883,48659],{"class":86},[69,48885,48886,48888,48890],{"class":71,"line":10958},[69,48887,48664],{"class":86},[69,48889,1019],{"class":82},[69,48891,48669],{"class":86},[69,48893,48894,48896,48898],{"class":71,"line":10983},[69,48895,48674],{"class":86},[69,48897,1019],{"class":82},[69,48899,48679],{"class":86},[69,48901,48902],{"class":71,"line":11006},[69,48903,48688],{"class":75},[69,48905,48906,48908,48910,48912,48914],{"class":71,"line":11030},[69,48907,48693],{"class":86},[69,48909,1019],{"class":82},[69,48911,48698],{"class":86},[69,48913,1972],{"class":82},[69,48915,48703],{"class":90},[69,48917,48918],{"class":71,"line":11035},[69,48919,48717],{"class":75},[69,48921,48922],{"class":71,"line":11040},[69,48923,48924],{"class":75},"            # print(mean.shape)\n",[69,48926,48927],{"class":71,"line":11045},[69,48928,48712],{"class":75},[69,48930,48931],{"class":71,"line":11054},[69,48932,3644],{"emptyLinePlaceholder":1325},[69,48934,48935,48938],{"class":71,"line":11059},[69,48936,48937],{"class":82},"            try",[69,48939,4983],{"class":86},[69,48941,48942,48945,48947,48950,48952,48955,48957],{"class":71,"line":11065},[69,48943,48944],{"class":86},"                diff ",[69,48946,1019],{"class":82},[69,48948,48949],{"class":86}," (normalized_image_array ",[69,48951,1920],{"class":82},[69,48953,48954],{"class":86}," mean) ",[69,48956,11903],{"class":82},[69,48958,48959],{"class":90}," 2\n",[69,48961,48962,48965,48967,48970,48972,48974,48976,48978,48980,48982],{"class":71,"line":11086},[69,48963,48964],{"class":86},"                sum_squared_diff ",[69,48966,10719],{"class":82},[69,48968,48969],{"class":86}," np.sum(diff, ",[69,48971,48750],{"class":6458},[69,48973,1019],{"class":82},[69,48975,1398],{"class":86},[69,48977,1583],{"class":90},[69,48979,13677],{"class":86},[69,48981,1609],{"class":90},[69,48983,31733],{"class":86},[69,48985,48986,48989],{"class":71,"line":11092},[69,48987,48988],{"class":82},"            except",[69,48990,4983],{"class":86},[69,48992,48993,48996,48998,49000,49003],{"class":71,"line":11106},[69,48994,48995],{"class":90},"                print",[69,48997,1398],{"class":86},[69,48999,1447],{"class":82},[69,49001,49002],{"class":1022},"\"捕获到自定义异常\"",[69,49004,1404],{"class":86},[69,49006,49007],{"class":71,"line":11112},[69,49008,49009],{"class":75},"            # diff = (normalized_image_array - mean) ** 2\n",[69,49011,49012],{"class":71,"line":11139},[69,49013,49014],{"class":75},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[69,49016,49017],{"class":71,"line":11148},[69,49018,3644],{"emptyLinePlaceholder":1325},[69,49020,49021,49024,49026,49029,49031],{"class":71,"line":11154},[69,49022,49023],{"class":86},"variance ",[69,49025,1019],{"class":82},[69,49027,49028],{"class":86}," sum_squared_diff ",[69,49030,1972],{"class":82},[69,49032,48786],{"class":86},[69,49034,49035],{"class":71,"line":11162},[69,49036,3644],{"emptyLinePlaceholder":1325},[69,49038,49039,49041,49043,49046],{"class":71,"line":11167},[69,49040,31651],{"class":90},[69,49042,1398],{"class":86},[69,49044,49045],{"class":1022},"\"Mean:\"",[69,49047,49048],{"class":86},", mean)\n",[69,49050,49051,49053,49055,49058],{"class":71,"line":17843},[69,49052,31651],{"class":90},[69,49054,1398],{"class":86},[69,49056,49057],{"class":1022},"\"Variance:\"",[69,49059,49060],{"class":86},", variance)\n",[59,49062,49064],{"className":31614,"code":49063,"language":31616,"meta":64,"style":64},"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",[66,49065,49066,49072,49078,49088,49094,49104,49118,49128,49138,49148,49152,49162,49172,49176,49180,49188,49193,49198,49217,49221,49226,49231,49236,49241,49282,49287,49297,49302,49315,49320,49325,49330,49335,49340,49344,49349,49354,49376,49380,49412,49426,49436,49446,49450,49460,49474,49484,49494,49504,49510,49514,49518,49522,49526,49530,49538,49558,49562,49566,49570,49574,49590,49594,49598,49606,49610,49614,49622,49626,49630,49634,49642,49646,49650,49654,49662,49666,49674,49678,49686,49690,49698,49702,49710,49714,49718,49726,49730,49734,49746,49770,49784,49788,49792,49796,49804,49808,49816,49820,49828,49832,49840,49844,49852,49856,49864,49868,49880,49884,49892,49896,49904,49908,49912,49916,49920,49928,49932,49948,49952,49960,49964,49968,49972,49976,49980,49984,49988,50004,50008,50020,50024,50036,50040,50052,50056,50064,50068,50076,50080,50084,50088,50094,50098,50106,50110,50126,50130,50138,50142,50158,50170,50174,50186,50190,50194,50202,50206,50210,50218,50222,50230,50234,50242,50246,50250,50292,50334,50338,50342,50358,50362,50378,50382,50386,50394,50398,50402,50414,50452,50456,50460,50468,50472,50486,50496,50502,50508,50514,50520,50524,50528,50534,50538,50542,50550,50554,50572,50576,50580,50584,50600,50604,50608,50612,50616,50620,50640,50660,50664,50668,50672,50680,50688,50692,50708,50728,50748,50752,50757,50766,50775,50780,50785,50790,50803,50808,50817,50826,50843],{"__ignoreMap":64},[69,49067,49068,49070],{"class":71,"line":72},[69,49069,31628],{"class":82},[69,49071,33058],{"class":86},[69,49073,49074,49076],{"class":71,"line":79},[69,49075,31628],{"class":82},[69,49077,33065],{"class":86},[69,49079,49080,49082,49084,49086],{"class":71,"line":106},[69,49081,31628],{"class":82},[69,49083,33076],{"class":86},[69,49085,32619],{"class":82},[69,49087,33081],{"class":86},[69,49089,49090,49092],{"class":71,"line":116},[69,49091,31628],{"class":82},[69,49093,31631],{"class":86},[69,49095,49096,49098,49100,49102],{"class":71,"line":133},[69,49097,31973],{"class":82},[69,49099,32651],{"class":86},[69,49101,31628],{"class":82},[69,49103,33098],{"class":86},[69,49105,49106,49108,49110,49112,49115],{"class":71,"line":139},[69,49107,31973],{"class":82},[69,49109,32604],{"class":86},[69,49111,31628],{"class":82},[69,49113,49114],{"class":86}," ImageFolder ",[69,49116,49117],{"class":75},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[69,49119,49120,49122,49124,49126],{"class":71,"line":401},[69,49121,31973],{"class":82},[69,49123,32634],{"class":86},[69,49125,31628],{"class":82},[69,49127,32639],{"class":86},[69,49129,49130,49132,49134,49136],{"class":71,"line":470},[69,49131,31628],{"class":82},[69,49133,32651],{"class":86},[69,49135,32619],{"class":82},[69,49137,32656],{"class":86},[69,49139,49140,49142,49144,49146],{"class":71,"line":475},[69,49141,31628],{"class":82},[69,49143,32668],{"class":86},[69,49145,32619],{"class":82},[69,49147,32673],{"class":86},[69,49149,49150],{"class":71,"line":482},[69,49151,33143],{"class":75},[69,49153,49154,49156,49158,49160],{"class":71,"line":497},[69,49155,31973],{"class":82},[69,49157,33150],{"class":86},[69,49159,31628],{"class":82},[69,49161,44267],{"class":86},[69,49163,49164,49166,49168,49170],{"class":71,"line":502},[69,49165,31973],{"class":82},[69,49167,31976],{"class":86},[69,49169,31628],{"class":82},[69,49171,31981],{"class":86},[69,49173,49174],{"class":71,"line":509},[69,49175,3644],{"emptyLinePlaceholder":1325},[69,49177,49178],{"class":71,"line":524},[69,49179,33178],{"class":75},[69,49181,49182,49184,49186],{"class":71,"line":2888},[69,49183,33183],{"class":82},[69,49185,33186],{"class":109},[69,49187,33189],{"class":86},[69,49189,49190],{"class":71,"line":2893},[69,49191,49192],{"class":75},"    # 导入自己的数据集，并进行数据处理\n",[69,49194,49195],{"class":71,"line":2899},[69,49196,49197],{"class":75},"    # 定义数据集的路径\n",[69,49199,49200,49203,49205,49207,49209,49211,49215],{"class":71,"line":2919},[69,49201,49202],{"class":90},"    ROOT_PATH",[69,49204,1019],{"class":82},[69,49206,2057],{"class":82},[69,49208,1642],{"class":1022},[69,49210,1946],{"class":90},[69,49212,49214],{"class":49213},"sA_wV","\u002Fdata\u002Ftrain",[69,49216,26370],{"class":1022},[69,49218,49219],{"class":71,"line":2924},[69,49220,3644],{"emptyLinePlaceholder":1325},[69,49222,49223],{"class":71,"line":2938},[69,49224,49225],{"class":75},"    # 定义归一化方法\n",[69,49227,49228],{"class":71,"line":2943},[69,49229,49230],{"class":75},"    # 这里需要先计算一下数据集的均值和方差\n",[69,49232,49233],{"class":71,"line":2972},[69,49234,49235],{"class":75},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[69,49237,49238],{"class":71,"line":2977},[69,49239,49240],{"class":75},"    # 第一个参数是均值，第二个参数是方差\n",[69,49242,49243,49246,49248,49251,49254,49256,49259,49261,49264,49267,49270,49272,49275,49277,49280],{"class":71,"line":2994},[69,49244,49245],{"class":86},"    normalize",[69,49247,1019],{"class":82},[69,49249,49250],{"class":86},"transforms.Normalize([",[69,49252,49253],{"class":90},"0.162",[69,49255,1767],{"class":86},[69,49257,49258],{"class":90},"0.151",[69,49260,1767],{"class":86},[69,49262,49263],{"class":90},"0.138",[69,49265,49266],{"class":86},"],[",[69,49268,49269],{"class":90},"0.058",[69,49271,1767],{"class":86},[69,49273,49274],{"class":90},"0.052",[69,49276,1767],{"class":86},[69,49278,49279],{"class":90},"0.048",[69,49281,5901],{"class":86},[69,49283,49284],{"class":71,"line":2999},[69,49285,49286],{"class":75},"    # 定义数据集处理方法变量\n",[69,49288,49289,49292,49294],{"class":71,"line":3004},[69,49290,49291],{"class":86},"    train_transform",[69,49293,1019],{"class":82},[69,49295,49296],{"class":86},"transforms.Compose([\n",[69,49298,49299],{"class":71,"line":3009},[69,49300,49301],{"class":75},"        # 调整图像大小为224*224\n",[69,49303,49304,49307,49309,49311,49313],{"class":71,"line":3023},[69,49305,49306],{"class":86},"        transforms.Resize((",[69,49308,32737],{"class":90},[69,49310,1767],{"class":86},[69,49312,32737],{"class":90},[69,49314,43858],{"class":86},[69,49316,49317],{"class":71,"line":3028},[69,49318,49319],{"class":75},"        # 将图像转换为张量\n",[69,49321,49322],{"class":71,"line":3821},[69,49323,49324],{"class":86},"        transforms.ToTensor(),\n",[69,49326,49327],{"class":71,"line":3835},[69,49328,49329],{"class":86},"        normalize])\n",[69,49331,49332],{"class":71,"line":3843},[69,49333,49334],{"class":75},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[69,49336,49337],{"class":71,"line":3848},[69,49338,49339],{"class":75},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[69,49341,49342],{"class":71,"line":3854},[69,49343,3644],{"emptyLinePlaceholder":1325},[69,49345,49346],{"class":71,"line":3860},[69,49347,49348],{"class":75},"    # 加载数据集\n",[69,49350,49351],{"class":71,"line":3865},[69,49352,49353],{"class":75},"    # 传入数据集路径与处理方法\n",[69,49355,49356,49358,49360,49363,49366,49368,49371,49373],{"class":71,"line":9190},[69,49357,33194],{"class":86},[69,49359,1019],{"class":82},[69,49361,49362],{"class":86},"ImageFolder(",[69,49364,49365],{"class":90},"ROOT_PATH",[69,49367,1767],{"class":86},[69,49369,49370],{"class":6458},"transform",[69,49372,1019],{"class":82},[69,49374,49375],{"class":86},"train_transform)\n",[69,49377,49378],{"class":71,"line":9214},[69,49379,3644],{"emptyLinePlaceholder":1325},[69,49381,49382,49384,49386,49388,49390,49392,49394,49396,49398,49400,49402,49404,49406,49408,49410],{"class":71,"line":9219},[69,49383,33246],{"class":86},[69,49385,1019],{"class":82},[69,49387,33251],{"class":86},[69,49389,33254],{"class":90},[69,49391,1398],{"class":86},[69,49393,33259],{"class":90},[69,49395,1843],{"class":82},[69,49397,8600],{"class":90},[69,49399,33266],{"class":86},[69,49401,33254],{"class":90},[69,49403,1398],{"class":86},[69,49405,33273],{"class":90},[69,49407,1843],{"class":82},[69,49409,8600],{"class":90},[69,49411,33280],{"class":86},[69,49413,49414,49416,49418,49420,49422,49424],{"class":71,"line":9225},[69,49415,33285],{"class":86},[69,49417,1019],{"class":82},[69,49419,33290],{"class":86},[69,49421,32773],{"class":6458},[69,49423,1019],{"class":82},[69,49425,32778],{"class":86},[69,49427,49428,49430,49432,49434],{"class":71,"line":9252},[69,49429,33301],{"class":6458},[69,49431,1019],{"class":82},[69,49433,1589],{"class":90},[69,49435,32702],{"class":86},[69,49437,49438,49440,49442,49444],{"class":71,"line":9257},[69,49439,33313],{"class":6458},[69,49441,1019],{"class":82},[69,49443,32712],{"class":90},[69,49445,32702],{"class":86},[69,49447,49448],{"class":71,"line":9263},[69,49449,33324],{"class":75},[69,49451,49452,49454,49456,49458],{"class":71,"line":9275},[69,49453,33329],{"class":6458},[69,49455,1019],{"class":82},[69,49457,1784],{"class":90},[69,49459,1404],{"class":86},[69,49461,49462,49464,49466,49468,49470,49472],{"class":71,"line":9287},[69,49463,33340],{"class":86},[69,49465,1019],{"class":82},[69,49467,32770],{"class":86},[69,49469,32773],{"class":6458},[69,49471,1019],{"class":82},[69,49473,33351],{"class":86},[69,49475,49476,49478,49480,49482],{"class":71,"line":9299},[69,49477,33356],{"class":6458},[69,49479,1019],{"class":82},[69,49481,1589],{"class":90},[69,49483,32702],{"class":86},[69,49485,49486,49488,49490,49492],{"class":71,"line":10958},[69,49487,33367],{"class":6458},[69,49489,1019],{"class":82},[69,49491,32712],{"class":90},[69,49493,32702],{"class":86},[69,49495,49496,49498,49500,49502],{"class":71,"line":10983},[69,49497,33378],{"class":6458},[69,49499,1019],{"class":82},[69,49501,1784],{"class":90},[69,49503,1404],{"class":86},[69,49505,49506,49508],{"class":71,"line":11006},[69,49507,5334],{"class":82},[69,49509,33391],{"class":86},[69,49511,49512],{"class":71,"line":11030},[69,49513,3644],{"emptyLinePlaceholder":1325},[69,49515,49516],{"class":71,"line":11035},[69,49517,33400],{"class":75},[69,49519,49520],{"class":71,"line":11040},[69,49521,33405],{"class":75},[69,49523,49524],{"class":71,"line":11045},[69,49525,3644],{"emptyLinePlaceholder":1325},[69,49527,49528],{"class":71,"line":11054},[69,49529,33414],{"class":75},[69,49531,49532,49534,49536],{"class":71,"line":11059},[69,49533,33183],{"class":82},[69,49535,33421],{"class":109},[69,49537,33424],{"class":86},[69,49539,49540,49542,49544,49546,49548,49550,49552,49554,49556],{"class":71,"line":11065},[69,49541,32473],{"class":86},[69,49543,1019],{"class":82},[69,49545,31687],{"class":86},[69,49547,32480],{"class":1022},[69,49549,2949],{"class":82},[69,49551,32485],{"class":86},[69,49553,2946],{"class":82},[69,49555,33443],{"class":1022},[69,49557,1404],{"class":86},[69,49559,49560],{"class":71,"line":11086},[69,49561,3644],{"emptyLinePlaceholder":1325},[69,49563,49564],{"class":71,"line":11092},[69,49565,33458],{"class":75},[69,49567,49568],{"class":71,"line":11106},[69,49569,33463],{"class":75},[69,49571,49572],{"class":71,"line":11112},[69,49573,33468],{"class":75},[69,49575,49576,49578,49580,49582,49584,49586,49588],{"class":71,"line":11139},[69,49577,33473],{"class":86},[69,49579,1019],{"class":82},[69,49581,33478],{"class":86},[69,49583,33481],{"class":6458},[69,49585,1019],{"class":82},[69,49587,33486],{"class":90},[69,49589,1404],{"class":86},[69,49591,49592],{"class":71,"line":11148},[69,49593,3644],{"emptyLinePlaceholder":1325},[69,49595,49596],{"class":71,"line":11154},[69,49597,33497],{"class":75},[69,49599,49600,49602,49604],{"class":71,"line":11162},[69,49601,33502],{"class":86},[69,49603,1019],{"class":82},[69,49605,33507],{"class":86},[69,49607,49608],{"class":71,"line":11167},[69,49609,3644],{"emptyLinePlaceholder":1325},[69,49611,49612],{"class":71,"line":17843},[69,49613,33516],{"class":75},[69,49615,49616,49618,49620],{"class":71,"line":17849},[69,49617,32525],{"class":86},[69,49619,1019],{"class":82},[69,49621,33525],{"class":86},[69,49623,49624],{"class":71,"line":17872},[69,49625,33530],{"class":75},[69,49627,49628],{"class":71,"line":17878},[69,49629,33535],{"class":75},[69,49631,49632],{"class":71,"line":17901},[69,49633,33540],{"class":75},[69,49635,49636,49638,49640],{"class":71,"line":17915},[69,49637,33545],{"class":86},[69,49639,1019],{"class":82},[69,49641,33550],{"class":86},[69,49643,49644],{"class":71,"line":17935},[69,49645,3644],{"emptyLinePlaceholder":1325},[69,49647,49648],{"class":71,"line":17941},[69,49649,33563],{"class":75},[69,49651,49652],{"class":71,"line":17952},[69,49653,33568],{"class":75},[69,49655,49656,49658,49660],{"class":71,"line":17975},[69,49657,33573],{"class":86},[69,49659,1019],{"class":82},[69,49661,33578],{"class":90},[69,49663,49664],{"class":71,"line":17997},[69,49665,33583],{"class":75},[69,49667,49668,49670,49672],{"class":71,"line":18002},[69,49669,33588],{"class":86},[69,49671,1019],{"class":82},[69,49673,33593],{"class":86},[69,49675,49676],{"class":71,"line":18008},[69,49677,33598],{"class":75},[69,49679,49680,49682,49684],{"class":71,"line":18022},[69,49681,33603],{"class":86},[69,49683,1019],{"class":82},[69,49685,33593],{"class":86},[69,49687,49688],{"class":71,"line":18035},[69,49689,33612],{"class":75},[69,49691,49692,49694,49696],{"class":71,"line":18040},[69,49693,33617],{"class":86},[69,49695,1019],{"class":82},[69,49697,33593],{"class":86},[69,49699,49700],{"class":71,"line":18054},[69,49701,33626],{"class":75},[69,49703,49704,49706,49708],{"class":71,"line":18059},[69,49705,33631],{"class":86},[69,49707,1019],{"class":82},[69,49709,33593],{"class":86},[69,49711,49712],{"class":71,"line":18065},[69,49713,3644],{"emptyLinePlaceholder":1325},[69,49715,49716],{"class":71,"line":18070},[69,49717,33644],{"class":75},[69,49719,49720,49722,49724],{"class":71,"line":18084},[69,49721,33649],{"class":86},[69,49723,1019],{"class":82},[69,49725,33654],{"class":86},[69,49727,49728],{"class":71,"line":18089},[69,49729,3644],{"emptyLinePlaceholder":1325},[69,49731,49732],{"class":71,"line":18094},[69,49733,33667],{"class":75},[69,49735,49736,49738,49740,49742,49744],{"class":71,"line":18108},[69,49737,4445],{"class":82},[69,49739,33674],{"class":86},[69,49741,27280],{"class":82},[69,49743,33679],{"class":90},[69,49745,33682],{"class":86},[69,49747,49748,49750,49752,49754,49756,49758,49760,49762,49764,49766,49768],{"class":71,"line":18120},[69,49749,33687],{"class":90},[69,49751,1398],{"class":86},[69,49753,33692],{"class":1022},[69,49755,33695],{"class":90},[69,49757,1972],{"class":1022},[69,49759,33695],{"class":90},[69,49761,1642],{"class":1022},[69,49763,33704],{"class":86},[69,49765,1920],{"class":82},[69,49767,1609],{"class":90},[69,49769,31733],{"class":86},[69,49771,49772,49774,49776,49778,49780,49782],{"class":71,"line":18125},[69,49773,33687],{"class":90},[69,49775,1398],{"class":86},[69,49777,33719],{"class":1022},[69,49779,1843],{"class":82},[69,49781,390],{"class":90},[69,49783,1404],{"class":86},[69,49785,49786],{"class":71,"line":18138},[69,49787,3644],{"emptyLinePlaceholder":1325},[69,49789,49790],{"class":71,"line":18143},[69,49791,33734],{"class":75},[69,49793,49794],{"class":71,"line":18148},[69,49795,33739],{"class":75},[69,49797,49798,49800,49802],{"class":71,"line":18153},[69,49799,33744],{"class":86},[69,49801,1019],{"class":82},[69,49803,33578],{"class":90},[69,49805,49806],{"class":71,"line":18166},[69,49807,33753],{"class":75},[69,49809,49810,49812,49814],{"class":71,"line":18171},[69,49811,33758],{"class":86},[69,49813,1019],{"class":82},[69,49815,4329],{"class":90},[69,49817,49818],{"class":71,"line":33869},[69,49819,33767],{"class":75},[69,49821,49822,49824,49826],{"class":71,"line":33875},[69,49823,33772],{"class":86},[69,49825,1019],{"class":82},[69,49827,33578],{"class":90},[69,49829,49830],{"class":71,"line":33881},[69,49831,33781],{"class":75},[69,49833,49834,49836,49838],{"class":71,"line":33887},[69,49835,33786],{"class":86},[69,49837,1019],{"class":82},[69,49839,4329],{"class":90},[69,49841,49842],{"class":71,"line":33893},[69,49843,33795],{"class":75},[69,49845,49846,49848,49850],{"class":71,"line":33904},[69,49847,33800],{"class":86},[69,49849,1019],{"class":82},[69,49851,4329],{"class":90},[69,49853,49854],{"class":71,"line":33910},[69,49855,33809],{"class":75},[69,49857,49858,49860,49862],{"class":71,"line":33930},[69,49859,33814],{"class":86},[69,49861,1019],{"class":82},[69,49863,4329],{"class":90},[69,49865,49866],{"class":71,"line":33936},[69,49867,33823],{"class":75},[69,49869,49870,49872,49874,49876,49878],{"class":71,"line":33947},[69,49871,4647],{"class":82},[69,49873,32837],{"class":86},[69,49875,27280],{"class":82},[69,49877,32842],{"class":90},[69,49879,33836],{"class":86},[69,49881,49882],{"class":71,"line":33953},[69,49883,33841],{"class":75},[69,49885,49886,49888,49890],{"class":71,"line":33959},[69,49887,33846],{"class":86},[69,49889,1019],{"class":82},[69,49891,33851],{"class":86},[69,49893,49894],{"class":71,"line":33965},[69,49895,33856],{"class":75},[69,49897,49898,49900,49902],{"class":71,"line":33971},[69,49899,33861],{"class":86},[69,49901,1019],{"class":82},[69,49903,33866],{"class":86},[69,49905,49906],{"class":71,"line":33977},[69,49907,33872],{"class":75},[69,49909,49910],{"class":71,"line":33983},[69,49911,33878],{"class":86},[69,49913,49914],{"class":71,"line":33989},[69,49915,33884],{"class":75},[69,49917,49918],{"class":71,"line":34009},[69,49919,33890],{"class":75},[69,49921,49922,49924,49926],{"class":71,"line":34015},[69,49923,33896],{"class":86},[69,49925,1019],{"class":82},[69,49927,33901],{"class":86},[69,49929,49930],{"class":71,"line":34031},[69,49931,33907],{"class":75},[69,49933,49934,49936,49938,49940,49942,49944,49946],{"class":71,"line":34037},[69,49935,33913],{"class":86},[69,49937,1019],{"class":82},[69,49939,33918],{"class":86},[69,49941,33921],{"class":6458},[69,49943,1019],{"class":82},[69,49945,1609],{"class":90},[69,49947,1404],{"class":86},[69,49949,49950],{"class":71,"line":34051},[69,49951,33933],{"class":75},[69,49953,49954,49956,49958],{"class":71,"line":34057},[69,49955,33939],{"class":86},[69,49957,1019],{"class":82},[69,49959,33944],{"class":86},[69,49961,49962],{"class":71,"line":34072},[69,49963,33950],{"class":75},[69,49965,49966],{"class":71,"line":34078},[69,49967,33956],{"class":86},[69,49969,49970],{"class":71,"line":34087},[69,49971,33962],{"class":75},[69,49973,49974],{"class":71,"line":34093},[69,49975,33968],{"class":86},[69,49977,49978],{"class":71,"line":34102},[69,49979,33974],{"class":75},[69,49981,49982],{"class":71,"line":34108},[69,49983,33980],{"class":86},[69,49985,49986],{"class":71,"line":34114},[69,49987,33986],{"class":75},[69,49989,49990,49992,49994,49996,49998,50000,50002],{"class":71,"line":34123},[69,49991,33992],{"class":86},[69,49993,10719],{"class":82},[69,49995,33997],{"class":86},[69,49997,1843],{"class":82},[69,49999,34002],{"class":86},[69,50001,1583],{"class":90},[69,50003,1404],{"class":86},[69,50005,50006],{"class":71,"line":34129},[69,50007,34012],{"class":75},[69,50009,50010,50012,50014,50016,50018],{"class":71,"line":34140},[69,50011,34018],{"class":86},[69,50013,10719],{"class":82},[69,50015,34023],{"class":86},[69,50017,4193],{"class":82},[69,50019,34028],{"class":86},[69,50021,50022],{"class":71,"line":34146},[69,50023,34034],{"class":75},[69,50025,50026,50028,50030,50032,50034],{"class":71,"line":34165},[69,50027,34040],{"class":86},[69,50029,10719],{"class":82},[69,50031,34002],{"class":86},[69,50033,1583],{"class":90},[69,50035,1404],{"class":86},[69,50037,50038],{"class":71,"line":34171},[69,50039,34054],{"class":75},[69,50041,50042,50044,50046,50048,50050],{"class":71,"line":34182},[69,50043,4647],{"class":82},[69,50045,34062],{"class":86},[69,50047,27280],{"class":82},[69,50049,32842],{"class":90},[69,50051,34069],{"class":86},[69,50053,50054],{"class":71,"line":34188},[69,50055,34075],{"class":75},[69,50057,50058,50060,50062],{"class":71,"line":34208},[69,50059,33846],{"class":86},[69,50061,1019],{"class":82},[69,50063,33851],{"class":86},[69,50065,50066],{"class":71,"line":34224},[69,50067,34090],{"class":75},[69,50069,50070,50072,50074],{"class":71,"line":34230},[69,50071,33861],{"class":86},[69,50073,1019],{"class":82},[69,50075,33866],{"class":86},[69,50077,50078],{"class":71,"line":34244},[69,50079,34105],{"class":75},[69,50081,50082],{"class":71,"line":34250},[69,50083,34111],{"class":86},[69,50085,50086],{"class":71,"line":34256},[69,50087,37592],{"class":75},[69,50089,50090,50092],{"class":71,"line":34267},[69,50091,34117],{"class":82},[69,50093,34120],{"class":86},[69,50095,50096],{"class":71,"line":34273},[69,50097,34126],{"class":75},[69,50099,50100,50102,50104],{"class":71,"line":34279},[69,50101,37607],{"class":86},[69,50103,1019],{"class":82},[69,50105,33901],{"class":86},[69,50107,50108],{"class":71,"line":34289},[69,50109,34143],{"class":75},[69,50111,50112,50114,50116,50118,50120,50122,50124],{"class":71,"line":34295},[69,50113,37620],{"class":86},[69,50115,1019],{"class":82},[69,50117,33918],{"class":86},[69,50119,33921],{"class":6458},[69,50121,1019],{"class":82},[69,50123,1609],{"class":90},[69,50125,1404],{"class":86},[69,50127,50128],{"class":71,"line":34306},[69,50129,34168],{"class":75},[69,50131,50132,50134,50136],{"class":71,"line":34312},[69,50133,37641],{"class":86},[69,50135,1019],{"class":82},[69,50137,33944],{"class":86},[69,50139,50140],{"class":71,"line":34322},[69,50141,34185],{"class":75},[69,50143,50144,50146,50148,50150,50152,50154,50156],{"class":71,"line":34327},[69,50145,37654],{"class":86},[69,50147,10719],{"class":82},[69,50149,37659],{"class":86},[69,50151,1843],{"class":82},[69,50153,34002],{"class":86},[69,50155,1583],{"class":90},[69,50157,1404],{"class":86},[69,50159,50160,50162,50164,50166,50168],{"class":71,"line":34333},[69,50161,37672],{"class":86},[69,50163,10719],{"class":82},[69,50165,34023],{"class":86},[69,50167,4193],{"class":82},[69,50169,34028],{"class":86},[69,50171,50172],{"class":71,"line":34382},[69,50173,37685],{"class":75},[69,50175,50176,50178,50180,50182,50184],{"class":71,"line":34429},[69,50177,37690],{"class":86},[69,50179,10719],{"class":82},[69,50181,34002],{"class":86},[69,50183,1583],{"class":90},[69,50185,1404],{"class":86},[69,50187,50188],{"class":71,"line":34434},[69,50189,34247],{"class":75},[69,50191,50192],{"class":71,"line":34440},[69,50193,34253],{"class":75},[69,50195,50196,50198,50200],{"class":71,"line":34459},[69,50197,34259],{"class":86},[69,50199,1972],{"class":82},[69,50201,34264],{"class":86},[69,50203,50204],{"class":71,"line":34465},[69,50205,34270],{"class":75},[69,50207,50208],{"class":71,"line":34485},[69,50209,34276],{"class":75},[69,50211,50212,50214,50216],{"class":71,"line":34491},[69,50213,34282],{"class":86},[69,50215,1972],{"class":82},[69,50217,34264],{"class":86},[69,50219,50220],{"class":71,"line":34497},[69,50221,34292],{"class":75},[69,50223,50224,50226,50228],{"class":71,"line":34507},[69,50225,34298],{"class":86},[69,50227,1972],{"class":82},[69,50229,34303],{"class":86},[69,50231,50232],{"class":71,"line":34512},[69,50233,34309],{"class":75},[69,50235,50236,50238,50240],{"class":71,"line":34518},[69,50237,34315],{"class":86},[69,50239,1972],{"class":82},[69,50241,34303],{"class":86},[69,50243,50244],{"class":71,"line":34534},[69,50245,3644],{"emptyLinePlaceholder":1325},[69,50247,50248],{"class":71,"line":34579},[69,50249,34330],{"class":75},[69,50251,50252,50254,50256,50258,50260,50262,50264,50266,50268,50270,50272,50274,50276,50278,50280,50282,50284,50286,50288,50290],{"class":71,"line":34585},[69,50253,33687],{"class":90},[69,50255,1398],{"class":86},[69,50257,4836],{"class":1022},[69,50259,33695],{"class":90},[69,50261,34344],{"class":1022},[69,50263,2283],{"class":90},[69,50265,34349],{"class":82},[69,50267,2332],{"class":90},[69,50269,34354],{"class":1022},[69,50271,2283],{"class":90},[69,50273,34349],{"class":82},[69,50275,2332],{"class":90},[69,50277,4836],{"class":1022},[69,50279,34365],{"class":86},[69,50281,1920],{"class":82},[69,50283,1609],{"class":90},[69,50285,34372],{"class":86},[69,50287,1920],{"class":82},[69,50289,1609],{"class":90},[69,50291,34379],{"class":86},[69,50293,50294,50296,50298,50300,50302,50304,50306,50308,50310,50312,50314,50316,50318,50320,50322,50324,50326,50328,50330,50332],{"class":71,"line":34591},[69,50295,33687],{"class":90},[69,50297,1398],{"class":86},[69,50299,4836],{"class":1022},[69,50301,33695],{"class":90},[69,50303,34393],{"class":1022},[69,50305,2283],{"class":90},[69,50307,34349],{"class":82},[69,50309,2332],{"class":90},[69,50311,34402],{"class":1022},[69,50313,2283],{"class":90},[69,50315,34349],{"class":82},[69,50317,2332],{"class":90},[69,50319,4836],{"class":1022},[69,50321,34413],{"class":86},[69,50323,1920],{"class":82},[69,50325,1609],{"class":90},[69,50327,34420],{"class":86},[69,50329,1920],{"class":82},[69,50331,1609],{"class":90},[69,50333,34379],{"class":86},[69,50335,50336],{"class":71,"line":34597},[69,50337,3644],{"emptyLinePlaceholder":1325},[69,50339,50340],{"class":71,"line":34608},[69,50341,34437],{"class":75},[69,50343,50344,50346,50348,50350,50352,50354,50356],{"class":71,"line":34614},[69,50345,3741],{"class":82},[69,50347,34445],{"class":86},[69,50349,1920],{"class":82},[69,50351,1609],{"class":90},[69,50353,2326],{"class":86},[69,50355,2346],{"class":82},[69,50357,34456],{"class":86},[69,50359,50360],{"class":71,"line":34620},[69,50361,34462],{"class":75},[69,50363,50364,50366,50368,50370,50372,50374,50376],{"class":71,"line":34626},[69,50365,34468],{"class":86},[69,50367,1436],{"class":90},[69,50369,1019],{"class":82},[69,50371,34475],{"class":86},[69,50373,1920],{"class":82},[69,50375,1609],{"class":90},[69,50377,34482],{"class":86},[69,50379,50380],{"class":71,"line":34644},[69,50381,34488],{"class":75},[69,50383,50384],{"class":71,"line":34658},[69,50385,34494],{"class":75},[69,50387,50388,50390,50392],{"class":71,"line":34667},[69,50389,34500],{"class":86},[69,50391,1019],{"class":82},[69,50393,33550],{"class":86},[69,50395,50396],{"class":71,"line":34676},[69,50397,3644],{"emptyLinePlaceholder":1325},[69,50399,50400],{"class":71,"line":34685},[69,50401,34515],{"class":75},[69,50403,50404,50406,50408,50410,50412],{"class":71,"line":34694},[69,50405,34521],{"class":86},[69,50407,1019],{"class":82},[69,50409,34526],{"class":86},[69,50411,1920],{"class":82},[69,50413,34531],{"class":86},[69,50415,50416,50418,50420,50422,50424,50426,50428,50430,50432,50434,50436,50438,50440,50442,50444,50446,50448,50450],{"class":71,"line":34700},[69,50417,33687],{"class":90},[69,50419,1398],{"class":86},[69,50421,34541],{"class":1022},[69,50423,2283],{"class":90},[69,50425,34546],{"class":82},[69,50427,2332],{"class":90},[69,50429,1932],{"class":1022},[69,50431,2283],{"class":90},[69,50433,34546],{"class":82},[69,50435,2332],{"class":90},[69,50437,34559],{"class":1022},[69,50439,34562],{"class":86},[69,50441,34565],{"class":82},[69,50443,2294],{"class":90},[69,50445,34570],{"class":86},[69,50447,127],{"class":82},[69,50449,2294],{"class":90},[69,50451,31733],{"class":86},[69,50453,50454],{"class":71,"line":34706},[69,50455,37969],{"class":75},[69,50457,50458],{"class":71,"line":34714},[69,50459,37974],{"class":75},[69,50461,50462,50464,50466],{"class":71,"line":34719},[69,50463,37979],{"class":86},[69,50465,34603],{"class":1022},[69,50467,1404],{"class":86},[69,50469,50470],{"class":71,"line":34725},[69,50471,34623],{"class":75},[69,50473,50474,50476,50478,50480,50482,50484],{"class":71,"line":34736},[69,50475,34629],{"class":86},[69,50477,1019],{"class":82},[69,50479,34634],{"class":86},[69,50481,34637],{"class":6458},[69,50483,1019],{"class":82},[69,50485,2797],{"class":86},[69,50487,50488,50490,50492,50494],{"class":71,"line":34742},[69,50489,34647],{"class":1022},[69,50491,2246],{"class":86},[69,50493,34652],{"class":90},[69,50495,34655],{"class":86},[69,50497,50498,50500],{"class":71,"line":34762},[69,50499,34661],{"class":1022},[69,50501,34664],{"class":86},[69,50503,50504,50506],{"class":71,"line":34768},[69,50505,34670],{"class":1022},[69,50507,34673],{"class":86},[69,50509,50510,50512],{"class":71,"line":34774},[69,50511,34679],{"class":1022},[69,50513,34682],{"class":86},[69,50515,50516,50518],{"class":71,"line":34780},[69,50517,34688],{"class":1022},[69,50519,34691],{"class":86},[69,50521,50522],{"class":71,"line":34797},[69,50523,34697],{"class":86},[69,50525,50526],{"class":71,"line":34803},[69,50527,34703],{"class":75},[69,50529,50530,50532],{"class":71,"line":34809},[69,50531,5334],{"class":82},[69,50533,34711],{"class":86},[69,50535,50536],{"class":71,"line":34815},[69,50537,3644],{"emptyLinePlaceholder":1325},[69,50539,50540],{"class":71,"line":34821},[69,50541,34722],{"class":75},[69,50543,50544,50546,50548],{"class":71,"line":34827},[69,50545,33183],{"class":82},[69,50547,34730],{"class":109},[69,50549,34733],{"class":86},[69,50551,50552],{"class":71,"line":34854},[69,50553,34739],{"class":75},[69,50555,50556,50558,50560,50562,50564,50566,50568,50570],{"class":71,"line":34878},[69,50557,34745],{"class":86},[69,50559,32929],{"class":6458},[69,50561,1019],{"class":82},[69,50563,1398],{"class":86},[69,50565,1886],{"class":90},[69,50567,1767],{"class":86},[69,50569,1684],{"class":90},[69,50571,31733],{"class":86},[69,50573,50574],{"class":71,"line":34884},[69,50575,34765],{"class":75},[69,50577,50578],{"class":71,"line":34890},[69,50579,34771],{"class":75},[69,50581,50582],{"class":71,"line":34896},[69,50583,34777],{"class":75},[69,50585,50586,50588,50590,50592,50594,50596,50598],{"class":71,"line":34907},[69,50587,32963],{"class":86},[69,50589,1609],{"class":90},[69,50591,1767],{"class":86},[69,50593,1471],{"class":90},[69,50595,1767],{"class":86},[69,50597,1609],{"class":90},[69,50599,1404],{"class":86},[69,50601,50602],{"class":71,"line":34918},[69,50603,34800],{"class":75},[69,50605,50606],{"class":71,"line":34924},[69,50607,34806],{"class":75},[69,50609,50610],{"class":71,"line":34941},[69,50611,34812],{"class":75},[69,50613,50614],{"class":71,"line":34964},[69,50615,34818],{"class":75},[69,50617,50618],{"class":71,"line":34987},[69,50619,34824],{"class":75},[69,50621,50622,50624,50626,50628,50630,50632,50634,50636,50638],{"class":71,"line":34993},[69,50623,34830],{"class":86},[69,50625,34833],{"class":1022},[69,50627,34836],{"class":86},[69,50629,34839],{"class":1022},[69,50631,1767],{"class":86},[69,50633,34844],{"class":6458},[69,50635,1019],{"class":82},[69,50637,34849],{"class":1022},[69,50639,1404],{"class":86},[69,50641,50642,50644,50646,50648,50650,50652,50654,50656,50658],{"class":71,"line":34998},[69,50643,34830],{"class":86},[69,50645,34833],{"class":1022},[69,50647,34861],{"class":86},[69,50649,34864],{"class":1022},[69,50651,1767],{"class":86},[69,50653,34844],{"class":6458},[69,50655,1019],{"class":82},[69,50657,34873],{"class":1022},[69,50659,1404],{"class":86},[69,50661,50662],{"class":71,"line":35007},[69,50663,34881],{"class":75},[69,50665,50666],{"class":71,"line":35017},[69,50667,34887],{"class":86},[69,50669,50670],{"class":71,"line":35023},[69,50671,34893],{"class":75},[69,50673,50674,50676,50678],{"class":71,"line":35028},[69,50675,34899],{"class":86},[69,50677,34902],{"class":1022},[69,50679,1404],{"class":86},[69,50681,50682,50684,50686],{"class":71,"line":35034},[69,50683,34910],{"class":86},[69,50685,34913],{"class":1022},[69,50687,1404],{"class":86},[69,50689,50690],{"class":71,"line":35047},[69,50691,34921],{"class":75},[69,50693,50694,50696,50698,50700,50702,50704,50706],{"class":71,"line":35053},[69,50695,32963],{"class":86},[69,50697,1609],{"class":90},[69,50699,1767],{"class":86},[69,50701,1471],{"class":90},[69,50703,1767],{"class":86},[69,50705,1471],{"class":90},[69,50707,1404],{"class":86},[69,50709,50710,50712,50714,50716,50718,50720,50722,50724,50726],{"class":71,"line":35064},[69,50711,34830],{"class":86},[69,50713,34833],{"class":1022},[69,50715,34948],{"class":86},[69,50717,34839],{"class":1022},[69,50719,1767],{"class":86},[69,50721,34844],{"class":6458},[69,50723,1019],{"class":82},[69,50725,34959],{"class":1022},[69,50727,1404],{"class":86},[69,50729,50730,50732,50734,50736,50738,50740,50742,50744,50746],{"class":71,"line":35075},[69,50731,34830],{"class":86},[69,50733,34833],{"class":1022},[69,50735,34971],{"class":86},[69,50737,34864],{"class":1022},[69,50739,1767],{"class":86},[69,50741,34844],{"class":6458},[69,50743,1019],{"class":82},[69,50745,34982],{"class":1022},[69,50747,1404],{"class":86},[69,50749,50750],{"class":71,"line":35094},[69,50751,34990],{"class":75},[69,50753,50755],{"class":71,"line":50754},219,[69,50756,34887],{"class":86},[69,50758,50760,50762,50764],{"class":71,"line":50759},220,[69,50761,34899],{"class":86},[69,50763,34833],{"class":1022},[69,50765,1404],{"class":86},[69,50767,50769,50771,50773],{"class":71,"line":50768},221,[69,50770,34910],{"class":86},[69,50772,35012],{"class":1022},[69,50774,1404],{"class":86},[69,50776,50778],{"class":71,"line":50777},222,[69,50779,35020],{"class":86},[69,50781,50783],{"class":71,"line":50782},223,[69,50784,3644],{"emptyLinePlaceholder":1325},[69,50786,50788],{"class":71,"line":50787},224,[69,50789,35031],{"class":75},[69,50791,50793,50795,50797,50799,50801],{"class":71,"line":50792},225,[69,50794,2782],{"class":82},[69,50796,32456],{"class":90},[69,50798,4193],{"class":82},[69,50800,32461],{"class":1022},[69,50802,4983],{"class":86},[69,50804,50806],{"class":71,"line":50805},226,[69,50807,35050],{"class":75},[69,50809,50811,50813,50815],{"class":71,"line":50810},227,[69,50812,45782],{"class":86},[69,50814,1019],{"class":82},[69,50816,45787],{"class":86},[69,50818,50820,50822,50824],{"class":71,"line":50819},228,[69,50821,35067],{"class":86},[69,50823,1019],{"class":82},[69,50825,35072],{"class":86},[69,50827,50829,50831,50833,50835,50837,50839,50841],{"class":71,"line":50828},229,[69,50830,34629],{"class":86},[69,50832,1019],{"class":82},[69,50834,45804],{"class":86},[69,50836,35085],{"class":6458},[69,50838,1019],{"class":82},[69,50840,2294],{"class":90},[69,50842,1404],{"class":86},[69,50844,50846],{"class":71,"line":50845},230,[69,50847,35097],{"class":86},[23237,50849,50851],{"id":50850},"_242测试代码","2.4.2.测试代码",[29,50853,50854],{},"使用测试集进行测试与推理",[59,50856,50858],{"className":31614,"code":50857,"language":31616,"meta":64,"style":64},"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",[66,50859,50860,50866,50876,50886,50897,50907,50911,50915,50923,50928,50932,50949,50953,50957,50961,50965,50969,51001,51005,51013,51017,51029,51033,51037,51041,51045,51049,51053,51057,51061,51079,51093,51097,51107,51117,51127,51133,51137,51141,51149,51153,51169,51177,51181,51185,51193,51201,51205,51209,51213,51217,51223,51227,51237,51245,51253,51257,51261,51265,51273,51277,51293,51297,51301,51305,51317,51321,51333,51337,51341,51353,51357,51367,51371,51375,51387,51391,51399,51403,51407,51415,51419,51427,51431,51435,51439,51443,51447,51463,51471,51475,51479,51497,51503,51507,51517,51525,51533,51537,51541,51545,51549,51557,51561,51577,51581,51589,51597],{"__ignoreMap":64},[69,50861,50862,50864],{"class":71,"line":72},[69,50863,31628],{"class":82},[69,50865,31631],{"class":86},[69,50867,50868,50870,50872,50874],{"class":71,"line":79},[69,50869,31628],{"class":82},[69,50871,32651],{"class":86},[69,50873,32619],{"class":82},[69,50875,32656],{"class":86},[69,50877,50878,50880,50882,50884],{"class":71,"line":106},[69,50879,31973],{"class":82},[69,50881,32634],{"class":86},[69,50883,31628],{"class":82},[69,50885,32639],{"class":86},[69,50887,50888,50890,50892,50894],{"class":71,"line":116},[69,50889,31973],{"class":82},[69,50891,32604],{"class":86},[69,50893,31628],{"class":82},[69,50895,50896],{"class":86}," ImageFolder\n",[69,50898,50899,50901,50903,50905],{"class":71,"line":133},[69,50900,31973],{"class":82},[69,50902,33150],{"class":86},[69,50904,31628],{"class":82},[69,50906,45876],{"class":86},[69,50908,50909],{"class":71,"line":139},[69,50910,3644],{"emptyLinePlaceholder":1325},[69,50912,50913],{"class":71,"line":401},[69,50914,35187],{"class":75},[69,50916,50917,50919,50921],{"class":71,"line":470},[69,50918,33183],{"class":82},[69,50920,35194],{"class":109},[69,50922,33189],{"class":86},[69,50924,50925],{"class":71,"line":475},[69,50926,50927],{"class":75},"   # 导入自己的数据集，并进行数据处理\n",[69,50929,50930],{"class":71,"line":482},[69,50931,49197],{"class":75},[69,50933,50934,50936,50938,50940,50942,50944,50947],{"class":71,"line":497},[69,50935,49202],{"class":90},[69,50937,1019],{"class":82},[69,50939,2057],{"class":82},[69,50941,1642],{"class":1022},[69,50943,1946],{"class":90},[69,50945,50946],{"class":49213},"\u002Fdata\u002Ftest",[69,50948,26370],{"class":1022},[69,50950,50951],{"class":71,"line":502},[69,50952,3644],{"emptyLinePlaceholder":1325},[69,50954,50955],{"class":71,"line":509},[69,50956,49225],{"class":75},[69,50958,50959],{"class":71,"line":524},[69,50960,49230],{"class":75},[69,50962,50963],{"class":71,"line":2888},[69,50964,49235],{"class":75},[69,50966,50967],{"class":71,"line":2893},[69,50968,49240],{"class":75},[69,50970,50971,50973,50975,50977,50979,50981,50983,50985,50987,50989,50991,50993,50995,50997,50999],{"class":71,"line":2899},[69,50972,49245],{"class":86},[69,50974,1019],{"class":82},[69,50976,49250],{"class":86},[69,50978,49253],{"class":90},[69,50980,1767],{"class":86},[69,50982,49258],{"class":90},[69,50984,1767],{"class":86},[69,50986,49263],{"class":90},[69,50988,49266],{"class":86},[69,50990,49269],{"class":90},[69,50992,1767],{"class":86},[69,50994,49274],{"class":90},[69,50996,1767],{"class":86},[69,50998,49279],{"class":90},[69,51000,5901],{"class":86},[69,51002,51003],{"class":71,"line":2919},[69,51004,49286],{"class":75},[69,51006,51007,51009,51011],{"class":71,"line":2924},[69,51008,49291],{"class":86},[69,51010,1019],{"class":82},[69,51012,49296],{"class":86},[69,51014,51015],{"class":71,"line":2938},[69,51016,49301],{"class":75},[69,51018,51019,51021,51023,51025,51027],{"class":71,"line":2943},[69,51020,49306],{"class":86},[69,51022,32737],{"class":90},[69,51024,1767],{"class":86},[69,51026,32737],{"class":90},[69,51028,43858],{"class":86},[69,51030,51031],{"class":71,"line":2972},[69,51032,49319],{"class":75},[69,51034,51035],{"class":71,"line":2977},[69,51036,49324],{"class":86},[69,51038,51039],{"class":71,"line":2994},[69,51040,49329],{"class":86},[69,51042,51043],{"class":71,"line":2999},[69,51044,49334],{"class":75},[69,51046,51047],{"class":71,"line":3004},[69,51048,49339],{"class":75},[69,51050,51051],{"class":71,"line":3009},[69,51052,3644],{"emptyLinePlaceholder":1325},[69,51054,51055],{"class":71,"line":3023},[69,51056,49348],{"class":75},[69,51058,51059],{"class":71,"line":3028},[69,51060,49353],{"class":75},[69,51062,51063,51065,51067,51069,51071,51073,51075,51077],{"class":71,"line":3821},[69,51064,35201],{"class":86},[69,51066,1019],{"class":82},[69,51068,49362],{"class":86},[69,51070,49365],{"class":90},[69,51072,1767],{"class":86},[69,51074,49370],{"class":6458},[69,51076,1019],{"class":82},[69,51078,49375],{"class":86},[69,51080,51081,51083,51085,51087,51089,51091],{"class":71,"line":3835},[69,51082,35258],{"class":86},[69,51084,1019],{"class":82},[69,51086,32770],{"class":86},[69,51088,32773],{"class":6458},[69,51090,1019],{"class":82},[69,51092,35269],{"class":86},[69,51094,51095],{"class":71,"line":3843},[69,51096,35274],{"class":75},[69,51098,51099,51101,51103,51105],{"class":71,"line":3848},[69,51100,35279],{"class":6458},[69,51102,1019],{"class":82},[69,51104,1609],{"class":90},[69,51106,32702],{"class":86},[69,51108,51109,51111,51113,51115],{"class":71,"line":3854},[69,51110,35290],{"class":6458},[69,51112,1019],{"class":82},[69,51114,32712],{"class":90},[69,51116,32702],{"class":86},[69,51118,51119,51121,51123,51125],{"class":71,"line":3860},[69,51120,35301],{"class":6458},[69,51122,1019],{"class":82},[69,51124,1583],{"class":90},[69,51126,1404],{"class":86},[69,51128,51129,51131],{"class":71,"line":3865},[69,51130,5334],{"class":82},[69,51132,35314],{"class":86},[69,51134,51135],{"class":71,"line":9190},[69,51136,3644],{"emptyLinePlaceholder":1325},[69,51138,51139],{"class":71,"line":9214},[69,51140,35323],{"class":75},[69,51142,51143,51145,51147],{"class":71,"line":9219},[69,51144,33183],{"class":82},[69,51146,35330],{"class":109},[69,51148,35333],{"class":86},[69,51150,51151],{"class":71,"line":9225},[69,51152,35338],{"class":75},[69,51154,51155,51157,51159,51161,51163,51165,51167],{"class":71,"line":9252},[69,51156,32473],{"class":86},[69,51158,1019],{"class":82},[69,51160,32480],{"class":1022},[69,51162,2949],{"class":82},[69,51164,32485],{"class":86},[69,51166,2946],{"class":82},[69,51168,35355],{"class":1022},[69,51170,51171,51173,51175],{"class":71,"line":9257},[69,51172,32525],{"class":86},[69,51174,1019],{"class":82},[69,51176,33525],{"class":86},[69,51178,51179],{"class":71,"line":9263},[69,51180,3644],{"emptyLinePlaceholder":1325},[69,51182,51183],{"class":71,"line":9275},[69,51184,35372],{"class":75},[69,51186,51187,51189,51191],{"class":71,"line":9287},[69,51188,35377],{"class":86},[69,51190,1019],{"class":82},[69,51192,33578],{"class":90},[69,51194,51195,51197,51199],{"class":71,"line":9299},[69,51196,35386],{"class":86},[69,51198,1019],{"class":82},[69,51200,4329],{"class":90},[69,51202,51203],{"class":71,"line":10958},[69,51204,3644],{"emptyLinePlaceholder":1325},[69,51206,51207],{"class":71,"line":10983},[69,51208,35399],{"class":75},[69,51210,51211],{"class":71,"line":11006},[69,51212,35404],{"class":75},[69,51214,51215],{"class":71,"line":11030},[69,51216,35409],{"class":75},[69,51218,51219,51221],{"class":71,"line":11035},[69,51220,35414],{"class":82},[69,51222,34120],{"class":86},[69,51224,51225],{"class":71,"line":11040},[69,51226,35421],{"class":75},[69,51228,51229,51231,51233,51235],{"class":71,"line":11045},[69,51230,4647],{"class":82},[69,51232,35428],{"class":86},[69,51234,27280],{"class":82},[69,51236,35433],{"class":86},[69,51238,51239,51241,51243],{"class":71,"line":11054},[69,51240,35438],{"class":86},[69,51242,1019],{"class":82},[69,51244,35443],{"class":86},[69,51246,51247,51249,51251],{"class":71,"line":11059},[69,51248,35448],{"class":86},[69,51250,1019],{"class":82},[69,51252,35453],{"class":86},[69,51254,51255],{"class":71,"line":11065},[69,51256,35458],{"class":75},[69,51258,51259],{"class":71,"line":11086},[69,51260,34111],{"class":86},[69,51262,51263],{"class":71,"line":11092},[69,51264,35467],{"class":75},[69,51266,51267,51269,51271],{"class":71,"line":11106},[69,51268,33896],{"class":86},[69,51270,1019],{"class":82},[69,51272,35476],{"class":86},[69,51274,51275],{"class":71,"line":11112},[69,51276,35481],{"class":75},[69,51278,51279,51281,51283,51285,51287,51289,51291],{"class":71,"line":11139},[69,51280,33913],{"class":86},[69,51282,1019],{"class":82},[69,51284,33918],{"class":86},[69,51286,33921],{"class":6458},[69,51288,1019],{"class":82},[69,51290,1609],{"class":90},[69,51292,1404],{"class":86},[69,51294,51295],{"class":71,"line":11148},[69,51296,35502],{"class":75},[69,51298,51299],{"class":71,"line":11154},[69,51300,35507],{"class":75},[69,51302,51303],{"class":71,"line":11162},[69,51304,35512],{"class":75},[69,51306,51307,51309,51311,51313,51315],{"class":71,"line":11167},[69,51308,35517],{"class":86},[69,51310,10719],{"class":82},[69,51312,34023],{"class":86},[69,51314,4193],{"class":82},[69,51316,35526],{"class":86},[69,51318,51319],{"class":71,"line":17843},[69,51320,35531],{"class":75},[69,51322,51323,51325,51327,51329,51331],{"class":71,"line":17849},[69,51324,35536],{"class":86},[69,51326,10719],{"class":82},[69,51328,35541],{"class":86},[69,51330,1583],{"class":90},[69,51332,1404],{"class":86},[69,51334,51335],{"class":71,"line":17872},[69,51336,3644],{"emptyLinePlaceholder":1325},[69,51338,51339],{"class":71,"line":17878},[69,51340,35554],{"class":75},[69,51342,51343,51345,51347,51349,51351],{"class":71,"line":17901},[69,51344,35559],{"class":86},[69,51346,1019],{"class":82},[69,51348,35564],{"class":86},[69,51350,1972],{"class":82},[69,51352,35569],{"class":86},[69,51354,51355],{"class":71,"line":17915},[69,51356,35574],{"class":75},[69,51358,51359,51361,51363,51365],{"class":71,"line":17935},[69,51360,33687],{"class":90},[69,51362,1398],{"class":86},[69,51364,35583],{"class":1022},[69,51366,35586],{"class":86},[69,51368,51369],{"class":71,"line":17941},[69,51370,3644],{"emptyLinePlaceholder":1325},[69,51372,51373],{"class":71,"line":17952},[69,51374,35595],{"class":75},[69,51376,51377,51379,51381,51383,51385],{"class":71,"line":17975},[69,51378,2782],{"class":82},[69,51380,32456],{"class":90},[69,51382,4193],{"class":82},[69,51384,32461],{"class":1022},[69,51386,4983],{"class":86},[69,51388,51389],{"class":71,"line":17997},[69,51390,35612],{"class":75},[69,51392,51393,51395,51397],{"class":71,"line":18002},[69,51394,32525],{"class":86},[69,51396,1019],{"class":82},[69,51398,45787],{"class":86},[69,51400,51401],{"class":71,"line":18008},[69,51402,35625],{"class":75},[69,51404,51405],{"class":71,"line":18022},[69,51406,35630],{"class":75},[69,51408,51409,51411,51413],{"class":71,"line":18035},[69,51410,35635],{"class":86},[69,51412,35638],{"class":1022},[69,51414,31733],{"class":86},[69,51416,51417],{"class":71,"line":18040},[69,51418,35645],{"class":75},[69,51420,51421,51423,51425],{"class":71,"line":18054},[69,51422,35258],{"class":86},[69,51424,1019],{"class":82},[69,51426,35654],{"class":86},[69,51428,51429],{"class":71,"line":18059},[69,51430,35659],{"class":75},[69,51432,51433],{"class":71,"line":18065},[69,51434,35664],{"class":86},[69,51436,51437],{"class":71,"line":18070},[69,51438,3644],{"emptyLinePlaceholder":1325},[69,51440,51441],{"class":71,"line":18084},[69,51442,35673],{"class":75},[69,51444,51445],{"class":71,"line":18089},[69,51446,35678],{"class":75},[69,51448,51449,51451,51453,51455,51457,51459,51461],{"class":71,"line":18094},[69,51450,32473],{"class":86},[69,51452,1019],{"class":82},[69,51454,32480],{"class":1022},[69,51456,2949],{"class":82},[69,51458,32485],{"class":86},[69,51460,2946],{"class":82},[69,51462,35355],{"class":1022},[69,51464,51465,51467,51469],{"class":71,"line":18108},[69,51466,32525],{"class":86},[69,51468,1019],{"class":82},[69,51470,33525],{"class":86},[69,51472,51473],{"class":71,"line":18120},[69,51474,35707],{"class":75},[69,51476,51477],{"class":71,"line":18125},[69,51478,35712],{"class":75},[69,51480,51481,51483,51485,51487,51490,51492,51495],{"class":71,"line":18138},[69,51482,35717],{"class":86},[69,51484,1019],{"class":82},[69,51486,2277],{"class":86},[69,51488,51489],{"class":1022},"'猫'",[69,51491,1767],{"class":86},[69,51493,51494],{"class":1022},"'狗'",[69,51496,34482],{"class":86},[69,51498,51499,51501],{"class":71,"line":18143},[69,51500,35414],{"class":82},[69,51502,34120],{"class":86},[69,51504,51505],{"class":71,"line":18148},[69,51506,35782],{"class":75},[69,51508,51509,51511,51513,51515],{"class":71,"line":18153},[69,51510,4647],{"class":82},[69,51512,35789],{"class":86},[69,51514,27280],{"class":82},[69,51516,35433],{"class":86},[69,51518,51519,51521,51523],{"class":71,"line":18166},[69,51520,33846],{"class":86},[69,51522,1019],{"class":82},[69,51524,33851],{"class":86},[69,51526,51527,51529,51531],{"class":71,"line":18171},[69,51528,33861],{"class":86},[69,51530,1019],{"class":82},[69,51532,33866],{"class":86},[69,51534,51535],{"class":71,"line":33869},[69,51536,3644],{"emptyLinePlaceholder":1325},[69,51538,51539],{"class":71,"line":33875},[69,51540,35818],{"class":75},[69,51542,51543],{"class":71,"line":33881},[69,51544,34111],{"class":86},[69,51546,51547],{"class":71,"line":33887},[69,51548,35827],{"class":75},[69,51550,51551,51553,51555],{"class":71,"line":33893},[69,51552,33896],{"class":86},[69,51554,1019],{"class":82},[69,51556,33901],{"class":86},[69,51558,51559],{"class":71,"line":33904},[69,51560,35840],{"class":75},[69,51562,51563,51565,51567,51569,51571,51573,51575],{"class":71,"line":33910},[69,51564,33913],{"class":86},[69,51566,1019],{"class":82},[69,51568,33918],{"class":86},[69,51570,33921],{"class":6458},[69,51572,1019],{"class":82},[69,51574,1609],{"class":90},[69,51576,1404],{"class":86},[69,51578,51579],{"class":71,"line":33930},[69,51580,35861],{"class":75},[69,51582,51583,51585,51587],{"class":71,"line":33936},[69,51584,35866],{"class":86},[69,51586,1019],{"class":82},[69,51588,35871],{"class":86},[69,51590,51591,51593,51595],{"class":71,"line":33947},[69,51592,35876],{"class":86},[69,51594,1019],{"class":82},[69,51596,35881],{"class":86},[69,51598,51599,51601,51603,51605,51607,51609,51611,51613],{"class":71,"line":33953},[69,51600,35886],{"class":90},[69,51602,1398],{"class":86},[69,51604,35891],{"class":1022},[69,51606,35894],{"class":86},[69,51608,35897],{"class":1022},[69,51610,1767],{"class":86},[69,51612,35902],{"class":1022},[69,51614,35905],{"class":86},[1297,51616,51617],{},"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":64,"searchDepth":79,"depth":79,"links":51619},[51620,51621,51622,51623],{"id":31827,"depth":106,"text":31828},{"id":39075,"depth":106,"text":39076},{"id":42508,"depth":106,"text":42509},{"id":46517,"depth":106,"text":46518},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31819,"description":1322},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51630,"title":51631,"body":51632,"description":1322,"extension":1323,"meta":51639,"navigation":1325,"path":51640,"seo":51641,"stem":51642,"__hash__":51643},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51633,"toc":51637},[51634],[10,51635,51631],{"id":51636},"_3yolo模型学习",{"title":64,"searchDepth":79,"depth":79,"links":51638},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51631,"description":1322},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51645,"title":51646,"body":51647,"description":51654,"extension":1323,"meta":51655,"navigation":1325,"path":51657,"seo":51658,"stem":51659,"__hash__":51660},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51648,"toc":51652},[51649],[29,51650,51651],{},"yolo模型还未补充",{"title":64,"searchDepth":79,"depth":79,"links":51653},[],"深度学习学习",{"category":51656},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51646,"description":51654},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51662,"title":51663,"body":51664,"description":1322,"extension":1323,"meta":51689,"navigation":1325,"path":51690,"seo":51691,"stem":51692,"__hash__":51693},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51665,"toc":51687},[51666,51669,51672,51677,51684],[10,51667,51663],{"id":51668},"_1工具",[29,51670,51671],{},"提示错误插件：有问题会提前报错",[29,51673,51674],{},[24,51675],{"alt":64,"src":51676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[29,51678,51679],{},[187,51680,51683],{"href":51681,"rel":51682},"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",[191],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[29,51685,51686],{},"alt键加上下箭头可以实现语句的移动",{"title":64,"searchDepth":79,"depth":79,"links":51688},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51663,"description":1322},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51695,"title":51696,"body":51697,"description":1322,"extension":1323,"meta":54553,"navigation":1325,"path":54554,"seo":54555,"stem":54556,"__hash__":54557},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51698,"toc":54504},[51699,51702,51706,51710,51715,51718,51723,51727,51734,51739,51746,51751,51758,51763,51767,51772,51775,51779,51784,51788,51793,51796,51799,51802,51805,51808,51811,51814,51817,51822,51827,51832,51836,51839,51842,51846,51851,51854,51862,51867,51883,51891,51896,51901,51906,51911,51916,51919,51924,51929,51933,51942,51947,51952,51956,51961,51964,51968,51973,51981,51986,51991,51994,51999,52004,52009,52012,52015,52018,52023,52028,52031,52036,52039,52044,52047,52050,52053,52058,52061,52064,52079,52084,52089,52094,52097,52100,52103,52117,52120,52125,52130,52133,52136,52139,52142,52145,52148,52151,52155,52159,52164,52168,52171,52176,52181,52184,52189,52192,52196,52201,52204,52207,52210,52213,52216,52219,52222,52225,52228,52232,52237,52242,52247,52250,52253,52257,52262,52265,52269,52272,52275,52280,52283,52286,52290,52294,52297,52302,52307,52310,52339,52344,52349,52354,52359,52363,52368,52372,52377,52380,52384,52388,52393,52397,52402,52407,52411,52416,52419,52421,52424,52429,52433,52438,52442,52446,52451,52456,52461,52466,52470,52475,52480,52485,52488,52491,52496,52499,52504,52509,52514,52519,52523,53323,53327,53670,53675,53678,53681,53684,53687,53690,53693,53696,53699,53701,53704,53706,53709,53713,53718,53721,53724,53727,53731,53736,53741,53761,53764,53768,53773,53778,53795,53799,53828,53832,53854,53856,53895,53903,53909,53913,53916,53919,53924,53929,53932,53935,53938,53943,53948,53951,53954,53957,53960,53963,53966,53969,53972,53975,53978,53981,53983,53986,53989,53992,53995,53998,54001,54004,54007,54011,54016,54019,54024,54027,54030,54033,54036,54039,54042,54045,54047,54050,54053,54056,54059,54062,54065,54069,54072,54081,54084,54089,54092,54097,54100,54103,54106,54109,54112,54115,54118,54122,54126,54129,54132,54137,54142,54147,54151,54156,54161,54164,54167,54170,54173,54176,54181,54184,54189,54191,54196,54199,54203,54208,54211,54214,54219,54223,54226,54231,54234,54237,54266,54271,54274,54277,54280,54283,54286,54290,54293,54379,54383,54386,54391,54396,54403,54406,54409,54412,54415,54418,54423,54428,54431,54434,54437,54440,54443,54446,54449,54452,54455,54457,54460,54464,54469,54474,54479,54482,54487,54492,54495,54498,54501],[10,51700,51696],{"id":51701},"_2基础语法",[14,51703,51705],{"id":51704},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[19,51707,51709],{"id":51708},"_211-js组成","2.1.1 js组成",[37,51711,51712],{},[40,51713,51714],{},"js是编程语言，html和css不是编程语言，是标记语言",[29,51716,51717],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[37,51719,51720],{"start":79},[40,51721,51722],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[19,51724,51726],{"id":51725},"_212-js书写位置","2.1.2 js书写位置",[37,51728,51729],{},[40,51730,51731],{},[195,51732,51733],{},"内部 JavaScript",[29,51735,51736],{},[24,51737],{"alt":64,"src":51738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[37,51740,51741],{"start":79},[40,51742,51743],{},[195,51744,51745],{},"外部 JavaScript",[29,51747,51748],{},[24,51749],{"alt":64,"src":51750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[37,51752,51753],{"start":106},[40,51754,51755],{},[195,51756,51757],{},"内联 JavaScript",[29,51759,51760],{},[24,51761],{"alt":64,"src":51762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[19,51764,51766],{"id":51765},"_213-javascript注释","2.1.3 JavaScript注释",[29,51768,51769],{},[24,51770],{"alt":64,"src":51771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[29,51773,51774],{},"alt+shift+a一定要记住！",[19,51776,51778],{"id":51777},"_214-javascript结束符","2.1.4 JavaScript结束符",[29,51780,51781],{},[24,51782],{"alt":64,"src":51783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[19,51785,51787],{"id":51786},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[37,51789,51790],{},[40,51791,51792],{},"输出语法：",[29,51794,51795],{},"①document.write('要出的内容')",[29,51797,51798],{},"向body内输出内容；",[29,51800,51801],{},"如果输出的内容写的是标签，也会被解析cheng",[29,51803,51804],{},"②alert('要出的内容')",[29,51806,51807],{},"页面弹出警告对话框",[29,51809,51810],{},"③console.log('控制台打印')",[29,51812,51813],{},"控制台输出语法，程序员调试使用",[29,51815,51816],{},"输入log就行，自动生成：",[29,51818,51819],{},[24,51820],{"alt":64,"src":51821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[37,51823,51824],{"start":79},[40,51825,51826],{},"输入语法：",[29,51828,51829],{},[24,51830],{"alt":64,"src":51831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[19,51833,51835],{"id":51834},"_2116-字面量","21.1.6 字面量",[29,51837,51838],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[29,51840,51841],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51843,51845],{"id":51844},"_22-变量","2.2 变量",[37,51847,51848],{},[40,51849,51850],{},"变量声明",[29,51852,51853],{},"let 变量名",[162,51855,51856,51859],{},[40,51857,51858],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[40,51860,51861],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[37,51863,51864],{"start":79},[40,51865,51866],{},"变量赋值",[59,51868,51871],{"className":51869,"code":51870,"language":349,"meta":64,"style":64},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n",[66,51872,51873,51878],{"__ignoreMap":64},[69,51874,51875],{"class":71,"line":72},[69,51876,51877],{"class":86},"let age\n",[69,51879,51880],{"class":71,"line":79},[69,51881,51882],{"class":86},"age=18\n",[37,51884,51885,51888],{"start":106},[40,51886,51887],{},"连这些（变量的初始化）：let age=18",[40,51889,51890],{},"更新变量",[29,51892,51893],{},[24,51894],{"alt":64,"src":51895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[37,51897,51898],{"start":133},[40,51899,51900],{},"声明多个变量",[29,51902,51903],{},[24,51904],{"alt":64,"src":51905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[37,51907,51908],{"start":139},[40,51909,51910],{},"变量命名规则与规范",[29,51912,51913],{},[24,51914],{"alt":64,"src":51915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[29,51917,51918],{},"遵守小驼峰！",[37,51920,51921],{"start":401},[40,51922,51923],{},"变量拓展-let和var的区别",[29,51925,51926],{},[24,51927],{"alt":64,"src":51928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51930,51932],{"id":51931},"_23-数组","2.3 数组",[59,51934,51936],{"className":51869,"code":51935,"language":349,"meta":64,"style":64},"let arr = []\n",[66,51937,51938],{"__ignoreMap":64},[69,51939,51940],{"class":71,"line":72},[69,51941,51935],{"class":86},[29,51943,51944],{},[24,51945],{"alt":64,"src":51946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[29,51948,51949],{},[24,51950],{"alt":64,"src":51951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51953,51955],{"id":51954},"_24-常量","2.4 常量",[29,51957,51958],{},[24,51959],{"alt":64,"src":51960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[29,51962,51963],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51965,51967],{"id":51966},"_25-数据类型","2.5 数据类型",[29,51969,51970],{},[24,51971],{"alt":64,"src":51972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[37,51974,51975,51978],{},[40,51976,51977],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[40,51979,51980],{},"算数运算符：",[29,51982,51983],{},[24,51984],{"alt":64,"src":51985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[37,51987,51988],{"start":106},[40,51989,51990],{},"数字类型（Number）",[29,51992,51993],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[29,51995,51996],{},[24,51997],{"alt":64,"src":51998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[37,52000,52001],{"start":116},[40,52002,52003],{},"字符串类型（string）",[29,52005,52006],{},[24,52007],{"alt":64,"src":52008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[29,52010,52011],{},"反引号也是可以使用的",[29,52013,52014],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[29,52016,52017],{},"例如：document.write(\"我今年\"+age+\"岁\")",[37,52019,52020],{"start":133},[40,52021,52022],{},"模板字符串",[29,52024,52025],{},[24,52026],{"alt":64,"src":52027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[29,52029,52030],{},"类似于python的字符串格式化",[37,52032,52033],{"start":139},[40,52034,52035],{},"布尔类型",[29,52037,52038],{},"true 和 false",[37,52040,52041],{"start":401},[40,52042,52043],{},"未定义类型（underfined）",[29,52045,52046],{},"表示没有赋值",[29,52048,52049],{},"未定义类型是比较特殊的类型，只有一个值undefined",[29,52051,52052],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[37,52054,52055],{"start":470},[40,52056,52057],{},"null（空类型）",[29,52059,52060],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[29,52062,52063],{},"赋值了，但是内容为空",[59,52065,52067],{"className":51869,"code":52066,"language":349,"meta":64,"style":64},"typeof null\n输出的是'object'，是一个对象数据类型\n",[66,52068,52069,52074],{"__ignoreMap":64},[69,52070,52071],{"class":71,"line":72},[69,52072,52073],{"class":86},"typeof null\n",[69,52075,52076],{"class":71,"line":79},[69,52077,52078],{"class":86},"输出的是'object'，是一个对象数据类型\n",[37,52080,52081],{"start":475},[40,52082,52083],{},"控制台检测数据类型",[29,52085,52086],{},[24,52087],{"alt":64,"src":52088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[37,52090,52091],{"start":482},[40,52092,52093],{},"类型转换",[29,52095,52096],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[29,52098,52099],{},"转换方式：隐式转换和显示转换",[29,52101,52102],{},"①隐式转换",[162,52104,52105,52108,52111,52114],{},[40,52106,52107],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[40,52109,52110],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[40,52112,52113],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[40,52115,52116],{},"任何数据和字符串相加结果都是字符串",[29,52118,52119],{},"②显示转换",[29,52121,52122],{},[24,52123],{"alt":64,"src":52124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[29,52126,52127],{},[24,52128],{"alt":64,"src":52129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[29,52131,52132],{},"在输入的时候要用好隐式转换，简单写起来",[29,52134,52135],{},"let num = +prompt(’请输入数字：‘)",[29,52137,52138],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[29,52140,52141],{},"console.log(parseInt('12.333px'))",[29,52143,52144],{},"输出为：12",[29,52146,52147],{},"console.log(parseInt('a'a'a12.333px'))",[29,52149,52150],{},"输出：NaN",[14,52152,52154],{"id":52153},"_26-运算符","2.6 运算符",[19,52156,52158],{"id":52157},"_261-赋值运算符","2.6.1 赋值运算符",[29,52160,52161],{},[24,52162],{"alt":64,"src":52163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[19,52165,52167],{"id":52166},"_262-一元运算符","2.6.2 一元运算符",[29,52169,52170],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[29,52172,52173],{},[24,52174],{"alt":64,"src":52175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[29,52177,52178],{},[24,52179],{"alt":64,"src":52180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[29,52182,52183],{},"两者的区别：",[29,52185,52186],{},[24,52187],{"alt":64,"src":52188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[29,52190,52191],{},"前置先自加；后置后加，代码执行完之后再加",[19,52193,52195],{"id":52194},"_263-比较运算符","2.6.3 比较运算符",[29,52197,52198],{},[24,52199],{"alt":64,"src":52200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[29,52202,52203],{},"比较运算符也有隐式转换",[29,52205,52206],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[29,52208,52209],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[29,52211,52212],{},"要使用三等，开发的时候",[29,52214,52215],{},"NaN不等于任何人，包括它自己",[29,52217,52218],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[29,52220,52221],{},"7\u002F10=0.7",[29,52223,52224],{},"最后：0.5+0.2=0.7",[29,52226,52227],{},"字符串比较，比较的是字符对应的ASCII码",[19,52229,52231],{"id":52230},"_264-逻辑运算符","2.6.4 逻辑运算符",[29,52233,52234],{},[24,52235],{"alt":64,"src":52236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[29,52238,52239],{},[24,52240],{"alt":64,"src":52241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[29,52243,52244],{},[24,52245],{"alt":64,"src":52246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[29,52248,52249],{},"上述题目选D",[29,52251,52252],{},"与真2假1；或真1假2",[19,52254,52256],{"id":52255},"_265-运算符优先级","2.6.5 运算符优先级",[29,52258,52259],{},[24,52260],{"alt":64,"src":52261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[29,52263,52264],{},"先算逻辑与，后算逻辑或",[14,52266,52268],{"id":52267},"_27-语句","2.7 语句",[29,52270,52271],{},"表达式：是可以被求值的代码，会有结果给我们",[29,52273,52274],{},"语句：语句是可以被执行的代码，例如prompt()",[29,52276,52277],{},[24,52278],{"alt":64,"src":52279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[29,52281,52282],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[29,52284,52285],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[19,52287,52289],{"id":52288},"_271-分支语句","2.7.1 分支语句",[23237,52291,52293],{"id":52292},"_2711-if分支语句","2.7.1.1 if分支语句",[29,52295,52296],{},"if语句单行简单的话，可以不写{}，写在一行就行",[37,52298,52299],{},[40,52300,52301],{},"单分支语句",[29,52303,52304],{},[24,52305],{"alt":64,"src":52306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[29,52308,52309],{},"除了0，所有数字都为真",[59,52311,52313],{"className":51869,"code":52312,"language":349,"meta":64,"style":64},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[66,52314,52315,52320,52325,52330,52334],{"__ignoreMap":64},[69,52316,52317],{"class":71,"line":72},[69,52318,52319],{"class":86},"if（0) {\n",[69,52321,52322],{"class":71,"line":79},[69,52323,52324],{"class":86},"    let a=1\n",[69,52326,52327],{"class":71,"line":106},[69,52328,52329],{"class":86},"    alert(typeof a)\n",[69,52331,52332],{"class":71,"line":116},[69,52333,142],{"class":86},[69,52335,52336],{"class":71,"line":133},[69,52337,52338],{"class":86},"不输出，括号为假\n",[37,52340,52341],{"start":79},[40,52342,52343],{},"双分支语句",[29,52345,52346],{},[24,52347],{"alt":64,"src":52348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[37,52350,52351],{"start":106},[40,52352,52353],{},"多分支语句",[29,52355,52356],{},[24,52357],{"alt":64,"src":52358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23237,52360,52362],{"id":52361},"_2712-三元运算符","2.7.1.2 三元运算符",[29,52364,52365],{},[24,52366],{"alt":64,"src":52367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23237,52369,52371],{"id":52370},"_2713-switch语句","2.7.1.3 switch语句",[29,52373,52374],{},[24,52375],{"alt":64,"src":52376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[29,52378,52379],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[19,52381,52383],{"id":52382},"_272-循环语句","2.7.2 循环语句",[23237,52385,52387],{"id":52386},"_2721-断点演示","2.7.2.1 断点演示",[29,52389,52390],{},[24,52391],{"alt":64,"src":52392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23237,52394,52396],{"id":52395},"_2722-while循环","2.7.2.2 while循环",[29,52398,52399],{},[24,52400],{"alt":64,"src":52401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[29,52403,52404],{},[24,52405],{"alt":64,"src":52406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23237,52408,52410],{"id":52409},"_2723-for循环","2.7.2.3 for循环",[29,52412,52413],{},[24,52414],{"alt":64,"src":52415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[29,52417,52418],{},"for(;;) {",[29,52420,2332],{},[29,52422,52423],{},"表示无限循环",[29,52425,52426],{},[24,52427],{"alt":64,"src":52428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23237,52430,52432],{"id":52431},"_2724-循环的退出","2.7.2.4 循环的退出",[29,52434,52435],{},[24,52436],{"alt":64,"src":52437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52439,52441],{"id":52440},"_28-数组","2.8 数组",[19,52443,52445],{"id":52444},"_281-基础认识","2.8.1 基础认识",[29,52447,52448],{},[24,52449],{"alt":64,"src":52450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[29,52452,52453],{},[24,52454],{"alt":64,"src":52455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[29,52457,52458],{},[24,52459],{"alt":64,"src":52460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[29,52462,52463],{},[24,52464],{"alt":64,"src":52465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[19,52467,52469],{"id":52468},"_282-操作数组","2.8.2 操作数组",[29,52471,52472],{},[24,52473],{"alt":64,"src":52474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[37,52476,52477],{},[40,52478,52479],{},"添加元素",[29,52481,52482],{},[24,52483],{"alt":64,"src":52484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[29,52486,52487],{},"console.log(arr.push('green'))",[29,52489,52490],{},"输出结果：为新数组的长度",[29,52492,52493],{},[24,52494],{"alt":64,"src":52495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[29,52497,52498],{},"push用的非常多，一定要记住",[37,52500,52501],{},[40,52502,52503],{},"删除元素",[29,52505,52506],{},[24,52507],{"alt":64,"src":52508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[29,52510,52511],{},[24,52512],{"alt":64,"src":52513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[29,52515,52516],{},[24,52517],{"alt":64,"src":52518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[19,52520,52522],{"id":52521},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[59,52524,52526],{"className":51869,"code":52525,"language":349,"meta":64,"style":64},"\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",[66,52527,52528,52541,52557,52561,52570,52588,52612,52634,52648,52656,52663,52674,52685,52689,52693,52700,52712,52726,52739,52758,52775,52790,52802,52814,52826,52830,52834,52844,52854,52866,52878,52890,52901,52905,52909,52921,52925,52939,52943,52947,52958,52972,52984,52998,53002,53011,53019,53023,53031,53035,53044,53049,53054,53067,53095,53100,53105,53130,53135,53139,53144,53149,53164,53168,53173,53203,53215,53231,53247,53261,53266,53273,53277,53282,53295,53303,53311,53315],{"__ignoreMap":64},[69,52529,52530,52533,52536,52539],{"class":71,"line":72},[69,52531,52532],{"class":86},"\u003C!",[69,52534,52535],{"class":348},"DOCTYPE",[69,52537,52538],{"class":109}," html",[69,52540,1026],{"class":86},[69,52542,52543,52545,52547,52550,52552,52555],{"class":71,"line":79},[69,52544,1011],{"class":86},[69,52546,349],{"class":348},[69,52548,52549],{"class":109}," lang",[69,52551,1019],{"class":86},[69,52553,52554],{"class":1022},"\"en\"",[69,52556,1026],{"class":86},[69,52558,52559],{"class":71,"line":106},[69,52560,3644],{"emptyLinePlaceholder":1325},[69,52562,52563,52565,52568],{"class":71,"line":116},[69,52564,1011],{"class":86},[69,52566,52567],{"class":348},"head",[69,52569,1026],{"class":86},[69,52571,52572,52575,52578,52581,52583,52586],{"class":71,"line":133},[69,52573,52574],{"class":86},"    \u003C",[69,52576,52577],{"class":348},"meta",[69,52579,52580],{"class":109}," charset",[69,52582,1019],{"class":86},[69,52584,52585],{"class":1022},"\"UTF-8\"",[69,52587,1026],{"class":86},[69,52589,52590,52592,52594,52597,52599,52602,52605,52607,52610],{"class":71,"line":139},[69,52591,52574],{"class":86},[69,52593,52577],{"class":348},[69,52595,52596],{"class":109}," http-equiv",[69,52598,1019],{"class":86},[69,52600,52601],{"class":1022},"\"X-UA-Compatible\"",[69,52603,52604],{"class":109}," content",[69,52606,1019],{"class":86},[69,52608,52609],{"class":1022},"\"IE=edge\"",[69,52611,1026],{"class":86},[69,52613,52614,52616,52618,52620,52622,52625,52627,52629,52632],{"class":71,"line":401},[69,52615,52574],{"class":86},[69,52617,52577],{"class":348},[69,52619,16160],{"class":109},[69,52621,1019],{"class":86},[69,52623,52624],{"class":1022},"\"viewport\"",[69,52626,52604],{"class":109},[69,52628,1019],{"class":86},[69,52630,52631],{"class":1022},"\"width=device-width, initial-scale=1.0\"",[69,52633,1026],{"class":86},[69,52635,52636,52638,52641,52644,52646],{"class":71,"line":470},[69,52637,52574],{"class":86},[69,52639,52640],{"class":348},"title",[69,52642,52643],{"class":86},">Document\u003C\u002F",[69,52645,52640],{"class":348},[69,52647,1026],{"class":86},[69,52649,52650,52652,52654],{"class":71,"line":475},[69,52651,52574],{"class":86},[69,52653,1297],{"class":348},[69,52655,1026],{"class":86},[69,52657,52658,52661],{"class":71,"line":482},[69,52659,52660],{"class":348},"        *",[69,52662,113],{"class":86},[69,52664,52665,52668,52670,52672],{"class":71,"line":497},[69,52666,52667],{"class":90},"            margin",[69,52669,94],{"class":86},[69,52671,1583],{"class":90},[69,52673,130],{"class":86},[69,52675,52676,52679,52681,52683],{"class":71,"line":502},[69,52677,52678],{"class":90},"            padding",[69,52680,94],{"class":86},[69,52682,1583],{"class":90},[69,52684,130],{"class":86},[69,52686,52687],{"class":71,"line":509},[69,52688,3773],{"class":86},[69,52690,52691],{"class":71,"line":524},[69,52692,3644],{"emptyLinePlaceholder":1325},[69,52694,52695,52698],{"class":71,"line":2888},[69,52696,52697],{"class":109},"        .box",[69,52699,113],{"class":86},[69,52701,52702,52705,52707,52710],{"class":71,"line":2893},[69,52703,52704],{"class":90},"            display",[69,52706,94],{"class":86},[69,52708,52709],{"class":90},"flex",[69,52711,130],{"class":86},[69,52713,52714,52717,52719,52722,52724],{"class":71,"line":2899},[69,52715,52716],{"class":90},"            width",[69,52718,94],{"class":86},[69,52720,52721],{"class":90},"700",[69,52723,100],{"class":82},[69,52725,130],{"class":86},[69,52727,52728,52731,52733,52735,52737],{"class":71,"line":2919},[69,52729,52730],{"class":90},"            height",[69,52732,94],{"class":86},[69,52734,5217],{"class":90},[69,52736,100],{"class":82},[69,52738,130],{"class":86},[69,52740,52741,52744,52746,52748,52750,52753,52756],{"class":71,"line":2924},[69,52742,52743],{"class":90},"            border-left",[69,52745,94],{"class":86},[69,52747,1609],{"class":90},[69,52749,100],{"class":82},[69,52751,52752],{"class":90}," solid",[69,52754,52755],{"class":90}," pink",[69,52757,130],{"class":86},[69,52759,52760,52763,52765,52767,52769,52771,52773],{"class":71,"line":2938},[69,52761,52762],{"class":90},"            border-bottom",[69,52764,94],{"class":86},[69,52766,1609],{"class":90},[69,52768,100],{"class":82},[69,52770,52752],{"class":90},[69,52772,52755],{"class":90},[69,52774,130],{"class":86},[69,52776,52777,52779,52781,52783,52785,52788],{"class":71,"line":2943},[69,52778,52667],{"class":90},[69,52780,94],{"class":86},[69,52782,2043],{"class":90},[69,52784,100],{"class":82},[69,52786,52787],{"class":90}," auto",[69,52789,130],{"class":86},[69,52791,52792,52795,52797,52800],{"class":71,"line":2972},[69,52793,52794],{"class":90},"            justify-content",[69,52796,94],{"class":86},[69,52798,52799],{"class":90},"space-around",[69,52801,130],{"class":86},[69,52803,52804,52807,52809,52812],{"class":71,"line":2977},[69,52805,52806],{"class":90},"            align-items",[69,52808,94],{"class":86},[69,52810,52811],{"class":90},"flex-end",[69,52813,130],{"class":86},[69,52815,52816,52819,52821,52824],{"class":71,"line":2994},[69,52817,52818],{"class":90},"            text-align",[69,52820,94],{"class":86},[69,52822,52823],{"class":90},"center",[69,52825,130],{"class":86},[69,52827,52828],{"class":71,"line":2999},[69,52829,3773],{"class":86},[69,52831,52832],{"class":71,"line":3004},[69,52833,3644],{"emptyLinePlaceholder":1325},[69,52835,52836,52838,52840,52842],{"class":71,"line":3009},[69,52837,52697],{"class":109},[69,52839,2346],{"class":82},[69,52841,442],{"class":348},[69,52843,113],{"class":86},[69,52845,52846,52848,52850,52852],{"class":71,"line":3023},[69,52847,52704],{"class":90},[69,52849,94],{"class":86},[69,52851,52709],{"class":90},[69,52853,130],{"class":86},[69,52855,52856,52858,52860,52862,52864],{"class":71,"line":3028},[69,52857,52716],{"class":90},[69,52859,94],{"class":86},[69,52861,2043],{"class":90},[69,52863,100],{"class":82},[69,52865,130],{"class":86},[69,52867,52868,52871,52873,52876],{"class":71,"line":3821},[69,52869,52870],{"class":90},"            background-color",[69,52872,94],{"class":86},[69,52874,52875],{"class":90},"pink",[69,52877,130],{"class":86},[69,52879,52880,52883,52885,52888],{"class":71,"line":3835},[69,52881,52882],{"class":90},"            flex-direction",[69,52884,94],{"class":86},[69,52886,52887],{"class":90},"column",[69,52889,130],{"class":86},[69,52891,52892,52894,52896,52899],{"class":71,"line":3843},[69,52893,52794],{"class":90},[69,52895,94],{"class":86},[69,52897,52898],{"class":90},"space-between",[69,52900,130],{"class":86},[69,52902,52903],{"class":71,"line":3848},[69,52904,3773],{"class":86},[69,52906,52907],{"class":71,"line":3854},[69,52908,3644],{"emptyLinePlaceholder":1325},[69,52910,52911,52913,52916,52919],{"class":71,"line":3860},[69,52912,52697],{"class":109},[69,52914,52915],{"class":348}," div",[69,52917,52918],{"class":348}," span",[69,52920,113],{"class":86},[69,52922,52923],{"class":71,"line":3865},[69,52924,3644],{"emptyLinePlaceholder":1325},[69,52926,52927,52930,52932,52935,52937],{"class":71,"line":9190},[69,52928,52929],{"class":90},"            margin-top",[69,52931,94],{"class":86},[69,52933,52934],{"class":90},"-20",[69,52936,100],{"class":82},[69,52938,130],{"class":86},[69,52940,52941],{"class":71,"line":9214},[69,52942,3773],{"class":86},[69,52944,52945],{"class":71,"line":9219},[69,52946,3644],{"emptyLinePlaceholder":1325},[69,52948,52949,52951,52953,52956],{"class":71,"line":9225},[69,52950,52697],{"class":109},[69,52952,52915],{"class":348},[69,52954,52955],{"class":348}," h4",[69,52957,113],{"class":86},[69,52959,52960,52963,52965,52968,52970],{"class":71,"line":9252},[69,52961,52962],{"class":90},"            margin-bottom",[69,52964,94],{"class":86},[69,52966,52967],{"class":90},"-35",[69,52969,100],{"class":82},[69,52971,130],{"class":86},[69,52973,52974,52976,52978,52980,52982],{"class":71,"line":9257},[69,52975,52716],{"class":90},[69,52977,94],{"class":86},[69,52979,1745],{"class":90},[69,52981,100],{"class":82},[69,52983,130],{"class":86},[69,52985,52986,52989,52991,52994,52996],{"class":71,"line":9263},[69,52987,52988],{"class":90},"            margin-left",[69,52990,94],{"class":86},[69,52992,52993],{"class":90},"-10",[69,52995,100],{"class":82},[69,52997,130],{"class":86},[69,52999,53000],{"class":71,"line":9275},[69,53001,3773],{"class":86},[69,53003,53004,53007,53009],{"class":71,"line":9287},[69,53005,53006],{"class":86},"    \u003C\u002F",[69,53008,1297],{"class":348},[69,53010,1026],{"class":86},[69,53012,53013,53015,53017],{"class":71,"line":9299},[69,53014,1036],{"class":86},[69,53016,52567],{"class":348},[69,53018,1026],{"class":86},[69,53020,53021],{"class":71,"line":10958},[69,53022,3644],{"emptyLinePlaceholder":1325},[69,53024,53025,53027,53029],{"class":71,"line":10983},[69,53026,1011],{"class":86},[69,53028,680],{"class":348},[69,53030,1026],{"class":86},[69,53032,53033],{"class":71,"line":11006},[69,53034,3644],{"emptyLinePlaceholder":1325},[69,53036,53037,53039,53042],{"class":71,"line":11030},[69,53038,52574],{"class":86},[69,53040,53041],{"class":348},"script",[69,53043,1026],{"class":86},[69,53045,53046],{"class":71,"line":11035},[69,53047,53048],{"class":75},"        \u002F\u002F 1. 四次弹框效果\n",[69,53050,53051],{"class":71,"line":11040},[69,53052,53053],{"class":75},"        \u002F\u002F 声明一个新的数组\n",[69,53055,53056,53059,53062,53064],{"class":71,"line":11045},[69,53057,53058],{"class":82},"        let",[69,53060,53061],{"class":86}," arr ",[69,53063,1019],{"class":82},[69,53065,53066],{"class":86}," []\n",[69,53068,53069,53071,53073,53076,53078,53080,53082,53084,53086,53089,53091,53093],{"class":71,"line":11054},[69,53070,4647],{"class":82},[69,53072,87],{"class":86},[69,53074,53075],{"class":82},"let",[69,53077,10680],{"class":86},[69,53079,1019],{"class":82},[69,53081,26355],{"class":90},[69,53083,10687],{"class":86},[69,53085,2838],{"class":82},[69,53087,53088],{"class":90}," 4",[69,53090,4458],{"class":86},[69,53092,3536],{"class":82},[69,53094,103],{"class":86},[69,53096,53097],{"class":71,"line":11059},[69,53098,53099],{"class":75},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[69,53101,53102],{"class":71,"line":11065},[69,53103,53104],{"class":75},"            \u002F\u002F arr.push(num)\n",[69,53106,53107,53110,53113,53115,53118,53120,53123,53125,53128],{"class":71,"line":11086},[69,53108,53109],{"class":86},"            arr.",[69,53111,53112],{"class":109},"push",[69,53114,1398],{"class":86},[69,53116,53117],{"class":109},"prompt",[69,53119,1398],{"class":86},[69,53121,53122],{"class":1022},"`请输入第${",[69,53124,1830],{"class":86},[69,53126,53127],{"class":1022},"}季度的数据:`",[69,53129,31733],{"class":86},[69,53131,53132],{"class":71,"line":11092},[69,53133,53134],{"class":75},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[69,53136,53137],{"class":71,"line":11106},[69,53138,3773],{"class":86},[69,53140,53141],{"class":71,"line":11112},[69,53142,53143],{"class":75},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[69,53145,53146],{"class":71,"line":11139},[69,53147,53148],{"class":75},"        \u002F\u002F 盒子开头\n",[69,53150,53151,53154,53157,53159,53162],{"class":71,"line":11148},[69,53152,53153],{"class":86},"        document.",[69,53155,53156],{"class":109},"write",[69,53158,1398],{"class":86},[69,53160,53161],{"class":1022},"` \u003Cdiv class=\"box\">`",[69,53163,1404],{"class":86},[69,53165,53166],{"class":71,"line":11154},[69,53167,3644],{"emptyLinePlaceholder":1325},[69,53169,53170],{"class":71,"line":11162},[69,53171,53172],{"class":75},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[69,53174,53175,53177,53179,53181,53183,53185,53187,53189,53191,53194,53197,53199,53201],{"class":71,"line":11167},[69,53176,4647],{"class":82},[69,53178,87],{"class":86},[69,53180,53075],{"class":82},[69,53182,10680],{"class":86},[69,53184,1019],{"class":82},[69,53186,5337],{"class":90},[69,53188,10687],{"class":86},[69,53190,1011],{"class":82},[69,53192,53193],{"class":86}," arr.",[69,53195,53196],{"class":90},"length",[69,53198,4458],{"class":86},[69,53200,3536],{"class":82},[69,53202,103],{"class":86},[69,53204,53205,53208,53210,53212],{"class":71,"line":17843},[69,53206,53207],{"class":86},"            document.",[69,53209,53156],{"class":109},[69,53211,1398],{"class":86},[69,53213,53214],{"class":1022},"`\n",[69,53216,53217,53220,53222,53224,53226,53228],{"class":71,"line":17849},[69,53218,53219],{"class":1022},"              \u003Cdiv style=\"height: ${",[69,53221,5124],{"class":86},[69,53223,2277],{"class":1022},[69,53225,1830],{"class":86},[69,53227,2326],{"class":1022},[69,53229,53230],{"class":1022},"}px;\">\n",[69,53232,53233,53236,53238,53240,53242,53244],{"class":71,"line":17872},[69,53234,53235],{"class":1022},"                \u003Cspan>${",[69,53237,5124],{"class":86},[69,53239,2277],{"class":1022},[69,53241,1830],{"class":86},[69,53243,2326],{"class":1022},[69,53245,53246],{"class":1022},"}\u003C\u002Fspan>\n",[69,53248,53249,53252,53254,53256,53258],{"class":71,"line":17878},[69,53250,53251],{"class":1022},"                \u003Ch4>第${",[69,53253,1830],{"class":86},[69,53255,46802],{"class":82},[69,53257,26355],{"class":90},[69,53259,53260],{"class":1022},"}季度\u003C\u002Fh4>\n",[69,53262,53263],{"class":71,"line":17901},[69,53264,53265],{"class":1022},"              \u003C\u002Fdiv>          \n",[69,53267,53268,53271],{"class":71,"line":17915},[69,53269,53270],{"class":1022},"            `",[69,53272,1404],{"class":86},[69,53274,53275],{"class":71,"line":17935},[69,53276,3773],{"class":86},[69,53278,53279],{"class":71,"line":17941},[69,53280,53281],{"class":75},"        \u002F\u002F 盒子结尾\n",[69,53283,53284,53286,53288,53290,53293],{"class":71,"line":17952},[69,53285,53153],{"class":86},[69,53287,53156],{"class":109},[69,53289,1398],{"class":86},[69,53291,53292],{"class":1022},"` \u003C\u002Fdiv>`",[69,53294,1404],{"class":86},[69,53296,53297,53299,53301],{"class":71,"line":17975},[69,53298,53006],{"class":86},[69,53300,53041],{"class":348},[69,53302,1026],{"class":86},[69,53304,53305,53307,53309],{"class":71,"line":17997},[69,53306,1036],{"class":86},[69,53308,680],{"class":348},[69,53310,1026],{"class":86},[69,53312,53313],{"class":71,"line":18002},[69,53314,3644],{"emptyLinePlaceholder":1325},[69,53316,53317,53319,53321],{"class":71,"line":18008},[69,53318,1036],{"class":86},[69,53320,349],{"class":348},[69,53322,1026],{"class":86},[19,53324,53326],{"id":53325},"_284-冒泡排序","2.8.4 冒泡排序",[59,53328,53330],{"className":51869,"code":53329,"language":349,"meta":64,"style":64},"\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",[66,53331,53332,53342,53356,53360,53368,53383,53403,53415,53423,53427,53435,53443,53475,53508,53545,53550,53569,53574,53587,53602,53618,53622,53627,53631,53641,53650,53658,53662],{"__ignoreMap":64},[69,53333,53334,53336,53338,53340],{"class":71,"line":72},[69,53335,52532],{"class":86},[69,53337,52535],{"class":348},[69,53339,52538],{"class":109},[69,53341,1026],{"class":86},[69,53343,53344,53346,53348,53350,53352,53354],{"class":71,"line":79},[69,53345,1011],{"class":86},[69,53347,349],{"class":348},[69,53349,52549],{"class":109},[69,53351,1019],{"class":86},[69,53353,52554],{"class":1022},[69,53355,1026],{"class":86},[69,53357,53358],{"class":71,"line":106},[69,53359,3644],{"emptyLinePlaceholder":1325},[69,53361,53362,53364,53366],{"class":71,"line":116},[69,53363,1011],{"class":86},[69,53365,52567],{"class":348},[69,53367,1026],{"class":86},[69,53369,53370,53373,53375,53377,53379,53381],{"class":71,"line":133},[69,53371,53372],{"class":86},"  \u003C",[69,53374,52577],{"class":348},[69,53376,52580],{"class":109},[69,53378,1019],{"class":86},[69,53380,52585],{"class":1022},[69,53382,1026],{"class":86},[69,53384,53385,53387,53389,53391,53393,53395,53397,53399,53401],{"class":71,"line":139},[69,53386,53372],{"class":86},[69,53388,52577],{"class":348},[69,53390,16160],{"class":109},[69,53392,1019],{"class":86},[69,53394,52624],{"class":1022},[69,53396,52604],{"class":109},[69,53398,1019],{"class":86},[69,53400,52631],{"class":1022},[69,53402,1026],{"class":86},[69,53404,53405,53407,53409,53411,53413],{"class":71,"line":401},[69,53406,53372],{"class":86},[69,53408,52640],{"class":348},[69,53410,52643],{"class":86},[69,53412,52640],{"class":348},[69,53414,1026],{"class":86},[69,53416,53417,53419,53421],{"class":71,"line":470},[69,53418,1036],{"class":86},[69,53420,52567],{"class":348},[69,53422,1026],{"class":86},[69,53424,53425],{"class":71,"line":475},[69,53426,3644],{"emptyLinePlaceholder":1325},[69,53428,53429,53431,53433],{"class":71,"line":482},[69,53430,1011],{"class":86},[69,53432,680],{"class":348},[69,53434,1026],{"class":86},[69,53436,53437,53439,53441],{"class":71,"line":497},[69,53438,53372],{"class":86},[69,53440,53041],{"class":348},[69,53442,1026],{"class":86},[69,53444,53445,53448,53450,53452,53455,53457,53459,53461,53463,53465,53467,53469,53471,53473],{"class":71,"line":502},[69,53446,53447],{"class":82},"    let",[69,53449,53061],{"class":86},[69,53451,1019],{"class":82},[69,53453,53454],{"class":86}," [",[69,53456,1709],{"class":90},[69,53458,13677],{"class":86},[69,53460,1684],{"class":90},[69,53462,13677],{"class":86},[69,53464,1465],{"class":90},[69,53466,13677],{"class":86},[69,53468,1471],{"class":90},[69,53470,13677],{"class":86},[69,53472,1609],{"class":90},[69,53474,34482],{"class":86},[69,53476,53477,53479,53481,53483,53485,53487,53489,53491,53493,53495,53497,53500,53502,53504,53506],{"class":71,"line":509},[69,53478,4445],{"class":82},[69,53480,87],{"class":86},[69,53482,53075],{"class":82},[69,53484,10680],{"class":86},[69,53486,1019],{"class":82},[69,53488,5337],{"class":90},[69,53490,10687],{"class":86},[69,53492,1011],{"class":82},[69,53494,53193],{"class":86},[69,53496,53196],{"class":90},[69,53498,53499],{"class":82}," -",[69,53501,26355],{"class":90},[69,53503,4458],{"class":86},[69,53505,3536],{"class":82},[69,53507,103],{"class":86},[69,53509,53510,53513,53515,53517,53519,53521,53523,53525,53527,53529,53531,53533,53535,53537,53539,53541,53543],{"class":71,"line":524},[69,53511,53512],{"class":82},"      for",[69,53514,87],{"class":86},[69,53516,53075],{"class":82},[69,53518,10742],{"class":86},[69,53520,1019],{"class":82},[69,53522,5337],{"class":90},[69,53524,10749],{"class":86},[69,53526,1011],{"class":82},[69,53528,53193],{"class":86},[69,53530,53196],{"class":90},[69,53532,53499],{"class":82},[69,53534,10680],{"class":86},[69,53536,1920],{"class":82},[69,53538,26355],{"class":90},[69,53540,10756],{"class":86},[69,53542,3536],{"class":82},[69,53544,103],{"class":86},[69,53546,53547],{"class":71,"line":2888},[69,53548,53549],{"class":75},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[69,53551,53552,53554,53557,53559,53562,53564,53566],{"class":71,"line":2893},[69,53553,3741],{"class":82},[69,53555,53556],{"class":86}," (arr[j] ",[69,53558,2346],{"class":82},[69,53560,53561],{"class":86}," arr[j ",[69,53563,1869],{"class":82},[69,53565,26355],{"class":90},[69,53567,53568],{"class":86},"]) {\n",[69,53570,53571],{"class":71,"line":2899},[69,53572,53573],{"class":75},"          \u002F\u002F 交换两个变量\n",[69,53575,53576,53579,53582,53584],{"class":71,"line":2919},[69,53577,53578],{"class":82},"          let",[69,53580,53581],{"class":86}," tmp ",[69,53583,1019],{"class":82},[69,53585,53586],{"class":86}," arr[j]\n",[69,53588,53589,53592,53594,53596,53598,53600],{"class":71,"line":2924},[69,53590,53591],{"class":86},"          arr[j] ",[69,53593,1019],{"class":82},[69,53595,53561],{"class":86},[69,53597,1869],{"class":82},[69,53599,26355],{"class":90},[69,53601,34482],{"class":86},[69,53603,53604,53607,53609,53611,53613,53615],{"class":71,"line":2938},[69,53605,53606],{"class":86},"          arr[j ",[69,53608,1869],{"class":82},[69,53610,26355],{"class":90},[69,53612,5687],{"class":86},[69,53614,1019],{"class":82},[69,53616,53617],{"class":86}," tmp\n",[69,53619,53620],{"class":71,"line":2943},[69,53621,3773],{"class":86},[69,53623,53624],{"class":71,"line":2972},[69,53625,53626],{"class":86},"      }\n",[69,53628,53629],{"class":71,"line":2977},[69,53630,3431],{"class":86},[69,53632,53633,53636,53638],{"class":71,"line":2994},[69,53634,53635],{"class":86},"    document.",[69,53637,53156],{"class":109},[69,53639,53640],{"class":86},"(arr)\n",[69,53642,53643,53646,53648],{"class":71,"line":2999},[69,53644,53645],{"class":86},"  \u003C\u002F",[69,53647,53041],{"class":348},[69,53649,1026],{"class":86},[69,53651,53652,53654,53656],{"class":71,"line":3004},[69,53653,1036],{"class":86},[69,53655,680],{"class":348},[69,53657,1026],{"class":86},[69,53659,53660],{"class":71,"line":3009},[69,53661,3644],{"emptyLinePlaceholder":1325},[69,53663,53664,53666,53668],{"class":71,"line":3023},[69,53665,1036],{"class":86},[69,53667,349],{"class":348},[69,53669,1026],{"class":86},[29,53671,53672],{},[24,53673],{"alt":64,"src":53674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[29,53676,53677],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[29,53679,53680],{},"let arr = [4, 2, 5, 1, 3]",[29,53682,53683],{},"\u002F\u002F 1.升序排列写法",[29,53685,53686],{},"arr.sort(function (a, b) {",[29,53688,53689],{},"return a - b",[29,53691,53692],{},"})",[29,53694,53695],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[29,53697,53698],{},"\u002F\u002F 降序排列写法",[29,53700,53686],{},[29,53702,53703],{},"return b - a",[29,53705,53692],{},[29,53707,53708],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53710,53712],{"id":53711},"_29-函数","2.9 函数",[29,53714,53715],{},[24,53716],{"alt":64,"src":53717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[29,53719,53720],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[29,53722,53723],{},"函数的声明用function",[29,53725,53726],{},"函数里边可以嵌套函数",[19,53728,53730],{"id":53729},"_291-函数传参","2.9.1 函数传参",[29,53732,53733],{},[24,53734],{"alt":64,"src":53735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[29,53737,53738],{},[24,53739],{"alt":64,"src":53740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[162,53742,53743,53746,53749,53752,53755,53758],{},[40,53744,53745],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[40,53747,53748],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[40,53750,53751],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[40,53753,53754],{},"开发中尽量保持形参和实参个数一致",[40,53756,53757],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[40,53759,53760],{},"形参只在函数中有用，所以不需要进行声明这个变量",[29,53762,53763],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[19,53765,53767],{"id":53766},"_292-函数的返回值","2.9.2 函数的返回值",[29,53769,53770],{},[24,53771],{"alt":64,"src":53772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[29,53774,53775],{},[24,53776],{"alt":64,"src":53777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[162,53779,53780,53783,53786,53789,53792],{},[40,53781,53782],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[40,53784,53785],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[40,53787,53788],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[40,53790,53791],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[40,53793,53794],{},"断点调试:进入函数内部看执行过程F11",[19,53796,53798],{"id":53797},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[59,53800,53802],{"className":51869,"code":53801,"language":349,"meta":64,"style":64},"    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",[66,53803,53804,53809,53814,53818,53823],{"__ignoreMap":64},[69,53805,53806],{"class":71,"line":72},[69,53807,53808],{"class":86},"    function fn(a, b) {\n",[69,53810,53811],{"class":71,"line":79},[69,53812,53813],{"class":86},"      console.log(a + b);\n",[69,53815,53816],{"class":71,"line":106},[69,53817,3431],{"class":86},[69,53819,53820],{"class":71,"line":116},[69,53821,53822],{"class":86},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[69,53824,53825],{"class":71,"line":133},[69,53826,53827],{"class":86},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[19,53829,53831],{"id":53830},"_294-作用域","2.9.4 作用域",[162,53833,53834,53840,53845,53848,53851],{},[40,53835,53836,53837],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[195,53838,53839],{},"作用域",[40,53841,53842],{},[195,53843,53844],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[40,53846,53847],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[40,53849,53850],{},"函数内部可以直接所使用全局变量",[40,53852,53853],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[29,53855,327],{},[59,53857,53859],{"className":51869,"code":53858,"language":349,"meta":64,"style":64},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[66,53860,53861,53866,53871,53875,53880,53885,53890],{"__ignoreMap":64},[69,53862,53863],{"class":71,"line":72},[69,53864,53865],{"class":86},"    function fun() {\n",[69,53867,53868],{"class":71,"line":79},[69,53869,53870],{"class":86},"      num = 10\n",[69,53872,53873],{"class":71,"line":106},[69,53874,3431],{"class":86},[69,53876,53877],{"class":71,"line":116},[69,53878,53879],{"class":86},"    fun()\n",[69,53881,53882],{"class":71,"line":133},[69,53883,53884],{"class":86},"    console.log(num)\n",[69,53886,53887],{"class":71,"line":139},[69,53888,53889],{"class":86},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[69,53891,53892],{"class":71,"line":401},[69,53893,53894],{"class":86},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[162,53896,53897,53900],{},[40,53898,53899],{},"函数内部的形参可以看做是局部变量",[40,53901,53902],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[29,53904,53905,53906],{},"变量访问原则： ",[195,53907,53908],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[19,53910,53912],{"id":53911},"_295-匿名函数","2.9.5 匿名函数",[29,53914,53915],{},"函数可以分为具名函数和匿名函数",[29,53917,53918],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[37,53920,53921],{},[40,53922,53923],{},"函数表达式",[29,53925,53926],{},[24,53927],{"alt":64,"src":53928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[29,53930,53931],{},"里边也可以写参数",[29,53933,53934],{},"具名函数调用位置可以随意调整；",[29,53936,53937],{},"匿名函数函数表达式形式只能在声明后才可以使用",[37,53939,53940],{"start":79},[40,53941,53942],{},"立即执行函数",[29,53944,53945],{},[24,53946],{"alt":64,"src":53947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[29,53949,53950],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[29,53952,53953],{},"写法：两个小括号，然后在第一个小括号中写function",[29,53955,53956],{},"(function () {})();",[29,53958,53959],{},"不要落下最后的;",[29,53961,53962],{},"立即执行函数必须要加;",[29,53964,53965],{},"分号写前写后都没问题",[29,53967,53968],{},"写前：",[29,53970,53971],{},"(function() {})()",[29,53973,53974],{},";(function () {})();",[29,53976,53977],{},"写后:",[29,53979,53980],{},"(function() {})();",[29,53982,53956],{},[29,53984,53985],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[29,53987,53988],{},"还有一种写法：",[29,53990,53991],{},"(function(){}());",[29,53993,53994],{},"或者:",[29,53996,53997],{},"!function(){}();",[29,53999,54000],{},"立即执行函数有时候也是可以加名字的：",[29,54002,54003],{},"(function flexible(window,document) {}(window,document));",[29,54005,54006],{},"省一些调用方法",[19,54008,54010],{"id":54009},"_296-逻辑中断","2.9.6 逻辑中断!!!",[29,54012,54013],{},[24,54014],{"alt":64,"src":54015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[29,54017,54018],{},"这样就不用非得给x,y初始化了",[29,54020,54021],{},[24,54022],{"alt":64,"src":54023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[29,54025,54026],{},"代码执行时先看左边",[29,54028,54029],{},"例如：console.log(false && 3+5)",[29,54031,54032],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[29,54034,54035],{},"&&都是真时，就返回最后一个真值",[29,54037,54038],{},"console.log(11 && 22)",[29,54040,54041],{},"输出22",[29,54043,54044],{},"逻辑与：遇真则真",[29,54046,327],{},[29,54048,54049],{},"let age=1",[29,54051,54052],{},"console.log(11 || age++)",[29,54054,54055],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[29,54057,54058],{},"console.log(11 || 22)",[29,54060,54061],{},"||逻辑或遇到真就直接输出，输出结果为11",[29,54063,54064],{},"||如果都是假的话，就取最后一个假的值了",[19,54066,54068],{"id":54067},"_297-转换为boolean型","2.9.7 转换为Boolean型",[29,54070,54071],{},"显示转换：",[29,54073,54074,54077,54078],{},[195,54075,54076],{},"记忆","： ",[195,54079,54080],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[29,54082,54083],{},"空字符串为假，其他字符串全为真",[29,54085,54086],{},[24,54087],{"alt":64,"src":54088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[29,54090,54091],{},"隐式转换：",[29,54093,54094],{},[24,54095],{"alt":64,"src":54096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[29,54098,54099],{},"隐式转换:",[29,54101,54102],{},"null+3=3",[29,54104,54105],{},"undefined+3=NaN",[29,54107,54108],{},"null==undefined 输出true,他两个都当0看",[29,54110,54111],{},"null===undefined 输出false",[29,54113,54114],{},"undefined做任何操作都是NaN",[29,54116,54117],{},"NaN不等于NaN，NaN表示计算错误",[14,54119,54121],{"id":54120},"_210-对象","2.10 对象",[19,54123,54125],{"id":54124},"_2101-对象的介绍","2.10.1 对象的介绍",[29,54127,54128],{},"对象也是一种数据类型，里边的数据是无序的",[29,54130,54131],{},"对象由属性和方法组成",[29,54133,54134],{},[24,54135],{"alt":64,"src":54136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[29,54138,54139],{},[24,54140],{"alt":64,"src":54141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[29,54143,54144],{},[24,54145],{"alt":64,"src":54146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[19,54148,54150],{"id":54149},"_2102-对象属性","2.10.2 对象属性",[29,54152,54153],{},[24,54154],{"alt":64,"src":54155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[37,54157,54158],{},[40,54159,54160],{},"查询对象",[29,54162,54163],{},"对象名.属性 goods.uname",[29,54165,54166],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[29,54168,54169],{},"不带字符串的属性名也可以使用 对象名['属性名']",[29,54171,54172],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[29,54174,54175],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[37,54177,54178],{"start":79},[40,54179,54180],{},"重新赋值",[29,54182,54183],{},"对象名.属性=新值",[37,54185,54186],{"start":106},[40,54187,54188],{},"增加新数据",[29,54190,54183],{},[37,54192,54193],{"start":116},[40,54194,54195],{},"删除对象中的属性",[29,54197,54198],{},"delete 对象名.属性",[19,54200,54202],{"id":54201},"_2103-对象方法","2.10.3 对象方法",[29,54204,54205],{},[24,54206],{"alt":64,"src":54207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[29,54209,54210],{},"后边跟的是匿名函数",[29,54212,54213],{},"对象外面的叫函数；对象内部的叫方法",[29,54215,54216],{},[24,54217],{"alt":64,"src":54218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[19,54220,54222],{"id":54221},"_2104-遍历对象","2.10.4 遍历对象",[29,54224,54225],{},"理解为加括号的python字典遍历",[29,54227,54228],{},[24,54229],{"alt":64,"src":54230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[29,54232,54233],{},"k是字符串类型",[29,54235,54236],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[59,54238,54240],{"className":51869,"code":54239,"language":349,"meta":64,"style":64},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[66,54241,54242,54247,54252,54257,54262],{"__ignoreMap":64},[69,54243,54244],{"class":71,"line":72},[69,54245,54246],{"class":86},"   let arr = [1, 2, 3]\n",[69,54248,54249],{"class":71,"line":79},[69,54250,54251],{"class":86},"    for (let k in arr) {\n",[69,54253,54254],{"class":71,"line":106},[69,54255,54256],{"class":86},"      console.log(k)\n",[69,54258,54259],{"class":71,"line":116},[69,54260,54261],{"class":86},"      console.log(arr[k])\n",[69,54263,54264],{"class":71,"line":133},[69,54265,3431],{"class":86},[29,54267,54268],{},[24,54269],{"alt":64,"src":54270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[29,54272,54273],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[29,54275,54276],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[29,54278,54279],{},"for in 得到的k是属性名",[53041,54281,54282],{},"\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",[29,54284,54285],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[19,54287,54289],{"id":54288},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[29,54291,54292],{},"数组中放对象信息",[59,54294,54298],{"className":54295,"code":54296,"language":54297,"meta":64,"style":64},"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",[66,54299,54300,54308,54313,54318,54323,54328,54333,54338,54343,54348,54353,54358,54363,54367,54371],{"__ignoreMap":64},[69,54301,54302,54304,54306],{"class":71,"line":72},[69,54303,1011],{"class":86},[69,54305,53041],{"class":348},[69,54307,1026],{"class":86},[69,54309,54310],{"class":71,"line":79},[69,54311,54312],{"class":86},"    let students = [\n",[69,54314,54315],{"class":71,"line":106},[69,54316,54317],{"class":86},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[69,54319,54320],{"class":71,"line":116},[69,54321,54322],{"class":86},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[69,54324,54325],{"class":71,"line":133},[69,54326,54327],{"class":86},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[69,54329,54330],{"class":71,"line":139},[69,54331,54332],{"class":86},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[69,54334,54335],{"class":71,"line":401},[69,54336,54337],{"class":86},"    ]\n",[69,54339,54340],{"class":71,"line":470},[69,54341,54342],{"class":86},"    for (let i = 0; i \u003C students.length; i++) {\n",[69,54344,54345],{"class":71,"line":475},[69,54346,54347],{"class":86},"      for (let k in students[i]) {\n",[69,54349,54350],{"class":71,"line":482},[69,54351,54352],{"class":86},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[69,54354,54355],{"class":71,"line":497},[69,54356,54357],{"class":86},"        \u002F\u002F输出每个人的名字：\n",[69,54359,54360],{"class":71,"line":502},[69,54361,54362],{"class":86},"        \u002F\u002Fconsole.log(students[i].name)\n",[69,54364,54365],{"class":71,"line":509},[69,54366,53626],{"class":86},[69,54368,54369],{"class":71,"line":524},[69,54370,3431],{"class":86},[69,54372,54373,54375,54377],{"class":71,"line":2888},[69,54374,53645],{"class":86},[69,54376,53041],{"class":348},[69,54378,1026],{"class":86},[19,54380,54382],{"id":54381},"_2106-内置对象","2.10.6 内置对象",[29,54384,54385],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[37,54387,54388],{},[40,54389,54390],{},"数学对象Math",[29,54392,54393],{},[24,54394],{"alt":64,"src":54395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[29,54397,54398],{},[187,54399,54402],{"href":54400,"rel":54401},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[191],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[29,54404,54405],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[29,54407,54408],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[29,54410,54411],{},"数组不可以使用Math中的max,min来求最大值与最小值",[29,54413,54414],{},"null是一个空对象，可以认为：null类似于let obj={}",[29,54416,54417],{},"null属于对象数据类型",[37,54419,54420],{"start":79},[40,54421,54422],{},"生成任意范围随机数",[29,54424,54425],{},[24,54426],{"alt":64,"src":54427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[29,54429,54430],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[29,54432,54433],{},"乘以几就取不到几",[29,54435,54436],{},"取数组中的随机元素：",[29,54438,54439],{},"let arr = ['red', 'green', 'blue']",[29,54441,54442],{},"let random = Math.floor(Math.random() * arr.length)",[29,54444,54445],{},"console.log(arr[random])",[29,54447,54448],{},"这个函数得到的是全闭区间",[29,54450,54451],{},"function getRandom(N, M) {",[29,54453,54454],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[29,54456,2332],{},[29,54458,54459],{},"console.log(getRandom(4, 8))",[19,54461,54463],{"id":54462},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[29,54465,54466],{},[24,54467],{"alt":64,"src":54468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[29,54470,54471],{},[24,54472],{"alt":64,"src":54473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[29,54475,54476],{},[24,54477],{"alt":64,"src":54478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[29,54480,54481],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[29,54483,54484],{},[24,54485],{"alt":64,"src":54486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[29,54488,54489],{},[24,54490],{"alt":64,"src":54491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[29,54493,54494],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[29,54496,54497],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[29,54499,54500],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1297,54502,54503],{},"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":64,"searchDepth":79,"depth":79,"links":54505},[54506,54514,54515,54516,54517,54518,54525,54529,54535,54544],{"id":51704,"depth":79,"text":51705,"children":54507},[54508,54509,54510,54511,54512,54513],{"id":51708,"depth":106,"text":51709},{"id":51725,"depth":106,"text":51726},{"id":51765,"depth":106,"text":51766},{"id":51777,"depth":106,"text":51778},{"id":51786,"depth":106,"text":51787},{"id":51834,"depth":106,"text":51835},{"id":51844,"depth":79,"text":51845},{"id":51931,"depth":79,"text":51932},{"id":51954,"depth":79,"text":51955},{"id":51966,"depth":79,"text":51967},{"id":52153,"depth":79,"text":52154,"children":54519},[54520,54521,54522,54523,54524],{"id":52157,"depth":106,"text":52158},{"id":52166,"depth":106,"text":52167},{"id":52194,"depth":106,"text":52195},{"id":52230,"depth":106,"text":52231},{"id":52255,"depth":106,"text":52256},{"id":52267,"depth":79,"text":52268,"children":54526},[54527,54528],{"id":52288,"depth":106,"text":52289},{"id":52382,"depth":106,"text":52383},{"id":52440,"depth":79,"text":52441,"children":54530},[54531,54532,54533,54534],{"id":52444,"depth":106,"text":52445},{"id":52468,"depth":106,"text":52469},{"id":52521,"depth":106,"text":52522},{"id":53325,"depth":106,"text":53326},{"id":53711,"depth":79,"text":53712,"children":54536},[54537,54538,54539,54540,54541,54542,54543],{"id":53729,"depth":106,"text":53730},{"id":53766,"depth":106,"text":53767},{"id":53797,"depth":106,"text":53798},{"id":53830,"depth":106,"text":53831},{"id":53911,"depth":106,"text":53912},{"id":54009,"depth":106,"text":54010},{"id":54067,"depth":106,"text":54068},{"id":54120,"depth":79,"text":54121,"children":54545},[54546,54547,54548,54549,54550,54551,54552],{"id":54124,"depth":106,"text":54125},{"id":54149,"depth":106,"text":54150},{"id":54201,"depth":106,"text":54202},{"id":54221,"depth":106,"text":54222},{"id":54288,"depth":106,"text":54289},{"id":54381,"depth":106,"text":54382},{"id":54462,"depth":106,"text":54463},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51696,"description":1322},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54559,"title":54560,"body":54561,"description":1322,"extension":1323,"meta":77894,"navigation":1325,"path":77895,"seo":77896,"stem":77897,"__hash__":77898},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54562,"toc":77834},[54563,54566,54569,54572,54577,54580,54583,54586,54590,54594,54600,54605,54613,54620,54623,54627,54632,54637,54642,54645,54648,54659,54662,54666,54669,54672,54677,54682,54687,54690,54693,54784,54787,54792,54795,54800,54803,54806,54811,54814,54819,54823,54826,54840,54844,54849,54852,54855,54859,54864,54867,54871,54875,54880,54884,54889,54892,54895,54898,54901,54904,54907,54912,54917,54945,54948,54951,54954,54959,54962,54965,54968,54971,54975,55004,55008,55013,55018,55021,55024,55027,55032,55147,55152,55157,55318,55323,55326,55330,55335,55340,55343,55346,55349,55352,55355,55358,55361,55364,55367,55370,55373,55376,55379,55382,55384,55387,55390,55393,55398,55402,55799,55802,55808,55812,55817,57099,57104,57107,57110,57113,57118,58314,58318,58324,58329,58332,58337,58342,58346,58350,58355,58358,58363,58366,58369,58373,59280,59283,59287,59508,59511,59514,59517,59743,59746,59970,59973,59977,59982,59985,59988,60216,60219,60252,60255,60259,60264,60268,60271,60274,60277,60280,60283,60286,60289,60294,61574,61578,61581,62674,62678,62681,62684,62687,62690,62694,62697,62700,62702,62710,64191,64195,64198,64201,64204,64413,64416,64420,64424,64429,64434,64437,64440,64445,64449,64454,64457,64566,64570,64575,64580,64583,64586,64590,64595,64600,64605,64608,64611,64622,64625,64630,64635,64638,64641,64714,64718,64723,64726,64728,64739,64743,64748,66074,66077,66080,66083,66085,66088,66091,66094,66097,66100,66103,66106,66109,66112,66115,66118,66121,66123,66125,66128,66132,67226,67229,67232,67248,67262,67265,67270,67276,67281,67285,67289,67294,67298,67303,67745,67750,67753,67757,67762,67765,67768,67772,67777,67781,67786,67791,67795,67800,67805,67808,67813,67818,67822,67827,67832,67936,67939,67943,67948,68314,68317,68320,68323,68326,68329,68332,68335,68338,69634,69638,69643,69648,69651,69654,69657,69660,69662,69667,69672,69675,69679,69684,69689,69694,69697,69700,69703,69706,69709,69714,69717,69721,69726,69731,69735,69740,69743,69748,69751,69754,69757,69760,69763,69768,69771,69774,69777,69780,69784,69789,69792,69796,69801,69804,69807,69811,69840,69843,69847,69851,69856,69860,69865,69868,69871,69874,69877,69880,69883,69886,69889,69892,69895,69898,69901,69904,69907,69911,69916,69921,69924,69928,69932,69937,69940,69944,69947,69950,69955,69960,69965,69970,69975,69978,69981,69986,69991,69995,70000,70003,70008,70011,70014,70017,70020,70025,70028,70037,70041,70046,70049,70052,70056,70059,70064,70068,70071,70077,70083,70087,70113,70115,71676,71678,72171,72174,72179,72184,72189,72193,72198,72203,72208,72212,72217,72220,72223,72226,72229,72233,72236,72241,72244,72249,72253,72258,72261,72266,72271,72276,72279,72282,72287,72292,72295,72298,72302,72305,72310,72313,72318,72321,72326,72331,72336,72339,72344,72409,72412,72423,72427,72432,72604,72608,72613,72616,72619,72622,72626,72637,72641,72644,72649,72654,72657,72660,72663,72666,72669,72671,72674,72677,72680,72685,72688,72693,72696,72700,72703,72706,72720,72724,72727,72782,72787,72790,72793,72798,72801,72805,72810,72940,72944,72949,72954,73035,73040,73044,73047,73052,73057,73063,73066,73069,73072,73076,73081,73084,73095,73099,73116,76163,76167,76170,76173,76176,76197,76201,76204,76212,76215,76220,76223,76226,76231,76236,76240,76261,76265,76270,76273,76276,76279,76282,76286,76291,76294,76298,76303,76306,76311,76314,76319,76322,76327,77530,77534,77539,77542,77547,77831],[10,54564,54560],{"id":54565},"_3web-apis",[29,54567,54568],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[29,54570,54571],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[29,54573,54574],{},[24,54575],{"alt":64,"src":54576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[29,54578,54579],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[29,54581,54582],{},"建议数组和对象使用 const 来声明",[29,54584,54585],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54587,54589],{"id":54588},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[19,54591,54593],{"id":54592},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[29,54595,54596,54599],{},[66,54597,54598],{},"document"," = HTML 文件解析后的对象化表示；",[29,54601,54602,54604],{},[66,54603,54598],{}," ≠ HTML 文件本身",[29,54606,54607,54612],{},[195,54608,54609],{},[66,54610,54611],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[29,54614,54615,54619],{},[195,54616,54617],{},[66,54618,54598],{}," ：容器里的内容，代表当前加载的网页（DOM）",[29,54621,54622],{},"document实际上为window.document的简写",[19,54624,54626],{"id":54625},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[29,54628,54629],{},[24,54630],{"alt":64,"src":54631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[29,54633,54634],{},[24,54635],{"alt":64,"src":54636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[29,54638,54639],{},[24,54640],{"alt":64,"src":54641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[29,54643,54644],{},"console.dir()",[29,54646,54647],{},"dir用来打印对象",[162,54649,54650,54653,54656],{},[40,54651,54652],{},"任何一个标签，都是一个对象",[40,54654,54655],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[40,54657,54658],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[29,54660,54661],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[19,54663,54665],{"id":54664},"_312-获取dom对象","3.1.2 获取DoM对象",[29,54667,54668],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[29,54670,54671],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[29,54673,54674],{},[195,54675,54676],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[37,54678,54679],{},[40,54680,54681],{},"利用CSS选择器来获取标签元素",[29,54683,54684],{},[24,54685],{"alt":64,"src":54686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[29,54688,54689],{},"里边的选择器必须必须加引号！！！",[29,54691,54692],{},"只选择第一个元素",[59,54694,54696],{"className":54295,"code":54695,"language":54297,"meta":64,"style":64},"\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",[66,54697,54698,54706,54726,54745,54753,54758,54763,54768,54776],{"__ignoreMap":64},[69,54699,54700,54702,54704],{"class":71,"line":72},[69,54701,1011],{"class":86},[69,54703,680],{"class":348},[69,54705,1026],{"class":86},[69,54707,54708,54710,54712,54714,54716,54719,54722,54724],{"class":71,"line":79},[69,54709,53372],{"class":86},[69,54711,442],{"class":348},[69,54713,1016],{"class":109},[69,54715,1019],{"class":86},[69,54717,54718],{"class":1022},"\"box\"",[69,54720,54721],{"class":86},">123\u003C\u002F",[69,54723,442],{"class":348},[69,54725,1026],{"class":86},[69,54727,54728,54730,54732,54734,54736,54738,54741,54743],{"class":71,"line":106},[69,54729,53372],{"class":86},[69,54731,442],{"class":348},[69,54733,1016],{"class":109},[69,54735,1019],{"class":86},[69,54737,54718],{"class":1022},[69,54739,54740],{"class":86},">456\u003C\u002F",[69,54742,442],{"class":348},[69,54744,1026],{"class":86},[69,54746,54747,54749,54751],{"class":71,"line":116},[69,54748,53372],{"class":86},[69,54750,53041],{"class":348},[69,54752,1026],{"class":86},[69,54754,54755],{"class":71,"line":133},[69,54756,54757],{"class":86},"    \u002F\u002F 1.获取匹配的第一个元素\n",[69,54759,54760],{"class":71,"line":139},[69,54761,54762],{"class":86},"    const box = document.querySelector('div')\n",[69,54764,54765],{"class":71,"line":401},[69,54766,54767],{"class":86},"    console.dir(box)\n",[69,54769,54770,54772,54774],{"class":71,"line":470},[69,54771,53645],{"class":86},[69,54773,53041],{"class":348},[69,54775,1026],{"class":86},[69,54777,54778,54780,54782],{"class":71,"line":475},[69,54779,1036],{"class":86},[69,54781,680],{"class":348},[69,54783,1026],{"class":86},[29,54785,54786],{},"只选123，不选456",[29,54788,54789],{},[24,54790],{"alt":64,"src":54791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[29,54793,54794],{},"返回的是一个数组的集合，不能对其进行直接修改",[29,54796,54797],{},[24,54798],{"alt":64,"src":54799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[29,54801,54802],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[29,54804,54805],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[37,54807,54808],{"start":79},[40,54809,54810],{},"其他方法来获取标签元素",[29,54812,54813],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[29,54815,54816],{},[24,54817],{"alt":64,"src":54818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[19,54820,54822],{"id":54821},"_313-操作元素的内容","3.1.3 操作元素的内容",[29,54824,54825],{},"设置修改DOM元素内容有两种方式：",[162,54827,54828,54831,54834,54837],{},[40,54829,54830],{},"元素.innerText=''",[40,54832,54833],{},"元素.innerHTML=''",[40,54835,54836],{},"不写字符串输出数字也是可以的",[40,54838,54839],{},"元素.innerHtml=1",[23237,54841,54843],{"id":54842},"_3131-innertext","3.1.3.1 innerText",[29,54845,54846],{},[24,54847],{"alt":64,"src":54848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[29,54850,54851],{},"思路：实现了修改盒子中的内容！",[29,54853,54854],{},"它只显示纯文本，不解析标签",[23237,54856,54858],{"id":54857},"_3132-innerhtml","3.1.3.2 innerHTML",[29,54860,54861],{},[24,54862],{"alt":64,"src":54863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[29,54865,54866],{},"相比于innerText，他的强大之处在于可以解析标签",[19,54868,54870],{"id":54869},"_314-操作元素属性","3.1.4 操作元素属性",[23237,54872,54874],{"id":54873},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[29,54876,54877],{},[24,54878],{"alt":64,"src":54879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23237,54881,54883],{"id":54882},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[29,54885,54886],{},[24,54887],{"alt":64,"src":54888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[29,54890,54891],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[29,54893,54894],{},"div.style.backgroundColor = 'hotpink'",[29,54896,54897],{},"如果按照css的写法，-表示减，就会出错",[29,54899,54900],{},"body元素不需要再获取，直接用就行！！！！！！",[29,54902,54903],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[29,54905,54906],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[29,54908,54909],{},[24,54910],{"alt":64,"src":54911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[29,54913,54914],{},[24,54915],{"alt":64,"src":54916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[37,54918,54919,54922,54925,54928,54931,54934],{},[40,54920,54921],{},"className这个方式就是修改很多样式的时候来使用的！",[40,54923,54924],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[40,54926,54927],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[40,54929,54930],{},"className为属性名，如果还用class的话就导致与关键字冲突",[40,54932,54933],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[40,54935,54936,54937,54942],{},"解析标签的时候就变为了",[442,54938],{"className":54939},[54940,54941],"nav","box",[54943,54944],"br",{},[29,54946,54947],{},"例子：",[442,54949],{"className":54950},[54940],[53041,54952,54953],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[29,54955,54956],{},[24,54957],{"alt":64,"src":54958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[29,54960,54961],{},"追加和删除类名用classList",[29,54963,54964],{},"常用于类似于开关的操作",[29,54966,54967],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[29,54969,54970],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23237,54972,54974],{"id":54973},"_3143-牢记点","3.1.4.3 牢记点",[37,54976,54977,54980,54983,54986,54989,54992,54995,54998,55001],{},[40,54978,54979],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[40,54981,54982],{},"使用style属性操作css时不要忘记引号",[40,54984,54985],{},"使用className或者classList时也不要忘记引号",[40,54987,54988],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[40,54990,54991],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[40,54993,54994],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[40,54996,54997],{},"若： let arr=['1','2',3] arr[0]=1",[40,54999,55000],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[40,55002,55003],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[19,55005,55007],{"id":55006},"_315-操作表单元素","3.1.5 操作表单元素",[37,55009,55010],{},[40,55011,55012],{},"天生的属性",[29,55014,55015],{},[24,55016],{"alt":64,"src":55017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[29,55019,55020],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[29,55022,55023],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[29,55025,55026],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[29,55028,55029],{},[24,55030],{"alt":64,"src":55031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[59,55033,55035],{"className":51869,"code":55034,"language":349,"meta":64,"style":64},"在复选框中如果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",[66,55036,55037,55042,55074,55079,55084,55089,55094,55098,55103,55108,55125,55137,55142],{"__ignoreMap":64},[69,55038,55039],{"class":71,"line":72},[69,55040,55041],{"class":86},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[69,55043,55044,55046,55049,55052,55054,55057,55059,55061,55063,55065,55067,55069,55072],{"class":71,"line":79},[69,55045,1011],{"class":86},[69,55047,55048],{"class":348},"input",[69,55050,55051],{"class":109}," type",[69,55053,1019],{"class":86},[69,55055,55056],{"class":1022},"\"checkbox\"",[69,55058,16160],{"class":109},[69,55060,1019],{"class":86},[69,55062,8894],{"class":1022},[69,55064,16199],{"class":109},[69,55066,1019],{"class":86},[69,55068,8894],{"class":1022},[69,55070,55071],{"class":109}," checked",[69,55073,1026],{"class":86},[69,55075,55076],{"class":71,"line":106},[69,55077,55078],{"class":86},"不选的话：\n",[69,55080,55081],{"class":71,"line":116},[69,55082,55083],{"class":86},"const input = document.querySelector('input')\n",[69,55085,55086],{"class":71,"line":133},[69,55087,55088],{"class":86},"input.checked=false\n",[69,55090,55091],{"class":71,"line":139},[69,55092,55093],{"class":86},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[69,55095,55096],{"class":71,"line":401},[69,55097,3644],{"emptyLinePlaceholder":1325},[69,55099,55100],{"class":71,"line":470},[69,55101,55102],{"class":86},"禁用按钮：\n",[69,55104,55105],{"class":71,"line":475},[69,55106,55107],{"class":86},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[69,55109,55110,55112,55115,55118,55121,55123],{"class":71,"line":482},[69,55111,1011],{"class":86},[69,55113,55114],{"class":348},"button",[69,55116,55117],{"class":109}," disabled",[69,55119,55120],{"class":86},">点击\u003C\u002F",[69,55122,55114],{"class":348},[69,55124,1026],{"class":86},[69,55126,55127,55129,55131,55133,55135],{"class":71,"line":497},[69,55128,1011],{"class":86},[69,55130,55114],{"class":348},[69,55132,55120],{"class":86},[69,55134,55114],{"class":348},[69,55136,1026],{"class":86},[69,55138,55139],{"class":71,"line":502},[69,55140,55141],{"class":86},"const bt = document.querySelector('button')\n",[69,55143,55144],{"class":71,"line":509},[69,55145,55146],{"class":86},"bt.disabled = false\n",[37,55148,55149],{"start":79},[40,55150,55151],{},"自定义属性",[29,55153,55154],{},[24,55155],{"alt":64,"src":55156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[59,55158,55160],{"className":54295,"code":55159,"language":54297,"meta":64,"style":64},"\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",[66,55161,55162,55170,55198,55217,55236,55255,55274,55282,55287,55292,55297,55302,55310],{"__ignoreMap":64},[69,55163,55164,55166,55168],{"class":71,"line":72},[69,55165,1011],{"class":86},[69,55167,680],{"class":348},[69,55169,1026],{"class":86},[69,55171,55172,55174,55176,55179,55181,55183,55186,55188,55191,55194,55196],{"class":71,"line":79},[69,55173,53372],{"class":86},[69,55175,442],{"class":348},[69,55177,55178],{"class":109}," data-id",[69,55180,1019],{"class":86},[69,55182,4922],{"class":1022},[69,55184,55185],{"class":109}," data-spm",[69,55187,1019],{"class":86},[69,55189,55190],{"class":1022},"\"我不知道\"",[69,55192,55193],{"class":86},">1\u003C\u002F",[69,55195,442],{"class":348},[69,55197,1026],{"class":86},[69,55199,55200,55202,55204,55206,55208,55210,55213,55215],{"class":71,"line":106},[69,55201,53372],{"class":86},[69,55203,442],{"class":348},[69,55205,55178],{"class":109},[69,55207,1019],{"class":86},[69,55209,4945],{"class":1022},[69,55211,55212],{"class":86},">2\u003C\u002F",[69,55214,442],{"class":348},[69,55216,1026],{"class":86},[69,55218,55219,55221,55223,55225,55227,55229,55232,55234],{"class":71,"line":116},[69,55220,53372],{"class":86},[69,55222,442],{"class":348},[69,55224,55178],{"class":109},[69,55226,1019],{"class":86},[69,55228,4958],{"class":1022},[69,55230,55231],{"class":86},">3\u003C\u002F",[69,55233,442],{"class":348},[69,55235,1026],{"class":86},[69,55237,55238,55240,55242,55244,55246,55248,55251,55253],{"class":71,"line":133},[69,55239,53372],{"class":86},[69,55241,442],{"class":348},[69,55243,55178],{"class":109},[69,55245,1019],{"class":86},[69,55247,4971],{"class":1022},[69,55249,55250],{"class":86},">4\u003C\u002F",[69,55252,442],{"class":348},[69,55254,1026],{"class":86},[69,55256,55257,55259,55261,55263,55265,55267,55270,55272],{"class":71,"line":139},[69,55258,53372],{"class":86},[69,55260,442],{"class":348},[69,55262,55178],{"class":109},[69,55264,1019],{"class":86},[69,55266,4992],{"class":1022},[69,55268,55269],{"class":86},">5\u003C\u002F",[69,55271,442],{"class":348},[69,55273,1026],{"class":86},[69,55275,55276,55278,55280],{"class":71,"line":401},[69,55277,53372],{"class":86},[69,55279,53041],{"class":348},[69,55281,1026],{"class":86},[69,55283,55284],{"class":71,"line":470},[69,55285,55286],{"class":86},"    const one = document.querySelector('div')\n",[69,55288,55289],{"class":71,"line":475},[69,55290,55291],{"class":86},"    console.log(one.dataset)\n",[69,55293,55294],{"class":71,"line":482},[69,55295,55296],{"class":86},"    console.log(one.dataset.id)\n",[69,55298,55299],{"class":71,"line":497},[69,55300,55301],{"class":86},"    console.log(one.dataset.spm)\n",[69,55303,55304,55306,55308],{"class":71,"line":502},[69,55305,53645],{"class":86},[69,55307,53041],{"class":348},[69,55309,1026],{"class":86},[69,55311,55312,55314,55316],{"class":71,"line":509},[69,55313,1036],{"class":86},[69,55315,680],{"class":348},[69,55317,1026],{"class":86},[29,55319,55320],{},[24,55321],{"alt":64,"src":55322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[29,55324,55325],{},"document.querySelector选择的是第一个对象（元素）",[19,55327,55329],{"id":55328},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[29,55331,55332],{},[24,55333],{"alt":64,"src":55334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[29,55336,55337],{},[24,55338],{"alt":64,"src":55339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[29,55341,55342],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53041,55344,55345],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[29,55347,55348],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53041,55350,55351],{},"\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",[29,55353,55354],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[29,55356,55357],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[29,55359,55360],{},"单位为毫秒！！！",[29,55362,55363],{},"可以搭配匿名函数来用！！！",[29,55365,55366],{},"setInterval(function () {",[29,55368,55369],{},"alert('两秒执行一次')",[29,55371,55372],{},"}, 2000)",[29,55374,55375],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[29,55377,55378],{},"function fn() {",[29,55380,55381],{},"document.write(1)",[29,55383,2332],{},[29,55385,55386],{},"setInterval(fn, 1000)",[29,55388,55389],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[29,55391,55392],{},"setInterval('fn()', 1000)",[29,55394,55395],{},[24,55396],{"alt":64,"src":55397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23237,55399,55401],{"id":55400},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[59,55403,55405],{"className":51869,"code":55404,"language":349,"meta":64,"style":64},"\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",[66,55406,55407,55417,55431,55435,55443,55457,55477,55489,55497,55501,55509,55546,55551,55556,55561,55569,55577,55599,55607,55612,55634,55639,55644,55655,55660,55680,55688,55703,55718,55729,55734,55744,55754,55758,55767,55771,55779,55787,55791],{"__ignoreMap":64},[69,55408,55409,55411,55413,55415],{"class":71,"line":72},[69,55410,52532],{"class":86},[69,55412,52535],{"class":348},[69,55414,52538],{"class":109},[69,55416,1026],{"class":86},[69,55418,55419,55421,55423,55425,55427,55429],{"class":71,"line":79},[69,55420,1011],{"class":86},[69,55422,349],{"class":348},[69,55424,52549],{"class":109},[69,55426,1019],{"class":86},[69,55428,52554],{"class":1022},[69,55430,1026],{"class":86},[69,55432,55433],{"class":71,"line":106},[69,55434,3644],{"emptyLinePlaceholder":1325},[69,55436,55437,55439,55441],{"class":71,"line":116},[69,55438,1011],{"class":86},[69,55440,52567],{"class":348},[69,55442,1026],{"class":86},[69,55444,55445,55447,55449,55451,55453,55455],{"class":71,"line":133},[69,55446,53372],{"class":86},[69,55448,52577],{"class":348},[69,55450,52580],{"class":109},[69,55452,1019],{"class":86},[69,55454,52585],{"class":1022},[69,55456,1026],{"class":86},[69,55458,55459,55461,55463,55465,55467,55469,55471,55473,55475],{"class":71,"line":139},[69,55460,53372],{"class":86},[69,55462,52577],{"class":348},[69,55464,16160],{"class":109},[69,55466,1019],{"class":86},[69,55468,52624],{"class":1022},[69,55470,52604],{"class":109},[69,55472,1019],{"class":86},[69,55474,52631],{"class":1022},[69,55476,1026],{"class":86},[69,55478,55479,55481,55483,55485,55487],{"class":71,"line":401},[69,55480,53372],{"class":86},[69,55482,52640],{"class":348},[69,55484,52643],{"class":86},[69,55486,52640],{"class":348},[69,55488,1026],{"class":86},[69,55490,55491,55493,55495],{"class":71,"line":470},[69,55492,1036],{"class":86},[69,55494,52567],{"class":348},[69,55496,1026],{"class":86},[69,55498,55499],{"class":71,"line":475},[69,55500,3644],{"emptyLinePlaceholder":1325},[69,55502,55503,55505,55507],{"class":71,"line":482},[69,55504,1011],{"class":86},[69,55506,680],{"class":348},[69,55508,1026],{"class":86},[69,55510,55511,55513,55516,55518,55520,55522,55524,55526,55528,55531,55533,55536,55539,55541,55544],{"class":71,"line":497},[69,55512,53372],{"class":86},[69,55514,55515],{"class":348},"textarea",[69,55517,16160],{"class":109},[69,55519,1019],{"class":86},[69,55521,8894],{"class":1022},[69,55523,16199],{"class":109},[69,55525,1019],{"class":86},[69,55527,8894],{"class":1022},[69,55529,55530],{"class":109}," cols",[69,55532,1019],{"class":86},[69,55534,55535],{"class":1022},"\"30\"",[69,55537,55538],{"class":109}," rows",[69,55540,1019],{"class":86},[69,55542,55543],{"class":1022},"\"10\"",[69,55545,1026],{"class":86},[69,55547,55548],{"class":71,"line":502},[69,55549,55550],{"class":86},"        用户注册协议\n",[69,55552,55553],{"class":71,"line":509},[69,55554,55555],{"class":86},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[69,55557,55558],{"class":71,"line":524},[69,55559,55560],{"class":86},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[69,55562,55563,55565,55567],{"class":71,"line":2888},[69,55564,53006],{"class":86},[69,55566,55515],{"class":348},[69,55568,1026],{"class":86},[69,55570,55571,55573,55575],{"class":71,"line":2893},[69,55572,53372],{"class":86},[69,55574,54943],{"class":348},[69,55576,1026],{"class":86},[69,55578,55579,55581,55583,55585,55587,55590,55592,55595,55597],{"class":71,"line":2899},[69,55580,53372],{"class":86},[69,55582,55114],{"class":348},[69,55584,1016],{"class":109},[69,55586,1019],{"class":86},[69,55588,55589],{"class":1022},"\"btn\"",[69,55591,55117],{"class":109},[69,55593,55594],{"class":86},">我已经阅读用户协议(5)\u003C\u002F",[69,55596,55114],{"class":348},[69,55598,1026],{"class":86},[69,55600,55601,55603,55605],{"class":71,"line":2919},[69,55602,53372],{"class":86},[69,55604,53041],{"class":348},[69,55606,1026],{"class":86},[69,55608,55609],{"class":71,"line":2924},[69,55610,55611],{"class":75},"    \u002F\u002F 1. 获取元素\n",[69,55613,55614,55616,55619,55621,55624,55627,55629,55632],{"class":71,"line":2938},[69,55615,12463],{"class":82},[69,55617,55618],{"class":90}," btn",[69,55620,14805],{"class":82},[69,55622,55623],{"class":86}," document.",[69,55625,55626],{"class":109},"querySelector",[69,55628,1398],{"class":86},[69,55630,55631],{"class":1022},"'.btn'",[69,55633,1404],{"class":86},[69,55635,55636],{"class":71,"line":2943},[69,55637,55638],{"class":75},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[69,55640,55641],{"class":71,"line":2972},[69,55642,55643],{"class":75},"    \u002F\u002F 2. 倒计时\n",[69,55645,55646,55648,55650,55652],{"class":71,"line":2977},[69,55647,53447],{"class":82},[69,55649,10680],{"class":86},[69,55651,1019],{"class":82},[69,55653,55654],{"class":90}," 5\n",[69,55656,55657],{"class":71,"line":2994},[69,55658,55659],{"class":75},"    \u002F\u002F 2.1 开启定时器\n",[69,55661,55662,55664,55667,55669,55672,55674,55677],{"class":71,"line":2999},[69,55663,53447],{"class":82},[69,55665,55666],{"class":86}," n ",[69,55668,1019],{"class":82},[69,55670,55671],{"class":109}," setInterval",[69,55673,1398],{"class":86},[69,55675,55676],{"class":82},"function",[69,55678,55679],{"class":86}," () {\n",[69,55681,55682,55685],{"class":71,"line":3004},[69,55683,55684],{"class":86},"      i",[69,55686,55687],{"class":82},"--\n",[69,55689,55690,55693,55695,55698,55700],{"class":71,"line":3009},[69,55691,55692],{"class":86},"      btn.innerHTML ",[69,55694,1019],{"class":82},[69,55696,55697],{"class":1022}," `我已经阅读用户协议(${",[69,55699,1830],{"class":86},[69,55701,55702],{"class":1022},"})`\n",[69,55704,55705,55708,55711,55714,55716],{"class":71,"line":3023},[69,55706,55707],{"class":82},"      if",[69,55709,55710],{"class":86}," (i ",[69,55712,55713],{"class":82},"===",[69,55715,5337],{"class":90},[69,55717,103],{"class":86},[69,55719,55720,55723,55726],{"class":71,"line":3028},[69,55721,55722],{"class":109},"        clearInterval",[69,55724,55725],{"class":86},"(n)  ",[69,55727,55728],{"class":75},"\u002F\u002F 关闭定时器\n",[69,55730,55731],{"class":71,"line":3821},[69,55732,55733],{"class":75},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[69,55735,55736,55739,55741],{"class":71,"line":3835},[69,55737,55738],{"class":86},"        btn.disabled ",[69,55740,1019],{"class":82},[69,55742,55743],{"class":90}," false\n",[69,55745,55746,55749,55751],{"class":71,"line":3843},[69,55747,55748],{"class":86},"        btn.innerHTML ",[69,55750,1019],{"class":82},[69,55752,55753],{"class":1022}," '同意'\n",[69,55755,55756],{"class":71,"line":3848},[69,55757,53626],{"class":86},[69,55759,55760,55763,55765],{"class":71,"line":3854},[69,55761,55762],{"class":86},"    }, ",[69,55764,7652],{"class":90},[69,55766,1404],{"class":86},[69,55768,55769],{"class":71,"line":3860},[69,55770,3644],{"emptyLinePlaceholder":1325},[69,55772,55773,55775,55777],{"class":71,"line":3865},[69,55774,53645],{"class":86},[69,55776,53041],{"class":348},[69,55778,1026],{"class":86},[69,55780,55781,55783,55785],{"class":71,"line":9190},[69,55782,1036],{"class":86},[69,55784,680],{"class":348},[69,55786,1026],{"class":86},[69,55788,55789],{"class":71,"line":9214},[69,55790,3644],{"emptyLinePlaceholder":1325},[69,55792,55793,55795,55797],{"class":71,"line":9219},[69,55794,1036],{"class":86},[69,55796,349],{"class":348},[69,55798,1026],{"class":86},[29,55800,55801],{},"不要一直想着用死循环,避免死循环",[29,55803,55804,55807],{},[66,55805,55806],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23237,55809,55811],{"id":55810},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[37,55813,55814],{},[40,55815,55816],{},"法1",[59,55818,55820],{"className":51869,"code":55819,"language":349,"meta":64,"style":64},"\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",[66,55821,55822,55832,55846,55850,55858,55872,55892,55904,55912,55918,55929,55940,55944,55948,55955,55967,55971,55975,55982,55994,56008,56021,56035,56039,56043,56050,56061,56072,56083,56095,56107,56119,56123,56127,56135,56145,56158,56170,56183,56187,56191,56198,56208,56220,56232,56243,56254,56264,56276,56288,56292,56296,56305,56317,56329,56357,56370,56374,56378,56385,56396,56400,56408,56416,56420,56428,56442,56457,56481,56489,56504,56517,56525,56546,56558,56570,56582,56594,56606,56618,56630,56639,56647,56655,56663,56675,56698,56717,56736,56755,56774,56793,56812,56832,56836,56856,56875,56895,56916,56927,56944,56954,56964,56974,56979,56984,56989,56994,57019,57032,57036,57059,57063,57071,57079,57087,57091],{"__ignoreMap":64},[69,55823,55824,55826,55828,55830],{"class":71,"line":72},[69,55825,52532],{"class":86},[69,55827,52535],{"class":348},[69,55829,52538],{"class":109},[69,55831,1026],{"class":86},[69,55833,55834,55836,55838,55840,55842,55844],{"class":71,"line":79},[69,55835,1011],{"class":86},[69,55837,349],{"class":348},[69,55839,52549],{"class":109},[69,55841,1019],{"class":86},[69,55843,52554],{"class":1022},[69,55845,1026],{"class":86},[69,55847,55848],{"class":71,"line":106},[69,55849,3644],{"emptyLinePlaceholder":1325},[69,55851,55852,55854,55856],{"class":71,"line":116},[69,55853,1011],{"class":86},[69,55855,52567],{"class":348},[69,55857,1026],{"class":86},[69,55859,55860,55862,55864,55866,55868,55870],{"class":71,"line":133},[69,55861,53372],{"class":86},[69,55863,52577],{"class":348},[69,55865,52580],{"class":109},[69,55867,1019],{"class":86},[69,55869,52585],{"class":1022},[69,55871,1026],{"class":86},[69,55873,55874,55876,55878,55880,55882,55884,55886,55888,55890],{"class":71,"line":139},[69,55875,53372],{"class":86},[69,55877,52577],{"class":348},[69,55879,16160],{"class":109},[69,55881,1019],{"class":86},[69,55883,52624],{"class":1022},[69,55885,52604],{"class":109},[69,55887,1019],{"class":86},[69,55889,52631],{"class":1022},[69,55891,1026],{"class":86},[69,55893,55894,55896,55898,55900,55902],{"class":71,"line":401},[69,55895,53372],{"class":86},[69,55897,52640],{"class":348},[69,55899,52643],{"class":86},[69,55901,52640],{"class":348},[69,55903,1026],{"class":86},[69,55905,55906,55908,55910],{"class":71,"line":470},[69,55907,53372],{"class":86},[69,55909,1297],{"class":348},[69,55911,1026],{"class":86},[69,55913,55914,55916],{"class":71,"line":475},[69,55915,7645],{"class":348},[69,55917,113],{"class":86},[69,55919,55920,55923,55925,55927],{"class":71,"line":482},[69,55921,55922],{"class":90},"      padding",[69,55924,94],{"class":86},[69,55926,1583],{"class":90},[69,55928,130],{"class":86},[69,55930,55931,55934,55936,55938],{"class":71,"line":497},[69,55932,55933],{"class":90},"      margin",[69,55935,94],{"class":86},[69,55937,1583],{"class":90},[69,55939,130],{"class":86},[69,55941,55942],{"class":71,"line":502},[69,55943,3431],{"class":86},[69,55945,55946],{"class":71,"line":509},[69,55947,3644],{"emptyLinePlaceholder":1325},[69,55949,55950,55953],{"class":71,"line":524},[69,55951,55952],{"class":348},"    li",[69,55954,113],{"class":86},[69,55956,55957,55960,55962,55965],{"class":71,"line":2888},[69,55958,55959],{"class":90},"      list-style",[69,55961,94],{"class":86},[69,55963,55964],{"class":90},"none",[69,55966,130],{"class":86},[69,55968,55969],{"class":71,"line":2893},[69,55970,3431],{"class":86},[69,55972,55973],{"class":71,"line":2899},[69,55974,3644],{"emptyLinePlaceholder":1325},[69,55976,55977,55980],{"class":71,"line":2919},[69,55978,55979],{"class":109},"    .box",[69,55981,113],{"class":86},[69,55983,55984,55987,55989,55992],{"class":71,"line":2924},[69,55985,55986],{"class":90},"      position",[69,55988,94],{"class":86},[69,55990,55991],{"class":90},"relative",[69,55993,130],{"class":86},[69,55995,55996,55999,56001,56004,56006],{"class":71,"line":2938},[69,55997,55998],{"class":90},"      width",[69,56000,94],{"class":86},[69,56002,56003],{"class":90},"976",[69,56005,100],{"class":82},[69,56007,130],{"class":86},[69,56009,56010,56013,56015,56017,56019],{"class":71,"line":2943},[69,56011,56012],{"class":90},"      height",[69,56014,94],{"class":86},[69,56016,2790],{"class":90},[69,56018,100],{"class":82},[69,56020,130],{"class":86},[69,56022,56023,56025,56027,56029,56031,56033],{"class":71,"line":2972},[69,56024,55933],{"class":90},[69,56026,94],{"class":86},[69,56028,124],{"class":90},[69,56030,100],{"class":82},[69,56032,52787],{"class":90},[69,56034,130],{"class":86},[69,56036,56037],{"class":71,"line":2977},[69,56038,3431],{"class":86},[69,56040,56041],{"class":71,"line":2994},[69,56042,3644],{"emptyLinePlaceholder":1325},[69,56044,56045,56048],{"class":71,"line":2999},[69,56046,56047],{"class":109},"    .slider-footer",[69,56049,113],{"class":86},[69,56051,56052,56054,56056,56059],{"class":71,"line":3004},[69,56053,55986],{"class":90},[69,56055,94],{"class":86},[69,56057,56058],{"class":90},"absolute",[69,56060,130],{"class":86},[69,56062,56063,56066,56068,56070],{"class":71,"line":3009},[69,56064,56065],{"class":90},"      left",[69,56067,94],{"class":86},[69,56069,1583],{"class":90},[69,56071,130],{"class":86},[69,56073,56074,56077,56079,56081],{"class":71,"line":3023},[69,56075,56076],{"class":90},"      bottom",[69,56078,94],{"class":86},[69,56080,1583],{"class":90},[69,56082,130],{"class":86},[69,56084,56085,56087,56089,56091,56093],{"class":71,"line":3028},[69,56086,55998],{"class":90},[69,56088,94],{"class":86},[69,56090,124],{"class":90},[69,56092,127],{"class":82},[69,56094,130],{"class":86},[69,56096,56097,56099,56101,56103,56105],{"class":71,"line":3821},[69,56098,56012],{"class":90},[69,56100,94],{"class":86},[69,56102,1963],{"class":90},[69,56104,127],{"class":82},[69,56106,130],{"class":86},[69,56108,56109,56112,56114,56117],{"class":71,"line":3835},[69,56110,56111],{"class":90},"      background-color",[69,56113,94],{"class":86},[69,56115,56116],{"class":90},"skyblue",[69,56118,130],{"class":86},[69,56120,56121],{"class":71,"line":3843},[69,56122,3431],{"class":86},[69,56124,56125],{"class":71,"line":3848},[69,56126,3644],{"emptyLinePlaceholder":1325},[69,56128,56129,56131,56133],{"class":71,"line":3854},[69,56130,56047],{"class":109},[69,56132,8067],{"class":348},[69,56134,113],{"class":86},[69,56136,56137,56139,56141,56143],{"class":71,"line":3860},[69,56138,55986],{"class":90},[69,56140,94],{"class":86},[69,56142,56058],{"class":90},[69,56144,130],{"class":86},[69,56146,56147,56150,56152,56154,56156],{"class":71,"line":3865},[69,56148,56149],{"class":90},"      font-size",[69,56151,94],{"class":86},[69,56153,2288],{"class":90},[69,56155,100],{"class":82},[69,56157,130],{"class":86},[69,56159,56160,56162,56164,56166,56168],{"class":71,"line":9190},[69,56161,56065],{"class":90},[69,56163,94],{"class":86},[69,56165,2087],{"class":90},[69,56167,100],{"class":82},[69,56169,130],{"class":86},[69,56171,56172,56175,56177,56179,56181],{"class":71,"line":9214},[69,56173,56174],{"class":90},"      top",[69,56176,94],{"class":86},[69,56178,1709],{"class":90},[69,56180,100],{"class":82},[69,56182,130],{"class":86},[69,56184,56185],{"class":71,"line":9219},[69,56186,3431],{"class":86},[69,56188,56189],{"class":71,"line":9225},[69,56190,3644],{"emptyLinePlaceholder":1325},[69,56192,56193,56196],{"class":71,"line":9252},[69,56194,56195],{"class":348},"    ul",[69,56197,113],{"class":86},[69,56199,56200,56202,56204,56206],{"class":71,"line":9257},[69,56201,55986],{"class":90},[69,56203,94],{"class":86},[69,56205,56058],{"class":90},[69,56207,130],{"class":86},[69,56209,56210,56212,56214,56216,56218],{"class":71,"line":9263},[69,56211,56174],{"class":90},[69,56213,94],{"class":86},[69,56215,2168],{"class":90},[69,56217,100],{"class":82},[69,56219,130],{"class":86},[69,56221,56222,56224,56226,56228,56230],{"class":71,"line":9275},[69,56223,56065],{"class":90},[69,56225,94],{"class":86},[69,56227,2087],{"class":90},[69,56229,100],{"class":82},[69,56231,130],{"class":86},[69,56233,56234,56237,56239,56241],{"class":71,"line":9287},[69,56235,56236],{"class":90},"      display",[69,56238,94],{"class":86},[69,56240,52709],{"class":90},[69,56242,130],{"class":86},[69,56244,56245,56248,56250,56252],{"class":71,"line":9299},[69,56246,56247],{"class":90},"      justify-content",[69,56249,94],{"class":86},[69,56251,52898],{"class":90},[69,56253,130],{"class":86},[69,56255,56256,56258,56260,56262],{"class":71,"line":10958},[69,56257,55986],{"class":90},[69,56259,94],{"class":86},[69,56261,56058],{"class":90},[69,56263,130],{"class":86},[69,56265,56266,56268,56270,56272,56274],{"class":71,"line":10983},[69,56267,55998],{"class":90},[69,56269,94],{"class":86},[69,56271,5236],{"class":90},[69,56273,100],{"class":82},[69,56275,130],{"class":86},[69,56277,56278,56280,56282,56284,56286],{"class":71,"line":11006},[69,56279,56012],{"class":90},[69,56281,94],{"class":86},[69,56283,2087],{"class":90},[69,56285,100],{"class":82},[69,56287,130],{"class":86},[69,56289,56290],{"class":71,"line":11030},[69,56291,3431],{"class":86},[69,56293,56294],{"class":71,"line":11035},[69,56295,3644],{"emptyLinePlaceholder":1325},[69,56297,56298,56300,56303],{"class":71,"line":11040},[69,56299,56195],{"class":348},[69,56301,56302],{"class":348}," li",[69,56304,113],{"class":86},[69,56306,56307,56309,56311,56313,56315],{"class":71,"line":11045},[69,56308,55998],{"class":90},[69,56310,94],{"class":86},[69,56312,2087],{"class":90},[69,56314,100],{"class":82},[69,56316,130],{"class":86},[69,56318,56319,56321,56323,56325,56327],{"class":71,"line":11054},[69,56320,56012],{"class":90},[69,56322,94],{"class":86},[69,56324,2087],{"class":90},[69,56326,100],{"class":82},[69,56328,130],{"class":86},[69,56330,56331,56333,56335,56338,56340,56342,56344,56346,56348,56350,56352,56355],{"class":71,"line":11059},[69,56332,56111],{"class":90},[69,56334,94],{"class":86},[69,56336,56337],{"class":90},"rgba",[69,56339,1398],{"class":86},[69,56341,1583],{"class":90},[69,56343,13677],{"class":86},[69,56345,1583],{"class":90},[69,56347,13677],{"class":86},[69,56349,1583],{"class":90},[69,56351,13677],{"class":86},[69,56353,56354],{"class":90},".4",[69,56356,3963],{"class":86},[69,56358,56359,56362,56364,56366,56368],{"class":71,"line":11065},[69,56360,56361],{"class":90},"      border-radius",[69,56363,94],{"class":86},[69,56365,390],{"class":90},[69,56367,100],{"class":82},[69,56369,130],{"class":86},[69,56371,56372],{"class":71,"line":11086},[69,56373,3431],{"class":86},[69,56375,56376],{"class":71,"line":11092},[69,56377,3644],{"emptyLinePlaceholder":1325},[69,56379,56380,56383],{"class":71,"line":11106},[69,56381,56382],{"class":109},"    .activate",[69,56384,113],{"class":86},[69,56386,56387,56389,56391,56394],{"class":71,"line":11112},[69,56388,56111],{"class":90},[69,56390,94],{"class":86},[69,56392,56393],{"class":90},"#f7f7f7",[69,56395,130],{"class":86},[69,56397,56398],{"class":71,"line":11139},[69,56399,3431],{"class":86},[69,56401,56402,56404,56406],{"class":71,"line":11148},[69,56403,53645],{"class":86},[69,56405,1297],{"class":348},[69,56407,1026],{"class":86},[69,56409,56410,56412,56414],{"class":71,"line":11154},[69,56411,1036],{"class":86},[69,56413,52567],{"class":348},[69,56415,1026],{"class":86},[69,56417,56418],{"class":71,"line":11162},[69,56419,3644],{"emptyLinePlaceholder":1325},[69,56421,56422,56424,56426],{"class":71,"line":11167},[69,56423,1011],{"class":86},[69,56425,680],{"class":348},[69,56427,1026],{"class":86},[69,56429,56430,56432,56434,56436,56438,56440],{"class":71,"line":17843},[69,56431,53372],{"class":86},[69,56433,442],{"class":348},[69,56435,1016],{"class":109},[69,56437,1019],{"class":86},[69,56439,54718],{"class":1022},[69,56441,1026],{"class":86},[69,56443,56444,56446,56448,56450,56452,56455],{"class":71,"line":17849},[69,56445,52574],{"class":86},[69,56447,442],{"class":348},[69,56449,1016],{"class":109},[69,56451,1019],{"class":86},[69,56453,56454],{"class":1022},"\"slider-wrapper\"",[69,56456,1026],{"class":86},[69,56458,56459,56462,56464,56467,56469,56472,56475,56477,56479],{"class":71,"line":17872},[69,56460,56461],{"class":86},"      \u003C",[69,56463,24],{"class":348},[69,56465,56466],{"class":109}," src",[69,56468,1019],{"class":86},[69,56470,56471],{"class":1022},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[69,56473,56474],{"class":109}," alt",[69,56476,1019],{"class":86},[69,56478,8894],{"class":1022},[69,56480,1026],{"class":86},[69,56482,56483,56485,56487],{"class":71,"line":17878},[69,56484,53006],{"class":86},[69,56486,442],{"class":348},[69,56488,1026],{"class":86},[69,56490,56491,56493,56495,56497,56499,56502],{"class":71,"line":17901},[69,56492,52574],{"class":86},[69,56494,442],{"class":348},[69,56496,1016],{"class":109},[69,56498,1019],{"class":86},[69,56500,56501],{"class":1022},"\"slider-footer\"",[69,56503,1026],{"class":86},[69,56505,56506,56508,56510,56513,56515],{"class":71,"line":17915},[69,56507,56461],{"class":86},[69,56509,29],{"class":348},[69,56511,56512],{"class":86},">对人类来说会不会太超前了?\u003C\u002F",[69,56514,29],{"class":348},[69,56516,1026],{"class":86},[69,56518,56519,56521,56523],{"class":71,"line":17935},[69,56520,56461],{"class":86},[69,56522,162],{"class":348},[69,56524,1026],{"class":86},[69,56526,56527,56530,56532,56534,56536,56539,56542,56544],{"class":71,"line":17941},[69,56528,56529],{"class":86},"        \u003C",[69,56531,40],{"class":348},[69,56533,1016],{"class":109},[69,56535,1019],{"class":86},[69,56537,56538],{"class":1022},"\"activate\"",[69,56540,56541],{"class":86},">\u003C\u002F",[69,56543,40],{"class":348},[69,56545,1026],{"class":86},[69,56547,56548,56550,56552,56554,56556],{"class":71,"line":17952},[69,56549,56529],{"class":86},[69,56551,40],{"class":348},[69,56553,56541],{"class":86},[69,56555,40],{"class":348},[69,56557,1026],{"class":86},[69,56559,56560,56562,56564,56566,56568],{"class":71,"line":17975},[69,56561,56529],{"class":86},[69,56563,40],{"class":348},[69,56565,56541],{"class":86},[69,56567,40],{"class":348},[69,56569,1026],{"class":86},[69,56571,56572,56574,56576,56578,56580],{"class":71,"line":17997},[69,56573,56529],{"class":86},[69,56575,40],{"class":348},[69,56577,56541],{"class":86},[69,56579,40],{"class":348},[69,56581,1026],{"class":86},[69,56583,56584,56586,56588,56590,56592],{"class":71,"line":18002},[69,56585,56529],{"class":86},[69,56587,40],{"class":348},[69,56589,56541],{"class":86},[69,56591,40],{"class":348},[69,56593,1026],{"class":86},[69,56595,56596,56598,56600,56602,56604],{"class":71,"line":18008},[69,56597,56529],{"class":86},[69,56599,40],{"class":348},[69,56601,56541],{"class":86},[69,56603,40],{"class":348},[69,56605,1026],{"class":86},[69,56607,56608,56610,56612,56614,56616],{"class":71,"line":18022},[69,56609,56529],{"class":86},[69,56611,40],{"class":348},[69,56613,56541],{"class":86},[69,56615,40],{"class":348},[69,56617,1026],{"class":86},[69,56619,56620,56622,56624,56626,56628],{"class":71,"line":18035},[69,56621,56529],{"class":86},[69,56623,40],{"class":348},[69,56625,56541],{"class":86},[69,56627,40],{"class":348},[69,56629,1026],{"class":86},[69,56631,56632,56635,56637],{"class":71,"line":18040},[69,56633,56634],{"class":86},"      \u003C\u002F",[69,56636,162],{"class":348},[69,56638,1026],{"class":86},[69,56640,56641,56643,56645],{"class":71,"line":18054},[69,56642,53006],{"class":86},[69,56644,442],{"class":348},[69,56646,1026],{"class":86},[69,56648,56649,56651,56653],{"class":71,"line":18059},[69,56650,53645],{"class":86},[69,56652,442],{"class":348},[69,56654,1026],{"class":86},[69,56656,56657,56659,56661],{"class":71,"line":18065},[69,56658,53372],{"class":86},[69,56660,53041],{"class":348},[69,56662,1026],{"class":86},[69,56664,56665,56667,56670,56672],{"class":71,"line":18070},[69,56666,12463],{"class":82},[69,56668,56669],{"class":90}," arrImage",[69,56671,14805],{"class":82},[69,56673,56674],{"class":86}," [\n",[69,56676,56677,56680,56683,56686,56689,56692,56695],{"class":71,"line":18084},[69,56678,56679],{"class":86},"      { url: ",[69,56681,56682],{"class":1022},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[69,56684,56685],{"class":86},", title: ",[69,56687,56688],{"class":1022},"'对人类来说会不会太超前了?'",[69,56690,56691],{"class":86},", color: ",[69,56693,56694],{"class":1022},"'rgba(100,67,68)'",[69,56696,56697],{"class":86}," },\n",[69,56699,56700,56702,56705,56707,56710,56712,56715],{"class":71,"line":18089},[69,56701,56679],{"class":86},[69,56703,56704],{"class":1022},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[69,56706,56685],{"class":86},[69,56708,56709],{"class":1022},"'开启剑与雪的黑暗传说!'",[69,56711,56691],{"class":86},[69,56713,56714],{"class":1022},"'rgba(43,35,26)'",[69,56716,56697],{"class":86},[69,56718,56719,56721,56724,56726,56729,56731,56734],{"class":71,"line":18094},[69,56720,56679],{"class":86},[69,56722,56723],{"class":1022},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[69,56725,56685],{"class":86},[69,56727,56728],{"class":1022},"'真正的jo厨出现了!'",[69,56730,56691],{"class":86},[69,56732,56733],{"class":1022},"'rgba(36,31,33)'",[69,56735,56697],{"class":86},[69,56737,56738,56740,56743,56745,56748,56750,56753],{"class":71,"line":18108},[69,56739,56679],{"class":86},[69,56741,56742],{"class":1022},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[69,56744,56685],{"class":86},[69,56746,56747],{"class":1022},"'李玉刚:让世界通过b站看到东方大国文化'",[69,56749,56691],{"class":86},[69,56751,56752],{"class":1022},"'rgba(139,98,66)'",[69,56754,56697],{"class":86},[69,56756,56757,56759,56762,56764,56767,56769,56772],{"class":71,"line":18120},[69,56758,56679],{"class":86},[69,56760,56761],{"class":1022},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[69,56763,56685],{"class":86},[69,56765,56766],{"class":1022},"'快来分享你的寒假日常吧'",[69,56768,56691],{"class":86},[69,56770,56771],{"class":1022},"'rgba(67,90,92)'",[69,56773,56697],{"class":86},[69,56775,56776,56778,56781,56783,56786,56788,56791],{"class":71,"line":18125},[69,56777,56679],{"class":86},[69,56779,56780],{"class":1022},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[69,56782,56685],{"class":86},[69,56784,56785],{"class":1022},"'哔哩哔哩小年YEAR'",[69,56787,56691],{"class":86},[69,56789,56790],{"class":1022},"'rgba(166,131,143)'",[69,56792,56697],{"class":86},[69,56794,56795,56797,56800,56802,56805,56807,56810],{"class":71,"line":18138},[69,56796,56679],{"class":86},[69,56798,56799],{"class":1022},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[69,56801,56685],{"class":86},[69,56803,56804],{"class":1022},"'一站式解决你的电脑配置问题'",[69,56806,56691],{"class":86},[69,56808,56809],{"class":1022},"'rgba(53,29,25)'",[69,56811,56697],{"class":86},[69,56813,56814,56816,56819,56821,56824,56826,56829],{"class":71,"line":18143},[69,56815,56679],{"class":86},[69,56817,56818],{"class":1022},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[69,56820,56685],{"class":86},[69,56822,56823],{"class":1022},"'谁不想和小猫咪贴贴呢?'",[69,56825,56691],{"class":86},[69,56827,56828],{"class":1022},"'rgba(99,72,114)'",[69,56830,56831],{"class":86}," }\n",[69,56833,56834],{"class":71,"line":18148},[69,56835,54337],{"class":86},[69,56837,56838,56840,56843,56845,56847,56849,56851,56854],{"class":71,"line":18153},[69,56839,12463],{"class":82},[69,56841,56842],{"class":90}," img",[69,56844,14805],{"class":82},[69,56846,55623],{"class":86},[69,56848,55626],{"class":109},[69,56850,1398],{"class":86},[69,56852,56853],{"class":1022},"'.slider-wrapper img'",[69,56855,1404],{"class":86},[69,56857,56858,56860,56862,56864,56866,56868,56870,56873],{"class":71,"line":18166},[69,56859,12463],{"class":82},[69,56861,8067],{"class":90},[69,56863,14805],{"class":82},[69,56865,55623],{"class":86},[69,56867,55626],{"class":109},[69,56869,1398],{"class":86},[69,56871,56872],{"class":1022},"'.slider-footer p'",[69,56874,1404],{"class":86},[69,56876,56877,56879,56882,56884,56886,56888,56890,56893],{"class":71,"line":18171},[69,56878,12463],{"class":82},[69,56880,56881],{"class":90}," color",[69,56883,14805],{"class":82},[69,56885,55623],{"class":86},[69,56887,55626],{"class":109},[69,56889,1398],{"class":86},[69,56891,56892],{"class":1022},"'.slider-footer'",[69,56894,1404],{"class":86},[69,56896,56897,56899,56902,56904,56906,56909,56911,56914],{"class":71,"line":33869},[69,56898,12463],{"class":82},[69,56900,56901],{"class":90}," lis",[69,56903,14805],{"class":82},[69,56905,55623],{"class":86},[69,56907,56908],{"class":109},"querySelectorAll",[69,56910,1398],{"class":86},[69,56912,56913],{"class":1022},"'.slider-footer ul li'",[69,56915,1404],{"class":86},[69,56917,56918,56920,56922,56924],{"class":71,"line":33875},[69,56919,53447],{"class":82},[69,56921,10680],{"class":86},[69,56923,1019],{"class":82},[69,56925,56926],{"class":90}," 1\n",[69,56928,56929,56931,56934,56936,56938,56940,56942],{"class":71,"line":33881},[69,56930,53447],{"class":82},[69,56932,56933],{"class":86}," timer ",[69,56935,1019],{"class":82},[69,56937,55671],{"class":109},[69,56939,1398],{"class":86},[69,56941,55676],{"class":82},[69,56943,55679],{"class":86},[69,56945,56946,56949,56951],{"class":71,"line":33887},[69,56947,56948],{"class":86},"      img.src ",[69,56950,1019],{"class":82},[69,56952,56953],{"class":86}," arrImage[i].url\n",[69,56955,56956,56959,56961],{"class":71,"line":33893},[69,56957,56958],{"class":86},"      p.innerHTML ",[69,56960,1019],{"class":82},[69,56962,56963],{"class":86}," arrImage[i].title\n",[69,56965,56966,56969,56971],{"class":71,"line":33904},[69,56967,56968],{"class":86},"      color.style.backgroundColor ",[69,56970,1019],{"class":82},[69,56972,56973],{"class":86}," arrImage[i].color\n",[69,56975,56976],{"class":71,"line":33910},[69,56977,56978],{"class":75},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[69,56980,56981],{"class":71,"line":33930},[69,56982,56983],{"class":75},"      \u002F\u002F li.classList.add('activate')\n",[69,56985,56986],{"class":71,"line":33936},[69,56987,56988],{"class":75},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[69,56990,56991],{"class":71,"line":33947},[69,56992,56993],{"class":75},"      \u002F\u002F lis[i].classList.remove('activate')\n",[69,56995,56996,56999,57001,57003,57006,57009,57012,57014,57017],{"class":71,"line":33953},[69,56997,56998],{"class":86},"      document.",[69,57000,55626],{"class":109},[69,57002,1398],{"class":86},[69,57004,57005],{"class":1022},"'.activate'",[69,57007,57008],{"class":86},")?.classList.",[69,57010,57011],{"class":109},"toggle",[69,57013,1398],{"class":86},[69,57015,57016],{"class":1022},"'activate'",[69,57018,1404],{"class":86},[69,57020,57021,57024,57026,57028,57030],{"class":71,"line":33959},[69,57022,57023],{"class":86},"      lis[i].classList.",[69,57025,6576],{"class":109},[69,57027,1398],{"class":86},[69,57029,57016],{"class":1022},[69,57031,1404],{"class":86},[69,57033,57034],{"class":71,"line":33965},[69,57035,3644],{"emptyLinePlaceholder":1325},[69,57037,57038,57041,57043,57045,57047,57049,57051,57053,57056],{"class":71,"line":33971},[69,57039,57040],{"class":86},"      i ",[69,57042,1019],{"class":82},[69,57044,55710],{"class":86},[69,57046,1869],{"class":82},[69,57048,26355],{"class":90},[69,57050,14955],{"class":86},[69,57052,127],{"class":82},[69,57054,57055],{"class":86}," arrImage.",[69,57057,57058],{"class":90},"length\n",[69,57060,57061],{"class":71,"line":33977},[69,57062,3644],{"emptyLinePlaceholder":1325},[69,57064,57065,57067,57069],{"class":71,"line":33983},[69,57066,55762],{"class":86},[69,57068,7652],{"class":90},[69,57070,1404],{"class":86},[69,57072,57073,57075,57077],{"class":71,"line":33989},[69,57074,53645],{"class":86},[69,57076,53041],{"class":348},[69,57078,1026],{"class":86},[69,57080,57081,57083,57085],{"class":71,"line":34009},[69,57082,1036],{"class":86},[69,57084,680],{"class":348},[69,57086,1026],{"class":86},[69,57088,57089],{"class":71,"line":34015},[69,57090,3644],{"emptyLinePlaceholder":1325},[69,57092,57093,57095,57097],{"class":71,"line":34031},[69,57094,1036],{"class":86},[69,57096,349],{"class":348},[69,57098,1026],{"class":86},[29,57100,57101],{},[24,57102],{"alt":64,"src":57103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[29,57105,57106],{},"?.就是短路保护,确保输出正常进行",[29,57108,57109],{},"不要忘记取余%,有时候可以用",[29,57111,57112],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[37,57114,57115],{"start":79},[40,57116,57117],{},"法2",[59,57119,57121],{"className":51869,"code":57120,"language":349,"meta":64,"style":64},"\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",[66,57122,57123,57133,57147,57151,57159,57173,57193,57205,57213,57219,57229,57239,57243,57247,57253,57263,57267,57271,57277,57287,57299,57311,57325,57329,57333,57339,57349,57359,57369,57381,57393,57403,57407,57411,57419,57429,57441,57453,57465,57469,57473,57479,57489,57501,57513,57523,57533,57543,57555,57567,57571,57575,57583,57595,57607,57633,57645,57649,57653,57659,57669,57673,57681,57689,57693,57701,57715,57729,57749,57757,57771,57783,57791,57809,57821,57833,57845,57857,57869,57881,57893,57901,57909,57917,57925,57936,57952,57968,57984,58000,58016,58032,58048,58064,58068,58073,58091,58109,58119,58124,58129,58140,58146,58161,58170,58174,58179,58188,58193,58202,58207,58212,58217,58240,58270,58274,58282,58286,58294,58302,58306],{"__ignoreMap":64},[69,57124,57125,57127,57129,57131],{"class":71,"line":72},[69,57126,52532],{"class":86},[69,57128,52535],{"class":348},[69,57130,52538],{"class":109},[69,57132,1026],{"class":86},[69,57134,57135,57137,57139,57141,57143,57145],{"class":71,"line":79},[69,57136,1011],{"class":86},[69,57138,349],{"class":348},[69,57140,52549],{"class":109},[69,57142,1019],{"class":86},[69,57144,52554],{"class":1022},[69,57146,1026],{"class":86},[69,57148,57149],{"class":71,"line":106},[69,57150,3644],{"emptyLinePlaceholder":1325},[69,57152,57153,57155,57157],{"class":71,"line":116},[69,57154,1011],{"class":86},[69,57156,52567],{"class":348},[69,57158,1026],{"class":86},[69,57160,57161,57163,57165,57167,57169,57171],{"class":71,"line":133},[69,57162,53372],{"class":86},[69,57164,52577],{"class":348},[69,57166,52580],{"class":109},[69,57168,1019],{"class":86},[69,57170,52585],{"class":1022},[69,57172,1026],{"class":86},[69,57174,57175,57177,57179,57181,57183,57185,57187,57189,57191],{"class":71,"line":139},[69,57176,53372],{"class":86},[69,57178,52577],{"class":348},[69,57180,16160],{"class":109},[69,57182,1019],{"class":86},[69,57184,52624],{"class":1022},[69,57186,52604],{"class":109},[69,57188,1019],{"class":86},[69,57190,52631],{"class":1022},[69,57192,1026],{"class":86},[69,57194,57195,57197,57199,57201,57203],{"class":71,"line":401},[69,57196,53372],{"class":86},[69,57198,52640],{"class":348},[69,57200,52643],{"class":86},[69,57202,52640],{"class":348},[69,57204,1026],{"class":86},[69,57206,57207,57209,57211],{"class":71,"line":470},[69,57208,53372],{"class":86},[69,57210,1297],{"class":348},[69,57212,1026],{"class":86},[69,57214,57215,57217],{"class":71,"line":475},[69,57216,7645],{"class":348},[69,57218,113],{"class":86},[69,57220,57221,57223,57225,57227],{"class":71,"line":482},[69,57222,55922],{"class":90},[69,57224,94],{"class":86},[69,57226,1583],{"class":90},[69,57228,130],{"class":86},[69,57230,57231,57233,57235,57237],{"class":71,"line":497},[69,57232,55933],{"class":90},[69,57234,94],{"class":86},[69,57236,1583],{"class":90},[69,57238,130],{"class":86},[69,57240,57241],{"class":71,"line":502},[69,57242,3431],{"class":86},[69,57244,57245],{"class":71,"line":509},[69,57246,3644],{"emptyLinePlaceholder":1325},[69,57248,57249,57251],{"class":71,"line":524},[69,57250,55952],{"class":348},[69,57252,113],{"class":86},[69,57254,57255,57257,57259,57261],{"class":71,"line":2888},[69,57256,55959],{"class":90},[69,57258,94],{"class":86},[69,57260,55964],{"class":90},[69,57262,130],{"class":86},[69,57264,57265],{"class":71,"line":2893},[69,57266,3431],{"class":86},[69,57268,57269],{"class":71,"line":2899},[69,57270,3644],{"emptyLinePlaceholder":1325},[69,57272,57273,57275],{"class":71,"line":2919},[69,57274,55979],{"class":109},[69,57276,113],{"class":86},[69,57278,57279,57281,57283,57285],{"class":71,"line":2924},[69,57280,55986],{"class":90},[69,57282,94],{"class":86},[69,57284,55991],{"class":90},[69,57286,130],{"class":86},[69,57288,57289,57291,57293,57295,57297],{"class":71,"line":2938},[69,57290,55998],{"class":90},[69,57292,94],{"class":86},[69,57294,56003],{"class":90},[69,57296,100],{"class":82},[69,57298,130],{"class":86},[69,57300,57301,57303,57305,57307,57309],{"class":71,"line":2943},[69,57302,56012],{"class":90},[69,57304,94],{"class":86},[69,57306,2790],{"class":90},[69,57308,100],{"class":82},[69,57310,130],{"class":86},[69,57312,57313,57315,57317,57319,57321,57323],{"class":71,"line":2972},[69,57314,55933],{"class":90},[69,57316,94],{"class":86},[69,57318,124],{"class":90},[69,57320,100],{"class":82},[69,57322,52787],{"class":90},[69,57324,130],{"class":86},[69,57326,57327],{"class":71,"line":2977},[69,57328,3431],{"class":86},[69,57330,57331],{"class":71,"line":2994},[69,57332,3644],{"emptyLinePlaceholder":1325},[69,57334,57335,57337],{"class":71,"line":2999},[69,57336,56047],{"class":109},[69,57338,113],{"class":86},[69,57340,57341,57343,57345,57347],{"class":71,"line":3004},[69,57342,55986],{"class":90},[69,57344,94],{"class":86},[69,57346,56058],{"class":90},[69,57348,130],{"class":86},[69,57350,57351,57353,57355,57357],{"class":71,"line":3009},[69,57352,56065],{"class":90},[69,57354,94],{"class":86},[69,57356,1583],{"class":90},[69,57358,130],{"class":86},[69,57360,57361,57363,57365,57367],{"class":71,"line":3023},[69,57362,56076],{"class":90},[69,57364,94],{"class":86},[69,57366,1583],{"class":90},[69,57368,130],{"class":86},[69,57370,57371,57373,57375,57377,57379],{"class":71,"line":3028},[69,57372,55998],{"class":90},[69,57374,94],{"class":86},[69,57376,124],{"class":90},[69,57378,127],{"class":82},[69,57380,130],{"class":86},[69,57382,57383,57385,57387,57389,57391],{"class":71,"line":3821},[69,57384,56012],{"class":90},[69,57386,94],{"class":86},[69,57388,1963],{"class":90},[69,57390,127],{"class":82},[69,57392,130],{"class":86},[69,57394,57395,57397,57399,57401],{"class":71,"line":3835},[69,57396,56111],{"class":90},[69,57398,94],{"class":86},[69,57400,56116],{"class":90},[69,57402,130],{"class":86},[69,57404,57405],{"class":71,"line":3843},[69,57406,3431],{"class":86},[69,57408,57409],{"class":71,"line":3848},[69,57410,3644],{"emptyLinePlaceholder":1325},[69,57412,57413,57415,57417],{"class":71,"line":3854},[69,57414,56047],{"class":109},[69,57416,8067],{"class":348},[69,57418,113],{"class":86},[69,57420,57421,57423,57425,57427],{"class":71,"line":3860},[69,57422,55986],{"class":90},[69,57424,94],{"class":86},[69,57426,56058],{"class":90},[69,57428,130],{"class":86},[69,57430,57431,57433,57435,57437,57439],{"class":71,"line":3865},[69,57432,56149],{"class":90},[69,57434,94],{"class":86},[69,57436,2288],{"class":90},[69,57438,100],{"class":82},[69,57440,130],{"class":86},[69,57442,57443,57445,57447,57449,57451],{"class":71,"line":9190},[69,57444,56065],{"class":90},[69,57446,94],{"class":86},[69,57448,2087],{"class":90},[69,57450,100],{"class":82},[69,57452,130],{"class":86},[69,57454,57455,57457,57459,57461,57463],{"class":71,"line":9214},[69,57456,56174],{"class":90},[69,57458,94],{"class":86},[69,57460,1709],{"class":90},[69,57462,100],{"class":82},[69,57464,130],{"class":86},[69,57466,57467],{"class":71,"line":9219},[69,57468,3431],{"class":86},[69,57470,57471],{"class":71,"line":9225},[69,57472,3644],{"emptyLinePlaceholder":1325},[69,57474,57475,57477],{"class":71,"line":9252},[69,57476,56195],{"class":348},[69,57478,113],{"class":86},[69,57480,57481,57483,57485,57487],{"class":71,"line":9257},[69,57482,55986],{"class":90},[69,57484,94],{"class":86},[69,57486,56058],{"class":90},[69,57488,130],{"class":86},[69,57490,57491,57493,57495,57497,57499],{"class":71,"line":9263},[69,57492,56174],{"class":90},[69,57494,94],{"class":86},[69,57496,2168],{"class":90},[69,57498,100],{"class":82},[69,57500,130],{"class":86},[69,57502,57503,57505,57507,57509,57511],{"class":71,"line":9275},[69,57504,56065],{"class":90},[69,57506,94],{"class":86},[69,57508,2087],{"class":90},[69,57510,100],{"class":82},[69,57512,130],{"class":86},[69,57514,57515,57517,57519,57521],{"class":71,"line":9287},[69,57516,56236],{"class":90},[69,57518,94],{"class":86},[69,57520,52709],{"class":90},[69,57522,130],{"class":86},[69,57524,57525,57527,57529,57531],{"class":71,"line":9299},[69,57526,56247],{"class":90},[69,57528,94],{"class":86},[69,57530,52898],{"class":90},[69,57532,130],{"class":86},[69,57534,57535,57537,57539,57541],{"class":71,"line":10958},[69,57536,55986],{"class":90},[69,57538,94],{"class":86},[69,57540,56058],{"class":90},[69,57542,130],{"class":86},[69,57544,57545,57547,57549,57551,57553],{"class":71,"line":10983},[69,57546,55998],{"class":90},[69,57548,94],{"class":86},[69,57550,5236],{"class":90},[69,57552,100],{"class":82},[69,57554,130],{"class":86},[69,57556,57557,57559,57561,57563,57565],{"class":71,"line":11006},[69,57558,56012],{"class":90},[69,57560,94],{"class":86},[69,57562,2087],{"class":90},[69,57564,100],{"class":82},[69,57566,130],{"class":86},[69,57568,57569],{"class":71,"line":11030},[69,57570,3431],{"class":86},[69,57572,57573],{"class":71,"line":11035},[69,57574,3644],{"emptyLinePlaceholder":1325},[69,57576,57577,57579,57581],{"class":71,"line":11040},[69,57578,56195],{"class":348},[69,57580,56302],{"class":348},[69,57582,113],{"class":86},[69,57584,57585,57587,57589,57591,57593],{"class":71,"line":11045},[69,57586,55998],{"class":90},[69,57588,94],{"class":86},[69,57590,2087],{"class":90},[69,57592,100],{"class":82},[69,57594,130],{"class":86},[69,57596,57597,57599,57601,57603,57605],{"class":71,"line":11054},[69,57598,56012],{"class":90},[69,57600,94],{"class":86},[69,57602,2087],{"class":90},[69,57604,100],{"class":82},[69,57606,130],{"class":86},[69,57608,57609,57611,57613,57615,57617,57619,57621,57623,57625,57627,57629,57631],{"class":71,"line":11059},[69,57610,56111],{"class":90},[69,57612,94],{"class":86},[69,57614,56337],{"class":90},[69,57616,1398],{"class":86},[69,57618,1583],{"class":90},[69,57620,13677],{"class":86},[69,57622,1583],{"class":90},[69,57624,13677],{"class":86},[69,57626,1583],{"class":90},[69,57628,13677],{"class":86},[69,57630,56354],{"class":90},[69,57632,3963],{"class":86},[69,57634,57635,57637,57639,57641,57643],{"class":71,"line":11065},[69,57636,56361],{"class":90},[69,57638,94],{"class":86},[69,57640,390],{"class":90},[69,57642,100],{"class":82},[69,57644,130],{"class":86},[69,57646,57647],{"class":71,"line":11086},[69,57648,3431],{"class":86},[69,57650,57651],{"class":71,"line":11092},[69,57652,3644],{"emptyLinePlaceholder":1325},[69,57654,57655,57657],{"class":71,"line":11106},[69,57656,56382],{"class":109},[69,57658,113],{"class":86},[69,57660,57661,57663,57665,57667],{"class":71,"line":11112},[69,57662,56111],{"class":90},[69,57664,94],{"class":86},[69,57666,56393],{"class":90},[69,57668,130],{"class":86},[69,57670,57671],{"class":71,"line":11139},[69,57672,3431],{"class":86},[69,57674,57675,57677,57679],{"class":71,"line":11148},[69,57676,53645],{"class":86},[69,57678,1297],{"class":348},[69,57680,1026],{"class":86},[69,57682,57683,57685,57687],{"class":71,"line":11154},[69,57684,1036],{"class":86},[69,57686,52567],{"class":348},[69,57688,1026],{"class":86},[69,57690,57691],{"class":71,"line":11162},[69,57692,3644],{"emptyLinePlaceholder":1325},[69,57694,57695,57697,57699],{"class":71,"line":11167},[69,57696,1011],{"class":86},[69,57698,680],{"class":348},[69,57700,1026],{"class":86},[69,57702,57703,57705,57707,57709,57711,57713],{"class":71,"line":17843},[69,57704,53372],{"class":86},[69,57706,442],{"class":348},[69,57708,1016],{"class":109},[69,57710,1019],{"class":86},[69,57712,54718],{"class":1022},[69,57714,1026],{"class":86},[69,57716,57717,57719,57721,57723,57725,57727],{"class":71,"line":17849},[69,57718,52574],{"class":86},[69,57720,442],{"class":348},[69,57722,1016],{"class":109},[69,57724,1019],{"class":86},[69,57726,56454],{"class":1022},[69,57728,1026],{"class":86},[69,57730,57731,57733,57735,57737,57739,57741,57743,57745,57747],{"class":71,"line":17872},[69,57732,56461],{"class":86},[69,57734,24],{"class":348},[69,57736,56466],{"class":109},[69,57738,1019],{"class":86},[69,57740,56471],{"class":1022},[69,57742,56474],{"class":109},[69,57744,1019],{"class":86},[69,57746,8894],{"class":1022},[69,57748,1026],{"class":86},[69,57750,57751,57753,57755],{"class":71,"line":17878},[69,57752,53006],{"class":86},[69,57754,442],{"class":348},[69,57756,1026],{"class":86},[69,57758,57759,57761,57763,57765,57767,57769],{"class":71,"line":17901},[69,57760,52574],{"class":86},[69,57762,442],{"class":348},[69,57764,1016],{"class":109},[69,57766,1019],{"class":86},[69,57768,56501],{"class":1022},[69,57770,1026],{"class":86},[69,57772,57773,57775,57777,57779,57781],{"class":71,"line":17915},[69,57774,56461],{"class":86},[69,57776,29],{"class":348},[69,57778,56512],{"class":86},[69,57780,29],{"class":348},[69,57782,1026],{"class":86},[69,57784,57785,57787,57789],{"class":71,"line":17935},[69,57786,56461],{"class":86},[69,57788,162],{"class":348},[69,57790,1026],{"class":86},[69,57792,57793,57795,57797,57799,57801,57803,57805,57807],{"class":71,"line":17941},[69,57794,56529],{"class":86},[69,57796,40],{"class":348},[69,57798,1016],{"class":109},[69,57800,1019],{"class":86},[69,57802,56538],{"class":1022},[69,57804,56541],{"class":86},[69,57806,40],{"class":348},[69,57808,1026],{"class":86},[69,57810,57811,57813,57815,57817,57819],{"class":71,"line":17952},[69,57812,56529],{"class":86},[69,57814,40],{"class":348},[69,57816,56541],{"class":86},[69,57818,40],{"class":348},[69,57820,1026],{"class":86},[69,57822,57823,57825,57827,57829,57831],{"class":71,"line":17975},[69,57824,56529],{"class":86},[69,57826,40],{"class":348},[69,57828,56541],{"class":86},[69,57830,40],{"class":348},[69,57832,1026],{"class":86},[69,57834,57835,57837,57839,57841,57843],{"class":71,"line":17997},[69,57836,56529],{"class":86},[69,57838,40],{"class":348},[69,57840,56541],{"class":86},[69,57842,40],{"class":348},[69,57844,1026],{"class":86},[69,57846,57847,57849,57851,57853,57855],{"class":71,"line":18002},[69,57848,56529],{"class":86},[69,57850,40],{"class":348},[69,57852,56541],{"class":86},[69,57854,40],{"class":348},[69,57856,1026],{"class":86},[69,57858,57859,57861,57863,57865,57867],{"class":71,"line":18008},[69,57860,56529],{"class":86},[69,57862,40],{"class":348},[69,57864,56541],{"class":86},[69,57866,40],{"class":348},[69,57868,1026],{"class":86},[69,57870,57871,57873,57875,57877,57879],{"class":71,"line":18022},[69,57872,56529],{"class":86},[69,57874,40],{"class":348},[69,57876,56541],{"class":86},[69,57878,40],{"class":348},[69,57880,1026],{"class":86},[69,57882,57883,57885,57887,57889,57891],{"class":71,"line":18035},[69,57884,56529],{"class":86},[69,57886,40],{"class":348},[69,57888,56541],{"class":86},[69,57890,40],{"class":348},[69,57892,1026],{"class":86},[69,57894,57895,57897,57899],{"class":71,"line":18040},[69,57896,56634],{"class":86},[69,57898,162],{"class":348},[69,57900,1026],{"class":86},[69,57902,57903,57905,57907],{"class":71,"line":18054},[69,57904,53006],{"class":86},[69,57906,442],{"class":348},[69,57908,1026],{"class":86},[69,57910,57911,57913,57915],{"class":71,"line":18059},[69,57912,53645],{"class":86},[69,57914,442],{"class":348},[69,57916,1026],{"class":86},[69,57918,57919,57921,57923],{"class":71,"line":18065},[69,57920,53372],{"class":86},[69,57922,53041],{"class":348},[69,57924,1026],{"class":86},[69,57926,57927,57929,57932,57934],{"class":71,"line":18070},[69,57928,12463],{"class":82},[69,57930,57931],{"class":90}," sliderData",[69,57933,14805],{"class":82},[69,57935,56674],{"class":86},[69,57937,57938,57940,57942,57944,57946,57948,57950],{"class":71,"line":18084},[69,57939,56679],{"class":86},[69,57941,56682],{"class":1022},[69,57943,56685],{"class":86},[69,57945,56688],{"class":1022},[69,57947,56691],{"class":86},[69,57949,56694],{"class":1022},[69,57951,56697],{"class":86},[69,57953,57954,57956,57958,57960,57962,57964,57966],{"class":71,"line":18089},[69,57955,56679],{"class":86},[69,57957,56704],{"class":1022},[69,57959,56685],{"class":86},[69,57961,56709],{"class":1022},[69,57963,56691],{"class":86},[69,57965,56714],{"class":1022},[69,57967,56697],{"class":86},[69,57969,57970,57972,57974,57976,57978,57980,57982],{"class":71,"line":18094},[69,57971,56679],{"class":86},[69,57973,56723],{"class":1022},[69,57975,56685],{"class":86},[69,57977,56728],{"class":1022},[69,57979,56691],{"class":86},[69,57981,56733],{"class":1022},[69,57983,56697],{"class":86},[69,57985,57986,57988,57990,57992,57994,57996,57998],{"class":71,"line":18108},[69,57987,56679],{"class":86},[69,57989,56742],{"class":1022},[69,57991,56685],{"class":86},[69,57993,56747],{"class":1022},[69,57995,56691],{"class":86},[69,57997,56752],{"class":1022},[69,57999,56697],{"class":86},[69,58001,58002,58004,58006,58008,58010,58012,58014],{"class":71,"line":18120},[69,58003,56679],{"class":86},[69,58005,56761],{"class":1022},[69,58007,56685],{"class":86},[69,58009,56766],{"class":1022},[69,58011,56691],{"class":86},[69,58013,56771],{"class":1022},[69,58015,56697],{"class":86},[69,58017,58018,58020,58022,58024,58026,58028,58030],{"class":71,"line":18125},[69,58019,56679],{"class":86},[69,58021,56780],{"class":1022},[69,58023,56685],{"class":86},[69,58025,56785],{"class":1022},[69,58027,56691],{"class":86},[69,58029,56790],{"class":1022},[69,58031,56697],{"class":86},[69,58033,58034,58036,58038,58040,58042,58044,58046],{"class":71,"line":18138},[69,58035,56679],{"class":86},[69,58037,56799],{"class":1022},[69,58039,56685],{"class":86},[69,58041,56804],{"class":1022},[69,58043,56691],{"class":86},[69,58045,56809],{"class":1022},[69,58047,56697],{"class":86},[69,58049,58050,58052,58054,58056,58058,58060,58062],{"class":71,"line":18143},[69,58051,56679],{"class":86},[69,58053,56818],{"class":1022},[69,58055,56685],{"class":86},[69,58057,56823],{"class":1022},[69,58059,56691],{"class":86},[69,58061,56828],{"class":1022},[69,58063,56831],{"class":86},[69,58065,58066],{"class":71,"line":18148},[69,58067,54337],{"class":86},[69,58069,58070],{"class":71,"line":18153},[69,58071,58072],{"class":75},"    \u002F\u002F 1.获取元素\n",[69,58074,58075,58077,58079,58081,58083,58085,58087,58089],{"class":71,"line":18166},[69,58076,12463],{"class":82},[69,58078,56842],{"class":90},[69,58080,14805],{"class":82},[69,58082,55623],{"class":86},[69,58084,55626],{"class":109},[69,58086,1398],{"class":86},[69,58088,56853],{"class":1022},[69,58090,1404],{"class":86},[69,58092,58093,58095,58097,58099,58101,58103,58105,58107],{"class":71,"line":18171},[69,58094,12463],{"class":82},[69,58096,8067],{"class":90},[69,58098,14805],{"class":82},[69,58100,55623],{"class":86},[69,58102,55626],{"class":109},[69,58104,1398],{"class":86},[69,58106,56872],{"class":1022},[69,58108,1404],{"class":86},[69,58110,58111,58113,58115,58117],{"class":71,"line":33869},[69,58112,53447],{"class":82},[69,58114,10680],{"class":86},[69,58116,1019],{"class":82},[69,58118,48569],{"class":90},[69,58120,58121],{"class":71,"line":33875},[69,58122,58123],{"class":75},"    \u002F\u002F 2.开启定时器\n",[69,58125,58126],{"class":71,"line":33881},[69,58127,58128],{"class":75},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[69,58130,58131,58134,58136,58138],{"class":71,"line":33887},[69,58132,58133],{"class":109},"    setInterval",[69,58135,1398],{"class":86},[69,58137,55676],{"class":82},[69,58139,55679],{"class":86},[69,58141,58142,58144],{"class":71,"line":33893},[69,58143,55684],{"class":86},[69,58145,3946],{"class":82},[69,58147,58148,58150,58152,58154,58157,58159],{"class":71,"line":33904},[69,58149,55707],{"class":82},[69,58151,55710],{"class":86},[69,58153,2955],{"class":82},[69,58155,58156],{"class":86}," sliderData.",[69,58158,53196],{"class":90},[69,58160,103],{"class":86},[69,58162,58163,58166,58168],{"class":71,"line":33910},[69,58164,58165],{"class":86},"        i ",[69,58167,1019],{"class":82},[69,58169,48569],{"class":90},[69,58171,58172],{"class":71,"line":33930},[69,58173,53626],{"class":86},[69,58175,58176],{"class":71,"line":33936},[69,58177,58178],{"class":75},"      \u002F\u002F 更换图片路径\n",[69,58180,58181,58183,58185],{"class":71,"line":33947},[69,58182,56948],{"class":86},[69,58184,1019],{"class":82},[69,58186,58187],{"class":86}," sliderData[i].url\n",[69,58189,58190],{"class":71,"line":33953},[69,58191,58192],{"class":75},"      \u002F\u002F 把文字写到p里面\n",[69,58194,58195,58197,58199],{"class":71,"line":33959},[69,58196,56958],{"class":86},[69,58198,1019],{"class":82},[69,58200,58201],{"class":86}," sliderData[i].title\n",[69,58203,58204],{"class":71,"line":33965},[69,58205,58206],{"class":75},"      \u002F\u002F 小圆点\n",[69,58208,58209],{"class":71,"line":33971},[69,58210,58211],{"class":75},"      \u002F\u002F 先删除以前的active\n",[69,58213,58214],{"class":71,"line":33977},[69,58215,58216],{"class":75},"      \u002F\u002F 只让当前li添加active\n",[69,58218,58219,58221,58223,58225,58228,58231,58234,58236,58238],{"class":71,"line":33983},[69,58220,56998],{"class":86},[69,58222,55626],{"class":109},[69,58224,1398],{"class":86},[69,58226,58227],{"class":1022},"'.slider-footer .activate'",[69,58229,58230],{"class":86},").classList.",[69,58232,58233],{"class":109},"remove",[69,58235,1398],{"class":86},[69,58237,57016],{"class":1022},[69,58239,1404],{"class":86},[69,58241,58242,58244,58246,58248,58251,58253,58255,58257,58260,58262,58264,58266,58268],{"class":71,"line":33989},[69,58243,56998],{"class":86},[69,58245,55626],{"class":109},[69,58247,1398],{"class":86},[69,58249,58250],{"class":1022},"`.slider-footer ul li:nth-child(${",[69,58252,1830],{"class":86},[69,58254,46802],{"class":82},[69,58256,26355],{"class":90},[69,58258,58259],{"class":1022},"})`",[69,58261,58230],{"class":86},[69,58263,6576],{"class":109},[69,58265,1398],{"class":86},[69,58267,57016],{"class":1022},[69,58269,1404],{"class":86},[69,58271,58272],{"class":71,"line":34009},[69,58273,3644],{"emptyLinePlaceholder":1325},[69,58275,58276,58278,58280],{"class":71,"line":34015},[69,58277,55762],{"class":86},[69,58279,7652],{"class":90},[69,58281,1404],{"class":86},[69,58283,58284],{"class":71,"line":34031},[69,58285,3644],{"emptyLinePlaceholder":1325},[69,58287,58288,58290,58292],{"class":71,"line":34037},[69,58289,53645],{"class":86},[69,58291,53041],{"class":348},[69,58293,1026],{"class":86},[69,58295,58296,58298,58300],{"class":71,"line":34051},[69,58297,1036],{"class":86},[69,58299,680],{"class":348},[69,58301,1026],{"class":86},[69,58303,58304],{"class":71,"line":34057},[69,58305,3644],{"emptyLinePlaceholder":1325},[69,58307,58308,58310,58312],{"class":71,"line":34072},[69,58309,1036],{"class":86},[69,58311,349],{"class":348},[69,58313,1026],{"class":86},[19,58315,58317],{"id":58316},"_317-重要知识点","3.1.7 重要知识点",[29,58319,58320,58321],{},"浏览器在渲染文本时， ",[195,58322,58323],{},"没有空格或换行符就没有“断行点”",[29,58325,58326],{},[24,58327],{"alt":64,"src":58328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[29,58330,58331],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[29,58333,58334],{},[24,58335],{"alt":64,"src":58336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[29,58338,58339],{},[24,58340],{"alt":64,"src":58341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58343,58345],{"id":58344},"_32-dom事件基础","3.2 DOM事件基础",[19,58347,58349],{"id":58348},"_321-事件监听","3.2.1 事件监听",[29,58351,58352],{},[24,58353],{"alt":64,"src":58354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[29,58356,58357],{},"事件监听有响应的发生",[29,58359,58360],{},[24,58361],{"alt":64,"src":58362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[29,58364,58365],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[29,58367,58368],{},"对于有名函数,要执行的函数名后边不要加()",[19,58370,58372],{"id":58371},"_322-随机点名案例","3.2.2 随机点名案例",[59,58374,58376],{"className":51869,"code":58375,"language":349,"meta":64,"style":64},"\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",[66,58377,58378,58388,58402,58406,58414,58428,58448,58460,58468,58474,58484,58494,58498,58502,58509,58520,58524,58528,58534,58546,58560,58570,58582,58595,58599,58603,58610,58614,58627,58639,58650,58654,58658,58662,58669,58679,58683,58687,58696,58708,58720,58735,58739,58747,58755,58759,58767,58780,58794,58807,58827,58835,58850,58870,58890,58898,58902,58910,58915,58951,58971,58976,58995,59000,59011,59016,59027,59032,59051,59066,59071,59097,59107,59116,59121,59137,59142,59147,59152,59167,59171,59175,59180,59199,59216,59224,59229,59244,59248,59252,59260,59268,59272],{"__ignoreMap":64},[69,58379,58380,58382,58384,58386],{"class":71,"line":72},[69,58381,52532],{"class":86},[69,58383,52535],{"class":348},[69,58385,52538],{"class":109},[69,58387,1026],{"class":86},[69,58389,58390,58392,58394,58396,58398,58400],{"class":71,"line":79},[69,58391,1011],{"class":86},[69,58393,349],{"class":348},[69,58395,52549],{"class":109},[69,58397,1019],{"class":86},[69,58399,52554],{"class":1022},[69,58401,1026],{"class":86},[69,58403,58404],{"class":71,"line":106},[69,58405,3644],{"emptyLinePlaceholder":1325},[69,58407,58408,58410,58412],{"class":71,"line":116},[69,58409,1011],{"class":86},[69,58411,52567],{"class":348},[69,58413,1026],{"class":86},[69,58415,58416,58418,58420,58422,58424,58426],{"class":71,"line":133},[69,58417,53372],{"class":86},[69,58419,52577],{"class":348},[69,58421,52580],{"class":109},[69,58423,1019],{"class":86},[69,58425,52585],{"class":1022},[69,58427,1026],{"class":86},[69,58429,58430,58432,58434,58436,58438,58440,58442,58444,58446],{"class":71,"line":139},[69,58431,53372],{"class":86},[69,58433,52577],{"class":348},[69,58435,16160],{"class":109},[69,58437,1019],{"class":86},[69,58439,52624],{"class":1022},[69,58441,52604],{"class":109},[69,58443,1019],{"class":86},[69,58445,52631],{"class":1022},[69,58447,1026],{"class":86},[69,58449,58450,58452,58454,58456,58458],{"class":71,"line":401},[69,58451,53372],{"class":86},[69,58453,52640],{"class":348},[69,58455,52643],{"class":86},[69,58457,52640],{"class":348},[69,58459,1026],{"class":86},[69,58461,58462,58464,58466],{"class":71,"line":470},[69,58463,53372],{"class":86},[69,58465,1297],{"class":348},[69,58467,1026],{"class":86},[69,58469,58470,58472],{"class":71,"line":475},[69,58471,7645],{"class":348},[69,58473,113],{"class":86},[69,58475,58476,58478,58480,58482],{"class":71,"line":482},[69,58477,55933],{"class":90},[69,58479,94],{"class":86},[69,58481,1583],{"class":90},[69,58483,130],{"class":86},[69,58485,58486,58488,58490,58492],{"class":71,"line":497},[69,58487,55922],{"class":90},[69,58489,94],{"class":86},[69,58491,1583],{"class":90},[69,58493,130],{"class":86},[69,58495,58496],{"class":71,"line":502},[69,58497,3431],{"class":86},[69,58499,58500],{"class":71,"line":509},[69,58501,3644],{"emptyLinePlaceholder":1325},[69,58503,58504,58507],{"class":71,"line":524},[69,58505,58506],{"class":348},"    h2",[69,58508,113],{"class":86},[69,58510,58511,58514,58516,58518],{"class":71,"line":2888},[69,58512,58513],{"class":90},"      text-align",[69,58515,94],{"class":86},[69,58517,52823],{"class":90},[69,58519,130],{"class":86},[69,58521,58522],{"class":71,"line":2893},[69,58523,3431],{"class":86},[69,58525,58526],{"class":71,"line":2899},[69,58527,3644],{"emptyLinePlaceholder":1325},[69,58529,58530,58532],{"class":71,"line":2919},[69,58531,55979],{"class":109},[69,58533,113],{"class":86},[69,58535,58536,58538,58540,58542,58544],{"class":71,"line":2924},[69,58537,55998],{"class":90},[69,58539,94],{"class":86},[69,58541,2790],{"class":90},[69,58543,100],{"class":82},[69,58545,130],{"class":86},[69,58547,58548,58550,58552,58554,58556,58558],{"class":71,"line":2938},[69,58549,55933],{"class":90},[69,58551,94],{"class":86},[69,58553,2043],{"class":90},[69,58555,100],{"class":82},[69,58557,52787],{"class":90},[69,58559,130],{"class":86},[69,58561,58562,58564,58566,58568],{"class":71,"line":2943},[69,58563,56236],{"class":90},[69,58565,94],{"class":86},[69,58567,52709],{"class":90},[69,58569,130],{"class":86},[69,58571,58572,58574,58576,58578,58580],{"class":71,"line":2972},[69,58573,56149],{"class":90},[69,58575,94],{"class":86},[69,58577,2212],{"class":90},[69,58579,100],{"class":82},[69,58581,130],{"class":86},[69,58583,58584,58587,58589,58591,58593],{"class":71,"line":2977},[69,58585,58586],{"class":90},"      line-height",[69,58588,94],{"class":86},[69,58590,1790],{"class":90},[69,58592,100],{"class":82},[69,58594,130],{"class":86},[69,58596,58597],{"class":71,"line":2994},[69,58598,3431],{"class":86},[69,58600,58601],{"class":71,"line":2999},[69,58602,3644],{"emptyLinePlaceholder":1325},[69,58604,58605,58608],{"class":71,"line":3004},[69,58606,58607],{"class":109},"    .qs",[69,58609,113],{"class":86},[69,58611,58612],{"class":71,"line":3009},[69,58613,3644],{"emptyLinePlaceholder":1325},[69,58615,58616,58618,58620,58623,58625],{"class":71,"line":3023},[69,58617,55998],{"class":90},[69,58619,94],{"class":86},[69,58621,58622],{"class":90},"450",[69,58624,100],{"class":82},[69,58626,130],{"class":86},[69,58628,58629,58631,58633,58635,58637],{"class":71,"line":3028},[69,58630,56012],{"class":90},[69,58632,94],{"class":86},[69,58634,1790],{"class":90},[69,58636,100],{"class":82},[69,58638,130],{"class":86},[69,58640,58641,58644,58646,58648],{"class":71,"line":3821},[69,58642,58643],{"class":90},"      color",[69,58645,94],{"class":86},[69,58647,876],{"class":90},[69,58649,130],{"class":86},[69,58651,58652],{"class":71,"line":3835},[69,58653,3644],{"emptyLinePlaceholder":1325},[69,58655,58656],{"class":71,"line":3843},[69,58657,3431],{"class":86},[69,58659,58660],{"class":71,"line":3848},[69,58661,3644],{"emptyLinePlaceholder":1325},[69,58663,58664,58667],{"class":71,"line":3854},[69,58665,58666],{"class":109},"    .btns",[69,58668,113],{"class":86},[69,58670,58671,58673,58675,58677],{"class":71,"line":3860},[69,58672,58513],{"class":90},[69,58674,94],{"class":86},[69,58676,52823],{"class":90},[69,58678,130],{"class":86},[69,58680,58681],{"class":71,"line":3865},[69,58682,3431],{"class":86},[69,58684,58685],{"class":71,"line":9190},[69,58686,3644],{"emptyLinePlaceholder":1325},[69,58688,58689,58691,58694],{"class":71,"line":9214},[69,58690,58666],{"class":109},[69,58692,58693],{"class":348}," button",[69,58695,113],{"class":86},[69,58697,58698,58700,58702,58704,58706],{"class":71,"line":9219},[69,58699,55998],{"class":90},[69,58701,94],{"class":86},[69,58703,2204],{"class":90},[69,58705,100],{"class":82},[69,58707,130],{"class":86},[69,58709,58710,58712,58714,58716,58718],{"class":71,"line":9225},[69,58711,56012],{"class":90},[69,58713,94],{"class":86},[69,58715,1664],{"class":90},[69,58717,100],{"class":82},[69,58719,130],{"class":86},[69,58721,58722,58724,58726,58728,58731,58733],{"class":71,"line":9252},[69,58723,55933],{"class":90},[69,58725,94],{"class":86},[69,58727,1583],{"class":90},[69,58729,58730],{"class":90}," 50",[69,58732,100],{"class":82},[69,58734,130],{"class":86},[69,58736,58737],{"class":71,"line":9257},[69,58738,3431],{"class":86},[69,58740,58741,58743,58745],{"class":71,"line":9263},[69,58742,53645],{"class":86},[69,58744,1297],{"class":348},[69,58746,1026],{"class":86},[69,58748,58749,58751,58753],{"class":71,"line":9275},[69,58750,1036],{"class":86},[69,58752,52567],{"class":348},[69,58754,1026],{"class":86},[69,58756,58757],{"class":71,"line":9287},[69,58758,3644],{"emptyLinePlaceholder":1325},[69,58760,58761,58763,58765],{"class":71,"line":9299},[69,58762,1011],{"class":86},[69,58764,680],{"class":348},[69,58766,1026],{"class":86},[69,58768,58769,58771,58773,58776,58778],{"class":71,"line":10958},[69,58770,53372],{"class":86},[69,58772,14],{"class":348},[69,58774,58775],{"class":86},">随机点名\u003C\u002F",[69,58777,14],{"class":348},[69,58779,1026],{"class":86},[69,58781,58782,58784,58786,58788,58790,58792],{"class":71,"line":10983},[69,58783,53372],{"class":86},[69,58785,442],{"class":348},[69,58787,1016],{"class":109},[69,58789,1019],{"class":86},[69,58791,54718],{"class":1022},[69,58793,1026],{"class":86},[69,58795,58796,58798,58800,58803,58805],{"class":71,"line":11006},[69,58797,52574],{"class":86},[69,58799,69],{"class":348},[69,58801,58802],{"class":86},">名字是：\u003C\u002F",[69,58804,69],{"class":348},[69,58806,1026],{"class":86},[69,58808,58809,58811,58813,58815,58817,58820,58823,58825],{"class":71,"line":11030},[69,58810,52574],{"class":86},[69,58812,442],{"class":348},[69,58814,1016],{"class":109},[69,58816,1019],{"class":86},[69,58818,58819],{"class":1022},"\"qs\"",[69,58821,58822],{"class":86},">这里显示姓名\u003C\u002F",[69,58824,442],{"class":348},[69,58826,1026],{"class":86},[69,58828,58829,58831,58833],{"class":71,"line":11035},[69,58830,53645],{"class":86},[69,58832,442],{"class":348},[69,58834,1026],{"class":86},[69,58836,58837,58839,58841,58843,58845,58848],{"class":71,"line":11040},[69,58838,53372],{"class":86},[69,58840,442],{"class":348},[69,58842,1016],{"class":109},[69,58844,1019],{"class":86},[69,58846,58847],{"class":1022},"\"btns\"",[69,58849,1026],{"class":86},[69,58851,58852,58854,58856,58858,58860,58863,58866,58868],{"class":71,"line":11045},[69,58853,52574],{"class":86},[69,58855,55114],{"class":348},[69,58857,1016],{"class":109},[69,58859,1019],{"class":86},[69,58861,58862],{"class":1022},"\"start\"",[69,58864,58865],{"class":86},">开始\u003C\u002F",[69,58867,55114],{"class":348},[69,58869,1026],{"class":86},[69,58871,58872,58874,58876,58878,58880,58883,58886,58888],{"class":71,"line":11054},[69,58873,52574],{"class":86},[69,58875,55114],{"class":348},[69,58877,1016],{"class":109},[69,58879,1019],{"class":86},[69,58881,58882],{"class":1022},"\"end\"",[69,58884,58885],{"class":86},">结束\u003C\u002F",[69,58887,55114],{"class":348},[69,58889,1026],{"class":86},[69,58891,58892,58894,58896],{"class":71,"line":11059},[69,58893,53645],{"class":86},[69,58895,442],{"class":348},[69,58897,1026],{"class":86},[69,58899,58900],{"class":71,"line":11065},[69,58901,3644],{"emptyLinePlaceholder":1325},[69,58903,58904,58906,58908],{"class":71,"line":11086},[69,58905,53372],{"class":86},[69,58907,53041],{"class":348},[69,58909,1026],{"class":86},[69,58911,58912],{"class":71,"line":11092},[69,58913,58914],{"class":75},"    \u002F\u002F 数据数组\n",[69,58916,58917,58919,58922,58924,58926,58929,58931,58934,58936,58939,58941,58944,58946,58949],{"class":71,"line":11106},[69,58918,12463],{"class":82},[69,58920,58921],{"class":90}," arr",[69,58923,14805],{"class":82},[69,58925,53454],{"class":86},[69,58927,58928],{"class":1022},"'马超'",[69,58930,13677],{"class":86},[69,58932,58933],{"class":1022},"'黄忠'",[69,58935,13677],{"class":86},[69,58937,58938],{"class":1022},"'赵云'",[69,58940,13677],{"class":86},[69,58942,58943],{"class":1022},"'关羽'",[69,58945,13677],{"class":86},[69,58947,58948],{"class":1022},"'张飞'",[69,58950,34482],{"class":86},[69,58952,58953,58955,58958,58960,58962,58964,58966,58969],{"class":71,"line":11112},[69,58954,12463],{"class":82},[69,58956,58957],{"class":90}," qs",[69,58959,14805],{"class":82},[69,58961,55623],{"class":86},[69,58963,55626],{"class":109},[69,58965,1398],{"class":86},[69,58967,58968],{"class":1022},"'.qs'",[69,58970,1404],{"class":86},[69,58972,58973],{"class":71,"line":11139},[69,58974,58975],{"class":75},"    \u002F\u002F 1.业务1.开始按钮模块\n",[69,58977,58978,58980,58982,58984,58986,58988,58990,58993],{"class":71,"line":11148},[69,58979,12463],{"class":82},[69,58981,5428],{"class":90},[69,58983,14805],{"class":82},[69,58985,55623],{"class":86},[69,58987,55626],{"class":109},[69,58989,1398],{"class":86},[69,58991,58992],{"class":1022},"'.start'",[69,58994,1404],{"class":86},[69,58996,58997],{"class":71,"line":11154},[69,58998,58999],{"class":75},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[69,59001,59002,59004,59007,59009],{"class":71,"line":11162},[69,59003,53447],{"class":82},[69,59005,59006],{"class":86}," timerId ",[69,59008,1019],{"class":82},[69,59010,48569],{"class":90},[69,59012,59013],{"class":71,"line":11167},[69,59014,59015],{"class":75},"    \u002F\u002F 随机号要全局变量\n",[69,59017,59018,59020,59023,59025],{"class":71,"line":17843},[69,59019,53447],{"class":82},[69,59021,59022],{"class":86}," random ",[69,59024,1019],{"class":82},[69,59026,48569],{"class":90},[69,59028,59029],{"class":71,"line":17849},[69,59030,59031],{"class":75},"    \u002F\u002F 1.1 添加点击事件\n",[69,59033,59034,59037,59040,59042,59045,59047,59049],{"class":71,"line":17872},[69,59035,59036],{"class":86},"    start.",[69,59038,59039],{"class":109},"addEventListener",[69,59041,1398],{"class":86},[69,59043,59044],{"class":1022},"'click'",[69,59046,13677],{"class":86},[69,59048,55676],{"class":82},[69,59050,55679],{"class":86},[69,59052,59053,59056,59058,59060,59062,59064],{"class":71,"line":17878},[69,59054,59055],{"class":86},"      timerId ",[69,59057,1019],{"class":82},[69,59059,55671],{"class":109},[69,59061,1398],{"class":86},[69,59063,55676],{"class":82},[69,59065,55679],{"class":86},[69,59067,59068],{"class":71,"line":17901},[69,59069,59070],{"class":75},"        \u002F\u002F 随机数\n",[69,59072,59073,59076,59078,59081,59084,59087,59089,59091,59093,59095],{"class":71,"line":17915},[69,59074,59075],{"class":86},"        random ",[69,59077,1019],{"class":82},[69,59079,59080],{"class":109}," parseInt",[69,59082,59083],{"class":86},"(Math.",[69,59085,59086],{"class":109},"random",[69,59088,14291],{"class":86},[69,59090,1843],{"class":82},[69,59092,53193],{"class":86},[69,59094,53196],{"class":90},[69,59096,1404],{"class":86},[69,59098,59099,59102,59104],{"class":71,"line":17935},[69,59100,59101],{"class":86},"        qs.innerHTML ",[69,59103,1019],{"class":82},[69,59105,59106],{"class":86}," arr[random]\n",[69,59108,59109,59112,59114],{"class":71,"line":17941},[69,59110,59111],{"class":86},"      }, ",[69,59113,1664],{"class":90},[69,59115,1404],{"class":86},[69,59117,59118],{"class":71,"line":17952},[69,59119,59120],{"class":75},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[69,59122,59123,59125,59128,59130,59133,59135],{"class":71,"line":17975},[69,59124,55707],{"class":82},[69,59126,59127],{"class":86}," (arr.",[69,59129,53196],{"class":90},[69,59131,59132],{"class":82}," ===",[69,59134,26355],{"class":90},[69,59136,103],{"class":86},[69,59138,59139],{"class":71,"line":17997},[69,59140,59141],{"class":75},"        \u002F\u002F start.disabled = true\n",[69,59143,59144],{"class":71,"line":18002},[69,59145,59146],{"class":75},"        \u002F\u002F end.disabled = true\n",[69,59148,59149],{"class":71,"line":18008},[69,59150,59151],{"class":75},"        \u002F\u002F 可以合起来写\n",[69,59153,59154,59157,59159,59162,59164],{"class":71,"line":18022},[69,59155,59156],{"class":86},"        start.disabled ",[69,59158,1019],{"class":82},[69,59160,59161],{"class":86}," end.disabled ",[69,59163,1019],{"class":82},[69,59165,59166],{"class":90}," true\n",[69,59168,59169],{"class":71,"line":18035},[69,59170,53626],{"class":86},[69,59172,59173],{"class":71,"line":18040},[69,59174,34697],{"class":86},[69,59176,59177],{"class":71,"line":18054},[69,59178,59179],{"class":75},"    \u002F\u002F 1.2 关闭按钮模块\n",[69,59181,59182,59184,59186,59188,59190,59192,59194,59197],{"class":71,"line":18059},[69,59183,12463],{"class":82},[69,59185,5444],{"class":90},[69,59187,14805],{"class":82},[69,59189,55623],{"class":86},[69,59191,55626],{"class":109},[69,59193,1398],{"class":86},[69,59195,59196],{"class":1022},"'.end'",[69,59198,1404],{"class":86},[69,59200,59201,59204,59206,59208,59210,59212,59214],{"class":71,"line":18065},[69,59202,59203],{"class":86},"    end.",[69,59205,59039],{"class":109},[69,59207,1398],{"class":86},[69,59209,59044],{"class":1022},[69,59211,13677],{"class":86},[69,59213,55676],{"class":82},[69,59215,55679],{"class":86},[69,59217,59218,59221],{"class":71,"line":18070},[69,59219,59220],{"class":109},"      clearInterval",[69,59222,59223],{"class":86},"(timerId)\n",[69,59225,59226],{"class":71,"line":18084},[69,59227,59228],{"class":75},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[69,59230,59231,59234,59237,59240,59242],{"class":71,"line":18089},[69,59232,59233],{"class":86},"      arr.",[69,59235,59236],{"class":109},"splice",[69,59238,59239],{"class":86},"(random, ",[69,59241,1609],{"class":90},[69,59243,1404],{"class":86},[69,59245,59246],{"class":71,"line":18094},[69,59247,34697],{"class":86},[69,59249,59250],{"class":71,"line":18108},[69,59251,3644],{"emptyLinePlaceholder":1325},[69,59253,59254,59256,59258],{"class":71,"line":18120},[69,59255,53645],{"class":86},[69,59257,53041],{"class":348},[69,59259,1026],{"class":86},[69,59261,59262,59264,59266],{"class":71,"line":18125},[69,59263,1036],{"class":86},[69,59265,680],{"class":348},[69,59267,1026],{"class":86},[69,59269,59270],{"class":71,"line":18138},[69,59271,3644],{"emptyLinePlaceholder":1325},[69,59273,59274,59276,59278],{"class":71,"line":18143},[69,59275,1036],{"class":86},[69,59277,349],{"class":348},[69,59279,1026],{"class":86},[29,59281,59282],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[19,59284,59286],{"id":59285},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[59,59288,59290],{"className":51869,"code":59289,"language":349,"meta":64,"style":64},"\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",[66,59291,59292,59302,59316,59320,59328,59342,59362,59374,59382,59386,59394,59406,59414,59433,59450,59466,59476,59480,59488,59496,59500],{"__ignoreMap":64},[69,59293,59294,59296,59298,59300],{"class":71,"line":72},[69,59295,52532],{"class":86},[69,59297,52535],{"class":348},[69,59299,52538],{"class":109},[69,59301,1026],{"class":86},[69,59303,59304,59306,59308,59310,59312,59314],{"class":71,"line":79},[69,59305,1011],{"class":86},[69,59307,349],{"class":348},[69,59309,52549],{"class":109},[69,59311,1019],{"class":86},[69,59313,52554],{"class":1022},[69,59315,1026],{"class":86},[69,59317,59318],{"class":71,"line":106},[69,59319,3644],{"emptyLinePlaceholder":1325},[69,59321,59322,59324,59326],{"class":71,"line":116},[69,59323,1011],{"class":86},[69,59325,52567],{"class":348},[69,59327,1026],{"class":86},[69,59329,59330,59332,59334,59336,59338,59340],{"class":71,"line":133},[69,59331,53372],{"class":86},[69,59333,52577],{"class":348},[69,59335,52580],{"class":109},[69,59337,1019],{"class":86},[69,59339,52585],{"class":1022},[69,59341,1026],{"class":86},[69,59343,59344,59346,59348,59350,59352,59354,59356,59358,59360],{"class":71,"line":139},[69,59345,53372],{"class":86},[69,59347,52577],{"class":348},[69,59349,16160],{"class":109},[69,59351,1019],{"class":86},[69,59353,52624],{"class":1022},[69,59355,52604],{"class":109},[69,59357,1019],{"class":86},[69,59359,52631],{"class":1022},[69,59361,1026],{"class":86},[69,59363,59364,59366,59368,59370,59372],{"class":71,"line":401},[69,59365,53372],{"class":86},[69,59367,52640],{"class":348},[69,59369,52643],{"class":86},[69,59371,52640],{"class":348},[69,59373,1026],{"class":86},[69,59375,59376,59378,59380],{"class":71,"line":470},[69,59377,1036],{"class":86},[69,59379,52567],{"class":348},[69,59381,1026],{"class":86},[69,59383,59384],{"class":71,"line":475},[69,59385,3644],{"emptyLinePlaceholder":1325},[69,59387,59388,59390,59392],{"class":71,"line":482},[69,59389,1011],{"class":86},[69,59391,680],{"class":348},[69,59393,1026],{"class":86},[69,59395,59396,59398,59400,59402,59404],{"class":71,"line":497},[69,59397,53372],{"class":86},[69,59399,55114],{"class":348},[69,59401,55120],{"class":86},[69,59403,55114],{"class":348},[69,59405,1026],{"class":86},[69,59407,59408,59410,59412],{"class":71,"line":502},[69,59409,53372],{"class":86},[69,59411,53041],{"class":348},[69,59413,1026],{"class":86},[69,59415,59416,59418,59420,59422,59424,59426,59428,59431],{"class":71,"line":509},[69,59417,12463],{"class":82},[69,59419,55618],{"class":90},[69,59421,14805],{"class":82},[69,59423,55623],{"class":86},[69,59425,55626],{"class":109},[69,59427,1398],{"class":86},[69,59429,59430],{"class":1022},"'button'",[69,59432,1404],{"class":86},[69,59434,59435,59438,59440,59442,59444,59446,59448],{"class":71,"line":524},[69,59436,59437],{"class":86},"    btn.",[69,59439,59039],{"class":109},[69,59441,1398],{"class":86},[69,59443,59044],{"class":1022},[69,59445,13677],{"class":86},[69,59447,55676],{"class":82},[69,59449,55679],{"class":86},[69,59451,59452,59455,59457,59459,59462,59464],{"class":71,"line":2888},[69,59453,59454],{"class":82},"      const",[69,59456,3484],{"class":90},[69,59458,14805],{"class":82},[69,59460,59461],{"class":86}," Math.",[69,59463,59086],{"class":109},[69,59465,3220],{"class":86},[69,59467,59468,59471,59474],{"class":71,"line":2893},[69,59469,59470],{"class":86},"      console.",[69,59472,59473],{"class":109},"log",[69,59475,1411],{"class":86},[69,59477,59478],{"class":71,"line":2899},[69,59479,34697],{"class":86},[69,59481,59482,59484,59486],{"class":71,"line":2919},[69,59483,53645],{"class":86},[69,59485,53041],{"class":348},[69,59487,1026],{"class":86},[69,59489,59490,59492,59494],{"class":71,"line":2924},[69,59491,1036],{"class":86},[69,59493,680],{"class":348},[69,59495,1026],{"class":86},[69,59497,59498],{"class":71,"line":2938},[69,59499,3644],{"emptyLinePlaceholder":1325},[69,59501,59502,59504,59506],{"class":71,"line":2943},[69,59503,1036],{"class":86},[69,59505,349],{"class":348},[69,59507,1026],{"class":86},[29,59509,59510],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[29,59512,59513],{},"常量不可以重新赋值",[29,59515,59516],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[59,59518,59520],{"className":51869,"code":59519,"language":349,"meta":64,"style":64},"\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",[66,59521,59522,59532,59546,59550,59558,59572,59592,59604,59612,59616,59624,59636,59644,59655,59673,59689,59703,59711,59715,59723,59731,59735],{"__ignoreMap":64},[69,59523,59524,59526,59528,59530],{"class":71,"line":72},[69,59525,52532],{"class":86},[69,59527,52535],{"class":348},[69,59529,52538],{"class":109},[69,59531,1026],{"class":86},[69,59533,59534,59536,59538,59540,59542,59544],{"class":71,"line":79},[69,59535,1011],{"class":86},[69,59537,349],{"class":348},[69,59539,52549],{"class":109},[69,59541,1019],{"class":86},[69,59543,52554],{"class":1022},[69,59545,1026],{"class":86},[69,59547,59548],{"class":71,"line":106},[69,59549,3644],{"emptyLinePlaceholder":1325},[69,59551,59552,59554,59556],{"class":71,"line":116},[69,59553,1011],{"class":86},[69,59555,52567],{"class":348},[69,59557,1026],{"class":86},[69,59559,59560,59562,59564,59566,59568,59570],{"class":71,"line":133},[69,59561,53372],{"class":86},[69,59563,52577],{"class":348},[69,59565,52580],{"class":109},[69,59567,1019],{"class":86},[69,59569,52585],{"class":1022},[69,59571,1026],{"class":86},[69,59573,59574,59576,59578,59580,59582,59584,59586,59588,59590],{"class":71,"line":139},[69,59575,53372],{"class":86},[69,59577,52577],{"class":348},[69,59579,16160],{"class":109},[69,59581,1019],{"class":86},[69,59583,52624],{"class":1022},[69,59585,52604],{"class":109},[69,59587,1019],{"class":86},[69,59589,52631],{"class":1022},[69,59591,1026],{"class":86},[69,59593,59594,59596,59598,59600,59602],{"class":71,"line":401},[69,59595,53372],{"class":86},[69,59597,52640],{"class":348},[69,59599,52643],{"class":86},[69,59601,52640],{"class":348},[69,59603,1026],{"class":86},[69,59605,59606,59608,59610],{"class":71,"line":470},[69,59607,1036],{"class":86},[69,59609,52567],{"class":348},[69,59611,1026],{"class":86},[69,59613,59614],{"class":71,"line":475},[69,59615,3644],{"emptyLinePlaceholder":1325},[69,59617,59618,59620,59622],{"class":71,"line":482},[69,59619,1011],{"class":86},[69,59621,680],{"class":348},[69,59623,1026],{"class":86},[69,59625,59626,59628,59630,59632,59634],{"class":71,"line":497},[69,59627,53372],{"class":86},[69,59629,55114],{"class":348},[69,59631,55120],{"class":86},[69,59633,55114],{"class":348},[69,59635,1026],{"class":86},[69,59637,59638,59640,59642],{"class":71,"line":502},[69,59639,53372],{"class":86},[69,59641,53041],{"class":348},[69,59643,1026],{"class":86},[69,59645,59646,59648,59650,59652],{"class":71,"line":509},[69,59647,12463],{"class":82},[69,59649,3484],{"class":90},[69,59651,14805],{"class":82},[69,59653,59654],{"class":90}," 10\n",[69,59656,59657,59659,59661,59663,59665,59667,59669,59671],{"class":71,"line":524},[69,59658,12463],{"class":82},[69,59660,55618],{"class":90},[69,59662,14805],{"class":82},[69,59664,55623],{"class":86},[69,59666,55626],{"class":109},[69,59668,1398],{"class":86},[69,59670,59430],{"class":1022},[69,59672,1404],{"class":86},[69,59674,59675,59677,59679,59681,59683,59685,59687],{"class":71,"line":2888},[69,59676,59437],{"class":86},[69,59678,59039],{"class":109},[69,59680,1398],{"class":86},[69,59682,59044],{"class":1022},[69,59684,13677],{"class":86},[69,59686,55676],{"class":82},[69,59688,55679],{"class":86},[69,59690,59691,59693,59695,59697,59699,59701],{"class":71,"line":2893},[69,59692,59454],{"class":82},[69,59694,3484],{"class":90},[69,59696,14805],{"class":82},[69,59698,59461],{"class":86},[69,59700,59086],{"class":109},[69,59702,3220],{"class":86},[69,59704,59705,59707,59709],{"class":71,"line":2899},[69,59706,59470],{"class":86},[69,59708,59473],{"class":109},[69,59710,1411],{"class":86},[69,59712,59713],{"class":71,"line":2919},[69,59714,34697],{"class":86},[69,59716,59717,59719,59721],{"class":71,"line":2924},[69,59718,53645],{"class":86},[69,59720,53041],{"class":348},[69,59722,1026],{"class":86},[69,59724,59725,59727,59729],{"class":71,"line":2938},[69,59726,1036],{"class":86},[69,59728,680],{"class":348},[69,59730,1026],{"class":86},[69,59732,59733],{"class":71,"line":2943},[69,59734,3644],{"emptyLinePlaceholder":1325},[69,59736,59737,59739,59741],{"class":71,"line":2972},[69,59738,1036],{"class":86},[69,59740,349],{"class":348},[69,59742,1026],{"class":86},[29,59744,59745],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[59,59747,59749],{"className":51869,"code":59748,"language":349,"meta":64,"style":64},"\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",[66,59750,59751,59761,59775,59779,59787,59801,59821,59833,59841,59845,59853,59865,59873,59883,59901,59917,59930,59938,59942,59950,59958,59962],{"__ignoreMap":64},[69,59752,59753,59755,59757,59759],{"class":71,"line":72},[69,59754,52532],{"class":86},[69,59756,52535],{"class":348},[69,59758,52538],{"class":109},[69,59760,1026],{"class":86},[69,59762,59763,59765,59767,59769,59771,59773],{"class":71,"line":79},[69,59764,1011],{"class":86},[69,59766,349],{"class":348},[69,59768,52549],{"class":109},[69,59770,1019],{"class":86},[69,59772,52554],{"class":1022},[69,59774,1026],{"class":86},[69,59776,59777],{"class":71,"line":106},[69,59778,3644],{"emptyLinePlaceholder":1325},[69,59780,59781,59783,59785],{"class":71,"line":116},[69,59782,1011],{"class":86},[69,59784,52567],{"class":348},[69,59786,1026],{"class":86},[69,59788,59789,59791,59793,59795,59797,59799],{"class":71,"line":133},[69,59790,53372],{"class":86},[69,59792,52577],{"class":348},[69,59794,52580],{"class":109},[69,59796,1019],{"class":86},[69,59798,52585],{"class":1022},[69,59800,1026],{"class":86},[69,59802,59803,59805,59807,59809,59811,59813,59815,59817,59819],{"class":71,"line":139},[69,59804,53372],{"class":86},[69,59806,52577],{"class":348},[69,59808,16160],{"class":109},[69,59810,1019],{"class":86},[69,59812,52624],{"class":1022},[69,59814,52604],{"class":109},[69,59816,1019],{"class":86},[69,59818,52631],{"class":1022},[69,59820,1026],{"class":86},[69,59822,59823,59825,59827,59829,59831],{"class":71,"line":401},[69,59824,53372],{"class":86},[69,59826,52640],{"class":348},[69,59828,52643],{"class":86},[69,59830,52640],{"class":348},[69,59832,1026],{"class":86},[69,59834,59835,59837,59839],{"class":71,"line":470},[69,59836,1036],{"class":86},[69,59838,52567],{"class":348},[69,59840,1026],{"class":86},[69,59842,59843],{"class":71,"line":475},[69,59844,3644],{"emptyLinePlaceholder":1325},[69,59846,59847,59849,59851],{"class":71,"line":482},[69,59848,1011],{"class":86},[69,59850,680],{"class":348},[69,59852,1026],{"class":86},[69,59854,59855,59857,59859,59861,59863],{"class":71,"line":497},[69,59856,53372],{"class":86},[69,59858,55114],{"class":348},[69,59860,55120],{"class":86},[69,59862,55114],{"class":348},[69,59864,1026],{"class":86},[69,59866,59867,59869,59871],{"class":71,"line":502},[69,59868,53372],{"class":86},[69,59870,53041],{"class":348},[69,59872,1026],{"class":86},[69,59874,59875,59877,59879,59881],{"class":71,"line":509},[69,59876,12463],{"class":82},[69,59878,3484],{"class":90},[69,59880,14805],{"class":82},[69,59882,59654],{"class":90},[69,59884,59885,59887,59889,59891,59893,59895,59897,59899],{"class":71,"line":524},[69,59886,12463],{"class":82},[69,59888,55618],{"class":90},[69,59890,14805],{"class":82},[69,59892,55623],{"class":86},[69,59894,55626],{"class":109},[69,59896,1398],{"class":86},[69,59898,59430],{"class":1022},[69,59900,1404],{"class":86},[69,59902,59903,59905,59907,59909,59911,59913,59915],{"class":71,"line":2888},[69,59904,59437],{"class":86},[69,59906,59039],{"class":109},[69,59908,1398],{"class":86},[69,59910,59044],{"class":1022},[69,59912,13677],{"class":86},[69,59914,55676],{"class":82},[69,59916,55679],{"class":86},[69,59918,59919,59922,59924,59926,59928],{"class":71,"line":2893},[69,59920,59921],{"class":86},"      num ",[69,59923,1019],{"class":82},[69,59925,59461],{"class":86},[69,59927,59086],{"class":109},[69,59929,3220],{"class":86},[69,59931,59932,59934,59936],{"class":71,"line":2899},[69,59933,59470],{"class":86},[69,59935,59473],{"class":109},[69,59937,1411],{"class":86},[69,59939,59940],{"class":71,"line":2919},[69,59941,34697],{"class":86},[69,59943,59944,59946,59948],{"class":71,"line":2924},[69,59945,53645],{"class":86},[69,59947,53041],{"class":348},[69,59949,1026],{"class":86},[69,59951,59952,59954,59956],{"class":71,"line":2938},[69,59953,1036],{"class":86},[69,59955,680],{"class":348},[69,59957,1026],{"class":86},[69,59959,59960],{"class":71,"line":2943},[69,59961,3644],{"emptyLinePlaceholder":1325},[69,59963,59964,59966,59968],{"class":71,"line":2972},[69,59965,1036],{"class":86},[69,59967,349],{"class":348},[69,59969,1026],{"class":86},[29,59971,59972],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[19,59974,59976],{"id":59975},"_324-事件监听版本","3.2.4 事件监听版本",[29,59978,59979],{},[24,59980],{"alt":64,"src":59981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[29,59983,59984],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[29,59986,59987],{},"这种方式会覆盖前边的事件监听:",[59,59989,59991],{"className":51869,"code":59990,"language":349,"meta":64,"style":64},"\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",[66,59992,59993,60003,60017,60021,60029,60043,60063,60075,60083,60087,60095,60107,60115,60133,60147,60158,60162,60174,60184,60188,60196,60204,60208],{"__ignoreMap":64},[69,59994,59995,59997,59999,60001],{"class":71,"line":72},[69,59996,52532],{"class":86},[69,59998,52535],{"class":348},[69,60000,52538],{"class":109},[69,60002,1026],{"class":86},[69,60004,60005,60007,60009,60011,60013,60015],{"class":71,"line":79},[69,60006,1011],{"class":86},[69,60008,349],{"class":348},[69,60010,52549],{"class":109},[69,60012,1019],{"class":86},[69,60014,52554],{"class":1022},[69,60016,1026],{"class":86},[69,60018,60019],{"class":71,"line":106},[69,60020,3644],{"emptyLinePlaceholder":1325},[69,60022,60023,60025,60027],{"class":71,"line":116},[69,60024,1011],{"class":86},[69,60026,52567],{"class":348},[69,60028,1026],{"class":86},[69,60030,60031,60033,60035,60037,60039,60041],{"class":71,"line":133},[69,60032,53372],{"class":86},[69,60034,52577],{"class":348},[69,60036,52580],{"class":109},[69,60038,1019],{"class":86},[69,60040,52585],{"class":1022},[69,60042,1026],{"class":86},[69,60044,60045,60047,60049,60051,60053,60055,60057,60059,60061],{"class":71,"line":139},[69,60046,53372],{"class":86},[69,60048,52577],{"class":348},[69,60050,16160],{"class":109},[69,60052,1019],{"class":86},[69,60054,52624],{"class":1022},[69,60056,52604],{"class":109},[69,60058,1019],{"class":86},[69,60060,52631],{"class":1022},[69,60062,1026],{"class":86},[69,60064,60065,60067,60069,60071,60073],{"class":71,"line":401},[69,60066,53372],{"class":86},[69,60068,52640],{"class":348},[69,60070,52643],{"class":86},[69,60072,52640],{"class":348},[69,60074,1026],{"class":86},[69,60076,60077,60079,60081],{"class":71,"line":470},[69,60078,1036],{"class":86},[69,60080,52567],{"class":348},[69,60082,1026],{"class":86},[69,60084,60085],{"class":71,"line":475},[69,60086,3644],{"emptyLinePlaceholder":1325},[69,60088,60089,60091,60093],{"class":71,"line":482},[69,60090,1011],{"class":86},[69,60092,680],{"class":348},[69,60094,1026],{"class":86},[69,60096,60097,60099,60101,60103,60105],{"class":71,"line":497},[69,60098,53372],{"class":86},[69,60100,55114],{"class":348},[69,60102,55120],{"class":86},[69,60104,55114],{"class":348},[69,60106,1026],{"class":86},[69,60108,60109,60111,60113],{"class":71,"line":502},[69,60110,53372],{"class":86},[69,60112,53041],{"class":348},[69,60114,1026],{"class":86},[69,60116,60117,60119,60121,60123,60125,60127,60129,60131],{"class":71,"line":509},[69,60118,12463],{"class":82},[69,60120,55618],{"class":90},[69,60122,14805],{"class":82},[69,60124,55623],{"class":86},[69,60126,55626],{"class":109},[69,60128,1398],{"class":86},[69,60130,59430],{"class":1022},[69,60132,1404],{"class":86},[69,60134,60135,60137,60140,60142,60145],{"class":71,"line":524},[69,60136,59437],{"class":86},[69,60138,60139],{"class":109},"onclick",[69,60141,14805],{"class":82},[69,60143,60144],{"class":82}," function",[69,60146,55679],{"class":86},[69,60148,60149,60152,60154,60156],{"class":71,"line":2888},[69,60150,60151],{"class":109},"      alert",[69,60153,1398],{"class":86},[69,60155,1860],{"class":90},[69,60157,1404],{"class":86},[69,60159,60160],{"class":71,"line":2893},[69,60161,3431],{"class":86},[69,60163,60164,60166,60168,60170,60172],{"class":71,"line":2899},[69,60165,59437],{"class":86},[69,60167,60139],{"class":109},[69,60169,14805],{"class":82},[69,60171,60144],{"class":82},[69,60173,55679],{"class":86},[69,60175,60176,60178,60180,60182],{"class":71,"line":2919},[69,60177,60151],{"class":109},[69,60179,1398],{"class":86},[69,60181,2137],{"class":90},[69,60183,1404],{"class":86},[69,60185,60186],{"class":71,"line":2924},[69,60187,3431],{"class":86},[69,60189,60190,60192,60194],{"class":71,"line":2938},[69,60191,53645],{"class":86},[69,60193,53041],{"class":348},[69,60195,1026],{"class":86},[69,60197,60198,60200,60202],{"class":71,"line":2943},[69,60199,1036],{"class":86},[69,60201,680],{"class":348},[69,60203,1026],{"class":86},[69,60205,60206],{"class":71,"line":2972},[69,60207,3644],{"emptyLinePlaceholder":1325},[69,60209,60210,60212,60214],{"class":71,"line":2977},[69,60211,1036],{"class":86},[69,60213,349],{"class":348},[69,60215,1026],{"class":86},[29,60217,60218],{},"只要点击就输出结果为22,前边11被覆盖了",[59,60220,60222],{"className":51869,"code":60221,"language":349,"meta":64,"style":64},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[66,60223,60224,60229,60234,60238,60243,60248],{"__ignoreMap":64},[69,60225,60226],{"class":71,"line":72},[69,60227,60228],{"class":86},"  btn.addEventListener('click', function () {\n",[69,60230,60231],{"class":71,"line":79},[69,60232,60233],{"class":86},"      alert(11)\n",[69,60235,60236],{"class":71,"line":106},[69,60237,34697],{"class":86},[69,60239,60240],{"class":71,"line":116},[69,60241,60242],{"class":86},"    btn.addEventListener('click', function () {\n",[69,60244,60245],{"class":71,"line":133},[69,60246,60247],{"class":86},"      alert(22)\n",[69,60249,60250],{"class":71,"line":139},[69,60251,34697],{"class":86},[29,60253,60254],{},"点击第一次输出11,第二次点击为22",[19,60256,60258],{"id":60257},"_325-事件类型","3.2.5 事件类型",[29,60260,60261],{},[24,60262],{"alt":64,"src":60263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23237,60265,60267],{"id":60266},"_3251-鼠标事件","3.2.5.1 鼠标事件",[29,60269,60270],{},"补充知识:",[29,60272,60273],{},"轮播图自动播放模块,可以使用",[29,60275,60276],{},"let timerId = setInterval(function () {",[29,60278,60279],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[29,60281,60282],{},"用js方法模拟进行点击事件,click必须加()",[29,60284,60285],{},"next.click()",[29,60287,60288],{},"}, 1000)",[29,60290,60291],{},[24,60292],{"alt":64,"src":60293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[59,60295,60297],{"className":54295,"code":60296,"language":54297,"meta":64,"style":64},"\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",[66,60298,60299,60303,60313,60327,60331,60339,60354,60374,60394,60407,60415,60420,60425,60429,60433,60438,60443,60448,60453,60457,60461,60466,60471,60476,60480,60484,60489,60493,60498,60503,60507,60511,60516,60521,60526,60531,60536,60540,60544,60549,60554,60559,60564,60569,60573,60577,60582,60587,60592,60597,60602,60607,60612,60617,60622,60627,60631,60635,60640,60645,60649,60653,60658,60663,60667,60672,60677,60681,60685,60690,60694,60699,60704,60708,60713,60717,60721,60726,60731,60736,60741,60746,60751,60756,60760,60764,60768,60773,60778,60783,60788,60792,60800,60808,60812,60820,60835,60849,60870,60878,60892,60905,60920,60939,60951,60963,60975,60987,60999,61011,61023,61031,61046,61070,61094,61102,61110,61118,61126,61131,61136,61141,61146,61151,61156,61161,61166,61171,61176,61180,61185,61190,61195,61200,61205,61210,61215,61220,61225,61229,61234,61239,61244,61249,61254,61259,61264,61269,61274,61279,61284,61289,61293,61297,61302,61307,61312,61316,61321,61326,61331,61336,61341,61345,61350,61354,61358,61362,61366,61370,61374,61379,61384,61389,61394,61399,61404,61409,61414,61419,61423,61427,61432,61437,61442,61447,61452,61456,61461,61466,61471,61476,61481,61486,61490,61494,61499,61503,61508,61512,61517,61522,61527,61532,61537,61542,61546,61554,61562,61566],{"__ignoreMap":64},[69,60300,60301],{"class":71,"line":72},[69,60302,3644],{"emptyLinePlaceholder":1325},[69,60304,60305,60307,60309,60311],{"class":71,"line":79},[69,60306,52532],{"class":86},[69,60308,52535],{"class":82},[69,60310,52538],{"class":90},[69,60312,1026],{"class":86},[69,60314,60315,60317,60319,60321,60323,60325],{"class":71,"line":106},[69,60316,1011],{"class":86},[69,60318,349],{"class":348},[69,60320,52549],{"class":109},[69,60322,1019],{"class":86},[69,60324,52554],{"class":1022},[69,60326,1026],{"class":86},[69,60328,60329],{"class":71,"line":116},[69,60330,3644],{"emptyLinePlaceholder":1325},[69,60332,60333,60335,60337],{"class":71,"line":133},[69,60334,1011],{"class":86},[69,60336,52567],{"class":348},[69,60338,1026],{"class":86},[69,60340,60341,60343,60345,60347,60349,60351],{"class":71,"line":139},[69,60342,53372],{"class":86},[69,60344,52577],{"class":348},[69,60346,52580],{"class":109},[69,60348,1019],{"class":86},[69,60350,52585],{"class":1022},[69,60352,60353],{"class":86}," \u002F>\n",[69,60355,60356,60358,60360,60362,60364,60366,60368,60370,60372],{"class":71,"line":401},[69,60357,53372],{"class":86},[69,60359,52577],{"class":348},[69,60361,52596],{"class":109},[69,60363,1019],{"class":86},[69,60365,52601],{"class":1022},[69,60367,52604],{"class":109},[69,60369,1019],{"class":86},[69,60371,52609],{"class":1022},[69,60373,60353],{"class":86},[69,60375,60376,60378,60380,60382,60384,60386,60388,60390,60392],{"class":71,"line":470},[69,60377,53372],{"class":86},[69,60379,52577],{"class":348},[69,60381,16160],{"class":109},[69,60383,1019],{"class":86},[69,60385,52624],{"class":1022},[69,60387,52604],{"class":109},[69,60389,1019],{"class":86},[69,60391,52631],{"class":1022},[69,60393,60353],{"class":86},[69,60395,60396,60398,60400,60403,60405],{"class":71,"line":475},[69,60397,53372],{"class":86},[69,60399,52640],{"class":348},[69,60401,60402],{"class":86},">轮播图点击切换\u003C\u002F",[69,60404,52640],{"class":348},[69,60406,1026],{"class":86},[69,60408,60409,60411,60413],{"class":71,"line":482},[69,60410,53372],{"class":86},[69,60412,1297],{"class":348},[69,60414,1026],{"class":86},[69,60416,60417],{"class":71,"line":497},[69,60418,60419],{"class":86},"    * {\n",[69,60421,60422],{"class":71,"line":502},[69,60423,60424],{"class":86},"      box-sizing: border-box;\n",[69,60426,60427],{"class":71,"line":509},[69,60428,3431],{"class":86},[69,60430,60431],{"class":71,"line":524},[69,60432,3644],{"emptyLinePlaceholder":1325},[69,60434,60435],{"class":71,"line":2888},[69,60436,60437],{"class":86},"    .slider {\n",[69,60439,60440],{"class":71,"line":2893},[69,60441,60442],{"class":86},"      width: 560px;\n",[69,60444,60445],{"class":71,"line":2899},[69,60446,60447],{"class":86},"      height: 400px;\n",[69,60449,60450],{"class":71,"line":2919},[69,60451,60452],{"class":86},"      overflow: hidden;\n",[69,60454,60455],{"class":71,"line":2924},[69,60456,3431],{"class":86},[69,60458,60459],{"class":71,"line":2938},[69,60460,3644],{"emptyLinePlaceholder":1325},[69,60462,60463],{"class":71,"line":2943},[69,60464,60465],{"class":86},"    .slider-wrapper {\n",[69,60467,60468],{"class":71,"line":2972},[69,60469,60470],{"class":86},"      width: 100%;\n",[69,60472,60473],{"class":71,"line":2977},[69,60474,60475],{"class":86},"      height: 320px;\n",[69,60477,60478],{"class":71,"line":2994},[69,60479,3431],{"class":86},[69,60481,60482],{"class":71,"line":2999},[69,60483,3644],{"emptyLinePlaceholder":1325},[69,60485,60486],{"class":71,"line":3004},[69,60487,60488],{"class":86},"    .slider-wrapper img {\n",[69,60490,60491],{"class":71,"line":3009},[69,60492,60470],{"class":86},[69,60494,60495],{"class":71,"line":3023},[69,60496,60497],{"class":86},"      height: 100%;\n",[69,60499,60500],{"class":71,"line":3028},[69,60501,60502],{"class":86},"      display: block;\n",[69,60504,60505],{"class":71,"line":3821},[69,60506,3431],{"class":86},[69,60508,60509],{"class":71,"line":3835},[69,60510,3644],{"emptyLinePlaceholder":1325},[69,60512,60513],{"class":71,"line":3843},[69,60514,60515],{"class":86},"    .slider-footer {\n",[69,60517,60518],{"class":71,"line":3848},[69,60519,60520],{"class":86},"      height: 80px;\n",[69,60522,60523],{"class":71,"line":3854},[69,60524,60525],{"class":86},"      background-color: rgb(100, 67, 68);\n",[69,60527,60528],{"class":71,"line":3860},[69,60529,60530],{"class":86},"      padding: 12px 12px 0 12px;\n",[69,60532,60533],{"class":71,"line":3865},[69,60534,60535],{"class":86},"      position: relative;\n",[69,60537,60538],{"class":71,"line":9190},[69,60539,3431],{"class":86},[69,60541,60542],{"class":71,"line":9214},[69,60543,3644],{"emptyLinePlaceholder":1325},[69,60545,60546],{"class":71,"line":9219},[69,60547,60548],{"class":86},"    .slider-footer .toggle {\n",[69,60550,60551],{"class":71,"line":9225},[69,60552,60553],{"class":86},"      position: absolute;\n",[69,60555,60556],{"class":71,"line":9252},[69,60557,60558],{"class":86},"      right: 0;\n",[69,60560,60561],{"class":71,"line":9257},[69,60562,60563],{"class":86},"      top: 12px;\n",[69,60565,60566],{"class":71,"line":9263},[69,60567,60568],{"class":86},"      display: flex;\n",[69,60570,60571],{"class":71,"line":9275},[69,60572,3431],{"class":86},[69,60574,60575],{"class":71,"line":9287},[69,60576,3644],{"emptyLinePlaceholder":1325},[69,60578,60579],{"class":71,"line":9299},[69,60580,60581],{"class":86},"    .slider-footer .toggle button {\n",[69,60583,60584],{"class":71,"line":10958},[69,60585,60586],{"class":86},"      margin-right: 12px;\n",[69,60588,60589],{"class":71,"line":10983},[69,60590,60591],{"class":86},"      width: 28px;\n",[69,60593,60594],{"class":71,"line":11006},[69,60595,60596],{"class":86},"      height: 28px;\n",[69,60598,60599],{"class":71,"line":11030},[69,60600,60601],{"class":86},"      appearance: none;\n",[69,60603,60604],{"class":71,"line":11035},[69,60605,60606],{"class":86},"      border: none;\n",[69,60608,60609],{"class":71,"line":11040},[69,60610,60611],{"class":86},"      background: rgba(255, 255, 255, 0.1);\n",[69,60613,60614],{"class":71,"line":11045},[69,60615,60616],{"class":86},"      color: #fff;\n",[69,60618,60619],{"class":71,"line":11054},[69,60620,60621],{"class":86},"      border-radius: 4px;\n",[69,60623,60624],{"class":71,"line":11059},[69,60625,60626],{"class":86},"      cursor: pointer;\n",[69,60628,60629],{"class":71,"line":11065},[69,60630,3431],{"class":86},[69,60632,60633],{"class":71,"line":11086},[69,60634,3644],{"emptyLinePlaceholder":1325},[69,60636,60637],{"class":71,"line":11092},[69,60638,60639],{"class":86},"    .slider-footer .toggle button:hover {\n",[69,60641,60642],{"class":71,"line":11106},[69,60643,60644],{"class":86},"      background: rgba(255, 255, 255, 0.2);\n",[69,60646,60647],{"class":71,"line":11112},[69,60648,3431],{"class":86},[69,60650,60651],{"class":71,"line":11139},[69,60652,3644],{"emptyLinePlaceholder":1325},[69,60654,60655],{"class":71,"line":11148},[69,60656,60657],{"class":86},"    .slider-footer p {\n",[69,60659,60660],{"class":71,"line":11154},[69,60661,60662],{"class":86},"      margin: 0;\n",[69,60664,60665],{"class":71,"line":11162},[69,60666,60616],{"class":86},[69,60668,60669],{"class":71,"line":11167},[69,60670,60671],{"class":86},"      font-size: 18px;\n",[69,60673,60674],{"class":71,"line":17843},[69,60675,60676],{"class":86},"      margin-bottom: 10px;\n",[69,60678,60679],{"class":71,"line":17849},[69,60680,3431],{"class":86},[69,60682,60683],{"class":71,"line":17872},[69,60684,3644],{"emptyLinePlaceholder":1325},[69,60686,60687],{"class":71,"line":17878},[69,60688,60689],{"class":86},"    .slider-indicator {\n",[69,60691,60692],{"class":71,"line":17901},[69,60693,60662],{"class":86},[69,60695,60696],{"class":71,"line":17915},[69,60697,60698],{"class":86},"      padding: 0;\n",[69,60700,60701],{"class":71,"line":17935},[69,60702,60703],{"class":86},"      list-style: none;\n",[69,60705,60706],{"class":71,"line":17941},[69,60707,60568],{"class":86},[69,60709,60710],{"class":71,"line":17952},[69,60711,60712],{"class":86},"      align-items: center;\n",[69,60714,60715],{"class":71,"line":17975},[69,60716,3431],{"class":86},[69,60718,60719],{"class":71,"line":17997},[69,60720,3644],{"emptyLinePlaceholder":1325},[69,60722,60723],{"class":71,"line":18002},[69,60724,60725],{"class":86},"    .slider-indicator li {\n",[69,60727,60728],{"class":71,"line":18008},[69,60729,60730],{"class":86},"      width: 8px;\n",[69,60732,60733],{"class":71,"line":18022},[69,60734,60735],{"class":86},"      height: 8px;\n",[69,60737,60738],{"class":71,"line":18035},[69,60739,60740],{"class":86},"      margin: 4px;\n",[69,60742,60743],{"class":71,"line":18040},[69,60744,60745],{"class":86},"      border-radius: 50%;\n",[69,60747,60748],{"class":71,"line":18054},[69,60749,60750],{"class":86},"      background: #fff;\n",[69,60752,60753],{"class":71,"line":18059},[69,60754,60755],{"class":86},"      opacity: 0.4;\n",[69,60757,60758],{"class":71,"line":18065},[69,60759,60626],{"class":86},[69,60761,60762],{"class":71,"line":18070},[69,60763,3431],{"class":86},[69,60765,60766],{"class":71,"line":18084},[69,60767,3644],{"emptyLinePlaceholder":1325},[69,60769,60770],{"class":71,"line":18089},[69,60771,60772],{"class":86},"    .slider-indicator li.active {\n",[69,60774,60775],{"class":71,"line":18094},[69,60776,60777],{"class":86},"      width: 12px;\n",[69,60779,60780],{"class":71,"line":18108},[69,60781,60782],{"class":86},"      height: 12px;\n",[69,60784,60785],{"class":71,"line":18120},[69,60786,60787],{"class":86},"      opacity: 1;\n",[69,60789,60790],{"class":71,"line":18125},[69,60791,3431],{"class":86},[69,60793,60794,60796,60798],{"class":71,"line":18138},[69,60795,53645],{"class":86},[69,60797,1297],{"class":348},[69,60799,1026],{"class":86},[69,60801,60802,60804,60806],{"class":71,"line":18143},[69,60803,1036],{"class":86},[69,60805,52567],{"class":348},[69,60807,1026],{"class":86},[69,60809,60810],{"class":71,"line":18148},[69,60811,3644],{"emptyLinePlaceholder":1325},[69,60813,60814,60816,60818],{"class":71,"line":18153},[69,60815,1011],{"class":86},[69,60817,680],{"class":348},[69,60819,1026],{"class":86},[69,60821,60822,60824,60826,60828,60830,60833],{"class":71,"line":18166},[69,60823,53372],{"class":86},[69,60825,442],{"class":348},[69,60827,1016],{"class":109},[69,60829,1019],{"class":86},[69,60831,60832],{"class":1022},"\"slider\"",[69,60834,1026],{"class":86},[69,60836,60837,60839,60841,60843,60845,60847],{"class":71,"line":18171},[69,60838,52574],{"class":86},[69,60840,442],{"class":348},[69,60842,1016],{"class":109},[69,60844,1019],{"class":86},[69,60846,56454],{"class":1022},[69,60848,1026],{"class":86},[69,60850,60851,60853,60855,60857,60859,60862,60864,60866,60868],{"class":71,"line":33869},[69,60852,56461],{"class":86},[69,60854,24],{"class":348},[69,60856,56466],{"class":109},[69,60858,1019],{"class":86},[69,60860,60861],{"class":1022},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[69,60863,56474],{"class":109},[69,60865,1019],{"class":86},[69,60867,8894],{"class":1022},[69,60869,60353],{"class":86},[69,60871,60872,60874,60876],{"class":71,"line":33875},[69,60873,53006],{"class":86},[69,60875,442],{"class":348},[69,60877,1026],{"class":86},[69,60879,60880,60882,60884,60886,60888,60890],{"class":71,"line":33881},[69,60881,52574],{"class":86},[69,60883,442],{"class":348},[69,60885,1016],{"class":109},[69,60887,1019],{"class":86},[69,60889,56501],{"class":1022},[69,60891,1026],{"class":86},[69,60893,60894,60896,60898,60901,60903],{"class":71,"line":33887},[69,60895,56461],{"class":86},[69,60897,29],{"class":348},[69,60899,60900],{"class":86},">对人类来说会不会太超前了？\u003C\u002F",[69,60902,29],{"class":348},[69,60904,1026],{"class":86},[69,60906,60907,60909,60911,60913,60915,60918],{"class":71,"line":33893},[69,60908,56461],{"class":86},[69,60910,162],{"class":348},[69,60912,1016],{"class":109},[69,60914,1019],{"class":86},[69,60916,60917],{"class":1022},"\"slider-indicator\"",[69,60919,1026],{"class":86},[69,60921,60922,60924,60926,60928,60930,60933,60935,60937],{"class":71,"line":33904},[69,60923,56529],{"class":86},[69,60925,40],{"class":348},[69,60927,1016],{"class":109},[69,60929,1019],{"class":86},[69,60931,60932],{"class":1022},"\"active\"",[69,60934,56541],{"class":86},[69,60936,40],{"class":348},[69,60938,1026],{"class":86},[69,60940,60941,60943,60945,60947,60949],{"class":71,"line":33910},[69,60942,56529],{"class":86},[69,60944,40],{"class":348},[69,60946,56541],{"class":86},[69,60948,40],{"class":348},[69,60950,1026],{"class":86},[69,60952,60953,60955,60957,60959,60961],{"class":71,"line":33930},[69,60954,56529],{"class":86},[69,60956,40],{"class":348},[69,60958,56541],{"class":86},[69,60960,40],{"class":348},[69,60962,1026],{"class":86},[69,60964,60965,60967,60969,60971,60973],{"class":71,"line":33936},[69,60966,56529],{"class":86},[69,60968,40],{"class":348},[69,60970,56541],{"class":86},[69,60972,40],{"class":348},[69,60974,1026],{"class":86},[69,60976,60977,60979,60981,60983,60985],{"class":71,"line":33947},[69,60978,56529],{"class":86},[69,60980,40],{"class":348},[69,60982,56541],{"class":86},[69,60984,40],{"class":348},[69,60986,1026],{"class":86},[69,60988,60989,60991,60993,60995,60997],{"class":71,"line":33953},[69,60990,56529],{"class":86},[69,60992,40],{"class":348},[69,60994,56541],{"class":86},[69,60996,40],{"class":348},[69,60998,1026],{"class":86},[69,61000,61001,61003,61005,61007,61009],{"class":71,"line":33959},[69,61002,56529],{"class":86},[69,61004,40],{"class":348},[69,61006,56541],{"class":86},[69,61008,40],{"class":348},[69,61010,1026],{"class":86},[69,61012,61013,61015,61017,61019,61021],{"class":71,"line":33965},[69,61014,56529],{"class":86},[69,61016,40],{"class":348},[69,61018,56541],{"class":86},[69,61020,40],{"class":348},[69,61022,1026],{"class":86},[69,61024,61025,61027,61029],{"class":71,"line":33971},[69,61026,56634],{"class":86},[69,61028,162],{"class":348},[69,61030,1026],{"class":86},[69,61032,61033,61035,61037,61039,61041,61044],{"class":71,"line":33977},[69,61034,56461],{"class":86},[69,61036,442],{"class":348},[69,61038,1016],{"class":109},[69,61040,1019],{"class":86},[69,61042,61043],{"class":1022},"\"toggle\"",[69,61045,1026],{"class":86},[69,61047,61048,61050,61052,61054,61056,61059,61061,61064,61066,61068],{"class":71,"line":33983},[69,61049,56529],{"class":86},[69,61051,55114],{"class":348},[69,61053,1016],{"class":109},[69,61055,1019],{"class":86},[69,61057,61058],{"class":1022},"\"prev\"",[69,61060,2346],{"class":86},[69,61062,61063],{"class":90},"&lt;",[69,61065,1036],{"class":86},[69,61067,55114],{"class":348},[69,61069,1026],{"class":86},[69,61071,61072,61074,61076,61078,61080,61083,61085,61088,61090,61092],{"class":71,"line":33989},[69,61073,56529],{"class":86},[69,61075,55114],{"class":348},[69,61077,1016],{"class":109},[69,61079,1019],{"class":86},[69,61081,61082],{"class":1022},"\"next\"",[69,61084,2346],{"class":86},[69,61086,61087],{"class":90},"&gt;",[69,61089,1036],{"class":86},[69,61091,55114],{"class":348},[69,61093,1026],{"class":86},[69,61095,61096,61098,61100],{"class":71,"line":34009},[69,61097,56634],{"class":86},[69,61099,442],{"class":348},[69,61101,1026],{"class":86},[69,61103,61104,61106,61108],{"class":71,"line":34015},[69,61105,53006],{"class":86},[69,61107,442],{"class":348},[69,61109,1026],{"class":86},[69,61111,61112,61114,61116],{"class":71,"line":34031},[69,61113,53645],{"class":86},[69,61115,442],{"class":348},[69,61117,1026],{"class":86},[69,61119,61120,61122,61124],{"class":71,"line":34037},[69,61121,53372],{"class":86},[69,61123,53041],{"class":348},[69,61125,1026],{"class":86},[69,61127,61128],{"class":71,"line":34051},[69,61129,61130],{"class":86},"    \u002F\u002F 1. 初始数据\n",[69,61132,61133],{"class":71,"line":34057},[69,61134,61135],{"class":86},"    const data = [\n",[69,61137,61138],{"class":71,"line":34072},[69,61139,61140],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[69,61142,61143],{"class":71,"line":34078},[69,61144,61145],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[69,61147,61148],{"class":71,"line":34087},[69,61149,61150],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[69,61152,61153],{"class":71,"line":34093},[69,61154,61155],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[69,61157,61158],{"class":71,"line":34102},[69,61159,61160],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[69,61162,61163],{"class":71,"line":34108},[69,61164,61165],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[69,61167,61168],{"class":71,"line":34114},[69,61169,61170],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[69,61172,61173],{"class":71,"line":34123},[69,61174,61175],{"class":86},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[69,61177,61178],{"class":71,"line":34129},[69,61179,54337],{"class":86},[69,61181,61182],{"class":71,"line":34140},[69,61183,61184],{"class":86},"    \u002F\u002F 获取元素\n",[69,61186,61187],{"class":71,"line":34146},[69,61188,61189],{"class":86},"    const img = document.querySelector('.slider-wrapper img')\n",[69,61191,61192],{"class":71,"line":34165},[69,61193,61194],{"class":86},"    const p = document.querySelector('.slider-footer p')\n",[69,61196,61197],{"class":71,"line":34171},[69,61198,61199],{"class":86},"    const footer = document.querySelector('.slider-footer')\n",[69,61201,61202],{"class":71,"line":34182},[69,61203,61204],{"class":86},"    \u002F\u002F 1. 右按钮业务\n",[69,61206,61207],{"class":71,"line":34188},[69,61208,61209],{"class":86},"    \u002F\u002F 1.1 获取右侧按钮 \n",[69,61211,61212],{"class":71,"line":34208},[69,61213,61214],{"class":86},"    const next = document.querySelector('.next')\n",[69,61216,61217],{"class":71,"line":34224},[69,61218,61219],{"class":86},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[69,61221,61222],{"class":71,"line":34230},[69,61223,61224],{"class":86},"    \u002F\u002F 1.2 注册点击事件\n",[69,61226,61227],{"class":71,"line":34244},[69,61228,3644],{"emptyLinePlaceholder":1325},[69,61230,61231],{"class":71,"line":34250},[69,61232,61233],{"class":86},"    next.addEventListener('click', function () {\n",[69,61235,61236],{"class":71,"line":34256},[69,61237,61238],{"class":86},"      \u002F\u002F console.log(11)\n",[69,61240,61241],{"class":71,"line":34267},[69,61242,61243],{"class":86},"      i++\n",[69,61245,61246],{"class":71,"line":34273},[69,61247,61248],{"class":86},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[69,61250,61251],{"class":71,"line":34279},[69,61252,61253],{"class":86},"      \u002F\u002F if (i >= 8) {\n",[69,61255,61256],{"class":71,"line":34289},[69,61257,61258],{"class":86},"      \u002F\u002F   i = 0\n",[69,61260,61261],{"class":71,"line":34295},[69,61262,61263],{"class":86},"      \u002F\u002F }\n",[69,61265,61266],{"class":71,"line":34306},[69,61267,61268],{"class":86},"      i = i >= data.length ? 0 : i\n",[69,61270,61271],{"class":71,"line":34312},[69,61272,61273],{"class":86},"      \u002F\u002F 1.3 得到对应的对象\n",[69,61275,61276],{"class":71,"line":34322},[69,61277,61278],{"class":86},"      \u002F\u002F console.log(data[i])\n",[69,61280,61281],{"class":71,"line":34327},[69,61282,61283],{"class":86},"      \u002F\u002F 调用函数\n",[69,61285,61286],{"class":71,"line":34333},[69,61287,61288],{"class":86},"      toggle()\n",[69,61290,61291],{"class":71,"line":34382},[69,61292,34697],{"class":86},[69,61294,61295],{"class":71,"line":34429},[69,61296,3644],{"emptyLinePlaceholder":1325},[69,61298,61299],{"class":71,"line":34434},[69,61300,61301],{"class":86},"    \u002F\u002F 2. 左侧按钮业务\n",[69,61303,61304],{"class":71,"line":34440},[69,61305,61306],{"class":86},"    \u002F\u002F 2.1 获取左侧按钮 \n",[69,61308,61309],{"class":71,"line":34459},[69,61310,61311],{"class":86},"    const prev = document.querySelector('.prev')\n",[69,61313,61314],{"class":71,"line":34465},[69,61315,61224],{"class":86},[69,61317,61318],{"class":71,"line":34485},[69,61319,61320],{"class":86},"    prev.addEventListener('click', function () {\n",[69,61322,61323],{"class":71,"line":34491},[69,61324,61325],{"class":86},"      i--\n",[69,61327,61328],{"class":71,"line":34497},[69,61329,61330],{"class":86},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[69,61332,61333],{"class":71,"line":34507},[69,61334,61335],{"class":86},"      \u002F\u002F if (i \u003C 0) {\n",[69,61337,61338],{"class":71,"line":34512},[69,61339,61340],{"class":86},"      \u002F\u002F   i = 7\n",[69,61342,61343],{"class":71,"line":34518},[69,61344,61263],{"class":86},[69,61346,61347],{"class":71,"line":34534},[69,61348,61349],{"class":86},"      i = i \u003C 0 ? data.length - 1 : i\n",[69,61351,61352],{"class":71,"line":34579},[69,61353,61273],{"class":86},[69,61355,61356],{"class":71,"line":34585},[69,61357,61278],{"class":86},[69,61359,61360],{"class":71,"line":34591},[69,61361,61283],{"class":86},[69,61363,61364],{"class":71,"line":34597},[69,61365,61288],{"class":86},[69,61367,61368],{"class":71,"line":34608},[69,61369,34697],{"class":86},[69,61371,61372],{"class":71,"line":34614},[69,61373,3644],{"emptyLinePlaceholder":1325},[69,61375,61376],{"class":71,"line":34620},[69,61377,61378],{"class":86},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[69,61380,61381],{"class":71,"line":34626},[69,61382,61383],{"class":86},"    function toggle() {\n",[69,61385,61386],{"class":71,"line":34644},[69,61387,61388],{"class":86},"      \u002F\u002F 1.4 渲染对应的数据\n",[69,61390,61391],{"class":71,"line":34658},[69,61392,61393],{"class":86},"      img.src = data[i].url\n",[69,61395,61396],{"class":71,"line":34667},[69,61397,61398],{"class":86},"      p.innerHTML = data[i].title\n",[69,61400,61401],{"class":71,"line":34676},[69,61402,61403],{"class":86},"      footer.style.backgroundColor = data[i].color\n",[69,61405,61406],{"class":71,"line":34685},[69,61407,61408],{"class":86},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[69,61410,61411],{"class":71,"line":34694},[69,61412,61413],{"class":86},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[69,61415,61416],{"class":71,"line":34700},[69,61417,61418],{"class":86},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[69,61420,61421],{"class":71,"line":34706},[69,61422,3431],{"class":86},[69,61424,61425],{"class":71,"line":34714},[69,61426,3644],{"emptyLinePlaceholder":1325},[69,61428,61429],{"class":71,"line":34719},[69,61430,61431],{"class":86},"    \u002F\u002F 3. 自动播放模块\n",[69,61433,61434],{"class":71,"line":34725},[69,61435,61436],{"class":86},"    let timerId = setInterval(function () {\n",[69,61438,61439],{"class":71,"line":34736},[69,61440,61441],{"class":86},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[69,61443,61444],{"class":71,"line":34742},[69,61445,61446],{"class":86},"      next.click()\n",[69,61448,61449],{"class":71,"line":34762},[69,61450,61451],{"class":86},"    }, 1000)\n",[69,61453,61454],{"class":71,"line":34768},[69,61455,3644],{"emptyLinePlaceholder":1325},[69,61457,61458],{"class":71,"line":34774},[69,61459,61460],{"class":86},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[69,61462,61463],{"class":71,"line":34780},[69,61464,61465],{"class":86},"    const slider = document.querySelector('.slider')\n",[69,61467,61468],{"class":71,"line":34797},[69,61469,61470],{"class":86},"    \u002F\u002F 注册事件\n",[69,61472,61473],{"class":71,"line":34803},[69,61474,61475],{"class":86},"    slider.addEventListener('mouseenter', function () {\n",[69,61477,61478],{"class":71,"line":34809},[69,61479,61480],{"class":86},"      \u002F\u002F 停止定时器\n",[69,61482,61483],{"class":71,"line":34815},[69,61484,61485],{"class":86},"      clearInterval(timerId)\n",[69,61487,61488],{"class":71,"line":34821},[69,61489,34697],{"class":86},[69,61491,61492],{"class":71,"line":34827},[69,61493,3644],{"emptyLinePlaceholder":1325},[69,61495,61496],{"class":71,"line":34854},[69,61497,61498],{"class":86},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[69,61500,61501],{"class":71,"line":34878},[69,61502,61470],{"class":86},[69,61504,61505],{"class":71,"line":34884},[69,61506,61507],{"class":86},"    slider.addEventListener('mouseleave', function () {\n",[69,61509,61510],{"class":71,"line":34890},[69,61511,61480],{"class":86},[69,61513,61514],{"class":71,"line":34896},[69,61515,61516],{"class":86},"      if (timerId) clearInterval(timerId)\n",[69,61518,61519],{"class":71,"line":34907},[69,61520,61521],{"class":86},"      \u002F\u002F 开启定时器\n",[69,61523,61524],{"class":71,"line":34918},[69,61525,61526],{"class":86},"      timerId = setInterval(function () {\n",[69,61528,61529],{"class":71,"line":34924},[69,61530,61531],{"class":86},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[69,61533,61534],{"class":71,"line":34941},[69,61535,61536],{"class":86},"        next.click()\n",[69,61538,61539],{"class":71,"line":34964},[69,61540,61541],{"class":86},"      }, 1000)\n",[69,61543,61544],{"class":71,"line":34987},[69,61545,34697],{"class":86},[69,61547,61548,61550,61552],{"class":71,"line":34993},[69,61549,53645],{"class":86},[69,61551,53041],{"class":348},[69,61553,1026],{"class":86},[69,61555,61556,61558,61560],{"class":71,"line":34998},[69,61557,1036],{"class":86},[69,61559,680],{"class":348},[69,61561,1026],{"class":86},[69,61563,61564],{"class":71,"line":35007},[69,61565,3644],{"emptyLinePlaceholder":1325},[69,61567,61568,61570,61572],{"class":71,"line":35017},[69,61569,1036],{"class":86},[69,61571,349],{"class":348},[69,61573,1026],{"class":86},[23237,61575,61577],{"id":61576},"_3252-焦点事件","3.2.5.2 焦点事件",[29,61579,61580],{},"小米搜索框案例：",[59,61582,61584],{"className":51869,"code":61583,"language":349,"meta":64,"style":64},"\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",[66,61585,61586,61596,61610,61614,61622,61636,61656,61676,61688,61696,61702,61712,61722,61734,61738,61742,61749,61753,61764,61768,61772,61779,61790,61803,61817,61821,61825,61834,61846,61858,61872,61885,61898,61916,61927,61931,61935,61944,61961,61965,61969,61976,61986,61996,62007,62020,62032,62048,62059,62071,62075,62079,62087,62098,62115,62127,62139,62150,62154,62158,62169,62180,62184,62192,62196,62204,62208,62216,62231,62254,62269,62300,62327,62354,62381,62408,62435,62462,62471,62479,62487,62492,62512,62532,62537,62542,62560,62565,62575,62580,62594,62599,62604,62621,62630,62642,62646,62654,62662,62666],{"__ignoreMap":64},[69,61587,61588,61590,61592,61594],{"class":71,"line":72},[69,61589,52532],{"class":86},[69,61591,52535],{"class":348},[69,61593,52538],{"class":109},[69,61595,1026],{"class":86},[69,61597,61598,61600,61602,61604,61606,61608],{"class":71,"line":79},[69,61599,1011],{"class":86},[69,61601,349],{"class":348},[69,61603,52549],{"class":109},[69,61605,1019],{"class":86},[69,61607,52554],{"class":1022},[69,61609,1026],{"class":86},[69,61611,61612],{"class":71,"line":106},[69,61613,3644],{"emptyLinePlaceholder":1325},[69,61615,61616,61618,61620],{"class":71,"line":116},[69,61617,1011],{"class":86},[69,61619,52567],{"class":348},[69,61621,1026],{"class":86},[69,61623,61624,61626,61628,61630,61632,61634],{"class":71,"line":133},[69,61625,52574],{"class":86},[69,61627,52577],{"class":348},[69,61629,52580],{"class":109},[69,61631,1019],{"class":86},[69,61633,52585],{"class":1022},[69,61635,1026],{"class":86},[69,61637,61638,61640,61642,61644,61646,61648,61650,61652,61654],{"class":71,"line":139},[69,61639,52574],{"class":86},[69,61641,52577],{"class":348},[69,61643,52596],{"class":109},[69,61645,1019],{"class":86},[69,61647,52601],{"class":1022},[69,61649,52604],{"class":109},[69,61651,1019],{"class":86},[69,61653,52609],{"class":1022},[69,61655,1026],{"class":86},[69,61657,61658,61660,61662,61664,61666,61668,61670,61672,61674],{"class":71,"line":401},[69,61659,52574],{"class":86},[69,61661,52577],{"class":348},[69,61663,16160],{"class":109},[69,61665,1019],{"class":86},[69,61667,52624],{"class":1022},[69,61669,52604],{"class":109},[69,61671,1019],{"class":86},[69,61673,52631],{"class":1022},[69,61675,1026],{"class":86},[69,61677,61678,61680,61682,61684,61686],{"class":71,"line":470},[69,61679,52574],{"class":86},[69,61681,52640],{"class":348},[69,61683,52643],{"class":86},[69,61685,52640],{"class":348},[69,61687,1026],{"class":86},[69,61689,61690,61692,61694],{"class":71,"line":475},[69,61691,52574],{"class":86},[69,61693,1297],{"class":348},[69,61695,1026],{"class":86},[69,61697,61698,61700],{"class":71,"line":482},[69,61699,52660],{"class":348},[69,61701,113],{"class":86},[69,61703,61704,61706,61708,61710],{"class":71,"line":497},[69,61705,52667],{"class":90},[69,61707,94],{"class":86},[69,61709,1583],{"class":90},[69,61711,130],{"class":86},[69,61713,61714,61716,61718,61720],{"class":71,"line":502},[69,61715,52678],{"class":90},[69,61717,94],{"class":86},[69,61719,1583],{"class":90},[69,61721,130],{"class":86},[69,61723,61724,61727,61729,61732],{"class":71,"line":509},[69,61725,61726],{"class":90},"            box-sizing",[69,61728,94],{"class":86},[69,61730,61731],{"class":90},"border-box",[69,61733,130],{"class":86},[69,61735,61736],{"class":71,"line":524},[69,61737,3773],{"class":86},[69,61739,61740],{"class":71,"line":2888},[69,61741,3644],{"emptyLinePlaceholder":1325},[69,61743,61744,61747],{"class":71,"line":2893},[69,61745,61746],{"class":348},"        ul",[69,61748,113],{"class":86},[69,61750,61751],{"class":71,"line":2899},[69,61752,3644],{"emptyLinePlaceholder":1325},[69,61754,61755,61758,61760,61762],{"class":71,"line":2919},[69,61756,61757],{"class":90},"            list-style",[69,61759,94],{"class":86},[69,61761,55964],{"class":90},[69,61763,130],{"class":86},[69,61765,61766],{"class":71,"line":2924},[69,61767,3773],{"class":86},[69,61769,61770],{"class":71,"line":2938},[69,61771,3644],{"emptyLinePlaceholder":1325},[69,61773,61774,61777],{"class":71,"line":2943},[69,61775,61776],{"class":109},"        .mi",[69,61778,113],{"class":86},[69,61780,61781,61784,61786,61788],{"class":71,"line":2972},[69,61782,61783],{"class":90},"            position",[69,61785,94],{"class":86},[69,61787,55991],{"class":90},[69,61789,130],{"class":86},[69,61791,61792,61794,61796,61799,61801],{"class":71,"line":2977},[69,61793,52716],{"class":90},[69,61795,94],{"class":86},[69,61797,61798],{"class":90},"223",[69,61800,100],{"class":82},[69,61802,130],{"class":86},[69,61804,61805,61807,61809,61811,61813,61815],{"class":71,"line":2994},[69,61806,52667],{"class":90},[69,61808,94],{"class":86},[69,61810,124],{"class":90},[69,61812,100],{"class":82},[69,61814,52787],{"class":90},[69,61816,130],{"class":86},[69,61818,61819],{"class":71,"line":2999},[69,61820,3773],{"class":86},[69,61822,61823],{"class":71,"line":3004},[69,61824,3644],{"emptyLinePlaceholder":1325},[69,61826,61827,61829,61832],{"class":71,"line":3009},[69,61828,61776],{"class":109},[69,61830,61831],{"class":348}," input",[69,61833,113],{"class":86},[69,61835,61836,61838,61840,61842,61844],{"class":71,"line":3023},[69,61837,52716],{"class":90},[69,61839,94],{"class":86},[69,61841,61798],{"class":90},[69,61843,100],{"class":82},[69,61845,130],{"class":86},[69,61847,61848,61850,61852,61854,61856],{"class":71,"line":3028},[69,61849,52730],{"class":90},[69,61851,94],{"class":86},[69,61853,1994],{"class":90},[69,61855,100],{"class":82},[69,61857,130],{"class":86},[69,61859,61860,61862,61864,61866,61868,61870],{"class":71,"line":3821},[69,61861,52678],{"class":90},[69,61863,94],{"class":86},[69,61865,1583],{"class":90},[69,61867,3282],{"class":90},[69,61869,100],{"class":82},[69,61871,130],{"class":86},[69,61873,61874,61877,61879,61881,61883],{"class":71,"line":3835},[69,61875,61876],{"class":90},"            font-size",[69,61878,94],{"class":86},[69,61880,1937],{"class":90},[69,61882,100],{"class":82},[69,61884,130],{"class":86},[69,61886,61887,61890,61892,61894,61896],{"class":71,"line":3843},[69,61888,61889],{"class":90},"            line-height",[69,61891,94],{"class":86},[69,61893,1994],{"class":90},[69,61895,100],{"class":82},[69,61897,130],{"class":86},[69,61899,61900,61903,61905,61907,61909,61911,61914],{"class":71,"line":3848},[69,61901,61902],{"class":90},"            border",[69,61904,94],{"class":86},[69,61906,1609],{"class":90},[69,61908,100],{"class":82},[69,61910,52752],{"class":90},[69,61912,61913],{"class":90}," #e0e0e0",[69,61915,130],{"class":86},[69,61917,61918,61921,61923,61925],{"class":71,"line":3854},[69,61919,61920],{"class":90},"            outline",[69,61922,94],{"class":86},[69,61924,55964],{"class":90},[69,61926,130],{"class":86},[69,61928,61929],{"class":71,"line":3860},[69,61930,3773],{"class":86},[69,61932,61933],{"class":71,"line":3865},[69,61934,3644],{"emptyLinePlaceholder":1325},[69,61936,61937,61939,61942],{"class":71,"line":9190},[69,61938,61776],{"class":109},[69,61940,61941],{"class":109}," .search",[69,61943,113],{"class":86},[69,61945,61946,61948,61950,61952,61954,61956,61959],{"class":71,"line":9214},[69,61947,61902],{"class":90},[69,61949,94],{"class":86},[69,61951,1609],{"class":90},[69,61953,100],{"class":82},[69,61955,52752],{"class":90},[69,61957,61958],{"class":90}," #ff6700",[69,61960,130],{"class":86},[69,61962,61963],{"class":71,"line":9219},[69,61964,3773],{"class":86},[69,61966,61967],{"class":71,"line":9225},[69,61968,3644],{"emptyLinePlaceholder":1325},[69,61970,61971,61974],{"class":71,"line":9252},[69,61972,61973],{"class":109},"        .result-list",[69,61975,113],{"class":86},[69,61977,61978,61980,61982,61984],{"class":71,"line":9257},[69,61979,52704],{"class":90},[69,61981,94],{"class":86},[69,61983,55964],{"class":90},[69,61985,130],{"class":86},[69,61987,61988,61990,61992,61994],{"class":71,"line":9263},[69,61989,61783],{"class":90},[69,61991,94],{"class":86},[69,61993,56058],{"class":90},[69,61995,130],{"class":86},[69,61997,61998,62001,62003,62005],{"class":71,"line":9275},[69,61999,62000],{"class":90},"            left",[69,62002,94],{"class":86},[69,62004,1583],{"class":90},[69,62006,130],{"class":86},[69,62008,62009,62012,62014,62016,62018],{"class":71,"line":9287},[69,62010,62011],{"class":90},"            top",[69,62013,94],{"class":86},[69,62015,1994],{"class":90},[69,62017,100],{"class":82},[69,62019,130],{"class":86},[69,62021,62022,62024,62026,62028,62030],{"class":71,"line":9299},[69,62023,52716],{"class":90},[69,62025,94],{"class":86},[69,62027,61798],{"class":90},[69,62029,100],{"class":82},[69,62031,130],{"class":86},[69,62033,62034,62036,62038,62040,62042,62044,62046],{"class":71,"line":10958},[69,62035,61902],{"class":90},[69,62037,94],{"class":86},[69,62039,1609],{"class":90},[69,62041,100],{"class":82},[69,62043,52752],{"class":90},[69,62045,61958],{"class":90},[69,62047,130],{"class":86},[69,62049,62050,62053,62055,62057],{"class":71,"line":10983},[69,62051,62052],{"class":90},"            border-top",[69,62054,94],{"class":86},[69,62056,1583],{"class":90},[69,62058,130],{"class":86},[69,62060,62061,62064,62066,62069],{"class":71,"line":11006},[69,62062,62063],{"class":90},"            background",[69,62065,94],{"class":86},[69,62067,62068],{"class":90},"#fff",[69,62070,130],{"class":86},[69,62072,62073],{"class":71,"line":11030},[69,62074,3773],{"class":86},[69,62076,62077],{"class":71,"line":11035},[69,62078,3644],{"emptyLinePlaceholder":1325},[69,62080,62081,62083,62085],{"class":71,"line":11040},[69,62082,61973],{"class":109},[69,62084,2650],{"class":348},[69,62086,113],{"class":86},[69,62088,62089,62091,62093,62096],{"class":71,"line":11045},[69,62090,52704],{"class":90},[69,62092,94],{"class":86},[69,62094,62095],{"class":90},"block",[69,62097,130],{"class":86},[69,62099,62100,62102,62104,62106,62108,62111,62113],{"class":71,"line":11054},[69,62101,52678],{"class":90},[69,62103,94],{"class":86},[69,62105,1733],{"class":90},[69,62107,100],{"class":82},[69,62109,62110],{"class":90}," 15",[69,62112,100],{"class":82},[69,62114,130],{"class":86},[69,62116,62117,62119,62121,62123,62125],{"class":71,"line":11059},[69,62118,61876],{"class":90},[69,62120,94],{"class":86},[69,62122,1886],{"class":90},[69,62124,100],{"class":82},[69,62126,130],{"class":86},[69,62128,62129,62132,62134,62137],{"class":71,"line":11065},[69,62130,62131],{"class":90},"            color",[69,62133,94],{"class":86},[69,62135,62136],{"class":90},"#424242",[69,62138,130],{"class":86},[69,62140,62141,62144,62146,62148],{"class":71,"line":11086},[69,62142,62143],{"class":90},"            text-decoration",[69,62145,94],{"class":86},[69,62147,55964],{"class":90},[69,62149,130],{"class":86},[69,62151,62152],{"class":71,"line":11092},[69,62153,3773],{"class":86},[69,62155,62156],{"class":71,"line":11106},[69,62157,3644],{"emptyLinePlaceholder":1325},[69,62159,62160,62162,62164,62167],{"class":71,"line":11112},[69,62161,61973],{"class":109},[69,62163,2650],{"class":348},[69,62165,62166],{"class":109},":hover",[69,62168,113],{"class":86},[69,62170,62171,62173,62175,62178],{"class":71,"line":11139},[69,62172,52870],{"class":90},[69,62174,94],{"class":86},[69,62176,62177],{"class":90},"#eee",[69,62179,130],{"class":86},[69,62181,62182],{"class":71,"line":11148},[69,62183,3773],{"class":86},[69,62185,62186,62188,62190],{"class":71,"line":11154},[69,62187,53006],{"class":86},[69,62189,1297],{"class":348},[69,62191,1026],{"class":86},[69,62193,62194],{"class":71,"line":11162},[69,62195,3644],{"emptyLinePlaceholder":1325},[69,62197,62198,62200,62202],{"class":71,"line":11167},[69,62199,1036],{"class":86},[69,62201,52567],{"class":348},[69,62203,1026],{"class":86},[69,62205,62206],{"class":71,"line":17843},[69,62207,3644],{"emptyLinePlaceholder":1325},[69,62209,62210,62212,62214],{"class":71,"line":17849},[69,62211,1011],{"class":86},[69,62213,680],{"class":348},[69,62215,1026],{"class":86},[69,62217,62218,62220,62222,62224,62226,62229],{"class":71,"line":17872},[69,62219,52574],{"class":86},[69,62221,442],{"class":348},[69,62223,1016],{"class":109},[69,62225,1019],{"class":86},[69,62227,62228],{"class":1022},"\"mi\"",[69,62230,1026],{"class":86},[69,62232,62233,62235,62237,62239,62241,62244,62247,62249,62252],{"class":71,"line":17878},[69,62234,56529],{"class":86},[69,62236,55048],{"class":348},[69,62238,55051],{"class":109},[69,62240,1019],{"class":86},[69,62242,62243],{"class":1022},"\"search\"",[69,62245,62246],{"class":109}," placeholder",[69,62248,1019],{"class":86},[69,62250,62251],{"class":1022},"\"小米笔记本\"",[69,62253,1026],{"class":86},[69,62255,62256,62258,62260,62262,62264,62267],{"class":71,"line":17901},[69,62257,56529],{"class":86},[69,62259,162],{"class":348},[69,62261,1016],{"class":109},[69,62263,1019],{"class":86},[69,62265,62266],{"class":1022},"\"result-list\"",[69,62268,1026],{"class":86},[69,62270,62271,62274,62276,62279,62281,62284,62286,62289,62292,62294,62296,62298],{"class":71,"line":17915},[69,62272,62273],{"class":86},"            \u003C",[69,62275,40],{"class":348},[69,62277,62278],{"class":86},">\u003C",[69,62280,187],{"class":348},[69,62282,62283],{"class":109}," href",[69,62285,1019],{"class":86},[69,62287,62288],{"class":1022},"\"#\"",[69,62290,62291],{"class":86},">全部商品\u003C\u002F",[69,62293,187],{"class":348},[69,62295,56541],{"class":86},[69,62297,40],{"class":348},[69,62299,1026],{"class":86},[69,62301,62302,62304,62306,62308,62310,62312,62314,62316,62319,62321,62323,62325],{"class":71,"line":17935},[69,62303,62273],{"class":86},[69,62305,40],{"class":348},[69,62307,62278],{"class":86},[69,62309,187],{"class":348},[69,62311,62283],{"class":109},[69,62313,1019],{"class":86},[69,62315,62288],{"class":1022},[69,62317,62318],{"class":86},">小米11\u003C\u002F",[69,62320,187],{"class":348},[69,62322,56541],{"class":86},[69,62324,40],{"class":348},[69,62326,1026],{"class":86},[69,62328,62329,62331,62333,62335,62337,62339,62341,62343,62346,62348,62350,62352],{"class":71,"line":17941},[69,62330,62273],{"class":86},[69,62332,40],{"class":348},[69,62334,62278],{"class":86},[69,62336,187],{"class":348},[69,62338,62283],{"class":109},[69,62340,1019],{"class":86},[69,62342,62288],{"class":1022},[69,62344,62345],{"class":86},">小米10S\u003C\u002F",[69,62347,187],{"class":348},[69,62349,56541],{"class":86},[69,62351,40],{"class":348},[69,62353,1026],{"class":86},[69,62355,62356,62358,62360,62362,62364,62366,62368,62370,62373,62375,62377,62379],{"class":71,"line":17952},[69,62357,62273],{"class":86},[69,62359,40],{"class":348},[69,62361,62278],{"class":86},[69,62363,187],{"class":348},[69,62365,62283],{"class":109},[69,62367,1019],{"class":86},[69,62369,62288],{"class":1022},[69,62371,62372],{"class":86},">小米笔记本\u003C\u002F",[69,62374,187],{"class":348},[69,62376,56541],{"class":86},[69,62378,40],{"class":348},[69,62380,1026],{"class":86},[69,62382,62383,62385,62387,62389,62391,62393,62395,62397,62400,62402,62404,62406],{"class":71,"line":17975},[69,62384,62273],{"class":86},[69,62386,40],{"class":348},[69,62388,62278],{"class":86},[69,62390,187],{"class":348},[69,62392,62283],{"class":109},[69,62394,1019],{"class":86},[69,62396,62288],{"class":1022},[69,62398,62399],{"class":86},">小米手机\u003C\u002F",[69,62401,187],{"class":348},[69,62403,56541],{"class":86},[69,62405,40],{"class":348},[69,62407,1026],{"class":86},[69,62409,62410,62412,62414,62416,62418,62420,62422,62424,62427,62429,62431,62433],{"class":71,"line":17997},[69,62411,62273],{"class":86},[69,62413,40],{"class":348},[69,62415,62278],{"class":86},[69,62417,187],{"class":348},[69,62419,62283],{"class":109},[69,62421,1019],{"class":86},[69,62423,62288],{"class":1022},[69,62425,62426],{"class":86},">黑鲨4\u003C\u002F",[69,62428,187],{"class":348},[69,62430,56541],{"class":86},[69,62432,40],{"class":348},[69,62434,1026],{"class":86},[69,62436,62437,62439,62441,62443,62445,62447,62449,62451,62454,62456,62458,62460],{"class":71,"line":18002},[69,62438,62273],{"class":86},[69,62440,40],{"class":348},[69,62442,62278],{"class":86},[69,62444,187],{"class":348},[69,62446,62283],{"class":109},[69,62448,1019],{"class":86},[69,62450,62288],{"class":1022},[69,62452,62453],{"class":86},">空调\u003C\u002F",[69,62455,187],{"class":348},[69,62457,56541],{"class":86},[69,62459,40],{"class":348},[69,62461,1026],{"class":86},[69,62463,62464,62467,62469],{"class":71,"line":18008},[69,62465,62466],{"class":86},"        \u003C\u002F",[69,62468,162],{"class":348},[69,62470,1026],{"class":86},[69,62472,62473,62475,62477],{"class":71,"line":18022},[69,62474,53006],{"class":86},[69,62476,442],{"class":348},[69,62478,1026],{"class":86},[69,62480,62481,62483,62485],{"class":71,"line":18035},[69,62482,52574],{"class":86},[69,62484,53041],{"class":348},[69,62486,1026],{"class":86},[69,62488,62489],{"class":71,"line":18040},[69,62490,62491],{"class":75},"        \u002F\u002F 1. 获取元素\n",[69,62493,62494,62497,62499,62501,62503,62505,62507,62510],{"class":71,"line":18054},[69,62495,62496],{"class":82},"        const",[69,62498,61831],{"class":90},[69,62500,14805],{"class":82},[69,62502,55623],{"class":86},[69,62504,55626],{"class":109},[69,62506,1398],{"class":86},[69,62508,62509],{"class":1022},"'[type=search]'",[69,62511,1404],{"class":86},[69,62513,62514,62516,62519,62521,62523,62525,62527,62530],{"class":71,"line":18059},[69,62515,62496],{"class":82},[69,62517,62518],{"class":90}," ul",[69,62520,14805],{"class":82},[69,62522,55623],{"class":86},[69,62524,55626],{"class":109},[69,62526,1398],{"class":86},[69,62528,62529],{"class":1022},"'.result-list'",[69,62531,1404],{"class":86},[69,62533,62534],{"class":71,"line":18065},[69,62535,62536],{"class":75},"        \u002F\u002F console.log(input)\n",[69,62538,62539],{"class":71,"line":18070},[69,62540,62541],{"class":75},"        \u002F\u002F 2. 监听事件 获得焦点\n",[69,62543,62544,62547,62549,62551,62554,62556,62558],{"class":71,"line":18084},[69,62545,62546],{"class":86},"        input.",[69,62548,59039],{"class":109},[69,62550,1398],{"class":86},[69,62552,62553],{"class":1022},"'focus'",[69,62555,13677],{"class":86},[69,62557,55676],{"class":82},[69,62559,55679],{"class":86},[69,62561,62562],{"class":71,"line":18089},[69,62563,62564],{"class":75},"            \u002F\u002F ul显示\n",[69,62566,62567,62570,62572],{"class":71,"line":18094},[69,62568,62569],{"class":86},"            ul.style.display ",[69,62571,1019],{"class":82},[69,62573,62574],{"class":1022}," 'block'\n",[69,62576,62577],{"class":71,"line":18108},[69,62578,62579],{"class":75},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[69,62581,62582,62585,62587,62589,62592],{"class":71,"line":18120},[69,62583,62584],{"class":86},"            input.classList.",[69,62586,6576],{"class":109},[69,62588,1398],{"class":86},[69,62590,62591],{"class":1022},"'search'",[69,62593,1404],{"class":86},[69,62595,62596],{"class":71,"line":18125},[69,62597,62598],{"class":86},"        })\n",[69,62600,62601],{"class":71,"line":18138},[69,62602,62603],{"class":75},"        \u002F\u002F 3. 监听事件 失去焦点\n",[69,62605,62606,62608,62610,62612,62615,62617,62619],{"class":71,"line":18143},[69,62607,62546],{"class":86},[69,62609,59039],{"class":109},[69,62611,1398],{"class":86},[69,62613,62614],{"class":1022},"'blur'",[69,62616,13677],{"class":86},[69,62618,55676],{"class":82},[69,62620,55679],{"class":86},[69,62622,62623,62625,62627],{"class":71,"line":18148},[69,62624,62569],{"class":86},[69,62626,1019],{"class":82},[69,62628,62629],{"class":1022}," 'none'\n",[69,62631,62632,62634,62636,62638,62640],{"class":71,"line":18153},[69,62633,62584],{"class":86},[69,62635,58233],{"class":109},[69,62637,1398],{"class":86},[69,62639,62591],{"class":1022},[69,62641,1404],{"class":86},[69,62643,62644],{"class":71,"line":18166},[69,62645,62598],{"class":86},[69,62647,62648,62650,62652],{"class":71,"line":18171},[69,62649,53006],{"class":86},[69,62651,53041],{"class":348},[69,62653,1026],{"class":86},[69,62655,62656,62658,62660],{"class":71,"line":33869},[69,62657,1036],{"class":86},[69,62659,680],{"class":348},[69,62661,1026],{"class":86},[69,62663,62664],{"class":71,"line":33875},[69,62665,3644],{"emptyLinePlaceholder":1325},[69,62667,62668,62670,62672],{"class":71,"line":33881},[69,62669,1036],{"class":86},[69,62671,349],{"class":348},[69,62673,1026],{"class":86},[23237,62675,62677],{"id":62676},"_3253-键盘事件","3.2.5.3 键盘事件",[29,62679,62680],{},"评论字数统计案例",[29,62682,62683],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[29,62685,62686],{},"牢记focus伪类选择器",[52577,62688],{"charSet":62689},"UTF-8",[52577,62691],{"name":62692,"content":62693},"viewport","width=device-width, initial-scale=1.0",[52640,62695,62696],{},"Document",[1297,62698,62699],{},"\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",[55048,62701],{"type":540},[162,62703,62704,62707],{},[40,62705,62706],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[40,62708,62709],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[59,62711,62713],{"className":51869,"code":62712,"language":349,"meta":64,"style":64},"\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",[66,62714,62715,62725,62739,62743,62751,62765,62785,62805,62818,62826,62833,62846,62860,62870,62880,62884,62888,62895,62907,62919,62931,62943,62972,62985,62989,62993,63002,63013,63025,63036,63047,63059,63070,63082,63098,63110,63114,63118,63129,63140,63150,63162,63166,63170,63178,63189,63199,63210,63222,63235,63247,63259,63263,63267,63276,63288,63299,63312,63323,63337,63341,63345,63352,63364,63376,63386,63390,63394,63403,63415,63425,63429,63433,63444,63454,63473,63486,63490,63494,63504,63514,63518,63522,63533,63544,63556,63568,63572,63576,63587,63598,63612,63616,63620,63631,63641,63653,63657,63665,63673,63677,63685,63700,63719,63759,63772,63780,63794,63814,63822,63837,63860,63878,63893,63913,63933,63953,63961,63969,63977,63985,64005,64025,64030,64047,64056,64060,64065,64081,64089,64093,64098,64115,64120,64145,64149,64153,64158,64163,64171,64179,64183],{"__ignoreMap":64},[69,62716,62717,62719,62721,62723],{"class":71,"line":72},[69,62718,52532],{"class":86},[69,62720,52535],{"class":348},[69,62722,52538],{"class":109},[69,62724,1026],{"class":86},[69,62726,62727,62729,62731,62733,62735,62737],{"class":71,"line":79},[69,62728,1011],{"class":86},[69,62730,349],{"class":348},[69,62732,52549],{"class":109},[69,62734,1019],{"class":86},[69,62736,52554],{"class":1022},[69,62738,1026],{"class":86},[69,62740,62741],{"class":71,"line":106},[69,62742,3644],{"emptyLinePlaceholder":1325},[69,62744,62745,62747,62749],{"class":71,"line":116},[69,62746,1011],{"class":86},[69,62748,52567],{"class":348},[69,62750,1026],{"class":86},[69,62752,62753,62755,62757,62759,62761,62763],{"class":71,"line":133},[69,62754,53372],{"class":86},[69,62756,52577],{"class":348},[69,62758,52580],{"class":109},[69,62760,1019],{"class":86},[69,62762,52585],{"class":1022},[69,62764,1026],{"class":86},[69,62766,62767,62769,62771,62773,62775,62777,62779,62781,62783],{"class":71,"line":139},[69,62768,53372],{"class":86},[69,62770,52577],{"class":348},[69,62772,52596],{"class":109},[69,62774,1019],{"class":86},[69,62776,52601],{"class":1022},[69,62778,52604],{"class":109},[69,62780,1019],{"class":86},[69,62782,52609],{"class":1022},[69,62784,1026],{"class":86},[69,62786,62787,62789,62791,62793,62795,62797,62799,62801,62803],{"class":71,"line":401},[69,62788,53372],{"class":86},[69,62790,52577],{"class":348},[69,62792,16160],{"class":109},[69,62794,1019],{"class":86},[69,62796,52624],{"class":1022},[69,62798,52604],{"class":109},[69,62800,1019],{"class":86},[69,62802,52631],{"class":1022},[69,62804,1026],{"class":86},[69,62806,62807,62809,62811,62814,62816],{"class":71,"line":470},[69,62808,53372],{"class":86},[69,62810,52640],{"class":348},[69,62812,62813],{"class":86},">评论回车发布\u003C\u002F",[69,62815,52640],{"class":348},[69,62817,1026],{"class":86},[69,62819,62820,62822,62824],{"class":71,"line":475},[69,62821,53372],{"class":86},[69,62823,1297],{"class":348},[69,62825,1026],{"class":86},[69,62827,62828,62831],{"class":71,"line":482},[69,62829,62830],{"class":109},"    .wrapper",[69,62832,113],{"class":86},[69,62834,62835,62838,62840,62842,62844],{"class":71,"line":497},[69,62836,62837],{"class":90},"      min-width",[69,62839,94],{"class":86},[69,62841,5231],{"class":90},[69,62843,100],{"class":82},[69,62845,130],{"class":86},[69,62847,62848,62851,62853,62856,62858],{"class":71,"line":502},[69,62849,62850],{"class":90},"      max-width",[69,62852,94],{"class":86},[69,62854,62855],{"class":90},"800",[69,62857,100],{"class":82},[69,62859,130],{"class":86},[69,62861,62862,62864,62866,62868],{"class":71,"line":509},[69,62863,56236],{"class":90},[69,62865,94],{"class":86},[69,62867,52709],{"class":90},[69,62869,130],{"class":86},[69,62871,62872,62874,62876,62878],{"class":71,"line":524},[69,62873,56247],{"class":90},[69,62875,94],{"class":86},[69,62877,52811],{"class":90},[69,62879,130],{"class":86},[69,62881,62882],{"class":71,"line":2888},[69,62883,3431],{"class":86},[69,62885,62886],{"class":71,"line":2893},[69,62887,3644],{"emptyLinePlaceholder":1325},[69,62889,62890,62893],{"class":71,"line":2899},[69,62891,62892],{"class":109},"    .avatar",[69,62894,113],{"class":86},[69,62896,62897,62899,62901,62903,62905],{"class":71,"line":2919},[69,62898,55998],{"class":90},[69,62900,94],{"class":86},[69,62902,1994],{"class":90},[69,62904,100],{"class":82},[69,62906,130],{"class":86},[69,62908,62909,62911,62913,62915,62917],{"class":71,"line":2924},[69,62910,56012],{"class":90},[69,62912,94],{"class":86},[69,62914,1994],{"class":90},[69,62916,100],{"class":82},[69,62918,130],{"class":86},[69,62920,62921,62923,62925,62927,62929],{"class":71,"line":2938},[69,62922,56361],{"class":90},[69,62924,94],{"class":86},[69,62926,2043],{"class":90},[69,62928,127],{"class":82},[69,62930,130],{"class":86},[69,62932,62933,62936,62938,62941],{"class":71,"line":2943},[69,62934,62935],{"class":90},"      overflow",[69,62937,94],{"class":86},[69,62939,62940],{"class":90},"hidden",[69,62942,130],{"class":86},[69,62944,62945,62948,62950,62953,62955,62958,62960,62963,62965,62967,62970],{"class":71,"line":2972},[69,62946,62947],{"class":90},"      background",[69,62949,94],{"class":86},[69,62951,62952],{"class":90},"url",[69,62954,1398],{"class":86},[69,62956,62957],{"class":6458},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[69,62959,14955],{"class":86},[69,62961,62962],{"class":90},"no-repeat",[69,62964,18383],{"class":90},[69,62966,26215],{"class":86},[69,62968,62969],{"class":90},"cover",[69,62971,130],{"class":86},[69,62973,62974,62977,62979,62981,62983],{"class":71,"line":2977},[69,62975,62976],{"class":90},"      margin-right",[69,62978,94],{"class":86},[69,62980,2087],{"class":90},[69,62982,100],{"class":82},[69,62984,130],{"class":86},[69,62986,62987],{"class":71,"line":2994},[69,62988,3431],{"class":86},[69,62990,62991],{"class":71,"line":2999},[69,62992,3644],{"emptyLinePlaceholder":1325},[69,62994,62995,62997,63000],{"class":71,"line":3004},[69,62996,62830],{"class":109},[69,62998,62999],{"class":348}," textarea",[69,63001,113],{"class":86},[69,63003,63004,63007,63009,63011],{"class":71,"line":3009},[69,63005,63006],{"class":90},"      outline",[69,63008,94],{"class":86},[69,63010,55964],{"class":90},[69,63012,130],{"class":86},[69,63014,63015,63018,63020,63023],{"class":71,"line":3023},[69,63016,63017],{"class":90},"      border-color",[69,63019,94],{"class":86},[69,63021,63022],{"class":90},"transparent",[69,63024,130],{"class":86},[69,63026,63027,63030,63032,63034],{"class":71,"line":3028},[69,63028,63029],{"class":90},"      resize",[69,63031,94],{"class":86},[69,63033,55964],{"class":90},[69,63035,130],{"class":86},[69,63037,63038,63040,63042,63045],{"class":71,"line":3821},[69,63039,62947],{"class":90},[69,63041,94],{"class":86},[69,63043,63044],{"class":90},"#f5f5f5",[69,63046,130],{"class":86},[69,63048,63049,63051,63053,63055,63057],{"class":71,"line":3835},[69,63050,56361],{"class":90},[69,63052,94],{"class":86},[69,63054,1684],{"class":90},[69,63056,100],{"class":82},[69,63058,130],{"class":86},[69,63060,63061,63064,63066,63068],{"class":71,"line":3843},[69,63062,63063],{"class":90},"      flex",[69,63065,94],{"class":86},[69,63067,1609],{"class":90},[69,63069,130],{"class":86},[69,63071,63072,63074,63076,63078,63080],{"class":71,"line":3848},[69,63073,55922],{"class":90},[69,63075,94],{"class":86},[69,63077,390],{"class":90},[69,63079,100],{"class":82},[69,63081,130],{"class":86},[69,63083,63084,63087,63089,63091,63094,63096],{"class":71,"line":3854},[69,63085,63086],{"class":90},"      transition",[69,63088,94],{"class":86},[69,63090,29357],{"class":90},[69,63092,63093],{"class":90}," 0.5",[69,63095,2082],{"class":82},[69,63097,130],{"class":86},[69,63099,63100,63102,63104,63106,63108],{"class":71,"line":3860},[69,63101,56012],{"class":90},[69,63103,94],{"class":86},[69,63105,2337],{"class":90},[69,63107,100],{"class":82},[69,63109,130],{"class":86},[69,63111,63112],{"class":71,"line":3865},[69,63113,3431],{"class":86},[69,63115,63116],{"class":71,"line":9190},[69,63117,3644],{"emptyLinePlaceholder":1325},[69,63119,63120,63122,63124,63127],{"class":71,"line":9214},[69,63121,62830],{"class":109},[69,63123,62999],{"class":348},[69,63125,63126],{"class":109},":focus",[69,63128,113],{"class":86},[69,63130,63131,63133,63135,63138],{"class":71,"line":9219},[69,63132,63017],{"class":90},[69,63134,94],{"class":86},[69,63136,63137],{"class":90},"#e4e4e4",[69,63139,130],{"class":86},[69,63141,63142,63144,63146,63148],{"class":71,"line":9225},[69,63143,62947],{"class":90},[69,63145,94],{"class":86},[69,63147,62068],{"class":90},[69,63149,130],{"class":86},[69,63151,63152,63154,63156,63158,63160],{"class":71,"line":9252},[69,63153,56012],{"class":90},[69,63155,94],{"class":86},[69,63157,2043],{"class":90},[69,63159,100],{"class":82},[69,63161,130],{"class":86},[69,63163,63164],{"class":71,"line":9257},[69,63165,3431],{"class":86},[69,63167,63168],{"class":71,"line":9263},[69,63169,3644],{"emptyLinePlaceholder":1325},[69,63171,63172,63174,63176],{"class":71,"line":9275},[69,63173,62830],{"class":109},[69,63175,58693],{"class":348},[69,63177,113],{"class":86},[69,63179,63180,63182,63184,63187],{"class":71,"line":9287},[69,63181,62947],{"class":90},[69,63183,94],{"class":86},[69,63185,63186],{"class":90},"#00aeec",[69,63188,130],{"class":86},[69,63190,63191,63193,63195,63197],{"class":71,"line":9299},[69,63192,58643],{"class":90},[69,63194,94],{"class":86},[69,63196,62068],{"class":90},[69,63198,130],{"class":86},[69,63200,63201,63204,63206,63208],{"class":71,"line":10958},[69,63202,63203],{"class":90},"      border",[69,63205,94],{"class":86},[69,63207,55964],{"class":90},[69,63209,130],{"class":86},[69,63211,63212,63214,63216,63218,63220],{"class":71,"line":10983},[69,63213,56361],{"class":90},[69,63215,94],{"class":86},[69,63217,1684],{"class":90},[69,63219,100],{"class":82},[69,63221,130],{"class":86},[69,63223,63224,63227,63229,63231,63233],{"class":71,"line":11006},[69,63225,63226],{"class":90},"      margin-left",[69,63228,94],{"class":86},[69,63230,390],{"class":90},[69,63232,100],{"class":82},[69,63234,130],{"class":86},[69,63236,63237,63239,63241,63243,63245],{"class":71,"line":11030},[69,63238,55998],{"class":90},[69,63240,94],{"class":86},[69,63242,1745],{"class":90},[69,63244,100],{"class":82},[69,63246,130],{"class":86},[69,63248,63249,63252,63254,63257],{"class":71,"line":11035},[69,63250,63251],{"class":90},"      cursor",[69,63253,94],{"class":86},[69,63255,63256],{"class":90},"pointer",[69,63258,130],{"class":86},[69,63260,63261],{"class":71,"line":11040},[69,63262,3431],{"class":86},[69,63264,63265],{"class":71,"line":11045},[69,63266,3644],{"emptyLinePlaceholder":1325},[69,63268,63269,63271,63274],{"class":71,"line":11054},[69,63270,62830],{"class":109},[69,63272,63273],{"class":109}," .total",[69,63275,113],{"class":86},[69,63277,63278,63280,63282,63284,63286],{"class":71,"line":11059},[69,63279,62976],{"class":90},[69,63281,94],{"class":86},[69,63283,1999],{"class":90},[69,63285,100],{"class":82},[69,63287,130],{"class":86},[69,63289,63290,63292,63294,63297],{"class":71,"line":11065},[69,63291,58643],{"class":90},[69,63293,94],{"class":86},[69,63295,63296],{"class":90},"#999",[69,63298,130],{"class":86},[69,63300,63301,63304,63306,63308,63310],{"class":71,"line":11086},[69,63302,63303],{"class":90},"      margin-top",[69,63305,94],{"class":86},[69,63307,1709],{"class":90},[69,63309,100],{"class":82},[69,63311,130],{"class":86},[69,63313,63314,63317,63319,63321],{"class":71,"line":11092},[69,63315,63316],{"class":90},"      opacity",[69,63318,94],{"class":86},[69,63320,1583],{"class":90},[69,63322,130],{"class":86},[69,63324,63325,63327,63329,63331,63333,63335],{"class":71,"line":11106},[69,63326,63086],{"class":90},[69,63328,94],{"class":86},[69,63330,29357],{"class":90},[69,63332,63093],{"class":90},[69,63334,2082],{"class":82},[69,63336,130],{"class":86},[69,63338,63339],{"class":71,"line":11112},[69,63340,3431],{"class":86},[69,63342,63343],{"class":71,"line":11139},[69,63344,3644],{"emptyLinePlaceholder":1325},[69,63346,63347,63350],{"class":71,"line":11148},[69,63348,63349],{"class":109},"    .list",[69,63351,113],{"class":86},[69,63353,63354,63356,63358,63360,63362],{"class":71,"line":11154},[69,63355,62837],{"class":90},[69,63357,94],{"class":86},[69,63359,5231],{"class":90},[69,63361,100],{"class":82},[69,63363,130],{"class":86},[69,63365,63366,63368,63370,63372,63374],{"class":71,"line":11162},[69,63367,62850],{"class":90},[69,63369,94],{"class":86},[69,63371,62855],{"class":90},[69,63373,100],{"class":82},[69,63375,130],{"class":86},[69,63377,63378,63380,63382,63384],{"class":71,"line":11167},[69,63379,56236],{"class":90},[69,63381,94],{"class":86},[69,63383,52709],{"class":90},[69,63385,130],{"class":86},[69,63387,63388],{"class":71,"line":17843},[69,63389,3431],{"class":86},[69,63391,63392],{"class":71,"line":17849},[69,63393,3644],{"emptyLinePlaceholder":1325},[69,63395,63396,63398,63401],{"class":71,"line":17872},[69,63397,63349],{"class":109},[69,63399,63400],{"class":109}," .item",[69,63402,113],{"class":86},[69,63404,63405,63407,63409,63411,63413],{"class":71,"line":17878},[69,63406,55998],{"class":90},[69,63408,94],{"class":86},[69,63410,124],{"class":90},[69,63412,127],{"class":82},[69,63414,130],{"class":86},[69,63416,63417,63419,63421,63423],{"class":71,"line":17901},[69,63418,56236],{"class":90},[69,63420,94],{"class":86},[69,63422,52709],{"class":90},[69,63424,130],{"class":86},[69,63426,63427],{"class":71,"line":17915},[69,63428,3431],{"class":86},[69,63430,63431],{"class":71,"line":17935},[69,63432,3644],{"emptyLinePlaceholder":1325},[69,63434,63435,63437,63439,63442],{"class":71,"line":17941},[69,63436,63349],{"class":109},[69,63438,63400],{"class":109},[69,63440,63441],{"class":109}," .info",[69,63443,113],{"class":86},[69,63445,63446,63448,63450,63452],{"class":71,"line":17952},[69,63447,63063],{"class":90},[69,63449,94],{"class":86},[69,63451,1609],{"class":90},[69,63453,130],{"class":86},[69,63455,63456,63459,63461,63463,63465,63468,63471],{"class":71,"line":17975},[69,63457,63458],{"class":90},"      border-bottom",[69,63460,94],{"class":86},[69,63462,1609],{"class":90},[69,63464,100],{"class":82},[69,63466,63467],{"class":90}," dashed",[69,63469,63470],{"class":90}," #e4e4e4",[69,63472,130],{"class":86},[69,63474,63475,63478,63480,63482,63484],{"class":71,"line":17997},[69,63476,63477],{"class":90},"      padding-bottom",[69,63479,94],{"class":86},[69,63481,390],{"class":90},[69,63483,100],{"class":82},[69,63485,130],{"class":86},[69,63487,63488],{"class":71,"line":18002},[69,63489,3431],{"class":86},[69,63491,63492],{"class":71,"line":18008},[69,63493,3644],{"emptyLinePlaceholder":1325},[69,63495,63496,63498,63500,63502],{"class":71,"line":18022},[69,63497,63349],{"class":109},[69,63499,63400],{"class":109},[69,63501,8067],{"class":348},[69,63503,113],{"class":86},[69,63505,63506,63508,63510,63512],{"class":71,"line":18035},[69,63507,55933],{"class":90},[69,63509,94],{"class":86},[69,63511,1583],{"class":90},[69,63513,130],{"class":86},[69,63515,63516],{"class":71,"line":18040},[69,63517,3431],{"class":86},[69,63519,63520],{"class":71,"line":18054},[69,63521,3644],{"emptyLinePlaceholder":1325},[69,63523,63524,63526,63528,63531],{"class":71,"line":18059},[69,63525,63349],{"class":109},[69,63527,63400],{"class":109},[69,63529,63530],{"class":109}," .name",[69,63532,113],{"class":86},[69,63534,63535,63537,63539,63542],{"class":71,"line":18065},[69,63536,58643],{"class":90},[69,63538,94],{"class":86},[69,63540,63541],{"class":90},"#FB7299",[69,63543,130],{"class":86},[69,63545,63546,63548,63550,63552,63554],{"class":71,"line":18070},[69,63547,56149],{"class":90},[69,63549,94],{"class":86},[69,63551,1937],{"class":90},[69,63553,100],{"class":82},[69,63555,130],{"class":86},[69,63557,63558,63561,63563,63566],{"class":71,"line":18084},[69,63559,63560],{"class":90},"      font-weight",[69,63562,94],{"class":86},[69,63564,63565],{"class":90},"bold",[69,63567,130],{"class":86},[69,63569,63570],{"class":71,"line":18089},[69,63571,3431],{"class":86},[69,63573,63574],{"class":71,"line":18094},[69,63575,3644],{"emptyLinePlaceholder":1325},[69,63577,63578,63580,63582,63585],{"class":71,"line":18108},[69,63579,63349],{"class":109},[69,63581,63400],{"class":109},[69,63583,63584],{"class":109}," .text",[69,63586,113],{"class":86},[69,63588,63589,63591,63593,63596],{"class":71,"line":18120},[69,63590,58643],{"class":90},[69,63592,94],{"class":86},[69,63594,63595],{"class":90},"#333",[69,63597,130],{"class":86},[69,63599,63600,63602,63604,63606,63608,63610],{"class":71,"line":18125},[69,63601,55922],{"class":90},[69,63603,94],{"class":86},[69,63605,390],{"class":90},[69,63607,100],{"class":82},[69,63609,5337],{"class":90},[69,63611,130],{"class":86},[69,63613,63614],{"class":71,"line":18138},[69,63615,3431],{"class":86},[69,63617,63618],{"class":71,"line":18143},[69,63619,3644],{"emptyLinePlaceholder":1325},[69,63621,63622,63624,63626,63629],{"class":71,"line":18148},[69,63623,63349],{"class":109},[69,63625,63400],{"class":109},[69,63627,63628],{"class":109}," .time",[69,63630,113],{"class":86},[69,63632,63633,63635,63637,63639],{"class":71,"line":18153},[69,63634,58643],{"class":90},[69,63636,94],{"class":86},[69,63638,63296],{"class":90},[69,63640,130],{"class":86},[69,63642,63643,63645,63647,63649,63651],{"class":71,"line":18166},[69,63644,56149],{"class":90},[69,63646,94],{"class":86},[69,63648,1886],{"class":90},[69,63650,100],{"class":82},[69,63652,130],{"class":86},[69,63654,63655],{"class":71,"line":18171},[69,63656,3431],{"class":86},[69,63658,63659,63661,63663],{"class":71,"line":33869},[69,63660,53645],{"class":86},[69,63662,1297],{"class":348},[69,63664,1026],{"class":86},[69,63666,63667,63669,63671],{"class":71,"line":33875},[69,63668,1036],{"class":86},[69,63670,52567],{"class":348},[69,63672,1026],{"class":86},[69,63674,63675],{"class":71,"line":33881},[69,63676,3644],{"emptyLinePlaceholder":1325},[69,63678,63679,63681,63683],{"class":71,"line":33887},[69,63680,1011],{"class":86},[69,63682,680],{"class":348},[69,63684,1026],{"class":86},[69,63686,63687,63689,63691,63693,63695,63698],{"class":71,"line":33893},[69,63688,53372],{"class":86},[69,63690,442],{"class":348},[69,63692,1016],{"class":109},[69,63694,1019],{"class":86},[69,63696,63697],{"class":1022},"\"wrapper\"",[69,63699,1026],{"class":86},[69,63701,63702,63704,63706,63708,63710,63713,63715,63717],{"class":71,"line":33904},[69,63703,52574],{"class":86},[69,63705,1830],{"class":348},[69,63707,1016],{"class":109},[69,63709,1019],{"class":86},[69,63711,63712],{"class":1022},"\"avatar\"",[69,63714,56541],{"class":86},[69,63716,1830],{"class":348},[69,63718,1026],{"class":86},[69,63720,63721,63723,63725,63727,63729,63732,63734,63736,63739,63741,63743,63745,63748,63750,63753,63755,63757],{"class":71,"line":33910},[69,63722,52574],{"class":86},[69,63724,55515],{"class":348},[69,63726,16199],{"class":109},[69,63728,1019],{"class":86},[69,63730,63731],{"class":1022},"\"tx\"",[69,63733,62246],{"class":109},[69,63735,1019],{"class":86},[69,63737,63738],{"class":1022},"\"发一条友善的评论\"",[69,63740,55538],{"class":109},[69,63742,1019],{"class":86},[69,63744,4945],{"class":1022},[69,63746,63747],{"class":109}," maxlength",[69,63749,1019],{"class":86},[69,63751,63752],{"class":1022},"\"200\"",[69,63754,56541],{"class":86},[69,63756,55515],{"class":348},[69,63758,1026],{"class":86},[69,63760,63761,63763,63765,63768,63770],{"class":71,"line":33930},[69,63762,52574],{"class":86},[69,63764,55114],{"class":348},[69,63766,63767],{"class":86},">发布\u003C\u002F",[69,63769,55114],{"class":348},[69,63771,1026],{"class":86},[69,63773,63774,63776,63778],{"class":71,"line":33936},[69,63775,53645],{"class":86},[69,63777,442],{"class":348},[69,63779,1026],{"class":86},[69,63781,63782,63784,63786,63788,63790,63792],{"class":71,"line":33947},[69,63783,53372],{"class":86},[69,63785,442],{"class":348},[69,63787,1016],{"class":109},[69,63789,1019],{"class":86},[69,63791,63697],{"class":1022},[69,63793,1026],{"class":86},[69,63795,63796,63798,63800,63802,63804,63807,63810,63812],{"class":71,"line":33953},[69,63797,52574],{"class":86},[69,63799,69],{"class":348},[69,63801,1016],{"class":109},[69,63803,1019],{"class":86},[69,63805,63806],{"class":1022},"\"total\"",[69,63808,63809],{"class":86},">0\u002F200字\u003C\u002F",[69,63811,69],{"class":348},[69,63813,1026],{"class":86},[69,63815,63816,63818,63820],{"class":71,"line":33959},[69,63817,53645],{"class":86},[69,63819,442],{"class":348},[69,63821,1026],{"class":86},[69,63823,63824,63826,63828,63830,63832,63835],{"class":71,"line":33965},[69,63825,53372],{"class":86},[69,63827,442],{"class":348},[69,63829,1016],{"class":109},[69,63831,1019],{"class":86},[69,63833,63834],{"class":1022},"\"list\"",[69,63836,1026],{"class":86},[69,63838,63839,63841,63843,63845,63847,63850,63853,63855,63858],{"class":71,"line":33971},[69,63840,52574],{"class":86},[69,63842,442],{"class":348},[69,63844,1016],{"class":109},[69,63846,1019],{"class":86},[69,63848,63849],{"class":1022},"\"item\"",[69,63851,63852],{"class":109}," style",[69,63854,1019],{"class":86},[69,63856,63857],{"class":1022},"\"display: none;\"",[69,63859,1026],{"class":86},[69,63861,63862,63864,63866,63868,63870,63872,63874,63876],{"class":71,"line":33977},[69,63863,56461],{"class":86},[69,63865,1830],{"class":348},[69,63867,1016],{"class":109},[69,63869,1019],{"class":86},[69,63871,63712],{"class":1022},[69,63873,56541],{"class":86},[69,63875,1830],{"class":348},[69,63877,1026],{"class":86},[69,63879,63880,63882,63884,63886,63888,63891],{"class":71,"line":33983},[69,63881,56461],{"class":86},[69,63883,442],{"class":348},[69,63885,1016],{"class":109},[69,63887,1019],{"class":86},[69,63889,63890],{"class":1022},"\"info\"",[69,63892,1026],{"class":86},[69,63894,63895,63897,63899,63901,63903,63906,63909,63911],{"class":71,"line":33989},[69,63896,56529],{"class":86},[69,63898,29],{"class":348},[69,63900,1016],{"class":109},[69,63902,1019],{"class":86},[69,63904,63905],{"class":1022},"\"name\"",[69,63907,63908],{"class":86},">清风徐来\u003C\u002F",[69,63910,29],{"class":348},[69,63912,1026],{"class":86},[69,63914,63915,63917,63919,63921,63923,63926,63929,63931],{"class":71,"line":34009},[69,63916,56529],{"class":86},[69,63918,29],{"class":348},[69,63920,1016],{"class":109},[69,63922,1019],{"class":86},[69,63924,63925],{"class":1022},"\"text\"",[69,63927,63928],{"class":86},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[69,63930,29],{"class":348},[69,63932,1026],{"class":86},[69,63934,63935,63937,63939,63941,63943,63946,63949,63951],{"class":71,"line":34015},[69,63936,56529],{"class":86},[69,63938,29],{"class":348},[69,63940,1016],{"class":109},[69,63942,1019],{"class":86},[69,63944,63945],{"class":1022},"\"time\"",[69,63947,63948],{"class":86},">2022-10-10 20:29:21\u003C\u002F",[69,63950,29],{"class":348},[69,63952,1026],{"class":86},[69,63954,63955,63957,63959],{"class":71,"line":34031},[69,63956,56634],{"class":86},[69,63958,442],{"class":348},[69,63960,1026],{"class":86},[69,63962,63963,63965,63967],{"class":71,"line":34037},[69,63964,53006],{"class":86},[69,63966,442],{"class":348},[69,63968,1026],{"class":86},[69,63970,63971,63973,63975],{"class":71,"line":34051},[69,63972,53645],{"class":86},[69,63974,442],{"class":348},[69,63976,1026],{"class":86},[69,63978,63979,63981,63983],{"class":71,"line":34057},[69,63980,53372],{"class":86},[69,63982,53041],{"class":348},[69,63984,1026],{"class":86},[69,63986,63987,63989,63992,63994,63996,63998,64000,64003],{"class":71,"line":34072},[69,63988,12463],{"class":82},[69,63990,63991],{"class":90}," tx",[69,63993,14805],{"class":82},[69,63995,55623],{"class":86},[69,63997,55626],{"class":109},[69,63999,1398],{"class":86},[69,64001,64002],{"class":1022},"'#tx'",[69,64004,1404],{"class":86},[69,64006,64007,64009,64012,64014,64016,64018,64020,64023],{"class":71,"line":34078},[69,64008,12463],{"class":82},[69,64010,64011],{"class":90}," total",[69,64013,14805],{"class":82},[69,64015,55623],{"class":86},[69,64017,55626],{"class":109},[69,64019,1398],{"class":86},[69,64021,64022],{"class":1022},"'.total'",[69,64024,1404],{"class":86},[69,64026,64027],{"class":71,"line":34087},[69,64028,64029],{"class":75},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[69,64031,64032,64035,64037,64039,64041,64043,64045],{"class":71,"line":34093},[69,64033,64034],{"class":86},"    tx.",[69,64036,59039],{"class":109},[69,64038,1398],{"class":86},[69,64040,62553],{"class":1022},[69,64042,13677],{"class":86},[69,64044,55676],{"class":82},[69,64046,55679],{"class":86},[69,64048,64049,64052,64054],{"class":71,"line":34102},[69,64050,64051],{"class":86},"      total.style.opacity ",[69,64053,1019],{"class":82},[69,64055,56926],{"class":90},[69,64057,64058],{"class":71,"line":34108},[69,64059,34697],{"class":86},[69,64061,64062],{"class":71,"line":34114},[69,64063,64064],{"class":75},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[69,64066,64067,64069,64071,64073,64075,64077,64079],{"class":71,"line":34123},[69,64068,64034],{"class":86},[69,64070,59039],{"class":109},[69,64072,1398],{"class":86},[69,64074,62614],{"class":1022},[69,64076,13677],{"class":86},[69,64078,55676],{"class":82},[69,64080,55679],{"class":86},[69,64082,64083,64085,64087],{"class":71,"line":34129},[69,64084,64051],{"class":86},[69,64086,1019],{"class":82},[69,64088,48569],{"class":90},[69,64090,64091],{"class":71,"line":34140},[69,64092,34697],{"class":86},[69,64094,64095],{"class":71,"line":34146},[69,64096,64097],{"class":75},"    \u002F\u002F 3. 检测用户输入\n",[69,64099,64100,64102,64104,64106,64109,64111,64113],{"class":71,"line":34165},[69,64101,64034],{"class":86},[69,64103,59039],{"class":109},[69,64105,1398],{"class":86},[69,64107,64108],{"class":1022},"'input'",[69,64110,13677],{"class":86},[69,64112,55676],{"class":82},[69,64114,55679],{"class":86},[69,64116,64117],{"class":71,"line":34171},[69,64118,64119],{"class":75},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[69,64121,64122,64125,64127,64130,64133,64135,64138,64140,64142],{"class":71,"line":34182},[69,64123,64124],{"class":86},"      total.innerHTML ",[69,64126,1019],{"class":82},[69,64128,64129],{"class":1022}," `${",[69,64131,64132],{"class":86},"tx",[69,64134,1946],{"class":1022},[69,64136,64137],{"class":86},"value",[69,64139,1946],{"class":1022},[69,64141,53196],{"class":90},[69,64143,64144],{"class":1022},"}\u002F200字`\n",[69,64146,64147],{"class":71,"line":34188},[69,64148,34697],{"class":86},[69,64150,64151],{"class":71,"line":34208},[69,64152,3644],{"emptyLinePlaceholder":1325},[69,64154,64155],{"class":71,"line":34224},[69,64156,64157],{"class":75},"    \u002F\u002F const str = 'andy'\n",[69,64159,64160],{"class":71,"line":34230},[69,64161,64162],{"class":75},"    \u002F\u002F console.log(str.length)\n",[69,64164,64165,64167,64169],{"class":71,"line":34244},[69,64166,53645],{"class":86},[69,64168,53041],{"class":348},[69,64170,1026],{"class":86},[69,64172,64173,64175,64177],{"class":71,"line":34250},[69,64174,1036],{"class":86},[69,64176,680],{"class":348},[69,64178,1026],{"class":86},[69,64180,64181],{"class":71,"line":34256},[69,64182,3644],{"emptyLinePlaceholder":1325},[69,64184,64185,64187,64189],{"class":71,"line":34267},[69,64186,1036],{"class":86},[69,64188,349],{"class":348},[69,64190,1026],{"class":86},[23237,64192,64194],{"id":64193},"_3254-change事件","3.2.5.4 change事件",[29,64196,64197],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[29,64199,64200],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[29,64202,64203],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[59,64205,64207],{"className":51869,"code":64206,"language":349,"meta":64,"style":64},"\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",[66,64208,64209,64219,64233,64237,64245,64259,64279,64291,64299,64303,64311,64325,64333,64351,64369,64381,64385,64393,64401,64405],{"__ignoreMap":64},[69,64210,64211,64213,64215,64217],{"class":71,"line":72},[69,64212,52532],{"class":86},[69,64214,52535],{"class":348},[69,64216,52538],{"class":109},[69,64218,1026],{"class":86},[69,64220,64221,64223,64225,64227,64229,64231],{"class":71,"line":79},[69,64222,1011],{"class":86},[69,64224,349],{"class":348},[69,64226,52549],{"class":109},[69,64228,1019],{"class":86},[69,64230,52554],{"class":1022},[69,64232,1026],{"class":86},[69,64234,64235],{"class":71,"line":106},[69,64236,3644],{"emptyLinePlaceholder":1325},[69,64238,64239,64241,64243],{"class":71,"line":116},[69,64240,1011],{"class":86},[69,64242,52567],{"class":348},[69,64244,1026],{"class":86},[69,64246,64247,64249,64251,64253,64255,64257],{"class":71,"line":133},[69,64248,53372],{"class":86},[69,64250,52577],{"class":348},[69,64252,52580],{"class":109},[69,64254,1019],{"class":86},[69,64256,52585],{"class":1022},[69,64258,1026],{"class":86},[69,64260,64261,64263,64265,64267,64269,64271,64273,64275,64277],{"class":71,"line":139},[69,64262,53372],{"class":86},[69,64264,52577],{"class":348},[69,64266,16160],{"class":109},[69,64268,1019],{"class":86},[69,64270,52624],{"class":1022},[69,64272,52604],{"class":109},[69,64274,1019],{"class":86},[69,64276,52631],{"class":1022},[69,64278,1026],{"class":86},[69,64280,64281,64283,64285,64287,64289],{"class":71,"line":401},[69,64282,53372],{"class":86},[69,64284,52640],{"class":348},[69,64286,52643],{"class":86},[69,64288,52640],{"class":348},[69,64290,1026],{"class":86},[69,64292,64293,64295,64297],{"class":71,"line":470},[69,64294,1036],{"class":86},[69,64296,52567],{"class":348},[69,64298,1026],{"class":86},[69,64300,64301],{"class":71,"line":475},[69,64302,3644],{"emptyLinePlaceholder":1325},[69,64304,64305,64307,64309],{"class":71,"line":482},[69,64306,1011],{"class":86},[69,64308,680],{"class":348},[69,64310,1026],{"class":86},[69,64312,64313,64315,64317,64319,64321,64323],{"class":71,"line":497},[69,64314,53372],{"class":86},[69,64316,55048],{"class":348},[69,64318,55051],{"class":109},[69,64320,1019],{"class":86},[69,64322,63925],{"class":1022},[69,64324,1026],{"class":86},[69,64326,64327,64329,64331],{"class":71,"line":502},[69,64328,53372],{"class":86},[69,64330,53041],{"class":348},[69,64332,1026],{"class":86},[69,64334,64335,64337,64339,64341,64343,64345,64347,64349],{"class":71,"line":509},[69,64336,12463],{"class":82},[69,64338,61831],{"class":90},[69,64340,14805],{"class":82},[69,64342,55623],{"class":86},[69,64344,55626],{"class":109},[69,64346,1398],{"class":86},[69,64348,64108],{"class":1022},[69,64350,1404],{"class":86},[69,64352,64353,64356,64358,64360,64363,64365,64367],{"class":71,"line":524},[69,64354,64355],{"class":86},"    input.",[69,64357,59039],{"class":109},[69,64359,1398],{"class":86},[69,64361,64362],{"class":1022},"'change'",[69,64364,13677],{"class":86},[69,64366,55676],{"class":82},[69,64368,55679],{"class":86},[69,64370,64371,64373,64375,64377,64379],{"class":71,"line":2888},[69,64372,59470],{"class":86},[69,64374,59473],{"class":109},[69,64376,1398],{"class":86},[69,64378,1981],{"class":90},[69,64380,1404],{"class":86},[69,64382,64383],{"class":71,"line":2893},[69,64384,34697],{"class":86},[69,64386,64387,64389,64391],{"class":71,"line":2899},[69,64388,53645],{"class":86},[69,64390,53041],{"class":348},[69,64392,1026],{"class":86},[69,64394,64395,64397,64399],{"class":71,"line":2919},[69,64396,1036],{"class":86},[69,64398,680],{"class":348},[69,64400,1026],{"class":86},[69,64402,64403],{"class":71,"line":2924},[69,64404,3644],{"emptyLinePlaceholder":1325},[69,64406,64407,64409,64411],{"class":71,"line":2938},[69,64408,1036],{"class":86},[69,64410,349],{"class":348},[69,64412,1026],{"class":86},[29,64414,64415],{},"总结：内容发生改变才回去触发",[19,64417,64419],{"id":64418},"_326-事件对象","3.2.6 事件对象",[23237,64421,64423],{"id":64422},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[29,64425,64426],{},[24,64427],{"alt":64,"src":64428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[29,64430,64431],{},[24,64432],{"alt":64,"src":64433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[29,64435,64436],{},"点击一次，就输出了事件对象，它是个对象",[29,64438,64439],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[29,64441,64442],{},[24,64443],{"alt":64,"src":64444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23237,64446,64448],{"id":64447},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[29,64450,64451],{},[24,64452],{"alt":64,"src":64453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[29,64455,64456],{},"实现按特殊字符才是实现打印输出效果：",[59,64458,64460],{"className":54295,"code":64459,"language":54297,"meta":64,"style":64},"\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",[66,64461,64462,64470,64475,64489,64497,64502,64507,64512,64517,64522,64527,64532,64537,64542,64546,64550,64558],{"__ignoreMap":64},[69,64463,64464,64466,64468],{"class":71,"line":72},[69,64465,1011],{"class":86},[69,64467,680],{"class":348},[69,64469,1026],{"class":86},[69,64471,64472],{"class":71,"line":79},[69,64473,64474],{"class":75},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[69,64476,64477,64479,64481,64483,64485,64487],{"class":71,"line":106},[69,64478,53372],{"class":86},[69,64480,55048],{"class":348},[69,64482,55051],{"class":109},[69,64484,1019],{"class":86},[69,64486,63925],{"class":1022},[69,64488,1026],{"class":86},[69,64490,64491,64493,64495],{"class":71,"line":116},[69,64492,53372],{"class":86},[69,64494,53041],{"class":348},[69,64496,1026],{"class":86},[69,64498,64499],{"class":71,"line":133},[69,64500,64501],{"class":86},"    \u002F\u002F const btn = document.querySelector('button')\n",[69,64503,64504],{"class":71,"line":139},[69,64505,64506],{"class":86},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[69,64508,64509],{"class":71,"line":401},[69,64510,64511],{"class":86},"    \u002F\u002F   console.log(e);\n",[69,64513,64514],{"class":71,"line":470},[69,64515,64516],{"class":86},"    \u002F\u002F })\n",[69,64518,64519],{"class":71,"line":475},[69,64520,64521],{"class":86},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[69,64523,64524],{"class":71,"line":482},[69,64525,64526],{"class":86},"    const input = document.querySelector('input')\n",[69,64528,64529],{"class":71,"line":497},[69,64530,64531],{"class":86},"    input.addEventListener('keyup', function (e) {\n",[69,64533,64534],{"class":71,"line":502},[69,64535,64536],{"class":86},"      if (e.key === 'Enter') {\n",[69,64538,64539],{"class":71,"line":509},[69,64540,64541],{"class":86},"        console.log('我按下了回车键')\n",[69,64543,64544],{"class":71,"line":524},[69,64545,53626],{"class":86},[69,64547,64548],{"class":71,"line":2888},[69,64549,34697],{"class":86},[69,64551,64552,64554,64556],{"class":71,"line":2893},[69,64553,53645],{"class":86},[69,64555,53041],{"class":348},[69,64557,1026],{"class":86},[69,64559,64560,64562,64564],{"class":71,"line":2899},[69,64561,1036],{"class":86},[69,64563,680],{"class":348},[69,64565,1026],{"class":86},[23237,64567,64569],{"id":64568},"_3263-trim方法","3.2.6.3 trim方法",[29,64571,64572],{},[24,64573],{"alt":64,"src":64574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[29,64576,64577],{},[24,64578],{"alt":64,"src":64579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[29,64581,64582],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[29,64584,64585],{},"str.trim()",[19,64587,64589],{"id":64588},"_327-环境对象","3.2.7 环境对象",[29,64591,64592],{},[24,64593],{"alt":64,"src":64594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[29,64596,64597],{},[24,64598],{"alt":64,"src":64599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[29,64601,64602],{},[24,64603],{"alt":64,"src":64604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[29,64606,64607],{},"实际函数调用是window.fn()",[29,64609,64610],{},"普通函数里面this指向的是window",[162,64612,64613,64616,64619],{},[40,64614,64615],{},"在普通函数下，this指向的是window",[40,64617,64618],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[40,64620,64621],{},"箭头函数没有this",[29,64623,64624],{},"粗略记法就是：谁调用，this就指向谁",[29,64626,64627],{},[24,64628],{"alt":64,"src":64629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[29,64631,64632],{},[24,64633],{"alt":64,"src":64634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[29,64636,64637],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[29,64639,64640],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[59,64642,64644],{"className":54295,"code":64643,"language":54297,"meta":64,"style":64},"\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",[66,64645,64646,64654,64666,64674,64679,64684,64689,64694,64698,64706],{"__ignoreMap":64},[69,64647,64648,64650,64652],{"class":71,"line":72},[69,64649,1011],{"class":86},[69,64651,680],{"class":348},[69,64653,1026],{"class":86},[69,64655,64656,64658,64660,64662,64664],{"class":71,"line":79},[69,64657,53372],{"class":86},[69,64659,55114],{"class":348},[69,64661,55120],{"class":86},[69,64663,55114],{"class":348},[69,64665,1026],{"class":86},[69,64667,64668,64670,64672],{"class":71,"line":106},[69,64669,53372],{"class":86},[69,64671,53041],{"class":348},[69,64673,1026],{"class":86},[69,64675,64676],{"class":71,"line":116},[69,64677,64678],{"class":86},"    const button = document.querySelector('button')\n",[69,64680,64681],{"class":71,"line":133},[69,64682,64683],{"class":86},"    button.addEventListener('click', function () {\n",[69,64685,64686],{"class":71,"line":139},[69,64687,64688],{"class":86},"      \u002F\u002F console.log(this);\n",[69,64690,64691],{"class":71,"line":401},[69,64692,64693],{"class":86},"      this.style.color = 'pink'\n",[69,64695,64696],{"class":71,"line":470},[69,64697,34697],{"class":86},[69,64699,64700,64702,64704],{"class":71,"line":475},[69,64701,53645],{"class":86},[69,64703,53041],{"class":348},[69,64705,1026],{"class":86},[69,64707,64708,64710,64712],{"class":71,"line":482},[69,64709,1036],{"class":86},[69,64711,680],{"class":348},[69,64713,1026],{"class":86},[19,64715,64717],{"id":64716},"_328-回调函数","3.2.8 回调函数",[29,64719,64720],{},[24,64721],{"alt":64,"src":64722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[29,64724,64725],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[29,64727,12574],{},[162,64729,64730,64733,64736],{},[40,64731,64732],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[40,64734,64735],{},"回调函数本质还是函数，只不过把它当成参数使用",[40,64737,64738],{},"使用匿名函数做为回调函数比较常见",[19,64740,64742],{"id":64741},"_329-tab栏切换","3.2.9 tab栏切换",[29,64744,64745],{},[24,64746],{"alt":64,"src":64747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[59,64749,64751],{"className":51869,"code":64750,"language":349,"meta":64,"style":64},"\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",[66,64752,64753,64763,64777,64781,64789,64803,64823,64843,64856,64864,64870,64880,64890,64894,64898,64905,64918,64931,64943,64959,64963,64967,64974,64986,64998,65010,65020,65030,65034,65038,65047,65059,65070,65082,65086,65090,65098,65108,65118,65128,65132,65136,65146,65160,65172,65176,65180,65192,65203,65220,65230,65234,65238,65253,65264,65274,65278,65282,65289,65304,65308,65312,65320,65330,65334,65338,65347,65357,65361,65369,65377,65381,65389,65404,65419,65432,65440,65474,65501,65528,65555,65582,65590,65598,65613,65650,65685,65720,65755,65790,65798,65806,65814,65819,65824,65844,65849,65878,65883,65888,65906,65911,65916,65921,65943,65948,65964,65968,65973,65978,65999,66004,66033,66037,66042,66046,66054,66062,66066],{"__ignoreMap":64},[69,64754,64755,64757,64759,64761],{"class":71,"line":72},[69,64756,52532],{"class":86},[69,64758,52535],{"class":348},[69,64760,52538],{"class":109},[69,64762,1026],{"class":86},[69,64764,64765,64767,64769,64771,64773,64775],{"class":71,"line":79},[69,64766,1011],{"class":86},[69,64768,349],{"class":348},[69,64770,52549],{"class":109},[69,64772,1019],{"class":86},[69,64774,52554],{"class":1022},[69,64776,1026],{"class":86},[69,64778,64779],{"class":71,"line":106},[69,64780,3644],{"emptyLinePlaceholder":1325},[69,64782,64783,64785,64787],{"class":71,"line":116},[69,64784,1011],{"class":86},[69,64786,52567],{"class":348},[69,64788,1026],{"class":86},[69,64790,64791,64793,64795,64797,64799,64801],{"class":71,"line":133},[69,64792,53372],{"class":86},[69,64794,52577],{"class":348},[69,64796,52580],{"class":109},[69,64798,1019],{"class":86},[69,64800,52585],{"class":1022},[69,64802,60353],{"class":86},[69,64804,64805,64807,64809,64811,64813,64815,64817,64819,64821],{"class":71,"line":139},[69,64806,53372],{"class":86},[69,64808,52577],{"class":348},[69,64810,52596],{"class":109},[69,64812,1019],{"class":86},[69,64814,52601],{"class":1022},[69,64816,52604],{"class":109},[69,64818,1019],{"class":86},[69,64820,52609],{"class":1022},[69,64822,60353],{"class":86},[69,64824,64825,64827,64829,64831,64833,64835,64837,64839,64841],{"class":71,"line":401},[69,64826,53372],{"class":86},[69,64828,52577],{"class":348},[69,64830,16160],{"class":109},[69,64832,1019],{"class":86},[69,64834,52624],{"class":1022},[69,64836,52604],{"class":109},[69,64838,1019],{"class":86},[69,64840,52631],{"class":1022},[69,64842,60353],{"class":86},[69,64844,64845,64847,64849,64852,64854],{"class":71,"line":470},[69,64846,53372],{"class":86},[69,64848,52640],{"class":348},[69,64850,64851],{"class":86},">tab栏切换\u003C\u002F",[69,64853,52640],{"class":348},[69,64855,1026],{"class":86},[69,64857,64858,64860,64862],{"class":71,"line":475},[69,64859,53372],{"class":86},[69,64861,1297],{"class":348},[69,64863,1026],{"class":86},[69,64865,64866,64868],{"class":71,"line":482},[69,64867,7645],{"class":348},[69,64869,113],{"class":86},[69,64871,64872,64874,64876,64878],{"class":71,"line":497},[69,64873,55933],{"class":90},[69,64875,94],{"class":86},[69,64877,1583],{"class":90},[69,64879,130],{"class":86},[69,64881,64882,64884,64886,64888],{"class":71,"line":502},[69,64883,55922],{"class":90},[69,64885,94],{"class":86},[69,64887,1583],{"class":90},[69,64889,130],{"class":86},[69,64891,64892],{"class":71,"line":509},[69,64893,3431],{"class":86},[69,64895,64896],{"class":71,"line":524},[69,64897,3644],{"emptyLinePlaceholder":1325},[69,64899,64900,64903],{"class":71,"line":2888},[69,64901,64902],{"class":109},"    .tab",[69,64904,113],{"class":86},[69,64906,64907,64909,64911,64914,64916],{"class":71,"line":2893},[69,64908,55998],{"class":90},[69,64910,94],{"class":86},[69,64912,64913],{"class":90},"590",[69,64915,100],{"class":82},[69,64917,130],{"class":86},[69,64919,64920,64922,64924,64927,64929],{"class":71,"line":2899},[69,64921,56012],{"class":90},[69,64923,94],{"class":86},[69,64925,64926],{"class":90},"340",[69,64928,100],{"class":82},[69,64930,130],{"class":86},[69,64932,64933,64935,64937,64939,64941],{"class":71,"line":2919},[69,64934,55933],{"class":90},[69,64936,94],{"class":86},[69,64938,2087],{"class":90},[69,64940,100],{"class":82},[69,64942,130],{"class":86},[69,64944,64945,64947,64949,64951,64953,64955,64957],{"class":71,"line":2924},[69,64946,63203],{"class":90},[69,64948,94],{"class":86},[69,64950,1609],{"class":90},[69,64952,100],{"class":82},[69,64954,52752],{"class":90},[69,64956,63470],{"class":90},[69,64958,130],{"class":86},[69,64960,64961],{"class":71,"line":2938},[69,64962,3431],{"class":86},[69,64964,64965],{"class":71,"line":2943},[69,64966,3644],{"emptyLinePlaceholder":1325},[69,64968,64969,64972],{"class":71,"line":2972},[69,64970,64971],{"class":109},"    .tab-nav",[69,64973,113],{"class":86},[69,64975,64976,64978,64980,64982,64984],{"class":71,"line":2977},[69,64977,55998],{"class":90},[69,64979,94],{"class":86},[69,64981,124],{"class":90},[69,64983,127],{"class":82},[69,64985,130],{"class":86},[69,64987,64988,64990,64992,64994,64996],{"class":71,"line":2994},[69,64989,56012],{"class":90},[69,64991,94],{"class":86},[69,64993,2294],{"class":90},[69,64995,100],{"class":82},[69,64997,130],{"class":86},[69,64999,65000,65002,65004,65006,65008],{"class":71,"line":2999},[69,65001,58586],{"class":90},[69,65003,94],{"class":86},[69,65005,2294],{"class":90},[69,65007,100],{"class":82},[69,65009,130],{"class":86},[69,65011,65012,65014,65016,65018],{"class":71,"line":3004},[69,65013,56236],{"class":90},[69,65015,94],{"class":86},[69,65017,52709],{"class":90},[69,65019,130],{"class":86},[69,65021,65022,65024,65026,65028],{"class":71,"line":3009},[69,65023,56247],{"class":90},[69,65025,94],{"class":86},[69,65027,52898],{"class":90},[69,65029,130],{"class":86},[69,65031,65032],{"class":71,"line":3023},[69,65033,3431],{"class":86},[69,65035,65036],{"class":71,"line":3028},[69,65037,3644],{"emptyLinePlaceholder":1325},[69,65039,65040,65042,65045],{"class":71,"line":3821},[69,65041,64971],{"class":109},[69,65043,65044],{"class":348}," h3",[69,65046,113],{"class":86},[69,65048,65049,65051,65053,65055,65057],{"class":71,"line":3835},[69,65050,56149],{"class":90},[69,65052,94],{"class":86},[69,65054,2187],{"class":90},[69,65056,100],{"class":82},[69,65058,130],{"class":86},[69,65060,65061,65063,65065,65068],{"class":71,"line":3843},[69,65062,63560],{"class":90},[69,65064,94],{"class":86},[69,65066,65067],{"class":90},"normal",[69,65069,130],{"class":86},[69,65071,65072,65074,65076,65078,65080],{"class":71,"line":3848},[69,65073,63226],{"class":90},[69,65075,94],{"class":86},[69,65077,2087],{"class":90},[69,65079,100],{"class":82},[69,65081,130],{"class":86},[69,65083,65084],{"class":71,"line":3854},[69,65085,3431],{"class":86},[69,65087,65088],{"class":71,"line":3860},[69,65089,3644],{"emptyLinePlaceholder":1325},[69,65091,65092,65094,65096],{"class":71,"line":3865},[69,65093,64971],{"class":109},[69,65095,62518],{"class":348},[69,65097,113],{"class":86},[69,65099,65100,65102,65104,65106],{"class":71,"line":9190},[69,65101,55959],{"class":90},[69,65103,94],{"class":86},[69,65105,55964],{"class":90},[69,65107,130],{"class":86},[69,65109,65110,65112,65114,65116],{"class":71,"line":9214},[69,65111,56236],{"class":90},[69,65113,94],{"class":86},[69,65115,52709],{"class":90},[69,65117,130],{"class":86},[69,65119,65120,65122,65124,65126],{"class":71,"line":9219},[69,65121,56247],{"class":90},[69,65123,94],{"class":86},[69,65125,52811],{"class":90},[69,65127,130],{"class":86},[69,65129,65130],{"class":71,"line":9225},[69,65131,3431],{"class":86},[69,65133,65134],{"class":71,"line":9252},[69,65135,3644],{"emptyLinePlaceholder":1325},[69,65137,65138,65140,65142,65144],{"class":71,"line":9257},[69,65139,64971],{"class":109},[69,65141,62518],{"class":348},[69,65143,56302],{"class":348},[69,65145,113],{"class":86},[69,65147,65148,65150,65152,65154,65156,65158],{"class":71,"line":9263},[69,65149,55933],{"class":90},[69,65151,94],{"class":86},[69,65153,1583],{"class":90},[69,65155,10192],{"class":90},[69,65157,100],{"class":82},[69,65159,130],{"class":86},[69,65161,65162,65164,65166,65168,65170],{"class":71,"line":9275},[69,65163,56149],{"class":90},[69,65165,94],{"class":86},[69,65167,1937],{"class":90},[69,65169,100],{"class":82},[69,65171,130],{"class":86},[69,65173,65174],{"class":71,"line":9287},[69,65175,3431],{"class":86},[69,65177,65178],{"class":71,"line":9299},[69,65179,3644],{"emptyLinePlaceholder":1325},[69,65181,65182,65184,65186,65188,65190],{"class":71,"line":10958},[69,65183,64971],{"class":109},[69,65185,62518],{"class":348},[69,65187,56302],{"class":348},[69,65189,2650],{"class":348},[69,65191,113],{"class":86},[69,65193,65194,65197,65199,65201],{"class":71,"line":10983},[69,65195,65196],{"class":90},"      text-decoration",[69,65198,94],{"class":86},[69,65200,55964],{"class":90},[69,65202,130],{"class":86},[69,65204,65205,65207,65209,65211,65213,65215,65218],{"class":71,"line":11006},[69,65206,63458],{"class":90},[69,65208,94],{"class":86},[69,65210,1471],{"class":90},[69,65212,100],{"class":82},[69,65214,52752],{"class":90},[69,65216,65217],{"class":90}," transparent",[69,65219,130],{"class":86},[69,65221,65222,65224,65226,65228],{"class":71,"line":11030},[69,65223,58643],{"class":90},[69,65225,94],{"class":86},[69,65227,63595],{"class":90},[69,65229,130],{"class":86},[69,65231,65232],{"class":71,"line":11035},[69,65233,3431],{"class":86},[69,65235,65236],{"class":71,"line":11040},[69,65237,3644],{"emptyLinePlaceholder":1325},[69,65239,65240,65242,65244,65246,65248,65251],{"class":71,"line":11045},[69,65241,64971],{"class":109},[69,65243,62518],{"class":348},[69,65245,56302],{"class":348},[69,65247,2650],{"class":348},[69,65249,65250],{"class":109},".active",[69,65252,113],{"class":86},[69,65254,65255,65257,65259,65262],{"class":71,"line":11054},[69,65256,63017],{"class":90},[69,65258,94],{"class":86},[69,65260,65261],{"class":90},"#e1251b",[69,65263,130],{"class":86},[69,65265,65266,65268,65270,65272],{"class":71,"line":11059},[69,65267,58643],{"class":90},[69,65269,94],{"class":86},[69,65271,65261],{"class":90},[69,65273,130],{"class":86},[69,65275,65276],{"class":71,"line":11065},[69,65277,3431],{"class":86},[69,65279,65280],{"class":71,"line":11086},[69,65281,3644],{"emptyLinePlaceholder":1325},[69,65283,65284,65287],{"class":71,"line":11092},[69,65285,65286],{"class":109},"    .tab-content",[69,65288,113],{"class":86},[69,65290,65291,65293,65295,65297,65300,65302],{"class":71,"line":11106},[69,65292,55922],{"class":90},[69,65294,94],{"class":86},[69,65296,1583],{"class":90},[69,65298,65299],{"class":90}," 16",[69,65301,100],{"class":82},[69,65303,130],{"class":86},[69,65305,65306],{"class":71,"line":11112},[69,65307,3431],{"class":86},[69,65309,65310],{"class":71,"line":11139},[69,65311,3644],{"emptyLinePlaceholder":1325},[69,65313,65314,65316,65318],{"class":71,"line":11148},[69,65315,65286],{"class":109},[69,65317,63400],{"class":109},[69,65319,113],{"class":86},[69,65321,65322,65324,65326,65328],{"class":71,"line":11154},[69,65323,56236],{"class":90},[69,65325,94],{"class":86},[69,65327,55964],{"class":90},[69,65329,130],{"class":86},[69,65331,65332],{"class":71,"line":11162},[69,65333,3431],{"class":86},[69,65335,65336],{"class":71,"line":11167},[69,65337,3644],{"emptyLinePlaceholder":1325},[69,65339,65340,65342,65345],{"class":71,"line":17843},[69,65341,65286],{"class":109},[69,65343,65344],{"class":109}," .item.active",[69,65346,113],{"class":86},[69,65348,65349,65351,65353,65355],{"class":71,"line":17849},[69,65350,56236],{"class":90},[69,65352,94],{"class":86},[69,65354,62095],{"class":90},[69,65356,130],{"class":86},[69,65358,65359],{"class":71,"line":17872},[69,65360,3431],{"class":86},[69,65362,65363,65365,65367],{"class":71,"line":17878},[69,65364,53645],{"class":86},[69,65366,1297],{"class":348},[69,65368,1026],{"class":86},[69,65370,65371,65373,65375],{"class":71,"line":17901},[69,65372,1036],{"class":86},[69,65374,52567],{"class":348},[69,65376,1026],{"class":86},[69,65378,65379],{"class":71,"line":17915},[69,65380,3644],{"emptyLinePlaceholder":1325},[69,65382,65383,65385,65387],{"class":71,"line":17935},[69,65384,1011],{"class":86},[69,65386,680],{"class":348},[69,65388,1026],{"class":86},[69,65390,65391,65393,65395,65397,65399,65402],{"class":71,"line":17941},[69,65392,53372],{"class":86},[69,65394,442],{"class":348},[69,65396,1016],{"class":109},[69,65398,1019],{"class":86},[69,65400,65401],{"class":1022},"\"tab\"",[69,65403,1026],{"class":86},[69,65405,65406,65408,65410,65412,65414,65417],{"class":71,"line":17952},[69,65407,52574],{"class":86},[69,65409,442],{"class":348},[69,65411,1016],{"class":109},[69,65413,1019],{"class":86},[69,65415,65416],{"class":1022},"\"tab-nav\"",[69,65418,1026],{"class":86},[69,65420,65421,65423,65425,65428,65430],{"class":71,"line":17975},[69,65422,56461],{"class":86},[69,65424,19],{"class":348},[69,65426,65427],{"class":86},">每日特价\u003C\u002F",[69,65429,19],{"class":348},[69,65431,1026],{"class":86},[69,65433,65434,65436,65438],{"class":71,"line":17997},[69,65435,56461],{"class":86},[69,65437,162],{"class":348},[69,65439,1026],{"class":86},[69,65441,65442,65444,65446,65448,65450,65452,65454,65456,65458,65460,65463,65466,65468,65470,65472],{"class":71,"line":18002},[69,65443,56529],{"class":86},[69,65445,40],{"class":348},[69,65447,62278],{"class":86},[69,65449,187],{"class":348},[69,65451,1016],{"class":109},[69,65453,1019],{"class":86},[69,65455,60932],{"class":1022},[69,65457,62283],{"class":109},[69,65459,1019],{"class":86},[69,65461,65462],{"class":1022},"\"javascript:;\"",[69,65464,65465],{"class":86},">精选\u003C\u002F",[69,65467,187],{"class":348},[69,65469,56541],{"class":86},[69,65471,40],{"class":348},[69,65473,1026],{"class":86},[69,65475,65476,65478,65480,65482,65484,65486,65488,65490,65493,65495,65497,65499],{"class":71,"line":18008},[69,65477,56529],{"class":86},[69,65479,40],{"class":348},[69,65481,62278],{"class":86},[69,65483,187],{"class":348},[69,65485,62283],{"class":109},[69,65487,1019],{"class":86},[69,65489,65462],{"class":1022},[69,65491,65492],{"class":86},">美食\u003C\u002F",[69,65494,187],{"class":348},[69,65496,56541],{"class":86},[69,65498,40],{"class":348},[69,65500,1026],{"class":86},[69,65502,65503,65505,65507,65509,65511,65513,65515,65517,65520,65522,65524,65526],{"class":71,"line":18022},[69,65504,56529],{"class":86},[69,65506,40],{"class":348},[69,65508,62278],{"class":86},[69,65510,187],{"class":348},[69,65512,62283],{"class":109},[69,65514,1019],{"class":86},[69,65516,65462],{"class":1022},[69,65518,65519],{"class":86},">百货\u003C\u002F",[69,65521,187],{"class":348},[69,65523,56541],{"class":86},[69,65525,40],{"class":348},[69,65527,1026],{"class":86},[69,65529,65530,65532,65534,65536,65538,65540,65542,65544,65547,65549,65551,65553],{"class":71,"line":18035},[69,65531,56529],{"class":86},[69,65533,40],{"class":348},[69,65535,62278],{"class":86},[69,65537,187],{"class":348},[69,65539,62283],{"class":109},[69,65541,1019],{"class":86},[69,65543,65462],{"class":1022},[69,65545,65546],{"class":86},">个护\u003C\u002F",[69,65548,187],{"class":348},[69,65550,56541],{"class":86},[69,65552,40],{"class":348},[69,65554,1026],{"class":86},[69,65556,65557,65559,65561,65563,65565,65567,65569,65571,65574,65576,65578,65580],{"class":71,"line":18040},[69,65558,56529],{"class":86},[69,65560,40],{"class":348},[69,65562,62278],{"class":86},[69,65564,187],{"class":348},[69,65566,62283],{"class":109},[69,65568,1019],{"class":86},[69,65570,65462],{"class":1022},[69,65572,65573],{"class":86},">预告\u003C\u002F",[69,65575,187],{"class":348},[69,65577,56541],{"class":86},[69,65579,40],{"class":348},[69,65581,1026],{"class":86},[69,65583,65584,65586,65588],{"class":71,"line":18054},[69,65585,56634],{"class":86},[69,65587,162],{"class":348},[69,65589,1026],{"class":86},[69,65591,65592,65594,65596],{"class":71,"line":18059},[69,65593,53006],{"class":86},[69,65595,442],{"class":348},[69,65597,1026],{"class":86},[69,65599,65600,65602,65604,65606,65608,65611],{"class":71,"line":18065},[69,65601,52574],{"class":86},[69,65603,442],{"class":348},[69,65605,1016],{"class":109},[69,65607,1019],{"class":86},[69,65609,65610],{"class":1022},"\"tab-content\"",[69,65612,1026],{"class":86},[69,65614,65615,65617,65619,65621,65623,65626,65628,65630,65632,65634,65637,65639,65641,65643,65646,65648],{"class":71,"line":18070},[69,65616,56461],{"class":86},[69,65618,442],{"class":348},[69,65620,1016],{"class":109},[69,65622,1019],{"class":86},[69,65624,65625],{"class":1022},"\"item active\"",[69,65627,62278],{"class":86},[69,65629,24],{"class":348},[69,65631,56466],{"class":109},[69,65633,1019],{"class":86},[69,65635,65636],{"class":1022},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[69,65638,56474],{"class":109},[69,65640,1019],{"class":86},[69,65642,8894],{"class":1022},[69,65644,65645],{"class":86}," \u002F>\u003C\u002F",[69,65647,442],{"class":348},[69,65649,1026],{"class":86},[69,65651,65652,65654,65656,65658,65660,65662,65664,65666,65668,65670,65673,65675,65677,65679,65681,65683],{"class":71,"line":18084},[69,65653,56461],{"class":86},[69,65655,442],{"class":348},[69,65657,1016],{"class":109},[69,65659,1019],{"class":86},[69,65661,63849],{"class":1022},[69,65663,62278],{"class":86},[69,65665,24],{"class":348},[69,65667,56466],{"class":109},[69,65669,1019],{"class":86},[69,65671,65672],{"class":1022},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[69,65674,56474],{"class":109},[69,65676,1019],{"class":86},[69,65678,8894],{"class":1022},[69,65680,65645],{"class":86},[69,65682,442],{"class":348},[69,65684,1026],{"class":86},[69,65686,65687,65689,65691,65693,65695,65697,65699,65701,65703,65705,65708,65710,65712,65714,65716,65718],{"class":71,"line":18089},[69,65688,56461],{"class":86},[69,65690,442],{"class":348},[69,65692,1016],{"class":109},[69,65694,1019],{"class":86},[69,65696,63849],{"class":1022},[69,65698,62278],{"class":86},[69,65700,24],{"class":348},[69,65702,56466],{"class":109},[69,65704,1019],{"class":86},[69,65706,65707],{"class":1022},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[69,65709,56474],{"class":109},[69,65711,1019],{"class":86},[69,65713,8894],{"class":1022},[69,65715,65645],{"class":86},[69,65717,442],{"class":348},[69,65719,1026],{"class":86},[69,65721,65722,65724,65726,65728,65730,65732,65734,65736,65738,65740,65743,65745,65747,65749,65751,65753],{"class":71,"line":18094},[69,65723,56461],{"class":86},[69,65725,442],{"class":348},[69,65727,1016],{"class":109},[69,65729,1019],{"class":86},[69,65731,63849],{"class":1022},[69,65733,62278],{"class":86},[69,65735,24],{"class":348},[69,65737,56466],{"class":109},[69,65739,1019],{"class":86},[69,65741,65742],{"class":1022},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[69,65744,56474],{"class":109},[69,65746,1019],{"class":86},[69,65748,8894],{"class":1022},[69,65750,65645],{"class":86},[69,65752,442],{"class":348},[69,65754,1026],{"class":86},[69,65756,65757,65759,65761,65763,65765,65767,65769,65771,65773,65775,65778,65780,65782,65784,65786,65788],{"class":71,"line":18108},[69,65758,56461],{"class":86},[69,65760,442],{"class":348},[69,65762,1016],{"class":109},[69,65764,1019],{"class":86},[69,65766,63849],{"class":1022},[69,65768,62278],{"class":86},[69,65770,24],{"class":348},[69,65772,56466],{"class":109},[69,65774,1019],{"class":86},[69,65776,65777],{"class":1022},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[69,65779,56474],{"class":109},[69,65781,1019],{"class":86},[69,65783,8894],{"class":1022},[69,65785,65645],{"class":86},[69,65787,442],{"class":348},[69,65789,1026],{"class":86},[69,65791,65792,65794,65796],{"class":71,"line":18120},[69,65793,53006],{"class":86},[69,65795,442],{"class":348},[69,65797,1026],{"class":86},[69,65799,65800,65802,65804],{"class":71,"line":18125},[69,65801,53645],{"class":86},[69,65803,442],{"class":348},[69,65805,1026],{"class":86},[69,65807,65808,65810,65812],{"class":71,"line":18138},[69,65809,53372],{"class":86},[69,65811,53041],{"class":348},[69,65813,1026],{"class":86},[69,65815,65816],{"class":71,"line":18143},[69,65817,65818],{"class":75},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[69,65820,65821],{"class":71,"line":18148},[69,65822,65823],{"class":75},"    \u002F\u002F 1.1 获取 a 元素 \n",[69,65825,65826,65828,65831,65833,65835,65837,65839,65842],{"class":71,"line":18153},[69,65827,12463],{"class":82},[69,65829,65830],{"class":90}," as",[69,65832,14805],{"class":82},[69,65834,55623],{"class":86},[69,65836,56908],{"class":109},[69,65838,1398],{"class":86},[69,65840,65841],{"class":1022},"'.tab-nav a'",[69,65843,1404],{"class":86},[69,65845,65846],{"class":71,"line":18166},[69,65847,65848],{"class":75},"    \u002F\u002F console.log(as) \n",[69,65850,65851,65853,65855,65857,65859,65861,65863,65865,65867,65870,65872,65874,65876],{"class":71,"line":18171},[69,65852,4445],{"class":82},[69,65854,87],{"class":86},[69,65856,53075],{"class":82},[69,65858,10680],{"class":86},[69,65860,1019],{"class":82},[69,65862,5337],{"class":90},[69,65864,10687],{"class":86},[69,65866,1011],{"class":82},[69,65868,65869],{"class":86}," as.",[69,65871,53196],{"class":90},[69,65873,4458],{"class":86},[69,65875,3536],{"class":82},[69,65877,103],{"class":86},[69,65879,65880],{"class":71,"line":33869},[69,65881,65882],{"class":75},"      \u002F\u002F console.log(as[i])\n",[69,65884,65885],{"class":71,"line":33875},[69,65886,65887],{"class":75},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[69,65889,65890,65893,65895,65897,65900,65902,65904],{"class":71,"line":33881},[69,65891,65892],{"class":86},"      as[i].",[69,65894,59039],{"class":109},[69,65896,1398],{"class":86},[69,65898,65899],{"class":1022},"'mouseenter'",[69,65901,13677],{"class":86},[69,65903,55676],{"class":82},[69,65905,55679],{"class":86},[69,65907,65908],{"class":71,"line":33887},[69,65909,65910],{"class":75},"        \u002F\u002F console.log('鼠标经过')\n",[69,65912,65913],{"class":71,"line":33893},[69,65914,65915],{"class":75},"        \u002F\u002F 排他思想  \n",[69,65917,65918],{"class":71,"line":33904},[69,65919,65920],{"class":75},"        \u002F\u002F 干掉别人 移除类active\n",[69,65922,65923,65925,65927,65929,65932,65934,65936,65938,65941],{"class":71,"line":33910},[69,65924,53153],{"class":86},[69,65926,55626],{"class":109},[69,65928,1398],{"class":86},[69,65930,65931],{"class":1022},"'.tab-nav .active'",[69,65933,58230],{"class":86},[69,65935,58233],{"class":109},[69,65937,1398],{"class":86},[69,65939,65940],{"class":1022},"'active'",[69,65942,1404],{"class":86},[69,65944,65945],{"class":71,"line":33930},[69,65946,65947],{"class":75},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[69,65949,65950,65953,65956,65958,65960,65962],{"class":71,"line":33936},[69,65951,65952],{"class":90},"        this",[69,65954,65955],{"class":86},".classList.",[69,65957,6576],{"class":109},[69,65959,1398],{"class":86},[69,65961,65940],{"class":1022},[69,65963,1404],{"class":86},[69,65965,65966],{"class":71,"line":33947},[69,65967,3644],{"emptyLinePlaceholder":1325},[69,65969,65970],{"class":71,"line":33953},[69,65971,65972],{"class":75},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[69,65974,65975],{"class":71,"line":33959},[69,65976,65977],{"class":75},"        \u002F\u002F 干掉别人\n",[69,65979,65980,65982,65984,65986,65989,65991,65993,65995,65997],{"class":71,"line":33965},[69,65981,53153],{"class":86},[69,65983,55626],{"class":109},[69,65985,1398],{"class":86},[69,65987,65988],{"class":1022},"'.tab-content .active'",[69,65990,58230],{"class":86},[69,65992,58233],{"class":109},[69,65994,1398],{"class":86},[69,65996,65940],{"class":1022},[69,65998,1404],{"class":86},[69,66000,66001],{"class":71,"line":33971},[69,66002,66003],{"class":75},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[69,66005,66006,66008,66010,66012,66015,66017,66019,66021,66023,66025,66027,66029,66031],{"class":71,"line":33977},[69,66007,53153],{"class":86},[69,66009,55626],{"class":109},[69,66011,1398],{"class":86},[69,66013,66014],{"class":1022},"`.tab-content .item:nth-child(${",[69,66016,1830],{"class":86},[69,66018,46802],{"class":82},[69,66020,26355],{"class":90},[69,66022,58259],{"class":1022},[69,66024,58230],{"class":86},[69,66026,6576],{"class":109},[69,66028,1398],{"class":86},[69,66030,65940],{"class":1022},[69,66032,1404],{"class":86},[69,66034,66035],{"class":71,"line":33983},[69,66036,3644],{"emptyLinePlaceholder":1325},[69,66038,66039],{"class":71,"line":33989},[69,66040,66041],{"class":86},"      })\n",[69,66043,66044],{"class":71,"line":34009},[69,66045,3431],{"class":86},[69,66047,66048,66050,66052],{"class":71,"line":34015},[69,66049,53645],{"class":86},[69,66051,53041],{"class":348},[69,66053,1026],{"class":86},[69,66055,66056,66058,66060],{"class":71,"line":34031},[69,66057,1036],{"class":86},[69,66059,680],{"class":348},[69,66061,1026],{"class":86},[69,66063,66064],{"class":71,"line":34037},[69,66065,3644],{"emptyLinePlaceholder":1325},[69,66067,66068,66070,66072],{"class":71,"line":34051},[69,66069,1036],{"class":86},[69,66071,349],{"class":348},[69,66073,1026],{"class":86},[29,66075,66076],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[29,66078,66079],{},"在监听事件中，this指向的就是他的调用者",[29,66081,66082],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[29,66084,54947],{},[29,66086,66087],{},"(function () {",[29,66089,66090],{},"const list = document.querySelector('.xtx-elevator-list')",[29,66092,66093],{},"list.addEventListener('click', function (e) {",[29,66095,66096],{},"if (e.target.tagName === 'A') {",[29,66098,66099],{},"\u002F\u002F 排他思想",[29,66101,66102],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[29,66104,66105],{},"const old = document.querySelector('.xtx-elevator-list .active')",[29,66107,66108],{},"\u002F\u002F console.log(old);",[29,66110,66111],{},"\u002F\u002F 判断",[29,66113,66114],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[29,66116,66117],{},"if (old) old.classList.remove('active')",[29,66119,66120],{},"e.target.classList.add('active')",[29,66122,2332],{},[29,66124,53692],{},[29,66126,66127],{},"})();",[19,66129,66131],{"id":66130},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[59,66133,66135],{"className":51869,"code":66134,"language":349,"meta":64,"style":64},"\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",[66,66136,66137,66147,66151,66159,66163,66177,66191,66203,66211,66217,66227,66237,66241,66245,66252,66264,66275,66292,66305,66319,66329,66333,66337,66344,66355,66373,66383,66395,66399,66403,66410,66427,66438,66450,66454,66458,66465,66477,66481,66489,66497,66501,66509,66517,66525,66540,66584,66592,66605,66618,66631,66639,66647,66655,66683,66691,66703,66716,66729,66737,66745,66753,66779,66787,66800,66812,66825,66833,66841,66849,66875,66883,66896,66908,66921,66929,66937,66945,66950,66970,66975,66995,67000,67017,67022,67030,67035,67064,67077,67081,67085,67090,67094,67122,67127,67144,67149,67154,67159,67164,67190,67194,67198,67206,67214,67218],{"__ignoreMap":64},[69,66138,66139,66141,66143,66145],{"class":71,"line":72},[69,66140,52532],{"class":86},[69,66142,52535],{"class":348},[69,66144,52538],{"class":109},[69,66146,1026],{"class":86},[69,66148,66149],{"class":71,"line":79},[69,66150,3644],{"emptyLinePlaceholder":1325},[69,66152,66153,66155,66157],{"class":71,"line":106},[69,66154,1011],{"class":86},[69,66156,349],{"class":348},[69,66158,1026],{"class":86},[69,66160,66161],{"class":71,"line":116},[69,66162,3644],{"emptyLinePlaceholder":1325},[69,66164,66165,66167,66169,66171,66173,66175],{"class":71,"line":133},[69,66166,1011],{"class":86},[69,66168,52567],{"class":348},[69,66170,52549],{"class":109},[69,66172,1019],{"class":86},[69,66174,52554],{"class":1022},[69,66176,1026],{"class":86},[69,66178,66179,66181,66183,66185,66187,66189],{"class":71,"line":139},[69,66180,53372],{"class":86},[69,66182,52577],{"class":348},[69,66184,52580],{"class":109},[69,66186,1019],{"class":86},[69,66188,52585],{"class":1022},[69,66190,1026],{"class":86},[69,66192,66193,66195,66197,66199,66201],{"class":71,"line":401},[69,66194,53372],{"class":86},[69,66196,52640],{"class":348},[69,66198,56541],{"class":86},[69,66200,52640],{"class":348},[69,66202,1026],{"class":86},[69,66204,66205,66207,66209],{"class":71,"line":470},[69,66206,53372],{"class":86},[69,66208,1297],{"class":348},[69,66210,1026],{"class":86},[69,66212,66213,66215],{"class":71,"line":475},[69,66214,7645],{"class":348},[69,66216,113],{"class":86},[69,66218,66219,66221,66223,66225],{"class":71,"line":482},[69,66220,55933],{"class":90},[69,66222,94],{"class":86},[69,66224,1583],{"class":90},[69,66226,130],{"class":86},[69,66228,66229,66231,66233,66235],{"class":71,"line":497},[69,66230,55922],{"class":90},[69,66232,94],{"class":86},[69,66234,1583],{"class":90},[69,66236,130],{"class":86},[69,66238,66239],{"class":71,"line":502},[69,66240,3431],{"class":86},[69,66242,66243],{"class":71,"line":509},[69,66244,3644],{"emptyLinePlaceholder":1325},[69,66246,66247,66250],{"class":71,"line":524},[69,66248,66249],{"class":348},"    table",[69,66251,113],{"class":86},[69,66253,66254,66257,66259,66262],{"class":71,"line":2888},[69,66255,66256],{"class":90},"      border-collapse",[69,66258,94],{"class":86},[69,66260,66261],{"class":90},"collapse",[69,66263,130],{"class":86},[69,66265,66266,66269,66271,66273],{"class":71,"line":2893},[69,66267,66268],{"class":90},"      border-spacing",[69,66270,94],{"class":86},[69,66272,1583],{"class":90},[69,66274,130],{"class":86},[69,66276,66277,66279,66281,66283,66285,66287,66290],{"class":71,"line":2899},[69,66278,63203],{"class":90},[69,66280,94],{"class":86},[69,66282,1609],{"class":90},[69,66284,100],{"class":82},[69,66286,52752],{"class":90},[69,66288,66289],{"class":90}," #c0c0c0",[69,66291,130],{"class":86},[69,66293,66294,66296,66298,66301,66303],{"class":71,"line":2919},[69,66295,55998],{"class":90},[69,66297,94],{"class":86},[69,66299,66300],{"class":90},"500",[69,66302,100],{"class":82},[69,66304,130],{"class":86},[69,66306,66307,66309,66311,66313,66315,66317],{"class":71,"line":2924},[69,66308,55933],{"class":90},[69,66310,94],{"class":86},[69,66312,124],{"class":90},[69,66314,100],{"class":82},[69,66316,52787],{"class":90},[69,66318,130],{"class":86},[69,66320,66321,66323,66325,66327],{"class":71,"line":2938},[69,66322,58513],{"class":90},[69,66324,94],{"class":86},[69,66326,52823],{"class":90},[69,66328,130],{"class":86},[69,66330,66331],{"class":71,"line":2943},[69,66332,3431],{"class":86},[69,66334,66335],{"class":71,"line":2972},[69,66336,3644],{"emptyLinePlaceholder":1325},[69,66338,66339,66342],{"class":71,"line":2977},[69,66340,66341],{"class":348},"    th",[69,66343,113],{"class":86},[69,66345,66346,66348,66350,66353],{"class":71,"line":2994},[69,66347,56111],{"class":90},[69,66349,94],{"class":86},[69,66351,66352],{"class":90},"#09c",[69,66354,130],{"class":86},[69,66356,66357,66360,66362,66364,66366,66368,66371],{"class":71,"line":2999},[69,66358,66359],{"class":90},"      font",[69,66361,94],{"class":86},[69,66363,63565],{"class":90},[69,66365,65299],{"class":90},[69,66367,100],{"class":82},[69,66369,66370],{"class":1022}," \"微软雅黑\"",[69,66372,130],{"class":86},[69,66374,66375,66377,66379,66381],{"class":71,"line":3004},[69,66376,58643],{"class":90},[69,66378,94],{"class":86},[69,66380,62068],{"class":90},[69,66382,130],{"class":86},[69,66384,66385,66387,66389,66391,66393],{"class":71,"line":3009},[69,66386,56012],{"class":90},[69,66388,94],{"class":86},[69,66390,2187],{"class":90},[69,66392,100],{"class":82},[69,66394,130],{"class":86},[69,66396,66397],{"class":71,"line":3023},[69,66398,3431],{"class":86},[69,66400,66401],{"class":71,"line":3028},[69,66402,3644],{"emptyLinePlaceholder":1325},[69,66404,66405,66408],{"class":71,"line":3821},[69,66406,66407],{"class":348},"    td",[69,66409,113],{"class":86},[69,66411,66412,66414,66416,66418,66420,66422,66425],{"class":71,"line":3835},[69,66413,63203],{"class":90},[69,66415,94],{"class":86},[69,66417,1609],{"class":90},[69,66419,100],{"class":82},[69,66421,52752],{"class":90},[69,66423,66424],{"class":90}," #d0d0d0",[69,66426,130],{"class":86},[69,66428,66429,66431,66433,66436],{"class":71,"line":3843},[69,66430,58643],{"class":90},[69,66432,94],{"class":86},[69,66434,66435],{"class":90},"#404060",[69,66437,130],{"class":86},[69,66439,66440,66442,66444,66446,66448],{"class":71,"line":3848},[69,66441,55922],{"class":90},[69,66443,94],{"class":86},[69,66445,390],{"class":90},[69,66447,100],{"class":82},[69,66449,130],{"class":86},[69,66451,66452],{"class":71,"line":3854},[69,66453,3431],{"class":86},[69,66455,66456],{"class":71,"line":3860},[69,66457,3644],{"emptyLinePlaceholder":1325},[69,66459,66460,66463],{"class":71,"line":3865},[69,66461,66462],{"class":109},"    .allCheck",[69,66464,113],{"class":86},[69,66466,66467,66469,66471,66473,66475],{"class":71,"line":9190},[69,66468,55998],{"class":90},[69,66470,94],{"class":86},[69,66472,1999],{"class":90},[69,66474,100],{"class":82},[69,66476,130],{"class":86},[69,66478,66479],{"class":71,"line":9214},[69,66480,3431],{"class":86},[69,66482,66483,66485,66487],{"class":71,"line":9219},[69,66484,53645],{"class":86},[69,66486,1297],{"class":348},[69,66488,1026],{"class":86},[69,66490,66491,66493,66495],{"class":71,"line":9225},[69,66492,1036],{"class":86},[69,66494,52567],{"class":348},[69,66496,1026],{"class":86},[69,66498,66499],{"class":71,"line":9252},[69,66500,3644],{"emptyLinePlaceholder":1325},[69,66502,66503,66505,66507],{"class":71,"line":9257},[69,66504,1011],{"class":86},[69,66506,680],{"class":348},[69,66508,1026],{"class":86},[69,66510,66511,66513,66515],{"class":71,"line":9263},[69,66512,53372],{"class":86},[69,66514,1530],{"class":348},[69,66516,1026],{"class":86},[69,66518,66519,66521,66523],{"class":71,"line":9275},[69,66520,52574],{"class":86},[69,66522,1536],{"class":348},[69,66524,1026],{"class":86},[69,66526,66527,66529,66531,66533,66535,66538],{"class":71,"line":9287},[69,66528,56461],{"class":86},[69,66530,1539],{"class":348},[69,66532,1016],{"class":109},[69,66534,1019],{"class":86},[69,66536,66537],{"class":1022},"\"allCheck\"",[69,66539,1026],{"class":86},[69,66541,66542,66544,66546,66548,66550,66552,66554,66556,66558,66560,66562,66565,66568,66570,66572,66574,66577,66580,66582],{"class":71,"line":9299},[69,66543,56529],{"class":86},[69,66545,55048],{"class":348},[69,66547,55051],{"class":109},[69,66549,1019],{"class":86},[69,66551,55056],{"class":1022},[69,66553,16160],{"class":109},[69,66555,1019],{"class":86},[69,66557,8894],{"class":1022},[69,66559,16199],{"class":109},[69,66561,1019],{"class":86},[69,66563,66564],{"class":1022},"\"checkAll\"",[69,66566,66567],{"class":86},"> \u003C",[69,66569,69],{"class":348},[69,66571,1016],{"class":109},[69,66573,1019],{"class":86},[69,66575,66576],{"class":1022},"\"all\"",[69,66578,66579],{"class":86},">全选\u003C\u002F",[69,66581,69],{"class":348},[69,66583,1026],{"class":86},[69,66585,66586,66588,66590],{"class":71,"line":10958},[69,66587,56634],{"class":86},[69,66589,1539],{"class":348},[69,66591,1026],{"class":86},[69,66593,66594,66596,66598,66601,66603],{"class":71,"line":10983},[69,66595,56461],{"class":86},[69,66597,1539],{"class":348},[69,66599,66600],{"class":86},">商品\u003C\u002F",[69,66602,1539],{"class":348},[69,66604,1026],{"class":86},[69,66606,66607,66609,66611,66614,66616],{"class":71,"line":11006},[69,66608,56461],{"class":86},[69,66610,1539],{"class":348},[69,66612,66613],{"class":86},">商家\u003C\u002F",[69,66615,1539],{"class":348},[69,66617,1026],{"class":86},[69,66619,66620,66622,66624,66627,66629],{"class":71,"line":11030},[69,66621,56461],{"class":86},[69,66623,1539],{"class":348},[69,66625,66626],{"class":86},">价格\u003C\u002F",[69,66628,1539],{"class":348},[69,66630,1026],{"class":86},[69,66632,66633,66635,66637],{"class":71,"line":11035},[69,66634,53006],{"class":86},[69,66636,1536],{"class":348},[69,66638,1026],{"class":86},[69,66640,66641,66643,66645],{"class":71,"line":11040},[69,66642,52574],{"class":86},[69,66644,1536],{"class":348},[69,66646,1026],{"class":86},[69,66648,66649,66651,66653],{"class":71,"line":11045},[69,66650,56461],{"class":86},[69,66652,1581],{"class":348},[69,66654,1026],{"class":86},[69,66656,66657,66659,66661,66663,66665,66667,66669,66671,66674,66676,66678,66681],{"class":71,"line":11054},[69,66658,56529],{"class":86},[69,66660,55048],{"class":348},[69,66662,55051],{"class":109},[69,66664,1019],{"class":86},[69,66666,55056],{"class":1022},[69,66668,16160],{"class":109},[69,66670,1019],{"class":86},[69,66672,66673],{"class":1022},"\"check\"",[69,66675,1016],{"class":109},[69,66677,1019],{"class":86},[69,66679,66680],{"class":1022},"\"ck\"",[69,66682,1026],{"class":86},[69,66684,66685,66687,66689],{"class":71,"line":11059},[69,66686,56634],{"class":86},[69,66688,1581],{"class":348},[69,66690,1026],{"class":86},[69,66692,66693,66695,66697,66699,66701],{"class":71,"line":11065},[69,66694,56461],{"class":86},[69,66696,1581],{"class":348},[69,66698,62399],{"class":86},[69,66700,1581],{"class":348},[69,66702,1026],{"class":86},[69,66704,66705,66707,66709,66712,66714],{"class":71,"line":11086},[69,66706,56461],{"class":86},[69,66708,1581],{"class":348},[69,66710,66711],{"class":86},">小米\u003C\u002F",[69,66713,1581],{"class":348},[69,66715,1026],{"class":86},[69,66717,66718,66720,66722,66725,66727],{"class":71,"line":11092},[69,66719,56461],{"class":86},[69,66721,1581],{"class":348},[69,66723,66724],{"class":86},">￥1999\u003C\u002F",[69,66726,1581],{"class":348},[69,66728,1026],{"class":86},[69,66730,66731,66733,66735],{"class":71,"line":11106},[69,66732,53006],{"class":86},[69,66734,1536],{"class":348},[69,66736,1026],{"class":86},[69,66738,66739,66741,66743],{"class":71,"line":11112},[69,66740,52574],{"class":86},[69,66742,1536],{"class":348},[69,66744,1026],{"class":86},[69,66746,66747,66749,66751],{"class":71,"line":11139},[69,66748,56461],{"class":86},[69,66750,1581],{"class":348},[69,66752,1026],{"class":86},[69,66754,66755,66757,66759,66761,66763,66765,66767,66769,66771,66773,66775,66777],{"class":71,"line":11148},[69,66756,56529],{"class":86},[69,66758,55048],{"class":348},[69,66760,55051],{"class":109},[69,66762,1019],{"class":86},[69,66764,55056],{"class":1022},[69,66766,16160],{"class":109},[69,66768,1019],{"class":86},[69,66770,66673],{"class":1022},[69,66772,1016],{"class":109},[69,66774,1019],{"class":86},[69,66776,66680],{"class":1022},[69,66778,1026],{"class":86},[69,66780,66781,66783,66785],{"class":71,"line":11154},[69,66782,56634],{"class":86},[69,66784,1581],{"class":348},[69,66786,1026],{"class":86},[69,66788,66789,66791,66793,66796,66798],{"class":71,"line":11162},[69,66790,56461],{"class":86},[69,66792,1581],{"class":348},[69,66794,66795],{"class":86},">小米净水器\u003C\u002F",[69,66797,1581],{"class":348},[69,66799,1026],{"class":86},[69,66801,66802,66804,66806,66808,66810],{"class":71,"line":11167},[69,66803,56461],{"class":86},[69,66805,1581],{"class":348},[69,66807,66711],{"class":86},[69,66809,1581],{"class":348},[69,66811,1026],{"class":86},[69,66813,66814,66816,66818,66821,66823],{"class":71,"line":17843},[69,66815,56461],{"class":86},[69,66817,1581],{"class":348},[69,66819,66820],{"class":86},">￥4999\u003C\u002F",[69,66822,1581],{"class":348},[69,66824,1026],{"class":86},[69,66826,66827,66829,66831],{"class":71,"line":17849},[69,66828,53006],{"class":86},[69,66830,1536],{"class":348},[69,66832,1026],{"class":86},[69,66834,66835,66837,66839],{"class":71,"line":17872},[69,66836,52574],{"class":86},[69,66838,1536],{"class":348},[69,66840,1026],{"class":86},[69,66842,66843,66845,66847],{"class":71,"line":17878},[69,66844,56461],{"class":86},[69,66846,1581],{"class":348},[69,66848,1026],{"class":86},[69,66850,66851,66853,66855,66857,66859,66861,66863,66865,66867,66869,66871,66873],{"class":71,"line":17901},[69,66852,56529],{"class":86},[69,66854,55048],{"class":348},[69,66856,55051],{"class":109},[69,66858,1019],{"class":86},[69,66860,55056],{"class":1022},[69,66862,16160],{"class":109},[69,66864,1019],{"class":86},[69,66866,66673],{"class":1022},[69,66868,1016],{"class":109},[69,66870,1019],{"class":86},[69,66872,66680],{"class":1022},[69,66874,1026],{"class":86},[69,66876,66877,66879,66881],{"class":71,"line":17915},[69,66878,56634],{"class":86},[69,66880,1581],{"class":348},[69,66882,1026],{"class":86},[69,66884,66885,66887,66889,66892,66894],{"class":71,"line":17935},[69,66886,56461],{"class":86},[69,66888,1581],{"class":348},[69,66890,66891],{"class":86},">小米电视\u003C\u002F",[69,66893,1581],{"class":348},[69,66895,1026],{"class":86},[69,66897,66898,66900,66902,66904,66906],{"class":71,"line":17941},[69,66899,56461],{"class":86},[69,66901,1581],{"class":348},[69,66903,66711],{"class":86},[69,66905,1581],{"class":348},[69,66907,1026],{"class":86},[69,66909,66910,66912,66914,66917,66919],{"class":71,"line":17952},[69,66911,56461],{"class":86},[69,66913,1581],{"class":348},[69,66915,66916],{"class":86},">￥5999\u003C\u002F",[69,66918,1581],{"class":348},[69,66920,1026],{"class":86},[69,66922,66923,66925,66927],{"class":71,"line":17975},[69,66924,53006],{"class":86},[69,66926,1536],{"class":348},[69,66928,1026],{"class":86},[69,66930,66931,66933,66935],{"class":71,"line":17997},[69,66932,53645],{"class":86},[69,66934,1530],{"class":348},[69,66936,1026],{"class":86},[69,66938,66939,66941,66943],{"class":71,"line":18002},[69,66940,53372],{"class":86},[69,66942,53041],{"class":348},[69,66944,1026],{"class":86},[69,66946,66947],{"class":71,"line":18008},[69,66948,66949],{"class":75},"    \u002F\u002F 1. 获取大复选框\n",[69,66951,66952,66954,66957,66959,66961,66963,66965,66968],{"class":71,"line":18022},[69,66953,12463],{"class":82},[69,66955,66956],{"class":90}," checkAll",[69,66958,14805],{"class":82},[69,66960,55623],{"class":86},[69,66962,55626],{"class":109},[69,66964,1398],{"class":86},[69,66966,66967],{"class":1022},"'#checkAll'",[69,66969,1404],{"class":86},[69,66971,66972],{"class":71,"line":18035},[69,66973,66974],{"class":75},"    \u002F\u002F 2. 获取所有的小复选框\n",[69,66976,66977,66979,66982,66984,66986,66988,66990,66993],{"class":71,"line":18040},[69,66978,12463],{"class":82},[69,66980,66981],{"class":90}," cks",[69,66983,14805],{"class":82},[69,66985,55623],{"class":86},[69,66987,56908],{"class":109},[69,66989,1398],{"class":86},[69,66991,66992],{"class":1022},"'.ck'",[69,66994,1404],{"class":86},[69,66996,66997],{"class":71,"line":18054},[69,66998,66999],{"class":75},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[69,67001,67002,67005,67007,67009,67011,67013,67015],{"class":71,"line":18059},[69,67003,67004],{"class":86},"    checkAll.",[69,67006,59039],{"class":109},[69,67008,1398],{"class":86},[69,67010,59044],{"class":1022},[69,67012,13677],{"class":86},[69,67014,55676],{"class":82},[69,67016,55679],{"class":86},[69,67018,67019],{"class":71,"line":18065},[69,67020,67021],{"class":75},"      \u002F\u002F 得到当前大复选框的选中状态\n",[69,67023,67024,67027],{"class":71,"line":18070},[69,67025,67026],{"class":75},"      \u002F\u002F console.log(checkAll.checked)",[69,67028,67029],{"class":75},"  \u002F\u002F 得到 是 true 或者是 false\n",[69,67031,67032],{"class":71,"line":18084},[69,67033,67034],{"class":75},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[69,67036,67037,67039,67041,67043,67045,67047,67049,67051,67053,67056,67058,67060,67062],{"class":71,"line":18089},[69,67038,53512],{"class":82},[69,67040,87],{"class":86},[69,67042,53075],{"class":82},[69,67044,10680],{"class":86},[69,67046,1019],{"class":82},[69,67048,5337],{"class":90},[69,67050,10687],{"class":86},[69,67052,1011],{"class":82},[69,67054,67055],{"class":86}," cks.",[69,67057,53196],{"class":90},[69,67059,4458],{"class":86},[69,67061,3536],{"class":82},[69,67063,103],{"class":86},[69,67065,67066,67069,67071,67074],{"class":71,"line":18094},[69,67067,67068],{"class":86},"        cks[i].checked ",[69,67070,1019],{"class":82},[69,67072,67073],{"class":90}," this",[69,67075,67076],{"class":86},".checked\n",[69,67078,67079],{"class":71,"line":18108},[69,67080,53626],{"class":86},[69,67082,67083],{"class":71,"line":18120},[69,67084,34697],{"class":86},[69,67086,67087],{"class":71,"line":18125},[69,67088,67089],{"class":75},"    \u002F\u002F 5. 小复选框控制大复选框\n",[69,67091,67092],{"class":71,"line":18138},[69,67093,3644],{"emptyLinePlaceholder":1325},[69,67095,67096,67098,67100,67102,67104,67106,67108,67110,67112,67114,67116,67118,67120],{"class":71,"line":18143},[69,67097,4445],{"class":82},[69,67099,87],{"class":86},[69,67101,53075],{"class":82},[69,67103,10680],{"class":86},[69,67105,1019],{"class":82},[69,67107,5337],{"class":90},[69,67109,10687],{"class":86},[69,67111,1011],{"class":82},[69,67113,67055],{"class":86},[69,67115,53196],{"class":90},[69,67117,4458],{"class":86},[69,67119,3536],{"class":82},[69,67121,103],{"class":86},[69,67123,67124],{"class":71,"line":18148},[69,67125,67126],{"class":75},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[69,67128,67129,67132,67134,67136,67138,67140,67142],{"class":71,"line":18153},[69,67130,67131],{"class":86},"      cks[i].",[69,67133,59039],{"class":109},[69,67135,1398],{"class":86},[69,67137,59044],{"class":1022},[69,67139,13677],{"class":86},[69,67141,55676],{"class":82},[69,67143,55679],{"class":86},[69,67145,67146],{"class":71,"line":18166},[69,67147,67148],{"class":75},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[69,67150,67151],{"class":71,"line":18171},[69,67152,67153],{"class":75},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[69,67155,67156],{"class":71,"line":33869},[69,67157,67158],{"class":75},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[69,67160,67161],{"class":71,"line":33875},[69,67162,67163],{"class":75},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[69,67165,67166,67169,67171,67173,67175,67177,67180,67182,67184,67186,67188],{"class":71,"line":33881},[69,67167,67168],{"class":86},"        checkAll.checked ",[69,67170,1019],{"class":82},[69,67172,55623],{"class":86},[69,67174,56908],{"class":109},[69,67176,1398],{"class":86},[69,67178,67179],{"class":1022},"'.ck:checked'",[69,67181,32062],{"class":86},[69,67183,53196],{"class":90},[69,67185,59132],{"class":82},[69,67187,67055],{"class":86},[69,67189,57058],{"class":90},[69,67191,67192],{"class":71,"line":33887},[69,67193,66041],{"class":86},[69,67195,67196],{"class":71,"line":33893},[69,67197,3431],{"class":86},[69,67199,67200,67202,67204],{"class":71,"line":33904},[69,67201,53645],{"class":86},[69,67203,53041],{"class":348},[69,67205,1026],{"class":86},[69,67207,67208,67210,67212],{"class":71,"line":33910},[69,67209,1036],{"class":86},[69,67211,680],{"class":348},[69,67213,1026],{"class":86},[69,67215,67216],{"class":71,"line":33930},[69,67217,3644],{"emptyLinePlaceholder":1325},[69,67219,67220,67222,67224],{"class":71,"line":33936},[69,67221,1036],{"class":86},[69,67223,349],{"class":348},[69,67225,1026],{"class":86},[29,67227,67228],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[29,67230,67231],{},"用好之间比较得到的布尔值！！！",[29,67233,67234,67235,67238,67239,87,67242,1972,67244,67247],{},"在 JS 里访问的时候，",[66,67236,67237],{},"checkbox.checked"," 是一个 ",[195,67240,67241],{},"布尔值",[66,67243,2614],{},[66,67245,67246],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[29,67249,67250,67251,67254,67255],{},"HTML 的 ",[66,67252,67253],{},"checked=\"checked\""," 只是 ",[195,67256,67257,67258,67261],{},"初始值；JS 的 ",[66,67259,67260],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[29,67263,67264],{},"：checked是一个伪类选择器",[29,67266,67267],{},[24,67268],{"alt":64,"src":67269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[29,67271,67272,67275],{},[67273,67274],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[29,67277,67278],{},[24,67279],{"alt":64,"src":67280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67282,67284],{"id":67283},"_33-dom事件进阶","3.3 DOM事件进阶",[19,67286,67288],{"id":67287},"_331-事件流","3.3.1 事件流",[29,67290,67291],{},[24,67292],{"alt":64,"src":67293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23237,67295,67297],{"id":67296},"_3311-事件捕获","3.3.1.1 事件捕获",[29,67299,67300],{},[24,67301],{"alt":64,"src":67302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[59,67304,67306],{"className":51869,"code":67305,"language":349,"meta":64,"style":64},"\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",[66,67307,67308,67318,67332,67336,67344,67358,67378,67390,67398,67405,67417,67429,67439,67443,67447,67454,67466,67478,67488,67492,67500,67508,67512,67520,67535,67554,67562,67570,67590,67610,67626,67637,67645,67662,67673,67681,67698,67709,67717,67725,67733,67737],{"__ignoreMap":64},[69,67309,67310,67312,67314,67316],{"class":71,"line":72},[69,67311,52532],{"class":86},[69,67313,52535],{"class":348},[69,67315,52538],{"class":109},[69,67317,1026],{"class":86},[69,67319,67320,67322,67324,67326,67328,67330],{"class":71,"line":79},[69,67321,1011],{"class":86},[69,67323,349],{"class":348},[69,67325,52549],{"class":109},[69,67327,1019],{"class":86},[69,67329,52554],{"class":1022},[69,67331,1026],{"class":86},[69,67333,67334],{"class":71,"line":106},[69,67335,3644],{"emptyLinePlaceholder":1325},[69,67337,67338,67340,67342],{"class":71,"line":116},[69,67339,1011],{"class":86},[69,67341,52567],{"class":348},[69,67343,1026],{"class":86},[69,67345,67346,67348,67350,67352,67354,67356],{"class":71,"line":133},[69,67347,53372],{"class":86},[69,67349,52577],{"class":348},[69,67351,52580],{"class":109},[69,67353,1019],{"class":86},[69,67355,52585],{"class":1022},[69,67357,1026],{"class":86},[69,67359,67360,67362,67364,67366,67368,67370,67372,67374,67376],{"class":71,"line":139},[69,67361,53372],{"class":86},[69,67363,52577],{"class":348},[69,67365,16160],{"class":109},[69,67367,1019],{"class":86},[69,67369,52624],{"class":1022},[69,67371,52604],{"class":109},[69,67373,1019],{"class":86},[69,67375,52631],{"class":1022},[69,67377,1026],{"class":86},[69,67379,67380,67382,67384,67386,67388],{"class":71,"line":401},[69,67381,53372],{"class":86},[69,67383,52640],{"class":348},[69,67385,52643],{"class":86},[69,67387,52640],{"class":348},[69,67389,1026],{"class":86},[69,67391,67392,67394,67396],{"class":71,"line":470},[69,67393,53372],{"class":86},[69,67395,1297],{"class":348},[69,67397,1026],{"class":86},[69,67399,67400,67403],{"class":71,"line":475},[69,67401,67402],{"class":109},"    .father",[69,67404,113],{"class":86},[69,67406,67407,67409,67411,67413,67415],{"class":71,"line":482},[69,67408,55998],{"class":90},[69,67410,94],{"class":86},[69,67412,66300],{"class":90},[69,67414,100],{"class":82},[69,67416,130],{"class":86},[69,67418,67419,67421,67423,67425,67427],{"class":71,"line":497},[69,67420,56012],{"class":90},[69,67422,94],{"class":86},[69,67424,66300],{"class":90},[69,67426,100],{"class":82},[69,67428,130],{"class":86},[69,67430,67431,67433,67435,67437],{"class":71,"line":502},[69,67432,56111],{"class":90},[69,67434,94],{"class":86},[69,67436,52875],{"class":90},[69,67438,130],{"class":86},[69,67440,67441],{"class":71,"line":509},[69,67442,3431],{"class":86},[69,67444,67445],{"class":71,"line":524},[69,67446,3644],{"emptyLinePlaceholder":1325},[69,67448,67449,67452],{"class":71,"line":2888},[69,67450,67451],{"class":109},"    .son",[69,67453,113],{"class":86},[69,67455,67456,67458,67460,67462,67464],{"class":71,"line":2893},[69,67457,55998],{"class":90},[69,67459,94],{"class":86},[69,67461,2967],{"class":90},[69,67463,100],{"class":82},[69,67465,130],{"class":86},[69,67467,67468,67470,67472,67474,67476],{"class":71,"line":2899},[69,67469,56012],{"class":90},[69,67471,94],{"class":86},[69,67473,2967],{"class":90},[69,67475,100],{"class":82},[69,67477,130],{"class":86},[69,67479,67480,67482,67484,67486],{"class":71,"line":2919},[69,67481,56111],{"class":90},[69,67483,94],{"class":86},[69,67485,56116],{"class":90},[69,67487,130],{"class":86},[69,67489,67490],{"class":71,"line":2924},[69,67491,3431],{"class":86},[69,67493,67494,67496,67498],{"class":71,"line":2938},[69,67495,53645],{"class":86},[69,67497,1297],{"class":348},[69,67499,1026],{"class":86},[69,67501,67502,67504,67506],{"class":71,"line":2943},[69,67503,1036],{"class":86},[69,67505,52567],{"class":348},[69,67507,1026],{"class":86},[69,67509,67510],{"class":71,"line":2972},[69,67511,3644],{"emptyLinePlaceholder":1325},[69,67513,67514,67516,67518],{"class":71,"line":2977},[69,67515,1011],{"class":86},[69,67517,680],{"class":348},[69,67519,1026],{"class":86},[69,67521,67522,67524,67526,67528,67530,67533],{"class":71,"line":2994},[69,67523,53372],{"class":86},[69,67525,442],{"class":348},[69,67527,1016],{"class":109},[69,67529,1019],{"class":86},[69,67531,67532],{"class":1022},"\"father\"",[69,67534,1026],{"class":86},[69,67536,67537,67539,67541,67543,67545,67548,67550,67552],{"class":71,"line":2999},[69,67538,52574],{"class":86},[69,67540,442],{"class":348},[69,67542,1016],{"class":109},[69,67544,1019],{"class":86},[69,67546,67547],{"class":1022},"\"son\"",[69,67549,56541],{"class":86},[69,67551,442],{"class":348},[69,67553,1026],{"class":86},[69,67555,67556,67558,67560],{"class":71,"line":3004},[69,67557,53645],{"class":86},[69,67559,442],{"class":348},[69,67561,1026],{"class":86},[69,67563,67564,67566,67568],{"class":71,"line":3009},[69,67565,53372],{"class":86},[69,67567,53041],{"class":348},[69,67569,1026],{"class":86},[69,67571,67572,67574,67577,67579,67581,67583,67585,67588],{"class":71,"line":3023},[69,67573,12463],{"class":82},[69,67575,67576],{"class":90}," fa",[69,67578,14805],{"class":82},[69,67580,55623],{"class":86},[69,67582,55626],{"class":109},[69,67584,1398],{"class":86},[69,67586,67587],{"class":1022},"'.father'",[69,67589,1404],{"class":86},[69,67591,67592,67594,67597,67599,67601,67603,67605,67608],{"class":71,"line":3028},[69,67593,12463],{"class":82},[69,67595,67596],{"class":90}," son",[69,67598,14805],{"class":82},[69,67600,55623],{"class":86},[69,67602,55626],{"class":109},[69,67604,1398],{"class":86},[69,67606,67607],{"class":1022},"'.son'",[69,67609,1404],{"class":86},[69,67611,67612,67614,67616,67618,67620,67622,67624],{"class":71,"line":3821},[69,67613,53635],{"class":86},[69,67615,59039],{"class":109},[69,67617,1398],{"class":86},[69,67619,59044],{"class":1022},[69,67621,13677],{"class":86},[69,67623,55676],{"class":82},[69,67625,55679],{"class":86},[69,67627,67628,67630,67632,67635],{"class":71,"line":3835},[69,67629,60151],{"class":109},[69,67631,1398],{"class":86},[69,67633,67634],{"class":1022},"'woshiu1'",[69,67636,1404],{"class":86},[69,67638,67639,67641,67643],{"class":71,"line":3843},[69,67640,55762],{"class":86},[69,67642,2614],{"class":90},[69,67644,1404],{"class":86},[69,67646,67647,67650,67652,67654,67656,67658,67660],{"class":71,"line":3848},[69,67648,67649],{"class":86},"    fa.",[69,67651,59039],{"class":109},[69,67653,1398],{"class":86},[69,67655,59044],{"class":1022},[69,67657,13677],{"class":86},[69,67659,55676],{"class":82},[69,67661,55679],{"class":86},[69,67663,67664,67666,67668,67671],{"class":71,"line":3854},[69,67665,60151],{"class":109},[69,67667,1398],{"class":86},[69,67669,67670],{"class":1022},"'1'",[69,67672,1404],{"class":86},[69,67674,67675,67677,67679],{"class":71,"line":3860},[69,67676,55762],{"class":86},[69,67678,2614],{"class":90},[69,67680,1404],{"class":86},[69,67682,67683,67686,67688,67690,67692,67694,67696],{"class":71,"line":3865},[69,67684,67685],{"class":86},"    son.",[69,67687,59039],{"class":109},[69,67689,1398],{"class":86},[69,67691,59044],{"class":1022},[69,67693,13677],{"class":86},[69,67695,55676],{"class":82},[69,67697,55679],{"class":86},[69,67699,67700,67702,67704,67707],{"class":71,"line":9190},[69,67701,60151],{"class":109},[69,67703,1398],{"class":86},[69,67705,67706],{"class":1022},"'2'",[69,67708,1404],{"class":86},[69,67710,67711,67713,67715],{"class":71,"line":9214},[69,67712,55762],{"class":86},[69,67714,2614],{"class":90},[69,67716,1404],{"class":86},[69,67718,67719,67721,67723],{"class":71,"line":9219},[69,67720,53645],{"class":86},[69,67722,53041],{"class":348},[69,67724,1026],{"class":86},[69,67726,67727,67729,67731],{"class":71,"line":9225},[69,67728,1036],{"class":86},[69,67730,680],{"class":348},[69,67732,1026],{"class":86},[69,67734,67735],{"class":71,"line":9252},[69,67736,3644],{"emptyLinePlaceholder":1325},[69,67738,67739,67741,67743],{"class":71,"line":9257},[69,67740,1036],{"class":86},[69,67742,349],{"class":348},[69,67744,1026],{"class":86},[29,67746,67747],{},[24,67748],{"alt":64,"src":67749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[29,67751,67752],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23237,67754,67756],{"id":67755},"_3312-事件冒泡","3.3.1.2 事件冒泡",[29,67758,67759],{},[24,67760],{"alt":64,"src":67761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[29,67763,67764],{},"反着来",[29,67766,67767],{},"注意是同名事件，比如都是‘click’",[23237,67769,67771],{"id":67770},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[29,67773,67774],{},[24,67775],{"alt":64,"src":67776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23237,67778,67780],{"id":67779},"_3314-解绑事件","3.3.1.4 解绑事件",[29,67782,67783],{},[24,67784],{"alt":64,"src":67785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[29,67787,67788],{},[24,67789],{"alt":64,"src":67790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23237,67792,67794],{"id":67793},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[37,67796,67797],{},[40,67798,67799],{},"事件类型的区别",[29,67801,67802],{},[24,67803],{"alt":64,"src":67804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[29,67806,67807],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[37,67809,67810],{"start":79},[40,67811,67812],{},"注册事件的区别",[29,67814,67815],{},[24,67816],{"alt":64,"src":67817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23237,67819,67821],{"id":67820},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[29,67823,67824],{},[24,67825],{"alt":64,"src":67826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[29,67828,67829],{},[24,67830],{"alt":64,"src":67831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[59,67833,67835],{"className":54295,"code":67834,"language":54297,"meta":64,"style":64},"\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",[66,67836,67837,67845,67862,67885,67893,67898,67903,67908,67912,67920,67928],{"__ignoreMap":64},[69,67838,67839,67841,67843],{"class":71,"line":72},[69,67840,1011],{"class":86},[69,67842,680],{"class":348},[69,67844,1026],{"class":86},[69,67846,67847,67849,67852,67855,67857,67860],{"class":71,"line":79},[69,67848,53372],{"class":86},[69,67850,67851],{"class":348},"form",[69,67853,67854],{"class":109}," action",[69,67856,1019],{"class":86},[69,67858,67859],{"class":1022},"\"http:\u002F\u002Fwww.itcast.cn\"",[69,67861,1026],{"class":86},[69,67863,67864,67866,67868,67870,67872,67875,67878,67880,67883],{"class":71,"line":106},[69,67865,52574],{"class":86},[69,67867,55048],{"class":348},[69,67869,55051],{"class":109},[69,67871,1019],{"class":86},[69,67873,67874],{"class":1022},"\"submit\"",[69,67876,67877],{"class":109}," value",[69,67879,1019],{"class":86},[69,67881,67882],{"class":1022},"\"免费注册\"",[69,67884,1026],{"class":86},[69,67886,67887,67889,67891],{"class":71,"line":116},[69,67888,52574],{"class":86},[69,67890,53041],{"class":348},[69,67892,1026],{"class":86},[69,67894,67895],{"class":71,"line":133},[69,67896,67897],{"class":86},"      const form = document.querySelector('form')\n",[69,67899,67900],{"class":71,"line":139},[69,67901,67902],{"class":86},"      form.addEventListener('submit', function (e) {\n",[69,67904,67905],{"class":71,"line":401},[69,67906,67907],{"class":86},"        e.preventDefault()\n",[69,67909,67910],{"class":71,"line":470},[69,67911,66041],{"class":86},[69,67913,67914,67916,67918],{"class":71,"line":475},[69,67915,53006],{"class":86},[69,67917,53041],{"class":348},[69,67919,1026],{"class":86},[69,67921,67922,67924,67926],{"class":71,"line":482},[69,67923,53645],{"class":86},[69,67925,67851],{"class":348},[69,67927,1026],{"class":86},[69,67929,67930,67932,67934],{"class":71,"line":497},[69,67931,1036],{"class":86},[69,67933,680],{"class":348},[69,67935,1026],{"class":86},[29,67937,67938],{},"点击不在跳转！！！",[19,67940,67942],{"id":67941},"_332-事件委托","3.3.2 事件委托",[29,67944,67945],{},[24,67946],{"alt":64,"src":67947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[59,67949,67951],{"className":51869,"code":67950,"language":349,"meta":64,"style":64},"\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",[66,67952,67953,67963,67977,67981,67989,68003,68023,68035,68043,68047,68055,68063,68075,68087,68099,68111,68123,68136,68144,68152,68157,68176,68197,68202,68207,68212,68217,68226,68230,68240,68244,68249,68254,68268,68278,68282,68286,68294,68302,68306],{"__ignoreMap":64},[69,67954,67955,67957,67959,67961],{"class":71,"line":72},[69,67956,52532],{"class":86},[69,67958,52535],{"class":348},[69,67960,52538],{"class":109},[69,67962,1026],{"class":86},[69,67964,67965,67967,67969,67971,67973,67975],{"class":71,"line":79},[69,67966,1011],{"class":86},[69,67968,349],{"class":348},[69,67970,52549],{"class":109},[69,67972,1019],{"class":86},[69,67974,52554],{"class":1022},[69,67976,1026],{"class":86},[69,67978,67979],{"class":71,"line":106},[69,67980,3644],{"emptyLinePlaceholder":1325},[69,67982,67983,67985,67987],{"class":71,"line":116},[69,67984,1011],{"class":86},[69,67986,52567],{"class":348},[69,67988,1026],{"class":86},[69,67990,67991,67993,67995,67997,67999,68001],{"class":71,"line":133},[69,67992,53372],{"class":86},[69,67994,52577],{"class":348},[69,67996,52580],{"class":109},[69,67998,1019],{"class":86},[69,68000,52585],{"class":1022},[69,68002,1026],{"class":86},[69,68004,68005,68007,68009,68011,68013,68015,68017,68019,68021],{"class":71,"line":139},[69,68006,53372],{"class":86},[69,68008,52577],{"class":348},[69,68010,16160],{"class":109},[69,68012,1019],{"class":86},[69,68014,52624],{"class":1022},[69,68016,52604],{"class":109},[69,68018,1019],{"class":86},[69,68020,52631],{"class":1022},[69,68022,1026],{"class":86},[69,68024,68025,68027,68029,68031,68033],{"class":71,"line":401},[69,68026,53372],{"class":86},[69,68028,52640],{"class":348},[69,68030,52643],{"class":86},[69,68032,52640],{"class":348},[69,68034,1026],{"class":86},[69,68036,68037,68039,68041],{"class":71,"line":470},[69,68038,1036],{"class":86},[69,68040,52567],{"class":348},[69,68042,1026],{"class":86},[69,68044,68045],{"class":71,"line":475},[69,68046,3644],{"emptyLinePlaceholder":1325},[69,68048,68049,68051,68053],{"class":71,"line":482},[69,68050,1011],{"class":86},[69,68052,680],{"class":348},[69,68054,1026],{"class":86},[69,68056,68057,68059,68061],{"class":71,"line":497},[69,68058,53372],{"class":86},[69,68060,162],{"class":348},[69,68062,1026],{"class":86},[69,68064,68065,68067,68069,68071,68073],{"class":71,"line":502},[69,68066,52574],{"class":86},[69,68068,40],{"class":348},[69,68070,55193],{"class":86},[69,68072,40],{"class":348},[69,68074,1026],{"class":86},[69,68076,68077,68079,68081,68083,68085],{"class":71,"line":509},[69,68078,52574],{"class":86},[69,68080,40],{"class":348},[69,68082,55212],{"class":86},[69,68084,40],{"class":348},[69,68086,1026],{"class":86},[69,68088,68089,68091,68093,68095,68097],{"class":71,"line":524},[69,68090,52574],{"class":86},[69,68092,40],{"class":348},[69,68094,55231],{"class":86},[69,68096,40],{"class":348},[69,68098,1026],{"class":86},[69,68100,68101,68103,68105,68107,68109],{"class":71,"line":2888},[69,68102,52574],{"class":86},[69,68104,40],{"class":348},[69,68106,55250],{"class":86},[69,68108,40],{"class":348},[69,68110,1026],{"class":86},[69,68112,68113,68115,68117,68119,68121],{"class":71,"line":2893},[69,68114,52574],{"class":86},[69,68116,40],{"class":348},[69,68118,55269],{"class":86},[69,68120,40],{"class":348},[69,68122,1026],{"class":86},[69,68124,68125,68127,68129,68132,68134],{"class":71,"line":2899},[69,68126,52574],{"class":86},[69,68128,29],{"class":348},[69,68130,68131],{"class":86},">我不需要变色\u003C\u002F",[69,68133,29],{"class":348},[69,68135,1026],{"class":86},[69,68137,68138,68140,68142],{"class":71,"line":2919},[69,68139,53645],{"class":86},[69,68141,162],{"class":348},[69,68143,1026],{"class":86},[69,68145,68146,68148,68150],{"class":71,"line":2924},[69,68147,53372],{"class":86},[69,68149,53041],{"class":348},[69,68151,1026],{"class":86},[69,68153,68154],{"class":71,"line":2938},[69,68155,68156],{"class":75},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[69,68158,68159,68161,68163,68165,68167,68169,68171,68174],{"class":71,"line":2943},[69,68160,12463],{"class":82},[69,68162,62518],{"class":90},[69,68164,14805],{"class":82},[69,68166,55623],{"class":86},[69,68168,55626],{"class":109},[69,68170,1398],{"class":86},[69,68172,68173],{"class":1022},"'ul'",[69,68175,1404],{"class":86},[69,68177,68178,68181,68183,68185,68187,68189,68191,68193,68195],{"class":71,"line":2972},[69,68179,68180],{"class":86},"    ul.",[69,68182,59039],{"class":109},[69,68184,1398],{"class":86},[69,68186,59044],{"class":1022},[69,68188,13677],{"class":86},[69,68190,55676],{"class":82},[69,68192,87],{"class":86},[69,68194,1468],{"class":6458},[69,68196,103],{"class":86},[69,68198,68199],{"class":71,"line":2977},[69,68200,68201],{"class":75},"      \u002F\u002F alert(1)\n",[69,68203,68204],{"class":71,"line":2994},[69,68205,68206],{"class":75},"      \u002F\u002F e.target就是我们点击的对象\n",[69,68208,68209],{"class":71,"line":2999},[69,68210,68211],{"class":75},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[69,68213,68214],{"class":71,"line":3004},[69,68215,68216],{"class":75},"      \u002F\u002F e.target.style.color = 'red'\n",[69,68218,68219,68221,68223],{"class":71,"line":3009},[69,68220,59470],{"class":86},[69,68222,59473],{"class":109},[69,68224,68225],{"class":86},"(e)\n",[69,68227,68228],{"class":71,"line":3023},[69,68229,3644],{"emptyLinePlaceholder":1325},[69,68231,68232,68234,68237],{"class":71,"line":3028},[69,68233,59470],{"class":86},[69,68235,68236],{"class":109},"dir",[69,68238,68239],{"class":86},"(e.target)\n",[69,68241,68242],{"class":71,"line":3821},[69,68243,3644],{"emptyLinePlaceholder":1325},[69,68245,68246],{"class":71,"line":3835},[69,68247,68248],{"class":75},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[69,68250,68251],{"class":71,"line":3843},[69,68252,68253],{"class":75},"      \u002F\u002F 通过tagName来进行判断\n",[69,68255,68256,68258,68261,68263,68266],{"class":71,"line":3848},[69,68257,55707],{"class":82},[69,68259,68260],{"class":86}," (e.target.tagName ",[69,68262,55713],{"class":82},[69,68264,68265],{"class":1022}," 'LI'",[69,68267,103],{"class":86},[69,68269,68270,68273,68275],{"class":71,"line":3854},[69,68271,68272],{"class":86},"        e.target.style.color ",[69,68274,1019],{"class":82},[69,68276,68277],{"class":1022}," 'red'\n",[69,68279,68280],{"class":71,"line":3860},[69,68281,53626],{"class":86},[69,68283,68284],{"class":71,"line":3865},[69,68285,34697],{"class":86},[69,68287,68288,68290,68292],{"class":71,"line":9190},[69,68289,53645],{"class":86},[69,68291,53041],{"class":348},[69,68293,1026],{"class":86},[69,68295,68296,68298,68300],{"class":71,"line":9214},[69,68297,1036],{"class":86},[69,68299,680],{"class":348},[69,68301,1026],{"class":86},[69,68303,68304],{"class":71,"line":9219},[69,68305,3644],{"emptyLinePlaceholder":1325},[69,68307,68308,68310,68312],{"class":71,"line":9225},[69,68309,1036],{"class":86},[69,68311,349],{"class":348},[69,68313,1026],{"class":86},[29,68315,68316],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[29,68318,68319],{},"if(e.target.ragName==='P') {}",[29,68321,68322],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[29,68324,68325],{},"通过事件委托的方式实现tab栏切换改造：",[29,68327,68328],{},"一定要记住自定义属性！！！！！！",[29,68330,68331],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[29,68333,68334],{},"id是自定义的属性名",[29,68336,68337],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[59,68339,68341],{"className":51869,"code":68340,"language":349,"meta":64,"style":64},"\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",[66,68342,68343,68353,68367,68371,68379,68393,68413,68433,68445,68453,68459,68469,68479,68483,68487,68493,68505,68517,68529,68545,68549,68553,68559,68571,68583,68595,68605,68615,68619,68623,68631,68643,68653,68665,68669,68673,68681,68691,68701,68711,68715,68719,68729,68743,68755,68759,68763,68775,68785,68801,68811,68815,68819,68833,68843,68853,68857,68861,68867,68881,68885,68889,68897,68907,68911,68915,68924,68934,68938,68946,68954,68958,68966,68980,68994,69006,69014,69053,69085,69117,69149,69181,69189,69197,69211,69245,69279,69313,69347,69381,69389,69397,69405,69410,69415,69434,69439,69459,69467,69472,69485,69506,69519,69523,69528,69533,69546,69566,69594,69598,69602,69606,69614,69622,69626],{"__ignoreMap":64},[69,68344,68345,68347,68349,68351],{"class":71,"line":72},[69,68346,52532],{"class":86},[69,68348,52535],{"class":348},[69,68350,52538],{"class":109},[69,68352,1026],{"class":86},[69,68354,68355,68357,68359,68361,68363,68365],{"class":71,"line":79},[69,68356,1011],{"class":86},[69,68358,349],{"class":348},[69,68360,52549],{"class":109},[69,68362,1019],{"class":86},[69,68364,52554],{"class":1022},[69,68366,1026],{"class":86},[69,68368,68369],{"class":71,"line":106},[69,68370,3644],{"emptyLinePlaceholder":1325},[69,68372,68373,68375,68377],{"class":71,"line":116},[69,68374,1011],{"class":86},[69,68376,52567],{"class":348},[69,68378,1026],{"class":86},[69,68380,68381,68383,68385,68387,68389,68391],{"class":71,"line":133},[69,68382,53372],{"class":86},[69,68384,52577],{"class":348},[69,68386,52580],{"class":109},[69,68388,1019],{"class":86},[69,68390,52585],{"class":1022},[69,68392,60353],{"class":86},[69,68394,68395,68397,68399,68401,68403,68405,68407,68409,68411],{"class":71,"line":139},[69,68396,53372],{"class":86},[69,68398,52577],{"class":348},[69,68400,52596],{"class":109},[69,68402,1019],{"class":86},[69,68404,52601],{"class":1022},[69,68406,52604],{"class":109},[69,68408,1019],{"class":86},[69,68410,52609],{"class":1022},[69,68412,60353],{"class":86},[69,68414,68415,68417,68419,68421,68423,68425,68427,68429,68431],{"class":71,"line":401},[69,68416,53372],{"class":86},[69,68418,52577],{"class":348},[69,68420,16160],{"class":109},[69,68422,1019],{"class":86},[69,68424,52624],{"class":1022},[69,68426,52604],{"class":109},[69,68428,1019],{"class":86},[69,68430,52631],{"class":1022},[69,68432,60353],{"class":86},[69,68434,68435,68437,68439,68441,68443],{"class":71,"line":470},[69,68436,53372],{"class":86},[69,68438,52640],{"class":348},[69,68440,64851],{"class":86},[69,68442,52640],{"class":348},[69,68444,1026],{"class":86},[69,68446,68447,68449,68451],{"class":71,"line":475},[69,68448,53372],{"class":86},[69,68450,1297],{"class":348},[69,68452,1026],{"class":86},[69,68454,68455,68457],{"class":71,"line":482},[69,68456,7645],{"class":348},[69,68458,113],{"class":86},[69,68460,68461,68463,68465,68467],{"class":71,"line":497},[69,68462,55933],{"class":90},[69,68464,94],{"class":86},[69,68466,1583],{"class":90},[69,68468,130],{"class":86},[69,68470,68471,68473,68475,68477],{"class":71,"line":502},[69,68472,55922],{"class":90},[69,68474,94],{"class":86},[69,68476,1583],{"class":90},[69,68478,130],{"class":86},[69,68480,68481],{"class":71,"line":509},[69,68482,3431],{"class":86},[69,68484,68485],{"class":71,"line":524},[69,68486,3644],{"emptyLinePlaceholder":1325},[69,68488,68489,68491],{"class":71,"line":2888},[69,68490,64902],{"class":109},[69,68492,113],{"class":86},[69,68494,68495,68497,68499,68501,68503],{"class":71,"line":2893},[69,68496,55998],{"class":90},[69,68498,94],{"class":86},[69,68500,64913],{"class":90},[69,68502,100],{"class":82},[69,68504,130],{"class":86},[69,68506,68507,68509,68511,68513,68515],{"class":71,"line":2899},[69,68508,56012],{"class":90},[69,68510,94],{"class":86},[69,68512,64926],{"class":90},[69,68514,100],{"class":82},[69,68516,130],{"class":86},[69,68518,68519,68521,68523,68525,68527],{"class":71,"line":2919},[69,68520,55933],{"class":90},[69,68522,94],{"class":86},[69,68524,2087],{"class":90},[69,68526,100],{"class":82},[69,68528,130],{"class":86},[69,68530,68531,68533,68535,68537,68539,68541,68543],{"class":71,"line":2924},[69,68532,63203],{"class":90},[69,68534,94],{"class":86},[69,68536,1609],{"class":90},[69,68538,100],{"class":82},[69,68540,52752],{"class":90},[69,68542,63470],{"class":90},[69,68544,130],{"class":86},[69,68546,68547],{"class":71,"line":2938},[69,68548,3431],{"class":86},[69,68550,68551],{"class":71,"line":2943},[69,68552,3644],{"emptyLinePlaceholder":1325},[69,68554,68555,68557],{"class":71,"line":2972},[69,68556,64971],{"class":109},[69,68558,113],{"class":86},[69,68560,68561,68563,68565,68567,68569],{"class":71,"line":2977},[69,68562,55998],{"class":90},[69,68564,94],{"class":86},[69,68566,124],{"class":90},[69,68568,127],{"class":82},[69,68570,130],{"class":86},[69,68572,68573,68575,68577,68579,68581],{"class":71,"line":2994},[69,68574,56012],{"class":90},[69,68576,94],{"class":86},[69,68578,2294],{"class":90},[69,68580,100],{"class":82},[69,68582,130],{"class":86},[69,68584,68585,68587,68589,68591,68593],{"class":71,"line":2999},[69,68586,58586],{"class":90},[69,68588,94],{"class":86},[69,68590,2294],{"class":90},[69,68592,100],{"class":82},[69,68594,130],{"class":86},[69,68596,68597,68599,68601,68603],{"class":71,"line":3004},[69,68598,56236],{"class":90},[69,68600,94],{"class":86},[69,68602,52709],{"class":90},[69,68604,130],{"class":86},[69,68606,68607,68609,68611,68613],{"class":71,"line":3009},[69,68608,56247],{"class":90},[69,68610,94],{"class":86},[69,68612,52898],{"class":90},[69,68614,130],{"class":86},[69,68616,68617],{"class":71,"line":3023},[69,68618,3431],{"class":86},[69,68620,68621],{"class":71,"line":3028},[69,68622,3644],{"emptyLinePlaceholder":1325},[69,68624,68625,68627,68629],{"class":71,"line":3821},[69,68626,64971],{"class":109},[69,68628,65044],{"class":348},[69,68630,113],{"class":86},[69,68632,68633,68635,68637,68639,68641],{"class":71,"line":3835},[69,68634,56149],{"class":90},[69,68636,94],{"class":86},[69,68638,2187],{"class":90},[69,68640,100],{"class":82},[69,68642,130],{"class":86},[69,68644,68645,68647,68649,68651],{"class":71,"line":3843},[69,68646,63560],{"class":90},[69,68648,94],{"class":86},[69,68650,65067],{"class":90},[69,68652,130],{"class":86},[69,68654,68655,68657,68659,68661,68663],{"class":71,"line":3848},[69,68656,63226],{"class":90},[69,68658,94],{"class":86},[69,68660,2087],{"class":90},[69,68662,100],{"class":82},[69,68664,130],{"class":86},[69,68666,68667],{"class":71,"line":3854},[69,68668,3431],{"class":86},[69,68670,68671],{"class":71,"line":3860},[69,68672,3644],{"emptyLinePlaceholder":1325},[69,68674,68675,68677,68679],{"class":71,"line":3865},[69,68676,64971],{"class":109},[69,68678,62518],{"class":348},[69,68680,113],{"class":86},[69,68682,68683,68685,68687,68689],{"class":71,"line":9190},[69,68684,55959],{"class":90},[69,68686,94],{"class":86},[69,68688,55964],{"class":90},[69,68690,130],{"class":86},[69,68692,68693,68695,68697,68699],{"class":71,"line":9214},[69,68694,56236],{"class":90},[69,68696,94],{"class":86},[69,68698,52709],{"class":90},[69,68700,130],{"class":86},[69,68702,68703,68705,68707,68709],{"class":71,"line":9219},[69,68704,56247],{"class":90},[69,68706,94],{"class":86},[69,68708,52811],{"class":90},[69,68710,130],{"class":86},[69,68712,68713],{"class":71,"line":9225},[69,68714,3431],{"class":86},[69,68716,68717],{"class":71,"line":9252},[69,68718,3644],{"emptyLinePlaceholder":1325},[69,68720,68721,68723,68725,68727],{"class":71,"line":9257},[69,68722,64971],{"class":109},[69,68724,62518],{"class":348},[69,68726,56302],{"class":348},[69,68728,113],{"class":86},[69,68730,68731,68733,68735,68737,68739,68741],{"class":71,"line":9263},[69,68732,55933],{"class":90},[69,68734,94],{"class":86},[69,68736,1583],{"class":90},[69,68738,10192],{"class":90},[69,68740,100],{"class":82},[69,68742,130],{"class":86},[69,68744,68745,68747,68749,68751,68753],{"class":71,"line":9275},[69,68746,56149],{"class":90},[69,68748,94],{"class":86},[69,68750,1937],{"class":90},[69,68752,100],{"class":82},[69,68754,130],{"class":86},[69,68756,68757],{"class":71,"line":9287},[69,68758,3431],{"class":86},[69,68760,68761],{"class":71,"line":9299},[69,68762,3644],{"emptyLinePlaceholder":1325},[69,68764,68765,68767,68769,68771,68773],{"class":71,"line":10958},[69,68766,64971],{"class":109},[69,68768,62518],{"class":348},[69,68770,56302],{"class":348},[69,68772,2650],{"class":348},[69,68774,113],{"class":86},[69,68776,68777,68779,68781,68783],{"class":71,"line":10983},[69,68778,65196],{"class":90},[69,68780,94],{"class":86},[69,68782,55964],{"class":90},[69,68784,130],{"class":86},[69,68786,68787,68789,68791,68793,68795,68797,68799],{"class":71,"line":11006},[69,68788,63458],{"class":90},[69,68790,94],{"class":86},[69,68792,1471],{"class":90},[69,68794,100],{"class":82},[69,68796,52752],{"class":90},[69,68798,65217],{"class":90},[69,68800,130],{"class":86},[69,68802,68803,68805,68807,68809],{"class":71,"line":11030},[69,68804,58643],{"class":90},[69,68806,94],{"class":86},[69,68808,63595],{"class":90},[69,68810,130],{"class":86},[69,68812,68813],{"class":71,"line":11035},[69,68814,3431],{"class":86},[69,68816,68817],{"class":71,"line":11040},[69,68818,3644],{"emptyLinePlaceholder":1325},[69,68820,68821,68823,68825,68827,68829,68831],{"class":71,"line":11045},[69,68822,64971],{"class":109},[69,68824,62518],{"class":348},[69,68826,56302],{"class":348},[69,68828,2650],{"class":348},[69,68830,65250],{"class":109},[69,68832,113],{"class":86},[69,68834,68835,68837,68839,68841],{"class":71,"line":11054},[69,68836,63017],{"class":90},[69,68838,94],{"class":86},[69,68840,65261],{"class":90},[69,68842,130],{"class":86},[69,68844,68845,68847,68849,68851],{"class":71,"line":11059},[69,68846,58643],{"class":90},[69,68848,94],{"class":86},[69,68850,65261],{"class":90},[69,68852,130],{"class":86},[69,68854,68855],{"class":71,"line":11065},[69,68856,3431],{"class":86},[69,68858,68859],{"class":71,"line":11086},[69,68860,3644],{"emptyLinePlaceholder":1325},[69,68862,68863,68865],{"class":71,"line":11092},[69,68864,65286],{"class":109},[69,68866,113],{"class":86},[69,68868,68869,68871,68873,68875,68877,68879],{"class":71,"line":11106},[69,68870,55922],{"class":90},[69,68872,94],{"class":86},[69,68874,1583],{"class":90},[69,68876,65299],{"class":90},[69,68878,100],{"class":82},[69,68880,130],{"class":86},[69,68882,68883],{"class":71,"line":11112},[69,68884,3431],{"class":86},[69,68886,68887],{"class":71,"line":11139},[69,68888,3644],{"emptyLinePlaceholder":1325},[69,68890,68891,68893,68895],{"class":71,"line":11148},[69,68892,65286],{"class":109},[69,68894,63400],{"class":109},[69,68896,113],{"class":86},[69,68898,68899,68901,68903,68905],{"class":71,"line":11154},[69,68900,56236],{"class":90},[69,68902,94],{"class":86},[69,68904,55964],{"class":90},[69,68906,130],{"class":86},[69,68908,68909],{"class":71,"line":11162},[69,68910,3431],{"class":86},[69,68912,68913],{"class":71,"line":11167},[69,68914,3644],{"emptyLinePlaceholder":1325},[69,68916,68917,68919,68922],{"class":71,"line":17843},[69,68918,65286],{"class":109},[69,68920,68921],{"class":109}," .active",[69,68923,113],{"class":86},[69,68925,68926,68928,68930,68932],{"class":71,"line":17849},[69,68927,56236],{"class":90},[69,68929,94],{"class":86},[69,68931,62095],{"class":90},[69,68933,130],{"class":86},[69,68935,68936],{"class":71,"line":17872},[69,68937,3431],{"class":86},[69,68939,68940,68942,68944],{"class":71,"line":17878},[69,68941,53645],{"class":86},[69,68943,1297],{"class":348},[69,68945,1026],{"class":86},[69,68947,68948,68950,68952],{"class":71,"line":17901},[69,68949,1036],{"class":86},[69,68951,52567],{"class":348},[69,68953,1026],{"class":86},[69,68955,68956],{"class":71,"line":17915},[69,68957,3644],{"emptyLinePlaceholder":1325},[69,68959,68960,68962,68964],{"class":71,"line":17935},[69,68961,1011],{"class":86},[69,68963,680],{"class":348},[69,68965,1026],{"class":86},[69,68967,68968,68970,68972,68974,68976,68978],{"class":71,"line":17941},[69,68969,53372],{"class":86},[69,68971,442],{"class":348},[69,68973,1016],{"class":109},[69,68975,1019],{"class":86},[69,68977,65401],{"class":1022},[69,68979,1026],{"class":86},[69,68981,68982,68984,68986,68988,68990,68992],{"class":71,"line":17952},[69,68983,52574],{"class":86},[69,68985,442],{"class":348},[69,68987,1016],{"class":109},[69,68989,1019],{"class":86},[69,68991,65416],{"class":1022},[69,68993,1026],{"class":86},[69,68995,68996,68998,69000,69002,69004],{"class":71,"line":17975},[69,68997,56461],{"class":86},[69,68999,19],{"class":348},[69,69001,65427],{"class":86},[69,69003,19],{"class":348},[69,69005,1026],{"class":86},[69,69007,69008,69010,69012],{"class":71,"line":17997},[69,69009,56461],{"class":86},[69,69011,162],{"class":348},[69,69013,1026],{"class":86},[69,69015,69016,69018,69020,69022,69024,69026,69028,69030,69032,69034,69036,69038,69040,69043,69045,69047,69049,69051],{"class":71,"line":18002},[69,69017,56529],{"class":86},[69,69019,40],{"class":348},[69,69021,62278],{"class":86},[69,69023,187],{"class":348},[69,69025,1016],{"class":109},[69,69027,1019],{"class":86},[69,69029,60932],{"class":1022},[69,69031,62283],{"class":109},[69,69033,1019],{"class":86},[69,69035,65462],{"class":1022},[69,69037,55178],{"class":109},[69,69039,1019],{"class":86},[69,69041,69042],{"class":1022},"\"0\"",[69,69044,65465],{"class":86},[69,69046,187],{"class":348},[69,69048,56541],{"class":86},[69,69050,40],{"class":348},[69,69052,1026],{"class":86},[69,69054,69055,69057,69059,69061,69063,69065,69067,69069,69071,69073,69075,69077,69079,69081,69083],{"class":71,"line":18008},[69,69056,56529],{"class":86},[69,69058,40],{"class":348},[69,69060,62278],{"class":86},[69,69062,187],{"class":348},[69,69064,62283],{"class":109},[69,69066,1019],{"class":86},[69,69068,65462],{"class":1022},[69,69070,55178],{"class":109},[69,69072,1019],{"class":86},[69,69074,4922],{"class":1022},[69,69076,65492],{"class":86},[69,69078,187],{"class":348},[69,69080,56541],{"class":86},[69,69082,40],{"class":348},[69,69084,1026],{"class":86},[69,69086,69087,69089,69091,69093,69095,69097,69099,69101,69103,69105,69107,69109,69111,69113,69115],{"class":71,"line":18022},[69,69088,56529],{"class":86},[69,69090,40],{"class":348},[69,69092,62278],{"class":86},[69,69094,187],{"class":348},[69,69096,62283],{"class":109},[69,69098,1019],{"class":86},[69,69100,65462],{"class":1022},[69,69102,55178],{"class":109},[69,69104,1019],{"class":86},[69,69106,4945],{"class":1022},[69,69108,65519],{"class":86},[69,69110,187],{"class":348},[69,69112,56541],{"class":86},[69,69114,40],{"class":348},[69,69116,1026],{"class":86},[69,69118,69119,69121,69123,69125,69127,69129,69131,69133,69135,69137,69139,69141,69143,69145,69147],{"class":71,"line":18035},[69,69120,56529],{"class":86},[69,69122,40],{"class":348},[69,69124,62278],{"class":86},[69,69126,187],{"class":348},[69,69128,62283],{"class":109},[69,69130,1019],{"class":86},[69,69132,65462],{"class":1022},[69,69134,55178],{"class":109},[69,69136,1019],{"class":86},[69,69138,4958],{"class":1022},[69,69140,65546],{"class":86},[69,69142,187],{"class":348},[69,69144,56541],{"class":86},[69,69146,40],{"class":348},[69,69148,1026],{"class":86},[69,69150,69151,69153,69155,69157,69159,69161,69163,69165,69167,69169,69171,69173,69175,69177,69179],{"class":71,"line":18040},[69,69152,56529],{"class":86},[69,69154,40],{"class":348},[69,69156,62278],{"class":86},[69,69158,187],{"class":348},[69,69160,62283],{"class":109},[69,69162,1019],{"class":86},[69,69164,65462],{"class":1022},[69,69166,55178],{"class":109},[69,69168,1019],{"class":86},[69,69170,4971],{"class":1022},[69,69172,65573],{"class":86},[69,69174,187],{"class":348},[69,69176,56541],{"class":86},[69,69178,40],{"class":348},[69,69180,1026],{"class":86},[69,69182,69183,69185,69187],{"class":71,"line":18054},[69,69184,56634],{"class":86},[69,69186,162],{"class":348},[69,69188,1026],{"class":86},[69,69190,69191,69193,69195],{"class":71,"line":18059},[69,69192,53006],{"class":86},[69,69194,442],{"class":348},[69,69196,1026],{"class":86},[69,69198,69199,69201,69203,69205,69207,69209],{"class":71,"line":18065},[69,69200,52574],{"class":86},[69,69202,442],{"class":348},[69,69204,1016],{"class":109},[69,69206,1019],{"class":86},[69,69208,65610],{"class":1022},[69,69210,1026],{"class":86},[69,69212,69213,69215,69217,69219,69221,69223,69225,69227,69229,69231,69233,69235,69237,69239,69241,69243],{"class":71,"line":18070},[69,69214,56461],{"class":86},[69,69216,442],{"class":348},[69,69218,1016],{"class":109},[69,69220,1019],{"class":86},[69,69222,65625],{"class":1022},[69,69224,62278],{"class":86},[69,69226,24],{"class":348},[69,69228,56466],{"class":109},[69,69230,1019],{"class":86},[69,69232,65636],{"class":1022},[69,69234,56474],{"class":109},[69,69236,1019],{"class":86},[69,69238,8894],{"class":1022},[69,69240,65645],{"class":86},[69,69242,442],{"class":348},[69,69244,1026],{"class":86},[69,69246,69247,69249,69251,69253,69255,69257,69259,69261,69263,69265,69267,69269,69271,69273,69275,69277],{"class":71,"line":18084},[69,69248,56461],{"class":86},[69,69250,442],{"class":348},[69,69252,1016],{"class":109},[69,69254,1019],{"class":86},[69,69256,63849],{"class":1022},[69,69258,62278],{"class":86},[69,69260,24],{"class":348},[69,69262,56466],{"class":109},[69,69264,1019],{"class":86},[69,69266,65672],{"class":1022},[69,69268,56474],{"class":109},[69,69270,1019],{"class":86},[69,69272,8894],{"class":1022},[69,69274,65645],{"class":86},[69,69276,442],{"class":348},[69,69278,1026],{"class":86},[69,69280,69281,69283,69285,69287,69289,69291,69293,69295,69297,69299,69301,69303,69305,69307,69309,69311],{"class":71,"line":18089},[69,69282,56461],{"class":86},[69,69284,442],{"class":348},[69,69286,1016],{"class":109},[69,69288,1019],{"class":86},[69,69290,63849],{"class":1022},[69,69292,62278],{"class":86},[69,69294,24],{"class":348},[69,69296,56466],{"class":109},[69,69298,1019],{"class":86},[69,69300,65707],{"class":1022},[69,69302,56474],{"class":109},[69,69304,1019],{"class":86},[69,69306,8894],{"class":1022},[69,69308,65645],{"class":86},[69,69310,442],{"class":348},[69,69312,1026],{"class":86},[69,69314,69315,69317,69319,69321,69323,69325,69327,69329,69331,69333,69335,69337,69339,69341,69343,69345],{"class":71,"line":18094},[69,69316,56461],{"class":86},[69,69318,442],{"class":348},[69,69320,1016],{"class":109},[69,69322,1019],{"class":86},[69,69324,63849],{"class":1022},[69,69326,62278],{"class":86},[69,69328,24],{"class":348},[69,69330,56466],{"class":109},[69,69332,1019],{"class":86},[69,69334,65742],{"class":1022},[69,69336,56474],{"class":109},[69,69338,1019],{"class":86},[69,69340,8894],{"class":1022},[69,69342,65645],{"class":86},[69,69344,442],{"class":348},[69,69346,1026],{"class":86},[69,69348,69349,69351,69353,69355,69357,69359,69361,69363,69365,69367,69369,69371,69373,69375,69377,69379],{"class":71,"line":18108},[69,69350,56461],{"class":86},[69,69352,442],{"class":348},[69,69354,1016],{"class":109},[69,69356,1019],{"class":86},[69,69358,63849],{"class":1022},[69,69360,62278],{"class":86},[69,69362,24],{"class":348},[69,69364,56466],{"class":109},[69,69366,1019],{"class":86},[69,69368,65777],{"class":1022},[69,69370,56474],{"class":109},[69,69372,1019],{"class":86},[69,69374,8894],{"class":1022},[69,69376,65645],{"class":86},[69,69378,442],{"class":348},[69,69380,1026],{"class":86},[69,69382,69383,69385,69387],{"class":71,"line":18120},[69,69384,53006],{"class":86},[69,69386,442],{"class":348},[69,69388,1026],{"class":86},[69,69390,69391,69393,69395],{"class":71,"line":18125},[69,69392,53645],{"class":86},[69,69394,442],{"class":348},[69,69396,1026],{"class":86},[69,69398,69399,69401,69403],{"class":71,"line":18138},[69,69400,53372],{"class":86},[69,69402,53041],{"class":348},[69,69404,1026],{"class":86},[69,69406,69407],{"class":71,"line":18143},[69,69408,69409],{"class":75},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[69,69411,69412],{"class":71,"line":18148},[69,69413,69414],{"class":75},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[69,69416,69417,69419,69421,69423,69425,69427,69429,69432],{"class":71,"line":18153},[69,69418,12463],{"class":82},[69,69420,62518],{"class":90},[69,69422,14805],{"class":82},[69,69424,55623],{"class":86},[69,69426,55626],{"class":109},[69,69428,1398],{"class":86},[69,69430,69431],{"class":1022},"'.tab-nav ul'",[69,69433,1404],{"class":86},[69,69435,69436],{"class":71,"line":18166},[69,69437,69438],{"class":75},"    \u002F\u002F 2.添加事件\n",[69,69440,69441,69443,69445,69447,69449,69451,69453,69455,69457],{"class":71,"line":18171},[69,69442,68180],{"class":86},[69,69444,59039],{"class":109},[69,69446,1398],{"class":86},[69,69448,59044],{"class":1022},[69,69450,13677],{"class":86},[69,69452,55676],{"class":82},[69,69454,87],{"class":86},[69,69456,1468],{"class":6458},[69,69458,103],{"class":86},[69,69460,69461,69463,69465],{"class":71,"line":33869},[69,69462,59470],{"class":86},[69,69464,68236],{"class":109},[69,69466,68239],{"class":86},[69,69468,69469],{"class":71,"line":33875},[69,69470,69471],{"class":75},"      \u002F\u002Fe.targer是我们点击的对象\n",[69,69473,69474,69476,69478,69480,69483],{"class":71,"line":33881},[69,69475,55707],{"class":82},[69,69477,68260],{"class":86},[69,69479,55713],{"class":82},[69,69481,69482],{"class":1022}," 'A'",[69,69484,103],{"class":86},[69,69486,69487,69489,69491,69493,69496,69498,69500,69502,69504],{"class":71,"line":33887},[69,69488,53153],{"class":86},[69,69490,55626],{"class":109},[69,69492,1398],{"class":86},[69,69494,69495],{"class":1022},"'.active'",[69,69497,58230],{"class":86},[69,69499,58233],{"class":109},[69,69501,1398],{"class":86},[69,69503,65940],{"class":1022},[69,69505,1404],{"class":86},[69,69507,69508,69511,69513,69515,69517],{"class":71,"line":33893},[69,69509,69510],{"class":86},"        e.target.classList.",[69,69512,6576],{"class":109},[69,69514,1398],{"class":86},[69,69516,65940],{"class":1022},[69,69518,1404],{"class":86},[69,69520,69521],{"class":71,"line":33904},[69,69522,3644],{"emptyLinePlaceholder":1325},[69,69524,69525],{"class":71,"line":33910},[69,69526,69527],{"class":75},"        \u002F\u002F 下面大盒子模块\n",[69,69529,69530],{"class":71,"line":33930},[69,69531,69532],{"class":75},"        \u002F\u002F console.log(e.target.dataset.id)\n",[69,69534,69535,69537,69539,69541,69543],{"class":71,"line":33936},[69,69536,62496],{"class":82},[69,69538,4276],{"class":90},[69,69540,14805],{"class":82},[69,69542,46802],{"class":82},[69,69544,69545],{"class":86},"e.target.dataset.id\n",[69,69547,69548,69550,69552,69554,69556,69558,69560,69562,69564],{"class":71,"line":33947},[69,69549,53153],{"class":86},[69,69551,55626],{"class":109},[69,69553,1398],{"class":86},[69,69555,65988],{"class":1022},[69,69557,58230],{"class":86},[69,69559,58233],{"class":109},[69,69561,1398],{"class":86},[69,69563,65940],{"class":1022},[69,69565,1404],{"class":86},[69,69567,69568,69570,69572,69574,69576,69578,69580,69582,69584,69586,69588,69590,69592],{"class":71,"line":33953},[69,69569,53153],{"class":86},[69,69571,55626],{"class":109},[69,69573,1398],{"class":86},[69,69575,66014],{"class":1022},[69,69577,1830],{"class":86},[69,69579,46802],{"class":82},[69,69581,26355],{"class":90},[69,69583,58259],{"class":1022},[69,69585,58230],{"class":86},[69,69587,6576],{"class":109},[69,69589,1398],{"class":86},[69,69591,65940],{"class":1022},[69,69593,1404],{"class":86},[69,69595,69596],{"class":71,"line":33959},[69,69597,3644],{"emptyLinePlaceholder":1325},[69,69599,69600],{"class":71,"line":33965},[69,69601,53626],{"class":86},[69,69603,69604],{"class":71,"line":33971},[69,69605,34697],{"class":86},[69,69607,69608,69610,69612],{"class":71,"line":33977},[69,69609,53645],{"class":86},[69,69611,53041],{"class":348},[69,69613,1026],{"class":86},[69,69615,69616,69618,69620],{"class":71,"line":33983},[69,69617,1036],{"class":86},[69,69619,680],{"class":348},[69,69621,1026],{"class":86},[69,69623,69624],{"class":71,"line":33989},[69,69625,3644],{"emptyLinePlaceholder":1325},[69,69627,69628,69630,69632],{"class":71,"line":34009},[69,69629,1036],{"class":86},[69,69631,349],{"class":348},[69,69633,1026],{"class":86},[19,69635,69637],{"id":69636},"_333-页面加载事件","3.3.3 页面加载事件",[37,69639,69640],{},[40,69641,69642],{},"load",[29,69644,69645],{},[24,69646],{"alt":64,"src":69647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[29,69649,69650],{},"window代表整个窗口，比document还要大",[29,69652,69653],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[29,69655,69656],{},"img.addEventListener('load', function () {",[29,69658,69659],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[29,69661,53692],{},[37,69663,69664],{"start":79},[40,69665,69666],{},"DOMContentLoaded",[29,69668,69669],{},[24,69670],{"alt":64,"src":69671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[29,69673,69674],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[19,69676,69678],{"id":69677},"_334-元素滚动事件","3.3.4 元素滚动事件",[29,69680,69681],{},[24,69682],{"alt":64,"src":69683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[29,69685,69686],{},[24,69687],{"alt":64,"src":69688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[29,69690,69691],{},[24,69692],{"alt":64,"src":69693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[29,69695,69696],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[29,69698,69699],{},"获得的是数字型数据，不带单位",[29,69701,69702],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[29,69704,69705],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[29,69707,69708],{},"它是通过document.documentElement来获取",[29,69710,69711],{},[24,69712],{"alt":64,"src":69713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[29,69715,69716],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[19,69718,69720],{"id":69719},"_335-页面缩放事件","3.3.5 页面缩放事件",[29,69722,69723],{},[24,69724],{"alt":64,"src":69725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[29,69727,69728],{},[24,69729],{"alt":64,"src":69730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[19,69732,69734],{"id":69733},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[29,69736,69737],{},[24,69738],{"alt":64,"src":69739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[29,69741,69742],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[29,69744,69745],{},[24,69746],{"alt":64,"src":69747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[29,69749,69750],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[29,69752,69753],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[29,69755,69756],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[29,69758,69759],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[29,69761,69762],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[29,69764,69765],{},[24,69766],{"alt":64,"src":69767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[29,69769,69770],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[29,69772,69773],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[29,69775,69776],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[29,69778,69779],{},"e.pageX-box.getBoundingClientRect()",[19,69781,69783],{"id":69782},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[29,69785,69786],{},[24,69787],{"alt":64,"src":69788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[29,69790,69791],{},"这个是相对于视口来说的，它是个方法，不是属性值",[19,69793,69795],{"id":69794},"_338-总结","3.3.8 总结",[29,69797,69798],{},[24,69799],{"alt":64,"src":69800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[29,69802,69803],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[29,69805,69806],{},"修改盒子的宽高只能通过width和height来实现",[19,69808,69810],{"id":69809},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[59,69812,69814],{"className":51869,"code":69813,"language":349,"meta":64,"style":64},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[66,69815,69816,69821,69826,69831,69836],{"__ignoreMap":64},[69,69817,69818],{"class":71,"line":72},[69,69819,69820],{"class":86},"\u002F* 页面滑动 *\u002F\n",[69,69822,69823],{"class":71,"line":79},[69,69824,69825],{"class":86},"html {\n",[69,69827,69828],{"class":71,"line":106},[69,69829,69830],{"class":86},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[69,69832,69833],{"class":71,"line":116},[69,69834,69835],{"class":86},"  scroll-behavior: smooth;\n",[69,69837,69838],{"class":71,"line":133},[69,69839,142],{"class":86},[29,69841,69842],{},"默认是auto",[19,69844,69846],{"id":69845},"_3310-日期对象","3.3.10 日期对象",[23237,69848,69850],{"id":69849},"_33101-实例化","3.3.10.1 实例化",[29,69852,69853],{},[24,69854],{"alt":64,"src":69855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23237,69857,69859],{"id":69858},"_33102-时期对象方法","3.3.10.2 时期对象方法",[29,69861,69862],{},[24,69863],{"alt":64,"src":69864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[29,69866,69867],{},"月份+1",[29,69869,69870],{},"老外认为第一天为0，星期天",[29,69872,69873],{},"方法使用的时候必须要跟括号",[29,69875,69876],{},"快速获得日期",[29,69878,69879],{},"\u002F\u002F 得到年月日",[29,69881,69882],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[29,69884,69885],{},"\u002F\u002F 得到当地日期",[29,69887,69888],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[29,69890,69891],{},"\u002F\u002F 得到当地时间",[29,69893,69894],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[29,69896,69897],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[29,69899,69900],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53041,69902,69903],{},"\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",[29,69905,69906],{},"学会去封装函数！",[23237,69908,69910],{"id":69909},"_33103-时间戳","3.3.10.3 时间戳",[29,69912,69913],{},[24,69914],{"alt":64,"src":69915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[29,69917,69918],{},[24,69919],{"alt":64,"src":69920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[29,69922,69923],{},"三种方法记住一个就可以",[19,69925,69927],{"id":69926},"_3311-节点操作","3.3.11 节点操作",[23237,69929,69931],{"id":69930},"_33111-dom节点","3.3.11.1 DOM节点",[29,69933,69934],{},[24,69935],{"alt":64,"src":69936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[29,69938,69939],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23237,69941,69943],{"id":69942},"_33112-查找节点","3.3.11.2 查找节点",[29,69945,69946],{},"前边的document.querySelector()是获取的元素",[29,69948,69949],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[29,69951,69952],{},[24,69953],{"alt":64,"src":69954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[37,69956,69957],{},[40,69958,69959],{},"父节点",[29,69961,69962],{},[24,69963],{"alt":64,"src":69964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[37,69966,69967],{"start":79},[40,69968,69969],{},"子节点",[29,69971,69972],{},[24,69973],{"alt":64,"src":69974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[29,69976,69977],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[29,69979,69980],{},"children获得的是伪数组，是亲儿子",[37,69982,69983],{"start":106},[40,69984,69985],{},"兄弟节点",[29,69987,69988],{},[24,69989],{"alt":64,"src":69990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23237,69992,69994],{"id":69993},"_33113-增加节点","3.3.11.3 增加节点",[29,69996,69997],{},[24,69998],{"alt":64,"src":69999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[29,70001,70002],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[29,70004,70005],{},[24,70006],{"alt":64,"src":70007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[29,70009,70010],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[29,70012,70013],{},"下面是写法的部分展示，就按照下边的格式来写",[29,70015,70016],{},"例：",[53041,70018,70019],{},"\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",[29,70021,70022],{},[24,70023],{"alt":64,"src":70024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[29,70026,70027],{},"false只克隆标签，里边的内容不会克隆过来",[59,70029,70031],{"className":51869,"code":70030,"language":349,"meta":64,"style":64},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[66,70032,70033],{"__ignoreMap":64},[69,70034,70035],{"class":71,"line":72},[69,70036,70030],{"class":86},[23237,70038,70040],{"id":70039},"_33114-删除节点","3.3.11.4 删除节点",[29,70042,70043],{},[24,70044],{"alt":64,"src":70045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[29,70047,70048],{},"父亲删儿子",[29,70050,70051],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[19,70053,70055],{"id":70054},"_3312-m端事件","3.3.12 M端事件",[29,70057,70058],{},"M端就是移动端",[29,70060,70061],{},[24,70062],{"alt":64,"src":70063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[19,70065,70067],{"id":70066},"_3313-插件","3.3.13 插件",[29,70069,70070],{},"要熟悉官网！！！",[29,70072,70073],{},[187,70074,70075],{"href":70075,"rel":70076},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[191],[29,70078,70079],{},[187,70080,70081],{"href":70081,"rel":70082},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[191],[19,70084,70086],{"id":70085},"_3314-学生信息表","3.3.14 学生信息表",[37,70088,70089,70092,70095,70098,70101,70104,70107,70110],{},[40,70090,70091],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[40,70093,70094],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[40,70096,70097],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[40,70099,70100],{},"用好表单元素自带的属性，value,name等",[40,70102,70103],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[40,70105,70106],{},"不要忘记事件对象",[40,70108,70109],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[40,70111,70112],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[29,70114,1181],{},[59,70116,70118],{"className":51869,"code":70117,"language":349,"meta":64,"style":64},"\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",[66,70119,70120,70130,70144,70148,70156,70170,70190,70211,70224,70248,70256,70260,70268,70281,70302,70330,70358,70363,70385,70405,70424,70432,70460,70482,70502,70522,70542,70562,70582,70590,70610,70618,70622,70635,70643,70651,70659,70672,70685,70698,70711,70724,70737,70750,70758,70766,70774,70779,70784,70789,70794,70799,70804,70809,70814,70819,70824,70829,70834,70839,70847,70855,70863,70867,70887,70906,70926,70946,70966,70986,70990,70995,71015,71020,71030,71035,71040,71060,71082,71087,71097,71101,71105,71110,71115,71144,71158,71173,71177,71181,71185,71190,71201,71214,71219,71224,71229,71234,71239,71243,71248,71253,71262,71267,71272,71284,71289,71296,71300,71305,71315,71320,71330,71335,71363,71384,71394,71414,71432,71449,71466,71483,71500,71504,71514,71519,71524,71529,71540,71544,71548,71552,71557,71562,71583,71595,71600,71605,71610,71624,71629,71636,71640,71644,71652,71656,71664,71668],{"__ignoreMap":64},[69,70121,70122,70124,70126,70128],{"class":71,"line":72},[69,70123,52532],{"class":86},[69,70125,52535],{"class":348},[69,70127,52538],{"class":109},[69,70129,1026],{"class":86},[69,70131,70132,70134,70136,70138,70140,70142],{"class":71,"line":79},[69,70133,1011],{"class":86},[69,70135,349],{"class":348},[69,70137,52549],{"class":109},[69,70139,1019],{"class":86},[69,70141,52554],{"class":1022},[69,70143,1026],{"class":86},[69,70145,70146],{"class":71,"line":106},[69,70147,3644],{"emptyLinePlaceholder":1325},[69,70149,70150,70152,70154],{"class":71,"line":116},[69,70151,1011],{"class":86},[69,70153,52567],{"class":348},[69,70155,1026],{"class":86},[69,70157,70158,70160,70162,70164,70166,70168],{"class":71,"line":133},[69,70159,53372],{"class":86},[69,70161,52577],{"class":348},[69,70163,52580],{"class":109},[69,70165,1019],{"class":86},[69,70167,52585],{"class":1022},[69,70169,60353],{"class":86},[69,70171,70172,70174,70176,70178,70180,70182,70184,70186,70188],{"class":71,"line":139},[69,70173,53372],{"class":86},[69,70175,52577],{"class":348},[69,70177,16160],{"class":109},[69,70179,1019],{"class":86},[69,70181,52624],{"class":1022},[69,70183,52604],{"class":109},[69,70185,1019],{"class":86},[69,70187,52631],{"class":1022},[69,70189,60353],{"class":86},[69,70191,70192,70194,70196,70198,70200,70202,70204,70206,70209],{"class":71,"line":401},[69,70193,53372],{"class":86},[69,70195,52577],{"class":348},[69,70197,52596],{"class":109},[69,70199,1019],{"class":86},[69,70201,52601],{"class":1022},[69,70203,52604],{"class":109},[69,70205,1019],{"class":86},[69,70207,70208],{"class":1022},"\"ie=edge\"",[69,70210,60353],{"class":86},[69,70212,70213,70215,70217,70220,70222],{"class":71,"line":470},[69,70214,53372],{"class":86},[69,70216,52640],{"class":348},[69,70218,70219],{"class":86},">学生信息管理\u003C\u002F",[69,70221,52640],{"class":348},[69,70223,1026],{"class":86},[69,70225,70226,70228,70231,70234,70236,70239,70241,70243,70246],{"class":71,"line":475},[69,70227,53372],{"class":86},[69,70229,70230],{"class":348},"link",[69,70232,70233],{"class":109}," rel",[69,70235,1019],{"class":86},[69,70237,70238],{"class":1022},"\"stylesheet\"",[69,70240,62283],{"class":109},[69,70242,1019],{"class":86},[69,70244,70245],{"class":1022},"\"css\u002Findex.css\"",[69,70247,60353],{"class":86},[69,70249,70250,70252,70254],{"class":71,"line":482},[69,70251,1036],{"class":86},[69,70253,52567],{"class":348},[69,70255,1026],{"class":86},[69,70257,70258],{"class":71,"line":497},[69,70259,3644],{"emptyLinePlaceholder":1325},[69,70261,70262,70264,70266],{"class":71,"line":502},[69,70263,1011],{"class":86},[69,70265,680],{"class":348},[69,70267,1026],{"class":86},[69,70269,70270,70272,70274,70277,70279],{"class":71,"line":509},[69,70271,53372],{"class":86},[69,70273,10],{"class":348},[69,70275,70276],{"class":86},">新增学员\u003C\u002F",[69,70278,10],{"class":348},[69,70280,1026],{"class":86},[69,70282,70283,70285,70287,70289,70291,70293,70296,70298,70300],{"class":71,"line":524},[69,70284,53372],{"class":86},[69,70286,67851],{"class":348},[69,70288,1016],{"class":109},[69,70290,1019],{"class":86},[69,70292,63890],{"class":1022},[69,70294,70295],{"class":109}," autocomplete",[69,70297,1019],{"class":86},[69,70299,33012],{"class":1022},[69,70301,1026],{"class":86},[69,70303,70304,70307,70309,70311,70313,70315,70317,70319,70322,70324,70326,70328],{"class":71,"line":2888},[69,70305,70306],{"class":86},"    姓名：\u003C",[69,70308,55048],{"class":348},[69,70310,55051],{"class":109},[69,70312,1019],{"class":86},[69,70314,63925],{"class":1022},[69,70316,1016],{"class":109},[69,70318,1019],{"class":86},[69,70320,70321],{"class":1022},"\"uname\"",[69,70323,16160],{"class":109},[69,70325,1019],{"class":86},[69,70327,70321],{"class":1022},[69,70329,60353],{"class":86},[69,70331,70332,70335,70337,70339,70341,70343,70345,70347,70350,70352,70354,70356],{"class":71,"line":2893},[69,70333,70334],{"class":86},"    年龄：\u003C",[69,70336,55048],{"class":348},[69,70338,55051],{"class":109},[69,70340,1019],{"class":86},[69,70342,63925],{"class":1022},[69,70344,1016],{"class":109},[69,70346,1019],{"class":86},[69,70348,70349],{"class":1022},"\"age\"",[69,70351,16160],{"class":109},[69,70353,1019],{"class":86},[69,70355,70349],{"class":1022},[69,70357,60353],{"class":86},[69,70359,70360],{"class":71,"line":2899},[69,70361,70362],{"class":86},"    性别:\n",[69,70364,70365,70367,70370,70372,70374,70377,70379,70381,70383],{"class":71,"line":2919},[69,70366,52574],{"class":86},[69,70368,70369],{"class":348},"select",[69,70371,16160],{"class":109},[69,70373,1019],{"class":86},[69,70375,70376],{"class":1022},"\"gender\"",[69,70378,1016],{"class":109},[69,70380,1019],{"class":86},[69,70382,70376],{"class":1022},[69,70384,1026],{"class":86},[69,70386,70387,70389,70392,70394,70396,70398,70401,70403],{"class":71,"line":2924},[69,70388,56461],{"class":86},[69,70390,70391],{"class":348},"option",[69,70393,67877],{"class":109},[69,70395,1019],{"class":86},[69,70397,11203],{"class":1022},[69,70399,70400],{"class":86},">男\u003C\u002F",[69,70402,70391],{"class":348},[69,70404,1026],{"class":86},[69,70406,70407,70409,70411,70413,70415,70417,70420,70422],{"class":71,"line":2938},[69,70408,56461],{"class":86},[69,70410,70391],{"class":348},[69,70412,67877],{"class":109},[69,70414,1019],{"class":86},[69,70416,11272],{"class":1022},[69,70418,70419],{"class":86},">女\u003C\u002F",[69,70421,70391],{"class":348},[69,70423,1026],{"class":86},[69,70425,70426,70428,70430],{"class":71,"line":2943},[69,70427,53006],{"class":86},[69,70429,70369],{"class":348},[69,70431,1026],{"class":86},[69,70433,70434,70437,70439,70441,70443,70445,70447,70449,70452,70454,70456,70458],{"class":71,"line":2972},[69,70435,70436],{"class":86},"    薪资：\u003C",[69,70438,55048],{"class":348},[69,70440,55051],{"class":109},[69,70442,1019],{"class":86},[69,70444,63925],{"class":1022},[69,70446,1016],{"class":109},[69,70448,1019],{"class":86},[69,70450,70451],{"class":1022},"\"salary\"",[69,70453,16160],{"class":109},[69,70455,1019],{"class":86},[69,70457,70451],{"class":1022},[69,70459,60353],{"class":86},[69,70461,70462,70465,70467,70469,70471,70474,70476,70478,70480],{"class":71,"line":2977},[69,70463,70464],{"class":86},"    就业城市：\u003C",[69,70466,70369],{"class":348},[69,70468,16160],{"class":109},[69,70470,1019],{"class":86},[69,70472,70473],{"class":1022},"\"city\"",[69,70475,1016],{"class":109},[69,70477,1019],{"class":86},[69,70479,70473],{"class":1022},[69,70481,1026],{"class":86},[69,70483,70484,70486,70488,70490,70492,70495,70498,70500],{"class":71,"line":2994},[69,70485,56461],{"class":86},[69,70487,70391],{"class":348},[69,70489,67877],{"class":109},[69,70491,1019],{"class":86},[69,70493,70494],{"class":1022},"\"北京\"",[69,70496,70497],{"class":86},">北京\u003C\u002F",[69,70499,70391],{"class":348},[69,70501,1026],{"class":86},[69,70503,70504,70506,70508,70510,70512,70515,70518,70520],{"class":71,"line":2999},[69,70505,56461],{"class":86},[69,70507,70391],{"class":348},[69,70509,67877],{"class":109},[69,70511,1019],{"class":86},[69,70513,70514],{"class":1022},"\"上海\"",[69,70516,70517],{"class":86},">上海\u003C\u002F",[69,70519,70391],{"class":348},[69,70521,1026],{"class":86},[69,70523,70524,70526,70528,70530,70532,70535,70538,70540],{"class":71,"line":3004},[69,70525,56461],{"class":86},[69,70527,70391],{"class":348},[69,70529,67877],{"class":109},[69,70531,1019],{"class":86},[69,70533,70534],{"class":1022},"\"广州\"",[69,70536,70537],{"class":86},">广州\u003C\u002F",[69,70539,70391],{"class":348},[69,70541,1026],{"class":86},[69,70543,70544,70546,70548,70550,70552,70555,70558,70560],{"class":71,"line":3009},[69,70545,56461],{"class":86},[69,70547,70391],{"class":348},[69,70549,67877],{"class":109},[69,70551,1019],{"class":86},[69,70553,70554],{"class":1022},"\"深圳\"",[69,70556,70557],{"class":86},">深圳\u003C\u002F",[69,70559,70391],{"class":348},[69,70561,1026],{"class":86},[69,70563,70564,70566,70568,70570,70572,70575,70578,70580],{"class":71,"line":3023},[69,70565,56461],{"class":86},[69,70567,70391],{"class":348},[69,70569,67877],{"class":109},[69,70571,1019],{"class":86},[69,70573,70574],{"class":1022},"\"曹县\"",[69,70576,70577],{"class":86},">曹县\u003C\u002F",[69,70579,70391],{"class":348},[69,70581,1026],{"class":86},[69,70583,70584,70586,70588],{"class":71,"line":3028},[69,70585,53006],{"class":86},[69,70587,70369],{"class":348},[69,70589,1026],{"class":86},[69,70591,70592,70594,70596,70598,70600,70603,70606,70608],{"class":71,"line":3821},[69,70593,52574],{"class":86},[69,70595,55114],{"class":348},[69,70597,1016],{"class":109},[69,70599,1019],{"class":86},[69,70601,70602],{"class":1022},"\"add\"",[69,70604,70605],{"class":86},">录入\u003C\u002F",[69,70607,55114],{"class":348},[69,70609,1026],{"class":86},[69,70611,70612,70614,70616],{"class":71,"line":3835},[69,70613,53645],{"class":86},[69,70615,67851],{"class":348},[69,70617,1026],{"class":86},[69,70619,70620],{"class":71,"line":3843},[69,70621,3644],{"emptyLinePlaceholder":1325},[69,70623,70624,70626,70628,70631,70633],{"class":71,"line":3848},[69,70625,53372],{"class":86},[69,70627,10],{"class":348},[69,70629,70630],{"class":86},">就业榜\u003C\u002F",[69,70632,10],{"class":348},[69,70634,1026],{"class":86},[69,70636,70637,70639,70641],{"class":71,"line":3854},[69,70638,53372],{"class":86},[69,70640,1530],{"class":348},[69,70642,1026],{"class":86},[69,70644,70645,70647,70649],{"class":71,"line":3860},[69,70646,52574],{"class":86},[69,70648,1533],{"class":348},[69,70650,1026],{"class":86},[69,70652,70653,70655,70657],{"class":71,"line":3865},[69,70654,56461],{"class":86},[69,70656,1536],{"class":348},[69,70658,1026],{"class":86},[69,70660,70661,70663,70665,70668,70670],{"class":71,"line":9190},[69,70662,56529],{"class":86},[69,70664,1539],{"class":348},[69,70666,70667],{"class":86},">序号\u003C\u002F",[69,70669,1539],{"class":348},[69,70671,1026],{"class":86},[69,70673,70674,70676,70678,70681,70683],{"class":71,"line":9214},[69,70675,56529],{"class":86},[69,70677,1539],{"class":348},[69,70679,70680],{"class":86},">姓名\u003C\u002F",[69,70682,1539],{"class":348},[69,70684,1026],{"class":86},[69,70686,70687,70689,70691,70694,70696],{"class":71,"line":9219},[69,70688,56529],{"class":86},[69,70690,1539],{"class":348},[69,70692,70693],{"class":86},">年龄\u003C\u002F",[69,70695,1539],{"class":348},[69,70697,1026],{"class":86},[69,70699,70700,70702,70704,70707,70709],{"class":71,"line":9225},[69,70701,56529],{"class":86},[69,70703,1539],{"class":348},[69,70705,70706],{"class":86},">性别\u003C\u002F",[69,70708,1539],{"class":348},[69,70710,1026],{"class":86},[69,70712,70713,70715,70717,70720,70722],{"class":71,"line":9252},[69,70714,56529],{"class":86},[69,70716,1539],{"class":348},[69,70718,70719],{"class":86},">薪资\u003C\u002F",[69,70721,1539],{"class":348},[69,70723,1026],{"class":86},[69,70725,70726,70728,70730,70733,70735],{"class":71,"line":9257},[69,70727,56529],{"class":86},[69,70729,1539],{"class":348},[69,70731,70732],{"class":86},">就业城市\u003C\u002F",[69,70734,1539],{"class":348},[69,70736,1026],{"class":86},[69,70738,70739,70741,70743,70746,70748],{"class":71,"line":9263},[69,70740,56529],{"class":86},[69,70742,1539],{"class":348},[69,70744,70745],{"class":86},">操作\u003C\u002F",[69,70747,1539],{"class":348},[69,70749,1026],{"class":86},[69,70751,70752,70754,70756],{"class":71,"line":9275},[69,70753,56634],{"class":86},[69,70755,1536],{"class":348},[69,70757,1026],{"class":86},[69,70759,70760,70762,70764],{"class":71,"line":9287},[69,70761,53006],{"class":86},[69,70763,1533],{"class":348},[69,70765,1026],{"class":86},[69,70767,70768,70770,70772],{"class":71,"line":9299},[69,70769,52574],{"class":86},[69,70771,1576],{"class":348},[69,70773,1026],{"class":86},[69,70775,70776],{"class":71,"line":10958},[69,70777,70778],{"class":75},"      \u003C!-- \n",[69,70780,70781],{"class":71,"line":10983},[69,70782,70783],{"class":75},"        \u003Ctr>\n",[69,70785,70786],{"class":71,"line":11006},[69,70787,70788],{"class":75},"          \u003Ctd>1001\u003C\u002Ftd>\n",[69,70790,70791],{"class":71,"line":11030},[69,70792,70793],{"class":75},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[69,70795,70796],{"class":71,"line":11035},[69,70797,70798],{"class":75},"          \u003Ctd>19\u003C\u002Ftd>\n",[69,70800,70801],{"class":71,"line":11040},[69,70802,70803],{"class":75},"          \u003Ctd>男\u003C\u002Ftd>\n",[69,70805,70806],{"class":71,"line":11045},[69,70807,70808],{"class":75},"          \u003Ctd>15000\u003C\u002Ftd>\n",[69,70810,70811],{"class":71,"line":11054},[69,70812,70813],{"class":75},"          \u003Ctd>上海\u003C\u002Ftd>\n",[69,70815,70816],{"class":71,"line":11059},[69,70817,70818],{"class":75},"          \u003Ctd>\n",[69,70820,70821],{"class":71,"line":11065},[69,70822,70823],{"class":75},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[69,70825,70826],{"class":71,"line":11086},[69,70827,70828],{"class":75},"          \u003C\u002Ftd>\n",[69,70830,70831],{"class":71,"line":11092},[69,70832,70833],{"class":75},"        \u003C\u002Ftr> \n",[69,70835,70836],{"class":71,"line":11106},[69,70837,70838],{"class":75},"        -->\n",[69,70840,70841,70843,70845],{"class":71,"line":11112},[69,70842,53006],{"class":86},[69,70844,1576],{"class":348},[69,70846,1026],{"class":86},[69,70848,70849,70851,70853],{"class":71,"line":11139},[69,70850,53645],{"class":86},[69,70852,1530],{"class":348},[69,70854,1026],{"class":86},[69,70856,70857,70859,70861],{"class":71,"line":11148},[69,70858,53372],{"class":86},[69,70860,53041],{"class":348},[69,70862,1026],{"class":86},[69,70864,70865],{"class":71,"line":11154},[69,70866,61184],{"class":75},[69,70868,70869,70871,70874,70876,70878,70880,70882,70885],{"class":71,"line":11162},[69,70870,12463],{"class":82},[69,70872,70873],{"class":90}," uname",[69,70875,14805],{"class":82},[69,70877,55623],{"class":86},[69,70879,55626],{"class":109},[69,70881,1398],{"class":86},[69,70883,70884],{"class":1022},"'.uname'",[69,70886,1404],{"class":86},[69,70888,70889,70891,70893,70895,70897,70899,70901,70904],{"class":71,"line":11167},[69,70890,12463],{"class":82},[69,70892,16928],{"class":90},[69,70894,14805],{"class":82},[69,70896,55623],{"class":86},[69,70898,55626],{"class":109},[69,70900,1398],{"class":86},[69,70902,70903],{"class":1022},"'.age'",[69,70905,1404],{"class":86},[69,70907,70908,70910,70913,70915,70917,70919,70921,70924],{"class":71,"line":17843},[69,70909,12463],{"class":82},[69,70911,70912],{"class":90}," gender",[69,70914,14805],{"class":82},[69,70916,55623],{"class":86},[69,70918,55626],{"class":109},[69,70920,1398],{"class":86},[69,70922,70923],{"class":1022},"'.gender'",[69,70925,1404],{"class":86},[69,70927,70928,70930,70933,70935,70937,70939,70941,70944],{"class":71,"line":17849},[69,70929,12463],{"class":82},[69,70931,70932],{"class":90}," salary",[69,70934,14805],{"class":82},[69,70936,55623],{"class":86},[69,70938,55626],{"class":109},[69,70940,1398],{"class":86},[69,70942,70943],{"class":1022},"'.salary'",[69,70945,1404],{"class":86},[69,70947,70948,70950,70953,70955,70957,70959,70961,70964],{"class":71,"line":17872},[69,70949,12463],{"class":82},[69,70951,70952],{"class":90}," city",[69,70954,14805],{"class":82},[69,70956,55623],{"class":86},[69,70958,55626],{"class":109},[69,70960,1398],{"class":86},[69,70962,70963],{"class":1022},"'.city'",[69,70965,1404],{"class":86},[69,70967,70968,70970,70973,70975,70977,70979,70981,70984],{"class":71,"line":17878},[69,70969,12463],{"class":82},[69,70971,70972],{"class":90}," tbody",[69,70974,14805],{"class":82},[69,70976,55623],{"class":86},[69,70978,55626],{"class":109},[69,70980,1398],{"class":86},[69,70982,70983],{"class":1022},"'tbody'",[69,70985,1404],{"class":86},[69,70987,70988],{"class":71,"line":17901},[69,70989,3644],{"emptyLinePlaceholder":1325},[69,70991,70992],{"class":71,"line":17915},[69,70993,70994],{"class":75},"    \u002F\u002F 获取所有带有name属性的元素\n",[69,70996,70997,70999,71002,71004,71006,71008,71010,71013],{"class":71,"line":17935},[69,70998,12463],{"class":82},[69,71000,71001],{"class":90}," items",[69,71003,14805],{"class":82},[69,71005,55623],{"class":86},[69,71007,56908],{"class":109},[69,71009,1398],{"class":86},[69,71011,71012],{"class":1022},"'[name]'",[69,71014,1404],{"class":86},[69,71016,71017],{"class":71,"line":17941},[69,71018,71019],{"class":75},"    \u002F\u002F 声明一个空的数组\n",[69,71021,71022,71024,71026,71028],{"class":71,"line":17952},[69,71023,12463],{"class":82},[69,71025,58921],{"class":90},[69,71027,14805],{"class":82},[69,71029,53066],{"class":86},[69,71031,71032],{"class":71,"line":17975},[69,71033,71034],{"class":75},"    \u002F\u002F 1.录入模块\n",[69,71036,71037],{"class":71,"line":17997},[69,71038,71039],{"class":75},"    \u002F\u002F 1.1这是一个表单提交事件\n",[69,71041,71042,71044,71047,71049,71051,71053,71055,71058],{"class":71,"line":18002},[69,71043,12463],{"class":82},[69,71045,71046],{"class":90}," info",[69,71048,14805],{"class":82},[69,71050,55623],{"class":86},[69,71052,55626],{"class":109},[69,71054,1398],{"class":86},[69,71056,71057],{"class":1022},"'.info'",[69,71059,1404],{"class":86},[69,71061,71062,71065,71067,71069,71072,71074,71076,71078,71080],{"class":71,"line":18008},[69,71063,71064],{"class":86},"    info.",[69,71066,59039],{"class":109},[69,71068,1398],{"class":86},[69,71070,71071],{"class":1022},"'submit'",[69,71073,13677],{"class":86},[69,71075,55676],{"class":82},[69,71077,87],{"class":86},[69,71079,1468],{"class":6458},[69,71081,103],{"class":86},[69,71083,71084],{"class":71,"line":18022},[69,71085,71086],{"class":75},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[69,71088,71089,71092,71095],{"class":71,"line":18035},[69,71090,71091],{"class":86},"      e.",[69,71093,71094],{"class":109},"preventDefault",[69,71096,3220],{"class":86},[69,71098,71099],{"class":71,"line":18040},[69,71100,61238],{"class":75},[69,71102,71103],{"class":71,"line":18054},[69,71104,3644],{"emptyLinePlaceholder":1325},[69,71106,71107],{"class":71,"line":18059},[69,71108,71109],{"class":75},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[69,71111,71112],{"class":71,"line":18065},[69,71113,71114],{"class":75},"      \u002F\u002F 先遍历循环\n",[69,71116,71117,71119,71121,71123,71125,71127,71129,71131,71133,71136,71138,71140,71142],{"class":71,"line":18070},[69,71118,53512],{"class":82},[69,71120,87],{"class":86},[69,71122,53075],{"class":82},[69,71124,10680],{"class":86},[69,71126,1019],{"class":82},[69,71128,5337],{"class":90},[69,71130,10687],{"class":86},[69,71132,1011],{"class":82},[69,71134,71135],{"class":86}," items.",[69,71137,53196],{"class":90},[69,71139,4458],{"class":86},[69,71141,3536],{"class":82},[69,71143,103],{"class":86},[69,71145,71146,71148,71151,71153,71156],{"class":71,"line":18084},[69,71147,3741],{"class":82},[69,71149,71150],{"class":86}," (items[i].value ",[69,71152,55713],{"class":82},[69,71154,71155],{"class":1022}," ''",[69,71157,103],{"class":86},[69,71159,71160,71163,71166,71168,71171],{"class":71,"line":18089},[69,71161,71162],{"class":82},"          return",[69,71164,71165],{"class":109}," alert",[69,71167,1398],{"class":86},[69,71169,71170],{"class":1022},"'输入内容不能为空'",[69,71172,1404],{"class":86},[69,71174,71175],{"class":71,"line":18094},[69,71176,3773],{"class":86},[69,71178,71179],{"class":71,"line":18108},[69,71180,53626],{"class":86},[69,71182,71183],{"class":71,"line":18120},[69,71184,3644],{"emptyLinePlaceholder":1325},[69,71186,71187],{"class":71,"line":18125},[69,71188,71189],{"class":75},"      \u002F\u002F 创建新的对象\n",[69,71191,71192,71194,71197,71199],{"class":71,"line":18138},[69,71193,59454],{"class":82},[69,71195,71196],{"class":90}," obj",[69,71198,14805],{"class":82},[69,71200,113],{"class":86},[69,71202,71203,71206,71208,71210,71212],{"class":71,"line":18143},[69,71204,71205],{"class":86},"        stuID: arr.",[69,71207,53196],{"class":90},[69,71209,46802],{"class":82},[69,71211,26355],{"class":90},[69,71213,32702],{"class":86},[69,71215,71216],{"class":71,"line":18148},[69,71217,71218],{"class":86},"        uname: uname.value,\n",[69,71220,71221],{"class":71,"line":18153},[69,71222,71223],{"class":86},"        age: age.value,\n",[69,71225,71226],{"class":71,"line":18166},[69,71227,71228],{"class":86},"        gender: gender.value,\n",[69,71230,71231],{"class":71,"line":18171},[69,71232,71233],{"class":86},"        salary: salary.value,\n",[69,71235,71236],{"class":71,"line":33869},[69,71237,71238],{"class":86},"        city: city.value\n",[69,71240,71241],{"class":71,"line":33875},[69,71242,53626],{"class":86},[69,71244,71245],{"class":71,"line":33881},[69,71246,71247],{"class":75},"      \u002F\u002F console.log(obj);\n",[69,71249,71250],{"class":71,"line":33887},[69,71251,71252],{"class":75},"      \u002F\u002F 追加到数组里面\n",[69,71254,71255,71257,71259],{"class":71,"line":33893},[69,71256,59233],{"class":86},[69,71258,53112],{"class":109},[69,71260,71261],{"class":86},"(obj)\n",[69,71263,71264],{"class":71,"line":33904},[69,71265,71266],{"class":75},"      \u002F\u002F console.log(arr);\n",[69,71268,71269],{"class":71,"line":33910},[69,71270,71271],{"class":75},"      \u002F\u002F 清空表单  reset重置表单\n",[69,71273,71274,71277,71279,71282],{"class":71,"line":33930},[69,71275,71276],{"class":90},"      this",[69,71278,1946],{"class":86},[69,71280,71281],{"class":109},"reset",[69,71283,3220],{"class":86},[69,71285,71286],{"class":71,"line":33936},[69,71287,71288],{"class":75},"      \u002F\u002F 调用渲染函数\n",[69,71290,71291,71294],{"class":71,"line":33947},[69,71292,71293],{"class":109},"      render",[69,71295,3220],{"class":86},[69,71297,71298],{"class":71,"line":33953},[69,71299,34697],{"class":86},[69,71301,71302],{"class":71,"line":33959},[69,71303,71304],{"class":75},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[69,71306,71307,71310,71313],{"class":71,"line":33965},[69,71308,71309],{"class":82},"    function",[69,71311,71312],{"class":109}," render",[69,71314,12095],{"class":86},[69,71316,71317],{"class":71,"line":33971},[69,71318,71319],{"class":75},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[69,71321,71322,71325,71327],{"class":71,"line":33977},[69,71323,71324],{"class":86},"      tbody.innerHTML ",[69,71326,1019],{"class":82},[69,71328,71329],{"class":1022}," ''\n",[69,71331,71332],{"class":71,"line":33983},[69,71333,71334],{"class":75},"      \u002F\u002F 遍历数组\n",[69,71336,71337,71339,71341,71343,71345,71347,71349,71351,71353,71355,71357,71359,71361],{"class":71,"line":33989},[69,71338,53512],{"class":82},[69,71340,87],{"class":86},[69,71342,53075],{"class":82},[69,71344,10680],{"class":86},[69,71346,1019],{"class":82},[69,71348,5337],{"class":90},[69,71350,10687],{"class":86},[69,71352,1011],{"class":82},[69,71354,53193],{"class":86},[69,71356,53196],{"class":90},[69,71358,4458],{"class":86},[69,71360,3536],{"class":82},[69,71362,103],{"class":86},[69,71364,71365,71367,71370,71372,71374,71377,71379,71382],{"class":71,"line":34009},[69,71366,62496],{"class":82},[69,71368,71369],{"class":90}," tr",[69,71371,14805],{"class":82},[69,71373,55623],{"class":86},[69,71375,71376],{"class":109},"createElement",[69,71378,1398],{"class":86},[69,71380,71381],{"class":1022},"'tr'",[69,71383,1404],{"class":86},[69,71385,71386,71389,71391],{"class":71,"line":34015},[69,71387,71388],{"class":86},"        tr.innerHTML ",[69,71390,1019],{"class":82},[69,71392,71393],{"class":1022}," `\n",[69,71395,71396,71399,71401,71403,71405,71408,71411],{"class":71,"line":34031},[69,71397,71398],{"class":1022},"        \u003Ctd>${",[69,71400,5124],{"class":86},[69,71402,2277],{"class":1022},[69,71404,1830],{"class":86},[69,71406,71407],{"class":1022},"].",[69,71409,71410],{"class":86},"stuID",[69,71412,71413],{"class":1022},"}\u003C\u002Ftd>\n",[69,71415,71416,71419,71421,71423,71425,71427,71430],{"class":71,"line":34037},[69,71417,71418],{"class":1022},"          \u003Ctd>${",[69,71420,5124],{"class":86},[69,71422,2277],{"class":1022},[69,71424,1830],{"class":86},[69,71426,71407],{"class":1022},[69,71428,71429],{"class":86},"uname",[69,71431,71413],{"class":1022},[69,71433,71434,71436,71438,71440,71442,71444,71447],{"class":71,"line":34051},[69,71435,71418],{"class":1022},[69,71437,5124],{"class":86},[69,71439,2277],{"class":1022},[69,71441,1830],{"class":86},[69,71443,71407],{"class":1022},[69,71445,71446],{"class":86},"age",[69,71448,71413],{"class":1022},[69,71450,71451,71453,71455,71457,71459,71461,71464],{"class":71,"line":34057},[69,71452,71418],{"class":1022},[69,71454,5124],{"class":86},[69,71456,2277],{"class":1022},[69,71458,1830],{"class":86},[69,71460,71407],{"class":1022},[69,71462,71463],{"class":86},"gender",[69,71465,71413],{"class":1022},[69,71467,71468,71470,71472,71474,71476,71478,71481],{"class":71,"line":34072},[69,71469,71418],{"class":1022},[69,71471,5124],{"class":86},[69,71473,2277],{"class":1022},[69,71475,1830],{"class":86},[69,71477,71407],{"class":1022},[69,71479,71480],{"class":86},"salary",[69,71482,71413],{"class":1022},[69,71484,71485,71487,71489,71491,71493,71495,71498],{"class":71,"line":34078},[69,71486,71418],{"class":1022},[69,71488,5124],{"class":86},[69,71490,2277],{"class":1022},[69,71492,1830],{"class":86},[69,71494,71407],{"class":1022},[69,71496,71497],{"class":86},"city",[69,71499,71413],{"class":1022},[69,71501,71502],{"class":71,"line":34087},[69,71503,70818],{"class":1022},[69,71505,71506,71509,71511],{"class":71,"line":34093},[69,71507,71508],{"class":1022},"            \u003Ca href=\"javascript:\" data-id=${",[69,71510,1830],{"class":86},[69,71512,71513],{"class":1022},"}>删除\u003C\u002Fa>\n",[69,71515,71516],{"class":71,"line":34102},[69,71517,71518],{"class":1022},"          \u003C\u002Ftd> \n",[69,71520,71521],{"class":71,"line":34108},[69,71522,71523],{"class":1022},"          `\n",[69,71525,71526],{"class":71,"line":34114},[69,71527,71528],{"class":75},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[69,71530,71531,71534,71537],{"class":71,"line":34123},[69,71532,71533],{"class":86},"        tbody.",[69,71535,71536],{"class":109},"appendChild",[69,71538,71539],{"class":86},"(tr)\n",[69,71541,71542],{"class":71,"line":34129},[69,71543,53626],{"class":86},[69,71545,71546],{"class":71,"line":34140},[69,71547,3431],{"class":86},[69,71549,71550],{"class":71,"line":34146},[69,71551,3644],{"emptyLinePlaceholder":1325},[69,71553,71554],{"class":71,"line":34165},[69,71555,71556],{"class":75},"    \u002F\u002F 3.删除委托\n",[69,71558,71559],{"class":71,"line":34171},[69,71560,71561],{"class":75},"    \u002F\u002F 3.1 事件委托 tbody\n",[69,71563,71564,71567,71569,71571,71573,71575,71577,71579,71581],{"class":71,"line":34182},[69,71565,71566],{"class":86},"    tbody.",[69,71568,59039],{"class":109},[69,71570,1398],{"class":86},[69,71572,59044],{"class":1022},[69,71574,13677],{"class":86},[69,71576,55676],{"class":82},[69,71578,87],{"class":86},[69,71580,1468],{"class":6458},[69,71582,103],{"class":86},[69,71584,71585,71587,71589,71591,71593],{"class":71,"line":34188},[69,71586,55707],{"class":82},[69,71588,68260],{"class":86},[69,71590,55713],{"class":82},[69,71592,69482],{"class":1022},[69,71594,103],{"class":86},[69,71596,71597],{"class":71,"line":34208},[69,71598,71599],{"class":75},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[69,71601,71602],{"class":71,"line":34224},[69,71603,71604],{"class":75},"        \u002F\u002F console.log(e.target.dataset.id);\n",[69,71606,71607],{"class":71,"line":34230},[69,71608,71609],{"class":75},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[69,71611,71612,71615,71617,71620,71622],{"class":71,"line":34244},[69,71613,71614],{"class":86},"        arr.",[69,71616,59236],{"class":109},[69,71618,71619],{"class":86},"(e.target.dataset.id, ",[69,71621,1609],{"class":90},[69,71623,1404],{"class":86},[69,71625,71626],{"class":71,"line":34250},[69,71627,71628],{"class":75},"        \u002F\u002F 重新渲染一次\n",[69,71630,71631,71634],{"class":71,"line":34256},[69,71632,71633],{"class":109},"        render",[69,71635,3220],{"class":86},[69,71637,71638],{"class":71,"line":34267},[69,71639,53626],{"class":86},[69,71641,71642],{"class":71,"line":34273},[69,71643,34697],{"class":86},[69,71645,71646,71648,71650],{"class":71,"line":34279},[69,71647,53645],{"class":86},[69,71649,53041],{"class":348},[69,71651,1026],{"class":86},[69,71653,71654],{"class":71,"line":34289},[69,71655,3644],{"emptyLinePlaceholder":1325},[69,71657,71658,71660,71662],{"class":71,"line":34295},[69,71659,1036],{"class":86},[69,71661,680],{"class":348},[69,71663,1026],{"class":86},[69,71665,71666],{"class":71,"line":34306},[69,71667,3644],{"emptyLinePlaceholder":1325},[69,71669,71670,71672,71674],{"class":71,"line":34312},[69,71671,1036],{"class":86},[69,71673,349],{"class":348},[69,71675,1026],{"class":86},[29,71677,1211],{},[59,71679,71683],{"className":71680,"code":71681,"language":71682,"meta":64,"style":64},"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",[66,71684,71685,71690,71700,71709,71713,71717,71722,71732,71737,71741,71746,71756,71761,71770,71774,71778,71783,71788,71797,71807,71812,71816,71821,71830,71840,71845,71854,71864,71868,71873,71881,71885,71890,71895,71900,71908,71917,71921,71926,71935,71939,71944,71953,71957,71962,71971,71980,71988,71992,71997,72006,72016,72025,72035,72041,72050,72060,72070,72074,72079,72088,72096,72106,72114,72123,72131,72141,72149,72153,72158,72167],{"__ignoreMap":64},[69,71686,71687],{"class":71,"line":72},[69,71688,71689],{"class":86},"* {\n",[69,71691,71692,71695,71697],{"class":71,"line":79},[69,71693,71694],{"class":348},"  margin",[69,71696,94],{"class":86},[69,71698,71699],{"class":1022},"0;\n",[69,71701,71702,71705,71707],{"class":71,"line":106},[69,71703,71704],{"class":1022},"  padding",[69,71706,94],{"class":86},[69,71708,71699],{"class":1022},[69,71710,71711],{"class":71,"line":116},[69,71712,142],{"class":86},[69,71714,71715],{"class":71,"line":133},[69,71716,3644],{"emptyLinePlaceholder":1325},[69,71718,71719],{"class":71,"line":139},[69,71720,71721],{"class":1022},"a {\n",[69,71723,71724,71727,71729],{"class":71,"line":401},[69,71725,71726],{"class":348},"  text-decoration",[69,71728,94],{"class":86},[69,71730,71731],{"class":1022},"none;\n",[69,71733,71734],{"class":71,"line":470},[69,71735,71736],{"class":1022},"  color:#721c24;\n",[69,71738,71739],{"class":71,"line":475},[69,71740,142],{"class":86},[69,71742,71743],{"class":71,"line":482},[69,71744,71745],{"class":1022},"h1 {\n",[69,71747,71748,71751,71753],{"class":71,"line":497},[69,71749,71750],{"class":348},"  text-align",[69,71752,94],{"class":86},[69,71754,71755],{"class":1022},"center;\n",[69,71757,71758],{"class":71,"line":502},[69,71759,71760],{"class":1022},"  color:#333;\n",[69,71762,71763,71765,71767],{"class":71,"line":509},[69,71764,71694],{"class":348},[69,71766,94],{"class":86},[69,71768,71769],{"class":1022},"20px 0;\n",[69,71771,71772],{"class":71,"line":524},[69,71773,3918],{"class":86},[69,71775,71776],{"class":71,"line":2888},[69,71777,142],{"class":86},[69,71779,71780],{"class":71,"line":2893},[69,71781,71782],{"class":1022},"table {\n",[69,71784,71785],{"class":71,"line":2899},[69,71786,71787],{"class":1022},"  margin:0 auto;\n",[69,71789,71790,71792,71794],{"class":71,"line":2919},[69,71791,385],{"class":348},[69,71793,94],{"class":86},[69,71795,71796],{"class":1022},"800px;\n",[69,71798,71799,71802,71804],{"class":71,"line":2924},[69,71800,71801],{"class":348},"  border-collapse",[69,71803,94],{"class":86},[69,71805,71806],{"class":1022},"collapse;\n",[69,71808,71809],{"class":71,"line":2938},[69,71810,71811],{"class":1022},"  color:#004085;\n",[69,71813,71814],{"class":71,"line":2943},[69,71815,142],{"class":86},[69,71817,71818],{"class":71,"line":2972},[69,71819,71820],{"class":1022},"th {\n",[69,71822,71823,71825,71827],{"class":71,"line":2977},[69,71824,71704],{"class":348},[69,71826,94],{"class":86},[69,71828,71829],{"class":1022},"10px;\n",[69,71831,71832,71835,71837],{"class":71,"line":2994},[69,71833,71834],{"class":348},"  background",[69,71836,94],{"class":86},[69,71838,71839],{"class":75},"#cfe5ff;\n",[69,71841,71842],{"class":71,"line":2999},[69,71843,71844],{"class":86},"  \n",[69,71846,71847,71849,71851],{"class":71,"line":3004},[69,71848,356],{"class":348},[69,71850,94],{"class":86},[69,71852,71853],{"class":1022},"20px;\n",[69,71855,71856,71859,71861],{"class":71,"line":3009},[69,71857,71858],{"class":348},"  font-weight",[69,71860,94],{"class":86},[69,71862,71863],{"class":1022},"400;\n",[69,71865,71866],{"class":71,"line":3023},[69,71867,142],{"class":86},[69,71869,71870],{"class":71,"line":3028},[69,71871,71872],{"class":1022},"td,th {\n",[69,71874,71875,71878],{"class":71,"line":3821},[69,71876,71877],{"class":1022},"  border:1px solid",[69,71879,71880],{"class":75}," #b8daff;\n",[69,71882,71883],{"class":71,"line":3835},[69,71884,142],{"class":86},[69,71886,71887],{"class":71,"line":3843},[69,71888,71889],{"class":1022},"td {\n",[69,71891,71892],{"class":71,"line":3848},[69,71893,71894],{"class":1022},"  padding:10px;\n",[69,71896,71897],{"class":71,"line":3854},[69,71898,71899],{"class":1022},"  color:#666;\n",[69,71901,71902,71904,71906],{"class":71,"line":3860},[69,71903,71750],{"class":348},[69,71905,94],{"class":86},[69,71907,71755],{"class":1022},[69,71909,71910,71912,71914],{"class":71,"line":3865},[69,71911,356],{"class":348},[69,71913,94],{"class":86},[69,71915,71916],{"class":1022},"16px;\n",[69,71918,71919],{"class":71,"line":9190},[69,71920,142],{"class":86},[69,71922,71923],{"class":71,"line":9214},[69,71924,71925],{"class":1022},"tbody tr {\n",[69,71927,71928,71930,71932],{"class":71,"line":9219},[69,71929,71834],{"class":348},[69,71931,94],{"class":86},[69,71933,71934],{"class":75},"#fff;\n",[69,71936,71937],{"class":71,"line":9225},[69,71938,142],{"class":86},[69,71940,71941],{"class":71,"line":9252},[69,71942,71943],{"class":1022},"tbody tr:hover {\n",[69,71945,71946,71948,71950],{"class":71,"line":9257},[69,71947,71834],{"class":348},[69,71949,94],{"class":86},[69,71951,71952],{"class":75},"#e1ecf8;\n",[69,71954,71955],{"class":71,"line":9263},[69,71956,142],{"class":86},[69,71958,71959],{"class":71,"line":9275},[69,71960,71961],{"class":1022},".info {\n",[69,71963,71964,71966,71968],{"class":71,"line":9287},[69,71965,385],{"class":348},[69,71967,94],{"class":86},[69,71969,71970],{"class":1022},"900px;\n",[69,71972,71973,71975,71977],{"class":71,"line":9299},[69,71974,71694],{"class":348},[69,71976,94],{"class":86},[69,71978,71979],{"class":1022},"50px auto;\n",[69,71981,71982,71984,71986],{"class":71,"line":10958},[69,71983,71750],{"class":348},[69,71985,94],{"class":86},[69,71987,71755],{"class":1022},[69,71989,71990],{"class":71,"line":10983},[69,71991,142],{"class":86},[69,71993,71994],{"class":71,"line":11006},[69,71995,71996],{"class":1022},".info  input, .info select {\n",[69,71998,71999,72001,72003],{"class":71,"line":11030},[69,72000,385],{"class":348},[69,72002,94],{"class":86},[69,72004,72005],{"class":1022},"80px;\n",[69,72007,72008,72011,72013],{"class":71,"line":11035},[69,72009,72010],{"class":348},"  height",[69,72012,94],{"class":86},[69,72014,72015],{"class":1022},"27px;\n",[69,72017,72018,72021,72023],{"class":71,"line":11040},[69,72019,72020],{"class":348},"  outline",[69,72022,94],{"class":86},[69,72024,71731],{"class":1022},[69,72026,72027,72030,72032],{"class":71,"line":11045},[69,72028,72029],{"class":348},"  border-radius",[69,72031,94],{"class":86},[69,72033,72034],{"class":1022},"5px;\n",[69,72036,72037,72039],{"class":71,"line":11054},[69,72038,71877],{"class":1022},[69,72040,71880],{"class":75},[69,72042,72043,72046,72048],{"class":71,"line":11059},[69,72044,72045],{"class":348},"  padding-left",[69,72047,94],{"class":86},[69,72049,72034],{"class":1022},[69,72051,72052,72055,72057],{"class":71,"line":11065},[69,72053,72054],{"class":348},"  box-sizing",[69,72056,94],{"class":86},[69,72058,72059],{"class":1022},"border-box;\n",[69,72061,72062,72065,72067],{"class":71,"line":11086},[69,72063,72064],{"class":348},"  margin-right",[69,72066,94],{"class":86},[69,72068,72069],{"class":1022},"15px;\n",[69,72071,72072],{"class":71,"line":11092},[69,72073,142],{"class":86},[69,72075,72076],{"class":71,"line":11106},[69,72077,72078],{"class":1022},".info button {\n",[69,72080,72081,72083,72085],{"class":71,"line":11112},[69,72082,385],{"class":348},[69,72084,94],{"class":86},[69,72086,72087],{"class":1022},"60px;\n",[69,72089,72090,72092,72094],{"class":71,"line":11139},[69,72091,72010],{"class":348},[69,72093,94],{"class":86},[69,72095,72015],{"class":1022},[69,72097,72098,72101,72103],{"class":71,"line":11148},[69,72099,72100],{"class":348},"  background-color",[69,72102,94],{"class":86},[69,72104,72105],{"class":75},"#004085;\n",[69,72107,72108,72110,72112],{"class":71,"line":11154},[69,72109,72020],{"class":348},[69,72111,94],{"class":86},[69,72113,71731],{"class":1022},[69,72115,72116,72119,72121],{"class":71,"line":11162},[69,72117,72118],{"class":348},"  border",[69,72120,94],{"class":86},[69,72122,71699],{"class":1022},[69,72124,72125,72127,72129],{"class":71,"line":11167},[69,72126,871],{"class":348},[69,72128,94],{"class":86},[69,72130,71934],{"class":75},[69,72132,72133,72136,72138],{"class":71,"line":17843},[69,72134,72135],{"class":348},"  cursor",[69,72137,94],{"class":86},[69,72139,72140],{"class":1022},"pointer;\n",[69,72142,72143,72145,72147],{"class":71,"line":17849},[69,72144,72029],{"class":348},[69,72146,94],{"class":86},[69,72148,72034],{"class":1022},[69,72150,72151],{"class":71,"line":17872},[69,72152,142],{"class":86},[69,72154,72155],{"class":71,"line":17878},[69,72156,72157],{"class":1022},".info .age {\n",[69,72159,72160,72162,72164],{"class":71,"line":17901},[69,72161,385],{"class":348},[69,72163,94],{"class":86},[69,72165,72166],{"class":1022},"50px;\n",[69,72168,72169],{"class":71,"line":17915},[69,72170,142],{"class":86},[29,72172,72173],{},"思路：",[29,72175,72176],{},[24,72177],{"alt":64,"src":72178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[29,72180,72181],{},[24,72182],{"alt":64,"src":72183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[29,72185,72186],{},[24,72187],{"alt":64,"src":72188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[19,72190,72192],{"id":72191},"_3315-重绘回流","3.3.15 重绘回流",[29,72194,72195],{},[24,72196],{"alt":64,"src":72197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[29,72199,72200],{},[24,72201],{"alt":64,"src":72202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[29,72204,72205],{},[24,72206],{"alt":64,"src":72207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72209,72211],{"id":72210},"_34-bom","3.4 BOM",[29,72213,72214],{},[24,72215],{"alt":64,"src":72216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[29,72218,72219],{},"平时写的document省略了window而已，实际上是window.document",[29,72221,72222],{},"函数也是这样，调用的时候实际为window.fn()",[29,72224,72225],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[29,72227,72228],{},"window大部分情况下可以省略",[19,72230,72232],{"id":72231},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[29,72234,72235],{},"只执行一次",[29,72237,72238],{},[24,72239],{"alt":64,"src":72240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[29,72242,72243],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[29,72245,72246],{},[24,72247],{"alt":64,"src":72248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[19,72250,72252],{"id":72251},"_342-js执行机制","3.4.2 JS执行机制",[29,72254,72255],{},[24,72256],{"alt":64,"src":72257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[29,72259,72260],{},"两个的结果都是1111 3333 2222",[29,72262,72263],{},[24,72264],{"alt":64,"src":72265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[29,72267,72268],{},[24,72269],{"alt":64,"src":72270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[29,72272,72273],{},[24,72274],{"alt":64,"src":72275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[29,72277,72278],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[29,72280,72281],{},"工作流程：",[29,72283,72284],{},[24,72285],{"alt":64,"src":72286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[29,72288,72289],{},[24,72290],{"alt":64,"src":72291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[29,72293,72294],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[29,72296,72297],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[19,72299,72301],{"id":72300},"_343-location对象","3.4.3 location对象",[29,72303,72304],{},"location对象属于window这个全局对象下的，可以 省略window",[29,72306,72307],{},[24,72308],{"alt":64,"src":72309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[29,72311,72312],{},"href可以跳转页面",[37,72314,72315],{},[40,72316,72317],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[29,72319,72320],{},"search得到提交信息之后网站后边的地址",[29,72322,72323],{},[24,72324],{"alt":64,"src":72325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[29,72327,72328],{},[24,72329],{"alt":64,"src":72330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[37,72332,72333],{"start":79},[40,72334,72335],{},"hash:这个获取单页面应用#后边的地址",[29,72337,72338],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[29,72340,72341],{},[24,72342],{"alt":64,"src":72343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[59,72345,72347],{"className":54295,"code":72346,"language":54297,"meta":64,"style":64},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[66,72348,72349,72369,72389],{"__ignoreMap":64},[69,72350,72351,72353,72355,72357,72359,72362,72365,72367],{"class":71,"line":72},[69,72352,53372],{"class":86},[69,72354,187],{"class":348},[69,72356,62283],{"class":109},[69,72358,1019],{"class":86},[69,72360,72361],{"class":1022},"\"#\u002Fmy\"",[69,72363,72364],{"class":86},">我的\u003C\u002F",[69,72366,187],{"class":348},[69,72368,1026],{"class":86},[69,72370,72371,72373,72375,72377,72379,72382,72385,72387],{"class":71,"line":79},[69,72372,53372],{"class":86},[69,72374,187],{"class":348},[69,72376,62283],{"class":109},[69,72378,1019],{"class":86},[69,72380,72381],{"class":1022},"\"#\u002Ffriend\"",[69,72383,72384],{"class":86},">关注\u003C\u002F",[69,72386,187],{"class":348},[69,72388,1026],{"class":86},[69,72390,72391,72393,72395,72397,72399,72402,72405,72407],{"class":71,"line":106},[69,72392,53372],{"class":86},[69,72394,187],{"class":348},[69,72396,62283],{"class":109},[69,72398,1019],{"class":86},[69,72400,72401],{"class":1022},"\"#\u002Fdownload\"",[69,72403,72404],{"class":86},">下载\u003C\u002F",[69,72406,187],{"class":348},[69,72408,1026],{"class":86},[29,72410,72411],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[37,72413,72414],{"start":106},[40,72415,72416,72417,72419,72420,72422],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54943,72418],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54943,72421],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[19,72424,72426],{"id":72425},"_345-navigator对象","3.4.5 navigator对象",[29,72428,72429],{},[24,72430],{"alt":64,"src":72431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[59,72433,72437],{"className":72434,"code":72435,"language":72436,"meta":64,"style":64},"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",[66,72438,72439,72444,72455,72467,72472,72523,72564,72569,72582,72594,72599],{"__ignoreMap":64},[69,72440,72441],{"class":71,"line":72},[69,72442,72443],{"class":75},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[69,72445,72446,72448,72450,72452],{"class":71,"line":79},[69,72447,1618],{"class":82},[69,72449,1398],{"class":86},[69,72451,55676],{"class":82},[69,72453,72454],{"class":86}," () { \n",[69,72456,72457,72459,72462,72464],{"class":71,"line":106},[69,72458,8034],{"class":82},[69,72460,72461],{"class":90}," userAgent",[69,72463,14805],{"class":82},[69,72465,72466],{"class":86}," navigator.userAgent \n",[69,72468,72469],{"class":71,"line":116},[69,72470,72471],{"class":75},"\u002F\u002F 验证是否为Android或iPhone \n",[69,72473,72474,72476,72479,72481,72484,72487,72489,72491,72494,72496,72499,72503,72505,72507,72509,72512,72514,72516,72518,72520],{"class":71,"line":133},[69,72475,8034],{"class":82},[69,72477,72478],{"class":90}," android",[69,72480,14805],{"class":82},[69,72482,72483],{"class":86}," userAgent.",[69,72485,72486],{"class":109},"match",[69,72488,1398],{"class":86},[69,72490,1972],{"class":1022},[69,72492,72493],{"class":49213},"(Android);",[69,72495,2372],{"class":82},[69,72497,72498],{"class":90},"[\\s",[69,72500,72502],{"class":72501},"snhLl","\\\u002F",[69,72504,2326],{"class":90},[69,72506,1869],{"class":82},[69,72508,1398],{"class":49213},[69,72510,72511],{"class":90},"[\\d.]",[69,72513,1869],{"class":82},[69,72515,1818],{"class":49213},[69,72517,2372],{"class":82},[69,72519,1972],{"class":1022},[69,72521,72522],{"class":86},") \n",[69,72524,72525,72527,72530,72532,72534,72536,72538,72540,72543,72546,72549,72551,72553,72556,72558,72560,72562],{"class":71,"line":139},[69,72526,8034],{"class":82},[69,72528,72529],{"class":90}," iphone",[69,72531,14805],{"class":82},[69,72533,72483],{"class":86},[69,72535,72486],{"class":109},[69,72537,1398],{"class":86},[69,72539,1972],{"class":1022},[69,72541,72542],{"class":49213},"(iPhone",[69,72544,72545],{"class":90},"\\s",[69,72547,72548],{"class":49213},"OS)",[69,72550,72545],{"class":90},[69,72552,1398],{"class":49213},[69,72554,72555],{"class":90},"[\\d_]",[69,72557,1869],{"class":82},[69,72559,1818],{"class":49213},[69,72561,1972],{"class":1022},[69,72563,72522],{"class":86},[69,72565,72566],{"class":71,"line":401},[69,72567,72568],{"class":75},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[69,72570,72571,72573,72576,72579],{"class":71,"line":470},[69,72572,2782],{"class":82},[69,72574,72575],{"class":86}," (android ",[69,72577,72578],{"class":82},"||",[69,72580,72581],{"class":86}," iphone) { \n",[69,72583,72584,72587,72589,72592],{"class":71,"line":475},[69,72585,72586],{"class":86},"location.href ",[69,72588,1019],{"class":82},[69,72590,72591],{"class":1022}," 'http:\u002F\u002Fm.itcast.cn'",[69,72593,3918],{"class":86},[69,72595,72596],{"class":71,"line":482},[69,72597,72598],{"class":86},"} \n",[69,72600,72601],{"class":71,"line":497},[69,72602,72603],{"class":86},"})()\n",[19,72605,72607],{"id":72606},"_346-histroy对象","3.4.6 histroy对象",[29,72609,72610],{},[24,72611],{"alt":64,"src":72612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[29,72614,72615],{},"浏览器地址的前进与后退!!!",[29,72617,72618],{},"history.back() 等效于 history.go(-1)",[29,72620,72621],{},"history.forward() 等效于 history.go(1)",[14,72623,72625],{"id":72624},"_35-本地存储","3.5 本地存储",[37,72627,72628,72631,72634],{},[40,72629,72630],{},"数据存储在用户浏览器中",[40,72632,72633],{},"设置、读取方便、甚至页面刷新不丢失数据",[40,72635,72636],{},"容量较大，sessionStorage和localStorage约 5M 左右",[19,72638,72640],{"id":72639},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[29,72642,72643],{},"只能存储字符串",[29,72645,72646],{},[24,72647],{"alt":64,"src":72648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[29,72650,72651],{},[24,72652],{"alt":64,"src":72653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[29,72655,72656],{},"键值对要加引号,不然就会当变量来看了",[29,72658,72659],{},"localStorage.setItem('uname', 'pink')",[29,72661,72662],{},"刷新之后信息不再丢失",[29,72664,72665],{},"操作key,value会跟着变",[29,72667,72668],{},"删除只删除键就可以,即名字",[29,72670,72659],{},[29,72672,72673],{},"改:",[29,72675,72676],{},"localStorage.setItem('uname','red')",[29,72678,72679],{},"有这个键就是改,没有这个键就是改",[29,72681,72682],{},[24,72683],{"alt":64,"src":72684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[29,72686,72687],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[29,72689,72690],{},[24,72691],{"alt":64,"src":72692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[29,72694,72695],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[19,72697,72699],{"id":72698},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[29,72701,72702],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[29,72704,72705],{},"特性:",[37,72707,72708,72711,72714,72717],{},[40,72709,72710],{},"生命周期为关闭浏览器窗口",[40,72712,72713],{},"在同一个窗口(页面)下数据可以共享",[40,72715,72716],{},"以键值对的形式存储使用",[40,72718,72719],{},"用法跟localStorage 基本相同",[19,72721,72723],{"id":72722},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[29,72725,72726],{},"本地只能存储字符串,无法直接存储复杂数据类型",[59,72728,72730],{"className":54295,"code":72729,"language":54297,"meta":64,"style":64},"\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",[66,72731,72732,72740,72745,72750,72755,72760,72764,72769,72774],{"__ignoreMap":64},[69,72733,72734,72736,72738],{"class":71,"line":72},[69,72735,1011],{"class":86},[69,72737,53041],{"class":348},[69,72739,1026],{"class":86},[69,72741,72742],{"class":71,"line":79},[69,72743,72744],{"class":86},"    const obj = {\n",[69,72746,72747],{"class":71,"line":106},[69,72748,72749],{"class":86},"      uname: 'pink老师',\n",[69,72751,72752],{"class":71,"line":116},[69,72753,72754],{"class":86},"      age: 18,\n",[69,72756,72757],{"class":71,"line":133},[69,72758,72759],{"class":86},"      gender: '女'\n",[69,72761,72762],{"class":71,"line":139},[69,72763,3431],{"class":86},[69,72765,72766],{"class":71,"line":401},[69,72767,72768],{"class":86},"    \u002F\u002F 存储复杂数据类型\n",[69,72770,72771],{"class":71,"line":470},[69,72772,72773],{"class":86},"    localStorage.setItem('obj', obj)\n",[69,72775,72776,72778,72780],{"class":71,"line":475},[69,72777,53645],{"class":86},[69,72779,53041],{"class":348},[69,72781,1026],{"class":86},[29,72783,72784],{},[24,72785],{"alt":64,"src":72786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[29,72788,72789],{},"如果获取一下数据:",[29,72791,72792],{},"log(localStorage.getItem('obj'))",[29,72794,72795],{},[24,72796],{"alt":64,"src":72797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[29,72799,72800],{},"发现直接存对象是使用不了的!!!",[23237,72802,72804],{"id":72803},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[29,72806,72807],{},[24,72808],{"alt":64,"src":72809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[59,72811,72813],{"className":51869,"code":72812,"language":349,"meta":64,"style":64},"\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",[66,72814,72815,72823,72833,72843,72852,72860,72864,72868,72894,72913,72921,72925,72930,72935],{"__ignoreMap":64},[69,72816,72817,72819,72821],{"class":71,"line":72},[69,72818,1011],{"class":86},[69,72820,53041],{"class":348},[69,72822,1026],{"class":86},[69,72824,72825,72827,72829,72831],{"class":71,"line":79},[69,72826,12463],{"class":82},[69,72828,71196],{"class":90},[69,72830,14805],{"class":82},[69,72832,113],{"class":86},[69,72834,72835,72838,72841],{"class":71,"line":106},[69,72836,72837],{"class":86},"      uname: ",[69,72839,72840],{"class":1022},"'pink老师'",[69,72842,32702],{"class":86},[69,72844,72845,72848,72850],{"class":71,"line":116},[69,72846,72847],{"class":86},"      age: ",[69,72849,2037],{"class":90},[69,72851,32702],{"class":86},[69,72853,72854,72857],{"class":71,"line":133},[69,72855,72856],{"class":86},"      gender: ",[69,72858,72859],{"class":1022},"'女'\n",[69,72861,72862],{"class":71,"line":139},[69,72863,3431],{"class":86},[69,72865,72866],{"class":71,"line":401},[69,72867,72768],{"class":75},[69,72869,72870,72873,72876,72878,72881,72883,72886,72888,72891],{"class":71,"line":470},[69,72871,72872],{"class":86},"  localStorage.",[69,72874,72875],{"class":109},"setItem",[69,72877,1398],{"class":86},[69,72879,72880],{"class":1022},"'obj'",[69,72882,13677],{"class":86},[69,72884,72885],{"class":90},"JSON",[69,72887,1946],{"class":86},[69,72889,72890],{"class":109},"stringify",[69,72892,72893],{"class":86},"(obj))\n",[69,72895,72896,72899,72901,72904,72907,72909,72911],{"class":71,"line":475},[69,72897,72898],{"class":86},"  console.",[69,72900,59473],{"class":109},[69,72902,72903],{"class":86},"(localStorage.",[69,72905,72906],{"class":109},"getItem",[69,72908,1398],{"class":86},[69,72910,72880],{"class":1022},[69,72912,31733],{"class":86},[69,72914,72915,72917,72919],{"class":71,"line":482},[69,72916,53645],{"class":86},[69,72918,53041],{"class":348},[69,72920,1026],{"class":86},[69,72922,72923],{"class":71,"line":497},[69,72924,71844],{"class":86},[69,72926,72927],{"class":71,"line":502},[69,72928,72929],{"class":86},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[69,72931,72932],{"class":71,"line":509},[69,72933,72934],{"class":86},"  类型是字符串的\n",[69,72936,72937],{"class":71,"line":524},[69,72938,72939],{"class":86},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23237,72941,72943],{"id":72942},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[29,72945,72946],{},[24,72947],{"alt":64,"src":72948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[29,72950,72951],{},[24,72952],{"alt":64,"src":72953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[59,72955,72957],{"className":54295,"code":72956,"language":54297,"meta":64,"style":64},"  \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",[66,72958,72959,72967,72971,72975,72979,72983,72987,72992,72997,73002,73007,73012,73017,73022,73027],{"__ignoreMap":64},[69,72960,72961,72963,72965],{"class":71,"line":72},[69,72962,53372],{"class":86},[69,72964,53041],{"class":348},[69,72966,1026],{"class":86},[69,72968,72969],{"class":71,"line":79},[69,72970,72744],{"class":86},[69,72972,72973],{"class":71,"line":106},[69,72974,72749],{"class":86},[69,72976,72977],{"class":71,"line":116},[69,72978,72754],{"class":86},[69,72980,72981],{"class":71,"line":133},[69,72982,72759],{"class":86},[69,72984,72985],{"class":71,"line":139},[69,72986,3431],{"class":86},[69,72988,72989],{"class":71,"line":401},[69,72990,72991],{"class":86},"    \u002F\u002F 1.存储复杂数据类型\n",[69,72993,72994],{"class":71,"line":470},[69,72995,72996],{"class":86},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[69,72998,72999],{"class":71,"line":475},[69,73000,73001],{"class":86},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[69,73003,73004],{"class":71,"line":482},[69,73005,73006],{"class":86},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[69,73008,73009],{"class":71,"line":497},[69,73010,73011],{"class":86},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[69,73013,73014],{"class":71,"line":502},[69,73015,73016],{"class":86},"    \u002F\u002F 取\n",[69,73018,73019],{"class":71,"line":509},[69,73020,73021],{"class":86},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[69,73023,73024],{"class":71,"line":524},[69,73025,73026],{"class":86},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[69,73028,73029,73031,73033],{"class":71,"line":2888},[69,73030,53645],{"class":86},[69,73032,53041],{"class":348},[69,73034,1026],{"class":86},[29,73036,73037],{},[24,73038],{"alt":64,"src":73039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[19,73041,73043],{"id":73042},"_356-数组map方法","3.5.6 数组map方法",[29,73045,73046],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[29,73048,73049],{},[24,73050],{"alt":64,"src":73051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[29,73053,73054],{},[24,73055],{"alt":64,"src":73056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[29,73058,73059,73062],{},[195,73060,73061],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[29,73064,73065],{},"map有返回值，但是forEach没有返回值",[29,73067,73068],{},"map是个方法。用的时候要加 ()",[29,73070,73071],{},"map返回的是一个数组",[19,73073,73075],{"id":73074},"_357-数组中join方法","3.5.7 数组中join方法",[29,73077,73078],{},[24,73079],{"alt":64,"src":73080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[29,73082,73083],{},"类似于python中拼接字符串一样！",[37,73085,73086,73089,73092],{},[40,73087,73088],{},"小括号为空则逗号分开",[40,73090,73091],{},"小括号为空字符串 ''，则元素之间没有分隔符",[40,73093,73094],{},"小括号用啥符号就用进行分割",[19,73096,73098],{"id":73097},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[37,73100,73101,73104,73107,73110,73113],{},[40,73102,73103],{},"记住本地时间获取快速方式：new Date().toDateString()",[40,73105,73106],{},"尽量减少DOM操作，用好map+join的渲染方式",[40,73108,73109],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[40,73111,73112],{},"return可以实现函数的结束",[40,73114,73115],{},"禁止跳转是 preventDefault() 不要忘记",[59,73117,73119],{"className":51869,"code":73118,"language":349,"meta":64,"style":64},"\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",[66,73120,73121,73131,73145,73149,73157,73171,73191,73203,73211,73217,73227,73237,73241,73245,73251,73261,73273,73277,73281,73288,73300,73314,73324,73328,73332,73339,73346,73353,73365,73377,73387,73399,73403,73407,73414,73421,73433,73445,73455,73467,73497,73501,73505,73512,73524,73536,73560,73570,73580,73584,73588,73596,73607,73619,73631,73643,73660,73672,73684,73688,73692,73699,73711,73723,73735,73746,73764,73777,73789,73813,73824,73828,73832,73840,73850,73854,73858,73864,73876,73887,73897,73901,73905,73911,73933,73937,73941,73947,73953,73965,73975,73987,74017,74030,74047,74051,74055,74066,74088,74098,74102,74106,74119,74129,74141,74153,74165,74177,74187,74197,74207,74218,74231,74235,74243,74251,74255,74263,74276,74296,74329,74362,74395,74421,74439,74457,74465,74491,74509,74527,74545,74563,74581,74589,74597,74615,74623,74652,74660,74668,74676,74689,74701,74713,74725,74737,74749,74762,74774,74782,74790,74798,74803,74808,74812,74816,74820,74824,74828,74832,74837,74842,74847,74852,74860,74868,74876,74881,74886,74891,74896,74901,74906,74911,74916,74921,74926,74931,74936,74941,74946,74950,74955,74960,74970,74979,74983,74988,74997,75013,75055,75095,75134,75199,75207,75211,75216,75234,75242,75247,75252,75282,75288,75293,75306,75318,75330,75342,75354,75366,75378,75382,75392,75396,75401,75406,75410,75419,75423,75428,75433,75452,75457,75477,75481,75486,75490,75495,75513,75531,75549,75568,75587,75606,75611,75617,75638,75644,75653,75659,75665,75671,75698,75711,75716,75726,75732,75738,75744,75750,75755,75761,75767,75773,75779,75812,75817,75822,75827,75832,75838,75844,75850,75861,75866,75872,75879,75893,75899,75923,75928,75933,75939,75945,75966,75972,75985,75991,75997,76003,76009,76014,76020,76026,76032,76050,76064,76070,76078,76084,76106,76111,76116,76121,76126,76131,76140,76149,76154],{"__ignoreMap":64},[69,73122,73123,73125,73127,73129],{"class":71,"line":72},[69,73124,52532],{"class":86},[69,73126,52535],{"class":348},[69,73128,52538],{"class":109},[69,73130,1026],{"class":86},[69,73132,73133,73135,73137,73139,73141,73143],{"class":71,"line":79},[69,73134,1011],{"class":86},[69,73136,349],{"class":348},[69,73138,52549],{"class":109},[69,73140,1019],{"class":86},[69,73142,52554],{"class":1022},[69,73144,1026],{"class":86},[69,73146,73147],{"class":71,"line":106},[69,73148,3644],{"emptyLinePlaceholder":1325},[69,73150,73151,73153,73155],{"class":71,"line":116},[69,73152,1011],{"class":86},[69,73154,52567],{"class":348},[69,73156,1026],{"class":86},[69,73158,73159,73161,73163,73165,73167,73169],{"class":71,"line":133},[69,73160,53372],{"class":86},[69,73162,52577],{"class":348},[69,73164,52580],{"class":109},[69,73166,1019],{"class":86},[69,73168,52585],{"class":1022},[69,73170,1026],{"class":86},[69,73172,73173,73175,73177,73179,73181,73183,73185,73187,73189],{"class":71,"line":139},[69,73174,53372],{"class":86},[69,73176,52577],{"class":348},[69,73178,16160],{"class":109},[69,73180,1019],{"class":86},[69,73182,52624],{"class":1022},[69,73184,52604],{"class":109},[69,73186,1019],{"class":86},[69,73188,52631],{"class":1022},[69,73190,1026],{"class":86},[69,73192,73193,73195,73197,73199,73201],{"class":71,"line":401},[69,73194,53372],{"class":86},[69,73196,52640],{"class":348},[69,73198,52643],{"class":86},[69,73200,52640],{"class":348},[69,73202,1026],{"class":86},[69,73204,73205,73207,73209],{"class":71,"line":470},[69,73206,53372],{"class":86},[69,73208,1297],{"class":348},[69,73210,1026],{"class":86},[69,73212,73213,73215],{"class":71,"line":475},[69,73214,7645],{"class":348},[69,73216,113],{"class":86},[69,73218,73219,73221,73223,73225],{"class":71,"line":482},[69,73220,55922],{"class":90},[69,73222,94],{"class":86},[69,73224,1583],{"class":90},[69,73226,130],{"class":86},[69,73228,73229,73231,73233,73235],{"class":71,"line":497},[69,73230,55933],{"class":90},[69,73232,94],{"class":86},[69,73234,1583],{"class":90},[69,73236,130],{"class":86},[69,73238,73239],{"class":71,"line":502},[69,73240,3431],{"class":86},[69,73242,73243],{"class":71,"line":509},[69,73244,3644],{"emptyLinePlaceholder":1325},[69,73246,73247,73249],{"class":71,"line":524},[69,73248,58506],{"class":348},[69,73250,113],{"class":86},[69,73252,73253,73255,73257,73259],{"class":71,"line":2888},[69,73254,58513],{"class":90},[69,73256,94],{"class":86},[69,73258,52823],{"class":90},[69,73260,130],{"class":86},[69,73262,73263,73265,73267,73269,73271],{"class":71,"line":2893},[69,73264,63303],{"class":90},[69,73266,94],{"class":86},[69,73268,2087],{"class":90},[69,73270,100],{"class":82},[69,73272,130],{"class":86},[69,73274,73275],{"class":71,"line":2899},[69,73276,3431],{"class":86},[69,73278,73279],{"class":71,"line":2919},[69,73280,3644],{"emptyLinePlaceholder":1325},[69,73282,73283,73286],{"class":71,"line":2924},[69,73284,73285],{"class":109},"    .info",[69,73287,113],{"class":86},[69,73289,73290,73292,73294,73296,73298],{"class":71,"line":2938},[69,73291,55998],{"class":90},[69,73293,94],{"class":86},[69,73295,52721],{"class":90},[69,73297,100],{"class":82},[69,73299,130],{"class":86},[69,73301,73302,73304,73306,73308,73310,73312],{"class":71,"line":2943},[69,73303,55933],{"class":90},[69,73305,94],{"class":86},[69,73307,390],{"class":90},[69,73309,100],{"class":82},[69,73311,52787],{"class":90},[69,73313,130],{"class":86},[69,73315,73316,73318,73320,73322],{"class":71,"line":2972},[69,73317,58513],{"class":90},[69,73319,94],{"class":86},[69,73321,52823],{"class":90},[69,73323,130],{"class":86},[69,73325,73326],{"class":71,"line":2977},[69,73327,3431],{"class":86},[69,73329,73330],{"class":71,"line":2994},[69,73331,3644],{"emptyLinePlaceholder":1325},[69,73333,73334,73337],{"class":71,"line":2999},[69,73335,73336],{"class":109},"    .uname",[69,73338,32702],{"class":86},[69,73340,73341,73344],{"class":71,"line":3004},[69,73342,73343],{"class":109},"    .age",[69,73345,32702],{"class":86},[69,73347,73348,73351],{"class":71,"line":3009},[69,73349,73350],{"class":109},"    .salary",[69,73352,113],{"class":86},[69,73354,73355,73357,73359,73361,73363],{"class":71,"line":3023},[69,73356,55998],{"class":90},[69,73358,94],{"class":86},[69,73360,124],{"class":90},[69,73362,100],{"class":82},[69,73364,130],{"class":86},[69,73366,73367,73369,73371,73373,73375],{"class":71,"line":3028},[69,73368,56012],{"class":90},[69,73370,94],{"class":86},[69,73372,2087],{"class":90},[69,73374,100],{"class":82},[69,73376,130],{"class":86},[69,73378,73379,73381,73383,73385],{"class":71,"line":3821},[69,73380,63006],{"class":90},[69,73382,94],{"class":86},[69,73384,55964],{"class":90},[69,73386,130],{"class":86},[69,73388,73389,73391,73393,73395,73397],{"class":71,"line":3835},[69,73390,62976],{"class":90},[69,73392,94],{"class":86},[69,73394,1963],{"class":90},[69,73396,100],{"class":82},[69,73398,130],{"class":86},[69,73400,73401],{"class":71,"line":3843},[69,73402,3431],{"class":86},[69,73404,73405],{"class":71,"line":3848},[69,73406,3644],{"emptyLinePlaceholder":1325},[69,73408,73409,73412],{"class":71,"line":3854},[69,73410,73411],{"class":109},"    .gender",[69,73413,32702],{"class":86},[69,73415,73416,73419],{"class":71,"line":3860},[69,73417,73418],{"class":109},"    .city",[69,73420,113],{"class":86},[69,73422,73423,73425,73427,73429,73431],{"class":71,"line":3865},[69,73424,55998],{"class":90},[69,73426,94],{"class":86},[69,73428,124],{"class":90},[69,73430,100],{"class":82},[69,73432,130],{"class":86},[69,73434,73435,73437,73439,73441,73443],{"class":71,"line":9190},[69,73436,56012],{"class":90},[69,73438,94],{"class":86},[69,73440,2212],{"class":90},[69,73442,100],{"class":82},[69,73444,130],{"class":86},[69,73446,73447,73449,73451,73453],{"class":71,"line":9214},[69,73448,63006],{"class":90},[69,73450,94],{"class":86},[69,73452,55964],{"class":90},[69,73454,130],{"class":86},[69,73456,73457,73459,73461,73463,73465],{"class":71,"line":9219},[69,73458,62976],{"class":90},[69,73460,94],{"class":86},[69,73462,1963],{"class":90},[69,73464,100],{"class":82},[69,73466,130],{"class":86},[69,73468,73469,73471,73473,73475,73477,73479,73482,73484,73486,73488,73491,73493,73495],{"class":71,"line":9225},[69,73470,63203],{"class":90},[69,73472,94],{"class":86},[69,73474,1609],{"class":90},[69,73476,100],{"class":82},[69,73478,52752],{"class":90},[69,73480,73481],{"class":90}," rgb",[69,73483,1398],{"class":86},[69,73485,2967],{"class":90},[69,73487,13677],{"class":86},[69,73489,73490],{"class":90},"197",[69,73492,13677],{"class":86},[69,73494,73490],{"class":90},[69,73496,3963],{"class":86},[69,73498,73499],{"class":71,"line":9252},[69,73500,3431],{"class":86},[69,73502,73503],{"class":71,"line":9257},[69,73504,3644],{"emptyLinePlaceholder":1325},[69,73506,73507,73510],{"class":71,"line":9263},[69,73508,73509],{"class":348},"    button",[69,73511,113],{"class":86},[69,73513,73514,73516,73518,73520,73522],{"class":71,"line":9275},[69,73515,56012],{"class":90},[69,73517,94],{"class":86},[69,73519,2212],{"class":90},[69,73521,100],{"class":82},[69,73523,130],{"class":86},[69,73525,73526,73528,73530,73532,73534],{"class":71,"line":9287},[69,73527,55998],{"class":90},[69,73529,94],{"class":86},[69,73531,1872],{"class":90},[69,73533,100],{"class":82},[69,73535,130],{"class":86},[69,73537,73538,73540,73542,73545,73547,73549,73551,73554,73556,73558],{"class":71,"line":9299},[69,73539,56111],{"class":90},[69,73541,94],{"class":86},[69,73543,73544],{"class":90},"rgb",[69,73546,1398],{"class":86},[69,73548,2355],{"class":90},[69,73550,13677],{"class":86},[69,73552,73553],{"class":90},"187",[69,73555,13677],{"class":86},[69,73557,1690],{"class":90},[69,73559,3963],{"class":86},[69,73561,73562,73564,73566,73568],{"class":71,"line":10958},[69,73563,58643],{"class":90},[69,73565,94],{"class":86},[69,73567,62068],{"class":90},[69,73569,130],{"class":86},[69,73571,73572,73574,73576,73578],{"class":71,"line":10983},[69,73573,63203],{"class":90},[69,73575,94],{"class":86},[69,73577,1583],{"class":90},[69,73579,130],{"class":86},[69,73581,73582],{"class":71,"line":11006},[69,73583,3431],{"class":86},[69,73585,73586],{"class":71,"line":11030},[69,73587,3644],{"emptyLinePlaceholder":1325},[69,73589,73590,73592,73594],{"class":71,"line":11035},[69,73591,73509],{"class":348},[69,73593,52918],{"class":348},[69,73595,113],{"class":86},[69,73597,73598,73600,73602,73605],{"class":71,"line":11040},[69,73599,56236],{"class":90},[69,73601,94],{"class":86},[69,73603,73604],{"class":90},"inline-block",[69,73606,130],{"class":86},[69,73608,73609,73611,73613,73615,73617],{"class":71,"line":11045},[69,73610,55998],{"class":90},[69,73612,94],{"class":86},[69,73614,390],{"class":90},[69,73616,100],{"class":82},[69,73618,130],{"class":86},[69,73620,73621,73623,73625,73627,73629],{"class":71,"line":11054},[69,73622,56012],{"class":90},[69,73624,94],{"class":86},[69,73626,390],{"class":90},[69,73628,100],{"class":82},[69,73630,130],{"class":86},[69,73632,73633,73635,73637,73639,73641],{"class":71,"line":11059},[69,73634,58586],{"class":90},[69,73636,94],{"class":86},[69,73638,1860],{"class":90},[69,73640,100],{"class":82},[69,73642,130],{"class":86},[69,73644,73645,73647,73649,73651,73653,73655,73658],{"class":71,"line":11065},[69,73646,63203],{"class":90},[69,73648,94],{"class":86},[69,73650,1609],{"class":90},[69,73652,100],{"class":82},[69,73654,52752],{"class":90},[69,73656,73657],{"class":90}," #fff",[69,73659,130],{"class":86},[69,73661,73662,73664,73666,73668,73670],{"class":71,"line":11086},[69,73663,56361],{"class":90},[69,73665,94],{"class":86},[69,73667,1709],{"class":90},[69,73669,100],{"class":82},[69,73671,130],{"class":86},[69,73673,73674,73676,73678,73680,73682],{"class":71,"line":11092},[69,73675,62976],{"class":90},[69,73677,94],{"class":86},[69,73679,1609],{"class":90},[69,73681,100],{"class":82},[69,73683,130],{"class":86},[69,73685,73686],{"class":71,"line":11106},[69,73687,3431],{"class":86},[69,73689,73690],{"class":71,"line":11112},[69,73691,3644],{"emptyLinePlaceholder":1325},[69,73693,73694,73697],{"class":71,"line":11139},[69,73695,73696],{"class":109},"    .total",[69,73698,113],{"class":86},[69,73700,73701,73703,73705,73707,73709],{"class":71,"line":11148},[69,73702,55998],{"class":90},[69,73704,94],{"class":86},[69,73706,62855],{"class":90},[69,73708,100],{"class":82},[69,73710,130],{"class":86},[69,73712,73713,73715,73717,73719,73721],{"class":71,"line":11154},[69,73714,56012],{"class":90},[69,73716,94],{"class":86},[69,73718,1790],{"class":90},[69,73720,100],{"class":82},[69,73722,130],{"class":86},[69,73724,73725,73727,73729,73731,73733],{"class":71,"line":11162},[69,73726,58586],{"class":90},[69,73728,94],{"class":86},[69,73730,1790],{"class":90},[69,73732,100],{"class":82},[69,73734,130],{"class":86},[69,73736,73737,73739,73741,73744],{"class":71,"line":11167},[69,73738,58513],{"class":90},[69,73740,94],{"class":86},[69,73742,73743],{"class":90},"right",[69,73745,130],{"class":86},[69,73747,73748,73750,73752,73754,73756,73758,73760,73762],{"class":71,"line":17843},[69,73749,55933],{"class":90},[69,73751,94],{"class":86},[69,73753,1790],{"class":90},[69,73755,100],{"class":82},[69,73757,52787],{"class":90},[69,73759,3282],{"class":90},[69,73761,100],{"class":82},[69,73763,130],{"class":86},[69,73765,73766,73769,73771,73773,73775],{"class":71,"line":17849},[69,73767,73768],{"class":90},"      padding-right",[69,73770,94],{"class":86},[69,73772,390],{"class":90},[69,73774,100],{"class":82},[69,73776,130],{"class":86},[69,73778,73779,73781,73783,73785,73787],{"class":71,"line":17872},[69,73780,56149],{"class":90},[69,73782,94],{"class":86},[69,73784,1911],{"class":90},[69,73786,100],{"class":82},[69,73788,130],{"class":86},[69,73790,73791,73793,73795,73797,73799,73802,73804,73807,73809,73811],{"class":71,"line":17878},[69,73792,56111],{"class":90},[69,73794,94],{"class":86},[69,73796,73544],{"class":90},[69,73798,1398],{"class":86},[69,73800,73801],{"class":90},"237",[69,73803,13677],{"class":86},[69,73805,73806],{"class":90},"235",[69,73808,13677],{"class":86},[69,73810,73806],{"class":90},[69,73812,3963],{"class":86},[69,73814,73815,73818,73820,73822],{"class":71,"line":17901},[69,73816,73817],{"class":90},"      box-sizing",[69,73819,94],{"class":86},[69,73821,61731],{"class":90},[69,73823,130],{"class":86},[69,73825,73826],{"class":71,"line":17915},[69,73827,3431],{"class":86},[69,73829,73830],{"class":71,"line":17935},[69,73831,3644],{"emptyLinePlaceholder":1325},[69,73833,73834,73836,73838],{"class":71,"line":17941},[69,73835,73696],{"class":109},[69,73837,52918],{"class":348},[69,73839,113],{"class":86},[69,73841,73842,73844,73846,73848],{"class":71,"line":17952},[69,73843,58643],{"class":90},[69,73845,94],{"class":86},[69,73847,876],{"class":90},[69,73849,130],{"class":86},[69,73851,73852],{"class":71,"line":17975},[69,73853,3431],{"class":86},[69,73855,73856],{"class":71,"line":17997},[69,73857,3644],{"emptyLinePlaceholder":1325},[69,73859,73860,73862],{"class":71,"line":18002},[69,73861,66249],{"class":348},[69,73863,113],{"class":86},[69,73865,73866,73868,73870,73872,73874],{"class":71,"line":18008},[69,73867,55998],{"class":90},[69,73869,94],{"class":86},[69,73871,62855],{"class":90},[69,73873,100],{"class":82},[69,73875,130],{"class":86},[69,73877,73878,73880,73882,73885],{"class":71,"line":18022},[69,73879,55933],{"class":90},[69,73881,94],{"class":86},[69,73883,73884],{"class":90},"auto",[69,73886,130],{"class":86},[69,73888,73889,73891,73893,73895],{"class":71,"line":18035},[69,73890,66256],{"class":90},[69,73892,94],{"class":86},[69,73894,66261],{"class":90},[69,73896,130],{"class":86},[69,73898,73899],{"class":71,"line":18040},[69,73900,3431],{"class":86},[69,73902,73903],{"class":71,"line":18054},[69,73904,3644],{"emptyLinePlaceholder":1325},[69,73906,73907,73909],{"class":71,"line":18059},[69,73908,66341],{"class":348},[69,73910,113],{"class":86},[69,73912,73913,73915,73917,73919,73921,73923,73925,73927,73929,73931],{"class":71,"line":18065},[69,73914,56111],{"class":90},[69,73916,94],{"class":86},[69,73918,73544],{"class":90},[69,73920,1398],{"class":86},[69,73922,73801],{"class":90},[69,73924,13677],{"class":86},[69,73926,73806],{"class":90},[69,73928,13677],{"class":86},[69,73930,73806],{"class":90},[69,73932,3963],{"class":86},[69,73934,73935],{"class":71,"line":18070},[69,73936,3431],{"class":86},[69,73938,73939],{"class":71,"line":18084},[69,73940,3644],{"emptyLinePlaceholder":1325},[69,73942,73943,73945],{"class":71,"line":18089},[69,73944,66341],{"class":348},[69,73946,32702],{"class":86},[69,73948,73949,73951],{"class":71,"line":18094},[69,73950,66407],{"class":348},[69,73952,113],{"class":86},[69,73954,73955,73957,73959,73961,73963],{"class":71,"line":18108},[69,73956,56012],{"class":90},[69,73958,94],{"class":86},[69,73960,1664],{"class":90},[69,73962,100],{"class":82},[69,73964,130],{"class":86},[69,73966,73967,73969,73971,73973],{"class":71,"line":18120},[69,73968,58513],{"class":90},[69,73970,94],{"class":86},[69,73972,1202],{"class":90},[69,73974,130],{"class":86},[69,73976,73977,73979,73981,73983,73985],{"class":71,"line":18125},[69,73978,56149],{"class":90},[69,73980,94],{"class":86},[69,73982,1937],{"class":90},[69,73984,100],{"class":82},[69,73986,130],{"class":86},[69,73988,73989,73991,73993,73995,73997,73999,74001,74003,74006,74008,74011,74013,74015],{"class":71,"line":18138},[69,73990,63203],{"class":90},[69,73992,94],{"class":86},[69,73994,1609],{"class":90},[69,73996,100],{"class":82},[69,73998,52752],{"class":90},[69,74000,73481],{"class":90},[69,74002,1398],{"class":86},[69,74004,74005],{"class":90},"228",[69,74007,13677],{"class":86},[69,74009,74010],{"class":90},"225",[69,74012,13677],{"class":86},[69,74014,74010],{"class":90},[69,74016,3963],{"class":86},[69,74018,74019,74022,74024,74026,74028],{"class":71,"line":18143},[69,74020,74021],{"class":90},"      padding-left",[69,74023,94],{"class":86},[69,74025,1709],{"class":90},[69,74027,100],{"class":82},[69,74029,130],{"class":86},[69,74031,74032,74034,74036,74038,74041,74043,74045],{"class":71,"line":18148},[69,74033,63086],{"class":90},[69,74035,94],{"class":86},[69,74037,29357],{"class":90},[69,74039,74040],{"class":90}," linear",[69,74042,63093],{"class":90},[69,74044,2082],{"class":82},[69,74046,130],{"class":86},[69,74048,74049],{"class":71,"line":18153},[69,74050,3431],{"class":86},[69,74052,74053],{"class":71,"line":18166},[69,74054,3644],{"emptyLinePlaceholder":1325},[69,74056,74057,74060,74062,74064],{"class":71,"line":18171},[69,74058,74059],{"class":348},"    tbody",[69,74061,71369],{"class":348},[69,74063,62166],{"class":109},[69,74065,113],{"class":86},[69,74067,74068,74070,74072,74074,74076,74078,74080,74082,74084,74086],{"class":71,"line":33869},[69,74069,56111],{"class":90},[69,74071,94],{"class":86},[69,74073,73544],{"class":90},[69,74075,1398],{"class":86},[69,74077,73801],{"class":90},[69,74079,13677],{"class":86},[69,74081,73806],{"class":90},[69,74083,13677],{"class":86},[69,74085,73806],{"class":90},[69,74087,3963],{"class":86},[69,74089,74090,74092,74094,74096],{"class":71,"line":33875},[69,74091,63251],{"class":90},[69,74093,94],{"class":86},[69,74095,63256],{"class":90},[69,74097,130],{"class":86},[69,74099,74100],{"class":71,"line":33881},[69,74101,3431],{"class":86},[69,74103,74104],{"class":71,"line":33887},[69,74105,3644],{"emptyLinePlaceholder":1325},[69,74107,74108,74110,74112,74115,74117],{"class":71,"line":33893},[69,74109,74059],{"class":348},[69,74111,71369],{"class":348},[69,74113,74114],{"class":348}," td",[69,74116,2650],{"class":348},[69,74118,113],{"class":86},[69,74120,74121,74123,74125,74127],{"class":71,"line":33904},[69,74122,56236],{"class":90},[69,74124,94],{"class":86},[69,74126,62095],{"class":90},[69,74128,130],{"class":86},[69,74130,74131,74133,74135,74137,74139],{"class":71,"line":33910},[69,74132,55998],{"class":90},[69,74134,94],{"class":86},[69,74136,2294],{"class":90},[69,74138,100],{"class":82},[69,74140,130],{"class":86},[69,74142,74143,74145,74147,74149,74151],{"class":71,"line":33930},[69,74144,56012],{"class":90},[69,74146,94],{"class":86},[69,74148,2212],{"class":90},[69,74150,100],{"class":82},[69,74152,130],{"class":86},[69,74154,74155,74157,74159,74161,74163],{"class":71,"line":33936},[69,74156,58586],{"class":90},[69,74158,94],{"class":86},[69,74160,2212],{"class":90},[69,74162,100],{"class":82},[69,74164,130],{"class":86},[69,74166,74167,74169,74171,74173,74175],{"class":71,"line":33947},[69,74168,63303],{"class":90},[69,74170,94],{"class":86},[69,74172,1471],{"class":90},[69,74174,100],{"class":82},[69,74176,130],{"class":86},[69,74178,74179,74181,74183,74185],{"class":71,"line":33953},[69,74180,58643],{"class":90},[69,74182,94],{"class":86},[69,74184,62068],{"class":90},[69,74186,130],{"class":86},[69,74188,74189,74191,74193,74195],{"class":71,"line":33959},[69,74190,58513],{"class":90},[69,74192,94],{"class":86},[69,74194,52823],{"class":90},[69,74196,130],{"class":86},[69,74198,74199,74201,74203,74205],{"class":71,"line":33965},[69,74200,65196],{"class":90},[69,74202,94],{"class":86},[69,74204,55964],{"class":90},[69,74206,130],{"class":86},[69,74208,74209,74211,74213,74216],{"class":71,"line":33971},[69,74210,56111],{"class":90},[69,74212,94],{"class":86},[69,74214,74215],{"class":90},"orange",[69,74217,130],{"class":86},[69,74219,74220,74222,74224,74227,74229],{"class":71,"line":33977},[69,74221,56361],{"class":90},[69,74223,94],{"class":86},[69,74225,74226],{"class":90},"12.5",[69,74228,100],{"class":82},[69,74230,130],{"class":86},[69,74232,74233],{"class":71,"line":33983},[69,74234,3431],{"class":86},[69,74236,74237,74239,74241],{"class":71,"line":33989},[69,74238,53645],{"class":86},[69,74240,1297],{"class":348},[69,74242,1026],{"class":86},[69,74244,74245,74247,74249],{"class":71,"line":34009},[69,74246,1036],{"class":86},[69,74248,52567],{"class":348},[69,74250,1026],{"class":86},[69,74252,74253],{"class":71,"line":34015},[69,74254,3644],{"emptyLinePlaceholder":1325},[69,74256,74257,74259,74261],{"class":71,"line":34031},[69,74258,1011],{"class":86},[69,74260,680],{"class":348},[69,74262,1026],{"class":86},[69,74264,74265,74267,74269,74272,74274],{"class":71,"line":34037},[69,74266,53372],{"class":86},[69,74268,14],{"class":348},[69,74270,74271],{"class":86},">学生就业统计表\u003C\u002F",[69,74273,14],{"class":348},[69,74275,1026],{"class":86},[69,74277,74278,74280,74282,74284,74286,74288,74290,74292,74294],{"class":71,"line":34051},[69,74279,53372],{"class":86},[69,74281,67851],{"class":348},[69,74283,1016],{"class":109},[69,74285,1019],{"class":86},[69,74287,63890],{"class":1022},[69,74289,70295],{"class":109},[69,74291,1019],{"class":86},[69,74293,33012],{"class":1022},[69,74295,1026],{"class":86},[69,74297,74298,74300,74302,74304,74306,74308,74310,74312,74314,74316,74318,74321,74323,74325,74327],{"class":71,"line":34057},[69,74299,52574],{"class":86},[69,74301,55048],{"class":348},[69,74303,55051],{"class":109},[69,74305,1019],{"class":86},[69,74307,63925],{"class":1022},[69,74309,16160],{"class":109},[69,74311,1019],{"class":86},[69,74313,70321],{"class":1022},[69,74315,62246],{"class":109},[69,74317,1019],{"class":86},[69,74319,74320],{"class":1022},"\"姓名\"",[69,74322,1016],{"class":109},[69,74324,1019],{"class":86},[69,74326,70321],{"class":1022},[69,74328,1026],{"class":86},[69,74330,74331,74333,74335,74337,74339,74341,74343,74345,74347,74349,74351,74354,74356,74358,74360],{"class":71,"line":34072},[69,74332,52574],{"class":86},[69,74334,55048],{"class":348},[69,74336,55051],{"class":109},[69,74338,1019],{"class":86},[69,74340,63925],{"class":1022},[69,74342,16160],{"class":109},[69,74344,1019],{"class":86},[69,74346,70349],{"class":1022},[69,74348,62246],{"class":109},[69,74350,1019],{"class":86},[69,74352,74353],{"class":1022},"\"年龄\"",[69,74355,1016],{"class":109},[69,74357,1019],{"class":86},[69,74359,70349],{"class":1022},[69,74361,1026],{"class":86},[69,74363,74364,74366,74368,74370,74372,74374,74376,74378,74380,74382,74384,74387,74389,74391,74393],{"class":71,"line":34078},[69,74365,52574],{"class":86},[69,74367,55048],{"class":348},[69,74369,55051],{"class":109},[69,74371,1019],{"class":86},[69,74373,63925],{"class":1022},[69,74375,16160],{"class":109},[69,74377,1019],{"class":86},[69,74379,70451],{"class":1022},[69,74381,62246],{"class":109},[69,74383,1019],{"class":86},[69,74385,74386],{"class":1022},"\"薪资\"",[69,74388,1016],{"class":109},[69,74390,1019],{"class":86},[69,74392,70451],{"class":1022},[69,74394,1026],{"class":86},[69,74396,74397,74399,74401,74403,74405,74407,74409,74411,74413,74415,74417,74419],{"class":71,"line":34087},[69,74398,52574],{"class":86},[69,74400,70369],{"class":348},[69,74402,16160],{"class":109},[69,74404,1019],{"class":86},[69,74406,70376],{"class":1022},[69,74408,16199],{"class":109},[69,74410,1019],{"class":86},[69,74412,8894],{"class":1022},[69,74414,1016],{"class":109},[69,74416,1019],{"class":86},[69,74418,70376],{"class":1022},[69,74420,1026],{"class":86},[69,74422,74423,74425,74427,74429,74431,74433,74435,74437],{"class":71,"line":34093},[69,74424,56461],{"class":86},[69,74426,70391],{"class":348},[69,74428,67877],{"class":109},[69,74430,1019],{"class":86},[69,74432,11203],{"class":1022},[69,74434,70400],{"class":86},[69,74436,70391],{"class":348},[69,74438,1026],{"class":86},[69,74440,74441,74443,74445,74447,74449,74451,74453,74455],{"class":71,"line":34102},[69,74442,56461],{"class":86},[69,74444,70391],{"class":348},[69,74446,67877],{"class":109},[69,74448,1019],{"class":86},[69,74450,11272],{"class":1022},[69,74452,70419],{"class":86},[69,74454,70391],{"class":348},[69,74456,1026],{"class":86},[69,74458,74459,74461,74463],{"class":71,"line":34108},[69,74460,53006],{"class":86},[69,74462,70369],{"class":348},[69,74464,1026],{"class":86},[69,74466,74467,74469,74471,74473,74475,74477,74479,74481,74483,74485,74487,74489],{"class":71,"line":34114},[69,74468,52574],{"class":86},[69,74470,70369],{"class":348},[69,74472,16160],{"class":109},[69,74474,1019],{"class":86},[69,74476,70473],{"class":1022},[69,74478,16199],{"class":109},[69,74480,1019],{"class":86},[69,74482,8894],{"class":1022},[69,74484,1016],{"class":109},[69,74486,1019],{"class":86},[69,74488,70473],{"class":1022},[69,74490,1026],{"class":86},[69,74492,74493,74495,74497,74499,74501,74503,74505,74507],{"class":71,"line":34123},[69,74494,56461],{"class":86},[69,74496,70391],{"class":348},[69,74498,67877],{"class":109},[69,74500,1019],{"class":86},[69,74502,70494],{"class":1022},[69,74504,70497],{"class":86},[69,74506,70391],{"class":348},[69,74508,1026],{"class":86},[69,74510,74511,74513,74515,74517,74519,74521,74523,74525],{"class":71,"line":34129},[69,74512,56461],{"class":86},[69,74514,70391],{"class":348},[69,74516,67877],{"class":109},[69,74518,1019],{"class":86},[69,74520,70514],{"class":1022},[69,74522,70517],{"class":86},[69,74524,70391],{"class":348},[69,74526,1026],{"class":86},[69,74528,74529,74531,74533,74535,74537,74539,74541,74543],{"class":71,"line":34140},[69,74530,56461],{"class":86},[69,74532,70391],{"class":348},[69,74534,67877],{"class":109},[69,74536,1019],{"class":86},[69,74538,70534],{"class":1022},[69,74540,70537],{"class":86},[69,74542,70391],{"class":348},[69,74544,1026],{"class":86},[69,74546,74547,74549,74551,74553,74555,74557,74559,74561],{"class":71,"line":34146},[69,74548,56461],{"class":86},[69,74550,70391],{"class":348},[69,74552,67877],{"class":109},[69,74554,1019],{"class":86},[69,74556,70554],{"class":1022},[69,74558,70557],{"class":86},[69,74560,70391],{"class":348},[69,74562,1026],{"class":86},[69,74564,74565,74567,74569,74571,74573,74575,74577,74579],{"class":71,"line":34165},[69,74566,56461],{"class":86},[69,74568,70391],{"class":348},[69,74570,67877],{"class":109},[69,74572,1019],{"class":86},[69,74574,70574],{"class":1022},[69,74576,70577],{"class":86},[69,74578,70391],{"class":348},[69,74580,1026],{"class":86},[69,74582,74583,74585,74587],{"class":71,"line":34171},[69,74584,53006],{"class":86},[69,74586,70369],{"class":348},[69,74588,1026],{"class":86},[69,74590,74591,74593,74595],{"class":71,"line":34182},[69,74592,52574],{"class":86},[69,74594,55114],{"class":348},[69,74596,1026],{"class":86},[69,74598,74599,74601,74603,74606,74608,74611,74613],{"class":71,"line":34188},[69,74600,56461],{"class":86},[69,74602,69],{"class":348},[69,74604,74605],{"class":86},">+\u003C\u002F",[69,74607,69],{"class":348},[69,74609,74610],{"class":86},">添加\u003C\u002F",[69,74612,55114],{"class":348},[69,74614,1026],{"class":86},[69,74616,74617,74619,74621],{"class":71,"line":34208},[69,74618,53645],{"class":86},[69,74620,67851],{"class":348},[69,74622,1026],{"class":86},[69,74624,74625,74627,74629,74631,74633,74635,74638,74640,74643,74645,74648,74650],{"class":71,"line":34224},[69,74626,53372],{"class":86},[69,74628,442],{"class":348},[69,74630,1016],{"class":109},[69,74632,1019],{"class":86},[69,74634,63806],{"class":1022},[69,74636,74637],{"class":86},">共有数据 \u003C",[69,74639,69],{"class":348},[69,74641,74642],{"class":86},">0\u003C\u002F",[69,74644,69],{"class":348},[69,74646,74647],{"class":86},"> 条\u003C\u002F",[69,74649,442],{"class":348},[69,74651,1026],{"class":86},[69,74653,74654,74656,74658],{"class":71,"line":34230},[69,74655,53372],{"class":86},[69,74657,1530],{"class":348},[69,74659,1026],{"class":86},[69,74661,74662,74664,74666],{"class":71,"line":34244},[69,74663,52574],{"class":86},[69,74665,1533],{"class":348},[69,74667,1026],{"class":86},[69,74669,74670,74672,74674],{"class":71,"line":34250},[69,74671,56461],{"class":86},[69,74673,1536],{"class":348},[69,74675,1026],{"class":86},[69,74677,74678,74680,74682,74685,74687],{"class":71,"line":34256},[69,74679,56529],{"class":86},[69,74681,1539],{"class":348},[69,74683,74684],{"class":86},">ID\u003C\u002F",[69,74686,1539],{"class":348},[69,74688,1026],{"class":86},[69,74690,74691,74693,74695,74697,74699],{"class":71,"line":34267},[69,74692,56529],{"class":86},[69,74694,1539],{"class":348},[69,74696,70680],{"class":86},[69,74698,1539],{"class":348},[69,74700,1026],{"class":86},[69,74702,74703,74705,74707,74709,74711],{"class":71,"line":34273},[69,74704,56529],{"class":86},[69,74706,1539],{"class":348},[69,74708,70693],{"class":86},[69,74710,1539],{"class":348},[69,74712,1026],{"class":86},[69,74714,74715,74717,74719,74721,74723],{"class":71,"line":34279},[69,74716,56529],{"class":86},[69,74718,1539],{"class":348},[69,74720,70706],{"class":86},[69,74722,1539],{"class":348},[69,74724,1026],{"class":86},[69,74726,74727,74729,74731,74733,74735],{"class":71,"line":34289},[69,74728,56529],{"class":86},[69,74730,1539],{"class":348},[69,74732,70719],{"class":86},[69,74734,1539],{"class":348},[69,74736,1026],{"class":86},[69,74738,74739,74741,74743,74745,74747],{"class":71,"line":34295},[69,74740,56529],{"class":86},[69,74742,1539],{"class":348},[69,74744,70732],{"class":86},[69,74746,1539],{"class":348},[69,74748,1026],{"class":86},[69,74750,74751,74753,74755,74758,74760],{"class":71,"line":34306},[69,74752,56529],{"class":86},[69,74754,1539],{"class":348},[69,74756,74757],{"class":86},">录入时间\u003C\u002F",[69,74759,1539],{"class":348},[69,74761,1026],{"class":86},[69,74763,74764,74766,74768,74770,74772],{"class":71,"line":34312},[69,74765,56529],{"class":86},[69,74767,1539],{"class":348},[69,74769,70745],{"class":86},[69,74771,1539],{"class":348},[69,74773,1026],{"class":86},[69,74775,74776,74778,74780],{"class":71,"line":34322},[69,74777,56634],{"class":86},[69,74779,1536],{"class":348},[69,74781,1026],{"class":86},[69,74783,74784,74786,74788],{"class":71,"line":34327},[69,74785,53006],{"class":86},[69,74787,1533],{"class":348},[69,74789,1026],{"class":86},[69,74791,74792,74794,74796],{"class":71,"line":34333},[69,74793,52574],{"class":86},[69,74795,1576],{"class":348},[69,74797,1026],{"class":86},[69,74799,74800],{"class":71,"line":34382},[69,74801,74802],{"class":75},"      \u003C!-- \u003Ctr>\n",[69,74804,74805],{"class":71,"line":34429},[69,74806,74807],{"class":75},"        \u003Ctd>1\u003C\u002Ftd>\n",[69,74809,74810],{"class":71,"line":34434},[69,74811,74807],{"class":75},[69,74813,74814],{"class":71,"line":34440},[69,74815,74807],{"class":75},[69,74817,74818],{"class":71,"line":34459},[69,74819,74807],{"class":75},[69,74821,74822],{"class":71,"line":34465},[69,74823,74807],{"class":75},[69,74825,74826],{"class":71,"line":34485},[69,74827,74807],{"class":75},[69,74829,74830],{"class":71,"line":34491},[69,74831,74807],{"class":75},[69,74833,74834],{"class":71,"line":34497},[69,74835,74836],{"class":75},"        \u003Ctd>\n",[69,74838,74839],{"class":71,"line":34507},[69,74840,74841],{"class":75},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[69,74843,74844],{"class":71,"line":34512},[69,74845,74846],{"class":75},"        \u003C\u002Ftd>\n",[69,74848,74849],{"class":71,"line":34518},[69,74850,74851],{"class":75},"      \u003C\u002Ftr> -->\n",[69,74853,74854,74856,74858],{"class":71,"line":34534},[69,74855,53006],{"class":86},[69,74857,1576],{"class":348},[69,74859,1026],{"class":86},[69,74861,74862,74864,74866],{"class":71,"line":34579},[69,74863,53645],{"class":86},[69,74865,1530],{"class":348},[69,74867,1026],{"class":86},[69,74869,74870,74872,74874],{"class":71,"line":34585},[69,74871,53372],{"class":86},[69,74873,53041],{"class":348},[69,74875,1026],{"class":86},[69,74877,74878],{"class":71,"line":34591},[69,74879,74880],{"class":75},"    \u002F\u002F const initData = [{\n",[69,74882,74883],{"class":71,"line":34597},[69,74884,74885],{"class":75},"    \u002F\u002F   unameId: 1,\n",[69,74887,74888],{"class":71,"line":34608},[69,74889,74890],{"class":75},"    \u002F\u002F   uname: '华晨宇',\n",[69,74892,74893],{"class":71,"line":34614},[69,74894,74895],{"class":75},"    \u002F\u002F   age: 22,\n",[69,74897,74898],{"class":71,"line":34620},[69,74899,74900],{"class":75},"    \u002F\u002F   salary: 12000,\n",[69,74902,74903],{"class":71,"line":34626},[69,74904,74905],{"class":75},"    \u002F\u002F   gender: '男',\n",[69,74907,74908],{"class":71,"line":34644},[69,74909,74910],{"class":75},"    \u002F\u002F   city: '北京',\n",[69,74912,74913],{"class":71,"line":34658},[69,74914,74915],{"class":75},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[69,74917,74918],{"class":71,"line":34667},[69,74919,74920],{"class":75},"    \u002F\u002F }]\n",[69,74922,74923],{"class":71,"line":34676},[69,74924,74925],{"class":75},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[69,74927,74928],{"class":71,"line":34685},[69,74929,74930],{"class":75},"    \u002F\u002F 1.渲染业务\n",[69,74932,74933],{"class":71,"line":34694},[69,74934,74935],{"class":75},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[69,74937,74938],{"class":71,"line":34700},[69,74939,74940],{"class":75},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[69,74942,74943],{"class":71,"line":34706},[69,74944,74945],{"class":75},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[69,74947,74948],{"class":71,"line":34714},[69,74949,3644],{"emptyLinePlaceholder":1325},[69,74951,74952],{"class":71,"line":34719},[69,74953,74954],{"class":75},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[69,74956,74957],{"class":71,"line":34725},[69,74958,74959],{"class":75},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[69,74961,74962,74964,74966,74968],{"class":71,"line":34736},[69,74963,12463],{"class":82},[69,74965,58921],{"class":90},[69,74967,14805],{"class":82},[69,74969,53066],{"class":86},[69,74971,74972,74975,74977],{"class":71,"line":34742},[69,74973,74974],{"class":86},"    console.",[69,74976,59473],{"class":109},[69,74978,53640],{"class":86},[69,74980,74981],{"class":71,"line":34762},[69,74982,3644],{"emptyLinePlaceholder":1325},[69,74984,74985],{"class":71,"line":34768},[69,74986,74987],{"class":75},"    \u002F\u002F 时间函数\n",[69,74989,74990,74992,74995],{"class":71,"line":34774},[69,74991,71309],{"class":82},[69,74993,74994],{"class":109}," getTime",[69,74996,12095],{"class":86},[69,74998,74999,75001,75004,75006,75008,75011],{"class":71,"line":34780},[69,75000,59454],{"class":82},[69,75002,75003],{"class":90}," date",[69,75005,14805],{"class":82},[69,75007,12820],{"class":82},[69,75009,75010],{"class":109}," Date",[69,75012,3220],{"class":86},[69,75014,75015,75017,75019,75021,75024,75027,75029,75031,75033,75036,75039,75041,75043,75045,75047,75049,75051,75053],{"class":71,"line":34797},[69,75016,59454],{"class":82},[69,75018,17330],{"class":90},[69,75020,14805],{"class":82},[69,75022,75023],{"class":86}," date.",[69,75025,75026],{"class":109},"getHours",[69,75028,14291],{"class":86},[69,75030,1011],{"class":82},[69,75032,3282],{"class":90},[69,75034,75035],{"class":82}," ?",[69,75037,75038],{"class":1022}," '0'",[69,75040,46802],{"class":82},[69,75042,75023],{"class":86},[69,75044,75026],{"class":109},[69,75046,14291],{"class":86},[69,75048,2246],{"class":82},[69,75050,75023],{"class":86},[69,75052,75026],{"class":109},[69,75054,3220],{"class":86},[69,75056,75057,75059,75062,75064,75066,75069,75071,75073,75075,75077,75079,75081,75083,75085,75087,75089,75091,75093],{"class":71,"line":34803},[69,75058,59454],{"class":82},[69,75060,75061],{"class":90}," m",[69,75063,14805],{"class":82},[69,75065,75023],{"class":86},[69,75067,75068],{"class":109},"getMinutes",[69,75070,14291],{"class":86},[69,75072,1011],{"class":82},[69,75074,3282],{"class":90},[69,75076,75035],{"class":82},[69,75078,75038],{"class":1022},[69,75080,46802],{"class":82},[69,75082,75023],{"class":86},[69,75084,75068],{"class":109},[69,75086,14291],{"class":86},[69,75088,2246],{"class":82},[69,75090,75023],{"class":86},[69,75092,75068],{"class":109},[69,75094,3220],{"class":86},[69,75096,75097,75099,75101,75103,75105,75108,75110,75112,75114,75116,75118,75120,75122,75124,75126,75128,75130,75132],{"class":71,"line":34809},[69,75098,59454],{"class":82},[69,75100,9670],{"class":90},[69,75102,14805],{"class":82},[69,75104,75023],{"class":86},[69,75106,75107],{"class":109},"getSeconds",[69,75109,14291],{"class":86},[69,75111,1011],{"class":82},[69,75113,3282],{"class":90},[69,75115,75035],{"class":82},[69,75117,75038],{"class":1022},[69,75119,46802],{"class":82},[69,75121,75023],{"class":86},[69,75123,75107],{"class":109},[69,75125,14291],{"class":86},[69,75127,2246],{"class":82},[69,75129,75023],{"class":86},[69,75131,75107],{"class":109},[69,75133,3220],{"class":86},[69,75135,75136,75138,75141,75143,75145,75148,75150,75153,75155,75158,75160,75162,75165,75167,75169,75171,75173,75175,75177,75180,75182,75185,75187,75190,75192,75194,75196],{"class":71,"line":34815},[69,75137,59454],{"class":82},[69,75139,75140],{"class":90}," str",[69,75142,14805],{"class":82},[69,75144,64129],{"class":1022},[69,75146,75147],{"class":86},"date",[69,75149,1946],{"class":1022},[69,75151,75152],{"class":109},"getFullYear",[69,75154,3671],{"class":1022},[69,75156,75157],{"class":1022},"}\u002F${",[69,75159,75147],{"class":86},[69,75161,1946],{"class":1022},[69,75163,75164],{"class":109},"getMonth",[69,75166,14291],{"class":1022},[69,75168,1869],{"class":82},[69,75170,26355],{"class":90},[69,75172,75157],{"class":1022},[69,75174,75147],{"class":86},[69,75176,1946],{"class":1022},[69,75178,75179],{"class":109},"getDate",[69,75181,3671],{"class":1022},[69,75183,75184],{"class":1022},"} ${",[69,75186,1804],{"class":86},[69,75188,75189],{"class":1022},"}:${",[69,75191,1932],{"class":86},[69,75193,75189],{"class":1022},[69,75195,2082],{"class":86},[69,75197,75198],{"class":1022},"}`\n",[69,75200,75201,75204],{"class":71,"line":34821},[69,75202,75203],{"class":82},"      return",[69,75205,75206],{"class":86}," str\n",[69,75208,75209],{"class":71,"line":34827},[69,75210,3431],{"class":86},[69,75212,75213],{"class":71,"line":34854},[69,75214,75215],{"class":75},"    \u002F\u002F 渲染函数\n",[69,75217,75218,75220,75222,75224,75226,75228,75230,75232],{"class":71,"line":34878},[69,75219,12463],{"class":82},[69,75221,70972],{"class":90},[69,75223,14805],{"class":82},[69,75225,55623],{"class":86},[69,75227,55626],{"class":109},[69,75229,1398],{"class":86},[69,75231,70983],{"class":1022},[69,75233,1404],{"class":86},[69,75235,75236,75238,75240],{"class":71,"line":34884},[69,75237,71309],{"class":82},[69,75239,71312],{"class":109},[69,75241,12095],{"class":86},[69,75243,75244],{"class":71,"line":34890},[69,75245,75246],{"class":75},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[69,75248,75249],{"class":71,"line":34896},[69,75250,75251],{"class":75},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[69,75253,75254,75256,75259,75261,75263,75266,75268,75270,75272,75275,75277,75280],{"class":71,"line":34907},[69,75255,59454],{"class":82},[69,75257,75258],{"class":90}," trArr",[69,75260,14805],{"class":82},[69,75262,53193],{"class":86},[69,75264,75265],{"class":109},"map",[69,75267,1398],{"class":86},[69,75269,55676],{"class":82},[69,75271,87],{"class":86},[69,75273,75274],{"class":6458},"ele",[69,75276,13677],{"class":86},[69,75278,75279],{"class":6458},"index",[69,75281,103],{"class":86},[69,75283,75284,75286],{"class":71,"line":34918},[69,75285,15992],{"class":82},[69,75287,71393],{"class":1022},[69,75289,75290],{"class":71,"line":34924},[69,75291,75292],{"class":1022},"      \u003Ctr>\n",[69,75294,75295,75297,75299,75301,75304],{"class":71,"line":34941},[69,75296,71398],{"class":1022},[69,75298,75274],{"class":86},[69,75300,1946],{"class":1022},[69,75302,75303],{"class":86},"unameId",[69,75305,71413],{"class":1022},[69,75307,75308,75310,75312,75314,75316],{"class":71,"line":34964},[69,75309,71398],{"class":1022},[69,75311,75274],{"class":86},[69,75313,1946],{"class":1022},[69,75315,71429],{"class":86},[69,75317,71413],{"class":1022},[69,75319,75320,75322,75324,75326,75328],{"class":71,"line":34987},[69,75321,71398],{"class":1022},[69,75323,75274],{"class":86},[69,75325,1946],{"class":1022},[69,75327,71446],{"class":86},[69,75329,71413],{"class":1022},[69,75331,75332,75334,75336,75338,75340],{"class":71,"line":34993},[69,75333,71398],{"class":1022},[69,75335,75274],{"class":86},[69,75337,1946],{"class":1022},[69,75339,71463],{"class":86},[69,75341,71413],{"class":1022},[69,75343,75344,75346,75348,75350,75352],{"class":71,"line":34998},[69,75345,71398],{"class":1022},[69,75347,75274],{"class":86},[69,75349,1946],{"class":1022},[69,75351,71480],{"class":86},[69,75353,71413],{"class":1022},[69,75355,75356,75358,75360,75362,75364],{"class":71,"line":35007},[69,75357,71398],{"class":1022},[69,75359,75274],{"class":86},[69,75361,1946],{"class":1022},[69,75363,71497],{"class":86},[69,75365,71413],{"class":1022},[69,75367,75368,75370,75372,75374,75376],{"class":71,"line":35017},[69,75369,71398],{"class":1022},[69,75371,75274],{"class":86},[69,75373,1946],{"class":1022},[69,75375,3631],{"class":86},[69,75377,71413],{"class":1022},[69,75379,75380],{"class":71,"line":35023},[69,75381,74836],{"class":1022},[69,75383,75384,75387,75389],{"class":71,"line":35028},[69,75385,75386],{"class":1022},"          \u003Ca href=\"#\" data-id=\"${",[69,75388,75279],{"class":86},[69,75390,75391],{"class":1022},"}\">删除\u003C\u002Fa>\n",[69,75393,75394],{"class":71,"line":35034},[69,75395,74846],{"class":1022},[69,75397,75398],{"class":71,"line":35047},[69,75399,75400],{"class":1022},"      \u003C\u002Ftr>\n",[69,75402,75403],{"class":71,"line":35053},[69,75404,75405],{"class":1022},"  `\n",[69,75407,75408],{"class":71,"line":35064},[69,75409,66041],{"class":86},[69,75411,75412,75414,75416],{"class":71,"line":35075},[69,75413,59470],{"class":86},[69,75415,59473],{"class":109},[69,75417,75418],{"class":86},"(trArr)\n",[69,75420,75421],{"class":71,"line":35094},[69,75422,3644],{"emptyLinePlaceholder":1325},[69,75424,75425],{"class":71,"line":50754},[69,75426,75427],{"class":75},"      \u002F\u002F (2) 把数组转换为字符串join\n",[69,75429,75430],{"class":71,"line":50759},[69,75431,75432],{"class":75},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[69,75434,75435,75437,75439,75442,75445,75447,75450],{"class":71,"line":50768},[69,75436,71324],{"class":86},[69,75438,1019],{"class":82},[69,75440,75441],{"class":86}," trArr.",[69,75443,75444],{"class":109},"join",[69,75446,1398],{"class":86},[69,75448,75449],{"class":1022},"''",[69,75451,1404],{"class":86},[69,75453,75454],{"class":71,"line":50777},[69,75455,75456],{"class":75},"      \u002F\u002F 显示共有几条\n",[69,75458,75459,75461,75463,75465,75468,75471,75473,75475],{"class":71,"line":50782},[69,75460,56998],{"class":86},[69,75462,55626],{"class":109},[69,75464,1398],{"class":86},[69,75466,75467],{"class":1022},"'.total span'",[69,75469,75470],{"class":86},").innerHTML ",[69,75472,1019],{"class":82},[69,75474,53193],{"class":86},[69,75476,57058],{"class":90},[69,75478,75479],{"class":71,"line":50787},[69,75480,3431],{"class":86},[69,75482,75483],{"class":71,"line":50792},[69,75484,75485],{"class":75},"    \u002F\u002F render()\n",[69,75487,75488],{"class":71,"line":50805},[69,75489,3644],{"emptyLinePlaceholder":1325},[69,75491,75492],{"class":71,"line":50810},[69,75493,75494],{"class":75},"    \u002F\u002F 获取DOM对象\n",[69,75496,75497,75499,75501,75503,75505,75507,75509,75511],{"class":71,"line":50819},[69,75498,12463],{"class":82},[69,75500,71046],{"class":90},[69,75502,14805],{"class":82},[69,75504,55623],{"class":86},[69,75506,55626],{"class":109},[69,75508,1398],{"class":86},[69,75510,71057],{"class":1022},[69,75512,1404],{"class":86},[69,75514,75515,75517,75519,75521,75523,75525,75527,75529],{"class":71,"line":50828},[69,75516,12463],{"class":82},[69,75518,70873],{"class":90},[69,75520,14805],{"class":82},[69,75522,55623],{"class":86},[69,75524,55626],{"class":109},[69,75526,1398],{"class":86},[69,75528,70884],{"class":1022},[69,75530,1404],{"class":86},[69,75532,75533,75535,75537,75539,75541,75543,75545,75547],{"class":71,"line":50845},[69,75534,12463],{"class":82},[69,75536,16928],{"class":90},[69,75538,14805],{"class":82},[69,75540,55623],{"class":86},[69,75542,55626],{"class":109},[69,75544,1398],{"class":86},[69,75546,70903],{"class":1022},[69,75548,1404],{"class":86},[69,75550,75552,75554,75556,75558,75560,75562,75564,75566],{"class":71,"line":75551},231,[69,75553,12463],{"class":82},[69,75555,70932],{"class":90},[69,75557,14805],{"class":82},[69,75559,55623],{"class":86},[69,75561,55626],{"class":109},[69,75563,1398],{"class":86},[69,75565,70943],{"class":1022},[69,75567,1404],{"class":86},[69,75569,75571,75573,75575,75577,75579,75581,75583,75585],{"class":71,"line":75570},232,[69,75572,12463],{"class":82},[69,75574,70912],{"class":90},[69,75576,14805],{"class":82},[69,75578,55623],{"class":86},[69,75580,55626],{"class":109},[69,75582,1398],{"class":86},[69,75584,70923],{"class":1022},[69,75586,1404],{"class":86},[69,75588,75590,75592,75594,75596,75598,75600,75602,75604],{"class":71,"line":75589},233,[69,75591,12463],{"class":82},[69,75593,70952],{"class":90},[69,75595,14805],{"class":82},[69,75597,55623],{"class":86},[69,75599,55626],{"class":109},[69,75601,1398],{"class":86},[69,75603,70963],{"class":1022},[69,75605,1404],{"class":86},[69,75607,75609],{"class":71,"line":75608},234,[69,75610,3644],{"emptyLinePlaceholder":1325},[69,75612,75614],{"class":71,"line":75613},235,[69,75615,75616],{"class":75},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[69,75618,75620,75622,75624,75626,75628,75630,75632,75634,75636],{"class":71,"line":75619},236,[69,75621,71064],{"class":86},[69,75623,59039],{"class":109},[69,75625,1398],{"class":86},[69,75627,71071],{"class":1022},[69,75629,13677],{"class":86},[69,75631,55676],{"class":82},[69,75633,87],{"class":86},[69,75635,1468],{"class":6458},[69,75637,103],{"class":86},[69,75639,75641],{"class":71,"line":75640},237,[69,75642,75643],{"class":75},"      \u002F\u002F 禁止浏览器跳转\n",[69,75645,75647,75649,75651],{"class":71,"line":75646},238,[69,75648,71091],{"class":86},[69,75650,71094],{"class":109},[69,75652,3220],{"class":86},[69,75654,75656],{"class":71,"line":75655},239,[69,75657,75658],{"class":75},"      \u002F\u002F 非空判断\n",[69,75660,75662],{"class":71,"line":75661},240,[69,75663,75664],{"class":75},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[69,75666,75668],{"class":71,"line":75667},241,[69,75669,75670],{"class":75},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[69,75672,75674,75676,75678,75680,75683,75685,75688,75691,75693,75695],{"class":71,"line":75673},242,[69,75675,55707],{"class":82},[69,75677,87],{"class":86},[69,75679,1618],{"class":82},[69,75681,75682],{"class":86},"uname.value ",[69,75684,72578],{"class":82},[69,75686,75687],{"class":82}," !",[69,75689,75690],{"class":86},"age.value ",[69,75692,72578],{"class":82},[69,75694,75687],{"class":82},[69,75696,75697],{"class":86},"salary.value) {\n",[69,75699,75701,75703,75705,75707,75709],{"class":71,"line":75700},243,[69,75702,15992],{"class":82},[69,75704,71165],{"class":109},[69,75706,1398],{"class":86},[69,75708,71170],{"class":1022},[69,75710,1404],{"class":86},[69,75712,75714],{"class":71,"line":75713},244,[69,75715,53626],{"class":86},[69,75717,75719,75721,75723],{"class":71,"line":75718},245,[69,75720,59233],{"class":86},[69,75722,53112],{"class":109},[69,75724,75725],{"class":86},"({\n",[69,75727,75729],{"class":71,"line":75728},246,[69,75730,75731],{"class":75},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[69,75733,75735],{"class":71,"line":75734},247,[69,75736,75737],{"class":75},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[69,75739,75741],{"class":71,"line":75740},248,[69,75742,75743],{"class":75},"        \u002F\u002F 对象的序号应为数组长度+1\n",[69,75745,75747],{"class":71,"line":75746},249,[69,75748,75749],{"class":75},"        \u002F\u002F unameId: arr.length + 1,\n",[69,75751,75753],{"class":71,"line":75752},250,[69,75754,3644],{"emptyLinePlaceholder":1325},[69,75756,75758],{"class":71,"line":75757},251,[69,75759,75760],{"class":75},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[69,75762,75764],{"class":71,"line":75763},252,[69,75765,75766],{"class":75},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[69,75768,75770],{"class":71,"line":75769},253,[69,75771,75772],{"class":75},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[69,75774,75776],{"class":71,"line":75775},254,[69,75777,75778],{"class":75},"        \u002F\u002F 0当假看\n",[69,75780,75782,75785,75787,75789,75792,75794,75796,75798,75801,75803,75805,75808,75810],{"class":71,"line":75781},255,[69,75783,75784],{"class":86},"        unameId: arr.",[69,75786,53196],{"class":90},[69,75788,75035],{"class":82},[69,75790,75791],{"class":86}," arr[arr.",[69,75793,53196],{"class":90},[69,75795,53499],{"class":82},[69,75797,26355],{"class":90},[69,75799,75800],{"class":86},"].unameId ",[69,75802,1869],{"class":82},[69,75804,26355],{"class":90},[69,75806,75807],{"class":82}," :",[69,75809,26355],{"class":90},[69,75811,32702],{"class":86},[69,75813,75815],{"class":71,"line":75814},256,[69,75816,71218],{"class":86},[69,75818,75820],{"class":71,"line":75819},257,[69,75821,71223],{"class":86},[69,75823,75825],{"class":71,"line":75824},258,[69,75826,71233],{"class":86},[69,75828,75830],{"class":71,"line":75829},259,[69,75831,71228],{"class":86},[69,75833,75835],{"class":71,"line":75834},260,[69,75836,75837],{"class":86},"        city: city.value,\n",[69,75839,75841],{"class":71,"line":75840},261,[69,75842,75843],{"class":75},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[69,75845,75847],{"class":71,"line":75846},262,[69,75848,75849],{"class":75},"        \u002F\u002F time: new Date().toDateString()\n",[69,75851,75853,75856,75859],{"class":71,"line":75852},263,[69,75854,75855],{"class":86},"        time: ",[69,75857,75858],{"class":109},"getTime",[69,75860,3220],{"class":86},[69,75862,75864],{"class":71,"line":75863},264,[69,75865,66041],{"class":86},[69,75867,75869],{"class":71,"line":75868},265,[69,75870,75871],{"class":75},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[69,75873,75875,75877],{"class":71,"line":75874},266,[69,75876,71293],{"class":109},[69,75878,3220],{"class":86},[69,75880,75882,75884,75886,75888,75890],{"class":71,"line":75881},267,[69,75883,71276],{"class":90},[69,75885,1946],{"class":86},[69,75887,71281],{"class":109},[69,75889,14291],{"class":86},[69,75891,75892],{"class":75},"\u002F\u002F重置表单\n",[69,75894,75896],{"class":71,"line":75895},268,[69,75897,75898],{"class":75},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[69,75900,75902,75905,75907,75909,75912,75914,75916,75918,75920],{"class":71,"line":75901},269,[69,75903,75904],{"class":86},"      localStorage.",[69,75906,72875],{"class":109},[69,75908,1398],{"class":86},[69,75910,75911],{"class":1022},"'data'",[69,75913,13677],{"class":86},[69,75915,72885],{"class":90},[69,75917,1946],{"class":86},[69,75919,72890],{"class":109},[69,75921,75922],{"class":86},"(arr))\n",[69,75924,75926],{"class":71,"line":75925},270,[69,75927,34697],{"class":86},[69,75929,75931],{"class":71,"line":75930},271,[69,75932,3644],{"emptyLinePlaceholder":1325},[69,75934,75936],{"class":71,"line":75935},272,[69,75937,75938],{"class":75},"    \u002F\u002F 3.删除业务\n",[69,75940,75942],{"class":71,"line":75941},273,[69,75943,75944],{"class":75},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[69,75946,75948,75950,75952,75954,75956,75958,75960,75962,75964],{"class":71,"line":75947},274,[69,75949,71566],{"class":86},[69,75951,59039],{"class":109},[69,75953,1398],{"class":86},[69,75955,59044],{"class":1022},[69,75957,13677],{"class":86},[69,75959,55676],{"class":82},[69,75961,87],{"class":86},[69,75963,1468],{"class":6458},[69,75965,103],{"class":86},[69,75967,75969],{"class":71,"line":75968},275,[69,75970,75971],{"class":75},"      \u002F\u002F 判断是否点击的是删除按钮\n",[69,75973,75975,75977,75979,75981,75983],{"class":71,"line":75974},276,[69,75976,55707],{"class":82},[69,75978,68260],{"class":86},[69,75980,55713],{"class":82},[69,75982,69482],{"class":1022},[69,75984,103],{"class":86},[69,75986,75988],{"class":71,"line":75987},277,[69,75989,75990],{"class":75},"        \u002F\u002F alert(1)\n",[69,75992,75994],{"class":71,"line":75993},278,[69,75995,75996],{"class":75},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[69,75998,76000],{"class":71,"line":75999},279,[69,76001,76002],{"class":75},"        \u002F\u002F console.log(e.target)\n",[69,76004,76006],{"class":71,"line":76005},280,[69,76007,76008],{"class":75},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[69,76010,76012],{"class":71,"line":76011},281,[69,76013,3644],{"emptyLinePlaceholder":1325},[69,76015,76017],{"class":71,"line":76016},282,[69,76018,76019],{"class":75},"        \u002F\u002F 确认框，确然是否真的要删除\n",[69,76021,76023],{"class":71,"line":76022},283,[69,76024,76025],{"class":75},"        \u002F\u002F confirm()为确认框\n",[69,76027,76029],{"class":71,"line":76028},284,[69,76030,76031],{"class":75},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[69,76033,76035,76037,76039,76042,76044,76047],{"class":71,"line":76034},285,[69,76036,3741],{"class":82},[69,76038,87],{"class":86},[69,76040,76041],{"class":109},"confirm",[69,76043,1398],{"class":86},[69,76045,76046],{"class":1022},"'您确定要删除这条数据吗？'",[69,76048,76049],{"class":86},")) {\n",[69,76051,76053,76056,76058,76060,76062],{"class":71,"line":76052},286,[69,76054,76055],{"class":86},"          arr.",[69,76057,59236],{"class":109},[69,76059,71619],{"class":86},[69,76061,1609],{"class":90},[69,76063,1404],{"class":86},[69,76065,76067],{"class":71,"line":76066},287,[69,76068,76069],{"class":75},"          \u002F\u002F 3.4 重新渲染页面\n",[69,76071,76073,76076],{"class":71,"line":76072},288,[69,76074,76075],{"class":109},"          render",[69,76077,3220],{"class":86},[69,76079,76081],{"class":71,"line":76080},289,[69,76082,76083],{"class":75},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[69,76085,76087,76090,76092,76094,76096,76098,76100,76102,76104],{"class":71,"line":76086},290,[69,76088,76089],{"class":86},"          localStorage.",[69,76091,72875],{"class":109},[69,76093,1398],{"class":86},[69,76095,75911],{"class":1022},[69,76097,13677],{"class":86},[69,76099,72885],{"class":90},[69,76101,1946],{"class":86},[69,76103,72890],{"class":109},[69,76105,75922],{"class":86},[69,76107,76109],{"class":71,"line":76108},291,[69,76110,3773],{"class":86},[69,76112,76114],{"class":71,"line":76113},292,[69,76115,53626],{"class":86},[69,76117,76119],{"class":71,"line":76118},293,[69,76120,3644],{"emptyLinePlaceholder":1325},[69,76122,76124],{"class":71,"line":76123},294,[69,76125,34697],{"class":86},[69,76127,76129],{"class":71,"line":76128},295,[69,76130,3644],{"emptyLinePlaceholder":1325},[69,76132,76134,76136,76138],{"class":71,"line":76133},296,[69,76135,53645],{"class":86},[69,76137,53041],{"class":348},[69,76139,1026],{"class":86},[69,76141,76143,76145,76147],{"class":71,"line":76142},297,[69,76144,1036],{"class":86},[69,76146,680],{"class":348},[69,76148,1026],{"class":86},[69,76150,76152],{"class":71,"line":76151},298,[69,76153,3644],{"emptyLinePlaceholder":1325},[69,76155,76157,76159,76161],{"class":71,"line":76156},299,[69,76158,1036],{"class":86},[69,76160,349],{"class":348},[69,76162,1026],{"class":86},[14,76164,76166],{"id":76165},"_36-正则表达式","3.6 正则表达式",[29,76168,76169],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[29,76171,76172],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[29,76174,76175],{},"正则表达式的作用：",[162,76177,76178,76185,76191],{},[40,76179,76180,76181,76184],{},"表单验证（ ",[195,76182,76183],{},"匹配"," ）",[40,76186,76187,76188,76184],{},"过滤敏感词（ ",[195,76189,76190],{},"替换",[40,76192,76193,76194,76184],{},"字符串中提取我们想要的部分（ ",[195,76195,76196],{},"提取",[19,76198,76200],{"id":76199},"_361-语法","3.6.1 语法",[29,76202,76203],{},"正则表达式使用步骤：",[37,76205,76206,76209],{},[40,76207,76208],{},"定义规则",[40,76210,76211],{},"查找是否匹配",[29,76213,76214],{},"正则表达式里边不需要写引号",[29,76216,76217],{},[24,76218],{"alt":64,"src":76219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[29,76221,76222],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[29,76224,76225],{},"reg.test(str)",[29,76227,76228],{},[24,76229],{"alt":64,"src":76230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[29,76232,76233],{},[24,76234],{"alt":64,"src":76235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[19,76237,76239],{"id":76238},"_362-元字符","3.6.2 元字符",[37,76241,76242,76245,76248,76251,76258],{},[40,76243,76244],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[40,76246,76247],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[40,76249,76250],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[40,76252,76253,76254],{},"正则验证工具：",[187,76255,76256],{"href":76256,"rel":76257},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[191],[40,76259,76260],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23237,76262,76264],{"id":76263},"_3621-边界符","3.6.2.1 边界符",[29,76266,76267],{},[24,76268],{"alt":64,"src":76269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[29,76271,76272],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[29,76274,76275],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[29,76277,76278],{},"只匹配一次",[29,76280,76281],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23237,76283,76285],{"id":76284},"_3622-量词","3.6.2.2 量词",[29,76287,76288],{},[24,76289],{"alt":64,"src":76290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[29,76292,76293],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23237,76295,76297],{"id":76296},"_3623-元字符","3.6.2.3 元字符",[29,76299,76300],{},[24,76301],{"alt":64,"src":76302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[29,76304,76305],{},"匹配的是a或b或c []只选一个",[29,76307,76308],{},[24,76309],{"alt":64,"src":76310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[29,76312,76313],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[29,76315,76316],{},[24,76317],{"alt":64,"src":76318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[29,76320,76321],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[29,76323,76324],{},[24,76325],{"alt":64,"src":76326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[59,76328,76330],{"className":51869,"code":76329,"language":349,"meta":64,"style":64},"\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",[66,76331,76332,76342,76356,76360,76368,76382,76402,76414,76422,76426,76434,76442,76447,76478,76505,76533,76537,76542,76570,76601,76606,76611,76642,76674,76706,76710,76715,76746,76776,76806,76810,76815,76846,76877,76907,76937,76941,76946,76979,76983,76988,77019,77050,77054,77059,77090,77120,77151,77155,77160,77192,77223,77254,77281,77312,77344,77377,77408,77439,77471,77502,77510,77518,77522],{"__ignoreMap":64},[69,76333,76334,76336,76338,76340],{"class":71,"line":72},[69,76335,52532],{"class":86},[69,76337,52535],{"class":348},[69,76339,52538],{"class":109},[69,76341,1026],{"class":86},[69,76343,76344,76346,76348,76350,76352,76354],{"class":71,"line":79},[69,76345,1011],{"class":86},[69,76347,349],{"class":348},[69,76349,52549],{"class":109},[69,76351,1019],{"class":86},[69,76353,52554],{"class":1022},[69,76355,1026],{"class":86},[69,76357,76358],{"class":71,"line":106},[69,76359,3644],{"emptyLinePlaceholder":1325},[69,76361,76362,76364,76366],{"class":71,"line":116},[69,76363,1011],{"class":86},[69,76365,52567],{"class":348},[69,76367,1026],{"class":86},[69,76369,76370,76372,76374,76376,76378,76380],{"class":71,"line":133},[69,76371,53372],{"class":86},[69,76373,52577],{"class":348},[69,76375,52580],{"class":109},[69,76377,1019],{"class":86},[69,76379,52585],{"class":1022},[69,76381,1026],{"class":86},[69,76383,76384,76386,76388,76390,76392,76394,76396,76398,76400],{"class":71,"line":139},[69,76385,53372],{"class":86},[69,76387,52577],{"class":348},[69,76389,16160],{"class":109},[69,76391,1019],{"class":86},[69,76393,52624],{"class":1022},[69,76395,52604],{"class":109},[69,76397,1019],{"class":86},[69,76399,52631],{"class":1022},[69,76401,1026],{"class":86},[69,76403,76404,76406,76408,76410,76412],{"class":71,"line":401},[69,76405,53372],{"class":86},[69,76407,52640],{"class":348},[69,76409,52643],{"class":86},[69,76411,52640],{"class":348},[69,76413,1026],{"class":86},[69,76415,76416,76418,76420],{"class":71,"line":470},[69,76417,1036],{"class":86},[69,76419,52567],{"class":348},[69,76421,1026],{"class":86},[69,76423,76424],{"class":71,"line":475},[69,76425,3644],{"emptyLinePlaceholder":1325},[69,76427,76428,76430,76432],{"class":71,"line":482},[69,76429,1011],{"class":86},[69,76431,680],{"class":348},[69,76433,1026],{"class":86},[69,76435,76436,76438,76440],{"class":71,"line":497},[69,76437,53372],{"class":86},[69,76439,53041],{"class":348},[69,76441,1026],{"class":86},[69,76443,76444],{"class":71,"line":502},[69,76445,76446],{"class":75},"    \u002F\u002F 元字符中\n",[69,76448,76449,76451,76453,76455,76457,76460,76462,76464,76467,76469,76472,76475],{"class":71,"line":509},[69,76450,74974],{"class":86},[69,76452,59473],{"class":109},[69,76454,1398],{"class":86},[69,76456,1972],{"class":1022},[69,76458,76459],{"class":49213},"哈",[69,76461,1972],{"class":1022},[69,76463,1946],{"class":86},[69,76465,76466],{"class":109},"test",[69,76468,1398],{"class":86},[69,76470,76471],{"class":1022},"'哈'",[69,76473,76474],{"class":86},"))  ",[69,76476,76477],{"class":75},"\u002F\u002Ftrue\n",[69,76479,76480,76482,76484,76486,76488,76490,76492,76494,76496,76498,76501,76503],{"class":71,"line":524},[69,76481,74974],{"class":86},[69,76483,59473],{"class":109},[69,76485,1398],{"class":86},[69,76487,1972],{"class":1022},[69,76489,76459],{"class":49213},[69,76491,1972],{"class":1022},[69,76493,1946],{"class":86},[69,76495,76466],{"class":109},[69,76497,1398],{"class":86},[69,76499,76500],{"class":1022},"'哈哈'",[69,76502,76474],{"class":86},[69,76504,76477],{"class":75},[69,76506,76507,76509,76511,76513,76515,76517,76519,76521,76523,76525,76528,76531],{"class":71,"line":2888},[69,76508,74974],{"class":86},[69,76510,59473],{"class":109},[69,76512,1398],{"class":86},[69,76514,1972],{"class":1022},[69,76516,76459],{"class":49213},[69,76518,1972],{"class":1022},[69,76520,1946],{"class":86},[69,76522,76466],{"class":109},[69,76524,1398],{"class":86},[69,76526,76527],{"class":1022},"'二哈'",[69,76529,76530],{"class":86},"))   ",[69,76532,76477],{"class":75},[69,76534,76535],{"class":71,"line":2893},[69,76536,3644],{"emptyLinePlaceholder":1325},[69,76538,76539],{"class":71,"line":2899},[69,76540,76541],{"class":75},"    \u002F\u002F 1.边界符\n",[69,76543,76544,76546,76548,76550,76552,76554,76556,76558,76560,76562,76564,76566,76568],{"class":71,"line":2919},[69,76545,74974],{"class":86},[69,76547,59473],{"class":109},[69,76549,1398],{"class":86},[69,76551,1972],{"class":1022},[69,76553,2352],{"class":82},[69,76555,76459],{"class":49213},[69,76557,1972],{"class":1022},[69,76559,1946],{"class":86},[69,76561,76466],{"class":109},[69,76563,1398],{"class":86},[69,76565,76471],{"class":1022},[69,76567,76474],{"class":86},[69,76569,76477],{"class":75},[69,76571,76572,76574,76576,76578,76580,76582,76584,76586,76588,76590,76592,76594,76596,76598],{"class":71,"line":2924},[69,76573,74974],{"class":86},[69,76575,59473],{"class":109},[69,76577,1398],{"class":86},[69,76579,1972],{"class":1022},[69,76581,2352],{"class":82},[69,76583,76459],{"class":49213},[69,76585,1693],{"class":82},[69,76587,1972],{"class":1022},[69,76589,1946],{"class":86},[69,76591,76466],{"class":109},[69,76593,1398],{"class":86},[69,76595,76500],{"class":1022},[69,76597,76474],{"class":86},[69,76599,76600],{"class":75},"\u002F\u002Ffalse\n",[69,76602,76603],{"class":71,"line":2938},[69,76604,76605],{"class":75},"    \u002F\u002F 2.量词\n",[69,76607,76608],{"class":71,"line":2943},[69,76609,76610],{"class":75},"    \u002F\u002F 量词 * 类似于 >= 0\n",[69,76612,76613,76615,76617,76619,76621,76623,76625,76628,76630,76632,76634,76636,76638,76640],{"class":71,"line":2972},[69,76614,74974],{"class":86},[69,76616,59473],{"class":109},[69,76618,1398],{"class":86},[69,76620,1972],{"class":1022},[69,76622,2352],{"class":82},[69,76624,76459],{"class":49213},[69,76626,76627],{"class":82},"*$",[69,76629,1972],{"class":1022},[69,76631,1946],{"class":86},[69,76633,76466],{"class":109},[69,76635,1398],{"class":86},[69,76637,76500],{"class":1022},[69,76639,76474],{"class":86},[69,76641,76477],{"class":75},[69,76643,76644,76646,76648,76650,76652,76654,76656,76658,76660,76662,76664,76666,76669,76671],{"class":71,"line":2977},[69,76645,74974],{"class":86},[69,76647,59473],{"class":109},[69,76649,1398],{"class":86},[69,76651,1972],{"class":1022},[69,76653,2352],{"class":82},[69,76655,76459],{"class":49213},[69,76657,76627],{"class":82},[69,76659,1972],{"class":1022},[69,76661,1946],{"class":86},[69,76663,76466],{"class":109},[69,76665,1398],{"class":86},[69,76667,76668],{"class":1022},"'二哈好傻'",[69,76670,76474],{"class":86},[69,76672,76673],{"class":75},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[69,76675,76676,76678,76680,76682,76684,76686,76688,76690,76692,76694,76696,76698,76701,76703],{"class":71,"line":2994},[69,76677,74974],{"class":86},[69,76679,59473],{"class":109},[69,76681,1398],{"class":86},[69,76683,1972],{"class":1022},[69,76685,2352],{"class":82},[69,76687,76459],{"class":49213},[69,76689,76627],{"class":82},[69,76691,1972],{"class":1022},[69,76693,1946],{"class":86},[69,76695,76466],{"class":109},[69,76697,1398],{"class":86},[69,76699,76700],{"class":1022},"'哈好哈'",[69,76702,76530],{"class":86},[69,76704,76705],{"class":75},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[69,76707,76708],{"class":71,"line":2999},[69,76709,3644],{"emptyLinePlaceholder":1325},[69,76711,76712],{"class":71,"line":3004},[69,76713,76714],{"class":75},"    \u002F\u002F +类似于>=1\n",[69,76716,76717,76719,76721,76723,76725,76727,76729,76732,76734,76736,76738,76740,76742,76744],{"class":71,"line":3009},[69,76718,74974],{"class":86},[69,76720,59473],{"class":109},[69,76722,1398],{"class":86},[69,76724,1972],{"class":1022},[69,76726,2352],{"class":82},[69,76728,76459],{"class":49213},[69,76730,76731],{"class":82},"+$",[69,76733,1972],{"class":1022},[69,76735,1946],{"class":86},[69,76737,76466],{"class":109},[69,76739,1398],{"class":86},[69,76741,76500],{"class":1022},[69,76743,76474],{"class":86},[69,76745,76477],{"class":75},[69,76747,76748,76750,76752,76754,76756,76758,76760,76762,76764,76766,76768,76770,76772,76774],{"class":71,"line":3023},[69,76749,74974],{"class":86},[69,76751,59473],{"class":109},[69,76753,1398],{"class":86},[69,76755,1972],{"class":1022},[69,76757,2352],{"class":82},[69,76759,76459],{"class":49213},[69,76761,76731],{"class":82},[69,76763,1972],{"class":1022},[69,76765,1946],{"class":86},[69,76767,76466],{"class":109},[69,76769,1398],{"class":86},[69,76771,76668],{"class":1022},[69,76773,76474],{"class":86},[69,76775,76673],{"class":75},[69,76777,76778,76780,76782,76784,76786,76788,76790,76792,76794,76796,76798,76800,76802,76804],{"class":71,"line":3028},[69,76779,74974],{"class":86},[69,76781,59473],{"class":109},[69,76783,1398],{"class":86},[69,76785,1972],{"class":1022},[69,76787,2352],{"class":82},[69,76789,76459],{"class":49213},[69,76791,76731],{"class":82},[69,76793,1972],{"class":1022},[69,76795,1946],{"class":86},[69,76797,76466],{"class":109},[69,76799,1398],{"class":86},[69,76801,76700],{"class":1022},[69,76803,76530],{"class":86},[69,76805,76600],{"class":75},[69,76807,76808],{"class":71,"line":3821},[69,76809,3644],{"emptyLinePlaceholder":1325},[69,76811,76812],{"class":71,"line":3835},[69,76813,76814],{"class":75},"    \u002F\u002F ?类似于0次或一次\n",[69,76816,76817,76819,76821,76823,76825,76827,76830,76832,76834,76836,76838,76840,76842,76844],{"class":71,"line":3843},[69,76818,74974],{"class":86},[69,76820,59473],{"class":109},[69,76822,1398],{"class":86},[69,76824,1972],{"class":1022},[69,76826,2352],{"class":82},[69,76828,76829],{"class":49213},"哈？",[69,76831,1693],{"class":82},[69,76833,1972],{"class":1022},[69,76835,1946],{"class":86},[69,76837,76466],{"class":109},[69,76839,1398],{"class":86},[69,76841,75449],{"class":1022},[69,76843,76530],{"class":86},[69,76845,76477],{"class":75},[69,76847,76848,76850,76852,76854,76856,76858,76860,76863,76865,76867,76869,76871,76873,76875],{"class":71,"line":3848},[69,76849,74974],{"class":86},[69,76851,59473],{"class":109},[69,76853,1398],{"class":86},[69,76855,1972],{"class":1022},[69,76857,2352],{"class":82},[69,76859,76459],{"class":49213},[69,76861,76862],{"class":82},"?$",[69,76864,1972],{"class":1022},[69,76866,1946],{"class":86},[69,76868,76466],{"class":109},[69,76870,1398],{"class":86},[69,76872,76500],{"class":1022},[69,76874,76474],{"class":86},[69,76876,76600],{"class":75},[69,76878,76879,76881,76883,76885,76887,76889,76891,76893,76895,76897,76899,76901,76903,76905],{"class":71,"line":3854},[69,76880,74974],{"class":86},[69,76882,59473],{"class":109},[69,76884,1398],{"class":86},[69,76886,1972],{"class":1022},[69,76888,2352],{"class":82},[69,76890,76459],{"class":49213},[69,76892,76862],{"class":82},[69,76894,1972],{"class":1022},[69,76896,1946],{"class":86},[69,76898,76466],{"class":109},[69,76900,1398],{"class":86},[69,76902,76668],{"class":1022},[69,76904,76474],{"class":86},[69,76906,76673],{"class":75},[69,76908,76909,76911,76913,76915,76917,76919,76921,76923,76925,76927,76929,76931,76933,76935],{"class":71,"line":3860},[69,76910,74974],{"class":86},[69,76912,59473],{"class":109},[69,76914,1398],{"class":86},[69,76916,1972],{"class":1022},[69,76918,2352],{"class":82},[69,76920,76459],{"class":49213},[69,76922,76862],{"class":82},[69,76924,1972],{"class":1022},[69,76926,1946],{"class":86},[69,76928,76466],{"class":109},[69,76930,1398],{"class":86},[69,76932,76700],{"class":1022},[69,76934,76474],{"class":86},[69,76936,76600],{"class":75},[69,76938,76939],{"class":71,"line":3865},[69,76940,3644],{"emptyLinePlaceholder":1325},[69,76942,76943],{"class":71,"line":9190},[69,76944,76945],{"class":75},"    \u002F\u002F {n}写几，就必须出现几次\n",[69,76947,76948,76950,76952,76954,76956,76958,76960,76963,76965,76967,76969,76971,76974,76977],{"class":71,"line":9214},[69,76949,74974],{"class":86},[69,76951,59473],{"class":109},[69,76953,1398],{"class":86},[69,76955,1972],{"class":1022},[69,76957,2352],{"class":82},[69,76959,76459],{"class":49213},[69,76961,76962],{"class":82},"{4}$",[69,76964,1972],{"class":1022},[69,76966,1946],{"class":86},[69,76968,76466],{"class":109},[69,76970,1398],{"class":86},[69,76972,76973],{"class":1022},"'哈哈哈哈'",[69,76975,76976],{"class":86},")) ",[69,76978,76477],{"class":75},[69,76980,76981],{"class":71,"line":9219},[69,76982,3644],{"emptyLinePlaceholder":1325},[69,76984,76985],{"class":71,"line":9225},[69,76986,76987],{"class":75},"    \u002F\u002F {n,}大于等于n次\n",[69,76989,76990,76992,76994,76996,76998,77000,77002,77005,77007,77009,77011,77013,77015,77017],{"class":71,"line":9252},[69,76991,74974],{"class":86},[69,76993,59473],{"class":109},[69,76995,1398],{"class":86},[69,76997,1972],{"class":1022},[69,76999,2352],{"class":82},[69,77001,76459],{"class":49213},[69,77003,77004],{"class":82},"{4,}$",[69,77006,1972],{"class":1022},[69,77008,1946],{"class":86},[69,77010,76466],{"class":109},[69,77012,1398],{"class":86},[69,77014,76973],{"class":1022},[69,77016,76976],{"class":86},[69,77018,76477],{"class":75},[69,77020,77021,77023,77025,77027,77029,77031,77033,77035,77037,77039,77041,77043,77046,77048],{"class":71,"line":9257},[69,77022,74974],{"class":86},[69,77024,59473],{"class":109},[69,77026,1398],{"class":86},[69,77028,1972],{"class":1022},[69,77030,2352],{"class":82},[69,77032,76459],{"class":49213},[69,77034,77004],{"class":82},[69,77036,1972],{"class":1022},[69,77038,1946],{"class":86},[69,77040,76466],{"class":109},[69,77042,1398],{"class":86},[69,77044,77045],{"class":1022},"'哈哈哈哈哈'",[69,77047,76976],{"class":86},[69,77049,76477],{"class":75},[69,77051,77052],{"class":71,"line":9263},[69,77053,3644],{"emptyLinePlaceholder":1325},[69,77055,77056],{"class":71,"line":9275},[69,77057,77058],{"class":75},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[69,77060,77061,77063,77065,77067,77069,77071,77073,77076,77078,77080,77082,77084,77086,77088],{"class":71,"line":9287},[69,77062,74974],{"class":86},[69,77064,59473],{"class":109},[69,77066,1398],{"class":86},[69,77068,1972],{"class":1022},[69,77070,2352],{"class":82},[69,77072,76459],{"class":49213},[69,77074,77075],{"class":82},"{4,6}$",[69,77077,1972],{"class":1022},[69,77079,1946],{"class":86},[69,77081,76466],{"class":109},[69,77083,1398],{"class":86},[69,77085,76973],{"class":1022},[69,77087,76976],{"class":86},[69,77089,76477],{"class":75},[69,77091,77092,77094,77096,77098,77100,77102,77104,77106,77108,77110,77112,77114,77116,77118],{"class":71,"line":9299},[69,77093,74974],{"class":86},[69,77095,59473],{"class":109},[69,77097,1398],{"class":86},[69,77099,1972],{"class":1022},[69,77101,2352],{"class":82},[69,77103,76459],{"class":49213},[69,77105,77075],{"class":82},[69,77107,1972],{"class":1022},[69,77109,1946],{"class":86},[69,77111,76466],{"class":109},[69,77113,1398],{"class":86},[69,77115,77045],{"class":1022},[69,77117,76976],{"class":86},[69,77119,76477],{"class":75},[69,77121,77122,77124,77126,77128,77130,77132,77134,77136,77138,77140,77142,77144,77147,77149],{"class":71,"line":10958},[69,77123,74974],{"class":86},[69,77125,59473],{"class":109},[69,77127,1398],{"class":86},[69,77129,1972],{"class":1022},[69,77131,2352],{"class":82},[69,77133,76459],{"class":49213},[69,77135,77075],{"class":82},[69,77137,1972],{"class":1022},[69,77139,1946],{"class":86},[69,77141,76466],{"class":109},[69,77143,1398],{"class":86},[69,77145,77146],{"class":1022},"'哈哈哈哈哈哈哈'",[69,77148,76976],{"class":86},[69,77150,76600],{"class":75},[69,77152,77153],{"class":71,"line":10983},[69,77154,3644],{"emptyLinePlaceholder":1325},[69,77156,77157],{"class":71,"line":11006},[69,77158,77159],{"class":75},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[69,77161,77162,77164,77166,77168,77170,77172,77175,77177,77179,77181,77183,77185,77188,77190],{"class":71,"line":11030},[69,77163,74974],{"class":86},[69,77165,59473],{"class":109},[69,77167,1398],{"class":86},[69,77169,1972],{"class":1022},[69,77171,2352],{"class":82},[69,77173,77174],{"class":90},"[abc]",[69,77176,1693],{"class":82},[69,77178,1972],{"class":1022},[69,77180,1946],{"class":86},[69,77182,76466],{"class":109},[69,77184,1398],{"class":86},[69,77186,77187],{"class":1022},"'a'",[69,77189,76474],{"class":86},[69,77191,76477],{"class":75},[69,77193,77194,77196,77198,77200,77202,77204,77206,77208,77210,77212,77214,77216,77219,77221],{"class":71,"line":11035},[69,77195,74974],{"class":86},[69,77197,59473],{"class":109},[69,77199,1398],{"class":86},[69,77201,1972],{"class":1022},[69,77203,2352],{"class":82},[69,77205,77174],{"class":90},[69,77207,1693],{"class":82},[69,77209,1972],{"class":1022},[69,77211,1946],{"class":86},[69,77213,76466],{"class":109},[69,77215,1398],{"class":86},[69,77217,77218],{"class":1022},"'b'",[69,77220,76474],{"class":86},[69,77222,76477],{"class":75},[69,77224,77225,77227,77229,77231,77233,77235,77237,77239,77241,77243,77245,77247,77250,77252],{"class":71,"line":11040},[69,77226,74974],{"class":86},[69,77228,59473],{"class":109},[69,77230,1398],{"class":86},[69,77232,1972],{"class":1022},[69,77234,2352],{"class":82},[69,77236,77174],{"class":90},[69,77238,1693],{"class":82},[69,77240,1972],{"class":1022},[69,77242,1946],{"class":86},[69,77244,76466],{"class":109},[69,77246,1398],{"class":86},[69,77248,77249],{"class":1022},"'c'",[69,77251,76474],{"class":86},[69,77253,76477],{"class":75},[69,77255,77256,77258,77260,77262,77264,77266,77268,77270,77272,77274,77277,77279],{"class":71,"line":11045},[69,77257,74974],{"class":86},[69,77259,59473],{"class":109},[69,77261,1398],{"class":86},[69,77263,1972],{"class":1022},[69,77265,77174],{"class":90},[69,77267,1972],{"class":1022},[69,77269,1946],{"class":86},[69,77271,76466],{"class":109},[69,77273,1398],{"class":86},[69,77275,77276],{"class":1022},"'ab'",[69,77278,76474],{"class":86},[69,77280,76477],{"class":75},[69,77282,77283,77285,77287,77289,77291,77293,77295,77297,77299,77301,77303,77305,77307,77309],{"class":71,"line":11054},[69,77284,74974],{"class":86},[69,77286,59473],{"class":109},[69,77288,1398],{"class":86},[69,77290,1972],{"class":1022},[69,77292,2352],{"class":82},[69,77294,77174],{"class":90},[69,77296,1693],{"class":82},[69,77298,1972],{"class":1022},[69,77300,1946],{"class":86},[69,77302,76466],{"class":109},[69,77304,1398],{"class":86},[69,77306,77276],{"class":1022},[69,77308,76474],{"class":86},[69,77310,77311],{"class":75},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[69,77313,77314,77316,77318,77320,77322,77324,77326,77329,77331,77333,77335,77337,77339,77341],{"class":71,"line":11059},[69,77315,74974],{"class":86},[69,77317,59473],{"class":109},[69,77319,1398],{"class":86},[69,77321,1972],{"class":1022},[69,77323,2352],{"class":82},[69,77325,77174],{"class":90},[69,77327,77328],{"class":82},"{2}$",[69,77330,1972],{"class":1022},[69,77332,1946],{"class":86},[69,77334,76466],{"class":109},[69,77336,1398],{"class":86},[69,77338,77276],{"class":1022},[69,77340,76474],{"class":86},[69,77342,77343],{"class":75},"\u002F\u002Ftrue   可以选两个\n",[69,77345,77346,77348,77350,77352,77354,77356,77359,77361,77363,77365,77367,77369,77372,77374],{"class":71,"line":11065},[69,77347,74974],{"class":86},[69,77349,59473],{"class":109},[69,77351,1398],{"class":86},[69,77353,1972],{"class":1022},[69,77355,2352],{"class":82},[69,77357,77358],{"class":90},"[a-z]",[69,77360,1693],{"class":82},[69,77362,1972],{"class":1022},[69,77364,1946],{"class":86},[69,77366,76466],{"class":109},[69,77368,1398],{"class":86},[69,77370,77371],{"class":1022},"'p'",[69,77373,76530],{"class":86},[69,77375,77376],{"class":75},"\u002F\u002Ftrue   依然只能选一个\n",[69,77378,77379,77381,77383,77385,77387,77389,77392,77394,77396,77398,77400,77402,77404,77406],{"class":71,"line":11086},[69,77380,74974],{"class":86},[69,77382,59473],{"class":109},[69,77384,1398],{"class":86},[69,77386,1972],{"class":1022},[69,77388,2352],{"class":82},[69,77390,77391],{"class":90},"[A-Z]",[69,77393,1693],{"class":82},[69,77395,1972],{"class":1022},[69,77397,1946],{"class":86},[69,77399,76466],{"class":109},[69,77401,1398],{"class":86},[69,77403,77371],{"class":1022},[69,77405,76530],{"class":86},[69,77407,76600],{"class":75},[69,77409,77410,77412,77414,77416,77418,77420,77422,77424,77426,77428,77430,77432,77435,77437],{"class":71,"line":11092},[69,77411,74974],{"class":86},[69,77413,59473],{"class":109},[69,77415,1398],{"class":86},[69,77417,1972],{"class":1022},[69,77419,2352],{"class":82},[69,77421,77391],{"class":90},[69,77423,1693],{"class":82},[69,77425,1972],{"class":1022},[69,77427,1946],{"class":86},[69,77429,76466],{"class":109},[69,77431,1398],{"class":86},[69,77433,77434],{"class":1022},"'P'",[69,77436,76530],{"class":86},[69,77438,76477],{"class":75},[69,77440,77441,77443,77445,77447,77449,77451,77454,77456,77458,77460,77462,77464,77467,77469],{"class":71,"line":11106},[69,77442,74974],{"class":86},[69,77444,59473],{"class":109},[69,77446,1398],{"class":86},[69,77448,1972],{"class":1022},[69,77450,2352],{"class":82},[69,77452,77453],{"class":90},"[0-9]",[69,77455,1693],{"class":82},[69,77457,1972],{"class":1022},[69,77459,1946],{"class":86},[69,77461,76466],{"class":109},[69,77463,1398],{"class":86},[69,77465,77466],{"class":1022},"'0'",[69,77468,76530],{"class":86},[69,77470,76477],{"class":75},[69,77472,77473,77475,77477,77479,77481,77483,77486,77488,77490,77492,77494,77496,77498,77500],{"class":71,"line":11112},[69,77474,74974],{"class":86},[69,77476,59473],{"class":109},[69,77478,1398],{"class":86},[69,77480,1972],{"class":1022},[69,77482,2352],{"class":82},[69,77484,77485],{"class":90},"[a-zA-Z0-9]",[69,77487,1693],{"class":82},[69,77489,1972],{"class":1022},[69,77491,1946],{"class":86},[69,77493,76466],{"class":109},[69,77495,1398],{"class":86},[69,77497,77371],{"class":1022},[69,77499,76474],{"class":86},[69,77501,76477],{"class":75},[69,77503,77504,77506,77508],{"class":71,"line":11139},[69,77505,53645],{"class":86},[69,77507,53041],{"class":348},[69,77509,1026],{"class":86},[69,77511,77512,77514,77516],{"class":71,"line":11148},[69,77513,1036],{"class":86},[69,77515,680],{"class":348},[69,77517,1026],{"class":86},[69,77519,77520],{"class":71,"line":11154},[69,77521,3644],{"emptyLinePlaceholder":1325},[69,77523,77524,77526,77528],{"class":71,"line":11162},[69,77525,1036],{"class":86},[69,77527,349],{"class":348},[69,77529,1026],{"class":86},[23237,77531,77533],{"id":77532},"_3624-修饰符","3.6.2.4 修饰符",[29,77535,77536],{},[24,77537],{"alt":64,"src":77538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[29,77540,77541],{},"replace是个方法，使用的时候一定不要忘记括号()",[29,77543,77544],{},[24,77545],{"alt":64,"src":77546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[59,77548,77550],{"className":51869,"code":77549,"language":349,"meta":64,"style":64},"\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",[66,77551,77552,77562,77576,77584,77598,77618,77630,77638,77646,77654,77686,77717,77722,77754,77765,77798,77807,77815,77823],{"__ignoreMap":64},[69,77553,77554,77556,77558,77560],{"class":71,"line":72},[69,77555,52532],{"class":86},[69,77557,52535],{"class":348},[69,77559,52538],{"class":109},[69,77561,1026],{"class":86},[69,77563,77564,77566,77568,77570,77572,77574],{"class":71,"line":79},[69,77565,1011],{"class":86},[69,77567,349],{"class":348},[69,77569,52549],{"class":109},[69,77571,1019],{"class":86},[69,77573,52554],{"class":1022},[69,77575,1026],{"class":86},[69,77577,77578,77580,77582],{"class":71,"line":106},[69,77579,1011],{"class":86},[69,77581,52567],{"class":348},[69,77583,1026],{"class":86},[69,77585,77586,77588,77590,77592,77594,77596],{"class":71,"line":116},[69,77587,53372],{"class":86},[69,77589,52577],{"class":348},[69,77591,52580],{"class":109},[69,77593,1019],{"class":86},[69,77595,52585],{"class":1022},[69,77597,1026],{"class":86},[69,77599,77600,77602,77604,77606,77608,77610,77612,77614,77616],{"class":71,"line":133},[69,77601,53372],{"class":86},[69,77603,52577],{"class":348},[69,77605,16160],{"class":109},[69,77607,1019],{"class":86},[69,77609,52624],{"class":1022},[69,77611,52604],{"class":109},[69,77613,1019],{"class":86},[69,77615,52631],{"class":1022},[69,77617,1026],{"class":86},[69,77619,77620,77622,77624,77626,77628],{"class":71,"line":139},[69,77621,53372],{"class":86},[69,77623,52640],{"class":348},[69,77625,52643],{"class":86},[69,77627,52640],{"class":348},[69,77629,1026],{"class":86},[69,77631,77632,77634,77636],{"class":71,"line":401},[69,77633,1036],{"class":86},[69,77635,52567],{"class":348},[69,77637,1026],{"class":86},[69,77639,77640,77642,77644],{"class":71,"line":470},[69,77641,1011],{"class":86},[69,77643,680],{"class":348},[69,77645,1026],{"class":86},[69,77647,77648,77650,77652],{"class":71,"line":475},[69,77649,53372],{"class":86},[69,77651,53041],{"class":348},[69,77653,1026],{"class":86},[69,77655,77656,77658,77660,77662,77664,77666,77669,77671,77673,77675,77677,77679,77682,77684],{"class":71,"line":482},[69,77657,74974],{"class":86},[69,77659,59473],{"class":109},[69,77661,1398],{"class":86},[69,77663,1972],{"class":1022},[69,77665,2352],{"class":82},[69,77667,77668],{"class":49213},"java",[69,77670,1693],{"class":82},[69,77672,1972],{"class":1022},[69,77674,1946],{"class":86},[69,77676,76466],{"class":109},[69,77678,1398],{"class":86},[69,77680,77681],{"class":1022},"'java'",[69,77683,76976],{"class":86},[69,77685,76477],{"class":75},[69,77687,77688,77690,77692,77694,77696,77698,77700,77702,77704,77706,77708,77710,77713,77715],{"class":71,"line":497},[69,77689,74974],{"class":86},[69,77691,59473],{"class":109},[69,77693,1398],{"class":86},[69,77695,1972],{"class":1022},[69,77697,2352],{"class":82},[69,77699,77668],{"class":49213},[69,77701,1693],{"class":82},[69,77703,1972],{"class":1022},[69,77705,1946],{"class":86},[69,77707,76466],{"class":109},[69,77709,1398],{"class":86},[69,77711,77712],{"class":1022},"'Java'",[69,77714,76976],{"class":86},[69,77716,76600],{"class":75},[69,77718,77719],{"class":71,"line":502},[69,77720,77721],{"class":75},"    \u002F\u002F 不区分大小写、\n",[69,77723,77724,77726,77728,77730,77732,77734,77736,77738,77740,77742,77744,77746,77748,77750,77752],{"class":71,"line":509},[69,77725,74974],{"class":86},[69,77727,59473],{"class":109},[69,77729,1398],{"class":86},[69,77731,1972],{"class":1022},[69,77733,2352],{"class":82},[69,77735,77668],{"class":49213},[69,77737,1693],{"class":82},[69,77739,1972],{"class":1022},[69,77741,1830],{"class":82},[69,77743,1946],{"class":86},[69,77745,76466],{"class":109},[69,77747,1398],{"class":86},[69,77749,77712],{"class":1022},[69,77751,76976],{"class":86},[69,77753,76477],{"class":75},[69,77755,77756,77758,77760,77762],{"class":71,"line":524},[69,77757,12463],{"class":82},[69,77759,75140],{"class":90},[69,77761,14805],{"class":82},[69,77763,77764],{"class":1022}," 'java是一门编程语言，学完java工资很高'\n",[69,77766,77767,77769,77772,77774,77777,77780,77782,77784,77786,77788,77791,77793,77796],{"class":71,"line":2888},[69,77768,12463],{"class":82},[69,77770,77771],{"class":90}," result",[69,77773,14805],{"class":82},[69,77775,77776],{"class":86}," str.",[69,77778,77779],{"class":109},"replace",[69,77781,1398],{"class":86},[69,77783,1972],{"class":1022},[69,77785,77668],{"class":49213},[69,77787,1972],{"class":1022},[69,77789,77790],{"class":82},"ig",[69,77792,13677],{"class":86},[69,77794,77795],{"class":1022},"'前端'",[69,77797,1404],{"class":86},[69,77799,77800,77802,77804],{"class":71,"line":2893},[69,77801,74974],{"class":86},[69,77803,59473],{"class":109},[69,77805,77806],{"class":86},"(result)\n",[69,77808,77809,77811,77813],{"class":71,"line":2899},[69,77810,53645],{"class":86},[69,77812,53041],{"class":348},[69,77814,1026],{"class":86},[69,77816,77817,77819,77821],{"class":71,"line":2919},[69,77818,1036],{"class":86},[69,77820,680],{"class":348},[69,77822,1026],{"class":86},[69,77824,77825,77827,77829],{"class":71,"line":2924},[69,77826,1036],{"class":86},[69,77828,349],{"class":348},[69,77830,1026],{"class":86},[1297,77832,77833],{},"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":64,"searchDepth":79,"depth":79,"links":77835},[77836,77846,77858,77875,77882,77890],{"id":54588,"depth":79,"text":54589,"children":77837},[77838,77839,77840,77841,77842,77843,77844,77845],{"id":54592,"depth":106,"text":54593},{"id":54625,"depth":106,"text":54626},{"id":54664,"depth":106,"text":54665},{"id":54821,"depth":106,"text":54822},{"id":54869,"depth":106,"text":54870},{"id":55006,"depth":106,"text":55007},{"id":55328,"depth":106,"text":55329},{"id":58316,"depth":106,"text":58317},{"id":58344,"depth":79,"text":58345,"children":77847},[77848,77849,77850,77851,77852,77853,77854,77855,77856,77857],{"id":58348,"depth":106,"text":58349},{"id":58371,"depth":106,"text":58372},{"id":59285,"depth":106,"text":59286},{"id":59975,"depth":106,"text":59976},{"id":60257,"depth":106,"text":60258},{"id":64418,"depth":106,"text":64419},{"id":64588,"depth":106,"text":64589},{"id":64716,"depth":106,"text":64717},{"id":64741,"depth":106,"text":64742},{"id":66130,"depth":106,"text":66131},{"id":67283,"depth":79,"text":67284,"children":77859},[77860,77861,77862,77863,77864,77865,77866,77867,77868,77869,77870,77871,77872,77873,77874],{"id":67287,"depth":106,"text":67288},{"id":67941,"depth":106,"text":67942},{"id":69636,"depth":106,"text":69637},{"id":69677,"depth":106,"text":69678},{"id":69719,"depth":106,"text":69720},{"id":69733,"depth":106,"text":69734},{"id":69782,"depth":106,"text":69783},{"id":69794,"depth":106,"text":69795},{"id":69809,"depth":106,"text":69810},{"id":69845,"depth":106,"text":69846},{"id":69926,"depth":106,"text":69927},{"id":70054,"depth":106,"text":70055},{"id":70066,"depth":106,"text":70067},{"id":70085,"depth":106,"text":70086},{"id":72191,"depth":106,"text":72192},{"id":72210,"depth":79,"text":72211,"children":77876},[77877,77878,77879,77880,77881],{"id":72231,"depth":106,"text":72232},{"id":72251,"depth":106,"text":72252},{"id":72300,"depth":106,"text":72301},{"id":72425,"depth":106,"text":72426},{"id":72606,"depth":106,"text":72607},{"id":72624,"depth":79,"text":72625,"children":77883},[77884,77885,77886,77887,77888,77889],{"id":72639,"depth":106,"text":72640},{"id":72698,"depth":106,"text":72699},{"id":72722,"depth":106,"text":72723},{"id":73042,"depth":106,"text":73043},{"id":73074,"depth":106,"text":73075},{"id":73097,"depth":106,"text":73098},{"id":76165,"depth":79,"text":76166,"children":77891},[77892,77893],{"id":76199,"depth":106,"text":76200},{"id":76238,"depth":106,"text":76239},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54560,"description":1322},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77900,"title":77901,"body":77902,"description":1322,"extension":1323,"meta":94039,"navigation":1325,"path":94040,"seo":94041,"stem":94042,"__hash__":94043},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77903,"toc":93975},[77904,77907,77910,77914,77918,77923,77928,77939,77943,77948,77951,77955,77958,77963,77967,77971,77974,77979,77982,77986,77989,77997,78000,78004,78009,78014,78017,78021,78026,78031,78034,78038,78043,78046,78051,78054,78059,78062,78067,78072,78075,78078,78082,78087,78092,78095,78099,78103,78106,78109,78112,78116,78120,78125,78130,78133,78137,78142,78147,78150,78153,78156,78159,78162,78165,78168,78171,78174,78179,78183,78188,78193,78196,78199,78202,78205,78208,78211,78214,78217,78221,78225,78228,78231,78234,78239,78241,78244,78247,78250,78253,78256,78259,78262,78265,78268,78271,78274,78277,78280,78285,78290,78295,78298,78302,78305,78310,78314,78316,78327,78332,78433,78436,78439,78442,78445,78448,78451,78454,78457,78459,78462,78465,78468,78471,78474,78476,78479,78482,78485,78488,78491,78494,78496,78499,78501,78503,78506,78510,78514,78517,78520,78523,78526,78529,78532,78535,78538,78541,78546,78666,78669,78672,78677,78680,78683,78686,78689,78694,78697,78700,78703,78706,78711,78714,78814,78879,78953,78957,78960,78963,78967,78970,78984,79013,79016,79019,79022,79025,79028,79031,79034,79036,79039,79042,79045,79048,79052,79057,79061,79066,79141,79144,79327,79330,79333,79336,79339,79342,79344,79347,79350,79353,79356,79359,79362,79364,79368,79371,79376,79379,79382,79385,79388,79390,79395,79398,79401,79404,79407,79409,79414,79417,79420,79422,79424,79427,79431,79434,79437,79442,79445,79448,79451,79501,79506,79510,79515,79518,79587,79590,79599,79603,79608,79611,79614,79622,79625,79642,81444,81448,81452,81457,81460,81464,81470,81476,81628,81633,81638,81641,81644,81647,81650,81653,81656,81659,81662,81665,81668,81671,81674,81679,81683,81686,81697,81701,81706,81709,81712,81715,81718,81721,81723,81726,81729,81732,81735,81737,81754,81757,81761,81764,81769,81774,81777,81780,81784,81787,81790,81799,81802,81806,81809,81814,81819,81886,81890,81893,81896,81901,81906,81992,81997,82001,82004,82007,82022,82025,82030,82034,82039,82148,82151,82162,82312,82316,82321,82430,82434,82439,82444,82449,82452,82459,82479,82515,82679,82684,82687,82692,82699,82702,82705,82708,82767,82823,82879,82883,82888,83203,83206,83210,83213,83218,83327,83332,83336,83341,83345,83416,83420,83422,83425,83428,83466,83742,83746,83763,83829,83863,83867,83870,83875,83904,83911,83920,83925,83940,83945,83954,83957,84094,84098,84160,84164,84169,84414,84418,84423,84426,84429,84432,84435,84439,84444,86025,86029,86033,86039,86042,86047,86051,86054,86059,86062,86073,86077,86082,86086,86091,86096,86099,86104,86108,86112,86115,86120,86125,86128,86131,86134,86256,86261,86363,86366,86369,86373,86378,86550,86555,86559,86562,86567,86633,86638,86641,86772,86775,86780,86783,86786,86877,86882,86885,86888,86891,86894,86899,86904,86907,86912,86917,86922,86926,86929,86932,86937,86942,86947,86952,87006,87009,87012,87017,87020,87023,87028,87033,87038,87042,87047,87061,87066,87069,87074,87078,87083,87088,87093,87098,87103,87108,87113,87118,87121,87125,87130,87133,87136,87139,87144,87149,87152,87155,87159,87162,87165,87170,87175,87180,87185,87188,87193,87198,87259,87264,87267,87272,88513,88518,88522,88526,88531,88534,88539,88544,88547,88552,88554,88559,88563,88566,88569,88580,88584,88589,88594,88649,88654,88659,88664,88875,88880,88884,88889,88892,88894,88897,88900,89347,89352,89359,89365,89368,89371,89635,89640,89644,89909,89914,89918,89923,89928,89933,89938,90269,90272,90277,90282,90285,90289,90293,90298,90303,90308,90313,90318,90323,90327,90330,90335,90340,90343,90417,90422,90427,90432,90434,90437,90807,90812,90817,90822,90825,90828,90930,90935,90940,91043,91047,91052,91056,91060,91065,91070,91073,91078,91081,91084,91477,91482,91485,91488,91491,91494,92014,92018,92023,92028,92033,92036,92041,92044,92047,92429,92434,92436,92438,92441,92444,92956,92960,93021,93024,93027,93030,93034,93037,93042,93047,93972],[10,77905,77901],{"id":77906},"_4js进阶",[29,77908,77909],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77911,77913],{"id":77912},"_41-作用域","4.1 作用域",[19,77915,77917],{"id":77916},"_411-局部作用域","4.1.1 局部作用域",[29,77919,77920],{},[24,77921],{"alt":64,"src":77922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[29,77924,77925],{},[24,77926],{"alt":64,"src":77927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[162,77929,77930,77933,77936],{},[40,77931,77932],{},"函数作用域在函数内部",[40,77934,77935],{},"块级作用域在{}",[40,77937,77938],{},"对象的那个{}不是作用域，不是块作用域",[19,77940,77942],{"id":77941},"_412-全局作用域","4.1.2 全局作用域",[29,77944,77945],{},[24,77946],{"alt":64,"src":77947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[29,77949,77950],{},"window.a=10不要这样写",[19,77952,77954],{"id":77953},"_413-作用域链","4.1.3 作用域链",[29,77956,77957],{},"变量查找机制",[29,77959,77960],{},[24,77961],{"alt":64,"src":77962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77964,77966],{"id":77965},"_42-垃圾回收机制","4.2 垃圾回收机制",[19,77968,77970],{"id":77969},"_421-大体介绍","4.2.1 大体介绍",[29,77972,77973],{},"垃圾回收机制(Garbage Collection) 简称 GC",[29,77975,77976],{},[24,77977],{"alt":64,"src":77978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[29,77980,77981],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[19,77983,77985],{"id":77984},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[29,77987,77988],{},"堆栈空间分配区别：",[37,77990,77991,77994],{},[40,77992,77993],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[40,77995,77996],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[29,77998,77999],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23237,78001,78003],{"id":78002},"_4221-引用计数","4.2.2.1 引用计数",[29,78005,78006],{},[24,78007],{"alt":64,"src":78008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[29,78010,78011],{},[24,78012],{"alt":64,"src":78013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[29,78015,78016],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23237,78018,78020],{"id":78019},"_4222-标记清除法","4.2.2.2 标记清除法",[29,78022,78023],{},[24,78024],{"alt":64,"src":78025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[29,78027,78028],{},[24,78029],{"alt":64,"src":78030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[29,78032,78033],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78035,78037],{"id":78036},"_43-闭包","4.3 闭包",[29,78039,78040],{},[24,78041],{"alt":64,"src":78042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[29,78044,78045],{},"闭包：内层函数+外层函数的变量",[29,78047,78048],{},[24,78049],{"alt":64,"src":78050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[29,78052,78053],{},"closure就是闭包",[29,78055,78056],{},[24,78057],{"alt":64,"src":78058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[29,78060,78061],{},"内层函数必须包含外层函数的变量才是闭包",[29,78063,78064],{},[24,78065],{"alt":64,"src":78066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[29,78068,78069],{},[24,78070],{"alt":64,"src":78071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[29,78073,78074],{},"闭包可能会引起内存泄漏",[29,78076,78077],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78079,78081],{"id":78080},"_44-变量提升","4.4 变量提升",[29,78083,78084],{},[24,78085],{"alt":64,"src":78086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[29,78088,78089],{},[24,78090],{"alt":64,"src":78091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[29,78093,78094],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78096,78098],{"id":78097},"_45-函数进阶","4.5 函数进阶",[19,78100,78102],{"id":78101},"_451-函数提升","4.5.1 函数提升",[29,78104,78105],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[29,78107,78108],{},"只提升函数声明，不提升函数调用",[53041,78110,78111],{},"\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",[19,78113,78115],{"id":78114},"_452-函数参数","4.5.2 函数参数",[23237,78117,78119],{"id":78118},"_4521-动态参数","4.5.2.1 动态参数",[29,78121,78122],{},[24,78123],{"alt":64,"src":78124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[29,78126,78127],{},[24,78128],{"alt":64,"src":78129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[29,78131,78132],{},"箭头函数里边没有arguments",[23237,78134,78136],{"id":78135},"_4522-剩余参数","4.5.2.2 剩余参数",[29,78138,78139],{},[24,78140],{"alt":64,"src":78141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[29,78143,78144],{},[24,78145],{"alt":64,"src":78146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[29,78148,78149],{},"剩余参数使用的时候不需要写...",[29,78151,78152],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[29,78154,78155],{},"  function getSum(a,b,...arr) {",[29,78157,78158],{},"  console.log(11)",[29,78160,78161],{},"  }",[29,78163,78164],{},"  getSum(1,2,3,4)",[29,78166,78167],{},"  将1传给a，2传给b，剩下的传给剩余参数",[29,78169,78170],{},"  getSum(1,2)",[29,78172,78173],{},"  将1传给a，2传给b，剩余参数为一个空数组",[29,78175,78176],{},[24,78177],{"alt":64,"src":78178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23237,78180,78182],{"id":78181},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[29,78184,78185],{},[24,78186],{"alt":64,"src":78187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[29,78189,78190],{},[24,78191],{"alt":64,"src":78192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[29,78194,78195],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[29,78197,78198],{},"展开运算符可以用于数组之间的合并：",[29,78200,78201],{},"const arr1 = [1, 2, 3]",[29,78203,78204],{},"const arr2 = [3, 4, 5]",[29,78206,78207],{},"const arr = [...arr1, ...arr2]",[29,78209,78210],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[29,78212,78213],{},"剩余参数：函数参数使用，得到真数组",[29,78215,78216],{},"展开运算符：数组中使用，数组展开",[19,78218,78220],{"id":78219},"_453-箭头函数","4.5.3 箭头函数",[23237,78222,78224],{"id":78223},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[29,78226,78227],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[29,78229,78230],{},"它不是万能的！！！",[29,78232,78233],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[29,78235,78236],{},[24,78237],{"alt":64,"src":78238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[29,78240,272],{},[29,78242,78243],{},"① 只有一个形参的时候，可以省略小括号：",[29,78245,78246],{},"const fn=x=>{console.log(x)}",[29,78248,78249],{},"② 只有一行代码时可以省略大括号：",[29,78251,78252],{},"const fn=x=>console.log(11)",[29,78254,78255],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[29,78257,78258],{},"const fn=x=>x+x",[29,78260,78261],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[29,78263,78264],{},"⑤ 阻止表单默认提交：",[29,78266,78267],{},"const form = document.querySelector('form')",[29,78269,78270],{},"form.addEventListener('click', ev => ev.preventDefault())",[29,78272,78273],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[29,78275,78276],{},"const fn=uname=>({uname:uname})",[29,78278,78279],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[29,78281,78282],{},[24,78283],{"alt":64,"src":78284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[29,78286,78287],{},[24,78288],{"alt":64,"src":78289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[29,78291,78292],{},[24,78293],{"alt":64,"src":78294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[29,78296,78297],{},"一定不要忘记用()，有()就理解为自带return",[23237,78299,78301],{"id":78300},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[29,78303,78304],{},"箭头函数是没有动态参数的arguments",[29,78306,78307],{},[24,78308],{"alt":64,"src":78309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23237,78311,78313],{"id":78312},"_4533-箭头函数this","4.5.3.3 箭头函数this",[29,78315,12574],{},[37,78317,78318,78321,78324],{},[40,78319,78320],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[40,78322,78323],{},"事件回调函数使用箭头函数时，this 为全局的 window",[40,78325,78326],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[29,78328,78329],{},[24,78330],{"alt":64,"src":78331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[59,78333,78335],{"className":54295,"code":78334,"language":54297,"meta":64,"style":64},"  \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",[66,78336,78337,78345,78350,78355,78360,78365,78370,78374,78379,78383,78387,78392,78397,78402,78406,78410,78415,78420,78425],{"__ignoreMap":64},[69,78338,78339,78341,78343],{"class":71,"line":72},[69,78340,53372],{"class":86},[69,78342,53041],{"class":348},[69,78344,1026],{"class":86},[69,78346,78347],{"class":71,"line":79},[69,78348,78349],{"class":86},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[69,78351,78352],{"class":71,"line":106},[69,78353,78354],{"class":86},"    console.log(this) \u002F\u002F指向window\n",[69,78356,78357],{"class":71,"line":116},[69,78358,78359],{"class":86},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[69,78361,78362],{"class":71,"line":133},[69,78363,78364],{"class":86},"    function fn() {\n",[69,78366,78367],{"class":71,"line":139},[69,78368,78369],{"class":86},"      console.log(this)  \u002F\u002F指向window\n",[69,78371,78372],{"class":71,"line":401},[69,78373,3431],{"class":86},[69,78375,78376],{"class":71,"line":470},[69,78377,78378],{"class":86},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[69,78380,78381],{"class":71,"line":475},[69,78382,3644],{"emptyLinePlaceholder":1325},[69,78384,78385],{"class":71,"line":482},[69,78386,72744],{"class":86},[69,78388,78389],{"class":71,"line":497},[69,78390,78391],{"class":86},"      name: 'andy',\n",[69,78393,78394],{"class":71,"line":502},[69,78395,78396],{"class":86},"      sayHai: function () {\n",[69,78398,78399],{"class":71,"line":509},[69,78400,78401],{"class":86},"        console.log(this)\n",[69,78403,78404],{"class":71,"line":524},[69,78405,53626],{"class":86},[69,78407,78408],{"class":71,"line":2888},[69,78409,3431],{"class":86},[69,78411,78412],{"class":71,"line":2893},[69,78413,78414],{"class":86},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[69,78416,78417],{"class":71,"line":2899},[69,78418,78419],{"class":86},"    \u002F\u002F 2.箭头函数的this\n",[69,78421,78422],{"class":71,"line":2919},[69,78423,78424],{"class":86},"    const fn = () => console.log(this)\n",[69,78426,78427,78429,78431],{"class":71,"line":2924},[69,78428,53645],{"class":86},[69,78430,53041],{"class":348},[69,78432,1026],{"class":86},[29,78434,78435],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[29,78437,78438],{},"const fn = () => console.log(this)",[29,78440,78441],{},"fn() \u002F\u002F指向window",[29,78443,78444],{},"\u002F\u002F 3.对象方法箭头函数 this",[29,78446,78447],{},"①",[29,78449,78450],{},"const obj = {",[29,78452,78453],{},"uname: 'pink老师',",[29,78455,78456],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[29,78458,2332],{},[29,78460,78461],{},"调用对象里边的函数",[29,78463,78464],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[29,78466,78467],{},"obj.sayHai()",[29,78469,78470],{},"②",[29,78472,78473],{},"const obj1 = {",[29,78475,78453],{},[29,78477,78478],{},"sayHai: function () {",[29,78480,78481],{},"let i = 10",[29,78483,78484],{},"const count = () => {",[29,78486,78487],{},"console.log(this)",[29,78489,78490],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[29,78492,78493],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[29,78495,2332],{},[29,78497,78498],{},"count()",[29,78500,2332],{},[29,78502,2332],{},[29,78504,78505],{},"obj1.sayHai()",[14,78507,78509],{"id":78508},"_46-解构赋值","4.6 解构赋值",[19,78511,78513],{"id":78512},"_461-数组解构","4.6.1 数组解构",[29,78515,78516],{},"以前要是使用数组中的值的话：",[29,78518,78519],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[29,78521,78522],{},"const arr=[100,60,80]",[29,78524,78525],{},"const max=arr[0]",[29,78527,78528],{},"const min=arr[1]",[29,78530,78531],{},"const avg=arr[2]",[29,78533,78534],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[29,78536,78537],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[29,78539,78540],{},"这个写法就类似于上边的那种用很多const的方法",[29,78542,78543],{},[24,78544],{"alt":64,"src":78545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[59,78547,78549],{"className":51869,"code":78548,"language":349,"meta":64,"style":64},"①变量之间交换值:\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",[66,78550,78551,78556,78561,78566,78571,78576,78580,78584,78589,78593,78598,78603,78607,78612,78617,78628,78638,78643,78648,78653,78657,78661],{"__ignoreMap":64},[69,78552,78553],{"class":71,"line":72},[69,78554,78555],{"class":86},"①变量之间交换值:\n",[69,78557,78558],{"class":71,"line":79},[69,78559,78560],{"class":86},"let a=1\n",[69,78562,78563],{"class":71,"line":106},[69,78564,78565],{"class":86},"let b=2;\n",[69,78567,78568],{"class":71,"line":116},[69,78569,78570],{"class":86},"必须加这行代码，不然就会报错\n",[69,78572,78573],{"class":71,"line":133},[69,78574,78575],{"class":86},"[b,a]=[a,b]\n",[69,78577,78578],{"class":71,"line":139},[69,78579,3644],{"emptyLinePlaceholder":1325},[69,78581,78582],{"class":71,"line":401},[69,78583,3644],{"emptyLinePlaceholder":1325},[69,78585,78586],{"class":71,"line":470},[69,78587,78588],{"class":86},"可以写成下面的方式：\n",[69,78590,78591],{"class":71,"line":475},[69,78592,78560],{"class":86},[69,78594,78595],{"class":71,"line":482},[69,78596,78597],{"class":86},"let b=2\n",[69,78599,78600],{"class":71,"line":497},[69,78601,78602],{"class":86},";[b,a]=[a,b]\n",[69,78604,78605],{"class":71,"line":502},[69,78606,3644],{"emptyLinePlaceholder":1325},[69,78608,78609],{"class":71,"line":509},[69,78610,78611],{"class":86},"②排序\n",[69,78613,78614],{"class":71,"line":524},[69,78615,78616],{"class":86},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[69,78618,78619,78622,78625],{"class":71,"line":2888},[69,78620,78621],{"class":86},"for (let i = 0; i ",[69,78623,1011],{"class":78624},"s7hpK",[69,78626,78627],{"class":86}," arr1.length; i++) {\n",[69,78629,78630,78633,78635],{"class":71,"line":2893},[69,78631,78632],{"class":86},"   for (let j = 0; j ",[69,78634,1011],{"class":78624},[69,78636,78637],{"class":86}," arr1.length - 1; j++) {\n",[69,78639,78640],{"class":71,"line":2899},[69,78641,78642],{"class":86},"      if (arr1[j] > arr1[j + 1]) {\n",[69,78644,78645],{"class":71,"line":2919},[69,78646,78647],{"class":86},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[69,78649,78650],{"class":71,"line":2924},[69,78651,78652],{"class":86},"       }\n",[69,78654,78655],{"class":71,"line":2938},[69,78656,5553],{"class":86},[69,78658,78659],{"class":71,"line":2943},[69,78660,142],{"class":86},[69,78662,78663],{"class":71,"line":2972},[69,78664,78665],{"class":86},"console.log(arr1)\n",[29,78667,78668],{},"数组解构的细节：",[29,78670,78671],{},"①变量多，单元值少",[29,78673,78674],{},[24,78675],{"alt":64,"src":78676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[29,78678,78679],{},"防止出现undefined的方法：",[29,78681,78682],{},"const [a=0,b=0] =[1]",[29,78684,78685],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[29,78687,78688],{},"②变量少，单元值多",[29,78690,78691],{},[24,78692],{"alt":64,"src":78693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[29,78695,78696],{},"此时可以使用剩余参数来接收多余的值",[29,78698,78699],{},"const [a,b,...c]=[1,2,3,4]",[29,78701,78702],{},"console.log(c) 输出[3,4]",[29,78704,78705],{},"③可以按需导入，忽略某些返回值",[29,78707,78708],{},[24,78709],{"alt":64,"src":78710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[29,78712,78713],{},"④支持多维数组的结构",[59,78715,78719],{"className":78716,"code":78717,"language":78718,"meta":64,"style":64},"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",[66,78720,78721,78749,78765,78780,78795],{"__ignoreMap":64},[69,78722,78723,78725,78727,78729,78731,78733,78735,78737,78740,78742,78744,78746],{"class":71,"line":72},[69,78724,8034],{"class":82},[69,78726,53061],{"class":86},[69,78728,1019],{"class":82},[69,78730,53454],{"class":86},[69,78732,1609],{"class":90},[69,78734,13677],{"class":86},[69,78736,1471],{"class":90},[69,78738,78739],{"class":86},", [",[69,78741,1465],{"class":90},[69,78743,13677],{"class":86},[69,78745,1684],{"class":90},[69,78747,78748],{"class":86},"]]\n",[69,78750,78751,78754,78756,78758,78760,78762],{"class":71,"line":79},[69,78752,78753],{"class":86},"console.",[69,78755,59473],{"class":109},[69,78757,5095],{"class":86},[69,78759,1583],{"class":90},[69,78761,5460],{"class":86},[69,78763,78764],{"class":75},"  \u002F\u002F1\n",[69,78766,78767,78769,78771,78773,78775,78777],{"class":71,"line":106},[69,78768,78753],{"class":86},[69,78770,59473],{"class":109},[69,78772,5095],{"class":86},[69,78774,1609],{"class":90},[69,78776,5460],{"class":86},[69,78778,78779],{"class":75},"  \u002F\u002F2\n",[69,78781,78782,78784,78786,78788,78790,78792],{"class":71,"line":116},[69,78783,78753],{"class":86},[69,78785,59473],{"class":109},[69,78787,5095],{"class":86},[69,78789,1471],{"class":90},[69,78791,5460],{"class":86},[69,78793,78794],{"class":75},"  \u002F\u002F[3,4]\n",[69,78796,78797,78799,78801,78803,78805,78807,78809,78811],{"class":71,"line":133},[69,78798,78753],{"class":86},[69,78800,59473],{"class":109},[69,78802,5095],{"class":86},[69,78804,1471],{"class":90},[69,78806,6145],{"class":86},[69,78808,1583],{"class":90},[69,78810,5460],{"class":86},[69,78812,78813],{"class":75},"  \u002F\u002F3\n",[59,78815,78817],{"className":78716,"code":78816,"language":78718,"meta":64,"style":64},"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",[66,78818,78819,78846,78857,78868],{"__ignoreMap":64},[69,78820,78821,78823,78826,78828,78830,78832,78834,78836,78838,78840,78842,78844],{"class":71,"line":72},[69,78822,8034],{"class":82},[69,78824,78825],{"class":86}," [a, b, c] ",[69,78827,1019],{"class":82},[69,78829,53454],{"class":86},[69,78831,1609],{"class":90},[69,78833,13677],{"class":86},[69,78835,1471],{"class":90},[69,78837,78739],{"class":86},[69,78839,1465],{"class":90},[69,78841,13677],{"class":86},[69,78843,1684],{"class":90},[69,78845,78748],{"class":86},[69,78847,78848,78850,78852,78855],{"class":71,"line":79},[69,78849,78753],{"class":86},[69,78851,59473],{"class":109},[69,78853,78854],{"class":86},"(a)",[69,78856,78764],{"class":75},[69,78858,78859,78861,78863,78866],{"class":71,"line":106},[69,78860,78753],{"class":86},[69,78862,59473],{"class":109},[69,78864,78865],{"class":86},"(b)",[69,78867,78779],{"class":75},[69,78869,78870,78872,78874,78877],{"class":71,"line":116},[69,78871,78753],{"class":86},[69,78873,59473],{"class":109},[69,78875,78876],{"class":86},"(c)",[69,78878,78794],{"class":75},[59,78880,78882],{"className":78716,"code":78881,"language":78718,"meta":64,"style":64},"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",[66,78883,78884,78911,78921,78931,78941],{"__ignoreMap":64},[69,78885,78886,78888,78891,78893,78895,78897,78899,78901,78903,78905,78907,78909],{"class":71,"line":72},[69,78887,8034],{"class":82},[69,78889,78890],{"class":86}," [a, b, [c, d]] ",[69,78892,1019],{"class":82},[69,78894,53454],{"class":86},[69,78896,1609],{"class":90},[69,78898,13677],{"class":86},[69,78900,1471],{"class":90},[69,78902,78739],{"class":86},[69,78904,1465],{"class":90},[69,78906,13677],{"class":86},[69,78908,1684],{"class":90},[69,78910,78748],{"class":86},[69,78912,78913,78915,78917,78919],{"class":71,"line":79},[69,78914,78753],{"class":86},[69,78916,59473],{"class":109},[69,78918,78854],{"class":86},[69,78920,78764],{"class":75},[69,78922,78923,78925,78927,78929],{"class":71,"line":106},[69,78924,78753],{"class":86},[69,78926,59473],{"class":109},[69,78928,78865],{"class":86},[69,78930,78779],{"class":75},[69,78932,78933,78935,78937,78939],{"class":71,"line":116},[69,78934,78753],{"class":86},[69,78936,59473],{"class":109},[69,78938,78876],{"class":86},[69,78940,78813],{"class":75},[69,78942,78943,78945,78947,78950],{"class":71,"line":133},[69,78944,78753],{"class":86},[69,78946,59473],{"class":109},[69,78948,78949],{"class":86},"(d)",[69,78951,78952],{"class":75},"  \u002F\u002F4\n",[19,78954,78956],{"id":78955},"_462-对象解构","4.6.2 对象解构",[29,78958,78959],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[29,78961,78962],{},"用的非常非常多！！！！！！",[23237,78964,78966],{"id":78965},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[29,78968,78969],{},"基本语法：",[37,78971,78972,78975,78978,78981],{},[40,78973,78974],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[40,78976,78977],{},"对象属性的值将被赋值给与属性名相同的变量",[40,78979,78980],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[40,78982,78983],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[59,78985,78987],{"className":51869,"code":78986,"language":349,"meta":64,"style":64},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[66,78988,78989,78994,78999,79004,79008],{"__ignoreMap":64},[69,78990,78991],{"class":71,"line":72},[69,78992,78993],{"class":86},"const obj = {\n",[69,78995,78996],{"class":71,"line":79},[69,78997,78998],{"class":86},"   uname: 'pink老师',\n",[69,79000,79001],{"class":71,"line":106},[69,79002,79003],{"class":86},"   age: 18,\n",[69,79005,79006],{"class":71,"line":116},[69,79007,142],{"class":86},[69,79009,79010],{"class":71,"line":133},[69,79011,79012],{"class":86},"const { uname, age } = obj\n",[29,79014,79015],{},"上方代码这样写等价于：",[29,79017,79018],{},"const uname等价于obj.uname",[29,79020,79021],{},"变量名可以重新改名：",[29,79023,79024],{},"const uname='red老师'",[29,79026,79027],{},"const user={",[29,79029,79030],{},"  uname:'pink老师',",[29,79032,79033],{},"  age:18",[29,79035,2332],{},[29,79037,79038],{},"const {uname,age}=user",[29,79040,79041],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[29,79043,79044],{},"const {旧变量名：新变量名}=对象",[29,79046,79047],{},"const {uname:username,age}=user",[23237,79049,79051],{"id":79050},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[29,79053,79054],{},[24,79055],{"alt":64,"src":79056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23237,79058,79060],{"id":79059},"_4623-多级对象解构","4.6.2.3 多级对象解构",[29,79062,79063],{},[24,79064],{"alt":64,"src":79065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[59,79067,79069],{"className":54295,"code":79068,"language":54297,"meta":64,"style":64},"  \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",[66,79070,79071,79079,79084,79089,79094,79099,79104,79109,79114,79119,79123,79128,79133],{"__ignoreMap":64},[69,79072,79073,79075,79077],{"class":71,"line":72},[69,79074,53372],{"class":86},[69,79076,53041],{"class":348},[69,79078,1026],{"class":86},[69,79080,79081],{"class":71,"line":79},[69,79082,79083],{"class":86},"    const pig = {\n",[69,79085,79086],{"class":71,"line":106},[69,79087,79088],{"class":86},"      name: '佩奇',\n",[69,79090,79091],{"class":71,"line":116},[69,79092,79093],{"class":86},"      family: {\n",[69,79095,79096],{"class":71,"line":133},[69,79097,79098],{"class":86},"        mother: '猪妈妈',\n",[69,79100,79101],{"class":71,"line":139},[69,79102,79103],{"class":86},"        father: '猪爸爸',\n",[69,79105,79106],{"class":71,"line":401},[69,79107,79108],{"class":86},"        sister: '乔治'\n",[69,79110,79111],{"class":71,"line":470},[69,79112,79113],{"class":86},"      },\n",[69,79115,79116],{"class":71,"line":475},[69,79117,79118],{"class":86},"      age: 6\n",[69,79120,79121],{"class":71,"line":482},[69,79122,3431],{"class":86},[69,79124,79125],{"class":71,"line":497},[69,79126,79127],{"class":86},"    \u002F\u002F 多级对象解构\n",[69,79129,79130],{"class":71,"line":502},[69,79131,79132],{"class":86},"    const { name, family: { mother, father, sister }, age } = pig\n",[69,79134,79135,79137,79139],{"class":71,"line":509},[69,79136,53645],{"class":86},[69,79138,53041],{"class":348},[69,79140,1026],{"class":86},[29,79142,79143],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[59,79145,79148],{"className":79146,"code":79147,"language":77668,"meta":64,"style":64},"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",[66,79149,79150,79155,79166,79178,79190,79199,79203,79214,79226,79236,79241,79245,79255,79266,79275,79279,79283,79294,79305,79314,79318,79323],{"__ignoreMap":64},[69,79151,79152],{"class":71,"line":72},[69,79153,79154],{"class":75},"    \u002F\u002F 这是后台传递过来的数据\n",[69,79156,79157,79159,79162,79164],{"class":71,"line":79},[69,79158,12463],{"class":82},[69,79160,79161],{"class":86}," msg ",[69,79163,1019],{"class":82},[69,79165,113],{"class":86},[69,79167,79168,79171,79173,79176],{"class":71,"line":106},[69,79169,79170],{"class":1022},"      \"code\"",[69,79172,2246],{"class":82},[69,79174,79175],{"class":90}," 200",[69,79177,32702],{"class":86},[69,79179,79180,79183,79185,79188],{"class":71,"line":116},[69,79181,79182],{"class":1022},"      \"msg\"",[69,79184,2246],{"class":82},[69,79186,79187],{"class":1022}," \"获取新闻列表成功\"",[69,79189,32702],{"class":86},[69,79191,79192,79195,79197],{"class":71,"line":133},[69,79193,79194],{"class":1022},"      \"data\"",[69,79196,2246],{"class":82},[69,79198,56674],{"class":86},[69,79200,79201],{"class":71,"line":139},[69,79202,3754],{"class":86},[69,79204,79205,79208,79210,79212],{"class":71,"line":401},[69,79206,79207],{"class":1022},"          \"id\"",[69,79209,2246],{"class":82},[69,79211,26355],{"class":90},[69,79213,32702],{"class":86},[69,79215,79216,79219,79221,79224],{"class":71,"line":470},[69,79217,79218],{"class":1022},"          \"title\"",[69,79220,2246],{"class":82},[69,79222,79223],{"class":1022}," \"5G商用自己，三大运用商收入下降\"",[69,79225,32702],{"class":86},[69,79227,79228,79231,79233],{"class":71,"line":475},[69,79229,79230],{"class":1022},"          \"count\"",[69,79232,2246],{"class":82},[69,79234,79235],{"class":90}," 58\n",[69,79237,79238],{"class":71,"line":482},[69,79239,79240],{"class":86},"        },\n",[69,79242,79243],{"class":71,"line":497},[69,79244,3754],{"class":86},[69,79246,79247,79249,79251,79253],{"class":71,"line":502},[69,79248,79207],{"class":1022},[69,79250,2246],{"class":82},[69,79252,15995],{"class":90},[69,79254,32702],{"class":86},[69,79256,79257,79259,79261,79264],{"class":71,"line":509},[69,79258,79218],{"class":1022},[69,79260,2246],{"class":82},[69,79262,79263],{"class":1022}," \"国际媒体头条速览\"",[69,79265,32702],{"class":86},[69,79267,79268,79270,79272],{"class":71,"line":524},[69,79269,79230],{"class":1022},[69,79271,2246],{"class":82},[69,79273,79274],{"class":90}," 56\n",[69,79276,79277],{"class":71,"line":2888},[69,79278,79240],{"class":86},[69,79280,79281],{"class":71,"line":2893},[69,79282,3754],{"class":86},[69,79284,79285,79287,79289,79292],{"class":71,"line":2899},[69,79286,79207],{"class":1022},[69,79288,2246],{"class":82},[69,79290,79291],{"class":90}," 3",[69,79293,32702],{"class":86},[69,79295,79296,79298,79300,79303],{"class":71,"line":2919},[69,79297,79218],{"class":1022},[69,79299,2246],{"class":82},[69,79301,79302],{"class":1022}," \"乌克兰和俄罗斯持续冲突\"",[69,79304,32702],{"class":86},[69,79306,79307,79309,79311],{"class":71,"line":2924},[69,79308,79230],{"class":1022},[69,79310,2246],{"class":82},[69,79312,79313],{"class":90}," 1669\n",[69,79315,79316],{"class":71,"line":2938},[69,79317,79240],{"class":86},[69,79319,79320],{"class":71,"line":2943},[69,79321,79322],{"class":86},"      ]\n",[69,79324,79325],{"class":71,"line":2972},[69,79326,3431],{"class":86},[29,79328,79329],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[29,79331,79332],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[29,79334,79335],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[29,79337,79338],{},"function({data}) {",[29,79340,79341],{},"console.log(data)",[29,79343,2332],{},[29,79345,79346],{},"render(msg)",[29,79348,79349],{},"实参传递给形参的时候解构了",[29,79351,79352],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[29,79354,79355],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[29,79357,79358],{},"function render({data:mydata}) {",[29,79360,79361],{},"  console.log(data)",[29,79363,2332],{},[19,79365,79367],{"id":79366},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[29,79369,79370],{},"有两种情况：一个是数组结构，一个是立即执行函数",[37,79372,79373],{},[40,79374,79375],{},"如果对一个数组进行遍历，有两种方式：",[29,79377,79378],{},"①法1",[29,79380,79381],{},"const arr=[1,2,3]",[29,79383,79384],{},"arr.map(function(item,index) {",[29,79386,79387],{},"  console.log(item)",[29,79389,53692],{},[29,79391,79392],{},[24,79393],{"alt":64,"src":79394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[29,79396,79397],{},"②法2",[29,79399,79400],{},"const str='pink'",[29,79402,79403],{},"[1,2,3].map(function(item,index) {",[29,79405,79406],{},"console.log(item)",[29,79408,53692],{},[29,79410,79411],{},[24,79412],{"alt":64,"src":79413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[29,79415,79416],{},"此时会报错",[29,79418,79419],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[29,79421,79406],{},[29,79423,53692],{},[29,79425,79426],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79428,79430],{"id":79429},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[29,79432,79433],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[29,79435,79436],{},"可以理解为加强版的for循环",[29,79438,79439],{},[24,79440],{"alt":64,"src":79441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[29,79443,79444],{},"里边不写return，不返回数组，只遍历不返回",[29,79446,79447],{},"map是返回数组",[29,79449,79450],{},"forEach主要用于遍历数组对象",[59,79452,79454],{"className":54295,"code":79453,"language":54297,"meta":64,"style":64},"  \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",[66,79455,79456,79464,79469,79474,79479,79484,79488,79493],{"__ignoreMap":64},[69,79457,79458,79460,79462],{"class":71,"line":72},[69,79459,53372],{"class":86},[69,79461,53041],{"class":348},[69,79463,1026],{"class":86},[69,79465,79466],{"class":71,"line":79},[69,79467,79468],{"class":86},"    const arr = ['red', 'green', 'pink']\n",[69,79470,79471],{"class":71,"line":106},[69,79472,79473],{"class":86},"    const result = arr.forEach(function (item, index) {\n",[69,79475,79476],{"class":71,"line":116},[69,79477,79478],{"class":86},"      console.log(item)\n",[69,79480,79481],{"class":71,"line":133},[69,79482,79483],{"class":86},"      console.log(index)\n",[69,79485,79486],{"class":71,"line":139},[69,79487,34697],{"class":86},[69,79489,79490],{"class":71,"line":401},[69,79491,79492],{"class":86},"    console.log(result)\n",[69,79494,79495,79497,79499],{"class":71,"line":470},[69,79496,53645],{"class":86},[69,79498,53041],{"class":348},[69,79500,1026],{"class":86},[29,79502,79503],{},[24,79504],{"alt":64,"src":79505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79507,79509],{"id":79508},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[29,79511,79512],{},[24,79513],{"alt":64,"src":79514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[29,79516,79517],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[59,79519,79521],{"className":54295,"code":79520,"language":54297,"meta":64,"style":64},"\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",[66,79522,79523,79531,79539,79544,79549,79553,79557,79562,79566,79571,79579],{"__ignoreMap":64},[69,79524,79525,79527,79529],{"class":71,"line":72},[69,79526,1011],{"class":86},[69,79528,680],{"class":348},[69,79530,1026],{"class":86},[69,79532,79533,79535,79537],{"class":71,"line":79},[69,79534,53372],{"class":86},[69,79536,53041],{"class":348},[69,79538,1026],{"class":86},[69,79540,79541],{"class":71,"line":106},[69,79542,79543],{"class":86},"    const arr = [10, 20, 30]\n",[69,79545,79546],{"class":71,"line":116},[69,79547,79548],{"class":86},"    const newArr = arr.filter(function (item, index) {\n",[69,79550,79551],{"class":71,"line":133},[69,79552,79478],{"class":86},[69,79554,79555],{"class":71,"line":139},[69,79556,79483],{"class":86},[69,79558,79559],{"class":71,"line":401},[69,79560,79561],{"class":86},"      return item >= 20\n",[69,79563,79564],{"class":71,"line":470},[69,79565,34697],{"class":86},[69,79567,79568],{"class":71,"line":475},[69,79569,79570],{"class":86},"    console.log(newArr)\n",[69,79572,79573,79575,79577],{"class":71,"line":482},[69,79574,53645],{"class":86},[69,79576,53041],{"class":348},[69,79578,1026],{"class":86},[69,79580,79581,79583,79585],{"class":71,"line":497},[69,79582,1036],{"class":86},[69,79584,680],{"class":348},[69,79586,1026],{"class":86},[29,79588,79589],{},"这个也可以写成箭头函数：",[59,79591,79593],{"className":51869,"code":79592,"language":349,"meta":64,"style":64},"const newArr = arr.filter(item => item >= 20)\n",[66,79594,79595],{"__ignoreMap":64},[69,79596,79597],{"class":71,"line":72},[69,79598,79592],{"class":86},[14,79600,79602],{"id":79601},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[29,79604,79605],{},[24,79606],{"alt":64,"src":79607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[29,79609,79610],{},"步骤：",[29,79612,79613],{},"①：渲染页面模块",[162,79615,79616,79619],{},[40,79617,79618],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[40,79620,79621],{},"用forEach+字符串的形式",[29,79623,79624],{},"②：点击不同需求，显示不同页面内容",[162,79626,79627,79630,79633,79636,79639],{},[40,79628,79629],{},"点击采取事件委托方式 .filter",[40,79631,79632],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[40,79634,79635],{},"筛选条件是根据点击的 data-index 来判断",[40,79637,79638],{},"可以使用对象解构，把事件对象解构",[40,79640,79641],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[59,79643,79645],{"className":51869,"code":79644,"language":349,"meta":64,"style":64},"\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",[66,79646,79647,79657,79671,79675,79683,79697,79717,79729,79737,79743,79753,79763,79773,79777,79781,79787,79800,79812,79822,79834,79838,79842,79849,79862,79874,79891,79909,79922,79926,79930,79942,79952,79956,79960,79967,80008,80035,80045,80049,80053,80061,80073,80077,80081,80089,80101,80113,80124,80128,80132,80141,80153,80164,80168,80172,80181,80193,80205,80209,80213,80220,80230,80242,80254,80269,80273,80277,80285,80301,80311,80321,80331,80343,80347,80351,80361,80372,80382,80386,80394,80402,80406,80414,80429,80455,80480,80505,80524,80532,80546,80551,80556,80561,80566,80571,80579,80587,80592,80603,80608,80618,80628,80638,80648,80652,80656,80665,80674,80683,80692,80696,80700,80709,80718,80727,80736,80740,80744,80753,80762,80771,80780,80784,80788,80797,80806,80815,80824,80828,80832,80841,80850,80859,80868,80872,80876,80885,80894,80903,80912,80916,80920,80929,80938,80946,80955,80959,80963,80967,80972,80984,80989,81001,81005,81022,81050,81059,81064,81074,81084,81093,81098,81103,81107,81112,81129,81133,81138,81146,81151,81178,81183,81203,81208,81220,81225,81230,81235,81246,81260,81297,81315,81348,81365,81389,81393,81398,81404,81408,81412,81416,81424,81432,81436],{"__ignoreMap":64},[69,79648,79649,79651,79653,79655],{"class":71,"line":72},[69,79650,52532],{"class":86},[69,79652,52535],{"class":348},[69,79654,52538],{"class":109},[69,79656,1026],{"class":86},[69,79658,79659,79661,79663,79665,79667,79669],{"class":71,"line":79},[69,79660,1011],{"class":86},[69,79662,349],{"class":348},[69,79664,52549],{"class":109},[69,79666,1019],{"class":86},[69,79668,52554],{"class":1022},[69,79670,1026],{"class":86},[69,79672,79673],{"class":71,"line":106},[69,79674,3644],{"emptyLinePlaceholder":1325},[69,79676,79677,79679,79681],{"class":71,"line":116},[69,79678,1011],{"class":86},[69,79680,52567],{"class":348},[69,79682,1026],{"class":86},[69,79684,79685,79687,79689,79691,79693,79695],{"class":71,"line":133},[69,79686,53372],{"class":86},[69,79688,52577],{"class":348},[69,79690,52580],{"class":109},[69,79692,1019],{"class":86},[69,79694,52585],{"class":1022},[69,79696,1026],{"class":86},[69,79698,79699,79701,79703,79705,79707,79709,79711,79713,79715],{"class":71,"line":139},[69,79700,53372],{"class":86},[69,79702,52577],{"class":348},[69,79704,16160],{"class":109},[69,79706,1019],{"class":86},[69,79708,52624],{"class":1022},[69,79710,52604],{"class":109},[69,79712,1019],{"class":86},[69,79714,52631],{"class":1022},[69,79716,1026],{"class":86},[69,79718,79719,79721,79723,79725,79727],{"class":71,"line":401},[69,79720,53372],{"class":86},[69,79722,52640],{"class":348},[69,79724,52643],{"class":86},[69,79726,52640],{"class":348},[69,79728,1026],{"class":86},[69,79730,79731,79733,79735],{"class":71,"line":470},[69,79732,53372],{"class":86},[69,79734,1297],{"class":348},[69,79736,1026],{"class":86},[69,79738,79739,79741],{"class":71,"line":475},[69,79740,7645],{"class":348},[69,79742,113],{"class":86},[69,79744,79745,79747,79749,79751],{"class":71,"line":482},[69,79746,55922],{"class":90},[69,79748,94],{"class":86},[69,79750,1583],{"class":90},[69,79752,130],{"class":86},[69,79754,79755,79757,79759,79761],{"class":71,"line":497},[69,79756,55933],{"class":90},[69,79758,94],{"class":86},[69,79760,1583],{"class":90},[69,79762,130],{"class":86},[69,79764,79765,79767,79769,79771],{"class":71,"line":502},[69,79766,73817],{"class":90},[69,79768,94],{"class":86},[69,79770,61731],{"class":90},[69,79772,130],{"class":86},[69,79774,79775],{"class":71,"line":509},[69,79776,3431],{"class":86},[69,79778,79779],{"class":71,"line":524},[69,79780,3644],{"emptyLinePlaceholder":1325},[69,79782,79783,79785],{"class":71,"line":2888},[69,79784,63349],{"class":109},[69,79786,113],{"class":86},[69,79788,79789,79791,79793,79796,79798],{"class":71,"line":2893},[69,79790,55998],{"class":90},[69,79792,94],{"class":86},[69,79794,79795],{"class":90},"990",[69,79797,100],{"class":82},[69,79799,130],{"class":86},[69,79801,79802,79804,79806,79808,79810],{"class":71,"line":2899},[69,79803,55933],{"class":90},[69,79805,94],{"class":86},[69,79807,1583],{"class":90},[69,79809,52787],{"class":90},[69,79811,130],{"class":86},[69,79813,79814,79816,79818,79820],{"class":71,"line":2919},[69,79815,56236],{"class":90},[69,79817,94],{"class":86},[69,79819,52709],{"class":90},[69,79821,130],{"class":86},[69,79823,79824,79827,79829,79832],{"class":71,"line":2924},[69,79825,79826],{"class":90},"      flex-wrap",[69,79828,94],{"class":86},[69,79830,79831],{"class":90},"wrap",[69,79833,130],{"class":86},[69,79835,79836],{"class":71,"line":2938},[69,79837,3431],{"class":86},[69,79839,79840],{"class":71,"line":2943},[69,79841,3644],{"emptyLinePlaceholder":1325},[69,79843,79844,79847],{"class":71,"line":2972},[69,79845,79846],{"class":109},"    .item",[69,79848,113],{"class":86},[69,79850,79851,79853,79855,79858,79860],{"class":71,"line":2977},[69,79852,55998],{"class":90},[69,79854,94],{"class":86},[69,79856,79857],{"class":90},"240",[69,79859,100],{"class":82},[69,79861,130],{"class":86},[69,79863,79864,79866,79868,79870,79872],{"class":71,"line":2994},[69,79865,63226],{"class":90},[69,79867,94],{"class":86},[69,79869,390],{"class":90},[69,79871,100],{"class":82},[69,79873,130],{"class":86},[69,79875,79876,79878,79880,79882,79884,79887,79889],{"class":71,"line":2999},[69,79877,55922],{"class":90},[69,79879,94],{"class":86},[69,79881,2087],{"class":90},[69,79883,100],{"class":82},[69,79885,79886],{"class":90}," 30",[69,79888,100],{"class":82},[69,79890,130],{"class":86},[69,79892,79893,79895,79897,79899,79902,79905,79907],{"class":71,"line":3004},[69,79894,63086],{"class":90},[69,79896,94],{"class":86},[69,79898,29357],{"class":90},[69,79900,79901],{"class":90}," ease",[69,79903,79904],{"class":90}," .5",[69,79906,2082],{"class":82},[69,79908,130],{"class":86},[69,79910,79911,79914,79916,79918,79920],{"class":71,"line":3009},[69,79912,79913],{"class":90},"      margin-bottom",[69,79915,94],{"class":86},[69,79917,2087],{"class":90},[69,79919,100],{"class":82},[69,79921,130],{"class":86},[69,79923,79924],{"class":71,"line":3023},[69,79925,3431],{"class":86},[69,79927,79928],{"class":71,"line":3028},[69,79929,3644],{"emptyLinePlaceholder":1325},[69,79931,79932,79935,79937,79940],{"class":71,"line":3821},[69,79933,79934],{"class":109},"    .item:nth-child",[69,79936,1398],{"class":86},[69,79938,79939],{"class":90},"4n",[69,79941,103],{"class":86},[69,79943,79944,79946,79948,79950],{"class":71,"line":3835},[69,79945,63226],{"class":90},[69,79947,94],{"class":86},[69,79949,1583],{"class":90},[69,79951,130],{"class":86},[69,79953,79954],{"class":71,"line":3843},[69,79955,3431],{"class":86},[69,79957,79958],{"class":71,"line":3848},[69,79959,3644],{"emptyLinePlaceholder":1325},[69,79961,79962,79965],{"class":71,"line":3854},[69,79963,79964],{"class":109},"    .item:hover",[69,79966,113],{"class":86},[69,79968,79969,79972,79974,79976,79978,79980,79982,79984,79986,79989,79991,79993,79995,79997,79999,80001,80003,80006],{"class":71,"line":3860},[69,79970,79971],{"class":90},"      box-shadow",[69,79973,94],{"class":86},[69,79975,1583],{"class":90},[69,79977,100],{"class":82},[69,79979,5337],{"class":90},[69,79981,100],{"class":82},[69,79983,3392],{"class":90},[69,79985,100],{"class":82},[69,79987,79988],{"class":90}," rgba",[69,79990,1398],{"class":86},[69,79992,1583],{"class":90},[69,79994,13677],{"class":86},[69,79996,1583],{"class":90},[69,79998,13677],{"class":86},[69,80000,1583],{"class":90},[69,80002,13677],{"class":86},[69,80004,80005],{"class":90},".2",[69,80007,3963],{"class":86},[69,80009,80010,80013,80015,80018,80020,80022,80024,80027,80029,80031,80033],{"class":71,"line":3865},[69,80011,80012],{"class":90},"      transform",[69,80014,94],{"class":86},[69,80016,80017],{"class":90},"translate3d",[69,80019,1398],{"class":86},[69,80021,1583],{"class":90},[69,80023,13677],{"class":86},[69,80025,80026],{"class":90},"-4",[69,80028,100],{"class":82},[69,80030,13677],{"class":86},[69,80032,1583],{"class":90},[69,80034,3963],{"class":86},[69,80036,80037,80039,80041,80043],{"class":71,"line":9190},[69,80038,63251],{"class":90},[69,80040,94],{"class":86},[69,80042,63256],{"class":90},[69,80044,130],{"class":86},[69,80046,80047],{"class":71,"line":9214},[69,80048,3431],{"class":86},[69,80050,80051],{"class":71,"line":9219},[69,80052,3644],{"emptyLinePlaceholder":1325},[69,80054,80055,80057,80059],{"class":71,"line":9225},[69,80056,79846],{"class":109},[69,80058,56842],{"class":348},[69,80060,113],{"class":86},[69,80062,80063,80065,80067,80069,80071],{"class":71,"line":9252},[69,80064,55998],{"class":90},[69,80066,94],{"class":86},[69,80068,124],{"class":90},[69,80070,127],{"class":82},[69,80072,130],{"class":86},[69,80074,80075],{"class":71,"line":9257},[69,80076,3431],{"class":86},[69,80078,80079],{"class":71,"line":9263},[69,80080,3644],{"emptyLinePlaceholder":1325},[69,80082,80083,80085,80087],{"class":71,"line":9275},[69,80084,79846],{"class":109},[69,80086,63530],{"class":109},[69,80088,113],{"class":86},[69,80090,80091,80093,80095,80097,80099],{"class":71,"line":9287},[69,80092,56149],{"class":90},[69,80094,94],{"class":86},[69,80096,2037],{"class":90},[69,80098,100],{"class":82},[69,80100,130],{"class":86},[69,80102,80103,80105,80107,80109,80111],{"class":71,"line":9299},[69,80104,79913],{"class":90},[69,80106,94],{"class":86},[69,80108,390],{"class":90},[69,80110,100],{"class":82},[69,80112,130],{"class":86},[69,80114,80115,80117,80119,80122],{"class":71,"line":10958},[69,80116,58643],{"class":90},[69,80118,94],{"class":86},[69,80120,80121],{"class":90},"#666",[69,80123,130],{"class":86},[69,80125,80126],{"class":71,"line":10983},[69,80127,3431],{"class":86},[69,80129,80130],{"class":71,"line":11006},[69,80131,3644],{"emptyLinePlaceholder":1325},[69,80133,80134,80136,80139],{"class":71,"line":11030},[69,80135,79846],{"class":109},[69,80137,80138],{"class":109}," .price",[69,80140,113],{"class":86},[69,80142,80143,80145,80147,80149,80151],{"class":71,"line":11035},[69,80144,56149],{"class":90},[69,80146,94],{"class":86},[69,80148,2137],{"class":90},[69,80150,100],{"class":82},[69,80152,130],{"class":86},[69,80154,80155,80157,80159,80162],{"class":71,"line":11040},[69,80156,58643],{"class":90},[69,80158,94],{"class":86},[69,80160,80161],{"class":90},"firebrick",[69,80163,130],{"class":86},[69,80165,80166],{"class":71,"line":11045},[69,80167,3431],{"class":86},[69,80169,80170],{"class":71,"line":11054},[69,80171,3644],{"emptyLinePlaceholder":1325},[69,80173,80174,80176,80179],{"class":71,"line":11059},[69,80175,79846],{"class":109},[69,80177,80178],{"class":109}," .price::before",[69,80180,113],{"class":86},[69,80182,80183,80186,80188,80191],{"class":71,"line":11065},[69,80184,80185],{"class":90},"      content",[69,80187,94],{"class":86},[69,80189,80190],{"class":1022},"'￥'",[69,80192,130],{"class":86},[69,80194,80195,80197,80199,80201,80203],{"class":71,"line":11086},[69,80196,56149],{"class":90},[69,80198,94],{"class":86},[69,80200,1937],{"class":90},[69,80202,100],{"class":82},[69,80204,130],{"class":86},[69,80206,80207],{"class":71,"line":11092},[69,80208,3431],{"class":86},[69,80210,80211],{"class":71,"line":11106},[69,80212,3644],{"emptyLinePlaceholder":1325},[69,80214,80215,80218],{"class":71,"line":11112},[69,80216,80217],{"class":109},"    .filter",[69,80219,113],{"class":86},[69,80221,80222,80224,80226,80228],{"class":71,"line":11139},[69,80223,56236],{"class":90},[69,80225,94],{"class":86},[69,80227,52709],{"class":90},[69,80229,130],{"class":86},[69,80231,80232,80234,80236,80238,80240],{"class":71,"line":11148},[69,80233,55998],{"class":90},[69,80235,94],{"class":86},[69,80237,79795],{"class":90},[69,80239,100],{"class":82},[69,80241,130],{"class":86},[69,80243,80244,80246,80248,80250,80252],{"class":71,"line":11154},[69,80245,55933],{"class":90},[69,80247,94],{"class":86},[69,80249,1583],{"class":90},[69,80251,52787],{"class":90},[69,80253,130],{"class":86},[69,80255,80256,80258,80260,80262,80264,80266],{"class":71,"line":11162},[69,80257,55922],{"class":90},[69,80259,94],{"class":86},[69,80261,2043],{"class":90},[69,80263,100],{"class":82},[69,80265,79886],{"class":90},[69,80267,80268],{"class":82},"px\n",[69,80270,80271],{"class":71,"line":11167},[69,80272,3431],{"class":86},[69,80274,80275],{"class":71,"line":17843},[69,80276,3644],{"emptyLinePlaceholder":1325},[69,80278,80279,80281,80283],{"class":71,"line":17849},[69,80280,80217],{"class":109},[69,80282,2650],{"class":348},[69,80284,113],{"class":86},[69,80286,80287,80289,80291,80293,80295,80297,80299],{"class":71,"line":17872},[69,80288,55922],{"class":90},[69,80290,94],{"class":86},[69,80292,390],{"class":90},[69,80294,100],{"class":82},[69,80296,10192],{"class":90},[69,80298,100],{"class":82},[69,80300,130],{"class":86},[69,80302,80303,80305,80307,80309],{"class":71,"line":17878},[69,80304,62947],{"class":90},[69,80306,94],{"class":86},[69,80308,63044],{"class":90},[69,80310,130],{"class":86},[69,80312,80313,80315,80317,80319],{"class":71,"line":17901},[69,80314,58643],{"class":90},[69,80316,94],{"class":86},[69,80318,80121],{"class":90},[69,80320,130],{"class":86},[69,80322,80323,80325,80327,80329],{"class":71,"line":17915},[69,80324,65196],{"class":90},[69,80326,94],{"class":86},[69,80328,55964],{"class":90},[69,80330,130],{"class":86},[69,80332,80333,80335,80337,80339,80341],{"class":71,"line":17935},[69,80334,62976],{"class":90},[69,80336,94],{"class":86},[69,80338,2087],{"class":90},[69,80340,100],{"class":82},[69,80342,130],{"class":86},[69,80344,80345],{"class":71,"line":17941},[69,80346,3431],{"class":86},[69,80348,80349],{"class":71,"line":17952},[69,80350,3644],{"emptyLinePlaceholder":1325},[69,80352,80353,80355,80357,80359],{"class":71,"line":17975},[69,80354,80217],{"class":109},[69,80356,2650],{"class":348},[69,80358,63126],{"class":109},[69,80360,113],{"class":86},[69,80362,80363,80365,80367,80370],{"class":71,"line":17997},[69,80364,56111],{"class":90},[69,80366,94],{"class":86},[69,80368,80369],{"class":90},"#05943c",[69,80371,130],{"class":86},[69,80373,80374,80376,80378,80380],{"class":71,"line":18002},[69,80375,58643],{"class":90},[69,80377,94],{"class":86},[69,80379,62068],{"class":90},[69,80381,130],{"class":86},[69,80383,80384],{"class":71,"line":18008},[69,80385,3431],{"class":86},[69,80387,80388,80390,80392],{"class":71,"line":18022},[69,80389,53645],{"class":86},[69,80391,1297],{"class":348},[69,80393,1026],{"class":86},[69,80395,80396,80398,80400],{"class":71,"line":18035},[69,80397,1036],{"class":86},[69,80399,52567],{"class":348},[69,80401,1026],{"class":86},[69,80403,80404],{"class":71,"line":18040},[69,80405,3644],{"emptyLinePlaceholder":1325},[69,80407,80408,80410,80412],{"class":71,"line":18054},[69,80409,1011],{"class":86},[69,80411,680],{"class":348},[69,80413,1026],{"class":86},[69,80415,80416,80418,80420,80422,80424,80427],{"class":71,"line":18059},[69,80417,53372],{"class":86},[69,80419,442],{"class":348},[69,80421,1016],{"class":109},[69,80423,1019],{"class":86},[69,80425,80426],{"class":1022},"\"filter\"",[69,80428,1026],{"class":86},[69,80430,80431,80433,80435,80437,80439,80441,80444,80446,80448,80451,80453],{"class":71,"line":18065},[69,80432,52574],{"class":86},[69,80434,187],{"class":348},[69,80436,62283],{"class":109},[69,80438,1019],{"class":86},[69,80440,62288],{"class":1022},[69,80442,80443],{"class":109}," data-index",[69,80445,1019],{"class":86},[69,80447,4922],{"class":1022},[69,80449,80450],{"class":86},">0-100元\u003C\u002F",[69,80452,187],{"class":348},[69,80454,1026],{"class":86},[69,80456,80457,80459,80461,80463,80465,80467,80469,80471,80473,80476,80478],{"class":71,"line":18070},[69,80458,52574],{"class":86},[69,80460,187],{"class":348},[69,80462,62283],{"class":109},[69,80464,1019],{"class":86},[69,80466,62288],{"class":1022},[69,80468,80443],{"class":109},[69,80470,1019],{"class":86},[69,80472,4945],{"class":1022},[69,80474,80475],{"class":86},">100-300元\u003C\u002F",[69,80477,187],{"class":348},[69,80479,1026],{"class":86},[69,80481,80482,80484,80486,80488,80490,80492,80494,80496,80498,80501,80503],{"class":71,"line":18084},[69,80483,52574],{"class":86},[69,80485,187],{"class":348},[69,80487,62283],{"class":109},[69,80489,1019],{"class":86},[69,80491,62288],{"class":1022},[69,80493,80443],{"class":109},[69,80495,1019],{"class":86},[69,80497,4958],{"class":1022},[69,80499,80500],{"class":86},">300元以上\u003C\u002F",[69,80502,187],{"class":348},[69,80504,1026],{"class":86},[69,80506,80507,80509,80511,80513,80515,80517,80520,80522],{"class":71,"line":18089},[69,80508,52574],{"class":86},[69,80510,187],{"class":348},[69,80512,62283],{"class":109},[69,80514,1019],{"class":86},[69,80516,62288],{"class":1022},[69,80518,80519],{"class":86},">全部区间\u003C\u002F",[69,80521,187],{"class":348},[69,80523,1026],{"class":86},[69,80525,80526,80528,80530],{"class":71,"line":18094},[69,80527,53645],{"class":86},[69,80529,442],{"class":348},[69,80531,1026],{"class":86},[69,80533,80534,80536,80538,80540,80542,80544],{"class":71,"line":18108},[69,80535,53372],{"class":86},[69,80537,442],{"class":348},[69,80539,1016],{"class":109},[69,80541,1019],{"class":86},[69,80543,63834],{"class":1022},[69,80545,1026],{"class":86},[69,80547,80548],{"class":71,"line":18120},[69,80549,80550],{"class":75},"    \u003C!-- \u003Cdiv class=\"item\">\n",[69,80552,80553],{"class":71,"line":18125},[69,80554,80555],{"class":75},"      \u003Cimg src=\"\" alt=\"\">\n",[69,80557,80558],{"class":71,"line":18138},[69,80559,80560],{"class":75},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[69,80562,80563],{"class":71,"line":18143},[69,80564,80565],{"class":75},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[69,80567,80568],{"class":71,"line":18148},[69,80569,80570],{"class":75},"    \u003C\u002Fdiv> -->\n",[69,80572,80573,80575,80577],{"class":71,"line":18153},[69,80574,53645],{"class":86},[69,80576,442],{"class":348},[69,80578,1026],{"class":86},[69,80580,80581,80583,80585],{"class":71,"line":18166},[69,80582,53372],{"class":86},[69,80584,53041],{"class":348},[69,80586,1026],{"class":86},[69,80588,80589],{"class":71,"line":18171},[69,80590,80591],{"class":75},"    \u002F\u002F 2. 初始化数据\n",[69,80593,80594,80596,80599,80601],{"class":71,"line":33869},[69,80595,12463],{"class":82},[69,80597,80598],{"class":90}," goodsList",[69,80600,14805],{"class":82},[69,80602,56674],{"class":86},[69,80604,80605],{"class":71,"line":33875},[69,80606,80607],{"class":86},"      {\n",[69,80609,80610,80613,80616],{"class":71,"line":33881},[69,80611,80612],{"class":86},"        id: ",[69,80614,80615],{"class":1022},"'4001172'",[69,80617,32702],{"class":86},[69,80619,80620,80623,80626],{"class":71,"line":33887},[69,80621,80622],{"class":86},"        name: ",[69,80624,80625],{"class":1022},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[69,80627,32702],{"class":86},[69,80629,80630,80633,80636],{"class":71,"line":33893},[69,80631,80632],{"class":86},"        price: ",[69,80634,80635],{"class":1022},"'289.00'",[69,80637,32702],{"class":86},[69,80639,80640,80643,80646],{"class":71,"line":33904},[69,80641,80642],{"class":86},"        picture: ",[69,80644,80645],{"class":1022},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[69,80647,32702],{"class":86},[69,80649,80650],{"class":71,"line":33910},[69,80651,79113],{"class":86},[69,80653,80654],{"class":71,"line":33930},[69,80655,80607],{"class":86},[69,80657,80658,80660,80663],{"class":71,"line":33936},[69,80659,80612],{"class":86},[69,80661,80662],{"class":1022},"'4001594'",[69,80664,32702],{"class":86},[69,80666,80667,80669,80672],{"class":71,"line":33947},[69,80668,80622],{"class":86},[69,80670,80671],{"class":1022},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[69,80673,32702],{"class":86},[69,80675,80676,80678,80681],{"class":71,"line":33953},[69,80677,80632],{"class":86},[69,80679,80680],{"class":1022},"'288.00'",[69,80682,32702],{"class":86},[69,80684,80685,80687,80690],{"class":71,"line":33959},[69,80686,80642],{"class":86},[69,80688,80689],{"class":1022},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[69,80691,32702],{"class":86},[69,80693,80694],{"class":71,"line":33965},[69,80695,79113],{"class":86},[69,80697,80698],{"class":71,"line":33971},[69,80699,80607],{"class":86},[69,80701,80702,80704,80707],{"class":71,"line":33977},[69,80703,80612],{"class":86},[69,80705,80706],{"class":1022},"'4001009'",[69,80708,32702],{"class":86},[69,80710,80711,80713,80716],{"class":71,"line":33983},[69,80712,80622],{"class":86},[69,80714,80715],{"class":1022},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[69,80717,32702],{"class":86},[69,80719,80720,80722,80725],{"class":71,"line":33989},[69,80721,80632],{"class":86},[69,80723,80724],{"class":1022},"'109.00'",[69,80726,32702],{"class":86},[69,80728,80729,80731,80734],{"class":71,"line":34009},[69,80730,80642],{"class":86},[69,80732,80733],{"class":1022},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[69,80735,32702],{"class":86},[69,80737,80738],{"class":71,"line":34015},[69,80739,79113],{"class":86},[69,80741,80742],{"class":71,"line":34031},[69,80743,80607],{"class":86},[69,80745,80746,80748,80751],{"class":71,"line":34037},[69,80747,80612],{"class":86},[69,80749,80750],{"class":1022},"'4001874'",[69,80752,32702],{"class":86},[69,80754,80755,80757,80760],{"class":71,"line":34051},[69,80756,80622],{"class":86},[69,80758,80759],{"class":1022},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[69,80761,32702],{"class":86},[69,80763,80764,80766,80769],{"class":71,"line":34057},[69,80765,80632],{"class":86},[69,80767,80768],{"class":1022},"'488.00'",[69,80770,32702],{"class":86},[69,80772,80773,80775,80778],{"class":71,"line":34072},[69,80774,80642],{"class":86},[69,80776,80777],{"class":1022},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[69,80779,32702],{"class":86},[69,80781,80782],{"class":71,"line":34078},[69,80783,79113],{"class":86},[69,80785,80786],{"class":71,"line":34087},[69,80787,80607],{"class":86},[69,80789,80790,80792,80795],{"class":71,"line":34093},[69,80791,80612],{"class":86},[69,80793,80794],{"class":1022},"'4001649'",[69,80796,32702],{"class":86},[69,80798,80799,80801,80804],{"class":71,"line":34102},[69,80800,80622],{"class":86},[69,80802,80803],{"class":1022},"'大师监制龙泉青瓷茶叶罐'",[69,80805,32702],{"class":86},[69,80807,80808,80810,80813],{"class":71,"line":34108},[69,80809,80632],{"class":86},[69,80811,80812],{"class":1022},"'139.00'",[69,80814,32702],{"class":86},[69,80816,80817,80819,80822],{"class":71,"line":34114},[69,80818,80642],{"class":86},[69,80820,80821],{"class":1022},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[69,80823,32702],{"class":86},[69,80825,80826],{"class":71,"line":34123},[69,80827,79113],{"class":86},[69,80829,80830],{"class":71,"line":34129},[69,80831,80607],{"class":86},[69,80833,80834,80836,80839],{"class":71,"line":34140},[69,80835,80612],{"class":86},[69,80837,80838],{"class":1022},"'3997185'",[69,80840,32702],{"class":86},[69,80842,80843,80845,80848],{"class":71,"line":34146},[69,80844,80622],{"class":86},[69,80846,80847],{"class":1022},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[69,80849,32702],{"class":86},[69,80851,80852,80854,80857],{"class":71,"line":34165},[69,80853,80632],{"class":86},[69,80855,80856],{"class":1022},"'108.00'",[69,80858,32702],{"class":86},[69,80860,80861,80863,80866],{"class":71,"line":34171},[69,80862,80642],{"class":86},[69,80864,80865],{"class":1022},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[69,80867,32702],{"class":86},[69,80869,80870],{"class":71,"line":34182},[69,80871,79113],{"class":86},[69,80873,80874],{"class":71,"line":34188},[69,80875,80607],{"class":86},[69,80877,80878,80880,80883],{"class":71,"line":34208},[69,80879,80612],{"class":86},[69,80881,80882],{"class":1022},"'3997403'",[69,80884,32702],{"class":86},[69,80886,80887,80889,80892],{"class":71,"line":34224},[69,80888,80622],{"class":86},[69,80890,80891],{"class":1022},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[69,80893,32702],{"class":86},[69,80895,80896,80898,80901],{"class":71,"line":34230},[69,80897,80632],{"class":86},[69,80899,80900],{"class":1022},"'100.00'",[69,80902,32702],{"class":86},[69,80904,80905,80907,80910],{"class":71,"line":34244},[69,80906,80642],{"class":86},[69,80908,80909],{"class":1022},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[69,80911,32702],{"class":86},[69,80913,80914],{"class":71,"line":34250},[69,80915,79113],{"class":86},[69,80917,80918],{"class":71,"line":34256},[69,80919,80607],{"class":86},[69,80921,80922,80924,80927],{"class":71,"line":34267},[69,80923,80612],{"class":86},[69,80925,80926],{"class":1022},"'3998274'",[69,80928,32702],{"class":86},[69,80930,80931,80933,80936],{"class":71,"line":34273},[69,80932,80622],{"class":86},[69,80934,80935],{"class":1022},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[69,80937,32702],{"class":86},[69,80939,80940,80942,80944],{"class":71,"line":34279},[69,80941,80632],{"class":86},[69,80943,80812],{"class":1022},[69,80945,32702],{"class":86},[69,80947,80948,80950,80953],{"class":71,"line":34289},[69,80949,80642],{"class":86},[69,80951,80952],{"class":1022},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[69,80954,32702],{"class":86},[69,80956,80957],{"class":71,"line":34295},[69,80958,79113],{"class":86},[69,80960,80961],{"class":71,"line":34306},[69,80962,54337],{"class":86},[69,80964,80965],{"class":71,"line":34312},[69,80966,3644],{"emptyLinePlaceholder":1325},[69,80968,80969],{"class":71,"line":34322},[69,80970,80971],{"class":75},"    \u002F\u002F 1.渲染函数\n",[69,80973,80974,80976,80978,80980,80982],{"class":71,"line":34327},[69,80975,71309],{"class":82},[69,80977,71312],{"class":109},[69,80979,1398],{"class":86},[69,80981,5124],{"class":6458},[69,80983,103],{"class":86},[69,80985,80986],{"class":71,"line":34333},[69,80987,80988],{"class":75},"      \u002F\u002F 声明空字符串\n",[69,80990,80991,80994,80997,80999],{"class":71,"line":34382},[69,80992,80993],{"class":82},"      let",[69,80995,80996],{"class":86}," str ",[69,80998,1019],{"class":82},[69,81000,71329],{"class":1022},[69,81002,81003],{"class":71,"line":34429},[69,81004,71334],{"class":75},[69,81006,81007,81009,81012,81014,81017,81020],{"class":71,"line":34434},[69,81008,59233],{"class":86},[69,81010,81011],{"class":109},"forEach",[69,81013,1398],{"class":86},[69,81015,81016],{"class":6458},"item",[69,81018,81019],{"class":82}," =>",[69,81021,113],{"class":86},[69,81023,81024,81026,81029,81032,81034,81037,81039,81042,81045,81047],{"class":71,"line":34440},[69,81025,62496],{"class":82},[69,81027,81028],{"class":86}," { ",[69,81030,81031],{"class":90},"name",[69,81033,13677],{"class":86},[69,81035,81036],{"class":90},"price",[69,81038,13677],{"class":86},[69,81040,81041],{"class":90},"picture",[69,81043,81044],{"class":86}," } ",[69,81046,1019],{"class":82},[69,81048,81049],{"class":86}," item\n",[69,81051,81052,81055,81057],{"class":71,"line":34459},[69,81053,81054],{"class":86},"        str ",[69,81056,10719],{"class":82},[69,81058,71393],{"class":1022},[69,81060,81061],{"class":71,"line":34465},[69,81062,81063],{"class":1022},"          \u003Cdiv class=\"item\">\n",[69,81065,81066,81069,81071],{"class":71,"line":34485},[69,81067,81068],{"class":1022},"            \u003Cimg src=\"${",[69,81070,81041],{"class":86},[69,81072,81073],{"class":1022},"}\" alt=\"\">\n",[69,81075,81076,81079,81081],{"class":71,"line":34491},[69,81077,81078],{"class":1022},"            \u003Cp class=\"name\">${",[69,81080,81031],{"class":86},[69,81082,81083],{"class":1022},"}\u003C\u002Fp>\n",[69,81085,81086,81089,81091],{"class":71,"line":34497},[69,81087,81088],{"class":1022},"            \u003Cp class=\"price\">${",[69,81090,81036],{"class":86},[69,81092,81083],{"class":1022},[69,81094,81095],{"class":71,"line":34507},[69,81096,81097],{"class":1022},"          \u003C\u002Fdiv>\n",[69,81099,81100],{"class":71,"line":34512},[69,81101,81102],{"class":1022},"        `\n",[69,81104,81105],{"class":71,"line":34518},[69,81106,66041],{"class":86},[69,81108,81109],{"class":71,"line":34534},[69,81110,81111],{"class":75},"      \u002F\u002F 追加给List\n",[69,81113,81114,81116,81118,81120,81123,81125,81127],{"class":71,"line":34579},[69,81115,56998],{"class":86},[69,81117,55626],{"class":109},[69,81119,1398],{"class":86},[69,81121,81122],{"class":1022},"'.list'",[69,81124,75470],{"class":86},[69,81126,1019],{"class":82},[69,81128,75206],{"class":86},[69,81130,81131],{"class":71,"line":34585},[69,81132,3431],{"class":86},[69,81134,81135],{"class":71,"line":34591},[69,81136,81137],{"class":75},"    \u002F\u002F 页面一打开就需要渲染\n",[69,81139,81140,81143],{"class":71,"line":34597},[69,81141,81142],{"class":109},"    render",[69,81144,81145],{"class":86},"(goodsList)\n",[69,81147,81148],{"class":71,"line":34608},[69,81149,81150],{"class":75},"    \u002F\u002F 2.过滤筛选\n",[69,81152,81153,81155,81157,81159,81162,81164,81166,81168,81170,81172,81174,81176],{"class":71,"line":34614},[69,81154,53635],{"class":86},[69,81156,55626],{"class":109},[69,81158,1398],{"class":86},[69,81160,81161],{"class":1022},"'.filter'",[69,81163,32062],{"class":86},[69,81165,59039],{"class":109},[69,81167,1398],{"class":86},[69,81169,59044],{"class":1022},[69,81171,13677],{"class":86},[69,81173,1468],{"class":6458},[69,81175,81019],{"class":82},[69,81177,113],{"class":86},[69,81179,81180],{"class":71,"line":34620},[69,81181,81182],{"class":75},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[69,81184,81185,81187,81189,81192,81194,81196,81198,81200],{"class":71,"line":34626},[69,81186,59454],{"class":82},[69,81188,81028],{"class":86},[69,81190,81191],{"class":90},"tagName",[69,81193,13677],{"class":86},[69,81195,32773],{"class":90},[69,81197,81044],{"class":86},[69,81199,1019],{"class":82},[69,81201,81202],{"class":86}," e.target\n",[69,81204,81205],{"class":71,"line":34644},[69,81206,81207],{"class":75},"      \u002F\u002F 判断\n",[69,81209,81210,81212,81214,81216,81218],{"class":71,"line":34658},[69,81211,55707],{"class":82},[69,81213,68260],{"class":86},[69,81215,55713],{"class":82},[69,81217,69482],{"class":1022},[69,81219,103],{"class":86},[69,81221,81222],{"class":71,"line":34667},[69,81223,81224],{"class":75},"        \u002F\u002F console.log(11)\n",[69,81226,81227],{"class":71,"line":34676},[69,81228,81229],{"class":75},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[69,81231,81232],{"class":71,"line":34685},[69,81233,81234],{"class":75},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[69,81236,81237,81239,81241,81243],{"class":71,"line":34694},[69,81238,53058],{"class":82},[69,81240,53061],{"class":86},[69,81242,1019],{"class":82},[69,81244,81245],{"class":86}," goodsList\n",[69,81247,81248,81250,81253,81255,81258],{"class":71,"line":34700},[69,81249,3741],{"class":82},[69,81251,81252],{"class":86}," (dataset.index ",[69,81254,55713],{"class":82},[69,81256,81257],{"class":1022}," '1'",[69,81259,103],{"class":86},[69,81261,81262,81265,81267,81270,81273,81275,81277,81279,81282,81284,81286,81289,81291,81293,81295],{"class":71,"line":34706},[69,81263,81264],{"class":86},"          arr ",[69,81266,1019],{"class":82},[69,81268,81269],{"class":86}," goodsList.",[69,81271,81272],{"class":109},"filter",[69,81274,1398],{"class":86},[69,81276,81016],{"class":6458},[69,81278,81019],{"class":82},[69,81280,81281],{"class":86}," item.price ",[69,81283,2955],{"class":82},[69,81285,5337],{"class":90},[69,81287,81288],{"class":82}," &&",[69,81290,81281],{"class":86},[69,81292,2838],{"class":82},[69,81294,6996],{"class":90},[69,81296,1404],{"class":86},[69,81298,81299,81302,81304,81306,81308,81310,81313],{"class":71,"line":34714},[69,81300,81301],{"class":86},"        } ",[69,81303,2946],{"class":82},[69,81305,2949],{"class":82},[69,81307,81252],{"class":86},[69,81309,55713],{"class":82},[69,81311,81312],{"class":1022}," '2'",[69,81314,103],{"class":86},[69,81316,81317,81319,81321,81323,81325,81327,81329,81331,81333,81335,81337,81339,81341,81343,81346],{"class":71,"line":34719},[69,81318,81264],{"class":86},[69,81320,1019],{"class":82},[69,81322,81269],{"class":86},[69,81324,81272],{"class":109},[69,81326,1398],{"class":86},[69,81328,81016],{"class":6458},[69,81330,81019],{"class":82},[69,81332,81281],{"class":86},[69,81334,2955],{"class":82},[69,81336,6996],{"class":90},[69,81338,81288],{"class":82},[69,81340,81281],{"class":86},[69,81342,2838],{"class":82},[69,81344,81345],{"class":90}," 300",[69,81347,1404],{"class":86},[69,81349,81350,81352,81354,81356,81358,81360,81363],{"class":71,"line":34725},[69,81351,81301],{"class":86},[69,81353,2946],{"class":82},[69,81355,2949],{"class":82},[69,81357,81252],{"class":86},[69,81359,55713],{"class":82},[69,81361,81362],{"class":1022}," '3'",[69,81364,103],{"class":86},[69,81366,81367,81369,81371,81373,81375,81377,81379,81381,81383,81385,81387],{"class":71,"line":34736},[69,81368,81264],{"class":86},[69,81370,1019],{"class":82},[69,81372,81269],{"class":86},[69,81374,81272],{"class":109},[69,81376,1398],{"class":86},[69,81378,81016],{"class":6458},[69,81380,81019],{"class":82},[69,81382,81281],{"class":86},[69,81384,2955],{"class":82},[69,81386,81345],{"class":90},[69,81388,1404],{"class":86},[69,81390,81391],{"class":71,"line":34742},[69,81392,3773],{"class":86},[69,81394,81395],{"class":71,"line":34762},[69,81396,81397],{"class":75},"        \u002F\u002F 渲染函数\n",[69,81399,81400,81402],{"class":71,"line":34768},[69,81401,71633],{"class":109},[69,81403,53640],{"class":86},[69,81405,81406],{"class":71,"line":34774},[69,81407,53626],{"class":86},[69,81409,81410],{"class":71,"line":34780},[69,81411,3644],{"emptyLinePlaceholder":1325},[69,81413,81414],{"class":71,"line":34797},[69,81415,34697],{"class":86},[69,81417,81418,81420,81422],{"class":71,"line":34803},[69,81419,53645],{"class":86},[69,81421,53041],{"class":348},[69,81423,1026],{"class":86},[69,81425,81426,81428,81430],{"class":71,"line":34809},[69,81427,1036],{"class":86},[69,81429,680],{"class":348},[69,81431,1026],{"class":86},[69,81433,81434],{"class":71,"line":34815},[69,81435,3644],{"emptyLinePlaceholder":1325},[69,81437,81438,81440,81442],{"class":71,"line":34821},[69,81439,1036],{"class":86},[69,81441,349],{"class":348},[69,81443,1026],{"class":86},[14,81445,81447],{"id":81446},"_410-深入了解对象","4.10 深入了解对象",[19,81449,81451],{"id":81450},"_4101-创建对象","4.10.1 创建对象",[29,81453,81454],{},[24,81455],{"alt":64,"src":81456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[29,81458,81459],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[19,81461,81463],{"id":81462},"_4102-构造函数","4.10.2 构造函数",[29,81465,81466,81469],{},[195,81467,81468],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[29,81471,81472,81475],{},[195,81473,81474],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[59,81477,81479],{"className":51869,"code":81478,"language":349,"meta":64,"style":64},"\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",[66,81480,81481,81489,81494,81515,81528,81540,81552,81556,81561,81588,81593,81620],{"__ignoreMap":64},[69,81482,81483,81485,81487],{"class":71,"line":72},[69,81484,1011],{"class":86},[69,81486,53041],{"class":348},[69,81488,1026],{"class":86},[69,81490,81491],{"class":71,"line":79},[69,81492,81493],{"class":75},"\u002F\u002F例：\n",[69,81495,81496,81498,81501,81503,81505,81507,81509,81511,81513],{"class":71,"line":106},[69,81497,55676],{"class":82},[69,81499,81500],{"class":109}," Pig",[69,81502,1398],{"class":86},[69,81504,81031],{"class":6458},[69,81506,1767],{"class":86},[69,81508,71446],{"class":6458},[69,81510,1767],{"class":86},[69,81512,71463],{"class":6458},[69,81514,103],{"class":86},[69,81516,81517,81520,81523,81525],{"class":71,"line":116},[69,81518,81519],{"class":90},"    this",[69,81521,81522],{"class":86},".name",[69,81524,1019],{"class":82},[69,81526,81527],{"class":86},"name\n",[69,81529,81530,81532,81535,81537],{"class":71,"line":133},[69,81531,81519],{"class":90},[69,81533,81534],{"class":86},".age",[69,81536,1019],{"class":82},[69,81538,81539],{"class":86},"age\n",[69,81541,81542,81544,81547,81549],{"class":71,"line":139},[69,81543,81519],{"class":90},[69,81545,81546],{"class":86},".gender",[69,81548,1019],{"class":82},[69,81550,81551],{"class":86},"gender    \n",[69,81553,81554],{"class":71,"line":401},[69,81555,142],{"class":86},[69,81557,81558],{"class":71,"line":470},[69,81559,81560],{"class":75},"\u002F\u002F创建佩奇对象\n",[69,81562,81563,81565,81568,81570,81572,81574,81577,81579,81581,81583,81586],{"class":71,"line":475},[69,81564,8034],{"class":82},[69,81566,81567],{"class":90}," Peppa",[69,81569,12959],{"class":82},[69,81571,81500],{"class":109},[69,81573,1398],{"class":86},[69,81575,81576],{"class":1022},"'佩奇'",[69,81578,1767],{"class":86},[69,81580,1733],{"class":90},[69,81582,1767],{"class":86},[69,81584,81585],{"class":1022},"'女'",[69,81587,1404],{"class":86},[69,81589,81590],{"class":71,"line":482},[69,81591,81592],{"class":75},"\u002F\u002F创建乔治对象\n",[69,81594,81595,81597,81600,81602,81604,81606,81609,81611,81613,81615,81618],{"class":71,"line":497},[69,81596,8034],{"class":82},[69,81598,81599],{"class":90}," George",[69,81601,12959],{"class":82},[69,81603,81500],{"class":109},[69,81605,1398],{"class":86},[69,81607,81608],{"class":1022},"'乔治'",[69,81610,1767],{"class":86},[69,81612,1465],{"class":90},[69,81614,1767],{"class":86},[69,81616,81617],{"class":1022},"'男'",[69,81619,1404],{"class":86},[69,81621,81622,81624,81626],{"class":71,"line":502},[69,81623,1036],{"class":86},[69,81625,53041],{"class":348},[69,81627,1026],{"class":86},[29,81629,81630],{},[24,81631],{"alt":64,"src":81632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[29,81634,81635],{},[24,81636],{"alt":64,"src":81637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[29,81639,81640],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[29,81642,81643],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[29,81645,81646],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[29,81648,81649],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[29,81651,81652],{},"这里用等号是因为：对象.属性=值",[29,81654,81655],{},"①利用对象字面量创建对象",[29,81657,81658],{},"const o={",[29,81660,81661],{},"name:'pink'",[29,81663,81664],{},"} ②利用new Object创建对象",[29,81666,81667],{},"const o=new Object({name:'pink'})",[29,81669,81670],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[29,81672,81673],{},"构造函数创建对象的执行过程：",[29,81675,81676],{},[24,81677],{"alt":64,"src":81678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[19,81680,81682],{"id":81681},"_4103-实例成员","4.10.3 实例成员",[29,81684,81685],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[37,81687,81688,81691,81694],{},[40,81689,81690],{},"实例对象的属性和方法即为实例成员",[40,81692,81693],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[40,81695,81696],{},"构造函数创建的实例对象彼此独立互不影响",[19,81698,81700],{"id":81699},"_4104-静态成员","4.10.4 静态成员",[29,81702,81703],{},[24,81704],{"alt":64,"src":81705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[29,81707,81708],{},"静态成员有Date.now() Math.PI Math.random()",[29,81710,81711],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[29,81713,81714],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[29,81716,81717],{},"function Pig(name) n {",[29,81719,81720],{},"this.name=name",[29,81722,2332],{},[29,81724,81725],{},"Pig.eyes=2",[29,81727,81728],{},"Pig.sayHai=function () { console.log(this) }",[29,81730,81731],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[29,81733,81734],{},"console.log(Pig.eyes) \u002F\u002F2",[29,81736,12574],{},[37,81738,81739,81742,81745,81748,81751],{},[40,81740,81741],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[40,81743,81744],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[40,81746,81747],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[40,81749,81750],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[40,81752,81753],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[29,81755,81756],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[19,81758,81760],{"id":81759},"_4105-内置构造函数","4.10.5 内置构造函数",[29,81762,81763],{},"内置构造函数包含：",[29,81765,81766],{},[24,81767],{"alt":64,"src":81768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[29,81770,81771],{},[24,81772],{"alt":64,"src":81773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[29,81775,81776],{},"这些基本数据类型，js对他们进行了包装",[53041,81778,81779],{},"\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",[23237,81781,81783],{"id":81782},"_41051-object","4.10.5.1 Object",[29,81785,81786],{},"Object 是内置的构造函数，用于创建普通对象",[29,81788,81789],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[59,81791,81793],{"className":51869,"code":81792,"language":349,"meta":64,"style":64},"const user=new Object({name:'小明',age:15})\n",[66,81794,81795],{"__ignoreMap":64},[69,81796,81797],{"class":71,"line":72},[69,81798,81792],{"class":86},[29,81800,81801],{},"三个常用的静态方法：",[24149,81803,81805],{"id":81804},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[29,81807,81808],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[29,81810,81811],{},[24,81812],{"alt":64,"src":81813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[29,81815,81816],{},[24,81817],{"alt":64,"src":81818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[59,81820,81822],{"className":54295,"code":81821,"language":54297,"meta":64,"style":64},"\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",[66,81823,81824,81832,81840,81845,81850,81855,81860,81865,81870,81878],{"__ignoreMap":64},[69,81825,81826,81828,81830],{"class":71,"line":72},[69,81827,1011],{"class":86},[69,81829,680],{"class":348},[69,81831,1026],{"class":86},[69,81833,81834,81836,81838],{"class":71,"line":79},[69,81835,53372],{"class":86},[69,81837,53041],{"class":348},[69,81839,1026],{"class":86},[69,81841,81842],{"class":71,"line":106},[69,81843,81844],{"class":86},"    const o = { name: 'pink', age: 6 }\n",[69,81846,81847],{"class":71,"line":116},[69,81848,81849],{"class":86},"    \u002F\u002F 获得所有属性名\n",[69,81851,81852],{"class":71,"line":133},[69,81853,81854],{"class":86},"    const arr = Object.keys(o)\n",[69,81856,81857],{"class":71,"line":139},[69,81858,81859],{"class":86},"    console.log(arr)\n",[69,81861,81862],{"class":71,"line":401},[69,81863,81864],{"class":86},"    \u002F\u002F 获得所有属性值\n",[69,81866,81867],{"class":71,"line":470},[69,81868,81869],{"class":86},"    console.log(Object.values(o))\n",[69,81871,81872,81874,81876],{"class":71,"line":475},[69,81873,53645],{"class":86},[69,81875,53041],{"class":348},[69,81877,1026],{"class":86},[69,81879,81880,81882,81884],{"class":71,"line":482},[69,81881,1036],{"class":86},[69,81883,680],{"class":348},[69,81885,1026],{"class":86},[24149,81887,81889],{"id":81888},"_410512-object-assign","4.10.5.1.2 Object. assign",[29,81891,81892],{},"Object.assign(oo,o)",[29,81894,81895],{},"后的东西添加给前 是追加",[29,81897,81898],{},[24,81899],{"alt":64,"src":81900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[29,81902,81903],{},[24,81904],{"alt":64,"src":81905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[59,81907,81909],{"className":54295,"code":81908,"language":54297,"meta":64,"style":64},"\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",[66,81910,81911,81919,81927,81931,81935,81939,81943,81947,81951,81956,81961,81966,81971,81976,81984],{"__ignoreMap":64},[69,81912,81913,81915,81917],{"class":71,"line":72},[69,81914,1011],{"class":86},[69,81916,680],{"class":348},[69,81918,1026],{"class":86},[69,81920,81921,81923,81925],{"class":71,"line":79},[69,81922,53372],{"class":86},[69,81924,53041],{"class":348},[69,81926,1026],{"class":86},[69,81928,81929],{"class":71,"line":106},[69,81930,81844],{"class":86},[69,81932,81933],{"class":71,"line":116},[69,81934,81849],{"class":86},[69,81936,81937],{"class":71,"line":133},[69,81938,81854],{"class":86},[69,81940,81941],{"class":71,"line":139},[69,81942,81859],{"class":86},[69,81944,81945],{"class":71,"line":401},[69,81946,81864],{"class":86},[69,81948,81949],{"class":71,"line":470},[69,81950,81869],{"class":86},[69,81952,81953],{"class":71,"line":475},[69,81954,81955],{"class":86},"    const oo = {}\n",[69,81957,81958],{"class":71,"line":482},[69,81959,81960],{"class":86},"    Object.assign(oo, o)\n",[69,81962,81963],{"class":71,"line":497},[69,81964,81965],{"class":86},"    console.log(oo)\n",[69,81967,81968],{"class":71,"line":502},[69,81969,81970],{"class":86},"    Object.assign(o, { gender: '女' })\n",[69,81972,81973],{"class":71,"line":509},[69,81974,81975],{"class":86},"    console.log(o)\n",[69,81977,81978,81980,81982],{"class":71,"line":524},[69,81979,53645],{"class":86},[69,81981,53041],{"class":348},[69,81983,1026],{"class":86},[69,81985,81986,81988,81990],{"class":71,"line":2888},[69,81987,1036],{"class":86},[69,81989,680],{"class":348},[69,81991,1026],{"class":86},[29,81993,81994],{},[24,81995],{"alt":64,"src":81996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23237,81998,82000],{"id":81999},"_41052-array","4.10.5.2 Array",[29,82002,82003],{},"Array 是内置的构造函数，用于创建数组",[29,82005,82006],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[59,82008,82010],{"className":51869,"code":82009,"language":349,"meta":64,"style":64},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[66,82011,82012,82017],{"__ignoreMap":64},[69,82013,82014],{"class":71,"line":72},[69,82015,82016],{"class":86},"const arr=new Array(3,5)\n",[69,82018,82019],{"class":71,"line":79},[69,82020,82021],{"class":86},"console.log(arr)  \u002F\u002F[3,5]\n",[29,82023,82024],{},"Array的实例方法，这个方法是实例成员",[29,82026,82027],{},[24,82028],{"alt":64,"src":82029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24149,82031,82033],{"id":82032},"_410521-reduce","4.10.5.2.1 reduce",[29,82035,82036],{},[24,82037],{"alt":64,"src":82038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[59,82040,82042],{"className":54295,"code":82041,"language":54297,"meta":64,"style":64},"\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",[66,82043,82044,82052,82060,82065,82070,82075,82080,82084,82089,82094,82099,82103,82108,82113,82117,82122,82127,82132,82140],{"__ignoreMap":64},[69,82045,82046,82048,82050],{"class":71,"line":72},[69,82047,1011],{"class":86},[69,82049,680],{"class":348},[69,82051,1026],{"class":86},[69,82053,82054,82056,82058],{"class":71,"line":79},[69,82055,53372],{"class":86},[69,82057,53041],{"class":348},[69,82059,1026],{"class":86},[69,82061,82062],{"class":71,"line":106},[69,82063,82064],{"class":86},"    const arr = [1, 5, 8]\n",[69,82066,82067],{"class":71,"line":116},[69,82068,82069],{"class":86},"    \u002F\u002F 1.没有初始值\n",[69,82071,82072],{"class":71,"line":133},[69,82073,82074],{"class":86},"    const total = arr.reduce(function (prev, current) {\n",[69,82076,82077],{"class":71,"line":139},[69,82078,82079],{"class":86},"      return prev + current\n",[69,82081,82082],{"class":71,"line":401},[69,82083,34697],{"class":86},[69,82085,82086],{"class":71,"line":470},[69,82087,82088],{"class":86},"    console.log(total)   \u002F\u002F14\n",[69,82090,82091],{"class":71,"line":475},[69,82092,82093],{"class":86},"    \u002F\u002F 2.有初始值\n",[69,82095,82096],{"class":71,"line":482},[69,82097,82098],{"class":86},"    const total1 = arr.reduce(function (prev, current) {\n",[69,82100,82101],{"class":71,"line":497},[69,82102,82079],{"class":86},[69,82104,82105],{"class":71,"line":502},[69,82106,82107],{"class":86},"    }, 10)\n",[69,82109,82110],{"class":71,"line":509},[69,82111,82112],{"class":86},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[69,82114,82115],{"class":71,"line":524},[69,82116,3644],{"emptyLinePlaceholder":1325},[69,82118,82119],{"class":71,"line":2888},[69,82120,82121],{"class":86},"    \u002F\u002F 3.箭头函数写法\n",[69,82123,82124],{"class":71,"line":2893},[69,82125,82126],{"class":86},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[69,82128,82129],{"class":71,"line":2899},[69,82130,82131],{"class":86},"    console.log(total2)   \u002F\u002F24\n",[69,82133,82134,82136,82138],{"class":71,"line":2919},[69,82135,53645],{"class":86},[69,82137,53041],{"class":348},[69,82139,1026],{"class":86},[69,82141,82142,82144,82146],{"class":71,"line":2924},[69,82143,1036],{"class":86},[69,82145,680],{"class":348},[69,82147,1026],{"class":86},[29,82149,82150],{},"执行过程：",[37,82152,82153,82156,82159],{},[40,82154,82155],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[40,82157,82158],{},"每一次循环，把返回值给作为下一次循环的上一次值",[40,82160,82161],{},"如果有起始值，则起始值作为上一次值",[59,82163,82165],{"className":54295,"code":82164,"language":54297,"meta":64,"style":64},"\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",[66,82166,82167,82175,82183,82187,82191,82195,82199,82203,82207,82212,82217,82222,82227,82232,82236,82240,82244,82248,82252,82256,82261,82265,82270,82274,82279,82284,82288,82292,82296,82304],{"__ignoreMap":64},[69,82168,82169,82171,82173],{"class":71,"line":72},[69,82170,1011],{"class":86},[69,82172,680],{"class":348},[69,82174,1026],{"class":86},[69,82176,82177,82179,82181],{"class":71,"line":79},[69,82178,53372],{"class":86},[69,82180,53041],{"class":348},[69,82182,1026],{"class":86},[69,82184,82185],{"class":71,"line":106},[69,82186,82064],{"class":86},[69,82188,82189],{"class":71,"line":116},[69,82190,82069],{"class":86},[69,82192,82193],{"class":71,"line":133},[69,82194,82074],{"class":86},[69,82196,82197],{"class":71,"line":139},[69,82198,82079],{"class":86},[69,82200,82201],{"class":71,"line":401},[69,82202,34697],{"class":86},[69,82204,82205],{"class":71,"line":470},[69,82206,82088],{"class":86},[69,82208,82209],{"class":71,"line":475},[69,82210,82211],{"class":86},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[69,82213,82214],{"class":71,"line":482},[69,82215,82216],{"class":86},"    \u002F\u002F     1              5                    6\n",[69,82218,82219],{"class":71,"line":497},[69,82220,82221],{"class":86},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[69,82223,82224],{"class":71,"line":502},[69,82225,82226],{"class":86},"    \u002F\u002F     6              8                    14\n",[69,82228,82229],{"class":71,"line":509},[69,82230,82231],{"class":86},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[69,82233,82234],{"class":71,"line":524},[69,82235,82093],{"class":86},[69,82237,82238],{"class":71,"line":2888},[69,82239,82098],{"class":86},[69,82241,82242],{"class":71,"line":2893},[69,82243,82079],{"class":86},[69,82245,82246],{"class":71,"line":2899},[69,82247,82107],{"class":86},[69,82249,82250],{"class":71,"line":2919},[69,82251,82112],{"class":86},[69,82253,82254],{"class":71,"line":2924},[69,82255,82211],{"class":86},[69,82257,82258],{"class":71,"line":2938},[69,82259,82260],{"class":86},"    \u002F\u002F     10             1                     11\n",[69,82262,82263],{"class":71,"line":2943},[69,82264,82221],{"class":86},[69,82266,82267],{"class":71,"line":2972},[69,82268,82269],{"class":86},"    \u002F\u002F     11             5                    16\n",[69,82271,82272],{"class":71,"line":2977},[69,82273,82221],{"class":86},[69,82275,82276],{"class":71,"line":2994},[69,82277,82278],{"class":86},"    \u002F\u002F     16             8                    24\n",[69,82280,82281],{"class":71,"line":2999},[69,82282,82283],{"class":86},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[69,82285,82286],{"class":71,"line":3004},[69,82287,82121],{"class":86},[69,82289,82290],{"class":71,"line":3009},[69,82291,82126],{"class":86},[69,82293,82294],{"class":71,"line":3023},[69,82295,82131],{"class":86},[69,82297,82298,82300,82302],{"class":71,"line":3028},[69,82299,53645],{"class":86},[69,82301,53041],{"class":348},[69,82303,1026],{"class":86},[69,82305,82306,82308,82310],{"class":71,"line":3821},[69,82307,1036],{"class":86},[69,82309,680],{"class":348},[69,82311,1026],{"class":86},[24149,82313,82315],{"id":82314},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[29,82317,82318],{},[24,82319],{"alt":64,"src":82320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[59,82322,82324],{"className":54295,"code":82323,"language":54297,"meta":64,"style":64},"\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",[66,82325,82326,82334,82342,82347,82352,82357,82362,82366,82371,82376,82381,82386,82391,82396,82400,82405,82409,82414,82422],{"__ignoreMap":64},[69,82327,82328,82330,82332],{"class":71,"line":72},[69,82329,1011],{"class":86},[69,82331,680],{"class":348},[69,82333,1026],{"class":86},[69,82335,82336,82338,82340],{"class":71,"line":79},[69,82337,53372],{"class":86},[69,82339,53041],{"class":348},[69,82341,1026],{"class":86},[69,82343,82344],{"class":71,"line":106},[69,82345,82346],{"class":86},"    const arr = [\n",[69,82348,82349],{"class":71,"line":116},[69,82350,82351],{"class":86},"      { name: '张三', salary: 10000 },\n",[69,82353,82354],{"class":71,"line":133},[69,82355,82356],{"class":86},"      { name: '李四', salary: 10000 },\n",[69,82358,82359],{"class":71,"line":139},[69,82360,82361],{"class":86},"      { name: '王五', salary: 10000 }\n",[69,82363,82364],{"class":71,"line":401},[69,82365,54337],{"class":86},[69,82367,82368],{"class":71,"line":470},[69,82369,82370],{"class":86},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[69,82372,82373],{"class":71,"line":475},[69,82374,82375],{"class":86},"    \u002F\u002F prev是累计值\n",[69,82377,82378],{"class":71,"line":482},[69,82379,82380],{"class":86},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[69,82382,82383],{"class":71,"line":497},[69,82384,82385],{"class":86},"    console.log(total)\n",[69,82387,82388],{"class":71,"line":502},[69,82389,82390],{"class":86},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[69,82392,82393],{"class":71,"line":509},[69,82394,82395],{"class":86},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[69,82397,82398],{"class":71,"line":524},[69,82399,82390],{"class":86},[69,82401,82402],{"class":71,"line":2888},[69,82403,82404],{"class":86},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[69,82406,82407],{"class":71,"line":2893},[69,82408,82390],{"class":86},[69,82410,82411],{"class":71,"line":2899},[69,82412,82413],{"class":86},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[69,82415,82416,82418,82420],{"class":71,"line":2919},[69,82417,53645],{"class":86},[69,82419,53041],{"class":348},[69,82421,1026],{"class":86},[69,82423,82424,82426,82428],{"class":71,"line":2924},[69,82425,1036],{"class":86},[69,82427,680],{"class":348},[69,82429,1026],{"class":86},[24149,82431,82433],{"id":82432},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[29,82435,82436],{},[24,82437],{"alt":64,"src":82438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[29,82440,82441],{},[24,82442],{"alt":64,"src":82443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[37,82445,82446],{},[40,82447,82448],{},"find()",[29,82450,82451],{},"循环查找，找到第一个就ok",[29,82453,82454],{},[187,82455,82458],{"href":82456,"rel":82457},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[191],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[59,82460,82462],{"className":51869,"code":82461,"language":349,"meta":64,"style":64},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[66,82463,82464,82469,82474],{"__ignoreMap":64},[69,82465,82466],{"class":71,"line":72},[69,82467,82468],{"class":86},"const array1 = [5, 12, 8, 130, 44]\n",[69,82470,82471],{"class":71,"line":79},[69,82472,82473],{"class":86},"const found = array1.find((element) => element > 10)\n",[69,82475,82476],{"class":71,"line":106},[69,82477,82478],{"class":86},"console.log(found)  \u002F\u002F12\n",[29,82480,82481,82483,82484,82489,82490,82493,82494,82496,82497,82502,82503,82505,82506,82508,82509,82511,82512],{},[66,82482,82448],{}," 方法是一个",[187,82485,82488],{"href":82486,"rel":82487},"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",[191],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[66,82491,82492],{},"callbackFn"," 函数，直到 ",[66,82495,82492],{}," 返回一个",[187,82498,82501],{"href":82499,"rel":82500},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[191],"真值","。然后 ",[66,82504,82448],{}," 返回该元素并停止迭代数组。如果 ",[66,82507,82492],{}," 从未返回真值，则 ",[66,82510,82448],{}," 返回 ",[66,82513,82514],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[59,82516,82518],{"className":54295,"code":82517,"language":54297,"meta":64,"style":64},"\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",[66,82519,82520,82528,82536,82541,82546,82551,82555,82560,82565,82569,82574,82579,82583,82587,82592,82597,82601,82605,82610,82615,82620,82625,82630,82634,82639,82644,82649,82654,82658,82663,82671],{"__ignoreMap":64},[69,82521,82522,82524,82526],{"class":71,"line":72},[69,82523,1011],{"class":86},[69,82525,680],{"class":348},[69,82527,1026],{"class":86},[69,82529,82530,82532,82534],{"class":71,"line":79},[69,82531,53372],{"class":86},[69,82533,53041],{"class":348},[69,82535,1026],{"class":86},[69,82537,82538],{"class":71,"line":106},[69,82539,82540],{"class":86},"    const arr = ['red', 'blue', 'green']\n",[69,82542,82543],{"class":71,"line":116},[69,82544,82545],{"class":86},"    const found = arr.find(item => item === 'pink')\n",[69,82547,82548],{"class":71,"line":133},[69,82549,82550],{"class":86},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[69,82552,82553],{"class":71,"line":139},[69,82554,3644],{"emptyLinePlaceholder":1325},[69,82556,82557],{"class":71,"line":401},[69,82558,82559],{"class":86},"    \u002F\u002F 使用场景，用于查找数据\n",[69,82561,82562],{"class":71,"line":470},[69,82563,82564],{"class":86},"    const arr1 = [\n",[69,82566,82567],{"class":71,"line":475},[69,82568,80607],{"class":86},[69,82570,82571],{"class":71,"line":482},[69,82572,82573],{"class":86},"        name: '小米',\n",[69,82575,82576],{"class":71,"line":497},[69,82577,82578],{"class":86},"        price: 1999\n",[69,82580,82581],{"class":71,"line":502},[69,82582,79113],{"class":86},[69,82584,82585],{"class":71,"line":509},[69,82586,80607],{"class":86},[69,82588,82589],{"class":71,"line":524},[69,82590,82591],{"class":86},"        name: '华为',\n",[69,82593,82594],{"class":71,"line":2888},[69,82595,82596],{"class":86},"        price: 3999\n",[69,82598,82599],{"class":71,"line":2893},[69,82600,53626],{"class":86},[69,82602,82603],{"class":71,"line":2899},[69,82604,54337],{"class":86},[69,82606,82607],{"class":71,"line":2919},[69,82608,82609],{"class":86},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[69,82611,82612],{"class":71,"line":2924},[69,82613,82614],{"class":86},"    \u002F\u002F const found1 = arr1.find(item => {\n",[69,82616,82617],{"class":71,"line":2938},[69,82618,82619],{"class":86},"    \u002F\u002F   if (item.name === '小米') {\n",[69,82621,82622],{"class":71,"line":2943},[69,82623,82624],{"class":86},"    \u002F\u002F     return item\n",[69,82626,82627],{"class":71,"line":2972},[69,82628,82629],{"class":86},"    \u002F\u002F   }\n",[69,82631,82632],{"class":71,"line":2977},[69,82633,64516],{"class":86},[69,82635,82636],{"class":71,"line":2994},[69,82637,82638],{"class":86},"    \u002F\u002F 另一种写法\n",[69,82640,82641],{"class":71,"line":2999},[69,82642,82643],{"class":86},"    const found1 = arr1.find(item => {\n",[69,82645,82646],{"class":71,"line":3004},[69,82647,82648],{"class":86},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[69,82650,82651],{"class":71,"line":3009},[69,82652,82653],{"class":86},"      return item.name = '小米'\n",[69,82655,82656],{"class":71,"line":3023},[69,82657,34697],{"class":86},[69,82659,82660],{"class":71,"line":3028},[69,82661,82662],{"class":86},"    console.log(found1)\n",[69,82664,82665,82667,82669],{"class":71,"line":3821},[69,82666,53645],{"class":86},[69,82668,53041],{"class":348},[69,82670,1026],{"class":86},[69,82672,82673,82675,82677],{"class":71,"line":3835},[69,82674,1036],{"class":86},[69,82676,680],{"class":348},[69,82678,1026],{"class":86},[29,82680,82681],{},[24,82682],{"alt":64,"src":82683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[29,82685,82686],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[37,82688,82689],{"start":79},[40,82690,82691],{},"every()返回的是布尔值",[29,82693,82694],{},[187,82695,82698],{"href":82696,"rel":82697},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[191],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[29,82700,82701],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[29,82703,82704],{},"some是只有有一个就没问题",[29,82706,82707],{},"every是必须全是才行",[59,82709,82713],{"className":82710,"code":82711,"language":82712,"meta":64,"style":64},"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",[66,82714,82715,82731,82745,82749,82758],{"__ignoreMap":64},[69,82716,82717,82719,82722,82724,82726,82729],{"class":71,"line":72},[69,82718,55676],{"class":82},[69,82720,82721],{"class":86}," isBigEnough(element, ",[69,82723,75279],{"class":82},[69,82725,13677],{"class":86},[69,82727,82728],{"class":82},"array",[69,82730,103],{"class":86},[69,82732,82733,82736,82739,82741,82743],{"class":71,"line":79},[69,82734,82735],{"class":82},"  return",[69,82737,82738],{"class":86}," element ",[69,82740,2955],{"class":82},[69,82742,3282],{"class":90},[69,82744,130],{"class":86},[69,82746,82747],{"class":71,"line":106},[69,82748,142],{"class":86},[69,82750,82751,82754,82756],{"class":71,"line":116},[69,82752,82753],{"class":86},"[12, 5, 8, 130, 44].every(isBigEnough); ",[69,82755,34565],{"class":82},[69,82757,55743],{"class":86},[69,82759,82760,82763,82765],{"class":71,"line":133},[69,82761,82762],{"class":86},"[12, 54, 18, 130, 44].every(isBigEnough); ",[69,82764,34565],{"class":82},[69,82766,59166],{"class":86},[59,82768,82770],{"className":54295,"code":82769,"language":54297,"meta":64,"style":64},"\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",[66,82771,82772,82780,82788,82793,82797,82802,82807,82815],{"__ignoreMap":64},[69,82773,82774,82776,82778],{"class":71,"line":72},[69,82775,1011],{"class":86},[69,82777,680],{"class":348},[69,82779,1026],{"class":86},[69,82781,82782,82784,82786],{"class":71,"line":79},[69,82783,53372],{"class":86},[69,82785,53041],{"class":348},[69,82787,1026],{"class":86},[69,82789,82790],{"class":71,"line":106},[69,82791,82792],{"class":86},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[69,82794,82795],{"class":71,"line":116},[69,82796,79543],{"class":86},[69,82798,82799],{"class":71,"line":133},[69,82800,82801],{"class":86},"    const flag = arr.every(item => item >= 10)\n",[69,82803,82804],{"class":71,"line":139},[69,82805,82806],{"class":86},"    console.log(flag)    \u002F\u002Ftrue\n",[69,82808,82809,82811,82813],{"class":71,"line":401},[69,82810,53645],{"class":86},[69,82812,53041],{"class":348},[69,82814,1026],{"class":86},[69,82816,82817,82819,82821],{"class":71,"line":470},[69,82818,1036],{"class":86},[69,82820,680],{"class":348},[69,82822,1026],{"class":86},[59,82824,82826],{"className":54295,"code":82825,"language":54297,"meta":64,"style":64},"\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",[66,82827,82828,82836,82844,82848,82853,82858,82863,82871],{"__ignoreMap":64},[69,82829,82830,82832,82834],{"class":71,"line":72},[69,82831,1011],{"class":86},[69,82833,680],{"class":348},[69,82835,1026],{"class":86},[69,82837,82838,82840,82842],{"class":71,"line":79},[69,82839,53372],{"class":86},[69,82841,53041],{"class":348},[69,82843,1026],{"class":86},[69,82845,82846],{"class":71,"line":106},[69,82847,82792],{"class":86},[69,82849,82850],{"class":71,"line":116},[69,82851,82852],{"class":86},"    const arr = [10, 0, 5]\n",[69,82854,82855],{"class":71,"line":133},[69,82856,82857],{"class":86},"    const flag = arr.some(item => item >= 10)\n",[69,82859,82860],{"class":71,"line":139},[69,82861,82862],{"class":86},"    console.log(flag)   \u002F\u002Ftrue\n",[69,82864,82865,82867,82869],{"class":71,"line":401},[69,82866,53645],{"class":86},[69,82868,53041],{"class":348},[69,82870,1026],{"class":86},[69,82872,82873,82875,82877],{"class":71,"line":470},[69,82874,1036],{"class":86},[69,82876,680],{"class":348},[69,82878,1026],{"class":86},[24149,82880,82882],{"id":82881},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[29,82884,82885],{},[24,82886],{"alt":64,"src":82887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[59,82889,82891],{"className":51869,"code":82890,"language":349,"meta":64,"style":64},"\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",[66,82892,82893,82903,82917,82921,82929,82943,82963,82975,82983,82990,83002,83014,83026,83038,83048,83058,83062,83070,83078,83082,83090,83102,83110,83132,83137,83142,83175,83183,83191,83195],{"__ignoreMap":64},[69,82894,82895,82897,82899,82901],{"class":71,"line":72},[69,82896,52532],{"class":86},[69,82898,52535],{"class":348},[69,82900,52538],{"class":109},[69,82902,1026],{"class":86},[69,82904,82905,82907,82909,82911,82913,82915],{"class":71,"line":79},[69,82906,1011],{"class":86},[69,82908,349],{"class":348},[69,82910,52549],{"class":109},[69,82912,1019],{"class":86},[69,82914,52554],{"class":1022},[69,82916,1026],{"class":86},[69,82918,82919],{"class":71,"line":106},[69,82920,3644],{"emptyLinePlaceholder":1325},[69,82922,82923,82925,82927],{"class":71,"line":116},[69,82924,1011],{"class":86},[69,82926,52567],{"class":348},[69,82928,1026],{"class":86},[69,82930,82931,82933,82935,82937,82939,82941],{"class":71,"line":133},[69,82932,53372],{"class":86},[69,82934,52577],{"class":348},[69,82936,52580],{"class":109},[69,82938,1019],{"class":86},[69,82940,52585],{"class":1022},[69,82942,1026],{"class":86},[69,82944,82945,82947,82949,82951,82953,82955,82957,82959,82961],{"class":71,"line":139},[69,82946,53372],{"class":86},[69,82948,52577],{"class":348},[69,82950,16160],{"class":109},[69,82952,1019],{"class":86},[69,82954,52624],{"class":1022},[69,82956,52604],{"class":109},[69,82958,1019],{"class":86},[69,82960,52631],{"class":1022},[69,82962,1026],{"class":86},[69,82964,82965,82967,82969,82971,82973],{"class":71,"line":401},[69,82966,53372],{"class":86},[69,82968,52640],{"class":348},[69,82970,52643],{"class":86},[69,82972,52640],{"class":348},[69,82974,1026],{"class":86},[69,82976,82977,82979,82981],{"class":71,"line":470},[69,82978,53372],{"class":86},[69,82980,1297],{"class":348},[69,82982,1026],{"class":86},[69,82984,82985,82988],{"class":71,"line":475},[69,82986,82987],{"class":348},"    div",[69,82989,113],{"class":86},[69,82991,82992,82994,82996,82998,83000],{"class":71,"line":482},[69,82993,55998],{"class":90},[69,82995,94],{"class":86},[69,82997,2967],{"class":90},[69,82999,100],{"class":82},[69,83001,130],{"class":86},[69,83003,83004,83006,83008,83010,83012],{"class":71,"line":497},[69,83005,56012],{"class":90},[69,83007,94],{"class":86},[69,83009,1790],{"class":90},[69,83011,100],{"class":82},[69,83013,130],{"class":86},[69,83015,83016,83018,83020,83022,83024],{"class":71,"line":502},[69,83017,58586],{"class":90},[69,83019,94],{"class":86},[69,83021,1790],{"class":90},[69,83023,100],{"class":82},[69,83025,130],{"class":86},[69,83027,83028,83030,83032,83034,83036],{"class":71,"line":509},[69,83029,66359],{"class":90},[69,83031,94],{"class":86},[69,83033,1886],{"class":90},[69,83035,100],{"class":82},[69,83037,130],{"class":86},[69,83039,83040,83042,83044,83046],{"class":71,"line":524},[69,83041,58513],{"class":90},[69,83043,94],{"class":86},[69,83045,52823],{"class":90},[69,83047,130],{"class":86},[69,83049,83050,83052,83054,83056],{"class":71,"line":2888},[69,83051,56111],{"class":90},[69,83053,94],{"class":86},[69,83055,52875],{"class":90},[69,83057,130],{"class":86},[69,83059,83060],{"class":71,"line":2893},[69,83061,3431],{"class":86},[69,83063,83064,83066,83068],{"class":71,"line":2899},[69,83065,53645],{"class":86},[69,83067,1297],{"class":348},[69,83069,1026],{"class":86},[69,83071,83072,83074,83076],{"class":71,"line":2919},[69,83073,1036],{"class":86},[69,83075,52567],{"class":348},[69,83077,1026],{"class":86},[69,83079,83080],{"class":71,"line":2924},[69,83081,3644],{"emptyLinePlaceholder":1325},[69,83083,83084,83086,83088],{"class":71,"line":2938},[69,83085,1011],{"class":86},[69,83087,680],{"class":348},[69,83089,1026],{"class":86},[69,83091,83092,83094,83096,83098,83100],{"class":71,"line":2943},[69,83093,53372],{"class":86},[69,83095,442],{"class":348},[69,83097,56541],{"class":86},[69,83099,442],{"class":348},[69,83101,1026],{"class":86},[69,83103,83104,83106,83108],{"class":71,"line":2972},[69,83105,53372],{"class":86},[69,83107,53041],{"class":348},[69,83109,1026],{"class":86},[69,83111,83112,83114,83117,83119,83122,83125,83127,83130],{"class":71,"line":2977},[69,83113,12463],{"class":82},[69,83115,83116],{"class":90}," spec",[69,83118,14805],{"class":82},[69,83120,83121],{"class":86}," { size: ",[69,83123,83124],{"class":1022},"'40cm*40cm'",[69,83126,56691],{"class":86},[69,83128,83129],{"class":1022},"'黑色'",[69,83131,56831],{"class":86},[69,83133,83134],{"class":71,"line":2994},[69,83135,83136],{"class":75},"    \u002F\u002F const arr = Object.values(spec)\n",[69,83138,83139],{"class":71,"line":2999},[69,83140,83141],{"class":75},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[69,83143,83144,83146,83148,83150,83153,83155,83157,83160,83163,83166,83168,83170,83173],{"class":71,"line":3004},[69,83145,53635],{"class":86},[69,83147,55626],{"class":109},[69,83149,1398],{"class":86},[69,83151,83152],{"class":1022},"'div'",[69,83154,75470],{"class":86},[69,83156,1019],{"class":82},[69,83158,83159],{"class":86}," Object.",[69,83161,83162],{"class":109},"values",[69,83164,83165],{"class":86},"(spec).",[69,83167,75444],{"class":109},[69,83169,1398],{"class":86},[69,83171,83172],{"class":1022},"'\u002F'",[69,83174,1404],{"class":86},[69,83176,83177,83179,83181],{"class":71,"line":3009},[69,83178,53645],{"class":86},[69,83180,53041],{"class":348},[69,83182,1026],{"class":86},[69,83184,83185,83187,83189],{"class":71,"line":3023},[69,83186,1036],{"class":86},[69,83188,680],{"class":348},[69,83190,1026],{"class":86},[69,83192,83193],{"class":71,"line":3028},[69,83194,3644],{"emptyLinePlaceholder":1325},[69,83196,83197,83199,83201],{"class":71,"line":3821},[69,83198,1036],{"class":86},[69,83200,349],{"class":348},[69,83202,1026],{"class":86},[29,83204,83205],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24149,83207,83209],{"id":83208},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[29,83211,83212],{},"静态方法，将伪数组转换为真数组",[29,83214,83215],{},[24,83216],{"alt":64,"src":83217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[59,83219,83221],{"className":54295,"code":83220,"language":54297,"meta":64,"style":64},"\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",[66,83222,83223,83231,83239,83251,83263,83275,83283,83291,83296,83301,83306,83311,83319],{"__ignoreMap":64},[69,83224,83225,83227,83229],{"class":71,"line":72},[69,83226,1011],{"class":86},[69,83228,680],{"class":348},[69,83230,1026],{"class":86},[69,83232,83233,83235,83237],{"class":71,"line":79},[69,83234,53372],{"class":86},[69,83236,162],{"class":348},[69,83238,1026],{"class":86},[69,83240,83241,83243,83245,83247,83249],{"class":71,"line":106},[69,83242,52574],{"class":86},[69,83244,40],{"class":348},[69,83246,56541],{"class":86},[69,83248,40],{"class":348},[69,83250,1026],{"class":86},[69,83252,83253,83255,83257,83259,83261],{"class":71,"line":116},[69,83254,52574],{"class":86},[69,83256,40],{"class":348},[69,83258,56541],{"class":86},[69,83260,40],{"class":348},[69,83262,1026],{"class":86},[69,83264,83265,83267,83269,83271,83273],{"class":71,"line":133},[69,83266,52574],{"class":86},[69,83268,40],{"class":348},[69,83270,56541],{"class":86},[69,83272,40],{"class":348},[69,83274,1026],{"class":86},[69,83276,83277,83279,83281],{"class":71,"line":139},[69,83278,53645],{"class":86},[69,83280,162],{"class":348},[69,83282,1026],{"class":86},[69,83284,83285,83287,83289],{"class":71,"line":401},[69,83286,53372],{"class":86},[69,83288,53041],{"class":348},[69,83290,1026],{"class":86},[69,83292,83293],{"class":71,"line":470},[69,83294,83295],{"class":86},"    const lis = document.querySelectorAll('li')\n",[69,83297,83298],{"class":71,"line":475},[69,83299,83300],{"class":86},"    const liss = Array.from(lis)\n",[69,83302,83303],{"class":71,"line":482},[69,83304,83305],{"class":86},"    liss.pop()\n",[69,83307,83308],{"class":71,"line":497},[69,83309,83310],{"class":86},"    console.log(liss)\n",[69,83312,83313,83315,83317],{"class":71,"line":502},[69,83314,53645],{"class":86},[69,83316,53041],{"class":348},[69,83318,1026],{"class":86},[69,83320,83321,83323,83325],{"class":71,"line":509},[69,83322,1036],{"class":86},[69,83324,680],{"class":348},[69,83326,1026],{"class":86},[29,83328,83329],{},[24,83330],{"alt":64,"src":83331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23237,83333,83335],{"id":83334},"_41053-string","4.10.5.3 String",[29,83337,83338],{},[24,83339],{"alt":64,"src":83340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24149,83342,83344],{"id":83343},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[59,83346,83348],{"className":54295,"code":83347,"language":54297,"meta":64,"style":64},"\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",[66,83349,83350,83358,83366,83371,83376,83381,83385,83390,83395,83400,83408],{"__ignoreMap":64},[69,83351,83352,83354,83356],{"class":71,"line":72},[69,83353,1011],{"class":86},[69,83355,680],{"class":348},[69,83357,1026],{"class":86},[69,83359,83360,83362,83364],{"class":71,"line":79},[69,83361,53372],{"class":86},[69,83363,53041],{"class":348},[69,83365,1026],{"class":86},[69,83367,83368],{"class":71,"line":106},[69,83369,83370],{"class":86},"    \u002F\u002F 把字符串转化为数组\n",[69,83372,83373],{"class":71,"line":116},[69,83374,83375],{"class":86},"    const str = 'pink,red'\n",[69,83377,83378],{"class":71,"line":133},[69,83379,83380],{"class":86},"    const arr = str.split(',')\n",[69,83382,83383],{"class":71,"line":139},[69,83384,81859],{"class":86},[69,83386,83387],{"class":71,"line":401},[69,83388,83389],{"class":86},"    const str1 = '2025-8-25'\n",[69,83391,83392],{"class":71,"line":470},[69,83393,83394],{"class":86},"    const arr1 = str1.split('-')\n",[69,83396,83397],{"class":71,"line":475},[69,83398,83399],{"class":86},"    console.log(arr1)\n",[69,83401,83402,83404,83406],{"class":71,"line":482},[69,83403,53645],{"class":86},[69,83405,53041],{"class":348},[69,83407,1026],{"class":86},[69,83409,83410,83412,83414],{"class":71,"line":497},[69,83411,1036],{"class":86},[69,83413,680],{"class":348},[69,83415,1026],{"class":86},[24149,83417,83419],{"id":83418},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[29,83421,6425],{},[29,83423,83424],{},"substring(indexStart)",[29,83426,83427],{},"substring(indexStart, indexEnd)",[162,83429,83430,83441,83453,83463],{},[40,83431,83432,83433,83436,83437,83440],{},"如果省略了 ",[66,83434,83435],{},"indexEnd","，则 ",[66,83438,83439],{},"substring()"," 提取字符直到字符串的末尾",[40,83442,83443,83444,83447,83448,83436,83450,83452],{},"如果 ",[66,83445,83446],{},"indexStart"," 等于 ",[66,83449,83435],{},[66,83451,83439],{}," 返回一个空字符串",[40,83454,83443,83455,83457,83458,83436,83460,83462],{},[66,83456,83446],{}," 大于 ",[66,83459,83435],{},[66,83461,83439],{}," 的效果就像交换了这两个参数一样",[40,83464,83465],{},"结束的索引号不包含想要截取的部分",[59,83467,83469],{"className":82710,"code":83468,"language":82712,"meta":64,"style":64},"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",[66,83470,83471,83483,83487,83521,83551,83555,83586,83590,83617,83647,83677,83681,83712],{"__ignoreMap":64},[69,83472,83473,83476,83478,83481],{"class":71,"line":72},[69,83474,83475],{"class":86},"const anyString ",[69,83477,1019],{"class":82},[69,83479,83480],{"class":1022}," \"Mozilla\"",[69,83482,130],{"class":86},[69,83484,83485],{"class":71,"line":79},[69,83486,3644],{"emptyLinePlaceholder":1325},[69,83488,83489,83492,83494,83496,83498,83501,83503,83506,83508,83510,83512,83514,83516,83518],{"class":71,"line":106},[69,83490,83491],{"class":90},"console",[69,83493,1946],{"class":86},[69,83495,59473],{"class":90},[69,83497,1398],{"class":86},[69,83499,83500],{"class":90},"anyString",[69,83502,1946],{"class":86},[69,83504,83505],{"class":90},"substring",[69,83507,1398],{"class":86},[69,83509,1583],{"class":90},[69,83511,13677],{"class":86},[69,83513,1609],{"class":90},[69,83515,76474],{"class":86},[69,83517,34565],{"class":82},[69,83519,83520],{"class":1022}," 'M'\n",[69,83522,83523,83525,83527,83529,83531,83533,83535,83537,83539,83541,83543,83545,83547,83549],{"class":71,"line":116},[69,83524,83491],{"class":90},[69,83526,1946],{"class":86},[69,83528,59473],{"class":90},[69,83530,1398],{"class":86},[69,83532,83500],{"class":90},[69,83534,1946],{"class":86},[69,83536,83505],{"class":90},[69,83538,1398],{"class":86},[69,83540,1609],{"class":90},[69,83542,13677],{"class":86},[69,83544,1583],{"class":90},[69,83546,76474],{"class":86},[69,83548,34565],{"class":82},[69,83550,83520],{"class":1022},[69,83552,83553],{"class":71,"line":133},[69,83554,3644],{"emptyLinePlaceholder":1325},[69,83556,83557,83559,83561,83563,83565,83567,83569,83571,83573,83575,83577,83579,83581,83583],{"class":71,"line":139},[69,83558,83491],{"class":90},[69,83560,1946],{"class":86},[69,83562,59473],{"class":90},[69,83564,1398],{"class":86},[69,83566,83500],{"class":90},[69,83568,1946],{"class":86},[69,83570,83505],{"class":90},[69,83572,1398],{"class":86},[69,83574,1583],{"class":90},[69,83576,13677],{"class":86},[69,83578,1733],{"class":90},[69,83580,76474],{"class":86},[69,83582,34565],{"class":82},[69,83584,83585],{"class":1022}," 'Mozill'\n",[69,83587,83588],{"class":71,"line":401},[69,83589,3644],{"emptyLinePlaceholder":1325},[69,83591,83592,83594,83596,83598,83600,83602,83604,83606,83608,83610,83612,83614],{"class":71,"line":470},[69,83593,83491],{"class":90},[69,83595,1946],{"class":86},[69,83597,59473],{"class":90},[69,83599,1398],{"class":86},[69,83601,83500],{"class":90},[69,83603,1946],{"class":86},[69,83605,83505],{"class":90},[69,83607,1398],{"class":86},[69,83609,1684],{"class":90},[69,83611,76474],{"class":86},[69,83613,34565],{"class":82},[69,83615,83616],{"class":1022}," 'lla'\n",[69,83618,83619,83621,83623,83625,83627,83629,83631,83633,83635,83637,83639,83641,83643,83645],{"class":71,"line":475},[69,83620,83491],{"class":90},[69,83622,1946],{"class":86},[69,83624,59473],{"class":90},[69,83626,1398],{"class":86},[69,83628,83500],{"class":90},[69,83630,1946],{"class":86},[69,83632,83505],{"class":90},[69,83634,1398],{"class":86},[69,83636,1684],{"class":90},[69,83638,13677],{"class":86},[69,83640,1758],{"class":90},[69,83642,76530],{"class":86},[69,83644,34565],{"class":82},[69,83646,83616],{"class":1022},[69,83648,83649,83651,83653,83655,83657,83659,83661,83663,83665,83667,83669,83671,83673,83675],{"class":71,"line":482},[69,83650,83491],{"class":90},[69,83652,1946],{"class":86},[69,83654,59473],{"class":90},[69,83656,1398],{"class":86},[69,83658,83500],{"class":90},[69,83660,1946],{"class":86},[69,83662,83505],{"class":90},[69,83664,1398],{"class":86},[69,83666,1758],{"class":90},[69,83668,13677],{"class":86},[69,83670,1684],{"class":90},[69,83672,76474],{"class":86},[69,83674,34565],{"class":82},[69,83676,83616],{"class":1022},[69,83678,83679],{"class":71,"line":497},[69,83680,3644],{"emptyLinePlaceholder":1325},[69,83682,83683,83685,83687,83689,83691,83693,83695,83697,83699,83701,83703,83705,83707,83709],{"class":71,"line":502},[69,83684,83491],{"class":90},[69,83686,1946],{"class":86},[69,83688,59473],{"class":90},[69,83690,1398],{"class":86},[69,83692,83500],{"class":90},[69,83694,1946],{"class":86},[69,83696,83505],{"class":90},[69,83698,1398],{"class":86},[69,83700,1583],{"class":90},[69,83702,13677],{"class":86},[69,83704,1758],{"class":90},[69,83706,76474],{"class":86},[69,83708,34565],{"class":82},[69,83710,83711],{"class":1022}," 'Mozilla'\n",[69,83713,83714,83716,83718,83720,83722,83724,83726,83728,83730,83732,83734,83736,83738,83740],{"class":71,"line":509},[69,83715,83491],{"class":90},[69,83717,1946],{"class":86},[69,83719,59473],{"class":90},[69,83721,1398],{"class":86},[69,83723,83500],{"class":90},[69,83725,1946],{"class":86},[69,83727,83505],{"class":90},[69,83729,1398],{"class":86},[69,83731,1583],{"class":90},[69,83733,13677],{"class":86},[69,83735,390],{"class":90},[69,83737,76474],{"class":86},[69,83739,34565],{"class":82},[69,83741,83711],{"class":1022},[24149,83743,83745],{"id":83744},"_410533-startswith","4.10.5.3.3 startsWith",[29,83747,83748,83751,83752,83757,83758,83760,83761],{},[66,83749,83750],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[195,83753,83754],{},[66,83755,83756],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[66,83759,2614],{}," 或 ",[66,83762,67246],{},[59,83764,83766],{"className":78716,"code":83765,"language":78718,"meta":64,"style":64},"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",[66,83767,83768,83780,83799,83804,83824],{"__ignoreMap":64},[69,83769,83770,83772,83775,83777],{"class":71,"line":72},[69,83771,8034],{"class":82},[69,83773,83774],{"class":86}," str1 ",[69,83776,1019],{"class":82},[69,83778,83779],{"class":1022}," \"Saturday night plans\"\n",[69,83781,83782,83784,83786,83789,83792,83794,83797],{"class":71,"line":79},[69,83783,78753],{"class":86},[69,83785,59473],{"class":109},[69,83787,83788],{"class":86},"(str1.",[69,83790,83791],{"class":109},"startsWith",[69,83793,1398],{"class":86},[69,83795,83796],{"class":1022},"\"Sat\"",[69,83798,31733],{"class":86},[69,83800,83801],{"class":71,"line":106},[69,83802,83803],{"class":75},"\u002F\u002F Expected output: true\n",[69,83805,83806,83808,83810,83812,83814,83816,83818,83820,83822],{"class":71,"line":116},[69,83807,78753],{"class":86},[69,83809,59473],{"class":109},[69,83811,83788],{"class":86},[69,83813,83791],{"class":109},[69,83815,1398],{"class":86},[69,83817,83796],{"class":1022},[69,83819,13677],{"class":86},[69,83821,1465],{"class":90},[69,83823,31733],{"class":86},[69,83825,83826],{"class":71,"line":133},[69,83827,83828],{"class":75},"\u002F\u002F Expected output: false\n",[59,83830,83832],{"className":51869,"code":83831,"language":349,"meta":64,"style":64},"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",[66,83833,83834,83839,83844,83848,83853,83858],{"__ignoreMap":64},[69,83835,83836],{"class":71,"line":72},[69,83837,83838],{"class":86},"startsWith(searchString)\n",[69,83840,83841],{"class":71,"line":79},[69,83842,83843],{"class":86},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[69,83845,83846],{"class":71,"line":106},[69,83847,3644],{"emptyLinePlaceholder":1325},[69,83849,83850],{"class":71,"line":116},[69,83851,83852],{"class":86},"const str3 = 'pink老师上课中'\n",[69,83854,83855],{"class":71,"line":133},[69,83856,83857],{"class":86},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[69,83859,83860],{"class":71,"line":139},[69,83861,83862],{"class":86},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24149,83864,83866],{"id":83865},"_410534-includes","4.10.5.3.4 includes",[29,83868,83869],{},"includes(searchString) includes(searchString, position)",[37,83871,83872],{},[40,83873,83874],{},"searchString:",[29,83876,83877,83878,83880,83881,83886,83887,83892,83893,22739,83896,83899,83900,83903],{},"一个要在 ",[66,83879,2554],{}," 中查找的字符串。",[187,83882,83885],{"href":83883,"rel":83884},"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",[191],"不能是正则表达式","。所有非正则表达式的值都会被",[187,83888,83891],{"href":83889,"rel":83890},"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",[191],"强制转换为字符串","，因此如果该参数被省略或传入 ",[66,83894,83895],{},"undefined",[66,83897,83898],{},"includes()"," 方法会在字符串中搜索 ",[66,83901,83902],{},"\"undefined\"","，这通常不是你想要的",[37,83905,83906],{"start":79},[40,83907,83908,2246],{},[66,83909,83910],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[29,83912,83913,83914,83917,83918],{},"在字符串中开始搜索 ",[66,83915,83916],{},"searchString"," 的位置。默认值为 ",[66,83919,1583],{},[37,83921,83922],{"start":106},[40,83923,83924],{},"返回值：",[29,83926,83927,83928,83930,83931,83935,83936],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[66,83929,83916],{}," 为空字符串的情况），则返回 ",[195,83932,83933],{},[66,83934,2614],{}," ，否则返回 ",[195,83937,83938],{},[66,83939,67246],{},[37,83941,83942],{"start":116},[40,83943,83944],{},"异常：",[29,83946,83443,83947,15036,83949,83953],{},[66,83948,83916],{},[187,83950,83952],{"href":83883,"rel":83951},[191],"是一个正则表达式","，则会抛出",[29,83955,83956],{},"只要是有就是true，不需要非得以谁开头结尾",[59,83958,83960],{"className":78716,"code":83959,"language":78718,"meta":64,"style":64},"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",[66,83961,83962,83973,83996,84015,84035,84057,84076],{"__ignoreMap":64},[69,83963,83964,83966,83968,83970],{"class":71,"line":72},[69,83965,8034],{"class":82},[69,83967,80996],{"class":86},[69,83969,1019],{"class":82},[69,83971,83972],{"class":1022}," \"To be, or not to be, that is the question.\"\n",[69,83974,83975,83977,83979,83982,83985,83987,83990,83993],{"class":71,"line":79},[69,83976,78753],{"class":86},[69,83978,59473],{"class":109},[69,83980,83981],{"class":86},"(str.",[69,83983,83984],{"class":109},"includes",[69,83986,1398],{"class":86},[69,83988,83989],{"class":1022},"\"To be\"",[69,83991,83992],{"class":86},"))",[69,83994,83995],{"class":75},"  \u002F\u002F true\n",[69,83997,83998,84000,84002,84004,84006,84008,84011,84013],{"class":71,"line":106},[69,83999,78753],{"class":86},[69,84001,59473],{"class":109},[69,84003,83981],{"class":86},[69,84005,83984],{"class":109},[69,84007,1398],{"class":86},[69,84009,84010],{"class":1022},"\"question\"",[69,84012,83992],{"class":86},[69,84014,83995],{"class":75},[69,84016,84017,84019,84021,84023,84025,84027,84030,84032],{"class":71,"line":116},[69,84018,78753],{"class":86},[69,84020,59473],{"class":109},[69,84022,83981],{"class":86},[69,84024,83984],{"class":109},[69,84026,1398],{"class":86},[69,84028,84029],{"class":1022},"\"nonexistent\"",[69,84031,83992],{"class":86},[69,84033,84034],{"class":75},"  \u002F\u002F false\n",[69,84036,84037,84039,84041,84043,84045,84047,84049,84051,84053,84055],{"class":71,"line":133},[69,84038,78753],{"class":86},[69,84040,59473],{"class":109},[69,84042,83981],{"class":86},[69,84044,83984],{"class":109},[69,84046,1398],{"class":86},[69,84048,83989],{"class":1022},[69,84050,13677],{"class":86},[69,84052,1609],{"class":90},[69,84054,83992],{"class":86},[69,84056,84034],{"class":75},[69,84058,84059,84061,84063,84065,84067,84069,84072,84074],{"class":71,"line":139},[69,84060,78753],{"class":86},[69,84062,59473],{"class":109},[69,84064,83981],{"class":86},[69,84066,83984],{"class":109},[69,84068,1398],{"class":86},[69,84070,84071],{"class":1022},"\"TO BE\"",[69,84073,83992],{"class":86},[69,84075,84034],{"class":75},[69,84077,84078,84080,84082,84084,84086,84088,84090,84092],{"class":71,"line":401},[69,84079,78753],{"class":86},[69,84081,59473],{"class":109},[69,84083,83981],{"class":86},[69,84085,83984],{"class":109},[69,84087,1398],{"class":86},[69,84089,8894],{"class":1022},[69,84091,83992],{"class":86},[69,84093,83995],{"class":75},[24149,84095,84097],{"id":84096},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[59,84099,84101],{"className":54295,"code":84100,"language":54297,"meta":64,"style":64},"\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",[66,84102,84103,84111,84119,84124,84129,84134,84139,84144,84152],{"__ignoreMap":64},[69,84104,84105,84107,84109],{"class":71,"line":72},[69,84106,1011],{"class":86},[69,84108,680],{"class":348},[69,84110,1026],{"class":86},[69,84112,84113,84115,84117],{"class":71,"line":79},[69,84114,53372],{"class":86},[69,84116,53041],{"class":348},[69,84118,1026],{"class":86},[69,84120,84121],{"class":71,"line":106},[69,84122,84123],{"class":86},"    const num = 10\n",[69,84125,84126],{"class":71,"line":116},[69,84127,84128],{"class":86},"    \u002F\u002F 强制转换\n",[69,84130,84131],{"class":71,"line":133},[69,84132,84133],{"class":86},"    console.log(String(num))\n",[69,84135,84136],{"class":71,"line":139},[69,84137,84138],{"class":86},"    \u002F\u002F toString()方法转换\n",[69,84140,84141],{"class":71,"line":401},[69,84142,84143],{"class":86},"    console.log(num.toString())\n",[69,84145,84146,84148,84150],{"class":71,"line":470},[69,84147,53645],{"class":86},[69,84149,53041],{"class":348},[69,84151,1026],{"class":86},[69,84153,84154,84156,84158],{"class":71,"line":475},[69,84155,1036],{"class":86},[69,84157,680],{"class":348},[69,84159,1026],{"class":86},[24149,84161,84163],{"id":84162},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[29,84165,84166],{},[24,84167],{"alt":64,"src":84168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[59,84170,84172],{"className":51869,"code":84171,"language":349,"meta":64,"style":64},"\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",[66,84173,84174,84184,84198,84202,84210,84224,84244,84256,84264,84268,84276,84288,84296,84308,84313,84318,84323,84370,84386,84394,84402,84406],{"__ignoreMap":64},[69,84175,84176,84178,84180,84182],{"class":71,"line":72},[69,84177,52532],{"class":86},[69,84179,52535],{"class":348},[69,84181,52538],{"class":109},[69,84183,1026],{"class":86},[69,84185,84186,84188,84190,84192,84194,84196],{"class":71,"line":79},[69,84187,1011],{"class":86},[69,84189,349],{"class":348},[69,84191,52549],{"class":109},[69,84193,1019],{"class":86},[69,84195,52554],{"class":1022},[69,84197,1026],{"class":86},[69,84199,84200],{"class":71,"line":106},[69,84201,3644],{"emptyLinePlaceholder":1325},[69,84203,84204,84206,84208],{"class":71,"line":116},[69,84205,1011],{"class":86},[69,84207,52567],{"class":348},[69,84209,1026],{"class":86},[69,84211,84212,84214,84216,84218,84220,84222],{"class":71,"line":133},[69,84213,53372],{"class":86},[69,84215,52577],{"class":348},[69,84217,52580],{"class":109},[69,84219,1019],{"class":86},[69,84221,52585],{"class":1022},[69,84223,1026],{"class":86},[69,84225,84226,84228,84230,84232,84234,84236,84238,84240,84242],{"class":71,"line":139},[69,84227,53372],{"class":86},[69,84229,52577],{"class":348},[69,84231,16160],{"class":109},[69,84233,1019],{"class":86},[69,84235,52624],{"class":1022},[69,84237,52604],{"class":109},[69,84239,1019],{"class":86},[69,84241,52631],{"class":1022},[69,84243,1026],{"class":86},[69,84245,84246,84248,84250,84252,84254],{"class":71,"line":401},[69,84247,53372],{"class":86},[69,84249,52640],{"class":348},[69,84251,52643],{"class":86},[69,84253,52640],{"class":348},[69,84255,1026],{"class":86},[69,84257,84258,84260,84262],{"class":71,"line":470},[69,84259,1036],{"class":86},[69,84261,52567],{"class":348},[69,84263,1026],{"class":86},[69,84265,84266],{"class":71,"line":475},[69,84267,3644],{"emptyLinePlaceholder":1325},[69,84269,84270,84272,84274],{"class":71,"line":482},[69,84271,1011],{"class":86},[69,84273,680],{"class":348},[69,84275,1026],{"class":86},[69,84277,84278,84280,84282,84284,84286],{"class":71,"line":497},[69,84279,53372],{"class":86},[69,84281,442],{"class":348},[69,84283,56541],{"class":86},[69,84285,442],{"class":348},[69,84287,1026],{"class":86},[69,84289,84290,84292,84294],{"class":71,"line":502},[69,84291,53372],{"class":86},[69,84293,53041],{"class":348},[69,84295,1026],{"class":86},[69,84297,84298,84300,84303,84305],{"class":71,"line":509},[69,84299,12463],{"class":82},[69,84301,84302],{"class":90}," gift",[69,84304,14805],{"class":82},[69,84306,84307],{"class":1022}," '50g的茶叶，清洗球'\n",[69,84309,84310],{"class":71,"line":524},[69,84311,84312],{"class":75},"    \u002F\u002F 1.把字符串拆分为数组\n",[69,84314,84315],{"class":71,"line":2888},[69,84316,84317],{"class":75},"    \u002F\u002F console.log(gift.split(','))\n",[69,84319,84320],{"class":71,"line":2893},[69,84321,84322],{"class":75},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[69,84324,84325,84327,84329,84331,84334,84337,84339,84342,84344,84346,84348,84350,84352,84355,84357,84360,84362,84364,84366,84368],{"class":71,"line":2899},[69,84326,12463],{"class":82},[69,84328,75140],{"class":90},[69,84330,14805],{"class":82},[69,84332,84333],{"class":86}," gift.",[69,84335,84336],{"class":109},"split",[69,84338,1398],{"class":86},[69,84340,84341],{"class":1022},"'，'",[69,84343,32062],{"class":86},[69,84345,75265],{"class":109},[69,84347,1398],{"class":86},[69,84349,81016],{"class":6458},[69,84351,81019],{"class":82},[69,84353,84354],{"class":1022}," `\u003Cspan>【赠品】${",[69,84356,81016],{"class":86},[69,84358,84359],{"class":1022},"}\u003C\u002Fspan>\u003Cbr>`",[69,84361,32062],{"class":86},[69,84363,75444],{"class":109},[69,84365,1398],{"class":86},[69,84367,75449],{"class":1022},[69,84369,1404],{"class":86},[69,84371,84372,84374,84376,84378,84380,84382,84384],{"class":71,"line":2919},[69,84373,53635],{"class":86},[69,84375,55626],{"class":109},[69,84377,1398],{"class":86},[69,84379,83152],{"class":1022},[69,84381,75470],{"class":86},[69,84383,1019],{"class":82},[69,84385,75206],{"class":86},[69,84387,84388,84390,84392],{"class":71,"line":2924},[69,84389,53645],{"class":86},[69,84391,53041],{"class":348},[69,84393,1026],{"class":86},[69,84395,84396,84398,84400],{"class":71,"line":2938},[69,84397,1036],{"class":86},[69,84399,680],{"class":348},[69,84401,1026],{"class":86},[69,84403,84404],{"class":71,"line":2943},[69,84405,3644],{"emptyLinePlaceholder":1325},[69,84407,84408,84410,84412],{"class":71,"line":2972},[69,84409,1036],{"class":86},[69,84411,349],{"class":348},[69,84413,1026],{"class":86},[23237,84415,84417],{"id":84416},"_41054-number","4.10.5.4 Number",[29,84419,84420],{},[24,84421],{"alt":64,"src":84422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[29,84424,84425],{},"整数也可以进行toFixed来保留小数",[29,84427,84428],{},"比如：",[29,84430,84431],{},"const price=10",[29,84433,84434],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23237,84436,84438],{"id":84437},"_41055-购物车展示","4.10.5.5 购物车展示",[29,84440,84441],{},[24,84442],{"alt":64,"src":84443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[59,84445,84447],{"className":51869,"code":84446,"language":349,"meta":64,"style":64},"\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",[66,84448,84449,84459,84473,84477,84485,84499,84519,84531,84539,84545,84555,84565,84575,84579,84583,84589,84601,84615,84619,84623,84629,84641,84657,84667,84683,84687,84691,84697,84707,84717,84721,84725,84733,84745,84757,84769,84773,84777,84785,84797,84801,84805,84816,84826,84838,84850,84860,84864,84868,84876,84885,84897,84907,84917,84921,84925,84933,84942,84949,84959,84971,84975,84979,84988,84998,85009,85021,85033,85037,85041,85050,85060,85071,85075,85079,85085,85097,85109,85119,85129,85147,85159,85163,85167,85176,85188,85198,85208,85220,85224,85232,85240,85244,85252,85266,85274,85288,85316,85324,85332,85342,85346,85354,85362,85371,85379,85388,85398,85402,85406,85414,85422,85431,85439,85447,85460,85464,85468,85476,85484,85493,85501,85509,85524,85528,85532,85540,85548,85557,85565,85573,85587,85595,85599,85603,85608,85634,85639,85676,85681,85704,85709,85763,85768,85804,85808,85814,85819,85828,85842,85851,85870,85879,85889,85894,85899,85912,85917,85971,85997,86005,86013,86017],{"__ignoreMap":64},[69,84450,84451,84453,84455,84457],{"class":71,"line":72},[69,84452,52532],{"class":86},[69,84454,52535],{"class":348},[69,84456,52538],{"class":109},[69,84458,1026],{"class":86},[69,84460,84461,84463,84465,84467,84469,84471],{"class":71,"line":79},[69,84462,1011],{"class":86},[69,84464,349],{"class":348},[69,84466,52549],{"class":109},[69,84468,1019],{"class":86},[69,84470,52554],{"class":1022},[69,84472,1026],{"class":86},[69,84474,84475],{"class":71,"line":106},[69,84476,3644],{"emptyLinePlaceholder":1325},[69,84478,84479,84481,84483],{"class":71,"line":116},[69,84480,1011],{"class":86},[69,84482,52567],{"class":348},[69,84484,1026],{"class":86},[69,84486,84487,84489,84491,84493,84495,84497],{"class":71,"line":133},[69,84488,53372],{"class":86},[69,84490,52577],{"class":348},[69,84492,52580],{"class":109},[69,84494,1019],{"class":86},[69,84496,52585],{"class":1022},[69,84498,1026],{"class":86},[69,84500,84501,84503,84505,84507,84509,84511,84513,84515,84517],{"class":71,"line":139},[69,84502,53372],{"class":86},[69,84504,52577],{"class":348},[69,84506,16160],{"class":109},[69,84508,1019],{"class":86},[69,84510,52624],{"class":1022},[69,84512,52604],{"class":109},[69,84514,1019],{"class":86},[69,84516,52631],{"class":1022},[69,84518,1026],{"class":86},[69,84520,84521,84523,84525,84527,84529],{"class":71,"line":401},[69,84522,53372],{"class":86},[69,84524,52640],{"class":348},[69,84526,52643],{"class":86},[69,84528,52640],{"class":348},[69,84530,1026],{"class":86},[69,84532,84533,84535,84537],{"class":71,"line":470},[69,84534,53372],{"class":86},[69,84536,1297],{"class":348},[69,84538,1026],{"class":86},[69,84540,84541,84543],{"class":71,"line":475},[69,84542,7645],{"class":348},[69,84544,113],{"class":86},[69,84546,84547,84549,84551,84553],{"class":71,"line":482},[69,84548,55922],{"class":90},[69,84550,94],{"class":86},[69,84552,1583],{"class":90},[69,84554,130],{"class":86},[69,84556,84557,84559,84561,84563],{"class":71,"line":497},[69,84558,55933],{"class":90},[69,84560,94],{"class":86},[69,84562,1583],{"class":90},[69,84564,130],{"class":86},[69,84566,84567,84569,84571,84573],{"class":71,"line":502},[69,84568,73817],{"class":90},[69,84570,94],{"class":86},[69,84572,61731],{"class":90},[69,84574,130],{"class":86},[69,84576,84577],{"class":71,"line":509},[69,84578,3431],{"class":86},[69,84580,84581],{"class":71,"line":524},[69,84582,3644],{"emptyLinePlaceholder":1325},[69,84584,84585,84587],{"class":71,"line":2888},[69,84586,63349],{"class":109},[69,84588,113],{"class":86},[69,84590,84591,84593,84595,84597,84599],{"class":71,"line":2893},[69,84592,55998],{"class":90},[69,84594,94],{"class":86},[69,84596,79795],{"class":90},[69,84598,100],{"class":82},[69,84600,130],{"class":86},[69,84602,84603,84605,84607,84609,84611,84613],{"class":71,"line":2899},[69,84604,55933],{"class":90},[69,84606,94],{"class":86},[69,84608,124],{"class":90},[69,84610,100],{"class":82},[69,84612,52787],{"class":90},[69,84614,130],{"class":86},[69,84616,84617],{"class":71,"line":2919},[69,84618,3431],{"class":86},[69,84620,84621],{"class":71,"line":2924},[69,84622,3644],{"emptyLinePlaceholder":1325},[69,84624,84625,84627],{"class":71,"line":2938},[69,84626,79846],{"class":109},[69,84628,113],{"class":86},[69,84630,84631,84633,84635,84637,84639],{"class":71,"line":2943},[69,84632,55922],{"class":90},[69,84634,94],{"class":86},[69,84636,1963],{"class":90},[69,84638,100],{"class":82},[69,84640,130],{"class":86},[69,84642,84643,84645,84647,84649,84651,84653,84655],{"class":71,"line":2972},[69,84644,63086],{"class":90},[69,84646,94],{"class":86},[69,84648,29357],{"class":90},[69,84650,79901],{"class":90},[69,84652,79904],{"class":90},[69,84654,2082],{"class":82},[69,84656,130],{"class":86},[69,84658,84659,84661,84663,84665],{"class":71,"line":2977},[69,84660,56236],{"class":90},[69,84662,94],{"class":86},[69,84664,52709],{"class":90},[69,84666,130],{"class":86},[69,84668,84669,84671,84673,84675,84677,84679,84681],{"class":71,"line":2994},[69,84670,63203],{"class":90},[69,84672,94],{"class":86},[69,84674,1609],{"class":90},[69,84676,100],{"class":82},[69,84678,52752],{"class":90},[69,84680,63470],{"class":90},[69,84682,130],{"class":86},[69,84684,84685],{"class":71,"line":2999},[69,84686,3431],{"class":86},[69,84688,84689],{"class":71,"line":3004},[69,84690,3644],{"emptyLinePlaceholder":1325},[69,84692,84693,84695],{"class":71,"line":3009},[69,84694,79964],{"class":109},[69,84696,113],{"class":86},[69,84698,84699,84701,84703,84705],{"class":71,"line":3023},[69,84700,63251],{"class":90},[69,84702,94],{"class":86},[69,84704,63256],{"class":90},[69,84706,130],{"class":86},[69,84708,84709,84711,84713,84715],{"class":71,"line":3028},[69,84710,56111],{"class":90},[69,84712,94],{"class":86},[69,84714,63044],{"class":90},[69,84716,130],{"class":86},[69,84718,84719],{"class":71,"line":3821},[69,84720,3431],{"class":86},[69,84722,84723],{"class":71,"line":3835},[69,84724,3644],{"emptyLinePlaceholder":1325},[69,84726,84727,84729,84731],{"class":71,"line":3843},[69,84728,79846],{"class":109},[69,84730,56842],{"class":348},[69,84732,113],{"class":86},[69,84734,84735,84737,84739,84741,84743],{"class":71,"line":3848},[69,84736,55998],{"class":90},[69,84738,94],{"class":86},[69,84740,1999],{"class":90},[69,84742,100],{"class":82},[69,84744,130],{"class":86},[69,84746,84747,84749,84751,84753,84755],{"class":71,"line":3854},[69,84748,56012],{"class":90},[69,84750,94],{"class":86},[69,84752,1999],{"class":90},[69,84754,100],{"class":82},[69,84756,130],{"class":86},[69,84758,84759,84761,84763,84765,84767],{"class":71,"line":3860},[69,84760,62976],{"class":90},[69,84762,94],{"class":86},[69,84764,1709],{"class":90},[69,84766,100],{"class":82},[69,84768,130],{"class":86},[69,84770,84771],{"class":71,"line":3865},[69,84772,3431],{"class":86},[69,84774,84775],{"class":71,"line":9190},[69,84776,3644],{"emptyLinePlaceholder":1325},[69,84778,84779,84781,84783],{"class":71,"line":9214},[69,84780,79846],{"class":109},[69,84782,63530],{"class":109},[69,84784,113],{"class":86},[69,84786,84787,84789,84791,84793,84795],{"class":71,"line":9219},[69,84788,55998],{"class":90},[69,84790,94],{"class":86},[69,84792,2967],{"class":90},[69,84794,100],{"class":82},[69,84796,130],{"class":86},[69,84798,84799],{"class":71,"line":9225},[69,84800,3431],{"class":86},[69,84802,84803],{"class":71,"line":9252},[69,84804,3644],{"emptyLinePlaceholder":1325},[69,84806,84807,84809,84811,84814],{"class":71,"line":9257},[69,84808,79846],{"class":109},[69,84810,63530],{"class":109},[69,84812,84813],{"class":109}," .tag",[69,84815,113],{"class":86},[69,84817,84818,84820,84822,84824],{"class":71,"line":9263},[69,84819,56236],{"class":90},[69,84821,94],{"class":86},[69,84823,62095],{"class":90},[69,84825,130],{"class":86},[69,84827,84828,84830,84832,84834,84836],{"class":71,"line":9275},[69,84829,55922],{"class":90},[69,84831,94],{"class":86},[69,84833,1471],{"class":90},[69,84835,100],{"class":82},[69,84837,130],{"class":86},[69,84839,84840,84842,84844,84846,84848],{"class":71,"line":9287},[69,84841,56149],{"class":90},[69,84843,94],{"class":86},[69,84845,1886],{"class":90},[69,84847,100],{"class":82},[69,84849,130],{"class":86},[69,84851,84852,84854,84856,84858],{"class":71,"line":9299},[69,84853,58643],{"class":90},[69,84855,94],{"class":86},[69,84857,63296],{"class":90},[69,84859,130],{"class":86},[69,84861,84862],{"class":71,"line":10958},[69,84863,3431],{"class":86},[69,84865,84866],{"class":71,"line":10983},[69,84867,3644],{"emptyLinePlaceholder":1325},[69,84869,84870,84872,84874],{"class":71,"line":11006},[69,84871,79846],{"class":109},[69,84873,80138],{"class":109},[69,84875,32702],{"class":86},[69,84877,84878,84880,84883],{"class":71,"line":11030},[69,84879,79846],{"class":109},[69,84881,84882],{"class":109}," .sub-total",[69,84884,113],{"class":86},[69,84886,84887,84889,84891,84893,84895],{"class":71,"line":11035},[69,84888,56149],{"class":90},[69,84890,94],{"class":86},[69,84892,2037],{"class":90},[69,84894,100],{"class":82},[69,84896,130],{"class":86},[69,84898,84899,84901,84903,84905],{"class":71,"line":11040},[69,84900,58643],{"class":90},[69,84902,94],{"class":86},[69,84904,80161],{"class":90},[69,84906,130],{"class":86},[69,84908,84909,84911,84913,84915],{"class":71,"line":11045},[69,84910,63063],{"class":90},[69,84912,94],{"class":86},[69,84914,1609],{"class":90},[69,84916,130],{"class":86},[69,84918,84919],{"class":71,"line":11054},[69,84920,3431],{"class":86},[69,84922,84923],{"class":71,"line":11059},[69,84924,3644],{"emptyLinePlaceholder":1325},[69,84926,84927,84929,84931],{"class":71,"line":11065},[69,84928,79846],{"class":109},[69,84930,80178],{"class":109},[69,84932,32702],{"class":86},[69,84934,84935,84937,84940],{"class":71,"line":11086},[69,84936,79846],{"class":109},[69,84938,84939],{"class":109}," .sub-total::before",[69,84941,32702],{"class":86},[69,84943,84944,84947],{"class":71,"line":11092},[69,84945,84946],{"class":109},"    .amount::before",[69,84948,113],{"class":86},[69,84950,84951,84953,84955,84957],{"class":71,"line":11106},[69,84952,80185],{"class":90},[69,84954,94],{"class":86},[69,84956,80190],{"class":1022},[69,84958,130],{"class":86},[69,84960,84961,84963,84965,84967,84969],{"class":71,"line":11112},[69,84962,56149],{"class":90},[69,84964,94],{"class":86},[69,84966,1886],{"class":90},[69,84968,100],{"class":82},[69,84970,130],{"class":86},[69,84972,84973],{"class":71,"line":11139},[69,84974,3431],{"class":86},[69,84976,84977],{"class":71,"line":11148},[69,84978,3644],{"emptyLinePlaceholder":1325},[69,84980,84981,84983,84986],{"class":71,"line":11154},[69,84982,79846],{"class":109},[69,84984,84985],{"class":109}," .spec",[69,84987,113],{"class":86},[69,84989,84990,84992,84994,84996],{"class":71,"line":11162},[69,84991,63063],{"class":90},[69,84993,94],{"class":86},[69,84995,1471],{"class":90},[69,84997,130],{"class":86},[69,84999,85000,85002,85004,85007],{"class":71,"line":11167},[69,85001,58643],{"class":90},[69,85003,94],{"class":86},[69,85005,85006],{"class":90},"#888",[69,85008,130],{"class":86},[69,85010,85011,85013,85015,85017,85019],{"class":71,"line":17843},[69,85012,56149],{"class":90},[69,85014,94],{"class":86},[69,85016,1937],{"class":90},[69,85018,100],{"class":82},[69,85020,130],{"class":86},[69,85022,85023,85025,85027,85029,85031],{"class":71,"line":17849},[69,85024,63226],{"class":90},[69,85026,94],{"class":86},[69,85028,2087],{"class":90},[69,85030,100],{"class":82},[69,85032,130],{"class":86},[69,85034,85035],{"class":71,"line":17872},[69,85036,3431],{"class":86},[69,85038,85039],{"class":71,"line":17878},[69,85040,3644],{"emptyLinePlaceholder":1325},[69,85042,85043,85045,85048],{"class":71,"line":17901},[69,85044,79846],{"class":109},[69,85046,85047],{"class":109}," .count",[69,85049,113],{"class":86},[69,85051,85052,85054,85056,85058],{"class":71,"line":17915},[69,85053,63063],{"class":90},[69,85055,94],{"class":86},[69,85057,1609],{"class":90},[69,85059,130],{"class":86},[69,85061,85062,85064,85066,85069],{"class":71,"line":17935},[69,85063,58643],{"class":90},[69,85065,94],{"class":86},[69,85067,85068],{"class":90},"#aaa",[69,85070,130],{"class":86},[69,85072,85073],{"class":71,"line":17941},[69,85074,3431],{"class":86},[69,85076,85077],{"class":71,"line":17952},[69,85078,3644],{"emptyLinePlaceholder":1325},[69,85080,85081,85083],{"class":71,"line":17975},[69,85082,73696],{"class":109},[69,85084,113],{"class":86},[69,85086,85087,85089,85091,85093,85095],{"class":71,"line":17997},[69,85088,55998],{"class":90},[69,85090,94],{"class":86},[69,85092,79795],{"class":90},[69,85094,100],{"class":82},[69,85096,130],{"class":86},[69,85098,85099,85101,85103,85105,85107],{"class":71,"line":18002},[69,85100,55933],{"class":90},[69,85102,94],{"class":86},[69,85104,1583],{"class":90},[69,85106,52787],{"class":90},[69,85108,130],{"class":86},[69,85110,85111,85113,85115,85117],{"class":71,"line":18008},[69,85112,56236],{"class":90},[69,85114,94],{"class":86},[69,85116,52709],{"class":90},[69,85118,130],{"class":86},[69,85120,85121,85123,85125,85127],{"class":71,"line":18022},[69,85122,56247],{"class":90},[69,85124,94],{"class":86},[69,85126,52811],{"class":90},[69,85128,130],{"class":86},[69,85130,85131,85134,85136,85138,85140,85142,85145],{"class":71,"line":18035},[69,85132,85133],{"class":90},"      border-top",[69,85135,94],{"class":86},[69,85137,1609],{"class":90},[69,85139,100],{"class":82},[69,85141,52752],{"class":90},[69,85143,85144],{"class":90}," #4e4e4e",[69,85146,130],{"class":86},[69,85148,85149,85151,85153,85155,85157],{"class":71,"line":18040},[69,85150,55922],{"class":90},[69,85152,94],{"class":86},[69,85154,2087],{"class":90},[69,85156,100],{"class":82},[69,85158,130],{"class":86},[69,85160,85161],{"class":71,"line":18054},[69,85162,3431],{"class":86},[69,85164,85165],{"class":71,"line":18059},[69,85166,3644],{"emptyLinePlaceholder":1325},[69,85168,85169,85171,85174],{"class":71,"line":18065},[69,85170,73696],{"class":109},[69,85172,85173],{"class":109}," .amount",[69,85175,113],{"class":86},[69,85177,85178,85180,85182,85184,85186],{"class":71,"line":18070},[69,85179,56149],{"class":90},[69,85181,94],{"class":86},[69,85183,2037],{"class":90},[69,85185,100],{"class":82},[69,85187,130],{"class":86},[69,85189,85190,85192,85194,85196],{"class":71,"line":18084},[69,85191,58643],{"class":90},[69,85193,94],{"class":86},[69,85195,80161],{"class":90},[69,85197,130],{"class":86},[69,85199,85200,85202,85204,85206],{"class":71,"line":18089},[69,85201,63560],{"class":90},[69,85203,94],{"class":86},[69,85205,52721],{"class":90},[69,85207,130],{"class":86},[69,85209,85210,85212,85214,85216,85218],{"class":71,"line":18094},[69,85211,62976],{"class":90},[69,85213,94],{"class":86},[69,85215,2043],{"class":90},[69,85217,100],{"class":82},[69,85219,130],{"class":86},[69,85221,85222],{"class":71,"line":18108},[69,85223,3431],{"class":86},[69,85225,85226,85228,85230],{"class":71,"line":18120},[69,85227,53645],{"class":86},[69,85229,1297],{"class":348},[69,85231,1026],{"class":86},[69,85233,85234,85236,85238],{"class":71,"line":18125},[69,85235,1036],{"class":86},[69,85237,52567],{"class":348},[69,85239,1026],{"class":86},[69,85241,85242],{"class":71,"line":18138},[69,85243,3644],{"emptyLinePlaceholder":1325},[69,85245,85246,85248,85250],{"class":71,"line":18143},[69,85247,1011],{"class":86},[69,85249,680],{"class":348},[69,85251,1026],{"class":86},[69,85253,85254,85256,85258,85260,85262,85264],{"class":71,"line":18148},[69,85255,53372],{"class":86},[69,85257,442],{"class":348},[69,85259,1016],{"class":109},[69,85261,1019],{"class":86},[69,85263,63834],{"class":1022},[69,85265,1026],{"class":86},[69,85267,85268,85270,85272],{"class":71,"line":18153},[69,85269,53645],{"class":86},[69,85271,442],{"class":348},[69,85273,1026],{"class":86},[69,85275,85276,85278,85280,85282,85284,85286],{"class":71,"line":18166},[69,85277,53372],{"class":86},[69,85279,442],{"class":348},[69,85281,1016],{"class":109},[69,85283,1019],{"class":86},[69,85285,63806],{"class":1022},[69,85287,1026],{"class":86},[69,85289,85290,85292,85294,85297,85299,85301,85303,85306,85308,85310,85312,85314],{"class":71,"line":18171},[69,85291,52574],{"class":86},[69,85293,442],{"class":348},[69,85295,85296],{"class":86},">合计：\u003C",[69,85298,69],{"class":348},[69,85300,1016],{"class":109},[69,85302,1019],{"class":86},[69,85304,85305],{"class":1022},"\"amount\"",[69,85307,56541],{"class":86},[69,85309,69],{"class":348},[69,85311,56541],{"class":86},[69,85313,442],{"class":348},[69,85315,1026],{"class":86},[69,85317,85318,85320,85322],{"class":71,"line":33869},[69,85319,53645],{"class":86},[69,85321,442],{"class":348},[69,85323,1026],{"class":86},[69,85325,85326,85328,85330],{"class":71,"line":33875},[69,85327,53372],{"class":86},[69,85329,53041],{"class":348},[69,85331,1026],{"class":86},[69,85333,85334,85336,85338,85340],{"class":71,"line":33881},[69,85335,12463],{"class":82},[69,85337,80598],{"class":90},[69,85339,14805],{"class":82},[69,85341,56674],{"class":86},[69,85343,85344],{"class":71,"line":33887},[69,85345,80607],{"class":86},[69,85347,85348,85350,85352],{"class":71,"line":33893},[69,85349,80612],{"class":86},[69,85351,80615],{"class":1022},[69,85353,32702],{"class":86},[69,85355,85356,85358,85360],{"class":71,"line":33904},[69,85357,80622],{"class":86},[69,85359,80625],{"class":1022},[69,85361,32702],{"class":86},[69,85363,85364,85366,85369],{"class":71,"line":33910},[69,85365,80632],{"class":86},[69,85367,85368],{"class":90},"289.9",[69,85370,32702],{"class":86},[69,85372,85373,85375,85377],{"class":71,"line":33930},[69,85374,80642],{"class":86},[69,85376,80645],{"class":1022},[69,85378,32702],{"class":86},[69,85380,85381,85384,85386],{"class":71,"line":33936},[69,85382,85383],{"class":86},"        count: ",[69,85385,1471],{"class":90},[69,85387,32702],{"class":86},[69,85389,85390,85393,85396],{"class":71,"line":33947},[69,85391,85392],{"class":86},"        spec: { color: ",[69,85394,85395],{"class":1022},"'白色'",[69,85397,56831],{"class":86},[69,85399,85400],{"class":71,"line":33953},[69,85401,79113],{"class":86},[69,85403,85404],{"class":71,"line":33959},[69,85405,80607],{"class":86},[69,85407,85408,85410,85412],{"class":71,"line":33965},[69,85409,80612],{"class":86},[69,85411,80706],{"class":1022},[69,85413,32702],{"class":86},[69,85415,85416,85418,85420],{"class":71,"line":33971},[69,85417,80622],{"class":86},[69,85419,80715],{"class":1022},[69,85421,32702],{"class":86},[69,85423,85424,85426,85429],{"class":71,"line":33977},[69,85425,80632],{"class":86},[69,85427,85428],{"class":90},"109.8",[69,85430,32702],{"class":86},[69,85432,85433,85435,85437],{"class":71,"line":33983},[69,85434,80642],{"class":86},[69,85436,80733],{"class":1022},[69,85438,32702],{"class":86},[69,85440,85441,85443,85445],{"class":71,"line":33989},[69,85442,85383],{"class":86},[69,85444,1465],{"class":90},[69,85446,32702],{"class":86},[69,85448,85449,85452,85454,85456,85458],{"class":71,"line":34009},[69,85450,85451],{"class":86},"        spec: { size: ",[69,85453,83124],{"class":1022},[69,85455,56691],{"class":86},[69,85457,83129],{"class":1022},[69,85459,56831],{"class":86},[69,85461,85462],{"class":71,"line":34015},[69,85463,79113],{"class":86},[69,85465,85466],{"class":71,"line":34031},[69,85467,80607],{"class":86},[69,85469,85470,85472,85474],{"class":71,"line":34037},[69,85471,80612],{"class":86},[69,85473,80750],{"class":1022},[69,85475,32702],{"class":86},[69,85477,85478,85480,85482],{"class":71,"line":34051},[69,85479,80622],{"class":86},[69,85481,80759],{"class":1022},[69,85483,32702],{"class":86},[69,85485,85486,85488,85491],{"class":71,"line":34057},[69,85487,80632],{"class":86},[69,85489,85490],{"class":90},"488",[69,85492,32702],{"class":86},[69,85494,85495,85497,85499],{"class":71,"line":34072},[69,85496,80642],{"class":86},[69,85498,80777],{"class":1022},[69,85500,32702],{"class":86},[69,85502,85503,85505,85507],{"class":71,"line":34078},[69,85504,85383],{"class":86},[69,85506,1609],{"class":90},[69,85508,32702],{"class":86},[69,85510,85511,85513,85516,85519,85522],{"class":71,"line":34087},[69,85512,85392],{"class":86},[69,85514,85515],{"class":1022},"'青色'",[69,85517,85518],{"class":86},", sum: ",[69,85520,85521],{"class":1022},"'一大四小'",[69,85523,56831],{"class":86},[69,85525,85526],{"class":71,"line":34093},[69,85527,79113],{"class":86},[69,85529,85530],{"class":71,"line":34102},[69,85531,80607],{"class":86},[69,85533,85534,85536,85538],{"class":71,"line":34108},[69,85535,80612],{"class":86},[69,85537,80794],{"class":1022},[69,85539,32702],{"class":86},[69,85541,85542,85544,85546],{"class":71,"line":34114},[69,85543,80622],{"class":86},[69,85545,80803],{"class":1022},[69,85547,32702],{"class":86},[69,85549,85550,85552,85555],{"class":71,"line":34123},[69,85551,80632],{"class":86},[69,85553,85554],{"class":90},"139",[69,85556,32702],{"class":86},[69,85558,85559,85561,85563],{"class":71,"line":34129},[69,85560,80642],{"class":86},[69,85562,80821],{"class":1022},[69,85564,32702],{"class":86},[69,85566,85567,85569,85571],{"class":71,"line":34140},[69,85568,85383],{"class":86},[69,85570,1609],{"class":90},[69,85572,32702],{"class":86},[69,85574,85575,85577,85580,85582,85585],{"class":71,"line":34146},[69,85576,85451],{"class":86},[69,85578,85579],{"class":1022},"'小号'",[69,85581,56691],{"class":86},[69,85583,85584],{"class":1022},"'紫色'",[69,85586,56697],{"class":86},[69,85588,85589,85592],{"class":71,"line":34165},[69,85590,85591],{"class":86},"        gift: ",[69,85593,85594],{"class":1022},"'50g茶叶,清洗球'\n",[69,85596,85597],{"class":71,"line":34171},[69,85598,53626],{"class":86},[69,85600,85601],{"class":71,"line":34182},[69,85602,54337],{"class":86},[69,85604,85605],{"class":71,"line":34188},[69,85606,85607],{"class":75},"    \u002F\u002F  1.根据数据渲染页面\n",[69,85609,85610,85612,85614,85616,85618,85620,85622,85624,85626,85628,85630,85632],{"class":71,"line":34208},[69,85611,53635],{"class":86},[69,85613,55626],{"class":109},[69,85615,1398],{"class":86},[69,85617,81122],{"class":1022},[69,85619,75470],{"class":86},[69,85621,1019],{"class":82},[69,85623,81269],{"class":86},[69,85625,75265],{"class":109},[69,85627,1398],{"class":86},[69,85629,81016],{"class":6458},[69,85631,81019],{"class":82},[69,85633,113],{"class":86},[69,85635,85636],{"class":71,"line":34224},[69,85637,85638],{"class":75},"      \u002F\u002F 对象解构\n",[69,85640,85641,85643,85645,85647,85649,85651,85653,85656,85658,85660,85662,85665,85667,85670,85672,85674],{"class":71,"line":34230},[69,85642,59454],{"class":82},[69,85644,81028],{"class":86},[69,85646,81041],{"class":90},[69,85648,13677],{"class":86},[69,85650,81031],{"class":90},[69,85652,13677],{"class":86},[69,85654,85655],{"class":90},"count",[69,85657,13677],{"class":86},[69,85659,81036],{"class":90},[69,85661,13677],{"class":86},[69,85663,85664],{"class":90},"spec",[69,85666,13677],{"class":86},[69,85668,85669],{"class":90},"gift",[69,85671,81044],{"class":86},[69,85673,1019],{"class":82},[69,85675,81049],{"class":86},[69,85677,85678],{"class":71,"line":34244},[69,85679,85680],{"class":75},"      \u002F\u002F 规格文字模块处理\n",[69,85682,85683,85685,85688,85690,85692,85694,85696,85698,85700,85702],{"class":71,"line":34250},[69,85684,59454],{"class":82},[69,85686,85687],{"class":90}," text",[69,85689,14805],{"class":82},[69,85691,83159],{"class":86},[69,85693,83162],{"class":109},[69,85695,83165],{"class":86},[69,85697,75444],{"class":109},[69,85699,1398],{"class":86},[69,85701,83172],{"class":1022},[69,85703,1404],{"class":86},[69,85705,85706],{"class":71,"line":34256},[69,85707,85708],{"class":75},"      \u002F\u002F 处理赠品模块\n",[69,85710,85711,85713,85715,85717,85720,85722,85724,85726,85728,85731,85733,85735,85737,85739,85741,85744,85746,85749,85751,85753,85755,85757,85759,85761],{"class":71,"line":34267},[69,85712,59454],{"class":82},[69,85714,75140],{"class":90},[69,85716,14805],{"class":82},[69,85718,85719],{"class":86}," gift ",[69,85721,2372],{"class":82},[69,85723,84333],{"class":86},[69,85725,84336],{"class":109},[69,85727,1398],{"class":86},[69,85729,85730],{"class":1022},"','",[69,85732,32062],{"class":86},[69,85734,75265],{"class":109},[69,85736,1398],{"class":86},[69,85738,81016],{"class":6458},[69,85740,81019],{"class":82},[69,85742,85743],{"class":1022}," `\u003Cspan class=\"tag\">【赠品】${",[69,85745,81016],{"class":86},[69,85747,85748],{"class":1022},"}\u003C\u002Fspan>`",[69,85750,32062],{"class":86},[69,85752,75444],{"class":109},[69,85754,1398],{"class":86},[69,85756,75449],{"class":1022},[69,85758,14955],{"class":86},[69,85760,2246],{"class":82},[69,85762,71329],{"class":1022},[69,85764,85765],{"class":71,"line":34273},[69,85766,85767],{"class":75},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[69,85769,85770,85772,85775,85777,85780,85782,85784,85786,85789,85791,85793,85795,85798,85800,85802],{"class":71,"line":34279},[69,85771,59454],{"class":82},[69,85773,85774],{"class":90}," subtotal",[69,85776,14805],{"class":82},[69,85778,85779],{"class":86}," ((price ",[69,85781,1843],{"class":82},[69,85783,6996],{"class":90},[69,85785,7760],{"class":82},[69,85787,85788],{"class":86}," count) ",[69,85790,1972],{"class":82},[69,85792,6996],{"class":90},[69,85794,32062],{"class":86},[69,85796,85797],{"class":109},"toFixed",[69,85799,1398],{"class":86},[69,85801,1471],{"class":90},[69,85803,1404],{"class":86},[69,85805,85806],{"class":71,"line":34289},[69,85807,3644],{"emptyLinePlaceholder":1325},[69,85809,85810,85812],{"class":71,"line":34295},[69,85811,75203],{"class":82},[69,85813,71393],{"class":1022},[69,85815,85816],{"class":71,"line":34306},[69,85817,85818],{"class":1022},"        \u003Cdiv class=\"item\">\n",[69,85820,85821,85824,85826],{"class":71,"line":34312},[69,85822,85823],{"class":1022},"          \u003Cimg src=\"${",[69,85825,81041],{"class":86},[69,85827,81073],{"class":1022},[69,85829,85830,85833,85835,85838,85840],{"class":71,"line":34322},[69,85831,85832],{"class":1022},"          \u003Cp class=\"name\">${",[69,85834,81031],{"class":86},[69,85836,85837],{"class":1022},"}${",[69,85839,2554],{"class":86},[69,85841,81083],{"class":1022},[69,85843,85844,85847,85849],{"class":71,"line":34327},[69,85845,85846],{"class":1022},"          \u003Cp class=\"spec\">${",[69,85848,540],{"class":86},[69,85850,81083],{"class":1022},[69,85852,85853,85856,85858,85860,85862,85864,85866,85868],{"class":71,"line":34333},[69,85854,85855],{"class":1022},"          \u003Cp class=\"price\">${",[69,85857,81036],{"class":86},[69,85859,1946],{"class":1022},[69,85861,85797],{"class":109},[69,85863,1398],{"class":1022},[69,85865,1471],{"class":90},[69,85867,1818],{"class":1022},[69,85869,81083],{"class":1022},[69,85871,85872,85875,85877],{"class":71,"line":34382},[69,85873,85874],{"class":1022},"          \u003Cp class=\"count\">x${",[69,85876,85655],{"class":86},[69,85878,81083],{"class":1022},[69,85880,85881,85884,85887],{"class":71,"line":34429},[69,85882,85883],{"class":1022},"          \u003Cp class=\"sub-total\">${",[69,85885,85886],{"class":86},"subtotal",[69,85888,81083],{"class":1022},[69,85890,85891],{"class":71,"line":34434},[69,85892,85893],{"class":1022},"        \u003C\u002Fdiv> \n",[69,85895,85896],{"class":71,"line":34440},[69,85897,85898],{"class":1022},"             `\n",[69,85900,85901,85904,85906,85908,85910],{"class":71,"line":34459},[69,85902,85903],{"class":86},"    }).",[69,85905,75444],{"class":109},[69,85907,1398],{"class":86},[69,85909,75449],{"class":1022},[69,85911,1404],{"class":86},[69,85913,85914],{"class":71,"line":34465},[69,85915,85916],{"class":75},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[69,85918,85919,85921,85923,85925,85927,85930,85932,85935,85937,85939,85941,85944,85947,85949,85952,85954,85956,85958,85961,85963,85965,85967,85969],{"class":71,"line":34485},[69,85920,12463],{"class":82},[69,85922,64011],{"class":90},[69,85924,14805],{"class":82},[69,85926,81269],{"class":86},[69,85928,85929],{"class":109},"reduce",[69,85931,3620],{"class":86},[69,85933,85934],{"class":6458},"prev",[69,85936,13677],{"class":86},[69,85938,81016],{"class":6458},[69,85940,14955],{"class":86},[69,85942,85943],{"class":82},"=>",[69,85945,85946],{"class":86}," prev ",[69,85948,1869],{"class":82},[69,85950,85951],{"class":86}," (item.price ",[69,85953,1843],{"class":82},[69,85955,6996],{"class":90},[69,85957,7760],{"class":82},[69,85959,85960],{"class":86}," item.count) ",[69,85962,1972],{"class":82},[69,85964,6996],{"class":90},[69,85966,13677],{"class":86},[69,85968,1583],{"class":90},[69,85970,1404],{"class":86},[69,85972,85973,85975,85977,85979,85982,85984,85986,85989,85991,85993,85995],{"class":71,"line":34491},[69,85974,53635],{"class":86},[69,85976,55626],{"class":109},[69,85978,1398],{"class":86},[69,85980,85981],{"class":1022},"'.amount'",[69,85983,75470],{"class":86},[69,85985,1019],{"class":82},[69,85987,85988],{"class":86}," total.",[69,85990,85797],{"class":109},[69,85992,1398],{"class":86},[69,85994,1471],{"class":90},[69,85996,1404],{"class":86},[69,85998,85999,86001,86003],{"class":71,"line":34497},[69,86000,53645],{"class":86},[69,86002,53041],{"class":348},[69,86004,1026],{"class":86},[69,86006,86007,86009,86011],{"class":71,"line":34507},[69,86008,1036],{"class":86},[69,86010,680],{"class":348},[69,86012,1026],{"class":86},[69,86014,86015],{"class":71,"line":34512},[69,86016,3644],{"emptyLinePlaceholder":1325},[69,86018,86019,86021,86023],{"class":71,"line":34518},[69,86020,1036],{"class":86},[69,86022,349],{"class":348},[69,86024,1026],{"class":86},[14,86026,86028],{"id":86027},"_411-编程思想","4.11 编程思想",[19,86030,86032],{"id":86031},"_4111-面向过程介绍","4.11.1 面向过程介绍",[29,86034,86035,86038],{},[195,86036,86037],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[29,86040,86041],{},"调用就可以了",[29,86043,86044],{},[24,86045],{"alt":64,"src":86046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[19,86048,86050],{"id":86049},"_4112-面向对象","4.11.2 面向对象",[29,86052,86053],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[29,86055,86056],{},[24,86057],{"alt":64,"src":86058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[29,86060,86061],{},"面向对象的特性：",[162,86063,86064,86067,86070],{},[40,86065,86066],{},"封装性",[40,86068,86069],{},"继承性",[40,86071,86072],{},"多态性",[19,86074,86076],{"id":86075},"_4113-两者比较","4.11.3 两者比较",[29,86078,86079],{},[24,86080],{"alt":64,"src":86081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86083,86085],{"id":86084},"_412-构造函数回顾","4.12 构造函数回顾",[29,86087,86088],{},[24,86089],{"alt":64,"src":86090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[29,86092,86093],{},[24,86094],{"alt":64,"src":86095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[29,86097,86098],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[29,86100,86101],{},[24,86102],{"alt":64,"src":86103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86105,86107],{"id":86106},"_413-原型","4.13 原型",[19,86109,86111],{"id":86110},"_4131-原型对象的认识","4.13.1 原型对象的认识",[29,86113,86114],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[29,86116,86117],{},[24,86118],{"alt":64,"src":86119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[29,86121,86122],{},[24,86123],{"alt":64,"src":86124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[29,86126,86127],{},"原型是构造函数的属性，它也是一个对象",[29,86129,86130],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[29,86132,86133],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[59,86135,86137],{"className":54295,"code":86136,"language":54297,"meta":64,"style":64},"\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",[66,86138,86139,86147,86152,86160,86165,86170,86175,86180,86185,86189,86193,86197,86202,86207,86211,86216,86221,86226,86231,86236,86240,86248],{"__ignoreMap":64},[69,86140,86141,86143,86145],{"class":71,"line":72},[69,86142,1011],{"class":86},[69,86144,680],{"class":348},[69,86146,1026],{"class":86},[69,86148,86149],{"class":71,"line":79},[69,86150,86151],{"class":75},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[69,86153,86154,86156,86158],{"class":71,"line":106},[69,86155,53372],{"class":86},[69,86157,53041],{"class":348},[69,86159,1026],{"class":86},[69,86161,86162],{"class":71,"line":116},[69,86163,86164],{"class":86},"    function Star(uname, age) {\n",[69,86166,86167],{"class":71,"line":133},[69,86168,86169],{"class":86},"      this.uname = uname,\n",[69,86171,86172],{"class":71,"line":139},[69,86173,86174],{"class":86},"        this.age = age\n",[69,86176,86177],{"class":71,"line":401},[69,86178,86179],{"class":86},"      \u002F\u002F this.sing = function () {\n",[69,86181,86182],{"class":71,"line":470},[69,86183,86184],{"class":86},"      \u002F\u002F   console.log('唱歌')\n",[69,86186,86187],{"class":71,"line":475},[69,86188,3644],{"emptyLinePlaceholder":1325},[69,86190,86191],{"class":71,"line":482},[69,86192,61263],{"class":86},[69,86194,86195],{"class":71,"line":497},[69,86196,3431],{"class":86},[69,86198,86199],{"class":71,"line":502},[69,86200,86201],{"class":86},"    Star.prototype.sing = function () {\n",[69,86203,86204],{"class":71,"line":509},[69,86205,86206],{"class":86},"      console.log('唱歌')\n",[69,86208,86209],{"class":71,"line":524},[69,86210,3431],{"class":86},[69,86212,86213],{"class":71,"line":2888},[69,86214,86215],{"class":86},"    \u002F\u002F console.dir(Star.prototype)\n",[69,86217,86218],{"class":71,"line":2893},[69,86219,86220],{"class":86},"    const pink = new Star('pink', 18)\n",[69,86222,86223],{"class":71,"line":2899},[69,86224,86225],{"class":86},"    const red = new Star('red', 20)\n",[69,86227,86228],{"class":71,"line":2919},[69,86229,86230],{"class":86},"    pink.sing()\n",[69,86232,86233],{"class":71,"line":2924},[69,86234,86235],{"class":86},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[69,86237,86238],{"class":71,"line":2938},[69,86239,3644],{"emptyLinePlaceholder":1325},[69,86241,86242,86244,86246],{"class":71,"line":2943},[69,86243,53645],{"class":86},[69,86245,53041],{"class":348},[69,86247,1026],{"class":86},[69,86249,86250,86252,86254],{"class":71,"line":2972},[69,86251,1036],{"class":86},[69,86253,680],{"class":348},[69,86255,1026],{"class":86},[29,86257,86258],{},[24,86259],{"alt":64,"src":86260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[59,86262,86264],{"className":54295,"code":86263,"language":54297,"meta":64,"style":64},"\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",[66,86265,86266,86274,86282,86287,86292,86297,86302,86306,86311,86316,86321,86325,86330,86334,86338,86343,86347,86355],{"__ignoreMap":64},[69,86267,86268,86270,86272],{"class":71,"line":72},[69,86269,1011],{"class":86},[69,86271,680],{"class":348},[69,86273,1026],{"class":86},[69,86275,86276,86278,86280],{"class":71,"line":79},[69,86277,53372],{"class":86},[69,86279,53041],{"class":348},[69,86281,1026],{"class":86},[69,86283,86284],{"class":71,"line":106},[69,86285,86286],{"class":86},"    let that\n",[69,86288,86289],{"class":71,"line":116},[69,86290,86291],{"class":86},"    function Star(uname) {\n",[69,86293,86294],{"class":71,"line":133},[69,86295,86296],{"class":86},"      this.uname = uname\n",[69,86298,86299],{"class":71,"line":139},[69,86300,86301],{"class":86},"      that = this\n",[69,86303,86304],{"class":71,"line":401},[69,86305,3431],{"class":86},[69,86307,86308],{"class":71,"line":470},[69,86309,86310],{"class":86},"    \u002F\u002F 实例对象是 ldh\n",[69,86312,86313],{"class":71,"line":475},[69,86314,86315],{"class":86},"    const ldh = new Star('刘德华')\n",[69,86317,86318],{"class":71,"line":482},[69,86319,86320],{"class":86},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[69,86322,86323],{"class":71,"line":497},[69,86324,3644],{"emptyLinePlaceholder":1325},[69,86326,86327],{"class":71,"line":502},[69,86328,86329],{"class":86},"    Star.sing = function () {\n",[69,86331,86332],{"class":71,"line":509},[69,86333,86206],{"class":86},[69,86335,86336],{"class":71,"line":524},[69,86337,3431],{"class":86},[69,86339,86340],{"class":71,"line":2888},[69,86341,86342],{"class":86},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[69,86344,86345],{"class":71,"line":2893},[69,86346,3644],{"emptyLinePlaceholder":1325},[69,86348,86349,86351,86353],{"class":71,"line":2899},[69,86350,53645],{"class":86},[69,86352,53041],{"class":348},[69,86354,1026],{"class":86},[69,86356,86357,86359,86361],{"class":71,"line":2919},[69,86358,1036],{"class":86},[69,86360,680],{"class":348},[69,86362,1026],{"class":86},[29,86364,86365],{},"构造函数的this指向的是实例对象；",[29,86367,86368],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[19,86370,86372],{"id":86371},"_4132-数组扩展方法","4.13.2 数组扩展方法",[29,86374,86375],{},[24,86376],{"alt":64,"src":86377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[59,86379,86381],{"className":54295,"code":86380,"language":54297,"meta":64,"style":64},"\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",[66,86382,86383,86391,86399,86404,86409,86414,86419,86424,86429,86434,86439,86444,86449,86453,86458,86463,86468,86473,86477,86482,86487,86492,86497,86501,86506,86511,86516,86521,86525,86530,86534,86542],{"__ignoreMap":64},[69,86384,86385,86387,86389],{"class":71,"line":72},[69,86386,1011],{"class":86},[69,86388,680],{"class":348},[69,86390,1026],{"class":86},[69,86392,86393,86395,86397],{"class":71,"line":79},[69,86394,53372],{"class":86},[69,86396,53041],{"class":348},[69,86398,1026],{"class":86},[69,86400,86401],{"class":71,"line":106},[69,86402,86403],{"class":86},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[69,86405,86406],{"class":71,"line":116},[69,86407,86408],{"class":86},"    const arr = [1, 2, 3]\n",[69,86410,86411],{"class":71,"line":133},[69,86412,86413],{"class":86},"    \u002F\u002F 自己定义数组的扩展方法\n",[69,86415,86416],{"class":71,"line":139},[69,86417,86418],{"class":86},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[69,86420,86421],{"class":71,"line":401},[69,86422,86423],{"class":86},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[69,86425,86426],{"class":71,"line":470},[69,86427,86428],{"class":86},"    \u002F\u002F ①.最大值\n",[69,86430,86431],{"class":71,"line":475},[69,86432,86433],{"class":86},"    Array.prototype.max = function () {\n",[69,86435,86436],{"class":71,"line":482},[69,86437,86438],{"class":86},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[69,86440,86441],{"class":71,"line":497},[69,86442,86443],{"class":86},"      return Math.max(...this)\n",[69,86445,86446],{"class":71,"line":502},[69,86447,86448],{"class":86},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[69,86450,86451],{"class":71,"line":509},[69,86452,3431],{"class":86},[69,86454,86455],{"class":71,"line":524},[69,86456,86457],{"class":86},"    console.log(arr.max())\n",[69,86459,86460],{"class":71,"line":2888},[69,86461,86462],{"class":86},"    \u002F\u002F ②最小值\n",[69,86464,86465],{"class":71,"line":2893},[69,86466,86467],{"class":86},"    Array.prototype.min = function () {\n",[69,86469,86470],{"class":71,"line":2899},[69,86471,86472],{"class":86},"      return Math.min(...this)\n",[69,86474,86475],{"class":71,"line":2919},[69,86476,3431],{"class":86},[69,86478,86479],{"class":71,"line":2924},[69,86480,86481],{"class":86},"    console.log(arr.min())\n",[69,86483,86484],{"class":71,"line":2938},[69,86485,86486],{"class":86},"    \u002F\u002F③求和\n",[69,86488,86489],{"class":71,"line":2943},[69,86490,86491],{"class":86},"    Array.prototype.sum = function () {\n",[69,86493,86494],{"class":71,"line":2972},[69,86495,86496],{"class":86},"      return this.reduce((prev, current) => prev + current, 0)\n",[69,86498,86499],{"class":71,"line":2977},[69,86500,3431],{"class":86},[69,86502,86503],{"class":71,"line":2994},[69,86504,86505],{"class":86},"    console.log(arr.sum())\n",[69,86507,86508],{"class":71,"line":2999},[69,86509,86510],{"class":86},"    \u002F\u002F ③排序\n",[69,86512,86513],{"class":71,"line":3004},[69,86514,86515],{"class":86},"    Array.prototype.rever = function () {\n",[69,86517,86518],{"class":71,"line":3009},[69,86519,86520],{"class":86},"      return this.reverse()\n",[69,86522,86523],{"class":71,"line":3023},[69,86524,3431],{"class":86},[69,86526,86527],{"class":71,"line":3028},[69,86528,86529],{"class":86},"    console.log(arr.rever())\n",[69,86531,86532],{"class":71,"line":3821},[69,86533,3644],{"emptyLinePlaceholder":1325},[69,86535,86536,86538,86540],{"class":71,"line":3835},[69,86537,53645],{"class":86},[69,86539,53041],{"class":348},[69,86541,1026],{"class":86},[69,86543,86544,86546,86548],{"class":71,"line":3843},[69,86545,1036],{"class":86},[69,86547,680],{"class":348},[69,86549,1026],{"class":86},[29,86551,86552],{},[24,86553],{"alt":64,"src":86554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[19,86556,86558],{"id":86557},"_4133-constructor-属性","4.13.3 constructor 属性",[29,86560,86561],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[29,86563,86564],{},[24,86565],{"alt":64,"src":86566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[59,86568,86570],{"className":54295,"code":86569,"language":54297,"meta":64,"style":64},"\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",[66,86571,86572,86580,86588,86593,86598,86602,86607,86612,86617,86625],{"__ignoreMap":64},[69,86573,86574,86576,86578],{"class":71,"line":72},[69,86575,1011],{"class":86},[69,86577,680],{"class":348},[69,86579,1026],{"class":86},[69,86581,86582,86584,86586],{"class":71,"line":79},[69,86583,53372],{"class":86},[69,86585,53041],{"class":348},[69,86587,1026],{"class":86},[69,86589,86590],{"class":71,"line":106},[69,86591,86592],{"class":86},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[69,86594,86595],{"class":71,"line":116},[69,86596,86597],{"class":86},"    function Star() {\n",[69,86599,86600],{"class":71,"line":133},[69,86601,3431],{"class":86},[69,86603,86604],{"class":71,"line":139},[69,86605,86606],{"class":86},"    const ldh = new Star()\n",[69,86608,86609],{"class":71,"line":401},[69,86610,86611],{"class":86},"    console.log(Star.prototype)\n",[69,86613,86614],{"class":71,"line":470},[69,86615,86616],{"class":86},"    console.log(Star.prototype.constructor === Star)\n",[69,86618,86619,86621,86623],{"class":71,"line":475},[69,86620,53645],{"class":86},[69,86622,53041],{"class":348},[69,86624,1026],{"class":86},[69,86626,86627,86629,86631],{"class":71,"line":482},[69,86628,1036],{"class":86},[69,86630,680],{"class":348},[69,86632,1026],{"class":86},[29,86634,86635],{},[24,86636],{"alt":64,"src":86637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[29,86639,86640],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[59,86642,86644],{"className":54295,"code":86643,"language":54297,"meta":64,"style":64},"  \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",[66,86645,86646,86654,86658,86662,86666,86671,86676,86681,86685,86690,86695,86700,86705,86710,86715,86719,86723,86728,86733,86738,86742,86747,86752,86756,86760,86764],{"__ignoreMap":64},[69,86647,86648,86650,86652],{"class":71,"line":72},[69,86649,53372],{"class":86},[69,86651,53041],{"class":348},[69,86653,1026],{"class":86},[69,86655,86656],{"class":71,"line":79},[69,86657,86592],{"class":86},[69,86659,86660],{"class":71,"line":106},[69,86661,86597],{"class":86},[69,86663,86664],{"class":71,"line":116},[69,86665,3431],{"class":86},[69,86667,86668],{"class":71,"line":133},[69,86669,86670],{"class":86},"    \u002F\u002F const ldh = new Star()\n",[69,86672,86673],{"class":71,"line":139},[69,86674,86675],{"class":86},"    \u002F\u002F console.log(Star.prototype)\n",[69,86677,86678],{"class":71,"line":401},[69,86679,86680],{"class":86},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[69,86682,86683],{"class":71,"line":470},[69,86684,3644],{"emptyLinePlaceholder":1325},[69,86686,86687],{"class":71,"line":475},[69,86688,86689],{"class":86},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[69,86691,86692],{"class":71,"line":482},[69,86693,86694],{"class":86},"    \u002F\u002F Star.prototype.sing = function () {\n",[69,86696,86697],{"class":71,"line":497},[69,86698,86699],{"class":86},"    \u002F\u002F   console.log('唱歌')\n",[69,86701,86702],{"class":71,"line":502},[69,86703,86704],{"class":86},"    \u002F\u002F }\n",[69,86706,86707],{"class":71,"line":509},[69,86708,86709],{"class":86},"    \u002F\u002F Star.prototype.dance = function () {\n",[69,86711,86712],{"class":71,"line":524},[69,86713,86714],{"class":86},"    \u002F\u002F   console.log('跳舞')\n",[69,86716,86717],{"class":71,"line":2888},[69,86718,86704],{"class":86},[69,86720,86721],{"class":71,"line":2893},[69,86722,86611],{"class":86},[69,86724,86725],{"class":71,"line":2899},[69,86726,86727],{"class":86},"    Star.prototype = {\n",[69,86729,86730],{"class":71,"line":2919},[69,86731,86732],{"class":86},"      sing: function () {\n",[69,86734,86735],{"class":71,"line":2924},[69,86736,86737],{"class":86},"        console.log('唱歌')\n",[69,86739,86740],{"class":71,"line":2938},[69,86741,79113],{"class":86},[69,86743,86744],{"class":71,"line":2943},[69,86745,86746],{"class":86},"      dance: function () {\n",[69,86748,86749],{"class":71,"line":2972},[69,86750,86751],{"class":86},"        console.log('跳舞')\n",[69,86753,86754],{"class":71,"line":2977},[69,86755,53626],{"class":86},[69,86757,86758],{"class":71,"line":2994},[69,86759,3431],{"class":86},[69,86761,86762],{"class":71,"line":2999},[69,86763,86611],{"class":86},[69,86765,86766,86768,86770],{"class":71,"line":3004},[69,86767,53645],{"class":86},[69,86769,53041],{"class":348},[69,86771,1026],{"class":86},[29,86773,86774],{},"进行输出结果后会发现：",[29,86776,86777],{},[24,86778],{"alt":64,"src":86779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[29,86781,86782],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[29,86784,86785],{},"所以，要重新指回创造这个原型对象的构造函数",[59,86787,86789],{"className":72434,"code":86788,"language":72436,"meta":64,"style":64},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[66,86790,86791,86805,86810,86815,86826,86839,86844,86855,86869,86873],{"__ignoreMap":64},[69,86792,86793,86796,86798,86801,86803],{"class":71,"line":72},[69,86794,86795],{"class":90},"Star",[69,86797,1946],{"class":86},[69,86799,86800],{"class":90},"prototype",[69,86802,14805],{"class":82},[69,86804,113],{"class":86},[69,86806,86807],{"class":71,"line":79},[69,86808,86809],{"class":75},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[69,86811,86812],{"class":71,"line":106},[69,86813,86814],{"class":86},"  constructor: Star,\n",[69,86816,86817,86820,86822,86824],{"class":71,"line":116},[69,86818,86819],{"class":109},"  sing",[69,86821,94],{"class":86},[69,86823,55676],{"class":82},[69,86825,55679],{"class":86},[69,86827,86828,86830,86832,86834,86837],{"class":71,"line":133},[69,86829,74974],{"class":86},[69,86831,59473],{"class":109},[69,86833,1398],{"class":86},[69,86835,86836],{"class":1022},"'唱歌'",[69,86838,1404],{"class":86},[69,86840,86841],{"class":71,"line":139},[69,86842,86843],{"class":86},"   },\n",[69,86845,86846,86849,86851,86853],{"class":71,"line":401},[69,86847,86848],{"class":109},"   dance",[69,86850,94],{"class":86},[69,86852,55676],{"class":82},[69,86854,55679],{"class":86},[69,86856,86857,86860,86862,86864,86867],{"class":71,"line":470},[69,86858,86859],{"class":86},"     console.",[69,86861,59473],{"class":109},[69,86863,1398],{"class":86},[69,86865,86866],{"class":1022},"'跳舞'",[69,86868,1404],{"class":86},[69,86870,86871],{"class":71,"line":475},[69,86872,5553],{"class":86},[69,86874,86875],{"class":71,"line":482},[69,86876,142],{"class":86},[29,86878,86879],{},[24,86880],{"alt":64,"src":86881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[29,86883,86884],{},"总结1：",[29,86886,86887],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[29,86889,86890],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[29,86892,86893],{},"constructor指的是他的来源",[29,86895,86896],{},[24,86897],{"alt":64,"src":86898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[29,86900,86901],{},[24,86902],{"alt":64,"src":86903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[29,86905,86906],{},"总结2：",[29,86908,86909],{},[24,86910],{"alt":64,"src":86911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[29,86913,86914],{},[24,86915],{"alt":64,"src":86916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[29,86918,86919],{},[24,86920],{"alt":64,"src":86921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[19,86923,86925],{"id":86924},"_4134-对象原型","4.13.4 对象原型",[29,86927,86928],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[29,86930,86931],{},"对象原型就是__proto__这个属性",[29,86933,86934],{},[24,86935],{"alt":64,"src":86936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[29,86938,86939],{},[24,86940],{"alt":64,"src":86941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[29,86943,86944],{},[24,86945],{"alt":64,"src":86946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[29,86948,86949],{},[24,86950],{"alt":64,"src":86951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[59,86953,86955],{"className":54295,"code":86954,"language":54297,"meta":64,"style":64},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[66,86956,86957,86965,86973,86977,86981,86985,86990,86998],{"__ignoreMap":64},[69,86958,86959,86961,86963],{"class":71,"line":72},[69,86960,1011],{"class":86},[69,86962,680],{"class":348},[69,86964,1026],{"class":86},[69,86966,86967,86969,86971],{"class":71,"line":79},[69,86968,53372],{"class":86},[69,86970,53041],{"class":348},[69,86972,1026],{"class":86},[69,86974,86975],{"class":71,"line":106},[69,86976,86597],{"class":86},[69,86978,86979],{"class":71,"line":116},[69,86980,3431],{"class":86},[69,86982,86983],{"class":71,"line":133},[69,86984,86606],{"class":86},[69,86986,86987],{"class":71,"line":139},[69,86988,86989],{"class":86},"    console.log(ldh)\n",[69,86991,86992,86994,86996],{"class":71,"line":401},[69,86993,53645],{"class":86},[69,86995,53041],{"class":348},[69,86997,1026],{"class":86},[69,86999,87000,87002,87004],{"class":71,"line":470},[69,87001,1036],{"class":86},[69,87003,680],{"class":348},[69,87005,1026],{"class":86},[29,87007,87008],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[29,87010,87011],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[29,87013,87014],{},[24,87015],{"alt":64,"src":87016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[29,87018,87019],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[29,87021,87022],{},"对象原型指向原型对象",[29,87024,87025],{},[24,87026],{"alt":64,"src":87027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[29,87029,87030],{},[24,87031],{"alt":64,"src":87032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[29,87034,87035],{},[24,87036],{"alt":64,"src":87037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[19,87039,87041],{"id":87040},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[29,87043,87044],{},[24,87045],{"alt":64,"src":87046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[37,87048,87049,87052,87055,87058],{},[40,87050,87051],{},"构造函数通过new的形式实例化得到实例对象",[40,87053,87054],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[40,87056,87057],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[40,87059,87060],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[29,87062,87063],{},[24,87064],{"alt":64,"src":87065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[29,87067,87068],{},"题目梳理：",[29,87070,87071],{},[24,87072],{"alt":64,"src":87073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[19,87075,87077],{"id":87076},"_4136-原型继承","4.13.6 原型继承",[29,87079,87080],{},[24,87081],{"alt":64,"src":87082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[29,87084,87085],{},[24,87086],{"alt":64,"src":87087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[29,87089,87090],{},[24,87091],{"alt":64,"src":87092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[29,87094,87095],{},[24,87096],{"alt":64,"src":87097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[29,87099,87100],{},[24,87101],{"alt":64,"src":87102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[29,87104,87105],{},[24,87106],{"alt":64,"src":87107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[29,87109,87110],{},[24,87111],{"alt":64,"src":87112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[29,87114,87115],{},[24,87116],{"alt":64,"src":87117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[29,87119,87120],{},"回顾：构造函数每次new得到对象都是不同的",[19,87122,87124],{"id":87123},"_4137-原型链","4.13.7 原型链",[29,87126,87127],{},[24,87128],{"alt":64,"src":87129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[29,87131,87132],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[29,87134,87135],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[29,87137,87138],{},"大哥是Object",[29,87140,87141],{},[24,87142],{"alt":64,"src":87143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[29,87145,87146],{},[24,87147],{"alt":64,"src":87148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[29,87150,87151],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[29,87153,87154],{},"万物皆对象",[19,87156,87158],{"id":87157},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[29,87160,87161],{},"模态框",[29,87163,87164],{},"以后遇见这个效果直接使用这个就行",[29,87166,87167],{},[24,87168],{"alt":64,"src":87169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[29,87171,87172],{},[24,87173],{"alt":64,"src":87174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[29,87176,87177],{},[24,87178],{"alt":64,"src":87179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[29,87181,87182],{},[24,87183],{"alt":64,"src":87184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[29,87186,87187],{},"补充知识点：",[37,87189,87190],{},[40,87191,87192],{},"append()",[29,87194,87195],{},[24,87196],{"alt":64,"src":87197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[59,87199,87201],{"className":51869,"code":87200,"language":349,"meta":64,"style":64},"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",[66,87202,87203,87208,87213,87218,87222,87226,87230,87235,87240,87245,87249],{"__ignoreMap":64},[69,87204,87205],{"class":71,"line":72},[69,87206,87207],{"class":86},"append(param1)\n",[69,87209,87210],{"class":71,"line":79},[69,87211,87212],{"class":86},"append(param1, param2)\n",[69,87214,87215],{"class":71,"line":106},[69,87216,87217],{"class":86},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[69,87219,87220],{"class":71,"line":116},[69,87221,3644],{"emptyLinePlaceholder":1325},[69,87223,87224],{"class":71,"line":133},[69,87225,3644],{"emptyLinePlaceholder":1325},[69,87227,87228],{"class":71,"line":139},[69,87229,3644],{"emptyLinePlaceholder":1325},[69,87231,87232],{"class":71,"line":401},[69,87233,87234],{"class":86},"let div = document.createElement(\"div\");\n",[69,87236,87237],{"class":71,"line":470},[69,87238,87239],{"class":86},"let p = document.createElement(\"p\");\n",[69,87241,87242],{"class":71,"line":475},[69,87243,87244],{"class":86},"div.append(p);\n",[69,87246,87247],{"class":71,"line":482},[69,87248,3644],{"emptyLinePlaceholder":1325},[69,87250,87251,87254,87256],{"class":71,"line":497},[69,87252,87253],{"class":86},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[69,87255,29],{"class":348},[69,87257,87258],{"class":86},"> ]\n",[37,87260,87261],{"start":79},[40,87262,87263],{},"remove()",[29,87265,87266],{},"自己删自己",[29,87268,87269],{},[24,87270],{"alt":64,"src":87271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[59,87273,87275],{"className":51869,"code":87274,"language":349,"meta":64,"style":64},"\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",[66,87276,87277,87287,87301,87305,87313,87327,87347,87359,87367,87374,87386,87399,87434,87446,87457,87469,87481,87493,87520,87530,87534,87538,87547,87559,87573,87583,87595,87599,87603,87613,87624,87634,87644,87657,87670,87680,87684,87688,87697,87707,87719,87723,87727,87736,87746,87756,87768,87772,87776,87786,87802,87813,87823,87833,87845,87857,87869,87873,87877,87890,87901,87905,87913,87921,87925,87933,87953,87973,87981,87986,88012,88017,88022,88041,88046,88058,88063,88074,88084,88094,88099,88104,88108,88113,88118,88123,88143,88148,88168,88173,88187,88192,88197,88202,88218,88222,88227,88256,88261,88266,88271,88282,88286,88290,88294,88299,88324,88329,88354,88359,88368,88372,88377,88402,88406,88431,88435,88444,88448,88453,88471,88481,88485,88493,88501,88505],{"__ignoreMap":64},[69,87278,87279,87281,87283,87285],{"class":71,"line":72},[69,87280,52532],{"class":86},[69,87282,52535],{"class":348},[69,87284,52538],{"class":109},[69,87286,1026],{"class":86},[69,87288,87289,87291,87293,87295,87297,87299],{"class":71,"line":79},[69,87290,1011],{"class":86},[69,87292,349],{"class":348},[69,87294,52549],{"class":109},[69,87296,1019],{"class":86},[69,87298,52554],{"class":1022},[69,87300,1026],{"class":86},[69,87302,87303],{"class":71,"line":106},[69,87304,3644],{"emptyLinePlaceholder":1325},[69,87306,87307,87309,87311],{"class":71,"line":116},[69,87308,1011],{"class":86},[69,87310,52567],{"class":348},[69,87312,1026],{"class":86},[69,87314,87315,87317,87319,87321,87323,87325],{"class":71,"line":133},[69,87316,53372],{"class":86},[69,87318,52577],{"class":348},[69,87320,52580],{"class":109},[69,87322,1019],{"class":86},[69,87324,52585],{"class":1022},[69,87326,1026],{"class":86},[69,87328,87329,87331,87333,87335,87337,87339,87341,87343,87345],{"class":71,"line":139},[69,87330,53372],{"class":86},[69,87332,52577],{"class":348},[69,87334,16160],{"class":109},[69,87336,1019],{"class":86},[69,87338,52624],{"class":1022},[69,87340,52604],{"class":109},[69,87342,1019],{"class":86},[69,87344,52631],{"class":1022},[69,87346,1026],{"class":86},[69,87348,87349,87351,87353,87355,87357],{"class":71,"line":401},[69,87350,53372],{"class":86},[69,87352,52640],{"class":348},[69,87354,52643],{"class":86},[69,87356,52640],{"class":348},[69,87358,1026],{"class":86},[69,87360,87361,87363,87365],{"class":71,"line":470},[69,87362,53372],{"class":86},[69,87364,1297],{"class":348},[69,87366,1026],{"class":86},[69,87368,87369,87372],{"class":71,"line":475},[69,87370,87371],{"class":109},"    .modal",[69,87373,113],{"class":86},[69,87375,87376,87378,87380,87382,87384],{"class":71,"line":482},[69,87377,55998],{"class":90},[69,87379,94],{"class":86},[69,87381,5217],{"class":90},[69,87383,100],{"class":82},[69,87385,130],{"class":86},[69,87387,87388,87391,87393,87395,87397],{"class":71,"line":497},[69,87389,87390],{"class":90},"      min-height",[69,87392,94],{"class":86},[69,87394,124],{"class":90},[69,87396,100],{"class":82},[69,87398,130],{"class":86},[69,87400,87401,87403,87405,87407,87409,87411,87413,87415,87417,87419,87421,87423,87425,87427,87429,87432],{"class":71,"line":502},[69,87402,79971],{"class":90},[69,87404,94],{"class":86},[69,87406,1583],{"class":90},[69,87408,5337],{"class":90},[69,87410,3282],{"class":90},[69,87412,100],{"class":82},[69,87414,79988],{"class":90},[69,87416,1398],{"class":86},[69,87418,1583],{"class":90},[69,87420,13677],{"class":86},[69,87422,1583],{"class":90},[69,87424,13677],{"class":86},[69,87426,1583],{"class":90},[69,87428,13677],{"class":86},[69,87430,87431],{"class":90},"0.1",[69,87433,3963],{"class":86},[69,87435,87436,87438,87440,87442,87444],{"class":71,"line":509},[69,87437,56361],{"class":90},[69,87439,94],{"class":86},[69,87441,1684],{"class":90},[69,87443,100],{"class":82},[69,87445,130],{"class":86},[69,87447,87448,87450,87452,87455],{"class":71,"line":524},[69,87449,55986],{"class":90},[69,87451,94],{"class":86},[69,87453,87454],{"class":90},"fixed",[69,87456,130],{"class":86},[69,87458,87459,87462,87464,87467],{"class":71,"line":2888},[69,87460,87461],{"class":90},"      z-index",[69,87463,94],{"class":86},[69,87465,87466],{"class":90},"999",[69,87468,130],{"class":86},[69,87470,87471,87473,87475,87477,87479],{"class":71,"line":2893},[69,87472,56065],{"class":90},[69,87474,94],{"class":86},[69,87476,2043],{"class":90},[69,87478,127],{"class":82},[69,87480,130],{"class":86},[69,87482,87483,87485,87487,87489,87491],{"class":71,"line":2899},[69,87484,56174],{"class":90},[69,87486,94],{"class":86},[69,87488,2043],{"class":90},[69,87490,127],{"class":82},[69,87492,130],{"class":86},[69,87494,87495,87497,87499,87501,87503,87506,87508,87510,87512,87514,87516,87518],{"class":71,"line":2919},[69,87496,80012],{"class":90},[69,87498,94],{"class":86},[69,87500,80017],{"class":90},[69,87502,1398],{"class":86},[69,87504,87505],{"class":90},"-50",[69,87507,127],{"class":82},[69,87509,13677],{"class":86},[69,87511,87505],{"class":90},[69,87513,127],{"class":82},[69,87515,13677],{"class":86},[69,87517,1583],{"class":90},[69,87519,3963],{"class":86},[69,87521,87522,87524,87526,87528],{"class":71,"line":2924},[69,87523,56111],{"class":90},[69,87525,94],{"class":86},[69,87527,62068],{"class":90},[69,87529,130],{"class":86},[69,87531,87532],{"class":71,"line":2938},[69,87533,3431],{"class":86},[69,87535,87536],{"class":71,"line":2943},[69,87537,3644],{"emptyLinePlaceholder":1325},[69,87539,87540,87542,87545],{"class":71,"line":2972},[69,87541,87371],{"class":109},[69,87543,87544],{"class":109}," .header",[69,87546,113],{"class":86},[69,87548,87549,87551,87553,87555,87557],{"class":71,"line":2977},[69,87550,58586],{"class":90},[69,87552,94],{"class":86},[69,87554,1790],{"class":90},[69,87556,100],{"class":82},[69,87558,130],{"class":86},[69,87560,87561,87563,87565,87567,87569,87571],{"class":71,"line":2994},[69,87562,55922],{"class":90},[69,87564,94],{"class":86},[69,87566,1583],{"class":90},[69,87568,3282],{"class":90},[69,87570,100],{"class":82},[69,87572,130],{"class":86},[69,87574,87575,87577,87579,87581],{"class":71,"line":2999},[69,87576,55986],{"class":90},[69,87578,94],{"class":86},[69,87580,55991],{"class":90},[69,87582,130],{"class":86},[69,87584,87585,87587,87589,87591,87593],{"class":71,"line":3004},[69,87586,56149],{"class":90},[69,87588,94],{"class":86},[69,87590,2087],{"class":90},[69,87592,100],{"class":82},[69,87594,130],{"class":86},[69,87596,87597],{"class":71,"line":3009},[69,87598,3431],{"class":86},[69,87600,87601],{"class":71,"line":3023},[69,87602,3644],{"emptyLinePlaceholder":1325},[69,87604,87605,87607,87609,87611],{"class":71,"line":3028},[69,87606,87371],{"class":109},[69,87608,87544],{"class":109},[69,87610,4276],{"class":348},[69,87612,113],{"class":86},[69,87614,87615,87618,87620,87622],{"class":71,"line":3821},[69,87616,87617],{"class":90},"      font-style",[69,87619,94],{"class":86},[69,87621,65067],{"class":90},[69,87623,130],{"class":86},[69,87625,87626,87628,87630,87632],{"class":71,"line":3835},[69,87627,58643],{"class":90},[69,87629,94],{"class":86},[69,87631,63296],{"class":90},[69,87633,130],{"class":86},[69,87635,87636,87638,87640,87642],{"class":71,"line":3843},[69,87637,55986],{"class":90},[69,87639,94],{"class":86},[69,87641,56058],{"class":90},[69,87643,130],{"class":86},[69,87645,87646,87649,87651,87653,87655],{"class":71,"line":3848},[69,87647,87648],{"class":90},"      right",[69,87650,94],{"class":86},[69,87652,1963],{"class":90},[69,87654,100],{"class":82},[69,87656,130],{"class":86},[69,87658,87659,87661,87663,87666,87668],{"class":71,"line":3854},[69,87660,56174],{"class":90},[69,87662,94],{"class":86},[69,87664,87665],{"class":90},"-2",[69,87667,100],{"class":82},[69,87669,130],{"class":86},[69,87671,87672,87674,87676,87678],{"class":71,"line":3860},[69,87673,63251],{"class":90},[69,87675,94],{"class":86},[69,87677,63256],{"class":90},[69,87679,130],{"class":86},[69,87681,87682],{"class":71,"line":3865},[69,87683,3431],{"class":86},[69,87685,87686],{"class":71,"line":9190},[69,87687,3644],{"emptyLinePlaceholder":1325},[69,87689,87690,87692,87695],{"class":71,"line":9214},[69,87691,87371],{"class":109},[69,87693,87694],{"class":109}," .body",[69,87696,113],{"class":86},[69,87698,87699,87701,87703,87705],{"class":71,"line":9219},[69,87700,58513],{"class":90},[69,87702,94],{"class":86},[69,87704,52823],{"class":90},[69,87706,130],{"class":86},[69,87708,87709,87711,87713,87715,87717],{"class":71,"line":9225},[69,87710,55922],{"class":90},[69,87712,94],{"class":86},[69,87714,390],{"class":90},[69,87716,100],{"class":82},[69,87718,130],{"class":86},[69,87720,87721],{"class":71,"line":9252},[69,87722,3431],{"class":86},[69,87724,87725],{"class":71,"line":9257},[69,87726,3644],{"emptyLinePlaceholder":1325},[69,87728,87729,87731,87734],{"class":71,"line":9263},[69,87730,87371],{"class":109},[69,87732,87733],{"class":109}," .footer",[69,87735,113],{"class":86},[69,87737,87738,87740,87742,87744],{"class":71,"line":9275},[69,87739,56236],{"class":90},[69,87741,94],{"class":86},[69,87743,52709],{"class":90},[69,87745,130],{"class":86},[69,87747,87748,87750,87752,87754],{"class":71,"line":9287},[69,87749,56247],{"class":90},[69,87751,94],{"class":86},[69,87753,52811],{"class":90},[69,87755,130],{"class":86},[69,87757,87758,87760,87762,87764,87766],{"class":71,"line":9299},[69,87759,55922],{"class":90},[69,87761,94],{"class":86},[69,87763,390],{"class":90},[69,87765,100],{"class":82},[69,87767,130],{"class":86},[69,87769,87770],{"class":71,"line":10958},[69,87771,3431],{"class":86},[69,87773,87774],{"class":71,"line":10983},[69,87775,3644],{"emptyLinePlaceholder":1325},[69,87777,87778,87780,87782,87784],{"class":71,"line":11006},[69,87779,87371],{"class":109},[69,87781,87733],{"class":109},[69,87783,2650],{"class":348},[69,87785,113],{"class":86},[69,87787,87788,87790,87792,87794,87796,87798,87800],{"class":71,"line":11030},[69,87789,55922],{"class":90},[69,87791,94],{"class":86},[69,87793,1465],{"class":90},[69,87795,100],{"class":82},[69,87797,3327],{"class":90},[69,87799,100],{"class":82},[69,87801,130],{"class":86},[69,87803,87804,87806,87808,87811],{"class":71,"line":11035},[69,87805,62947],{"class":90},[69,87807,94],{"class":86},[69,87809,87810],{"class":90},"#ccc",[69,87812,130],{"class":86},[69,87814,87815,87817,87819,87821],{"class":71,"line":11040},[69,87816,65196],{"class":90},[69,87818,94],{"class":86},[69,87820,55964],{"class":90},[69,87822,130],{"class":86},[69,87824,87825,87827,87829,87831],{"class":71,"line":11045},[69,87826,58643],{"class":90},[69,87828,94],{"class":86},[69,87830,62068],{"class":90},[69,87832,130],{"class":86},[69,87834,87835,87837,87839,87841,87843],{"class":71,"line":11054},[69,87836,56361],{"class":90},[69,87838,94],{"class":86},[69,87840,1471],{"class":90},[69,87842,100],{"class":82},[69,87844,130],{"class":86},[69,87846,87847,87849,87851,87853,87855],{"class":71,"line":11059},[69,87848,62976],{"class":90},[69,87850,94],{"class":86},[69,87852,390],{"class":90},[69,87854,100],{"class":82},[69,87856,130],{"class":86},[69,87858,87859,87861,87863,87865,87867],{"class":71,"line":11065},[69,87860,56149],{"class":90},[69,87862,94],{"class":86},[69,87864,1937],{"class":90},[69,87866,100],{"class":82},[69,87868,130],{"class":86},[69,87870,87871],{"class":71,"line":11086},[69,87872,3431],{"class":86},[69,87874,87875],{"class":71,"line":11092},[69,87876,3644],{"emptyLinePlaceholder":1325},[69,87878,87879,87881,87883,87885,87888],{"class":71,"line":11106},[69,87880,87371],{"class":109},[69,87882,87733],{"class":109},[69,87884,2650],{"class":348},[69,87886,87887],{"class":109},".submit",[69,87889,113],{"class":86},[69,87891,87892,87894,87896,87899],{"class":71,"line":11112},[69,87893,56111],{"class":90},[69,87895,94],{"class":86},[69,87897,87898],{"class":90},"#369",[69,87900,130],{"class":86},[69,87902,87903],{"class":71,"line":11139},[69,87904,3431],{"class":86},[69,87906,87907,87909,87911],{"class":71,"line":11148},[69,87908,53645],{"class":86},[69,87910,1297],{"class":348},[69,87912,1026],{"class":86},[69,87914,87915,87917,87919],{"class":71,"line":11154},[69,87916,1036],{"class":86},[69,87918,52567],{"class":348},[69,87920,1026],{"class":86},[69,87922,87923],{"class":71,"line":11162},[69,87924,3644],{"emptyLinePlaceholder":1325},[69,87926,87927,87929,87931],{"class":71,"line":11167},[69,87928,1011],{"class":86},[69,87930,680],{"class":348},[69,87932,1026],{"class":86},[69,87934,87935,87937,87939,87941,87943,87946,87949,87951],{"class":71,"line":17843},[69,87936,53372],{"class":86},[69,87938,55114],{"class":348},[69,87940,16199],{"class":109},[69,87942,1019],{"class":86},[69,87944,87945],{"class":1022},"\"delete\"",[69,87947,87948],{"class":86},">删除\u003C\u002F",[69,87950,55114],{"class":348},[69,87952,1026],{"class":86},[69,87954,87955,87957,87959,87961,87963,87966,87969,87971],{"class":71,"line":17849},[69,87956,53372],{"class":86},[69,87958,55114],{"class":348},[69,87960,16199],{"class":109},[69,87962,1019],{"class":86},[69,87964,87965],{"class":1022},"\"login\"",[69,87967,87968],{"class":86},">登录\u003C\u002F",[69,87970,55114],{"class":348},[69,87972,1026],{"class":86},[69,87974,87975,87977,87979],{"class":71,"line":17872},[69,87976,53372],{"class":86},[69,87978,53041],{"class":348},[69,87980,1026],{"class":86},[69,87982,87983],{"class":71,"line":17878},[69,87984,87985],{"class":75},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[69,87987,87988,87990,87993,87995,87997,87999,88001,88003,88006,88008,88010],{"class":71,"line":17901},[69,87989,71309],{"class":82},[69,87991,87992],{"class":109}," Modal",[69,87994,1398],{"class":86},[69,87996,52640],{"class":6458},[69,87998,14805],{"class":82},[69,88000,71155],{"class":1022},[69,88002,13677],{"class":86},[69,88004,88005],{"class":6458},"message",[69,88007,14805],{"class":82},[69,88009,71155],{"class":1022},[69,88011,103],{"class":86},[69,88013,88014],{"class":71,"line":17915},[69,88015,88016],{"class":75},"      \u002F\u002F 创建Model 模态框盒子\n",[69,88018,88019],{"class":71,"line":17935},[69,88020,88021],{"class":75},"      \u002F\u002F 1.1 创建div标签\n",[69,88023,88024,88026,88029,88031,88033,88035,88037,88039],{"class":71,"line":17941},[69,88025,71276],{"class":90},[69,88027,88028],{"class":86},".modalBox ",[69,88030,1019],{"class":82},[69,88032,55623],{"class":86},[69,88034,71376],{"class":109},[69,88036,1398],{"class":86},[69,88038,83152],{"class":1022},[69,88040,1404],{"class":86},[69,88042,88043],{"class":71,"line":17952},[69,88044,88045],{"class":75},"      \u002F\u002F 1.2 给div 添加类名为model\n",[69,88047,88048,88050,88053,88055],{"class":71,"line":17975},[69,88049,71276],{"class":90},[69,88051,88052],{"class":86},".modalBox.className ",[69,88054,1019],{"class":82},[69,88056,88057],{"class":1022}," 'modal'\n",[69,88059,88060],{"class":71,"line":17997},[69,88061,88062],{"class":75},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[69,88064,88065,88067,88070,88072],{"class":71,"line":18002},[69,88066,71276],{"class":90},[69,88068,88069],{"class":86},".modalBox.innerHTML ",[69,88071,1019],{"class":82},[69,88073,71393],{"class":1022},[69,88075,88076,88079,88081],{"class":71,"line":18008},[69,88077,88078],{"class":1022},"        \u003Cdiv class=\"header\">${",[69,88080,52640],{"class":86},[69,88082,88083],{"class":1022},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[69,88085,88086,88089,88091],{"class":71,"line":18022},[69,88087,88088],{"class":1022},"        \u003Cdiv class=\"body\">${",[69,88090,88005],{"class":86},[69,88092,88093],{"class":1022},"}\u003C\u002Fdiv>\n",[69,88095,88096],{"class":71,"line":18035},[69,88097,88098],{"class":1022},"      `\n",[69,88100,88101],{"class":71,"line":18040},[69,88102,88103],{"class":75},"      \u002F\u002F console.log(this.modalBox)\n",[69,88105,88106],{"class":71,"line":18054},[69,88107,3431],{"class":86},[69,88109,88110],{"class":71,"line":18059},[69,88111,88112],{"class":75},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[69,88114,88115],{"class":71,"line":18065},[69,88116,88117],{"class":75},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[69,88119,88120],{"class":71,"line":18070},[69,88121,88122],{"class":75},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[69,88124,88125,88128,88130,88132,88134,88137,88139,88141],{"class":71,"line":18084},[69,88126,88127],{"class":90},"    Modal",[69,88129,1946],{"class":86},[69,88131,86800],{"class":90},[69,88133,1946],{"class":86},[69,88135,88136],{"class":109},"open",[69,88138,14805],{"class":82},[69,88140,60144],{"class":82},[69,88142,55679],{"class":86},[69,88144,88145],{"class":71,"line":18089},[69,88146,88147],{"class":75},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[69,88149,88150,88152,88155,88157,88159,88161,88163,88166],{"class":71,"line":18094},[69,88151,59454],{"class":82},[69,88153,88154],{"class":90}," box",[69,88156,14805],{"class":82},[69,88158,55623],{"class":86},[69,88160,55626],{"class":109},[69,88162,1398],{"class":86},[69,88164,88165],{"class":1022},"'.modal'",[69,88167,1404],{"class":86},[69,88169,88170],{"class":71,"line":18108},[69,88171,88172],{"class":75},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[69,88174,88175,88178,88180,88183,88185],{"class":71,"line":18120},[69,88176,88177],{"class":86},"      box ",[69,88179,2960],{"class":82},[69,88181,88182],{"class":86}," box.",[69,88184,58233],{"class":109},[69,88186,3220],{"class":86},[69,88188,88189],{"class":71,"line":18125},[69,88190,88191],{"class":75},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[69,88193,88194],{"class":71,"line":18138},[69,88195,88196],{"class":75},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[69,88198,88199],{"class":71,"line":18143},[69,88200,88201],{"class":75},"      \u002F\u002F append可以增加对象\n",[69,88203,88204,88207,88210,88212,88215],{"class":71,"line":18148},[69,88205,88206],{"class":86},"      document.body.",[69,88208,88209],{"class":109},"append",[69,88211,1398],{"class":86},[69,88213,88214],{"class":90},"this",[69,88216,88217],{"class":86},".modalBox)\n",[69,88219,88220],{"class":71,"line":18153},[69,88221,3644],{"emptyLinePlaceholder":1325},[69,88223,88224],{"class":71,"line":18166},[69,88225,88226],{"class":75},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[69,88228,88229,88231,88234,88236,88238,88241,88243,88245,88247,88249,88252,88254],{"class":71,"line":18171},[69,88230,71276],{"class":90},[69,88232,88233],{"class":86},".modalBox.",[69,88235,55626],{"class":109},[69,88237,1398],{"class":86},[69,88239,88240],{"class":1022},"'i'",[69,88242,32062],{"class":86},[69,88244,59039],{"class":109},[69,88246,1398],{"class":86},[69,88248,59044],{"class":1022},[69,88250,88251],{"class":86},", () ",[69,88253,85943],{"class":82},[69,88255,113],{"class":86},[69,88257,88258],{"class":71,"line":33869},[69,88259,88260],{"class":75},"        \u002F\u002F 这个地方需要用到箭头函数\n",[69,88262,88263],{"class":71,"line":33875},[69,88264,88265],{"class":75},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[69,88267,88268],{"class":71,"line":33881},[69,88269,88270],{"class":75},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[69,88272,88273,88275,88277,88280],{"class":71,"line":33887},[69,88274,65952],{"class":90},[69,88276,1946],{"class":86},[69,88278,88279],{"class":109},"close",[69,88281,3220],{"class":86},[69,88283,88284],{"class":71,"line":33893},[69,88285,66041],{"class":86},[69,88287,88288],{"class":71,"line":33904},[69,88289,3431],{"class":86},[69,88291,88292],{"class":71,"line":33910},[69,88293,3644],{"emptyLinePlaceholder":1325},[69,88295,88296],{"class":71,"line":33930},[69,88297,88298],{"class":75},"    \u002F\u002F 测试一下 点击 删除按钮\n",[69,88300,88301,88303,88305,88307,88310,88312,88314,88316,88318,88320,88322],{"class":71,"line":33936},[69,88302,53635],{"class":86},[69,88304,55626],{"class":109},[69,88306,1398],{"class":86},[69,88308,88309],{"class":1022},"'#delete'",[69,88311,32062],{"class":86},[69,88313,59039],{"class":109},[69,88315,1398],{"class":86},[69,88317,59044],{"class":1022},[69,88319,88251],{"class":86},[69,88321,85943],{"class":82},[69,88323,113],{"class":86},[69,88325,88326],{"class":71,"line":33947},[69,88327,88328],{"class":75},"      \u002F\u002F 先调用Model构造函数\n",[69,88330,88331,88333,88336,88338,88340,88342,88344,88347,88349,88352],{"class":71,"line":33953},[69,88332,59454],{"class":82},[69,88334,88335],{"class":90}," del",[69,88337,14805],{"class":82},[69,88339,12820],{"class":82},[69,88341,87992],{"class":109},[69,88343,1398],{"class":86},[69,88345,88346],{"class":1022},"'温馨的提示'",[69,88348,13677],{"class":86},[69,88350,88351],{"class":1022},"'您没有删除权限操作'",[69,88353,1404],{"class":86},[69,88355,88356],{"class":71,"line":33959},[69,88357,88358],{"class":75},"      \u002F\u002F 实例对象调用open方法\n",[69,88360,88361,88364,88366],{"class":71,"line":33965},[69,88362,88363],{"class":86},"      del.",[69,88365,88136],{"class":109},[69,88367,3220],{"class":86},[69,88369,88370],{"class":71,"line":33971},[69,88371,34697],{"class":86},[69,88373,88374],{"class":71,"line":33977},[69,88375,88376],{"class":75},"    \u002F\u002F 测试一下 点击 登录按钮\n",[69,88378,88379,88381,88383,88385,88388,88390,88392,88394,88396,88398,88400],{"class":71,"line":33983},[69,88380,53635],{"class":86},[69,88382,55626],{"class":109},[69,88384,1398],{"class":86},[69,88386,88387],{"class":1022},"'#login'",[69,88389,32062],{"class":86},[69,88391,59039],{"class":109},[69,88393,1398],{"class":86},[69,88395,59044],{"class":1022},[69,88397,88251],{"class":86},[69,88399,85943],{"class":82},[69,88401,113],{"class":86},[69,88403,88404],{"class":71,"line":33989},[69,88405,88328],{"class":75},[69,88407,88408,88410,88413,88415,88417,88419,88421,88424,88426,88429],{"class":71,"line":34009},[69,88409,59454],{"class":82},[69,88411,88412],{"class":90}," log",[69,88414,14805],{"class":82},[69,88416,12820],{"class":82},[69,88418,87992],{"class":109},[69,88420,1398],{"class":86},[69,88422,88423],{"class":1022},"'友情提示'",[69,88425,13677],{"class":86},[69,88427,88428],{"class":1022},"'您还没有登录呢'",[69,88430,1404],{"class":86},[69,88432,88433],{"class":71,"line":34015},[69,88434,88358],{"class":75},[69,88436,88437,88440,88442],{"class":71,"line":34031},[69,88438,88439],{"class":86},"      log.",[69,88441,88136],{"class":109},[69,88443,3220],{"class":86},[69,88445,88446],{"class":71,"line":34037},[69,88447,34697],{"class":86},[69,88449,88450],{"class":71,"line":34051},[69,88451,88452],{"class":75},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[69,88454,88455,88457,88459,88461,88463,88465,88467,88469],{"class":71,"line":34057},[69,88456,88127],{"class":90},[69,88458,1946],{"class":86},[69,88460,86800],{"class":90},[69,88462,1946],{"class":86},[69,88464,88279],{"class":109},[69,88466,14805],{"class":82},[69,88468,60144],{"class":82},[69,88470,55679],{"class":86},[69,88472,88473,88475,88477,88479],{"class":71,"line":34072},[69,88474,71276],{"class":90},[69,88476,88233],{"class":86},[69,88478,58233],{"class":109},[69,88480,3220],{"class":86},[69,88482,88483],{"class":71,"line":34078},[69,88484,3431],{"class":86},[69,88486,88487,88489,88491],{"class":71,"line":34087},[69,88488,53645],{"class":86},[69,88490,53041],{"class":348},[69,88492,1026],{"class":86},[69,88494,88495,88497,88499],{"class":71,"line":34093},[69,88496,1036],{"class":86},[69,88498,680],{"class":348},[69,88500,1026],{"class":86},[69,88502,88503],{"class":71,"line":34102},[69,88504,3644],{"emptyLinePlaceholder":1325},[69,88506,88507,88509,88511],{"class":71,"line":34108},[69,88508,1036],{"class":86},[69,88510,349],{"class":348},[69,88512,1026],{"class":86},[29,88514,88515],{},[24,88516],{"alt":64,"src":88517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88519,88521],{"id":88520},"_414-深浅拷贝","4.14 深浅拷贝",[19,88523,88525],{"id":88524},"_4141-浅拷贝","4.14.1 浅拷贝",[29,88527,88528],{},[24,88529],{"alt":64,"src":88530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[29,88532,88533],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[29,88535,88536],{},[24,88537],{"alt":64,"src":88538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[29,88540,88541],{},[24,88542],{"alt":64,"src":88543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[29,88545,88546],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[29,88548,88549],{},[24,88550],{"alt":64,"src":88551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[29,88553,12574],{},[29,88555,88556],{},[24,88557],{"alt":64,"src":88558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[19,88560,88562],{"id":88561},"_4142-深拷贝","4.14.2 深拷贝",[29,88564,88565],{},"深拷贝：拷贝的是对象，不是地址",[29,88567,88568],{},"常用的三种方法：",[37,88570,88571,88574,88577],{},[40,88572,88573],{},"通过递归实现深拷贝",[40,88575,88576],{},"lodash\u002FcloneDeep",[40,88578,88579],{},"通过JSON.stringify()实现",[23237,88581,88583],{"id":88582},"_41421-递归函数","4.14.2.1 递归函数",[29,88585,88586],{},[24,88587],{"alt":64,"src":88588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[37,88590,88591],{},[40,88592,88593],{},"死递归占溢出：",[59,88595,88597],{"className":54295,"code":88596,"language":54297,"meta":64,"style":64},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[66,88598,88599,88607,88615,88619,88624,88628,88633,88641],{"__ignoreMap":64},[69,88600,88601,88603,88605],{"class":71,"line":72},[69,88602,1011],{"class":86},[69,88604,680],{"class":348},[69,88606,1026],{"class":86},[69,88608,88609,88611,88613],{"class":71,"line":79},[69,88610,53372],{"class":86},[69,88612,53041],{"class":348},[69,88614,1026],{"class":86},[69,88616,88617],{"class":71,"line":106},[69,88618,78364],{"class":86},[69,88620,88621],{"class":71,"line":116},[69,88622,88623],{"class":86},"      fn()\n",[69,88625,88626],{"class":71,"line":133},[69,88627,3431],{"class":86},[69,88629,88630],{"class":71,"line":139},[69,88631,88632],{"class":86},"    fn()\n",[69,88634,88635,88637,88639],{"class":71,"line":401},[69,88636,53645],{"class":86},[69,88638,53041],{"class":348},[69,88640,1026],{"class":86},[69,88642,88643,88645,88647],{"class":71,"line":470},[69,88644,1036],{"class":86},[69,88646,680],{"class":348},[69,88648,1026],{"class":86},[37,88650,88651],{"start":79},[40,88652,88653],{},"递归函数要加判断条件：",[29,88655,88656],{},[24,88657],{"alt":64,"src":88658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[37,88660,88661],{"start":106},[40,88662,88663],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[59,88665,88667],{"className":51869,"code":88666,"language":349,"meta":64,"style":64},"\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",[66,88668,88669,88679,88693,88697,88705,88719,88739,88751,88759,88763,88771,88783,88791,88799,88824,88836,88840,88847,88855,88863,88867],{"__ignoreMap":64},[69,88670,88671,88673,88675,88677],{"class":71,"line":72},[69,88672,52532],{"class":86},[69,88674,52535],{"class":348},[69,88676,52538],{"class":109},[69,88678,1026],{"class":86},[69,88680,88681,88683,88685,88687,88689,88691],{"class":71,"line":79},[69,88682,1011],{"class":86},[69,88684,349],{"class":348},[69,88686,52549],{"class":109},[69,88688,1019],{"class":86},[69,88690,52554],{"class":1022},[69,88692,1026],{"class":86},[69,88694,88695],{"class":71,"line":106},[69,88696,3644],{"emptyLinePlaceholder":1325},[69,88698,88699,88701,88703],{"class":71,"line":116},[69,88700,1011],{"class":86},[69,88702,52567],{"class":348},[69,88704,1026],{"class":86},[69,88706,88707,88709,88711,88713,88715,88717],{"class":71,"line":133},[69,88708,53372],{"class":86},[69,88710,52577],{"class":348},[69,88712,52580],{"class":109},[69,88714,1019],{"class":86},[69,88716,52585],{"class":1022},[69,88718,1026],{"class":86},[69,88720,88721,88723,88725,88727,88729,88731,88733,88735,88737],{"class":71,"line":139},[69,88722,53372],{"class":86},[69,88724,52577],{"class":348},[69,88726,16160],{"class":109},[69,88728,1019],{"class":86},[69,88730,52624],{"class":1022},[69,88732,52604],{"class":109},[69,88734,1019],{"class":86},[69,88736,52631],{"class":1022},[69,88738,1026],{"class":86},[69,88740,88741,88743,88745,88747,88749],{"class":71,"line":401},[69,88742,53372],{"class":86},[69,88744,52640],{"class":348},[69,88746,52643],{"class":86},[69,88748,52640],{"class":348},[69,88750,1026],{"class":86},[69,88752,88753,88755,88757],{"class":71,"line":470},[69,88754,1036],{"class":86},[69,88756,52567],{"class":348},[69,88758,1026],{"class":86},[69,88760,88761],{"class":71,"line":475},[69,88762,3644],{"emptyLinePlaceholder":1325},[69,88764,88765,88767,88769],{"class":71,"line":482},[69,88766,1011],{"class":86},[69,88768,680],{"class":348},[69,88770,1026],{"class":86},[69,88772,88773,88775,88777,88779,88781],{"class":71,"line":497},[69,88774,53372],{"class":86},[69,88776,442],{"class":348},[69,88778,56541],{"class":86},[69,88780,442],{"class":348},[69,88782,1026],{"class":86},[69,88784,88785,88787,88789],{"class":71,"line":502},[69,88786,53372],{"class":86},[69,88788,53041],{"class":348},[69,88790,1026],{"class":86},[69,88792,88793,88795,88797],{"class":71,"line":509},[69,88794,71309],{"class":82},[69,88796,74994],{"class":109},[69,88798,12095],{"class":86},[69,88800,88801,88803,88805,88807,88809,88811,88813,88815,88817,88819,88822],{"class":71,"line":524},[69,88802,56998],{"class":86},[69,88804,55626],{"class":109},[69,88806,1398],{"class":86},[69,88808,83152],{"class":1022},[69,88810,75470],{"class":86},[69,88812,1019],{"class":82},[69,88814,12820],{"class":82},[69,88816,75010],{"class":109},[69,88818,18500],{"class":86},[69,88820,88821],{"class":109},"toLocaleString",[69,88823,3220],{"class":86},[69,88825,88826,88829,88832,88834],{"class":71,"line":2888},[69,88827,88828],{"class":109},"      setTimeout",[69,88830,88831],{"class":86},"(getTime, ",[69,88833,7652],{"class":90},[69,88835,1404],{"class":86},[69,88837,88838],{"class":71,"line":2893},[69,88839,3431],{"class":86},[69,88841,88842,88845],{"class":71,"line":2899},[69,88843,88844],{"class":109},"    getTime",[69,88846,3220],{"class":86},[69,88848,88849,88851,88853],{"class":71,"line":2919},[69,88850,53645],{"class":86},[69,88852,53041],{"class":348},[69,88854,1026],{"class":86},[69,88856,88857,88859,88861],{"class":71,"line":2924},[69,88858,1036],{"class":86},[69,88860,680],{"class":348},[69,88862,1026],{"class":86},[69,88864,88865],{"class":71,"line":2938},[69,88866,3644],{"emptyLinePlaceholder":1325},[69,88868,88869,88871,88873],{"class":71,"line":2943},[69,88870,1036],{"class":86},[69,88872,349],{"class":348},[69,88874,1026],{"class":86},[29,88876,88877],{},[24,88878],{"alt":64,"src":88879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[37,88881,88882],{"start":116},[40,88883,88573],{},[29,88885,88886],{},[24,88887],{"alt":64,"src":88888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[29,88890,88891],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[29,88893,40425],{},[29,88895,88896],{},"这个是简易版的递归函数深拷贝",[29,88898,88899],{},"一定要注意先数组再对象，因为万物皆可对象",[59,88901,88903],{"className":51869,"code":88902,"language":349,"meta":64,"style":64},"\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",[66,88904,88905,88915,88929,88933,88941,88955,88975,88987,88995,88999,89007,89015,89025,89034,89042,89058,89062,89070,89074,89078,89090,89095,89114,89130,89135,89140,89145,89160,89165,89170,89179,89187,89204,89212,89218,89226,89231,89236,89245,89249,89253,89257,89268,89277,89287,89301,89311,89319,89327,89335,89339],{"__ignoreMap":64},[69,88906,88907,88909,88911,88913],{"class":71,"line":72},[69,88908,52532],{"class":86},[69,88910,52535],{"class":348},[69,88912,52538],{"class":109},[69,88914,1026],{"class":86},[69,88916,88917,88919,88921,88923,88925,88927],{"class":71,"line":79},[69,88918,1011],{"class":86},[69,88920,349],{"class":348},[69,88922,52549],{"class":109},[69,88924,1019],{"class":86},[69,88926,52554],{"class":1022},[69,88928,1026],{"class":86},[69,88930,88931],{"class":71,"line":106},[69,88932,3644],{"emptyLinePlaceholder":1325},[69,88934,88935,88937,88939],{"class":71,"line":116},[69,88936,1011],{"class":86},[69,88938,52567],{"class":348},[69,88940,1026],{"class":86},[69,88942,88943,88945,88947,88949,88951,88953],{"class":71,"line":133},[69,88944,53372],{"class":86},[69,88946,52577],{"class":348},[69,88948,52580],{"class":109},[69,88950,1019],{"class":86},[69,88952,52585],{"class":1022},[69,88954,1026],{"class":86},[69,88956,88957,88959,88961,88963,88965,88967,88969,88971,88973],{"class":71,"line":139},[69,88958,53372],{"class":86},[69,88960,52577],{"class":348},[69,88962,16160],{"class":109},[69,88964,1019],{"class":86},[69,88966,52624],{"class":1022},[69,88968,52604],{"class":109},[69,88970,1019],{"class":86},[69,88972,52631],{"class":1022},[69,88974,1026],{"class":86},[69,88976,88977,88979,88981,88983,88985],{"class":71,"line":401},[69,88978,53372],{"class":86},[69,88980,52640],{"class":348},[69,88982,52643],{"class":86},[69,88984,52640],{"class":348},[69,88986,1026],{"class":86},[69,88988,88989,88991,88993],{"class":71,"line":470},[69,88990,1036],{"class":86},[69,88992,52567],{"class":348},[69,88994,1026],{"class":86},[69,88996,88997],{"class":71,"line":475},[69,88998,3644],{"emptyLinePlaceholder":1325},[69,89000,89001,89003,89005],{"class":71,"line":482},[69,89002,1011],{"class":86},[69,89004,680],{"class":348},[69,89006,1026],{"class":86},[69,89008,89009,89011,89013],{"class":71,"line":497},[69,89010,53372],{"class":86},[69,89012,53041],{"class":348},[69,89014,1026],{"class":86},[69,89016,89017,89019,89021,89023],{"class":71,"line":502},[69,89018,12463],{"class":82},[69,89020,71196],{"class":90},[69,89022,14805],{"class":82},[69,89024,113],{"class":86},[69,89026,89027,89029,89032],{"class":71,"line":509},[69,89028,72837],{"class":86},[69,89030,89031],{"class":1022},"'pink'",[69,89033,32702],{"class":86},[69,89035,89036,89038,89040],{"class":71,"line":524},[69,89037,72847],{"class":86},[69,89039,2037],{"class":90},[69,89041,32702],{"class":86},[69,89043,89044,89047,89050,89052,89055],{"class":71,"line":2888},[69,89045,89046],{"class":86},"      hobby: [",[69,89048,89049],{"class":1022},"'乒乓球'",[69,89051,13677],{"class":86},[69,89053,89054],{"class":1022},"'足球'",[69,89056,89057],{"class":86},"],\n",[69,89059,89060],{"class":71,"line":2893},[69,89061,79093],{"class":86},[69,89063,89064,89067],{"class":71,"line":2899},[69,89065,89066],{"class":86},"        baby: ",[69,89068,89069],{"class":1022},"'小pink'\n",[69,89071,89072],{"class":71,"line":2919},[69,89073,53626],{"class":86},[69,89075,89076],{"class":71,"line":2924},[69,89077,3431],{"class":86},[69,89079,89080,89082,89085,89087],{"class":71,"line":2938},[69,89081,12463],{"class":82},[69,89083,89084],{"class":90}," o",[69,89086,14805],{"class":82},[69,89088,89089],{"class":86}," {}\n",[69,89091,89092],{"class":71,"line":2943},[69,89093,89094],{"class":75},"    \u002F\u002F 拷贝函数\n",[69,89096,89097,89099,89102,89104,89107,89109,89112],{"class":71,"line":2972},[69,89098,71309],{"class":82},[69,89100,89101],{"class":109}," deepCopy",[69,89103,1398],{"class":86},[69,89105,89106],{"class":6458},"newObj",[69,89108,13677],{"class":86},[69,89110,89111],{"class":6458},"oldObj",[69,89113,103],{"class":86},[69,89115,89116,89118,89120,89122,89125,89127],{"class":71,"line":2977},[69,89117,53512],{"class":82},[69,89119,87],{"class":86},[69,89121,53075],{"class":82},[69,89123,89124],{"class":86}," k ",[69,89126,27280],{"class":82},[69,89128,89129],{"class":86}," oldObj) {\n",[69,89131,89132],{"class":71,"line":2994},[69,89133,89134],{"class":75},"        \u002F\u002F 处理数组的问题\n",[69,89136,89137],{"class":71,"line":2999},[69,89138,89139],{"class":75},"        \u002F\u002F 判断是否属于数组\n",[69,89141,89142],{"class":71,"line":3004},[69,89143,89144],{"class":75},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[69,89146,89147,89149,89152,89155,89158],{"class":71,"line":3009},[69,89148,3741],{"class":82},[69,89150,89151],{"class":86}," (oldObj[k] ",[69,89153,89154],{"class":82},"instanceof",[69,89156,89157],{"class":109}," Array",[69,89159,103],{"class":86},[69,89161,89162],{"class":71,"line":3023},[69,89163,89164],{"class":75},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[69,89166,89167],{"class":71,"line":3028},[69,89168,89169],{"class":75},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[69,89171,89172,89175,89177],{"class":71,"line":3821},[69,89173,89174],{"class":86},"          newObj[k] ",[69,89176,1019],{"class":82},[69,89178,53066],{"class":86},[69,89180,89181,89184],{"class":71,"line":3835},[69,89182,89183],{"class":109},"          deepCopy",[69,89185,89186],{"class":86},"(newObj[k], oldObj[k])\n",[69,89188,89189,89191,89193,89195,89197,89199,89202],{"class":71,"line":3843},[69,89190,81301],{"class":86},[69,89192,2946],{"class":82},[69,89194,2949],{"class":82},[69,89196,89151],{"class":86},[69,89198,89154],{"class":82},[69,89200,89201],{"class":109}," Object",[69,89203,103],{"class":86},[69,89205,89206,89208,89210],{"class":71,"line":3848},[69,89207,89174],{"class":86},[69,89209,1019],{"class":82},[69,89211,89089],{"class":86},[69,89213,89214,89216],{"class":71,"line":3854},[69,89215,89183],{"class":109},[69,89217,89186],{"class":86},[69,89219,89220,89222,89224],{"class":71,"line":3860},[69,89221,81301],{"class":86},[69,89223,2946],{"class":82},[69,89225,113],{"class":86},[69,89227,89228],{"class":71,"line":3865},[69,89229,89230],{"class":75},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[69,89232,89233],{"class":71,"line":9190},[69,89234,89235],{"class":75},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[69,89237,89238,89240,89242],{"class":71,"line":9214},[69,89239,89174],{"class":86},[69,89241,1019],{"class":82},[69,89243,89244],{"class":86}," oldObj[k]\n",[69,89246,89247],{"class":71,"line":9219},[69,89248,3773],{"class":86},[69,89250,89251],{"class":71,"line":9225},[69,89252,53626],{"class":86},[69,89254,89255],{"class":71,"line":9252},[69,89256,3431],{"class":86},[69,89258,89259,89262,89265],{"class":71,"line":9257},[69,89260,89261],{"class":109},"    deepCopy",[69,89263,89264],{"class":86},"(o, obj) ",[69,89266,89267],{"class":75},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[69,89269,89270,89272,89274],{"class":71,"line":9263},[69,89271,74974],{"class":86},[69,89273,59473],{"class":109},[69,89275,89276],{"class":86},"(o)\n",[69,89278,89279,89282,89284],{"class":71,"line":9275},[69,89280,89281],{"class":86},"    o.age ",[69,89283,1019],{"class":82},[69,89285,89286],{"class":90}," 20\n",[69,89288,89289,89292,89294,89296,89298],{"class":71,"line":9287},[69,89290,89291],{"class":86},"    o.hobby[",[69,89293,1583],{"class":90},[69,89295,5687],{"class":86},[69,89297,1019],{"class":82},[69,89299,89300],{"class":1022}," '篮球'\n",[69,89302,89303,89306,89308],{"class":71,"line":9299},[69,89304,89305],{"class":86},"    o.family ",[69,89307,1019],{"class":82},[69,89309,89310],{"class":1022}," '老pink'\n",[69,89312,89313,89315,89317],{"class":71,"line":10958},[69,89314,74974],{"class":86},[69,89316,59473],{"class":109},[69,89318,71261],{"class":86},[69,89320,89321,89323,89325],{"class":71,"line":10983},[69,89322,53645],{"class":86},[69,89324,53041],{"class":348},[69,89326,1026],{"class":86},[69,89328,89329,89331,89333],{"class":71,"line":11006},[69,89330,1036],{"class":86},[69,89332,680],{"class":348},[69,89334,1026],{"class":86},[69,89336,89337],{"class":71,"line":11030},[69,89338,3644],{"emptyLinePlaceholder":1325},[69,89340,89341,89343,89345],{"class":71,"line":11035},[69,89342,1036],{"class":86},[69,89344,349],{"class":348},[69,89346,1026],{"class":86},[29,89348,89349],{},[24,89350],{"alt":64,"src":89351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23237,89353,89355,89356],{"id":89354},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[195,89357,89358],{},"js库lodash里面cloneDeep内部实现了深拷贝",[29,89360,89361],{},[187,89362,89363],{"href":89363,"rel":89364},"https:\u002F\u002Fwww.lodashjs.com\u002F",[191],[29,89366,89367],{},"lodash里边的方法都要加上一个下划线_",[29,89369,89370],{},"_.cloneDeep()",[59,89372,89374],{"className":51869,"code":89373,"language":349,"meta":64,"style":64},"\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",[66,89375,89376,89386,89400,89404,89412,89426,89446,89458,89466,89470,89478,89483,89502,89510,89520,89528,89536,89548,89552,89558,89562,89566,89582,89590,89599,89607,89615,89623,89627],{"__ignoreMap":64},[69,89377,89378,89380,89382,89384],{"class":71,"line":72},[69,89379,52532],{"class":86},[69,89381,52535],{"class":348},[69,89383,52538],{"class":109},[69,89385,1026],{"class":86},[69,89387,89388,89390,89392,89394,89396,89398],{"class":71,"line":79},[69,89389,1011],{"class":86},[69,89391,349],{"class":348},[69,89393,52549],{"class":109},[69,89395,1019],{"class":86},[69,89397,52554],{"class":1022},[69,89399,1026],{"class":86},[69,89401,89402],{"class":71,"line":106},[69,89403,3644],{"emptyLinePlaceholder":1325},[69,89405,89406,89408,89410],{"class":71,"line":116},[69,89407,1011],{"class":86},[69,89409,52567],{"class":348},[69,89411,1026],{"class":86},[69,89413,89414,89416,89418,89420,89422,89424],{"class":71,"line":133},[69,89415,53372],{"class":86},[69,89417,52577],{"class":348},[69,89419,52580],{"class":109},[69,89421,1019],{"class":86},[69,89423,52585],{"class":1022},[69,89425,1026],{"class":86},[69,89427,89428,89430,89432,89434,89436,89438,89440,89442,89444],{"class":71,"line":139},[69,89429,53372],{"class":86},[69,89431,52577],{"class":348},[69,89433,16160],{"class":109},[69,89435,1019],{"class":86},[69,89437,52624],{"class":1022},[69,89439,52604],{"class":109},[69,89441,1019],{"class":86},[69,89443,52631],{"class":1022},[69,89445,1026],{"class":86},[69,89447,89448,89450,89452,89454,89456],{"class":71,"line":401},[69,89449,53372],{"class":86},[69,89451,52640],{"class":348},[69,89453,52643],{"class":86},[69,89455,52640],{"class":348},[69,89457,1026],{"class":86},[69,89459,89460,89462,89464],{"class":71,"line":470},[69,89461,1036],{"class":86},[69,89463,52567],{"class":348},[69,89465,1026],{"class":86},[69,89467,89468],{"class":71,"line":475},[69,89469,3644],{"emptyLinePlaceholder":1325},[69,89471,89472,89474,89476],{"class":71,"line":482},[69,89473,1011],{"class":86},[69,89475,680],{"class":348},[69,89477,1026],{"class":86},[69,89479,89480],{"class":71,"line":497},[69,89481,89482],{"class":75},"  \u003C!-- 先引用这个库 -->\n",[69,89484,89485,89487,89489,89491,89493,89496,89498,89500],{"class":71,"line":502},[69,89486,53372],{"class":86},[69,89488,53041],{"class":348},[69,89490,56466],{"class":109},[69,89492,1019],{"class":86},[69,89494,89495],{"class":1022},"\"lodash.min.js\"",[69,89497,56541],{"class":86},[69,89499,53041],{"class":348},[69,89501,1026],{"class":86},[69,89503,89504,89506,89508],{"class":71,"line":509},[69,89505,53372],{"class":86},[69,89507,53041],{"class":348},[69,89509,1026],{"class":86},[69,89511,89512,89514,89516,89518],{"class":71,"line":524},[69,89513,12463],{"class":82},[69,89515,71196],{"class":90},[69,89517,14805],{"class":82},[69,89519,113],{"class":86},[69,89521,89522,89524,89526],{"class":71,"line":2888},[69,89523,72837],{"class":86},[69,89525,89031],{"class":1022},[69,89527,32702],{"class":86},[69,89529,89530,89532,89534],{"class":71,"line":2893},[69,89531,72847],{"class":86},[69,89533,2037],{"class":90},[69,89535,32702],{"class":86},[69,89537,89538,89540,89542,89544,89546],{"class":71,"line":2899},[69,89539,89046],{"class":86},[69,89541,89049],{"class":1022},[69,89543,13677],{"class":86},[69,89545,89054],{"class":1022},[69,89547,89057],{"class":86},[69,89549,89550],{"class":71,"line":2919},[69,89551,79093],{"class":86},[69,89553,89554,89556],{"class":71,"line":2924},[69,89555,89066],{"class":86},[69,89557,89069],{"class":1022},[69,89559,89560],{"class":71,"line":2938},[69,89561,53626],{"class":86},[69,89563,89564],{"class":71,"line":2943},[69,89565,3431],{"class":86},[69,89567,89568,89570,89572,89574,89577,89580],{"class":71,"line":2972},[69,89569,12463],{"class":82},[69,89571,89084],{"class":90},[69,89573,14805],{"class":82},[69,89575,89576],{"class":86}," _.",[69,89578,89579],{"class":109},"cloneDeep",[69,89581,71261],{"class":86},[69,89583,89584,89586,89588],{"class":71,"line":2977},[69,89585,74974],{"class":86},[69,89587,59473],{"class":109},[69,89589,89276],{"class":86},[69,89591,89592,89595,89597],{"class":71,"line":2994},[69,89593,89594],{"class":86},"    o.family.baby ",[69,89596,1019],{"class":82},[69,89598,89310],{"class":1022},[69,89600,89601,89603,89605],{"class":71,"line":2999},[69,89602,74974],{"class":86},[69,89604,59473],{"class":109},[69,89606,71261],{"class":86},[69,89608,89609,89611,89613],{"class":71,"line":3004},[69,89610,53645],{"class":86},[69,89612,53041],{"class":348},[69,89614,1026],{"class":86},[69,89616,89617,89619,89621],{"class":71,"line":3009},[69,89618,1036],{"class":86},[69,89620,680],{"class":348},[69,89622,1026],{"class":86},[69,89624,89625],{"class":71,"line":3023},[69,89626,3644],{"emptyLinePlaceholder":1325},[69,89628,89629,89631,89633],{"class":71,"line":3028},[69,89630,1036],{"class":86},[69,89632,349],{"class":348},[69,89634,1026],{"class":86},[29,89636,89637],{},[24,89638],{"alt":64,"src":89639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23237,89641,89643],{"id":89642},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[59,89645,89647],{"className":51869,"code":89646,"language":349,"meta":64,"style":64},"\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",[66,89648,89649,89659,89673,89677,89685,89699,89719,89731,89739,89743,89751,89759,89769,89777,89785,89797,89801,89807,89811,89815,89820,89825,89830,89856,89864,89873,89881,89889,89897,89901],{"__ignoreMap":64},[69,89650,89651,89653,89655,89657],{"class":71,"line":72},[69,89652,52532],{"class":86},[69,89654,52535],{"class":348},[69,89656,52538],{"class":109},[69,89658,1026],{"class":86},[69,89660,89661,89663,89665,89667,89669,89671],{"class":71,"line":79},[69,89662,1011],{"class":86},[69,89664,349],{"class":348},[69,89666,52549],{"class":109},[69,89668,1019],{"class":86},[69,89670,52554],{"class":1022},[69,89672,1026],{"class":86},[69,89674,89675],{"class":71,"line":106},[69,89676,3644],{"emptyLinePlaceholder":1325},[69,89678,89679,89681,89683],{"class":71,"line":116},[69,89680,1011],{"class":86},[69,89682,52567],{"class":348},[69,89684,1026],{"class":86},[69,89686,89687,89689,89691,89693,89695,89697],{"class":71,"line":133},[69,89688,53372],{"class":86},[69,89690,52577],{"class":348},[69,89692,52580],{"class":109},[69,89694,1019],{"class":86},[69,89696,52585],{"class":1022},[69,89698,1026],{"class":86},[69,89700,89701,89703,89705,89707,89709,89711,89713,89715,89717],{"class":71,"line":139},[69,89702,53372],{"class":86},[69,89704,52577],{"class":348},[69,89706,16160],{"class":109},[69,89708,1019],{"class":86},[69,89710,52624],{"class":1022},[69,89712,52604],{"class":109},[69,89714,1019],{"class":86},[69,89716,52631],{"class":1022},[69,89718,1026],{"class":86},[69,89720,89721,89723,89725,89727,89729],{"class":71,"line":401},[69,89722,53372],{"class":86},[69,89724,52640],{"class":348},[69,89726,52643],{"class":86},[69,89728,52640],{"class":348},[69,89730,1026],{"class":86},[69,89732,89733,89735,89737],{"class":71,"line":470},[69,89734,1036],{"class":86},[69,89736,52567],{"class":348},[69,89738,1026],{"class":86},[69,89740,89741],{"class":71,"line":475},[69,89742,3644],{"emptyLinePlaceholder":1325},[69,89744,89745,89747,89749],{"class":71,"line":482},[69,89746,1011],{"class":86},[69,89748,680],{"class":348},[69,89750,1026],{"class":86},[69,89752,89753,89755,89757],{"class":71,"line":497},[69,89754,53372],{"class":86},[69,89756,53041],{"class":348},[69,89758,1026],{"class":86},[69,89760,89761,89763,89765,89767],{"class":71,"line":502},[69,89762,12463],{"class":82},[69,89764,71196],{"class":90},[69,89766,14805],{"class":82},[69,89768,113],{"class":86},[69,89770,89771,89773,89775],{"class":71,"line":509},[69,89772,72837],{"class":86},[69,89774,89031],{"class":1022},[69,89776,32702],{"class":86},[69,89778,89779,89781,89783],{"class":71,"line":524},[69,89780,72847],{"class":86},[69,89782,2037],{"class":90},[69,89784,32702],{"class":86},[69,89786,89787,89789,89791,89793,89795],{"class":71,"line":2888},[69,89788,89046],{"class":86},[69,89790,89049],{"class":1022},[69,89792,13677],{"class":86},[69,89794,89054],{"class":1022},[69,89796,89057],{"class":86},[69,89798,89799],{"class":71,"line":2893},[69,89800,79093],{"class":86},[69,89802,89803,89805],{"class":71,"line":2899},[69,89804,89066],{"class":86},[69,89806,89069],{"class":1022},[69,89808,89809],{"class":71,"line":2919},[69,89810,53626],{"class":86},[69,89812,89813],{"class":71,"line":2924},[69,89814,3431],{"class":86},[69,89816,89817],{"class":71,"line":2938},[69,89818,89819],{"class":75},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[69,89821,89822],{"class":71,"line":2943},[69,89823,89824],{"class":75},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[69,89826,89827],{"class":71,"line":2972},[69,89828,89829],{"class":75},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[69,89831,89832,89834,89836,89838,89841,89843,89846,89848,89850,89852,89854],{"class":71,"line":2977},[69,89833,12463],{"class":82},[69,89835,89084],{"class":90},[69,89837,14805],{"class":82},[69,89839,89840],{"class":90}," JSON",[69,89842,1946],{"class":86},[69,89844,89845],{"class":109},"parse",[69,89847,1398],{"class":86},[69,89849,72885],{"class":90},[69,89851,1946],{"class":86},[69,89853,72890],{"class":109},[69,89855,72893],{"class":86},[69,89857,89858,89860,89862],{"class":71,"line":2994},[69,89859,74974],{"class":86},[69,89861,59473],{"class":109},[69,89863,89276],{"class":86},[69,89865,89866,89868,89870],{"class":71,"line":2999},[69,89867,89594],{"class":86},[69,89869,1019],{"class":82},[69,89871,89872],{"class":1022}," '123'\n",[69,89874,89875,89877,89879],{"class":71,"line":3004},[69,89876,74974],{"class":86},[69,89878,59473],{"class":109},[69,89880,71261],{"class":86},[69,89882,89883,89885,89887],{"class":71,"line":3009},[69,89884,53645],{"class":86},[69,89886,53041],{"class":348},[69,89888,1026],{"class":86},[69,89890,89891,89893,89895],{"class":71,"line":3023},[69,89892,1036],{"class":86},[69,89894,680],{"class":348},[69,89896,1026],{"class":86},[69,89898,89899],{"class":71,"line":3028},[69,89900,3644],{"emptyLinePlaceholder":1325},[69,89902,89903,89905,89907],{"class":71,"line":3821},[69,89904,1036],{"class":86},[69,89906,349],{"class":348},[69,89908,1026],{"class":86},[29,89910,89911],{},[24,89912],{"alt":64,"src":89913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89915,89917],{"id":89916},"_415-异常处理","4.15 异常处理",[37,89919,89920],{},[40,89921,89922],{},"throw抛异常",[29,89924,89925],{},[24,89926],{"alt":64,"src":89927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[37,89929,89930],{"start":79},[40,89931,89932],{},"try\u002Fcatch 捕获错误信息",[29,89934,89935],{},[24,89936],{"alt":64,"src":89937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[59,89939,89941],{"className":51869,"code":89940,"language":349,"meta":64,"style":64},"\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",[66,89942,89943,89953,89967,89971,89979,89993,90013,90025,90033,90037,90045,90057,90065,90074,90081,90086,90105,90114,90125,90130,90140,90145,90150,90155,90172,90176,90181,90188,90200,90204,90216,90220,90224,90229,90234,90241,90249,90257,90261],{"__ignoreMap":64},[69,89944,89945,89947,89949,89951],{"class":71,"line":72},[69,89946,52532],{"class":86},[69,89948,52535],{"class":348},[69,89950,52538],{"class":109},[69,89952,1026],{"class":86},[69,89954,89955,89957,89959,89961,89963,89965],{"class":71,"line":79},[69,89956,1011],{"class":86},[69,89958,349],{"class":348},[69,89960,52549],{"class":109},[69,89962,1019],{"class":86},[69,89964,52554],{"class":1022},[69,89966,1026],{"class":86},[69,89968,89969],{"class":71,"line":106},[69,89970,3644],{"emptyLinePlaceholder":1325},[69,89972,89973,89975,89977],{"class":71,"line":116},[69,89974,1011],{"class":86},[69,89976,52567],{"class":348},[69,89978,1026],{"class":86},[69,89980,89981,89983,89985,89987,89989,89991],{"class":71,"line":133},[69,89982,53372],{"class":86},[69,89984,52577],{"class":348},[69,89986,52580],{"class":109},[69,89988,1019],{"class":86},[69,89990,52585],{"class":1022},[69,89992,1026],{"class":86},[69,89994,89995,89997,89999,90001,90003,90005,90007,90009,90011],{"class":71,"line":139},[69,89996,53372],{"class":86},[69,89998,52577],{"class":348},[69,90000,16160],{"class":109},[69,90002,1019],{"class":86},[69,90004,52624],{"class":1022},[69,90006,52604],{"class":109},[69,90008,1019],{"class":86},[69,90010,52631],{"class":1022},[69,90012,1026],{"class":86},[69,90014,90015,90017,90019,90021,90023],{"class":71,"line":401},[69,90016,53372],{"class":86},[69,90018,52640],{"class":348},[69,90020,52643],{"class":86},[69,90022,52640],{"class":348},[69,90024,1026],{"class":86},[69,90026,90027,90029,90031],{"class":71,"line":470},[69,90028,1036],{"class":86},[69,90030,52567],{"class":348},[69,90032,1026],{"class":86},[69,90034,90035],{"class":71,"line":475},[69,90036,3644],{"emptyLinePlaceholder":1325},[69,90038,90039,90041,90043],{"class":71,"line":482},[69,90040,1011],{"class":86},[69,90042,680],{"class":348},[69,90044,1026],{"class":86},[69,90046,90047,90049,90051,90053,90055],{"class":71,"line":497},[69,90048,53372],{"class":86},[69,90050,29],{"class":348},[69,90052,54721],{"class":86},[69,90054,29],{"class":348},[69,90056,1026],{"class":86},[69,90058,90059,90061,90063],{"class":71,"line":502},[69,90060,53372],{"class":86},[69,90062,53041],{"class":348},[69,90064,1026],{"class":86},[69,90066,90067,90069,90072],{"class":71,"line":509},[69,90068,71309],{"class":82},[69,90070,90071],{"class":109}," fn",[69,90073,12095],{"class":86},[69,90075,90076,90079],{"class":71,"line":524},[69,90077,90078],{"class":82},"      try",[69,90080,113],{"class":86},[69,90082,90083],{"class":71,"line":2888},[69,90084,90085],{"class":75},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[69,90087,90088,90090,90092,90094,90096,90098,90100,90103],{"class":71,"line":2893},[69,90089,62496],{"class":82},[69,90091,8067],{"class":90},[69,90093,14805],{"class":82},[69,90095,55623],{"class":86},[69,90097,55626],{"class":109},[69,90099,1398],{"class":86},[69,90101,90102],{"class":1022},"'.p'",[69,90104,1404],{"class":86},[69,90106,90107,90110,90112],{"class":71,"line":2899},[69,90108,90109],{"class":86},"        p.style.color ",[69,90111,1019],{"class":82},[69,90113,68277],{"class":1022},[69,90115,90116,90119,90122],{"class":71,"line":2919},[69,90117,90118],{"class":86},"      } ",[69,90120,90121],{"class":82},"catch",[69,90123,90124],{"class":86}," (err) {\n",[69,90126,90127],{"class":71,"line":2924},[69,90128,90129],{"class":75},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[69,90131,90132,90135,90137],{"class":71,"line":2938},[69,90133,90134],{"class":86},"        console.",[69,90136,59473],{"class":109},[69,90138,90139],{"class":86},"(err.message)\n",[69,90141,90142],{"class":71,"line":2943},[69,90143,90144],{"class":75},"        \u002F\u002F 想要中断程序，需要加return\n",[69,90146,90147],{"class":71,"line":2972},[69,90148,90149],{"class":75},"        \u002F\u002F return\n",[69,90151,90152],{"class":71,"line":2977},[69,90153,90154],{"class":75},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[69,90156,90157,90160,90162,90165,90167,90170],{"class":71,"line":2994},[69,90158,90159],{"class":82},"        throw",[69,90161,12820],{"class":82},[69,90163,90164],{"class":109}," Error",[69,90166,1398],{"class":86},[69,90168,90169],{"class":1022},"'你看看，选择器错误了吧'",[69,90171,1404],{"class":86},[69,90173,90174],{"class":71,"line":2999},[69,90175,53626],{"class":86},[69,90177,90178],{"class":71,"line":3004},[69,90179,90180],{"class":75},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[69,90182,90183,90186],{"class":71,"line":3009},[69,90184,90185],{"class":82},"      finally",[69,90187,113],{"class":86},[69,90189,90190,90193,90195,90198],{"class":71,"line":3023},[69,90191,90192],{"class":109},"        alert",[69,90194,1398],{"class":86},[69,90196,90197],{"class":1022},"'弹出对话框'",[69,90199,1404],{"class":86},[69,90201,90202],{"class":71,"line":3028},[69,90203,53626],{"class":86},[69,90205,90206,90208,90210,90212,90214],{"class":71,"line":3821},[69,90207,59470],{"class":86},[69,90209,59473],{"class":109},[69,90211,1398],{"class":86},[69,90213,1860],{"class":90},[69,90215,1404],{"class":86},[69,90217,90218],{"class":71,"line":3835},[69,90219,3644],{"emptyLinePlaceholder":1325},[69,90221,90222],{"class":71,"line":3843},[69,90223,3431],{"class":86},[69,90225,90226],{"class":71,"line":3848},[69,90227,90228],{"class":75},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[69,90230,90231],{"class":71,"line":3854},[69,90232,90233],{"class":75},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[69,90235,90236,90239],{"class":71,"line":3860},[69,90237,90238],{"class":109},"    fn",[69,90240,3220],{"class":86},[69,90242,90243,90245,90247],{"class":71,"line":3865},[69,90244,53645],{"class":86},[69,90246,53041],{"class":348},[69,90248,1026],{"class":86},[69,90250,90251,90253,90255],{"class":71,"line":9190},[69,90252,1036],{"class":86},[69,90254,680],{"class":348},[69,90256,1026],{"class":86},[69,90258,90259],{"class":71,"line":9214},[69,90260,3644],{"emptyLinePlaceholder":1325},[69,90262,90263,90265,90267],{"class":71,"line":9219},[69,90264,1036],{"class":86},[69,90266,349],{"class":348},[69,90268,1026],{"class":86},[29,90270,90271],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[37,90273,90274],{"start":106},[40,90275,90276],{},"debugger",[29,90278,90279],{},[24,90280],{"alt":64,"src":90281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[29,90283,90284],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90286,90288],{"id":90287},"_416-处理this","4.16 处理this",[19,90290,90292],{"id":90291},"_4161-this的指向","4.16.1 this的指向",[37,90294,90295],{},[40,90296,90297],{},"普通函数的this",[29,90299,90300],{},[24,90301],{"alt":64,"src":90302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[37,90304,90305],{"start":79},[40,90306,90307],{},"箭头函数的this",[29,90309,90310],{},[24,90311],{"alt":64,"src":90312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[29,90314,90315],{},[24,90316],{"alt":64,"src":90317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[29,90319,90320],{},[24,90321],{"alt":64,"src":90322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[19,90324,90326],{"id":90325},"_4162-this的改变","4.16.2 this的改变",[29,90328,90329],{},"call() apply() bind()",[37,90331,90332],{},[40,90333,90334],{},"call()",[29,90336,90337],{},[24,90338],{"alt":64,"src":90339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[29,90341,90342],{},"两个作用：①调用函数；②改变this指向",[59,90344,90346],{"className":54295,"code":90345,"language":54297,"meta":64,"style":64},"\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",[66,90347,90348,90356,90364,90368,90373,90377,90382,90387,90392,90396,90401,90409],{"__ignoreMap":64},[69,90349,90350,90352,90354],{"class":71,"line":72},[69,90351,1011],{"class":86},[69,90353,680],{"class":348},[69,90355,1026],{"class":86},[69,90357,90358,90360,90362],{"class":71,"line":79},[69,90359,53372],{"class":86},[69,90361,53041],{"class":348},[69,90363,1026],{"class":86},[69,90365,90366],{"class":71,"line":106},[69,90367,72744],{"class":86},[69,90369,90370],{"class":71,"line":116},[69,90371,90372],{"class":86},"      uname: 'pink'\n",[69,90374,90375],{"class":71,"line":133},[69,90376,3431],{"class":86},[69,90378,90379],{"class":71,"line":139},[69,90380,90381],{"class":86},"    function fn(x, y) {\n",[69,90383,90384],{"class":71,"line":401},[69,90385,90386],{"class":86},"      console.log(this)  \u002F\u002Fwindow\n",[69,90388,90389],{"class":71,"line":470},[69,90390,90391],{"class":86},"      console.log(x + y)\n",[69,90393,90394],{"class":71,"line":475},[69,90395,3431],{"class":86},[69,90397,90398],{"class":71,"line":482},[69,90399,90400],{"class":86},"    fn.call(obj, 1, 2)\n",[69,90402,90403,90405,90407],{"class":71,"line":497},[69,90404,53645],{"class":86},[69,90406,53041],{"class":348},[69,90408,1026],{"class":86},[69,90410,90411,90413,90415],{"class":71,"line":502},[69,90412,1036],{"class":86},[69,90414,680],{"class":348},[69,90416,1026],{"class":86},[29,90418,90419],{},[24,90420],{"alt":64,"src":90421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[37,90423,90424],{"start":79},[40,90425,90426],{},"apply()",[29,90428,90429],{},[24,90430],{"alt":64,"src":90431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[29,90433,90342],{},[29,90435,90436],{},"call传递的是普通参数，而apply必须传递的是数组",[59,90438,90440],{"className":51869,"code":90439,"language":349,"meta":64,"style":64},"\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",[66,90441,90442,90452,90466,90470,90478,90492,90512,90524,90532,90536,90544,90552,90562,90569,90573,90578,90594,90606,90620,90624,90629,90648,90653,90657,90662,90667,90675,90680,90702,90707,90723,90739,90751,90755,90760,90779,90787,90795,90799],{"__ignoreMap":64},[69,90443,90444,90446,90448,90450],{"class":71,"line":72},[69,90445,52532],{"class":86},[69,90447,52535],{"class":348},[69,90449,52538],{"class":109},[69,90451,1026],{"class":86},[69,90453,90454,90456,90458,90460,90462,90464],{"class":71,"line":79},[69,90455,1011],{"class":86},[69,90457,349],{"class":348},[69,90459,52549],{"class":109},[69,90461,1019],{"class":86},[69,90463,52554],{"class":1022},[69,90465,1026],{"class":86},[69,90467,90468],{"class":71,"line":106},[69,90469,3644],{"emptyLinePlaceholder":1325},[69,90471,90472,90474,90476],{"class":71,"line":116},[69,90473,1011],{"class":86},[69,90475,52567],{"class":348},[69,90477,1026],{"class":86},[69,90479,90480,90482,90484,90486,90488,90490],{"class":71,"line":133},[69,90481,53372],{"class":86},[69,90483,52577],{"class":348},[69,90485,52580],{"class":109},[69,90487,1019],{"class":86},[69,90489,52585],{"class":1022},[69,90491,1026],{"class":86},[69,90493,90494,90496,90498,90500,90502,90504,90506,90508,90510],{"class":71,"line":139},[69,90495,53372],{"class":86},[69,90497,52577],{"class":348},[69,90499,16160],{"class":109},[69,90501,1019],{"class":86},[69,90503,52624],{"class":1022},[69,90505,52604],{"class":109},[69,90507,1019],{"class":86},[69,90509,52631],{"class":1022},[69,90511,1026],{"class":86},[69,90513,90514,90516,90518,90520,90522],{"class":71,"line":401},[69,90515,53372],{"class":86},[69,90517,52640],{"class":348},[69,90519,52643],{"class":86},[69,90521,52640],{"class":348},[69,90523,1026],{"class":86},[69,90525,90526,90528,90530],{"class":71,"line":470},[69,90527,1036],{"class":86},[69,90529,52567],{"class":348},[69,90531,1026],{"class":86},[69,90533,90534],{"class":71,"line":475},[69,90535,3644],{"emptyLinePlaceholder":1325},[69,90537,90538,90540,90542],{"class":71,"line":482},[69,90539,1011],{"class":86},[69,90541,680],{"class":348},[69,90543,1026],{"class":86},[69,90545,90546,90548,90550],{"class":71,"line":497},[69,90547,53372],{"class":86},[69,90549,53041],{"class":348},[69,90551,1026],{"class":86},[69,90553,90554,90556,90558,90560],{"class":71,"line":502},[69,90555,12463],{"class":82},[69,90557,71196],{"class":90},[69,90559,14805],{"class":82},[69,90561,113],{"class":86},[69,90563,90564,90566],{"class":71,"line":509},[69,90565,72847],{"class":86},[69,90567,90568],{"class":90},"18\n",[69,90570,90571],{"class":71,"line":524},[69,90572,3431],{"class":86},[69,90574,90575],{"class":71,"line":2888},[69,90576,90577],{"class":75},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[69,90579,90580,90582,90584,90586,90588,90590,90592],{"class":71,"line":2893},[69,90581,71309],{"class":82},[69,90583,90071],{"class":109},[69,90585,1398],{"class":86},[69,90587,2207],{"class":6458},[69,90589,13677],{"class":86},[69,90591,2232],{"class":6458},[69,90593,103],{"class":86},[69,90595,90596,90598,90600,90602,90604],{"class":71,"line":2899},[69,90597,59470],{"class":86},[69,90599,59473],{"class":109},[69,90601,1398],{"class":86},[69,90603,88214],{"class":90},[69,90605,1404],{"class":86},[69,90607,90608,90610,90612,90615,90617],{"class":71,"line":2919},[69,90609,59470],{"class":86},[69,90611,59473],{"class":109},[69,90613,90614],{"class":86},"(x ",[69,90616,1869],{"class":82},[69,90618,90619],{"class":86}," y)\n",[69,90621,90622],{"class":71,"line":2924},[69,90623,3431],{"class":86},[69,90625,90626],{"class":71,"line":2938},[69,90627,90628],{"class":75},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[69,90630,90631,90634,90637,90640,90642,90644,90646],{"class":71,"line":2943},[69,90632,90633],{"class":86},"    fn.",[69,90635,90636],{"class":109},"apply",[69,90638,90639],{"class":86},"(obj, [",[69,90641,1609],{"class":90},[69,90643,13677],{"class":86},[69,90645,1471],{"class":90},[69,90647,5901],{"class":86},[69,90649,90650],{"class":71,"line":2972},[69,90651,90652],{"class":75},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[69,90654,90655],{"class":71,"line":2977},[69,90656,3644],{"emptyLinePlaceholder":1325},[69,90658,90659],{"class":71,"line":2994},[69,90660,90661],{"class":75},"    \u002F\u002F 使用场景：求数组最大值\n",[69,90663,90664],{"class":71,"line":2999},[69,90665,90666],{"class":75},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[69,90668,90669,90672],{"class":71,"line":3004},[69,90670,90671],{"class":75},"    \u002F\u002F console.log(max)",[69,90673,90674],{"class":75},"   \u002F\u002F3\n",[69,90676,90677],{"class":71,"line":3009},[69,90678,90679],{"class":75},"    \u002F\u002F 指向空或者Math都是可以的\n",[69,90681,90682,90684,90686,90688,90690,90692,90694,90696,90698,90700],{"class":71,"line":3023},[69,90683,12463],{"class":82},[69,90685,58921],{"class":90},[69,90687,14805],{"class":82},[69,90689,53454],{"class":86},[69,90691,124],{"class":90},[69,90693,13677],{"class":86},[69,90695,1892],{"class":90},[69,90697,13677],{"class":86},[69,90699,1923],{"class":90},[69,90701,34482],{"class":86},[69,90703,90704],{"class":71,"line":3028},[69,90705,90706],{"class":75},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[69,90708,90709,90711,90713,90715,90718,90720],{"class":71,"line":3821},[69,90710,12463],{"class":82},[69,90712,7193],{"class":90},[69,90714,14805],{"class":82},[69,90716,90717],{"class":86}," Math.max.",[69,90719,90636],{"class":109},[69,90721,90722],{"class":86},"(Math, arr)\n",[69,90724,90725,90727,90730,90732,90735,90737],{"class":71,"line":3835},[69,90726,12463],{"class":82},[69,90728,90729],{"class":90}," min",[69,90731,14805],{"class":82},[69,90733,90734],{"class":86}," Math.min.",[69,90736,90636],{"class":109},[69,90738,90722],{"class":86},[69,90740,90741,90743,90745,90748],{"class":71,"line":3843},[69,90742,74974],{"class":86},[69,90744,59473],{"class":109},[69,90746,90747],{"class":86},"(max, min)     ",[69,90749,90750],{"class":75},"\u002F\u002F100,4\n",[69,90752,90753],{"class":71,"line":3848},[69,90754,3644],{"emptyLinePlaceholder":1325},[69,90756,90757],{"class":71,"line":3854},[69,90758,90759],{"class":75},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[69,90761,90762,90764,90766,90769,90771,90773,90776],{"class":71,"line":3860},[69,90763,74974],{"class":86},[69,90765,59473],{"class":109},[69,90767,90768],{"class":86},"(Max.",[69,90770,7257],{"class":109},[69,90772,1398],{"class":86},[69,90774,90775],{"class":82},"...",[69,90777,90778],{"class":86},"arr))\n",[69,90780,90781,90783,90785],{"class":71,"line":3865},[69,90782,53645],{"class":86},[69,90784,53041],{"class":348},[69,90786,1026],{"class":86},[69,90788,90789,90791,90793],{"class":71,"line":9190},[69,90790,1036],{"class":86},[69,90792,680],{"class":348},[69,90794,1026],{"class":86},[69,90796,90797],{"class":71,"line":9214},[69,90798,3644],{"emptyLinePlaceholder":1325},[69,90800,90801,90803,90805],{"class":71,"line":9219},[69,90802,1036],{"class":86},[69,90804,349],{"class":348},[69,90806,1026],{"class":86},[29,90808,90809],{},[24,90810],{"alt":64,"src":90811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[37,90813,90814],{"start":106},[40,90815,90816],{},"bind()",[29,90818,90819],{},[24,90820],{"alt":64,"src":90821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[29,90823,90824],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[29,90826,90827],{},"bind的语法跟call很相似",[59,90829,90831],{"className":54295,"code":90830,"language":54297,"meta":64,"style":64},"\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",[66,90832,90833,90841,90849,90853,90858,90862,90866,90871,90875,90880,90885,90890,90895,90900,90905,90910,90914,90922],{"__ignoreMap":64},[69,90834,90835,90837,90839],{"class":71,"line":72},[69,90836,1011],{"class":86},[69,90838,680],{"class":348},[69,90840,1026],{"class":86},[69,90842,90843,90845,90847],{"class":71,"line":79},[69,90844,53372],{"class":86},[69,90846,53041],{"class":348},[69,90848,1026],{"class":86},[69,90850,90851],{"class":71,"line":106},[69,90852,72744],{"class":86},[69,90854,90855],{"class":71,"line":116},[69,90856,90857],{"class":86},"      age: 18\n",[69,90859,90860],{"class":71,"line":133},[69,90861,3431],{"class":86},[69,90863,90864],{"class":71,"line":139},[69,90865,78364],{"class":86},[69,90867,90868],{"class":71,"line":401},[69,90869,90870],{"class":86},"      console.log(this)\n",[69,90872,90873],{"class":71,"line":470},[69,90874,3431],{"class":86},[69,90876,90877],{"class":71,"line":475},[69,90878,90879],{"class":86},"    \u002F\u002F 1.bind 不会调用函数\n",[69,90881,90882],{"class":71,"line":482},[69,90883,90884],{"class":86},"    \u002F\u002F 2.bind能改变this的指向\n",[69,90886,90887],{"class":71,"line":497},[69,90888,90889],{"class":86},"    fn.bind()\n",[69,90891,90892],{"class":71,"line":502},[69,90893,90894],{"class":86},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[69,90896,90897],{"class":71,"line":509},[69,90898,90899],{"class":86},"    const fun = fn.bind(obj)\n",[69,90901,90902],{"class":71,"line":524},[69,90903,90904],{"class":86},"    \u002F\u002F console.log(fun)\n",[69,90906,90907],{"class":71,"line":2888},[69,90908,90909],{"class":86},"    \u002F\u002F 调用,查看this的指向\n",[69,90911,90912],{"class":71,"line":2893},[69,90913,53879],{"class":86},[69,90915,90916,90918,90920],{"class":71,"line":2899},[69,90917,53645],{"class":86},[69,90919,53041],{"class":348},[69,90921,1026],{"class":86},[69,90923,90924,90926,90928],{"class":71,"line":2919},[69,90925,1036],{"class":86},[69,90927,680],{"class":348},[69,90929,1026],{"class":86},[29,90931,90932],{},[24,90933],{"alt":64,"src":90934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[37,90936,90937],{"start":116},[40,90938,90939],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[59,90941,90943],{"className":54295,"code":90942,"language":54297,"meta":64,"style":64},"\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",[66,90944,90945,90953,90966,90974,90979,90983,90988,90993,90998,91003,91008,91013,91018,91023,91027,91035],{"__ignoreMap":64},[69,90946,90947,90949,90951],{"class":71,"line":72},[69,90948,1011],{"class":86},[69,90950,680],{"class":348},[69,90952,1026],{"class":86},[69,90954,90955,90957,90959,90962,90964],{"class":71,"line":79},[69,90956,53372],{"class":86},[69,90958,55114],{"class":348},[69,90960,90961],{"class":86},">禁用\u003C\u002F",[69,90963,55114],{"class":348},[69,90965,1026],{"class":86},[69,90967,90968,90970,90972],{"class":71,"line":106},[69,90969,53372],{"class":86},[69,90971,53041],{"class":348},[69,90973,1026],{"class":86},[69,90975,90976],{"class":71,"line":116},[69,90977,90978],{"class":86},"    const btn = document.querySelector('button')\n",[69,90980,90981],{"class":71,"line":133},[69,90982,60242],{"class":86},[69,90984,90985],{"class":71,"line":139},[69,90986,90987],{"class":86},"      this.disabled = true\n",[69,90989,90990],{"class":71,"line":401},[69,90991,90992],{"class":86},"      \u002F\u002F 定时器是window进行调用的\n",[69,90994,90995],{"class":71,"line":470},[69,90996,90997],{"class":86},"      setTimeout(function () {\n",[69,90999,91000],{"class":71,"line":475},[69,91001,91002],{"class":86},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[69,91004,91005],{"class":71,"line":482},[69,91006,91007],{"class":86},"        this.disabled = false\n",[69,91009,91010],{"class":71,"line":497},[69,91011,91012],{"class":86},"      }.bind(this), 2000)\n",[69,91014,91015],{"class":71,"line":502},[69,91016,91017],{"class":86},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[69,91019,91020],{"class":71,"line":509},[69,91021,91022],{"class":86},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[69,91024,91025],{"class":71,"line":524},[69,91026,34697],{"class":86},[69,91028,91029,91031,91033],{"class":71,"line":2888},[69,91030,53645],{"class":86},[69,91032,53041],{"class":348},[69,91034,1026],{"class":86},[69,91036,91037,91039,91041],{"class":71,"line":2893},[69,91038,1036],{"class":86},[69,91040,680],{"class":348},[69,91042,1026],{"class":86},[37,91044,91045],{"start":133},[40,91046,23192],{},[29,91048,91049],{},[24,91050],{"alt":64,"src":91051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91053,91055],{"id":91054},"_417-性能优化","4.17 性能优化",[19,91057,91059],{"id":91058},"_4171-防抖","4.17.1 防抖",[29,91061,91062],{},[24,91063],{"alt":64,"src":91064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[29,91066,91067],{},[195,91068,91069],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[29,91071,91072],{},"防抖实现方式：",[162,91074,91075],{},[40,91076,91077],{},"lodash 提供了防抖处理",[29,91079,91080],{},"_.debounce(func,[wait=0],[options={}])",[29,91082,91083],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[59,91085,91087],{"className":51869,"code":91086,"language":349,"meta":64,"style":64},"\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",[66,91088,91089,91099,91113,91117,91125,91139,91159,91171,91179,91185,91195,91207,91219,91230,91242,91252,91262,91275,91279,91287,91295,91299,91307,91325,91343,91351,91370,91380,91389,91400,91405,91409,91414,91419,91424,91449,91457,91465,91469],{"__ignoreMap":64},[69,91090,91091,91093,91095,91097],{"class":71,"line":72},[69,91092,52532],{"class":86},[69,91094,52535],{"class":348},[69,91096,52538],{"class":109},[69,91098,1026],{"class":86},[69,91100,91101,91103,91105,91107,91109,91111],{"class":71,"line":79},[69,91102,1011],{"class":86},[69,91104,349],{"class":348},[69,91106,52549],{"class":109},[69,91108,1019],{"class":86},[69,91110,52554],{"class":1022},[69,91112,1026],{"class":86},[69,91114,91115],{"class":71,"line":106},[69,91116,3644],{"emptyLinePlaceholder":1325},[69,91118,91119,91121,91123],{"class":71,"line":116},[69,91120,1011],{"class":86},[69,91122,52567],{"class":348},[69,91124,1026],{"class":86},[69,91126,91127,91129,91131,91133,91135,91137],{"class":71,"line":133},[69,91128,53372],{"class":86},[69,91130,52577],{"class":348},[69,91132,52580],{"class":109},[69,91134,1019],{"class":86},[69,91136,52585],{"class":1022},[69,91138,1026],{"class":86},[69,91140,91141,91143,91145,91147,91149,91151,91153,91155,91157],{"class":71,"line":139},[69,91142,53372],{"class":86},[69,91144,52577],{"class":348},[69,91146,16160],{"class":109},[69,91148,1019],{"class":86},[69,91150,52624],{"class":1022},[69,91152,52604],{"class":109},[69,91154,1019],{"class":86},[69,91156,52631],{"class":1022},[69,91158,1026],{"class":86},[69,91160,91161,91163,91165,91167,91169],{"class":71,"line":401},[69,91162,53372],{"class":86},[69,91164,52640],{"class":348},[69,91166,52643],{"class":86},[69,91168,52640],{"class":348},[69,91170,1026],{"class":86},[69,91172,91173,91175,91177],{"class":71,"line":470},[69,91174,53372],{"class":86},[69,91176,1297],{"class":348},[69,91178,1026],{"class":86},[69,91180,91181,91183],{"class":71,"line":475},[69,91182,55979],{"class":109},[69,91184,113],{"class":86},[69,91186,91187,91189,91191,91193],{"class":71,"line":482},[69,91188,73817],{"class":90},[69,91190,94],{"class":86},[69,91192,61731],{"class":90},[69,91194,130],{"class":86},[69,91196,91197,91199,91201,91203,91205],{"class":71,"line":497},[69,91198,55998],{"class":90},[69,91200,94],{"class":86},[69,91202,2967],{"class":90},[69,91204,100],{"class":82},[69,91206,130],{"class":86},[69,91208,91209,91211,91213,91215,91217],{"class":71,"line":502},[69,91210,56012],{"class":90},[69,91212,94],{"class":86},[69,91214,2967],{"class":90},[69,91216,100],{"class":82},[69,91218,130],{"class":86},[69,91220,91221,91223,91225,91228],{"class":71,"line":509},[69,91222,56111],{"class":90},[69,91224,94],{"class":86},[69,91226,91227],{"class":90},"gray",[69,91229,130],{"class":86},[69,91231,91232,91234,91236,91238,91240],{"class":71,"line":524},[69,91233,56149],{"class":90},[69,91235,94],{"class":86},[69,91237,2212],{"class":90},[69,91239,100],{"class":82},[69,91241,130],{"class":86},[69,91243,91244,91246,91248,91250],{"class":71,"line":2888},[69,91245,58643],{"class":90},[69,91247,94],{"class":86},[69,91249,62068],{"class":90},[69,91251,130],{"class":86},[69,91253,91254,91256,91258,91260],{"class":71,"line":2893},[69,91255,58513],{"class":90},[69,91257,94],{"class":86},[69,91259,52823],{"class":90},[69,91261,130],{"class":86},[69,91263,91264,91267,91269,91271,91273],{"class":71,"line":2899},[69,91265,91266],{"class":90},"      padding-top",[69,91268,94],{"class":86},[69,91270,1709],{"class":90},[69,91272,100],{"class":82},[69,91274,130],{"class":86},[69,91276,91277],{"class":71,"line":2919},[69,91278,3431],{"class":86},[69,91280,91281,91283,91285],{"class":71,"line":2924},[69,91282,53645],{"class":86},[69,91284,1297],{"class":348},[69,91286,1026],{"class":86},[69,91288,91289,91291,91293],{"class":71,"line":2938},[69,91290,1036],{"class":86},[69,91292,52567],{"class":348},[69,91294,1026],{"class":86},[69,91296,91297],{"class":71,"line":2943},[69,91298,3644],{"emptyLinePlaceholder":1325},[69,91300,91301,91303,91305],{"class":71,"line":2972},[69,91302,1011],{"class":86},[69,91304,680],{"class":348},[69,91306,1026],{"class":86},[69,91308,91309,91311,91313,91315,91317,91319,91321,91323],{"class":71,"line":2977},[69,91310,53372],{"class":86},[69,91312,442],{"class":348},[69,91314,1016],{"class":109},[69,91316,1019],{"class":86},[69,91318,54718],{"class":1022},[69,91320,56541],{"class":86},[69,91322,442],{"class":348},[69,91324,1026],{"class":86},[69,91326,91327,91329,91331,91333,91335,91337,91339,91341],{"class":71,"line":2994},[69,91328,53372],{"class":86},[69,91330,53041],{"class":348},[69,91332,56466],{"class":109},[69,91334,1019],{"class":86},[69,91336,89495],{"class":1022},[69,91338,56541],{"class":86},[69,91340,53041],{"class":348},[69,91342,1026],{"class":86},[69,91344,91345,91347,91349],{"class":71,"line":2999},[69,91346,53372],{"class":86},[69,91348,53041],{"class":348},[69,91350,1026],{"class":86},[69,91352,91353,91355,91357,91359,91361,91363,91365,91368],{"class":71,"line":3004},[69,91354,12463],{"class":82},[69,91356,88154],{"class":90},[69,91358,14805],{"class":82},[69,91360,55623],{"class":86},[69,91362,55626],{"class":109},[69,91364,1398],{"class":86},[69,91366,91367],{"class":1022},"'.box'",[69,91369,1404],{"class":86},[69,91371,91372,91374,91376,91378],{"class":71,"line":3009},[69,91373,53447],{"class":82},[69,91375,10680],{"class":86},[69,91377,1019],{"class":82},[69,91379,48569],{"class":90},[69,91381,91382,91384,91387],{"class":71,"line":3023},[69,91383,71309],{"class":82},[69,91385,91386],{"class":109}," mouseMove",[69,91388,12095],{"class":86},[69,91390,91391,91394,91396,91398],{"class":71,"line":3028},[69,91392,91393],{"class":86},"      box.innerHTML ",[69,91395,1019],{"class":82},[69,91397,4276],{"class":86},[69,91399,3946],{"class":82},[69,91401,91402],{"class":71,"line":3821},[69,91403,91404],{"class":75},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[69,91406,91407],{"class":71,"line":3835},[69,91408,3431],{"class":86},[69,91410,91411],{"class":71,"line":3843},[69,91412,91413],{"class":75},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[69,91415,91416],{"class":71,"line":3848},[69,91417,91418],{"class":75},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[69,91420,91421],{"class":71,"line":3854},[69,91422,91423],{"class":75},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[69,91425,91426,91429,91431,91433,91436,91439,91442,91445,91447],{"class":71,"line":3860},[69,91427,91428],{"class":86},"    box.",[69,91430,59039],{"class":109},[69,91432,1398],{"class":86},[69,91434,91435],{"class":1022},"'mousemove'",[69,91437,91438],{"class":86},", _.",[69,91440,91441],{"class":109},"debounce",[69,91443,91444],{"class":86},"(mouseMove, ",[69,91446,66300],{"class":90},[69,91448,31733],{"class":86},[69,91450,91451,91453,91455],{"class":71,"line":3865},[69,91452,53645],{"class":86},[69,91454,53041],{"class":348},[69,91456,1026],{"class":86},[69,91458,91459,91461,91463],{"class":71,"line":9190},[69,91460,1036],{"class":86},[69,91462,680],{"class":348},[69,91464,1026],{"class":86},[69,91466,91467],{"class":71,"line":9214},[69,91468,3644],{"emptyLinePlaceholder":1325},[69,91470,91471,91473,91475],{"class":71,"line":9219},[69,91472,1036],{"class":86},[69,91474,349],{"class":348},[69,91476,1026],{"class":86},[162,91478,91479],{},[40,91480,91481],{},"手写一个防抖函数来处理",[29,91483,91484],{},"防抖的核心就是利用定时器来实现的：",[29,91486,91487],{},"①声明一个定时器变量",[29,91489,91490],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[29,91492,91493],{},"③如果没有定时器则开启定时器，记得存到变量里面",[59,91495,91497],{"className":51869,"code":91496,"language":349,"meta":64,"style":64},"\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",[66,91498,91499,91509,91523,91527,91535,91549,91569,91581,91589,91595,91605,91617,91629,91639,91651,91661,91671,91683,91687,91695,91703,91707,91715,91733,91751,91759,91777,91787,91795,91805,91809,91813,91817,91822,91827,91832,91837,91842,91847,91865,91872,91877,91885,91890,91903,91919,91929,91934,91938,91942,91962,91966,91971,91976,91981,91986,91994,92002,92006],{"__ignoreMap":64},[69,91500,91501,91503,91505,91507],{"class":71,"line":72},[69,91502,52532],{"class":86},[69,91504,52535],{"class":348},[69,91506,52538],{"class":109},[69,91508,1026],{"class":86},[69,91510,91511,91513,91515,91517,91519,91521],{"class":71,"line":79},[69,91512,1011],{"class":86},[69,91514,349],{"class":348},[69,91516,52549],{"class":109},[69,91518,1019],{"class":86},[69,91520,52554],{"class":1022},[69,91522,1026],{"class":86},[69,91524,91525],{"class":71,"line":106},[69,91526,3644],{"emptyLinePlaceholder":1325},[69,91528,91529,91531,91533],{"class":71,"line":116},[69,91530,1011],{"class":86},[69,91532,52567],{"class":348},[69,91534,1026],{"class":86},[69,91536,91537,91539,91541,91543,91545,91547],{"class":71,"line":133},[69,91538,53372],{"class":86},[69,91540,52577],{"class":348},[69,91542,52580],{"class":109},[69,91544,1019],{"class":86},[69,91546,52585],{"class":1022},[69,91548,1026],{"class":86},[69,91550,91551,91553,91555,91557,91559,91561,91563,91565,91567],{"class":71,"line":139},[69,91552,53372],{"class":86},[69,91554,52577],{"class":348},[69,91556,16160],{"class":109},[69,91558,1019],{"class":86},[69,91560,52624],{"class":1022},[69,91562,52604],{"class":109},[69,91564,1019],{"class":86},[69,91566,52631],{"class":1022},[69,91568,1026],{"class":86},[69,91570,91571,91573,91575,91577,91579],{"class":71,"line":401},[69,91572,53372],{"class":86},[69,91574,52640],{"class":348},[69,91576,52643],{"class":86},[69,91578,52640],{"class":348},[69,91580,1026],{"class":86},[69,91582,91583,91585,91587],{"class":71,"line":470},[69,91584,53372],{"class":86},[69,91586,1297],{"class":348},[69,91588,1026],{"class":86},[69,91590,91591,91593],{"class":71,"line":475},[69,91592,55979],{"class":109},[69,91594,113],{"class":86},[69,91596,91597,91599,91601,91603],{"class":71,"line":482},[69,91598,73817],{"class":90},[69,91600,94],{"class":86},[69,91602,61731],{"class":90},[69,91604,130],{"class":86},[69,91606,91607,91609,91611,91613,91615],{"class":71,"line":497},[69,91608,55998],{"class":90},[69,91610,94],{"class":86},[69,91612,2967],{"class":90},[69,91614,100],{"class":82},[69,91616,130],{"class":86},[69,91618,91619,91621,91623,91625,91627],{"class":71,"line":502},[69,91620,56012],{"class":90},[69,91622,94],{"class":86},[69,91624,2967],{"class":90},[69,91626,100],{"class":82},[69,91628,130],{"class":86},[69,91630,91631,91633,91635,91637],{"class":71,"line":509},[69,91632,56111],{"class":90},[69,91634,94],{"class":86},[69,91636,91227],{"class":90},[69,91638,130],{"class":86},[69,91640,91641,91643,91645,91647,91649],{"class":71,"line":524},[69,91642,56149],{"class":90},[69,91644,94],{"class":86},[69,91646,2212],{"class":90},[69,91648,100],{"class":82},[69,91650,130],{"class":86},[69,91652,91653,91655,91657,91659],{"class":71,"line":2888},[69,91654,58643],{"class":90},[69,91656,94],{"class":86},[69,91658,62068],{"class":90},[69,91660,130],{"class":86},[69,91662,91663,91665,91667,91669],{"class":71,"line":2893},[69,91664,58513],{"class":90},[69,91666,94],{"class":86},[69,91668,52823],{"class":90},[69,91670,130],{"class":86},[69,91672,91673,91675,91677,91679,91681],{"class":71,"line":2899},[69,91674,91266],{"class":90},[69,91676,94],{"class":86},[69,91678,1709],{"class":90},[69,91680,100],{"class":82},[69,91682,130],{"class":86},[69,91684,91685],{"class":71,"line":2919},[69,91686,3431],{"class":86},[69,91688,91689,91691,91693],{"class":71,"line":2924},[69,91690,53645],{"class":86},[69,91692,1297],{"class":348},[69,91694,1026],{"class":86},[69,91696,91697,91699,91701],{"class":71,"line":2938},[69,91698,1036],{"class":86},[69,91700,52567],{"class":348},[69,91702,1026],{"class":86},[69,91704,91705],{"class":71,"line":2943},[69,91706,3644],{"emptyLinePlaceholder":1325},[69,91708,91709,91711,91713],{"class":71,"line":2972},[69,91710,1011],{"class":86},[69,91712,680],{"class":348},[69,91714,1026],{"class":86},[69,91716,91717,91719,91721,91723,91725,91727,91729,91731],{"class":71,"line":2977},[69,91718,53372],{"class":86},[69,91720,442],{"class":348},[69,91722,1016],{"class":109},[69,91724,1019],{"class":86},[69,91726,54718],{"class":1022},[69,91728,56541],{"class":86},[69,91730,442],{"class":348},[69,91732,1026],{"class":86},[69,91734,91735,91737,91739,91741,91743,91745,91747,91749],{"class":71,"line":2994},[69,91736,53372],{"class":86},[69,91738,53041],{"class":348},[69,91740,56466],{"class":109},[69,91742,1019],{"class":86},[69,91744,89495],{"class":1022},[69,91746,56541],{"class":86},[69,91748,53041],{"class":348},[69,91750,1026],{"class":86},[69,91752,91753,91755,91757],{"class":71,"line":2999},[69,91754,53372],{"class":86},[69,91756,53041],{"class":348},[69,91758,1026],{"class":86},[69,91760,91761,91763,91765,91767,91769,91771,91773,91775],{"class":71,"line":3004},[69,91762,12463],{"class":82},[69,91764,88154],{"class":90},[69,91766,14805],{"class":82},[69,91768,55623],{"class":86},[69,91770,55626],{"class":109},[69,91772,1398],{"class":86},[69,91774,91367],{"class":1022},[69,91776,1404],{"class":86},[69,91778,91779,91781,91783,91785],{"class":71,"line":3009},[69,91780,53447],{"class":82},[69,91782,10680],{"class":86},[69,91784,1019],{"class":82},[69,91786,48569],{"class":90},[69,91788,91789,91791,91793],{"class":71,"line":3023},[69,91790,71309],{"class":82},[69,91792,91386],{"class":109},[69,91794,12095],{"class":86},[69,91796,91797,91799,91801,91803],{"class":71,"line":3028},[69,91798,91393],{"class":86},[69,91800,1019],{"class":82},[69,91802,4276],{"class":86},[69,91804,3946],{"class":82},[69,91806,91807],{"class":71,"line":3821},[69,91808,91404],{"class":75},[69,91810,91811],{"class":71,"line":3835},[69,91812,3431],{"class":86},[69,91814,91815],{"class":71,"line":3843},[69,91816,91413],{"class":75},[69,91818,91819],{"class":71,"line":3848},[69,91820,91821],{"class":75},"    \u002F\u002F 手写防抖函数\n",[69,91823,91824],{"class":71,"line":3854},[69,91825,91826],{"class":75},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[69,91828,91829],{"class":71,"line":3860},[69,91830,91831],{"class":75},"    \u002F\u002F 1.声明定时器变量\n",[69,91833,91834],{"class":71,"line":3865},[69,91835,91836],{"class":75},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[69,91838,91839],{"class":71,"line":9190},[69,91840,91841],{"class":75},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[69,91843,91844],{"class":71,"line":9214},[69,91845,91846],{"class":75},"    \u002F\u002F 4.定时器里面写函数调用\n",[69,91848,91849,91851,91854,91856,91859,91861,91863],{"class":71,"line":9219},[69,91850,71309],{"class":82},[69,91852,91853],{"class":109}," debounce",[69,91855,1398],{"class":86},[69,91857,91858],{"class":6458},"fn",[69,91860,13677],{"class":86},[69,91862,2107],{"class":6458},[69,91864,103],{"class":86},[69,91866,91867,91869],{"class":71,"line":9225},[69,91868,80993],{"class":82},[69,91870,91871],{"class":86}," timer\n",[69,91873,91874],{"class":71,"line":9252},[69,91875,91876],{"class":75},"      \u002F\u002F return 返回一个匿名函数\n",[69,91878,91879,91881,91883],{"class":71,"line":9257},[69,91880,75203],{"class":82},[69,91882,60144],{"class":82},[69,91884,55679],{"class":86},[69,91886,91887],{"class":71,"line":9263},[69,91888,91889],{"class":75},"        \u002F\u002F 这里边写第二三四步\n",[69,91891,91892,91894,91897,91900],{"class":71,"line":9275},[69,91893,3741],{"class":82},[69,91895,91896],{"class":86}," (timer) ",[69,91898,91899],{"class":109},"clearTimeout",[69,91901,91902],{"class":86},"(timer)\n",[69,91904,91905,91908,91910,91913,91915,91917],{"class":71,"line":9287},[69,91906,91907],{"class":86},"        timer ",[69,91909,1019],{"class":82},[69,91911,91912],{"class":109}," setTimeout",[69,91914,1398],{"class":86},[69,91916,55676],{"class":82},[69,91918,55679],{"class":86},[69,91920,91921,91924,91926],{"class":71,"line":9299},[69,91922,91923],{"class":109},"          fn",[69,91925,14291],{"class":86},[69,91927,91928],{"class":75},"\u002F\u002F加小括号调用fn }, t)\n",[69,91930,91931],{"class":71,"line":10958},[69,91932,91933],{"class":86},"        }, t)\n",[69,91935,91936],{"class":71,"line":10983},[69,91937,53626],{"class":86},[69,91939,91940],{"class":71,"line":11006},[69,91941,3431],{"class":86},[69,91943,91944,91946,91948,91950,91952,91954,91956,91958,91960],{"class":71,"line":11030},[69,91945,91428],{"class":86},[69,91947,59039],{"class":109},[69,91949,1398],{"class":86},[69,91951,91435],{"class":1022},[69,91953,13677],{"class":86},[69,91955,91441],{"class":109},[69,91957,91444],{"class":86},[69,91959,66300],{"class":90},[69,91961,31733],{"class":86},[69,91963,91964],{"class":71,"line":11035},[69,91965,3644],{"emptyLinePlaceholder":1325},[69,91967,91968],{"class":71,"line":11040},[69,91969,91970],{"class":75},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[69,91972,91973],{"class":71,"line":11045},[69,91974,91975],{"class":75},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[69,91977,91978],{"class":71,"line":11054},[69,91979,91980],{"class":75},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[69,91982,91983],{"class":71,"line":11059},[69,91984,91985],{"class":75},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[69,91987,91988,91990,91992],{"class":71,"line":11065},[69,91989,53645],{"class":86},[69,91991,53041],{"class":348},[69,91993,1026],{"class":86},[69,91995,91996,91998,92000],{"class":71,"line":11086},[69,91997,1036],{"class":86},[69,91999,680],{"class":348},[69,92001,1026],{"class":86},[69,92003,92004],{"class":71,"line":11092},[69,92005,3644],{"emptyLinePlaceholder":1325},[69,92007,92008,92010,92012],{"class":71,"line":11106},[69,92009,1036],{"class":86},[69,92011,349],{"class":348},[69,92013,1026],{"class":86},[19,92015,92017],{"id":92016},"_4172-节流","4.17.2 节流",[29,92019,92020],{},[24,92021],{"alt":64,"src":92022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[29,92024,92025],{},[24,92026],{"alt":64,"src":92027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[29,92029,92030],{},[195,92031,92032],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[29,92034,92035],{},"实现方式：",[162,92037,92038],{},[40,92039,92040],{},"lodash 提供的节流函数来处理",[29,92042,92043],{},"_.throttle(func,[wait=0],[options=])",[29,92045,92046],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[59,92048,92050],{"className":51869,"code":92049,"language":349,"meta":64,"style":64},"\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",[66,92051,92052,92062,92076,92080,92088,92102,92122,92134,92142,92148,92158,92170,92182,92192,92204,92214,92224,92236,92240,92248,92256,92260,92268,92286,92304,92312,92330,92340,92348,92358,92362,92366,92370,92375,92380,92401,92409,92417,92421],{"__ignoreMap":64},[69,92053,92054,92056,92058,92060],{"class":71,"line":72},[69,92055,52532],{"class":86},[69,92057,52535],{"class":348},[69,92059,52538],{"class":109},[69,92061,1026],{"class":86},[69,92063,92064,92066,92068,92070,92072,92074],{"class":71,"line":79},[69,92065,1011],{"class":86},[69,92067,349],{"class":348},[69,92069,52549],{"class":109},[69,92071,1019],{"class":86},[69,92073,52554],{"class":1022},[69,92075,1026],{"class":86},[69,92077,92078],{"class":71,"line":106},[69,92079,3644],{"emptyLinePlaceholder":1325},[69,92081,92082,92084,92086],{"class":71,"line":116},[69,92083,1011],{"class":86},[69,92085,52567],{"class":348},[69,92087,1026],{"class":86},[69,92089,92090,92092,92094,92096,92098,92100],{"class":71,"line":133},[69,92091,53372],{"class":86},[69,92093,52577],{"class":348},[69,92095,52580],{"class":109},[69,92097,1019],{"class":86},[69,92099,52585],{"class":1022},[69,92101,1026],{"class":86},[69,92103,92104,92106,92108,92110,92112,92114,92116,92118,92120],{"class":71,"line":139},[69,92105,53372],{"class":86},[69,92107,52577],{"class":348},[69,92109,16160],{"class":109},[69,92111,1019],{"class":86},[69,92113,52624],{"class":1022},[69,92115,52604],{"class":109},[69,92117,1019],{"class":86},[69,92119,52631],{"class":1022},[69,92121,1026],{"class":86},[69,92123,92124,92126,92128,92130,92132],{"class":71,"line":401},[69,92125,53372],{"class":86},[69,92127,52640],{"class":348},[69,92129,52643],{"class":86},[69,92131,52640],{"class":348},[69,92133,1026],{"class":86},[69,92135,92136,92138,92140],{"class":71,"line":470},[69,92137,53372],{"class":86},[69,92139,1297],{"class":348},[69,92141,1026],{"class":86},[69,92143,92144,92146],{"class":71,"line":475},[69,92145,55979],{"class":109},[69,92147,113],{"class":86},[69,92149,92150,92152,92154,92156],{"class":71,"line":482},[69,92151,73817],{"class":90},[69,92153,94],{"class":86},[69,92155,61731],{"class":90},[69,92157,130],{"class":86},[69,92159,92160,92162,92164,92166,92168],{"class":71,"line":497},[69,92161,55998],{"class":90},[69,92163,94],{"class":86},[69,92165,2967],{"class":90},[69,92167,100],{"class":82},[69,92169,130],{"class":86},[69,92171,92172,92174,92176,92178,92180],{"class":71,"line":502},[69,92173,56012],{"class":90},[69,92175,94],{"class":86},[69,92177,2967],{"class":90},[69,92179,100],{"class":82},[69,92181,130],{"class":86},[69,92183,92184,92186,92188,92190],{"class":71,"line":509},[69,92185,56111],{"class":90},[69,92187,94],{"class":86},[69,92189,91227],{"class":90},[69,92191,130],{"class":86},[69,92193,92194,92196,92198,92200,92202],{"class":71,"line":524},[69,92195,56149],{"class":90},[69,92197,94],{"class":86},[69,92199,2212],{"class":90},[69,92201,100],{"class":82},[69,92203,130],{"class":86},[69,92205,92206,92208,92210,92212],{"class":71,"line":2888},[69,92207,58643],{"class":90},[69,92209,94],{"class":86},[69,92211,62068],{"class":90},[69,92213,130],{"class":86},[69,92215,92216,92218,92220,92222],{"class":71,"line":2893},[69,92217,58513],{"class":90},[69,92219,94],{"class":86},[69,92221,52823],{"class":90},[69,92223,130],{"class":86},[69,92225,92226,92228,92230,92232,92234],{"class":71,"line":2899},[69,92227,91266],{"class":90},[69,92229,94],{"class":86},[69,92231,1709],{"class":90},[69,92233,100],{"class":82},[69,92235,130],{"class":86},[69,92237,92238],{"class":71,"line":2919},[69,92239,3431],{"class":86},[69,92241,92242,92244,92246],{"class":71,"line":2924},[69,92243,53645],{"class":86},[69,92245,1297],{"class":348},[69,92247,1026],{"class":86},[69,92249,92250,92252,92254],{"class":71,"line":2938},[69,92251,1036],{"class":86},[69,92253,52567],{"class":348},[69,92255,1026],{"class":86},[69,92257,92258],{"class":71,"line":2943},[69,92259,3644],{"emptyLinePlaceholder":1325},[69,92261,92262,92264,92266],{"class":71,"line":2972},[69,92263,1011],{"class":86},[69,92265,680],{"class":348},[69,92267,1026],{"class":86},[69,92269,92270,92272,92274,92276,92278,92280,92282,92284],{"class":71,"line":2977},[69,92271,53372],{"class":86},[69,92273,442],{"class":348},[69,92275,1016],{"class":109},[69,92277,1019],{"class":86},[69,92279,54718],{"class":1022},[69,92281,56541],{"class":86},[69,92283,442],{"class":348},[69,92285,1026],{"class":86},[69,92287,92288,92290,92292,92294,92296,92298,92300,92302],{"class":71,"line":2994},[69,92289,53372],{"class":86},[69,92291,53041],{"class":348},[69,92293,56466],{"class":109},[69,92295,1019],{"class":86},[69,92297,89495],{"class":1022},[69,92299,56541],{"class":86},[69,92301,53041],{"class":348},[69,92303,1026],{"class":86},[69,92305,92306,92308,92310],{"class":71,"line":2999},[69,92307,53372],{"class":86},[69,92309,53041],{"class":348},[69,92311,1026],{"class":86},[69,92313,92314,92316,92318,92320,92322,92324,92326,92328],{"class":71,"line":3004},[69,92315,12463],{"class":82},[69,92317,88154],{"class":90},[69,92319,14805],{"class":82},[69,92321,55623],{"class":86},[69,92323,55626],{"class":109},[69,92325,1398],{"class":86},[69,92327,91367],{"class":1022},[69,92329,1404],{"class":86},[69,92331,92332,92334,92336,92338],{"class":71,"line":3009},[69,92333,53447],{"class":82},[69,92335,10680],{"class":86},[69,92337,1019],{"class":82},[69,92339,48569],{"class":90},[69,92341,92342,92344,92346],{"class":71,"line":3023},[69,92343,71309],{"class":82},[69,92345,91386],{"class":109},[69,92347,12095],{"class":86},[69,92349,92350,92352,92354,92356],{"class":71,"line":3028},[69,92351,91393],{"class":86},[69,92353,1019],{"class":82},[69,92355,4276],{"class":86},[69,92357,3946],{"class":82},[69,92359,92360],{"class":71,"line":3821},[69,92361,91404],{"class":75},[69,92363,92364],{"class":71,"line":3835},[69,92365,3431],{"class":86},[69,92367,92368],{"class":71,"line":3843},[69,92369,91413],{"class":75},[69,92371,92372],{"class":71,"line":3848},[69,92373,92374],{"class":75},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[69,92376,92377],{"class":71,"line":3854},[69,92378,92379],{"class":75},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[69,92381,92382,92384,92386,92388,92390,92392,92395,92397,92399],{"class":71,"line":3860},[69,92383,91428],{"class":86},[69,92385,59039],{"class":109},[69,92387,1398],{"class":86},[69,92389,91435],{"class":1022},[69,92391,91438],{"class":86},[69,92393,92394],{"class":109},"throttle",[69,92396,91444],{"class":86},[69,92398,66300],{"class":90},[69,92400,31733],{"class":86},[69,92402,92403,92405,92407],{"class":71,"line":3865},[69,92404,53645],{"class":86},[69,92406,53041],{"class":348},[69,92408,1026],{"class":86},[69,92410,92411,92413,92415],{"class":71,"line":9190},[69,92412,1036],{"class":86},[69,92414,680],{"class":348},[69,92416,1026],{"class":86},[69,92418,92419],{"class":71,"line":9214},[69,92420,3644],{"emptyLinePlaceholder":1325},[69,92422,92423,92425,92427],{"class":71,"line":9219},[69,92424,1036],{"class":86},[69,92426,349],{"class":348},[69,92428,1026],{"class":86},[162,92430,92431],{},[40,92432,92433],{},"手写一个节流函数来处理",[29,92435,72173],{},[29,92437,91487],{},[29,92439,92440],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[29,92442,92443],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[59,92445,92447],{"className":51869,"code":92446,"language":349,"meta":64,"style":64},"\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",[66,92448,92449,92459,92473,92477,92485,92499,92519,92531,92539,92545,92555,92567,92579,92589,92601,92611,92621,92633,92637,92645,92653,92657,92665,92683,92701,92709,92727,92737,92745,92755,92759,92763,92767,92772,92777,92782,92787,92792,92797,92814,92820,92828,92839,92854,92861,92866,92871,92881,92886,92891,92896,92900,92904,92908,92928,92936,92944,92948],{"__ignoreMap":64},[69,92450,92451,92453,92455,92457],{"class":71,"line":72},[69,92452,52532],{"class":86},[69,92454,52535],{"class":348},[69,92456,52538],{"class":109},[69,92458,1026],{"class":86},[69,92460,92461,92463,92465,92467,92469,92471],{"class":71,"line":79},[69,92462,1011],{"class":86},[69,92464,349],{"class":348},[69,92466,52549],{"class":109},[69,92468,1019],{"class":86},[69,92470,52554],{"class":1022},[69,92472,1026],{"class":86},[69,92474,92475],{"class":71,"line":106},[69,92476,3644],{"emptyLinePlaceholder":1325},[69,92478,92479,92481,92483],{"class":71,"line":116},[69,92480,1011],{"class":86},[69,92482,52567],{"class":348},[69,92484,1026],{"class":86},[69,92486,92487,92489,92491,92493,92495,92497],{"class":71,"line":133},[69,92488,53372],{"class":86},[69,92490,52577],{"class":348},[69,92492,52580],{"class":109},[69,92494,1019],{"class":86},[69,92496,52585],{"class":1022},[69,92498,1026],{"class":86},[69,92500,92501,92503,92505,92507,92509,92511,92513,92515,92517],{"class":71,"line":139},[69,92502,53372],{"class":86},[69,92504,52577],{"class":348},[69,92506,16160],{"class":109},[69,92508,1019],{"class":86},[69,92510,52624],{"class":1022},[69,92512,52604],{"class":109},[69,92514,1019],{"class":86},[69,92516,52631],{"class":1022},[69,92518,1026],{"class":86},[69,92520,92521,92523,92525,92527,92529],{"class":71,"line":401},[69,92522,53372],{"class":86},[69,92524,52640],{"class":348},[69,92526,52643],{"class":86},[69,92528,52640],{"class":348},[69,92530,1026],{"class":86},[69,92532,92533,92535,92537],{"class":71,"line":470},[69,92534,53372],{"class":86},[69,92536,1297],{"class":348},[69,92538,1026],{"class":86},[69,92540,92541,92543],{"class":71,"line":475},[69,92542,55979],{"class":109},[69,92544,113],{"class":86},[69,92546,92547,92549,92551,92553],{"class":71,"line":482},[69,92548,73817],{"class":90},[69,92550,94],{"class":86},[69,92552,61731],{"class":90},[69,92554,130],{"class":86},[69,92556,92557,92559,92561,92563,92565],{"class":71,"line":497},[69,92558,55998],{"class":90},[69,92560,94],{"class":86},[69,92562,2967],{"class":90},[69,92564,100],{"class":82},[69,92566,130],{"class":86},[69,92568,92569,92571,92573,92575,92577],{"class":71,"line":502},[69,92570,56012],{"class":90},[69,92572,94],{"class":86},[69,92574,2967],{"class":90},[69,92576,100],{"class":82},[69,92578,130],{"class":86},[69,92580,92581,92583,92585,92587],{"class":71,"line":509},[69,92582,56111],{"class":90},[69,92584,94],{"class":86},[69,92586,91227],{"class":90},[69,92588,130],{"class":86},[69,92590,92591,92593,92595,92597,92599],{"class":71,"line":524},[69,92592,56149],{"class":90},[69,92594,94],{"class":86},[69,92596,2212],{"class":90},[69,92598,100],{"class":82},[69,92600,130],{"class":86},[69,92602,92603,92605,92607,92609],{"class":71,"line":2888},[69,92604,58643],{"class":90},[69,92606,94],{"class":86},[69,92608,62068],{"class":90},[69,92610,130],{"class":86},[69,92612,92613,92615,92617,92619],{"class":71,"line":2893},[69,92614,58513],{"class":90},[69,92616,94],{"class":86},[69,92618,52823],{"class":90},[69,92620,130],{"class":86},[69,92622,92623,92625,92627,92629,92631],{"class":71,"line":2899},[69,92624,91266],{"class":90},[69,92626,94],{"class":86},[69,92628,1709],{"class":90},[69,92630,100],{"class":82},[69,92632,130],{"class":86},[69,92634,92635],{"class":71,"line":2919},[69,92636,3431],{"class":86},[69,92638,92639,92641,92643],{"class":71,"line":2924},[69,92640,53645],{"class":86},[69,92642,1297],{"class":348},[69,92644,1026],{"class":86},[69,92646,92647,92649,92651],{"class":71,"line":2938},[69,92648,1036],{"class":86},[69,92650,52567],{"class":348},[69,92652,1026],{"class":86},[69,92654,92655],{"class":71,"line":2943},[69,92656,3644],{"emptyLinePlaceholder":1325},[69,92658,92659,92661,92663],{"class":71,"line":2972},[69,92660,1011],{"class":86},[69,92662,680],{"class":348},[69,92664,1026],{"class":86},[69,92666,92667,92669,92671,92673,92675,92677,92679,92681],{"class":71,"line":2977},[69,92668,53372],{"class":86},[69,92670,442],{"class":348},[69,92672,1016],{"class":109},[69,92674,1019],{"class":86},[69,92676,54718],{"class":1022},[69,92678,56541],{"class":86},[69,92680,442],{"class":348},[69,92682,1026],{"class":86},[69,92684,92685,92687,92689,92691,92693,92695,92697,92699],{"class":71,"line":2994},[69,92686,53372],{"class":86},[69,92688,53041],{"class":348},[69,92690,56466],{"class":109},[69,92692,1019],{"class":86},[69,92694,89495],{"class":1022},[69,92696,56541],{"class":86},[69,92698,53041],{"class":348},[69,92700,1026],{"class":86},[69,92702,92703,92705,92707],{"class":71,"line":2999},[69,92704,53372],{"class":86},[69,92706,53041],{"class":348},[69,92708,1026],{"class":86},[69,92710,92711,92713,92715,92717,92719,92721,92723,92725],{"class":71,"line":3004},[69,92712,12463],{"class":82},[69,92714,88154],{"class":90},[69,92716,14805],{"class":82},[69,92718,55623],{"class":86},[69,92720,55626],{"class":109},[69,92722,1398],{"class":86},[69,92724,91367],{"class":1022},[69,92726,1404],{"class":86},[69,92728,92729,92731,92733,92735],{"class":71,"line":3009},[69,92730,53447],{"class":82},[69,92732,10680],{"class":86},[69,92734,1019],{"class":82},[69,92736,48569],{"class":90},[69,92738,92739,92741,92743],{"class":71,"line":3023},[69,92740,71309],{"class":82},[69,92742,91386],{"class":109},[69,92744,12095],{"class":86},[69,92746,92747,92749,92751,92753],{"class":71,"line":3028},[69,92748,91393],{"class":86},[69,92750,1019],{"class":82},[69,92752,4276],{"class":86},[69,92754,3946],{"class":82},[69,92756,92757],{"class":71,"line":3821},[69,92758,91404],{"class":75},[69,92760,92761],{"class":71,"line":3835},[69,92762,3431],{"class":86},[69,92764,92765],{"class":71,"line":3843},[69,92766,91413],{"class":75},[69,92768,92769],{"class":71,"line":3848},[69,92770,92771],{"class":75},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[69,92773,92774],{"class":71,"line":3854},[69,92775,92776],{"class":75},"    \u002F\u002F 1.声明一个定时器变量\n",[69,92778,92779],{"class":71,"line":3860},[69,92780,92781],{"class":75},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[69,92783,92784],{"class":71,"line":3865},[69,92785,92786],{"class":75},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[69,92788,92789],{"class":71,"line":9190},[69,92790,92791],{"class":75},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[69,92793,92794],{"class":71,"line":9214},[69,92795,92796],{"class":75},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[69,92798,92799,92801,92804,92806,92808,92810,92812],{"class":71,"line":9219},[69,92800,71309],{"class":82},[69,92802,92803],{"class":109}," throttle",[69,92805,1398],{"class":86},[69,92807,91858],{"class":6458},[69,92809,13677],{"class":86},[69,92811,2107],{"class":6458},[69,92813,103],{"class":86},[69,92815,92816,92818],{"class":71,"line":9225},[69,92817,80993],{"class":82},[69,92819,91871],{"class":86},[69,92821,92822,92824,92826],{"class":71,"line":9252},[69,92823,75203],{"class":82},[69,92825,60144],{"class":82},[69,92827,55679],{"class":86},[69,92829,92830,92832,92834,92836],{"class":71,"line":9257},[69,92831,3741],{"class":82},[69,92833,87],{"class":86},[69,92835,1618],{"class":82},[69,92837,92838],{"class":86},"timer) {\n",[69,92840,92841,92844,92846,92848,92850,92852],{"class":71,"line":9263},[69,92842,92843],{"class":86},"          timer ",[69,92845,1019],{"class":82},[69,92847,91912],{"class":109},[69,92849,1398],{"class":86},[69,92851,55676],{"class":82},[69,92853,55679],{"class":86},[69,92855,92856,92859],{"class":71,"line":9275},[69,92857,92858],{"class":109},"            fn",[69,92860,3220],{"class":86},[69,92862,92863],{"class":71,"line":9287},[69,92864,92865],{"class":75},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[69,92867,92868],{"class":71,"line":9299},[69,92869,92870],{"class":75},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[69,92872,92873,92876,92878],{"class":71,"line":10958},[69,92874,92875],{"class":86},"            timer ",[69,92877,1019],{"class":82},[69,92879,92880],{"class":90}," null\n",[69,92882,92883],{"class":71,"line":10983},[69,92884,92885],{"class":75},"            \u002F\u002F 不能用clearTimeout(timer)\n",[69,92887,92888],{"class":71,"line":11006},[69,92889,92890],{"class":75},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[69,92892,92893],{"class":71,"line":11030},[69,92894,92895],{"class":86},"          }, t)\n",[69,92897,92898],{"class":71,"line":11035},[69,92899,3773],{"class":86},[69,92901,92902],{"class":71,"line":11040},[69,92903,53626],{"class":86},[69,92905,92906],{"class":71,"line":11045},[69,92907,3431],{"class":86},[69,92909,92910,92912,92914,92916,92918,92920,92922,92924,92926],{"class":71,"line":11054},[69,92911,91428],{"class":86},[69,92913,59039],{"class":109},[69,92915,1398],{"class":86},[69,92917,91435],{"class":1022},[69,92919,13677],{"class":86},[69,92921,92394],{"class":109},[69,92923,91444],{"class":86},[69,92925,66300],{"class":90},[69,92927,31733],{"class":86},[69,92929,92930,92932,92934],{"class":71,"line":11059},[69,92931,53645],{"class":86},[69,92933,53041],{"class":348},[69,92935,1026],{"class":86},[69,92937,92938,92940,92942],{"class":71,"line":11065},[69,92939,1036],{"class":86},[69,92941,680],{"class":348},[69,92943,1026],{"class":86},[69,92945,92946],{"class":71,"line":11086},[69,92947,3644],{"emptyLinePlaceholder":1325},[69,92949,92950,92952,92954],{"class":71,"line":11092},[69,92951,1036],{"class":86},[69,92953,349],{"class":348},[69,92955,1026],{"class":86},[19,92957,92959],{"id":92958},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[59,92961,92963],{"className":54295,"code":92962,"language":54297,"meta":64,"style":64},"\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",[66,92964,92965,92973,92981,92986,92991,92996,93001,93005,93013],{"__ignoreMap":64},[69,92966,92967,92969,92971],{"class":71,"line":72},[69,92968,1011],{"class":86},[69,92970,680],{"class":348},[69,92972,1026],{"class":86},[69,92974,92975,92977,92979],{"class":71,"line":79},[69,92976,53372],{"class":86},[69,92978,53041],{"class":348},[69,92980,1026],{"class":86},[69,92982,92983],{"class":71,"line":106},[69,92984,92985],{"class":86},"    let timer = null\n",[69,92987,92988],{"class":71,"line":116},[69,92989,92990],{"class":86},"    timer = setTimeout(() => {\n",[69,92992,92993],{"class":71,"line":133},[69,92994,92995],{"class":86},"      clearTimeout(timer)\n",[69,92997,92998],{"class":71,"line":139},[69,92999,93000],{"class":86},"      console.log(timer)\n",[69,93002,93003],{"class":71,"line":401},[69,93004,61451],{"class":86},[69,93006,93007,93009,93011],{"class":71,"line":470},[69,93008,53645],{"class":86},[69,93010,53041],{"class":348},[69,93012,1026],{"class":86},[69,93014,93015,93017,93019],{"class":71,"line":475},[69,93016,1036],{"class":86},[69,93018,680],{"class":348},[69,93020,1026],{"class":86},[29,93022,93023],{},"输出为1",[29,93025,93026],{},"在开启的定时器里边写清除定时器",[29,93028,93029],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[19,93031,93033],{"id":93032},"_4174-节流综合案例","4.17.4 节流综合案例",[29,93035,93036],{},"页面打开，可以记录上一次的视频播放位置",[29,93038,93039],{},[24,93040],{"alt":64,"src":93041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[29,93043,93044],{},[24,93045],{"alt":64,"src":93046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[59,93048,93050],{"className":51869,"code":93049,"language":349,"meta":64,"style":64},"\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",[66,93051,93052,93062,93076,93080,93088,93102,93122,93142,93164,93177,93185,93191,93201,93211,93221,93225,93229,93236,93249,93261,93265,93269,93279,93291,93305,93309,93313,93320,93330,93343,93355,93365,93375,93391,93403,93407,93411,93419,93429,93441,93451,93461,93471,93475,93479,93489,93500,93504,93512,93520,93524,93532,93547,93562,93577,93598,93606,93614,93629,93651,93659,93674,93700,93726,93752,93760,93768,93787,93795,93800,93819,93824,93842,93847,93852,93860,93865,93879,93887,93892,93909,93913,93918,93940,93944,93952,93960,93964],{"__ignoreMap":64},[69,93053,93054,93056,93058,93060],{"class":71,"line":72},[69,93055,52532],{"class":86},[69,93057,52535],{"class":348},[69,93059,52538],{"class":109},[69,93061,1026],{"class":86},[69,93063,93064,93066,93068,93070,93072,93074],{"class":71,"line":79},[69,93065,1011],{"class":86},[69,93067,349],{"class":348},[69,93069,52549],{"class":109},[69,93071,1019],{"class":86},[69,93073,52554],{"class":1022},[69,93075,1026],{"class":86},[69,93077,93078],{"class":71,"line":106},[69,93079,3644],{"emptyLinePlaceholder":1325},[69,93081,93082,93084,93086],{"class":71,"line":116},[69,93083,1011],{"class":86},[69,93085,52567],{"class":348},[69,93087,1026],{"class":86},[69,93089,93090,93092,93094,93096,93098,93100],{"class":71,"line":133},[69,93091,53372],{"class":86},[69,93093,52577],{"class":348},[69,93095,52580],{"class":109},[69,93097,1019],{"class":86},[69,93099,52585],{"class":1022},[69,93101,60353],{"class":86},[69,93103,93104,93106,93108,93110,93112,93114,93116,93118,93120],{"class":71,"line":139},[69,93105,53372],{"class":86},[69,93107,52577],{"class":348},[69,93109,52596],{"class":109},[69,93111,1019],{"class":86},[69,93113,52601],{"class":1022},[69,93115,52604],{"class":109},[69,93117,1019],{"class":86},[69,93119,52609],{"class":1022},[69,93121,60353],{"class":86},[69,93123,93124,93126,93128,93130,93132,93134,93136,93138,93140],{"class":71,"line":401},[69,93125,53372],{"class":86},[69,93127,52577],{"class":348},[69,93129,16160],{"class":109},[69,93131,1019],{"class":86},[69,93133,52624],{"class":1022},[69,93135,52604],{"class":109},[69,93137,1019],{"class":86},[69,93139,52631],{"class":1022},[69,93141,60353],{"class":86},[69,93143,93144,93146,93148,93150,93152,93155,93157,93159,93162],{"class":71,"line":470},[69,93145,53372],{"class":86},[69,93147,52577],{"class":348},[69,93149,16160],{"class":109},[69,93151,1019],{"class":86},[69,93153,93154],{"class":1022},"\"referrer\"",[69,93156,52604],{"class":109},[69,93158,1019],{"class":86},[69,93160,93161],{"class":1022},"\"never\"",[69,93163,60353],{"class":86},[69,93165,93166,93168,93170,93173,93175],{"class":71,"line":475},[69,93167,53372],{"class":86},[69,93169,52640],{"class":348},[69,93171,93172],{"class":86},">综合案例\u003C\u002F",[69,93174,52640],{"class":348},[69,93176,1026],{"class":86},[69,93178,93179,93181,93183],{"class":71,"line":482},[69,93180,53372],{"class":86},[69,93182,1297],{"class":348},[69,93184,1026],{"class":86},[69,93186,93187,93189],{"class":71,"line":497},[69,93188,7645],{"class":348},[69,93190,113],{"class":86},[69,93192,93193,93195,93197,93199],{"class":71,"line":502},[69,93194,55922],{"class":90},[69,93196,94],{"class":86},[69,93198,1583],{"class":90},[69,93200,130],{"class":86},[69,93202,93203,93205,93207,93209],{"class":71,"line":509},[69,93204,55933],{"class":90},[69,93206,94],{"class":86},[69,93208,1583],{"class":90},[69,93210,130],{"class":86},[69,93212,93213,93215,93217,93219],{"class":71,"line":524},[69,93214,73817],{"class":90},[69,93216,94],{"class":86},[69,93218,61731],{"class":90},[69,93220,130],{"class":86},[69,93222,93223],{"class":71,"line":2888},[69,93224,3431],{"class":86},[69,93226,93227],{"class":71,"line":2893},[69,93228,3644],{"emptyLinePlaceholder":1325},[69,93230,93231,93234],{"class":71,"line":2899},[69,93232,93233],{"class":109},"    .container",[69,93235,113],{"class":86},[69,93237,93238,93240,93242,93245,93247],{"class":71,"line":2919},[69,93239,55998],{"class":90},[69,93241,94],{"class":86},[69,93243,93244],{"class":90},"1200",[69,93246,100],{"class":82},[69,93248,130],{"class":86},[69,93250,93251,93253,93255,93257,93259],{"class":71,"line":2924},[69,93252,55933],{"class":90},[69,93254,94],{"class":86},[69,93256,1583],{"class":90},[69,93258,52787],{"class":90},[69,93260,130],{"class":86},[69,93262,93263],{"class":71,"line":2938},[69,93264,3431],{"class":86},[69,93266,93267],{"class":71,"line":2943},[69,93268,3644],{"emptyLinePlaceholder":1325},[69,93270,93271,93274,93277],{"class":71,"line":2972},[69,93272,93273],{"class":109},"    .video",[69,93275,93276],{"class":348}," video",[69,93278,113],{"class":86},[69,93280,93281,93283,93285,93287,93289],{"class":71,"line":2977},[69,93282,55998],{"class":90},[69,93284,94],{"class":86},[69,93286,124],{"class":90},[69,93288,127],{"class":82},[69,93290,130],{"class":86},[69,93292,93293,93295,93297,93299,93301,93303],{"class":71,"line":2994},[69,93294,55922],{"class":90},[69,93296,94],{"class":86},[69,93298,2087],{"class":90},[69,93300,100],{"class":82},[69,93302,5337],{"class":90},[69,93304,130],{"class":86},[69,93306,93307],{"class":71,"line":2999},[69,93308,3431],{"class":86},[69,93310,93311],{"class":71,"line":3004},[69,93312,3644],{"emptyLinePlaceholder":1325},[69,93314,93315,93318],{"class":71,"line":3009},[69,93316,93317],{"class":109},"    .elevator",[69,93319,113],{"class":86},[69,93321,93322,93324,93326,93328],{"class":71,"line":3023},[69,93323,55986],{"class":90},[69,93325,94],{"class":86},[69,93327,87454],{"class":90},[69,93329,130],{"class":86},[69,93331,93332,93334,93336,93339,93341],{"class":71,"line":3028},[69,93333,56174],{"class":90},[69,93335,94],{"class":86},[69,93337,93338],{"class":90},"280",[69,93340,100],{"class":82},[69,93342,130],{"class":86},[69,93344,93345,93347,93349,93351,93353],{"class":71,"line":3821},[69,93346,87648],{"class":90},[69,93348,94],{"class":86},[69,93350,2087],{"class":90},[69,93352,100],{"class":82},[69,93354,130],{"class":86},[69,93356,93357,93359,93361,93363],{"class":71,"line":3835},[69,93358,87461],{"class":90},[69,93360,94],{"class":86},[69,93362,87466],{"class":90},[69,93364,130],{"class":86},[69,93366,93367,93369,93371,93373],{"class":71,"line":3843},[69,93368,62947],{"class":90},[69,93370,94],{"class":86},[69,93372,62068],{"class":90},[69,93374,130],{"class":86},[69,93376,93377,93379,93381,93383,93385,93387,93389],{"class":71,"line":3848},[69,93378,63203],{"class":90},[69,93380,94],{"class":86},[69,93382,1609],{"class":90},[69,93384,100],{"class":82},[69,93386,52752],{"class":90},[69,93388,63470],{"class":90},[69,93390,130],{"class":86},[69,93392,93393,93395,93397,93399,93401],{"class":71,"line":3854},[69,93394,55998],{"class":90},[69,93396,94],{"class":86},[69,93398,2294],{"class":90},[69,93400,100],{"class":82},[69,93402,130],{"class":86},[69,93404,93405],{"class":71,"line":3860},[69,93406,3431],{"class":86},[69,93408,93409],{"class":71,"line":3865},[69,93410,3644],{"emptyLinePlaceholder":1325},[69,93412,93413,93415,93417],{"class":71,"line":9190},[69,93414,93317],{"class":109},[69,93416,2650],{"class":348},[69,93418,113],{"class":86},[69,93420,93421,93423,93425,93427],{"class":71,"line":9214},[69,93422,56236],{"class":90},[69,93424,94],{"class":86},[69,93426,62095],{"class":90},[69,93428,130],{"class":86},[69,93430,93431,93433,93435,93437,93439],{"class":71,"line":9219},[69,93432,55922],{"class":90},[69,93434,94],{"class":86},[69,93436,390],{"class":90},[69,93438,100],{"class":82},[69,93440,130],{"class":86},[69,93442,93443,93445,93447,93449],{"class":71,"line":9225},[69,93444,65196],{"class":90},[69,93446,94],{"class":86},[69,93448,55964],{"class":90},[69,93450,130],{"class":86},[69,93452,93453,93455,93457,93459],{"class":71,"line":9252},[69,93454,58513],{"class":90},[69,93456,94],{"class":86},[69,93458,52823],{"class":90},[69,93460,130],{"class":86},[69,93462,93463,93465,93467,93469],{"class":71,"line":9257},[69,93464,58643],{"class":90},[69,93466,94],{"class":86},[69,93468,63296],{"class":90},[69,93470,130],{"class":86},[69,93472,93473],{"class":71,"line":9263},[69,93474,3431],{"class":86},[69,93476,93477],{"class":71,"line":9275},[69,93478,3644],{"emptyLinePlaceholder":1325},[69,93480,93481,93483,93485,93487],{"class":71,"line":9287},[69,93482,93317],{"class":109},[69,93484,2650],{"class":348},[69,93486,65250],{"class":109},[69,93488,113],{"class":86},[69,93490,93491,93493,93495,93498],{"class":71,"line":9299},[69,93492,58643],{"class":90},[69,93494,94],{"class":86},[69,93496,93497],{"class":90},"#1286ff",[69,93499,130],{"class":86},[69,93501,93502],{"class":71,"line":10958},[69,93503,3431],{"class":86},[69,93505,93506,93508,93510],{"class":71,"line":10983},[69,93507,53645],{"class":86},[69,93509,1297],{"class":348},[69,93511,1026],{"class":86},[69,93513,93514,93516,93518],{"class":71,"line":11006},[69,93515,1036],{"class":86},[69,93517,52567],{"class":348},[69,93519,1026],{"class":86},[69,93521,93522],{"class":71,"line":11030},[69,93523,3644],{"emptyLinePlaceholder":1325},[69,93525,93526,93528,93530],{"class":71,"line":11035},[69,93527,1011],{"class":86},[69,93529,680],{"class":348},[69,93531,1026],{"class":86},[69,93533,93534,93536,93538,93540,93542,93545],{"class":71,"line":11040},[69,93535,53372],{"class":86},[69,93537,442],{"class":348},[69,93539,1016],{"class":109},[69,93541,1019],{"class":86},[69,93543,93544],{"class":1022},"\"container\"",[69,93546,1026],{"class":86},[69,93548,93549,93551,93553,93555,93557,93560],{"class":71,"line":11045},[69,93550,52574],{"class":86},[69,93552,442],{"class":348},[69,93554,1016],{"class":109},[69,93556,1019],{"class":86},[69,93558,93559],{"class":1022},"\"header\"",[69,93561,1026],{"class":86},[69,93563,93564,93566,93568,93570,93572,93575],{"class":71,"line":11054},[69,93565,56461],{"class":86},[69,93567,187],{"class":348},[69,93569,62283],{"class":109},[69,93571,1019],{"class":86},[69,93573,93574],{"class":1022},"\"http:\u002F\u002Fpip.itcast.cn\"",[69,93576,1026],{"class":86},[69,93578,93579,93581,93583,93585,93587,93590,93592,93594,93596],{"class":71,"line":11059},[69,93580,56529],{"class":86},[69,93582,24],{"class":348},[69,93584,56466],{"class":109},[69,93586,1019],{"class":86},[69,93588,93589],{"class":1022},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[69,93591,56474],{"class":109},[69,93593,1019],{"class":86},[69,93595,8894],{"class":1022},[69,93597,60353],{"class":86},[69,93599,93600,93602,93604],{"class":71,"line":11065},[69,93601,56634],{"class":86},[69,93603,187],{"class":348},[69,93605,1026],{"class":86},[69,93607,93608,93610,93612],{"class":71,"line":11086},[69,93609,53006],{"class":86},[69,93611,442],{"class":348},[69,93613,1026],{"class":86},[69,93615,93616,93618,93620,93622,93624,93627],{"class":71,"line":11092},[69,93617,52574],{"class":86},[69,93619,442],{"class":348},[69,93621,1016],{"class":109},[69,93623,1019],{"class":86},[69,93625,93626],{"class":1022},"\"video\"",[69,93628,1026],{"class":86},[69,93630,93631,93633,93635,93637,93639,93642,93645,93647,93649],{"class":71,"line":11106},[69,93632,56461],{"class":86},[69,93634,29419],{"class":348},[69,93636,56466],{"class":109},[69,93638,1019],{"class":86},[69,93640,93641],{"class":1022},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[69,93643,93644],{"class":109}," controls",[69,93646,56541],{"class":86},[69,93648,29419],{"class":348},[69,93650,1026],{"class":86},[69,93652,93653,93655,93657],{"class":71,"line":11112},[69,93654,53006],{"class":86},[69,93656,442],{"class":348},[69,93658,1026],{"class":86},[69,93660,93661,93663,93665,93667,93669,93672],{"class":71,"line":11139},[69,93662,52574],{"class":86},[69,93664,442],{"class":348},[69,93666,1016],{"class":109},[69,93668,1019],{"class":86},[69,93670,93671],{"class":1022},"\"elevator\"",[69,93673,1026],{"class":86},[69,93675,93676,93678,93680,93682,93684,93686,93689,93691,93693,93696,93698],{"class":71,"line":11148},[69,93677,56461],{"class":86},[69,93679,187],{"class":348},[69,93681,62283],{"class":109},[69,93683,1019],{"class":86},[69,93685,65462],{"class":1022},[69,93687,93688],{"class":109}," data-ref",[69,93690,1019],{"class":86},[69,93692,93626],{"class":1022},[69,93694,93695],{"class":86},">视频介绍\u003C\u002F",[69,93697,187],{"class":348},[69,93699,1026],{"class":86},[69,93701,93702,93704,93706,93708,93710,93712,93714,93716,93719,93722,93724],{"class":71,"line":11154},[69,93703,56461],{"class":86},[69,93705,187],{"class":348},[69,93707,62283],{"class":109},[69,93709,1019],{"class":86},[69,93711,65462],{"class":1022},[69,93713,93688],{"class":109},[69,93715,1019],{"class":86},[69,93717,93718],{"class":1022},"\"intro\"",[69,93720,93721],{"class":86},">课程简介\u003C\u002F",[69,93723,187],{"class":348},[69,93725,1026],{"class":86},[69,93727,93728,93730,93732,93734,93736,93738,93740,93742,93745,93748,93750],{"class":71,"line":11162},[69,93729,56461],{"class":86},[69,93731,187],{"class":348},[69,93733,62283],{"class":109},[69,93735,1019],{"class":86},[69,93737,65462],{"class":1022},[69,93739,93688],{"class":109},[69,93741,1019],{"class":86},[69,93743,93744],{"class":1022},"\"outline\"",[69,93746,93747],{"class":86},">评论列表\u003C\u002F",[69,93749,187],{"class":348},[69,93751,1026],{"class":86},[69,93753,93754,93756,93758],{"class":71,"line":11167},[69,93755,53006],{"class":86},[69,93757,442],{"class":348},[69,93759,1026],{"class":86},[69,93761,93762,93764,93766],{"class":71,"line":17843},[69,93763,53645],{"class":86},[69,93765,442],{"class":348},[69,93767,1026],{"class":86},[69,93769,93770,93772,93774,93776,93778,93781,93783,93785],{"class":71,"line":17849},[69,93771,53372],{"class":86},[69,93773,53041],{"class":348},[69,93775,56466],{"class":109},[69,93777,1019],{"class":86},[69,93779,93780],{"class":1022},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[69,93782,56541],{"class":86},[69,93784,53041],{"class":348},[69,93786,1026],{"class":86},[69,93788,93789,93791,93793],{"class":71,"line":17872},[69,93790,53372],{"class":86},[69,93792,53041],{"class":348},[69,93794,1026],{"class":86},[69,93796,93797],{"class":71,"line":17878},[69,93798,93799],{"class":75},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[69,93801,93802,93804,93806,93808,93810,93812,93814,93817],{"class":71,"line":17901},[69,93803,12463],{"class":82},[69,93805,93276],{"class":90},[69,93807,14805],{"class":82},[69,93809,55623],{"class":86},[69,93811,55626],{"class":109},[69,93813,1398],{"class":86},[69,93815,93816],{"class":1022},"'video'",[69,93818,1404],{"class":86},[69,93820,93821],{"class":71,"line":17915},[69,93822,93823],{"class":75},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[69,93825,93826,93829,93831,93833,93835,93838,93840],{"class":71,"line":17935},[69,93827,93828],{"class":86},"    video.ontimeupdate ",[69,93830,1019],{"class":82},[69,93832,89576],{"class":86},[69,93834,92394],{"class":109},[69,93836,93837],{"class":86},"(() ",[69,93839,85943],{"class":82},[69,93841,113],{"class":86},[69,93843,93844],{"class":71,"line":17941},[69,93845,93846],{"class":75},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[69,93848,93849],{"class":71,"line":17952},[69,93850,93851],{"class":75},"      \u002F\u002F 控制台输出当前的时间\n",[69,93853,93854,93857],{"class":71,"line":17975},[69,93855,93856],{"class":75},"      \u002F\u002F console.log(video.currentTime)",[69,93858,93859],{"class":75},"  \u002F\u002F获得当前的视频时间\n",[69,93861,93862],{"class":71,"line":17997},[69,93863,93864],{"class":75},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[69,93866,93867,93869,93871,93873,93876],{"class":71,"line":18002},[69,93868,75904],{"class":86},[69,93870,72875],{"class":109},[69,93872,1398],{"class":86},[69,93874,93875],{"class":1022},"'currentTime'",[69,93877,93878],{"class":86},", video.currentTime)\n",[69,93880,93881,93883,93885],{"class":71,"line":18008},[69,93882,55762],{"class":86},[69,93884,7652],{"class":90},[69,93886,1404],{"class":86},[69,93888,93889],{"class":71,"line":18022},[69,93890,93891],{"class":75},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[69,93893,93894,93897,93900,93902,93905,93907],{"class":71,"line":18035},[69,93895,93896],{"class":86},"    video.",[69,93898,93899],{"class":109},"onloadeddata",[69,93901,14805],{"class":82},[69,93903,93904],{"class":86}," () ",[69,93906,85943],{"class":82},[69,93908,113],{"class":86},[69,93910,93911],{"class":71,"line":18040},[69,93912,61238],{"class":75},[69,93914,93915],{"class":71,"line":18054},[69,93916,93917],{"class":75},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[69,93919,93920,93923,93925,93928,93930,93932,93934,93936,93938],{"class":71,"line":18059},[69,93921,93922],{"class":86},"      video.currentTime ",[69,93924,1019],{"class":82},[69,93926,93927],{"class":86}," localStorage.",[69,93929,72906],{"class":109},[69,93931,1398],{"class":86},[69,93933,93875],{"class":1022},[69,93935,14955],{"class":86},[69,93937,72578],{"class":82},[69,93939,48569],{"class":90},[69,93941,93942],{"class":71,"line":18065},[69,93943,3431],{"class":86},[69,93945,93946,93948,93950],{"class":71,"line":18070},[69,93947,53645],{"class":86},[69,93949,53041],{"class":348},[69,93951,1026],{"class":86},[69,93953,93954,93956,93958],{"class":71,"line":18084},[69,93955,1036],{"class":86},[69,93957,680],{"class":348},[69,93959,1026],{"class":86},[69,93961,93962],{"class":71,"line":18089},[69,93963,3644],{"emptyLinePlaceholder":1325},[69,93965,93966,93968,93970],{"class":71,"line":18094},[69,93967,1036],{"class":86},[69,93969,349],{"class":348},[69,93971,1026],{"class":86},[1297,93973,93974],{},"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":64,"searchDepth":79,"depth":79,"links":93976},[93977,93982,93986,93987,93988,93993,93998,93999,94000,94001,94008,94013,94014,94024,94028,94029,94033],{"id":77912,"depth":79,"text":77913,"children":93978},[93979,93980,93981],{"id":77916,"depth":106,"text":77917},{"id":77941,"depth":106,"text":77942},{"id":77953,"depth":106,"text":77954},{"id":77965,"depth":79,"text":77966,"children":93983},[93984,93985],{"id":77969,"depth":106,"text":77970},{"id":77984,"depth":106,"text":77985},{"id":78036,"depth":79,"text":78037},{"id":78080,"depth":79,"text":78081},{"id":78097,"depth":79,"text":78098,"children":93989},[93990,93991,93992],{"id":78101,"depth":106,"text":78102},{"id":78114,"depth":106,"text":78115},{"id":78219,"depth":106,"text":78220},{"id":78508,"depth":79,"text":78509,"children":93994},[93995,93996,93997],{"id":78512,"depth":106,"text":78513},{"id":78955,"depth":106,"text":78956},{"id":79366,"depth":106,"text":79367},{"id":79429,"depth":79,"text":79430},{"id":79508,"depth":79,"text":79509},{"id":79601,"depth":79,"text":79602},{"id":81446,"depth":79,"text":81447,"children":94002},[94003,94004,94005,94006,94007],{"id":81450,"depth":106,"text":81451},{"id":81462,"depth":106,"text":81463},{"id":81681,"depth":106,"text":81682},{"id":81699,"depth":106,"text":81700},{"id":81759,"depth":106,"text":81760},{"id":86027,"depth":79,"text":86028,"children":94009},[94010,94011,94012],{"id":86031,"depth":106,"text":86032},{"id":86049,"depth":106,"text":86050},{"id":86075,"depth":106,"text":86076},{"id":86084,"depth":79,"text":86085},{"id":86106,"depth":79,"text":86107,"children":94015},[94016,94017,94018,94019,94020,94021,94022,94023],{"id":86110,"depth":106,"text":86111},{"id":86371,"depth":106,"text":86372},{"id":86557,"depth":106,"text":86558},{"id":86924,"depth":106,"text":86925},{"id":87040,"depth":106,"text":87041},{"id":87076,"depth":106,"text":87077},{"id":87123,"depth":106,"text":87124},{"id":87157,"depth":106,"text":87158},{"id":88520,"depth":79,"text":88521,"children":94025},[94026,94027],{"id":88524,"depth":106,"text":88525},{"id":88561,"depth":106,"text":88562},{"id":89916,"depth":79,"text":89917},{"id":90287,"depth":79,"text":90288,"children":94030},[94031,94032],{"id":90291,"depth":106,"text":90292},{"id":90325,"depth":106,"text":90326},{"id":91054,"depth":79,"text":91055,"children":94034},[94035,94036,94037,94038],{"id":91058,"depth":106,"text":91059},{"id":92016,"depth":106,"text":92017},{"id":92958,"depth":106,"text":92959},{"id":93032,"depth":106,"text":93033},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77901,"description":1322},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94045,"title":94046,"body":94047,"description":94058,"extension":1323,"meta":94059,"navigation":1325,"path":94061,"seo":94062,"stem":94063,"__hash__":94064},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94048,"toc":94056},[94049],[29,94050,94051,94052],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[187,94053,94054],{"href":94054,"rel":94055},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[191],{"title":64,"searchDepth":79,"depth":79,"links":94057},[],"三件套第三套学习",{"category":94060},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94046,"description":94058},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94066,"title":94067,"body":94068,"description":1322,"extension":1323,"meta":94173,"navigation":1325,"path":94174,"seo":94175,"stem":94176,"__hash__":94177},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94069,"toc":94168},[94070,94077,94080,94083,94086,94090,94099,94102,94105,94109,94118,94121,94125,94128,94148,94151,94165],[29,94071,94072],{},[187,94073,94076],{"href":94074,"rel":94075},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[191],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94078,94067],{"id":94079},"_1安装",[29,94081,94082],{},"numpy是科学计算基础库,底层是C语言",[29,94084,94085],{},"三种方式：",[14,94087,94089],{"id":94088},"_11-通过pip安装","1.1 通过pip安装",[59,94091,94093],{"className":31614,"code":94092,"language":31616,"meta":64,"style":64},"pip install numpy\n",[66,94094,94095],{"__ignoreMap":64},[69,94096,94097],{"class":71,"line":72},[69,94098,94092],{"class":86},[29,94100,94101],{},"首选方式，自动处理依赖项",[29,94103,94104],{},"在提示系统命令符中使用cmd",[14,94106,94108],{"id":94107},"_12-通过anaconda安装","1.2 通过Anaconda安装",[59,94110,94112],{"className":31614,"code":94111,"language":31616,"meta":64,"style":64},"conda install numpy\n",[66,94113,94114],{"__ignoreMap":64},[69,94115,94116],{"class":71,"line":72},[69,94117,94111],{"class":86},[29,94119,94120],{},"自动解决环境依赖",[14,94122,94124],{"id":94123},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[29,94126,94127],{},"对于Debian\u002FUbuntu",[59,94129,94131],{"className":31614,"code":94130,"language":31616,"meta":64,"style":64},"sudo apt-get install python3-numpy\n",[66,94132,94133],{"__ignoreMap":64},[69,94134,94135,94138,94140,94143,94145],{"class":71,"line":72},[69,94136,94137],{"class":86},"sudo apt",[69,94139,1920],{"class":82},[69,94141,94142],{"class":86},"get install python3",[69,94144,1920],{"class":82},[69,94146,94147],{"class":86},"numpy\n",[29,94149,94150],{},"对于Fedora:",[59,94152,94154],{"className":31614,"code":94153,"language":31616,"meta":64,"style":64},"sudo dnf install python3-numpy\n",[66,94155,94156],{"__ignoreMap":64},[69,94157,94158,94161,94163],{"class":71,"line":72},[69,94159,94160],{"class":86},"sudo dnf install python3",[69,94162,1920],{"class":82},[69,94164,94147],{"class":86},[1297,94166,94167],{},"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":64,"searchDepth":79,"depth":79,"links":94169},[94170,94171,94172],{"id":94088,"depth":79,"text":94089},{"id":94107,"depth":79,"text":94108},{"id":94123,"depth":79,"text":94124},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94067,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94179,"title":94180,"body":94181,"description":1322,"extension":1323,"meta":94294,"navigation":1325,"path":94295,"seo":94296,"stem":94297,"__hash__":94298},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94182,"toc":94292},[94183,94186,94189,94192,94195,94198,94201,94204,94207,94210,94286,94289],[10,94184,94180],{"id":94185},"_10算数函数",[29,94187,94188],{},"加减乘除运算跟python基础语法没区别",[29,94190,94191],{},"除了python那种方法外还可以使用函数",[29,94193,94194],{},"加：np.add(a,b)",[29,94196,94197],{},"减：np.subtract(a,b)",[29,94199,94200],{},"乘：np.multiply(a,b)",[29,94202,94203],{},"除：np.divide(a,b) == a\u002Fb",[29,94205,94206],{},"取余：np.mod(a,b) == a%b",[29,94208,94209],{},"必须会的用法：",[59,94211,94213],{"className":31614,"code":94212,"language":31616,"meta":64,"style":64},"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",[66,94214,94215,94237,94258,94268,94281],{"__ignoreMap":64},[69,94216,94217,94219,94221,94224,94226,94229,94231,94233,94235],{"class":71,"line":72},[69,94218,187],{"class":86},[69,94220,1019],{"class":82},[69,94222,94223],{"class":86},"np.arange(",[69,94225,1809],{"class":90},[69,94227,94228],{"class":86},").reshape(",[69,94230,1465],{"class":90},[69,94232,1767],{"class":86},[69,94234,1465],{"class":90},[69,94236,1404],{"class":86},[69,94238,94239,94241,94243,94246,94248,94250,94252,94254,94256],{"class":71,"line":79},[69,94240,1654],{"class":86},[69,94242,1019],{"class":82},[69,94244,94245],{"class":86},"np.array([",[69,94247,390],{"class":90},[69,94249,1767],{"class":86},[69,94251,390],{"class":90},[69,94253,1767],{"class":86},[69,94255,390],{"class":90},[69,94257,5901],{"class":86},[69,94259,94260,94263,94265],{"class":71,"line":106},[69,94261,94262],{"class":86},"result",[69,94264,1019],{"class":82},[69,94266,94267],{"class":86},"np.empty_like(a)\n",[69,94269,94270,94273,94276,94278],{"class":71,"line":116},[69,94271,94272],{"class":86},"np.add(a,b,",[69,94274,94275],{"class":6458},"out",[69,94277,1019],{"class":82},[69,94279,94280],{"class":86},"result)\n",[69,94282,94283],{"class":71,"line":133},[69,94284,94285],{"class":86},"result\n",[29,94287,94288],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1297,94290,94291],{},"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":64,"searchDepth":79,"depth":79,"links":94293},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94180,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94300,"title":94301,"body":94302,"description":1322,"extension":1323,"meta":95064,"navigation":1325,"path":95065,"seo":95066,"stem":95067,"__hash__":95068},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94303,"toc":95051},[94304,94307,94310,94313,94317,94356,94360,94404,94464,94468,94471,94510,94513,94558,94562,94598,94602,94671,94675,94739,94743,94746,94749,94752,94755,94791,94795,94835,94839,94911,94914,94918,94981,94985,95048],[10,94305,94301],{"id":94306},"_11统计函数",[29,94308,94309],{},"sum max min mean",[29,94311,94312],{},"这些有axis参数，可以指定方向",[14,94314,94316],{"id":94315},"_111-sum求和函数","11.1 sum()求和函数",[59,94318,94320],{"className":31614,"code":94319,"language":31616,"meta":64,"style":64},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[66,94321,94322,94327,94348],{"__ignoreMap":64},[69,94323,94324],{"class":71,"line":72},[69,94325,94326],{"class":75},"#创建一维数组\n",[69,94328,94329,94331,94333,94336,94338,94340,94342,94344,94346],{"class":71,"line":79},[69,94330,187],{"class":86},[69,94332,1019],{"class":82},[69,94334,94335],{"class":86},"np.random.randint(",[69,94337,1609],{"class":90},[69,94339,1767],{"class":86},[69,94341,124],{"class":90},[69,94343,1767],{"class":86},[69,94345,2087],{"class":90},[69,94347,1404],{"class":86},[69,94349,94350,94353],{"class":71,"line":106},[69,94351,94352],{"class":86},"np.sum(a)",[69,94354,94355],{"class":75},"#求和\n",[14,94357,94359],{"id":94358},"_112-max求最大值函数","11.2 max()求最大值函数",[59,94361,94363],{"className":31614,"code":94362,"language":31616,"meta":64,"style":64},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[66,94364,94365,94369,94389,94394,94399],{"__ignoreMap":64},[69,94366,94367],{"class":71,"line":72},[69,94368,94326],{"class":75},[69,94370,94371,94373,94375,94377,94379,94381,94383,94385,94387],{"class":71,"line":79},[69,94372,187],{"class":86},[69,94374,1019],{"class":82},[69,94376,94335],{"class":86},[69,94378,1609],{"class":90},[69,94380,1767],{"class":86},[69,94382,124],{"class":90},[69,94384,1767],{"class":86},[69,94386,2087],{"class":90},[69,94388,1404],{"class":86},[69,94390,94391],{"class":71,"line":106},[69,94392,94393],{"class":86},"np.max(a)\n",[69,94395,94396],{"class":71,"line":116},[69,94397,94398],{"class":75},"#最大索引(求最大元素的索引)arg\n",[69,94400,94401],{"class":71,"line":133},[69,94402,94403],{"class":86},"np.argmax(a)\n",[59,94405,94407],{"className":31614,"code":94406,"language":31616,"meta":64,"style":64},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[66,94408,94409,94430,94450,94454],{"__ignoreMap":64},[69,94410,94411,94413,94415,94418,94420,94422,94424,94426,94428],{"class":71,"line":72},[69,94412,12161],{"class":86},[69,94414,1019],{"class":82},[69,94416,94417],{"class":86}," np.array([",[69,94419,1609],{"class":90},[69,94421,13677],{"class":86},[69,94423,1709],{"class":90},[69,94425,13677],{"class":86},[69,94427,1465],{"class":90},[69,94429,5901],{"class":86},[69,94431,94432,94434,94436,94438,94440,94442,94444,94446,94448],{"class":71,"line":79},[69,94433,12187],{"class":86},[69,94435,1019],{"class":82},[69,94437,94417],{"class":86},[69,94439,1465],{"class":90},[69,94441,13677],{"class":86},[69,94443,1471],{"class":90},[69,94445,13677],{"class":86},[69,94447,1684],{"class":90},[69,94449,5901],{"class":86},[69,94451,94452],{"class":71,"line":106},[69,94453,3644],{"emptyLinePlaceholder":1325},[69,94455,94456,94458,94461],{"class":71,"line":116},[69,94457,31651],{"class":90},[69,94459,94460],{"class":86},"(np.maximum(a, b))   ",[69,94462,94463],{"class":75},"# [3 5 4]，每个位置上取较大值\n",[14,94465,94467],{"id":94466},"_113-mean求平均值函数","11.3 mean()求平均值函数",[29,94469,94470],{},"①一维数组：",[59,94472,94474],{"className":31614,"code":94473,"language":31616,"meta":64,"style":64},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[66,94475,94476,94480,94500,94505],{"__ignoreMap":64},[69,94477,94478],{"class":71,"line":72},[69,94479,94326],{"class":75},[69,94481,94482,94484,94486,94488,94490,94492,94494,94496,94498],{"class":71,"line":79},[69,94483,187],{"class":86},[69,94485,1019],{"class":82},[69,94487,94335],{"class":86},[69,94489,1609],{"class":90},[69,94491,1767],{"class":86},[69,94493,124],{"class":90},[69,94495,1767],{"class":86},[69,94497,2087],{"class":90},[69,94499,1404],{"class":86},[69,94501,94502],{"class":71,"line":106},[69,94503,94504],{"class":75},"#求平均值\n",[69,94506,94507],{"class":71,"line":116},[69,94508,94509],{"class":86},"np.mean(a)\n",[29,94511,94512],{},"②二维数组",[59,94514,94516],{"className":31614,"code":94515,"language":31616,"meta":64,"style":64},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[66,94517,94518,94523,94548,94553],{"__ignoreMap":64},[69,94519,94520],{"class":71,"line":72},[69,94521,94522],{"class":75},"#二维数组\n",[69,94524,94525,94528,94530,94532,94534,94536,94538,94540,94542,94544,94546],{"class":71,"line":79},[69,94526,94527],{"class":86},"aa",[69,94529,1019],{"class":82},[69,94531,94223],{"class":86},[69,94533,1609],{"class":90},[69,94535,1767],{"class":86},[69,94537,1911],{"class":90},[69,94539,94228],{"class":86},[69,94541,1465],{"class":90},[69,94543,1767],{"class":86},[69,94545,1684],{"class":90},[69,94547,1404],{"class":86},[69,94549,94550],{"class":71,"line":106},[69,94551,94552],{"class":75},"#对数组中的所有数求平均\n",[69,94554,94555],{"class":71,"line":116},[69,94556,94557],{"class":86},"np.mean(aa)\n",[14,94559,94561],{"id":94560},"_114-median求中位数函数","11.4 median()求中位数函数",[59,94563,94565],{"className":31614,"code":94564,"language":31616,"meta":64,"style":64},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[66,94566,94567,94572,94588,94593],{"__ignoreMap":64},[69,94568,94569],{"class":71,"line":72},[69,94570,94571],{"class":75},"#求中位数\n",[69,94573,94574,94576,94578,94580,94582,94584,94586],{"class":71,"line":79},[69,94575,1654],{"class":86},[69,94577,1019],{"class":82},[69,94579,94223],{"class":86},[69,94581,1609],{"class":90},[69,94583,1767],{"class":86},[69,94585,390],{"class":90},[69,94587,1404],{"class":86},[69,94589,94590],{"class":71,"line":106},[69,94591,94592],{"class":86},"np.median(b)\n",[69,94594,94595],{"class":71,"line":116},[69,94596,94597],{"class":75},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94599,94601],{"id":94600},"_115-power求幂运算函数","11.5 power()求幂运算函数",[59,94603,94605],{"className":31614,"code":94604,"language":31616,"meta":64,"style":64},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[66,94606,94607,94623,94628,94633,94642,94647,94656],{"__ignoreMap":64},[69,94608,94609,94611,94613,94615,94617,94619,94621],{"class":71,"line":72},[69,94610,1654],{"class":86},[69,94612,1019],{"class":82},[69,94614,94223],{"class":86},[69,94616,1609],{"class":90},[69,94618,1767],{"class":86},[69,94620,390],{"class":90},[69,94622,1404],{"class":86},[69,94624,94625],{"class":71,"line":79},[69,94626,94627],{"class":75},"#幂运算\n",[69,94629,94630],{"class":71,"line":106},[69,94631,94632],{"class":75},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[69,94634,94635,94638,94640],{"class":71,"line":116},[69,94636,94637],{"class":86},"np.power(b,",[69,94639,1471],{"class":90},[69,94641,1404],{"class":86},[69,94643,94644],{"class":71,"line":133},[69,94645,94646],{"class":75},"#或者以下代码，将数据存储起来\n",[69,94648,94649,94651,94653],{"class":71,"line":139},[69,94650,2232],{"class":86},[69,94652,1019],{"class":82},[69,94654,94655],{"class":86},"np.empty_like(b)\n",[69,94657,94658,94660,94662,94664,94666,94668],{"class":71,"line":401},[69,94659,94637],{"class":86},[69,94661,1471],{"class":90},[69,94663,1767],{"class":86},[69,94665,94275],{"class":6458},[69,94667,1019],{"class":82},[69,94669,94670],{"class":86},"y)\n",[14,94672,94674],{"id":94673},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[59,94676,94678],{"className":31614,"code":94677,"language":31616,"meta":64,"style":64},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[66,94679,94680,94696,94701,94706,94710,94728],{"__ignoreMap":64},[69,94681,94682,94684,94686,94688,94690,94692,94694],{"class":71,"line":72},[69,94683,1654],{"class":86},[69,94685,1019],{"class":82},[69,94687,94223],{"class":86},[69,94689,1609],{"class":90},[69,94691,1767],{"class":86},[69,94693,390],{"class":90},[69,94695,1404],{"class":86},[69,94697,94698],{"class":71,"line":79},[69,94699,94700],{"class":75},"#开方\n",[69,94702,94703],{"class":71,"line":106},[69,94704,94705],{"class":86},"np.sqrt(b)\n",[69,94707,94708],{"class":71,"line":116},[69,94709,94646],{"class":75},[69,94711,94712,94714,94716,94719,94722,94724,94726],{"class":71,"line":133},[69,94713,2232],{"class":86},[69,94715,1019],{"class":82},[69,94717,94718],{"class":86},"np.empty_like(b,",[69,94720,94721],{"class":6458},"dtype",[69,94723,1019],{"class":82},[69,94725,1436],{"class":90},[69,94727,1404],{"class":86},[69,94729,94730,94733,94735,94737],{"class":71,"line":139},[69,94731,94732],{"class":86},"np.sqrt(b,",[69,94734,94275],{"class":6458},[69,94736,1019],{"class":82},[69,94738,94670],{"class":86},[14,94740,94742],{"id":94741},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[29,94744,94745],{},"对数组中的元素累计求和，可指定轴",[29,94747,94748],{},"#累计求和的意思是：",[29,94750,94751],{},"a = np.array([1, 2, 3, 4])",[29,94753,94754],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[59,94756,94758],{"className":31614,"code":94757,"language":31616,"meta":64,"style":64},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[66,94759,94760,94776,94781,94786],{"__ignoreMap":64},[69,94761,94762,94764,94766,94768,94770,94772,94774],{"class":71,"line":72},[69,94763,1654],{"class":86},[69,94765,1019],{"class":82},[69,94767,94223],{"class":86},[69,94769,1609],{"class":90},[69,94771,1767],{"class":86},[69,94773,390],{"class":90},[69,94775,1404],{"class":86},[69,94777,94778],{"class":71,"line":79},[69,94779,94780],{"class":86},"np.cumsum(b)\n",[69,94782,94783],{"class":71,"line":106},[69,94784,94785],{"class":75},"#结果：\n",[69,94787,94788],{"class":71,"line":116},[69,94789,94790],{"class":75},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94792,94794],{"id":94793},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[59,94796,94798],{"className":31614,"code":94797,"language":31616,"meta":64,"style":64},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[66,94799,94800,94816,94821,94826,94830],{"__ignoreMap":64},[69,94801,94802,94804,94806,94808,94810,94812,94814],{"class":71,"line":72},[69,94803,1654],{"class":86},[69,94805,1019],{"class":82},[69,94807,94223],{"class":86},[69,94809,1609],{"class":90},[69,94811,1767],{"class":86},[69,94813,390],{"class":90},[69,94815,1404],{"class":86},[69,94817,94818],{"class":71,"line":79},[69,94819,94820],{"class":75},"#对数组中的元素累计求积，可指定轴\n",[69,94822,94823],{"class":71,"line":106},[69,94824,94825],{"class":86},"np.cumprod(b)\n",[69,94827,94828],{"class":71,"line":116},[69,94829,94785],{"class":75},[69,94831,94832],{"class":71,"line":133},[69,94833,94834],{"class":75},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94836,94838],{"id":94837},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[59,94840,94842],{"className":31614,"code":94841,"language":31616,"meta":64,"style":64},"#删除数组中的重复数据，并对数据进行排序\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",[66,94843,94844,94849,94897,94902,94906],{"__ignoreMap":64},[69,94845,94846],{"class":71,"line":72},[69,94847,94848],{"class":75},"#删除数组中的重复数据，并对数据进行排序\n",[69,94850,94851,94853,94855,94857,94859,94861,94863,94865,94867,94869,94871,94873,94875,94877,94879,94881,94883,94885,94887,94889,94891,94893,94895],{"class":71,"line":79},[69,94852,187],{"class":86},[69,94854,1019],{"class":82},[69,94856,94245],{"class":86},[69,94858,1609],{"class":90},[69,94860,1767],{"class":86},[69,94862,1471],{"class":90},[69,94864,1767],{"class":86},[69,94866,1465],{"class":90},[69,94868,1767],{"class":86},[69,94870,1886],{"class":90},[69,94872,1767],{"class":86},[69,94874,1465],{"class":90},[69,94876,1767],{"class":86},[69,94878,390],{"class":90},[69,94880,1767],{"class":86},[69,94882,1589],{"class":90},[69,94884,1767],{"class":86},[69,94886,1583],{"class":90},[69,94888,1767],{"class":86},[69,94890,2162],{"class":90},[69,94892,1767],{"class":86},[69,94894,1684],{"class":90},[69,94896,5901],{"class":86},[69,94898,94899],{"class":71,"line":106},[69,94900,94901],{"class":86},"np.unique(a)\n",[69,94903,94904],{"class":71,"line":116},[69,94905,94785],{"class":75},[69,94907,94908],{"class":71,"line":133},[69,94909,94910],{"class":75},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[29,94912,94913],{},"升序形式排序",[14,94915,94917],{"id":94916},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[59,94919,94921],{"className":31614,"code":94920,"language":31616,"meta":64,"style":64},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[66,94922,94923,94971,94976],{"__ignoreMap":64},[69,94924,94925,94927,94929,94931,94933,94935,94937,94939,94941,94943,94945,94947,94949,94951,94953,94955,94957,94959,94961,94963,94965,94967,94969],{"class":71,"line":72},[69,94926,187],{"class":86},[69,94928,1019],{"class":82},[69,94930,94245],{"class":86},[69,94932,1609],{"class":90},[69,94934,1767],{"class":86},[69,94936,1471],{"class":90},[69,94938,1767],{"class":86},[69,94940,1465],{"class":90},[69,94942,1767],{"class":86},[69,94944,1886],{"class":90},[69,94946,1767],{"class":86},[69,94948,1465],{"class":90},[69,94950,1767],{"class":86},[69,94952,390],{"class":90},[69,94954,1767],{"class":86},[69,94956,1589],{"class":90},[69,94958,1767],{"class":86},[69,94960,1583],{"class":90},[69,94962,1767],{"class":86},[69,94964,2162],{"class":90},[69,94966,1767],{"class":86},[69,94968,1684],{"class":90},[69,94970,5901],{"class":86},[69,94972,94973],{"class":71,"line":79},[69,94974,94975],{"class":75},"#返回数组中非零元素的索引\n",[69,94977,94978],{"class":71,"line":106},[69,94979,94980],{"class":86},"np.nonzero(a)\n",[14,94982,94984],{"id":94983},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[59,94986,94988],{"className":31614,"code":94987,"language":31616,"meta":64,"style":64},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[66,94989,94990,95038,95043],{"__ignoreMap":64},[69,94991,94992,94994,94996,94998,95000,95002,95004,95006,95008,95010,95012,95014,95016,95018,95020,95022,95024,95026,95028,95030,95032,95034,95036],{"class":71,"line":72},[69,94993,187],{"class":86},[69,94995,1019],{"class":82},[69,94997,94245],{"class":86},[69,94999,1609],{"class":90},[69,95001,1767],{"class":86},[69,95003,1471],{"class":90},[69,95005,1767],{"class":86},[69,95007,1465],{"class":90},[69,95009,1767],{"class":86},[69,95011,1886],{"class":90},[69,95013,1767],{"class":86},[69,95015,1465],{"class":90},[69,95017,1767],{"class":86},[69,95019,390],{"class":90},[69,95021,1767],{"class":86},[69,95023,1589],{"class":90},[69,95025,1767],{"class":86},[69,95027,1583],{"class":90},[69,95029,1767],{"class":86},[69,95031,2162],{"class":90},[69,95033,1767],{"class":86},[69,95035,1684],{"class":90},[69,95037,5901],{"class":86},[69,95039,95040],{"class":71,"line":79},[69,95041,95042],{"class":75},"#计算一组数中最大值与最小值的差，可指定轴\n",[69,95044,95045],{"class":71,"line":106},[69,95046,95047],{"class":86},"np.ptp(a)\n",[1297,95049,95050],{},"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":64,"searchDepth":79,"depth":79,"links":95052},[95053,95054,95055,95056,95057,95058,95059,95060,95061,95062,95063],{"id":94315,"depth":79,"text":94316},{"id":94358,"depth":79,"text":94359},{"id":94466,"depth":79,"text":94467},{"id":94560,"depth":79,"text":94561},{"id":94600,"depth":79,"text":94601},{"id":94673,"depth":79,"text":94674},{"id":94741,"depth":79,"text":94742},{"id":94793,"depth":79,"text":94794},{"id":94837,"depth":79,"text":94838},{"id":94916,"depth":79,"text":94917},{"id":94983,"depth":79,"text":94984},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94301,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95070,"title":95071,"body":95072,"description":1322,"extension":1323,"meta":95727,"navigation":1325,"path":95728,"seo":95729,"stem":95730,"__hash__":95731},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95073,"toc":95715},[95074,95077,95081,95084,95300,95304,95307,95516,95520,95586,95591,95595,95598,95601,95639,95643,95646,95651,95655,95658,95661,95666,95670,95673,95677,95680,95683,95688,95692,95695,95698,95703,95707,95712],[10,95075,95071],{"id":95076},"_12其他常用函数",[14,95078,95080],{"id":95079},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[29,95082,95083],{},"将数组的数据按照行列复制扩展",[59,95085,95087],{"className":31614,"code":95086,"language":31616,"meta":64,"style":64},"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",[66,95088,95089,95105,95114,95118,95123,95128,95141,95145,95150,95155,95160,95164,95169,95193,95205,95209,95213,95218,95223,95228,95233,95237,95250,95254,95258,95263,95268,95273,95278,95283,95287,95291,95296],{"__ignoreMap":64},[69,95090,95091,95093,95095,95097,95099,95101,95103],{"class":71,"line":72},[69,95092,187],{"class":86},[69,95094,1019],{"class":82},[69,95096,94223],{"class":86},[69,95098,1609],{"class":90},[69,95100,1767],{"class":86},[69,95102,1709],{"class":90},[69,95104,1404],{"class":86},[69,95106,95107,95110,95112],{"class":71,"line":79},[69,95108,95109],{"class":86},"np.tile(a,",[69,95111,1471],{"class":90},[69,95113,1404],{"class":86},[69,95115,95116],{"class":71,"line":106},[69,95117,94785],{"class":75},[69,95119,95120],{"class":71,"line":116},[69,95121,95122],{"class":75},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[69,95124,95125],{"class":71,"line":133},[69,95126,95127],{"class":75},"#行复制两次，列复制三次\n",[69,95129,95130,95133,95135,95137,95139],{"class":71,"line":139},[69,95131,95132],{"class":86},"np.tile(a,(",[69,95134,1471],{"class":90},[69,95136,1767],{"class":86},[69,95138,1465],{"class":90},[69,95140,31733],{"class":86},[69,95142,95143],{"class":71,"line":401},[69,95144,94785],{"class":75},[69,95146,95147],{"class":71,"line":470},[69,95148,95149],{"class":1022},"'''\n",[69,95151,95152],{"class":71,"line":475},[69,95153,95154],{"class":1022},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[69,95156,95157],{"class":71,"line":482},[69,95158,95159],{"class":1022},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[69,95161,95162],{"class":71,"line":497},[69,95163,95149],{"class":1022},[69,95165,95166],{"class":71,"line":502},[69,95167,95168],{"class":75},"#创建二维数组\n",[69,95170,95171,95173,95175,95177,95179,95181,95183,95185,95187,95189,95191],{"class":71,"line":509},[69,95172,94527],{"class":86},[69,95174,1019],{"class":82},[69,95176,94223],{"class":86},[69,95178,1609],{"class":90},[69,95180,1767],{"class":86},[69,95182,1911],{"class":90},[69,95184,94228],{"class":86},[69,95186,1684],{"class":90},[69,95188,1767],{"class":86},[69,95190,1465],{"class":90},[69,95192,1404],{"class":86},[69,95194,95195,95198,95200,95202],{"class":71,"line":524},[69,95196,95197],{"class":86},"np.tile(aa,",[69,95199,1471],{"class":90},[69,95201,1818],{"class":86},[69,95203,95204],{"class":75},"#一个数的时候就是行\n",[69,95206,95207],{"class":71,"line":2888},[69,95208,94785],{"class":75},[69,95210,95211],{"class":71,"line":2893},[69,95212,95149],{"class":1022},[69,95214,95215],{"class":71,"line":2899},[69,95216,95217],{"class":1022},"array([[ 1,  2,  3,  1,  2,  3],\n",[69,95219,95220],{"class":71,"line":2919},[69,95221,95222],{"class":1022},"       [ 4,  5,  6,  4,  5,  6],\n",[69,95224,95225],{"class":71,"line":2924},[69,95226,95227],{"class":1022},"       [ 7,  8,  9,  7,  8,  9],\n",[69,95229,95230],{"class":71,"line":2938},[69,95231,95232],{"class":1022},"       [10, 11, 12, 10, 11, 12]])\n",[69,95234,95235],{"class":71,"line":2943},[69,95236,95149],{"class":1022},[69,95238,95239,95242,95244,95246,95248],{"class":71,"line":2972},[69,95240,95241],{"class":86},"np.tile(aa,(",[69,95243,1471],{"class":90},[69,95245,1767],{"class":86},[69,95247,1465],{"class":90},[69,95249,31733],{"class":86},[69,95251,95252],{"class":71,"line":2977},[69,95253,94785],{"class":75},[69,95255,95256],{"class":71,"line":2994},[69,95257,95149],{"class":1022},[69,95259,95260],{"class":71,"line":2999},[69,95261,95262],{"class":1022},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[69,95264,95265],{"class":71,"line":3004},[69,95266,95267],{"class":1022},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[69,95269,95270],{"class":71,"line":3009},[69,95271,95272],{"class":1022},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[69,95274,95275],{"class":71,"line":3023},[69,95276,95277],{"class":1022},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[69,95279,95280],{"class":71,"line":3028},[69,95281,95282],{"class":1022},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[69,95284,95285],{"class":71,"line":3821},[69,95286,95267],{"class":1022},[69,95288,95289],{"class":71,"line":3835},[69,95290,95272],{"class":1022},[69,95292,95293],{"class":71,"line":3843},[69,95294,95295],{"class":1022},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[69,95297,95298],{"class":71,"line":3848},[69,95299,95149],{"class":1022},[14,95301,95303],{"id":95302},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[29,95305,95306],{},"repeat()将数组中的每个元素重复若干次",[59,95308,95310],{"className":31614,"code":95309,"language":31616,"meta":64,"style":64},"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",[66,95311,95312,95328,95337,95341,95346,95370,95375,95384,95388,95393,95397,95402,95418,95422,95426,95431,95436,95441,95445,95450,95454,95459,95464,95468,95484,95488,95492,95497,95502,95507,95512],{"__ignoreMap":64},[69,95313,95314,95316,95318,95320,95322,95324,95326],{"class":71,"line":72},[69,95315,187],{"class":86},[69,95317,1019],{"class":82},[69,95319,94223],{"class":86},[69,95321,1609],{"class":90},[69,95323,1767],{"class":86},[69,95325,1709],{"class":90},[69,95327,1404],{"class":86},[69,95329,95330,95333,95335],{"class":71,"line":79},[69,95331,95332],{"class":86},"np.repeat(a,",[69,95334,1465],{"class":90},[69,95336,1404],{"class":86},[69,95338,95339],{"class":71,"line":106},[69,95340,94785],{"class":75},[69,95342,95343],{"class":71,"line":116},[69,95344,95345],{"class":75},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[69,95347,95348,95350,95352,95354,95356,95358,95360,95362,95364,95366,95368],{"class":71,"line":133},[69,95349,94527],{"class":86},[69,95351,1019],{"class":82},[69,95353,94223],{"class":86},[69,95355,1609],{"class":90},[69,95357,1767],{"class":86},[69,95359,1911],{"class":90},[69,95361,94228],{"class":86},[69,95363,1684],{"class":90},[69,95365,1767],{"class":86},[69,95367,1465],{"class":90},[69,95369,1404],{"class":86},[69,95371,95372],{"class":71,"line":139},[69,95373,95374],{"class":75},"#这个重复之后二维变成一维\n",[69,95376,95377,95380,95382],{"class":71,"line":401},[69,95378,95379],{"class":86},"np.repeat(aa,",[69,95381,1471],{"class":90},[69,95383,1404],{"class":86},[69,95385,95386],{"class":71,"line":470},[69,95387,95149],{"class":1022},[69,95389,95390],{"class":71,"line":475},[69,95391,95392],{"class":1022},"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",[69,95394,95395],{"class":71,"line":482},[69,95396,95149],{"class":1022},[69,95398,95399],{"class":71,"line":497},[69,95400,95401],{"class":75},"#指定axis\n",[69,95403,95404,95406,95408,95410,95412,95414,95416],{"class":71,"line":502},[69,95405,95379],{"class":86},[69,95407,1471],{"class":90},[69,95409,1767],{"class":86},[69,95411,48750],{"class":6458},[69,95413,1019],{"class":82},[69,95415,1583],{"class":90},[69,95417,1404],{"class":86},[69,95419,95420],{"class":71,"line":509},[69,95421,94785],{"class":75},[69,95423,95424],{"class":71,"line":524},[69,95425,95149],{"class":1022},[69,95427,95428],{"class":71,"line":2888},[69,95429,95430],{"class":1022},"array([[ 1,  2,  3],\n",[69,95432,95433],{"class":71,"line":2893},[69,95434,95435],{"class":1022},"       [ 1,  2,  3],\n",[69,95437,95438],{"class":71,"line":2899},[69,95439,95440],{"class":1022},"       [ 4,  5,  6],\n",[69,95442,95443],{"class":71,"line":2919},[69,95444,95440],{"class":1022},[69,95446,95447],{"class":71,"line":2924},[69,95448,95449],{"class":1022},"       [ 7,  8,  9],\n",[69,95451,95452],{"class":71,"line":2938},[69,95453,95449],{"class":1022},[69,95455,95456],{"class":71,"line":2943},[69,95457,95458],{"class":1022},"       [10, 11, 12],\n",[69,95460,95461],{"class":71,"line":2972},[69,95462,95463],{"class":1022},"       [10, 11, 12]])\n",[69,95465,95466],{"class":71,"line":2977},[69,95467,95149],{"class":1022},[69,95469,95470,95472,95474,95476,95478,95480,95482],{"class":71,"line":2994},[69,95471,95379],{"class":86},[69,95473,1471],{"class":90},[69,95475,1767],{"class":86},[69,95477,48750],{"class":6458},[69,95479,1019],{"class":82},[69,95481,1609],{"class":90},[69,95483,1404],{"class":86},[69,95485,95486],{"class":71,"line":2999},[69,95487,94785],{"class":75},[69,95489,95490],{"class":71,"line":3004},[69,95491,95149],{"class":1022},[69,95493,95494],{"class":71,"line":3009},[69,95495,95496],{"class":1022},"array([[ 1,  1,  2,  2,  3,  3],\n",[69,95498,95499],{"class":71,"line":3023},[69,95500,95501],{"class":1022},"       [ 4,  4,  5,  5,  6,  6],\n",[69,95503,95504],{"class":71,"line":3028},[69,95505,95506],{"class":1022},"       [ 7,  7,  8,  8,  9,  9],\n",[69,95508,95509],{"class":71,"line":3821},[69,95510,95511],{"class":1022},"       [10, 10, 11, 11, 12, 12]])\n",[69,95513,95514],{"class":71,"line":3835},[69,95515,95149],{"class":1022},[14,95517,95519],{"id":95518},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[59,95521,95523],{"className":31614,"code":95522,"language":31616,"meta":64,"style":64},"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",[66,95524,95525,95541,95546,95558,95562,95567,95577,95581],{"__ignoreMap":64},[69,95526,95527,95529,95531,95533,95535,95537,95539],{"class":71,"line":72},[69,95528,187],{"class":86},[69,95530,1019],{"class":82},[69,95532,94223],{"class":86},[69,95534,1609],{"class":90},[69,95536,1767],{"class":86},[69,95538,1709],{"class":90},[69,95540,1404],{"class":86},[69,95542,95543],{"class":71,"line":79},[69,95544,95545],{"class":75},"#array([，2，3，4])\n",[69,95547,95548,95551,95553,95555],{"class":71,"line":106},[69,95549,95550],{"class":86},"np.roll(a,",[69,95552,1471],{"class":90},[69,95554,1818],{"class":86},[69,95556,95557],{"class":75},"#传正数向后调多少位，传负数向前调多少位\n",[69,95559,95560],{"class":71,"line":116},[69,95561,94785],{"class":75},[69,95563,95564],{"class":71,"line":133},[69,95565,95566],{"class":75},"#array([3, 4, 1, 2])\n",[69,95568,95569,95571,95573,95575],{"class":71,"line":139},[69,95570,95550],{"class":86},[69,95572,1920],{"class":82},[69,95574,1609],{"class":90},[69,95576,1404],{"class":86},[69,95578,95579],{"class":71,"line":401},[69,95580,94785],{"class":75},[69,95582,95583],{"class":71,"line":470},[69,95584,95585],{"class":75},"#array([2, 3, 4, 1])\n",[29,95587,95588],{},[24,95589],{"alt":64,"src":95590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95592,95594],{"id":95593},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[29,95596,95597],{},"resize()重新调整数组的大小",[29,95599,95600],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[59,95602,95604],{"className":31614,"code":95603,"language":31616,"meta":64,"style":64},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[66,95605,95606,95611,95624],{"__ignoreMap":64},[69,95607,95608],{"class":71,"line":72},[69,95609,95610],{"class":75},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[69,95612,95613,95616,95618,95620,95622],{"class":71,"line":79},[69,95614,95615],{"class":86},"np.resize(aa,(",[69,95617,1471],{"class":90},[69,95619,1767],{"class":86},[69,95621,1733],{"class":90},[69,95623,31733],{"class":86},[69,95625,95626,95628,95630,95632,95634,95636],{"class":71,"line":106},[69,95627,95615],{"class":86},[69,95629,1471],{"class":90},[69,95631,1767],{"class":86},[69,95633,1809],{"class":90},[69,95635,83992],{"class":86},[69,95637,95638],{"class":75},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95640,95642],{"id":95641},"_125-placeput函数","12.5 place()\u002Fput()函数",[29,95644,95645],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[29,95647,95648],{},[24,95649],{"alt":64,"src":95650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95652,95654],{"id":95653},"_126-保存加载文件","12.6 保存加载文件",[29,95656,95657],{},"savetxt():将数据保存到txt文件中",[29,95659,95660],{},"loadtxt():从文件加载数据",[29,95662,95663],{},[24,95664],{"alt":64,"src":95665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95667,95669],{"id":95668},"_127-genfromtxt函数","12.7 genfromtxt()函数",[29,95671,95672],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95674,95676],{"id":95675},"_128-anyall函数","12.8 any()\u002Fall()函数",[29,95678,95679],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[29,95681,95682],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[29,95684,95685],{},[24,95686],{"alt":64,"src":95687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95689,95691],{"id":95690},"_129-where语句","12.9 where语句",[29,95693,95694],{},"np.where(条件,x,y)",[29,95696,95697],{},"如果条件为True,对应值为x,否则对应值为y",[29,95699,95700],{},[24,95701],{"alt":64,"src":95702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95704,95706],{"id":95705},"_1210-dot矩阵","12.10 dot()矩阵",[29,95708,95709],{},[24,95710],{"alt":64,"src":95711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1297,95713,95714],{},"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":64,"searchDepth":79,"depth":79,"links":95716},[95717,95718,95719,95720,95721,95722,95723,95724,95725,95726],{"id":95079,"depth":79,"text":95080},{"id":95302,"depth":79,"text":95303},{"id":95518,"depth":79,"text":95519},{"id":95593,"depth":79,"text":95594},{"id":95641,"depth":79,"text":95642},{"id":95653,"depth":79,"text":95654},{"id":95668,"depth":79,"text":95669},{"id":95675,"depth":79,"text":95676},{"id":95690,"depth":79,"text":95691},{"id":95705,"depth":79,"text":95706},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95071,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95733,"title":95734,"body":95735,"description":1322,"extension":1323,"meta":96088,"navigation":1325,"path":96089,"seo":96090,"stem":96091,"__hash__":96092},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95736,"toc":96086},[95737,95740,95743,95746,95749,95752,95817,95819,96083],[10,95738,95734],{"id":95739},"_13数组排序",[29,95741,95742],{},"排序主要用到的方法是np.sort和np.argsort",[29,95744,95745],{},"其中np.sort()对数组直接排序",[29,95747,95748],{},"而np.argsort()是返回排序后的原始索引",[29,95750,95751],{},"①一维数组",[59,95753,95755],{"className":31614,"code":95754,"language":31616,"meta":64,"style":64},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[66,95756,95757,95761,95801,95809],{"__ignoreMap":64},[69,95758,95759],{"class":71,"line":72},[69,95760,94326],{"class":75},[69,95762,95763,95765,95767,95769,95771,95773,95775,95777,95779,95781,95783,95785,95787,95789,95791,95793,95795,95797,95799],{"class":71,"line":79},[69,95764,187],{"class":86},[69,95766,1019],{"class":82},[69,95768,94245],{"class":86},[69,95770,1465],{"class":90},[69,95772,1767],{"class":86},[69,95774,1886],{"class":90},[69,95776,1767],{"class":86},[69,95778,1784],{"class":90},[69,95780,1767],{"class":86},[69,95782,2162],{"class":90},[69,95784,1767],{"class":86},[69,95786,1670],{"class":90},[69,95788,1767],{"class":86},[69,95790,2280],{"class":90},[69,95792,1767],{"class":86},[69,95794,1733],{"class":90},[69,95796,1767],{"class":86},[69,95798,390],{"class":90},[69,95800,5901],{"class":86},[69,95802,95803,95806],{"class":71,"line":106},[69,95804,95805],{"class":86},"np.sort(a)",[69,95807,95808],{"class":75},"#升序排序\n",[69,95810,95811,95814],{"class":71,"line":116},[69,95812,95813],{"class":86},"np.argsort(a)",[69,95815,95816],{"class":75},"#按照元素大小来索引排序\n",[29,95818,94512],{},[59,95820,95822],{"className":31614,"code":95821,"language":31616,"meta":64,"style":64},"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",[66,95823,95824,95836,95862,95867,95871,95876,95881,95886,95891,95895,95903,95907,95912,95917,95922,95927,95931,95936,95949,95953,95958,95963,95968,95973,95977,95982,95994,95998,96002,96006,96010,96014,96018,96023,96038,96043,96052,96057,96061,96065,96070,96074,96079],{"__ignoreMap":64},[69,95825,95826,95829,95831,95833],{"class":71,"line":72},[69,95827,95828],{"class":86},"np.random.seed(",[69,95830,1583],{"class":90},[69,95832,1818],{"class":86},[69,95834,95835],{"class":75},"#保证每次值一样\n",[69,95837,95838,95840,95842,95844,95846,95848,95850,95852,95854,95856,95858,95860],{"class":71,"line":79},[69,95839,94527],{"class":86},[69,95841,1019],{"class":82},[69,95843,94335],{"class":86},[69,95845,124],{"class":90},[69,95847,1767],{"class":86},[69,95849,32732],{"class":6458},[69,95851,1019],{"class":82},[69,95853,1398],{"class":86},[69,95855,1684],{"class":90},[69,95857,1767],{"class":86},[69,95859,1733],{"class":90},[69,95861,31733],{"class":86},[69,95863,95864],{"class":71,"line":106},[69,95865,95866],{"class":75},"#原数组：\n",[69,95868,95869],{"class":71,"line":116},[69,95870,95149],{"class":1022},[69,95872,95873],{"class":71,"line":133},[69,95874,95875],{"class":1022},"array([[44, 47, 64, 67, 67,  9],\n",[69,95877,95878],{"class":71,"line":139},[69,95879,95880],{"class":1022},"       [83, 21, 36, 87, 70, 88],\n",[69,95882,95883],{"class":71,"line":401},[69,95884,95885],{"class":1022},"       [88, 12, 58, 65, 39, 87],\n",[69,95887,95888],{"class":71,"line":470},[69,95889,95890],{"class":1022},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[69,95892,95893],{"class":71,"line":475},[69,95894,95149],{"class":1022},[69,95896,95897,95900],{"class":71,"line":482},[69,95898,95899],{"class":86},"np.sort(aa)",[69,95901,95902],{"class":75},"#每行进行了排序\n",[69,95904,95905],{"class":71,"line":497},[69,95906,95149],{"class":1022},[69,95908,95909],{"class":71,"line":502},[69,95910,95911],{"class":1022},"array([[ 9, 44, 47, 64, 67, 67],\n",[69,95913,95914],{"class":71,"line":509},[69,95915,95916],{"class":1022},"       [21, 36, 70, 83, 87, 88],\n",[69,95918,95919],{"class":71,"line":524},[69,95920,95921],{"class":1022},"       [12, 39, 58, 65, 87, 88],\n",[69,95923,95924],{"class":71,"line":2888},[69,95925,95926],{"class":1022},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[69,95928,95929],{"class":71,"line":2893},[69,95930,95149],{"class":1022},[69,95932,95933],{"class":71,"line":2899},[69,95934,95935],{"class":75},"#axis=0时\n",[69,95937,95938,95941,95943,95945,95947],{"class":71,"line":2919},[69,95939,95940],{"class":86},"np.sort(aa,",[69,95942,48750],{"class":6458},[69,95944,1019],{"class":82},[69,95946,1583],{"class":90},[69,95948,1404],{"class":86},[69,95950,95951],{"class":71,"line":2924},[69,95952,95149],{"class":1022},[69,95954,95955],{"class":71,"line":2938},[69,95956,95957],{"class":1022},"array([[44, 12, 36, 37, 25,  9],\n",[69,95959,95960],{"class":71,"line":2943},[69,95961,95962],{"class":1022},"       [46, 21, 58, 65, 39, 77],\n",[69,95964,95965],{"class":71,"line":2972},[69,95966,95967],{"class":1022},"       [83, 47, 64, 67, 67, 87],\n",[69,95969,95970],{"class":71,"line":2977},[69,95971,95972],{"class":1022},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[69,95974,95975],{"class":71,"line":2994},[69,95976,95149],{"class":1022},[69,95978,95979],{"class":71,"line":2999},[69,95980,95981],{"class":75},"#axis=1时,为默认值\n",[69,95983,95984,95986,95988,95990,95992],{"class":71,"line":3004},[69,95985,95940],{"class":86},[69,95987,48750],{"class":6458},[69,95989,1019],{"class":82},[69,95991,1609],{"class":90},[69,95993,1404],{"class":86},[69,95995,95996],{"class":71,"line":3009},[69,95997,95149],{"class":1022},[69,95999,96000],{"class":71,"line":3023},[69,96001,95911],{"class":1022},[69,96003,96004],{"class":71,"line":3028},[69,96005,95916],{"class":1022},[69,96007,96008],{"class":71,"line":3821},[69,96009,95921],{"class":1022},[69,96011,96012],{"class":71,"line":3835},[69,96013,95926],{"class":1022},[69,96015,96016],{"class":71,"line":3843},[69,96017,95149],{"class":1022},[69,96019,96020],{"class":71,"line":3848},[69,96021,96022],{"class":75},"#按最后一列排序\n",[69,96024,96025,96027,96029,96032,96034,96036],{"class":71,"line":3854},[69,96026,1654],{"class":86},[69,96028,1019],{"class":82},[69,96030,96031],{"class":86},"aa[:,",[69,96033,1920],{"class":82},[69,96035,1609],{"class":90},[69,96037,34482],{"class":86},[69,96039,96040],{"class":71,"line":3860},[69,96041,96042],{"class":75},"#获取最后一列排好序的索引\n",[69,96044,96045,96047,96049],{"class":71,"line":3865},[69,96046,75279],{"class":86},[69,96048,1019],{"class":82},[69,96050,96051],{"class":86},"np.argsort(b)\n",[69,96053,96054],{"class":71,"line":9190},[69,96055,96056],{"class":86},"aa[index]\n",[69,96058,96059],{"class":71,"line":9214},[69,96060,95149],{"class":1022},[69,96062,96063],{"class":71,"line":9219},[69,96064,95875],{"class":1022},[69,96066,96067],{"class":71,"line":9225},[69,96068,96069],{"class":1022},"       [46, 88, 81, 37, 25, 77],\n",[69,96071,96072],{"class":71,"line":9252},[69,96073,95885],{"class":1022},[69,96075,96076],{"class":71,"line":9257},[69,96077,96078],{"class":1022},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[69,96080,96081],{"class":71,"line":9263},[69,96082,95149],{"class":1022},[1297,96084,96085],{},"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":64,"searchDepth":79,"depth":79,"links":96087},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95734,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96094,"title":96095,"body":96096,"description":1322,"extension":1323,"meta":96126,"navigation":1325,"path":96127,"seo":96128,"stem":96129,"__hash__":96130},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96097,"toc":96124},[96098,96101,96104,96107,96110,96113,96116,96119],[10,96099,96095],{"id":96100},"_14广播机制",[29,96102,96103],{},"广播的规则：",[29,96105,96106],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[29,96108,96109],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[29,96111,96112],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[29,96114,96115],{},"3.如果没有维度形状为1，则会引发异常",[29,96117,96118],{},"也就是只有维度或者个数为1才可以进行广播操作",[29,96120,96121],{},[24,96122],{"alt":64,"src":96123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":64,"searchDepth":79,"depth":79,"links":96125},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96095,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96132,"title":96133,"body":96134,"description":1322,"extension":1323,"meta":96232,"navigation":1325,"path":96233,"seo":96234,"stem":96235,"__hash__":96236},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96135,"toc":96230},[96136,96139,96142,96227],[10,96137,96133],{"id":96138},"_15比较掩码",[29,96140,96141],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[59,96143,96145],{"className":31614,"code":96144,"language":31616,"meta":64,"style":64},"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",[66,96146,96147,96193,96204,96218,96222],{"__ignoreMap":64},[69,96148,96149,96151,96153,96156,96158,96160,96162,96164,96166,96168,96170,96172,96174,96176,96178,96180,96182,96184,96186,96188,96190],{"class":71,"line":72},[69,96150,187],{"class":86},[69,96152,1019],{"class":82},[69,96154,96155],{"class":86},"np.array([[",[69,96157,1609],{"class":90},[69,96159,1767],{"class":86},[69,96161,1471],{"class":90},[69,96163,1767],{"class":86},[69,96165,1465],{"class":90},[69,96167,49266],{"class":86},[69,96169,1860],{"class":90},[69,96171,1767],{"class":86},[69,96173,1886],{"class":90},[69,96175,1767],{"class":86},[69,96177,1911],{"class":90},[69,96179,49266],{"class":86},[69,96181,2112],{"class":90},[69,96183,1767],{"class":86},[69,96185,2137],{"class":90},[69,96187,1767],{"class":86},[69,96189,2162],{"class":90},[69,96191,96192],{"class":86},"]])\n",[69,96194,96195,96197,96199,96201],{"class":71,"line":79},[69,96196,187],{"class":86},[69,96198,1011],{"class":82},[69,96200,2087],{"class":90},[69,96202,96203],{"class":75},"#结果是一个由True,False组成的数组\n",[69,96205,96206,96209,96211,96213,96215],{"class":71,"line":106},[69,96207,96208],{"class":86},"a[a",[69,96210,1011],{"class":82},[69,96212,2087],{"class":90},[69,96214,2326],{"class":86},[69,96216,96217],{"class":75},"#小于20的元素会存到这个数组中\n",[69,96219,96220],{"class":71,"line":116},[69,96221,94785],{"class":75},[69,96223,96224],{"class":71,"line":133},[69,96225,96226],{"class":75},"#array([ 1,  2,  3, 11, 12, 13])\n",[1297,96228,96229],{},"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":64,"searchDepth":79,"depth":79,"links":96231},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96133,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96238,"title":96239,"body":96240,"description":1322,"extension":1323,"meta":96332,"navigation":1325,"path":96333,"seo":96334,"stem":96335,"__hash__":96336},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96241,"toc":96330},[96242,96245,96248,96251,96254,96257,96322,96327],[10,96243,96239],{"id":96244},"_16魔法命令time",[29,96246,96247],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[29,96249,96250],{},"%:行模式",[29,96252,96253],{},"%%:单元格模式",[29,96255,96256],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[59,96258,96260],{"className":31614,"code":96259,"language":31616,"meta":64,"style":64},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[66,96261,96262,96267,96274,96279,96288,96301,96305,96313],{"__ignoreMap":64},[69,96263,96264],{"class":71,"line":72},[69,96265,96266],{"class":75},"#程序执行时间\n",[69,96268,96269,96271],{"class":71,"line":79},[69,96270,31628],{"class":82},[69,96272,96273],{"class":86}," time \n",[69,96275,96276],{"class":71,"line":106},[69,96277,96278],{"class":75},"#获取时间\n",[69,96280,96281,96284,96286],{"class":71,"line":116},[69,96282,96283],{"class":86},"start",[69,96285,1019],{"class":82},[69,96287,33654],{"class":86},[69,96289,96290,96293,96296,96298],{"class":71,"line":133},[69,96291,96292],{"class":86},"time.sleep(",[69,96294,96295],{"class":90},"0.4",[69,96297,1818],{"class":86},[69,96299,96300],{"class":75},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[69,96302,96303],{"class":71,"line":139},[69,96304,96278],{"class":75},[69,96306,96307,96309,96311],{"class":71,"line":401},[69,96308,47037],{"class":86},[69,96310,1019],{"class":82},[69,96312,33654],{"class":86},[69,96314,96315,96317,96319],{"class":71,"line":470},[69,96316,47037],{"class":86},[69,96318,1920],{"class":82},[69,96320,96321],{"class":86},"start\n",[29,96323,96324],{},[24,96325],{"alt":64,"src":96326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1297,96328,96329],{},"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":64,"searchDepth":79,"depth":79,"links":96331},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96239,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96338,"title":96339,"body":96340,"description":1322,"extension":1323,"meta":96375,"navigation":1325,"path":96376,"seo":96377,"stem":96378,"__hash__":96379},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96341,"toc":96373},[96342,96345,96348,96351,96354,96357,96360,96363,96368],[10,96343,96339],{"id":96344},"_17魔法命令timeit",[29,96346,96347],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[29,96349,96350],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[29,96352,96353],{},"单元格模式：",[29,96355,96356],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[29,96358,96359],{},"初始化语句执行次数由轮数来决定",[29,96361,96362],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[29,96364,96365],{},[24,96366],{"alt":64,"src":96367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[29,96369,96370],{},[24,96371],{"alt":64,"src":96372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":64,"searchDepth":79,"depth":79,"links":96374},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96339,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96381,"title":96382,"body":96383,"description":1322,"extension":1323,"meta":96401,"navigation":1325,"path":96402,"seo":96403,"stem":96404,"__hash__":96405},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96384,"toc":96399},[96385,96388,96391,96394],[10,96386,96382],{"id":96387},"_18魔法命令writefile和run",[29,96389,96390],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[29,96392,96393],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[29,96395,96396],{},[24,96397],{"alt":64,"src":96398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":64,"searchDepth":79,"depth":79,"links":96400},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96382,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96407,"title":96408,"body":96409,"description":1322,"extension":1323,"meta":96462,"navigation":1325,"path":96463,"seo":96464,"stem":96465,"__hash__":96466},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96410,"toc":96460},[96411,96414,96417,96419,96422,96425,96430,96433,96436,96439,96442,96445,96448,96451,96454,96457],[10,96412,96408],{"id":96413},"_19魔法命令memit",[29,96415,96416],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[29,96418,25836],{},[29,96420,96421],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[29,96423,96424],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[29,96426,96427],{},[24,96428],{"alt":64,"src":96429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[29,96431,96432],{},"补充：",[29,96434,96435],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[29,96437,96438],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[29,96440,96441],{},"解决方法：",[29,96443,96444],{},"1.cmd",[29,96446,96447],{},"2.依次输入以下代码：",[29,96449,96450],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[29,96452,96453],{},"pip install --upgrade ipython",[29,96455,96456],{},"#升级 memory_profiler 和 setuptools",[29,96458,96459],{},"pip install --upgrade memory_profiler setuptools",{"title":64,"searchDepth":79,"depth":79,"links":96461},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96408,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96468,"title":96469,"body":96470,"description":1322,"extension":1323,"meta":98116,"navigation":1325,"path":98117,"seo":98118,"stem":98119,"__hash__":98120},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96471,"toc":98086},[96472,96475,96479,96483,96544,96547,96552,96556,96561,96566,96571,96576,96579,96584,96588,96592,96625,96628,96631,96634,96686,96689,96725,96728,96770,96774,96795,96797,96834,96836,96841,96843,96848,96852,96855,96883,96887,96891,96944,96948,97040,97044,97048,97051,97056,97060,97085,97090,97094,97097,97100,97103,97106,97109,97112,97115,97127,97131,97135,97138,97170,97173,97196,97199,97225,97228,97254,97257,97291,97294,97356,97360,97363,97367,97370,97396,97399,97402,97407,97410,97479,97481,97486,97547,97550,97561,97567,97572,97576,97579,97592,97596,97611,97613,97636,97638,97664,97667,97670,97673,97721,97723,97728,97732,97736,97763,97767,97794,97797,97802,97807,97897,97901,97959,97964,97967,97970,98012,98016,98072,98077,98080,98083],[10,96473,96469],{"id":96474},"_2创建数组",[14,96476,96478],{"id":96477},"_21-array函数创建数组","2.1 array()函数创建数组",[19,96480,96482],{"id":96481},"_221-函数语句","2.2.1 函数语句",[59,96484,96486],{"className":31614,"code":96485,"language":31616,"meta":64,"style":64},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[66,96487,96488],{"__ignoreMap":64},[69,96489,96490,96493,96496,96498,96500,96502,96504,96506,96509,96511,96514,96516,96519,96521,96523,96525,96528,96530,96533,96535,96538,96540,96542],{"class":71,"line":72},[69,96491,96492],{"class":86},"numpy.array(",[69,96494,96495],{"class":90},"object",[69,96497,13677],{"class":86},[69,96499,94721],{"class":6458},[69,96501,14805],{"class":82},[69,96503,40169],{"class":90},[69,96505,13677],{"class":86},[69,96507,96508],{"class":6458},"copy",[69,96510,14805],{"class":82},[69,96512,96513],{"class":90}," True",[69,96515,13677],{"class":86},[69,96517,96518],{"class":6458},"order",[69,96520,14805],{"class":82},[69,96522,40169],{"class":90},[69,96524,13677],{"class":86},[69,96526,96527],{"class":6458},"subok",[69,96529,14805],{"class":82},[69,96531,96532],{"class":90}," False",[69,96534,13677],{"class":86},[69,96536,96537],{"class":6458},"ndmin",[69,96539,14805],{"class":82},[69,96541,5337],{"class":90},[69,96543,1404],{"class":86},[29,96545,96546],{},"参数：",[29,96548,96549],{},[24,96550],{"alt":64,"src":96551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[19,96553,96555],{"id":96554},"_222-实例","2.2.2 实例",[29,96557,96558],{},[24,96559],{"alt":64,"src":96560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[29,96562,96563],{},[24,96564],{"alt":64,"src":96565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[29,96567,96568],{},[24,96569],{"alt":64,"src":96570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[29,96572,96573],{},[24,96574],{"alt":64,"src":96575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[29,96577,96578],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[29,96580,96581],{},[24,96582],{"alt":64,"src":96583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96585,96587],{"id":96586},"_22-随机数创建数组","2.2 随机数创建数组",[19,96589,96591],{"id":96590},"_221-random语句","2.2.1 random语句",[59,96593,96595],{"className":31614,"code":96594,"language":31616,"meta":64,"style":64},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[66,96596,96597,96602,96607,96615,96620],{"__ignoreMap":64},[69,96598,96599],{"class":71,"line":72},[69,96600,96601],{"class":75},"#random.random()\n",[69,96603,96604],{"class":71,"line":79},[69,96605,96606],{"class":75},"#确定随机种子,就是每次运行结果是相同的\n",[69,96608,96609,96611,96613],{"class":71,"line":106},[69,96610,95828],{"class":86},[69,96612,1583],{"class":90},[69,96614,1404],{"class":86},[69,96616,96617],{"class":71,"line":116},[69,96618,96619],{"class":86},"np.random.random()\n",[69,96621,96622],{"class":71,"line":133},[69,96623,96624],{"class":75},"#生成一个随机的数目\n",[29,96626,96627],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[29,96629,96630],{},"可以指定数组形状 size",[29,96632,96633],{},"①生成一维数组",[59,96635,96637],{"className":31614,"code":96636,"language":31616,"meta":64,"style":64},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[66,96638,96639,96644,96657,96662,96678],{"__ignoreMap":64},[69,96640,96641],{"class":71,"line":72},[69,96642,96643],{"class":75},"#random.random(size())\n",[69,96645,96646,96649,96651,96653,96655],{"class":71,"line":79},[69,96647,96648],{"class":86},"np.random.random(",[69,96650,32732],{"class":6458},[69,96652,1019],{"class":82},[69,96654,1709],{"class":90},[69,96656,1404],{"class":86},[69,96658,96659],{"class":71,"line":106},[69,96660,96661],{"class":75},"#生成一位的五个元素\n",[69,96663,96664,96666,96668,96670,96672,96674,96676],{"class":71,"line":116},[69,96665,187],{"class":86},[69,96667,1019],{"class":82},[69,96669,96648],{"class":86},[69,96671,32732],{"class":6458},[69,96673,1019],{"class":82},[69,96675,1684],{"class":90},[69,96677,1404],{"class":86},[69,96679,96680,96683],{"class":71,"line":133},[69,96681,96682],{"class":86},"a.shape ",[69,96684,96685],{"class":75},"#输出数组形状\n",[29,96687,96688],{},"②生成二维数组",[59,96690,96692],{"className":31614,"code":96691,"language":31616,"meta":64,"style":64},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[66,96693,96694,96698,96720],{"__ignoreMap":64},[69,96695,96696],{"class":71,"line":72},[69,96697,94522],{"class":75},[69,96699,96700,96702,96704,96706,96708,96710,96712,96714,96716,96718],{"class":71,"line":79},[69,96701,94527],{"class":86},[69,96703,1019],{"class":82},[69,96705,96648],{"class":86},[69,96707,32732],{"class":6458},[69,96709,1019],{"class":82},[69,96711,1398],{"class":86},[69,96713,1684],{"class":90},[69,96715,1767],{"class":86},[69,96717,1709],{"class":90},[69,96719,31733],{"class":86},[69,96721,96722],{"class":71,"line":106},[69,96723,96724],{"class":75},"#生成四行五列的数组\n",[29,96726,96727],{},"③生成三维数组",[59,96729,96731],{"className":31614,"code":96730,"language":31616,"meta":64,"style":64},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[66,96732,96733,96738,96765],{"__ignoreMap":64},[69,96734,96735],{"class":71,"line":72},[69,96736,96737],{"class":75},"#三维数组\n",[69,96739,96740,96743,96745,96747,96749,96751,96753,96755,96757,96759,96761,96763],{"class":71,"line":79},[69,96741,96742],{"class":86},"aaa",[69,96744,1019],{"class":82},[69,96746,96648],{"class":86},[69,96748,32732],{"class":6458},[69,96750,1019],{"class":82},[69,96752,1398],{"class":86},[69,96754,1471],{"class":90},[69,96756,1767],{"class":86},[69,96758,1465],{"class":90},[69,96760,1767],{"class":86},[69,96762,1684],{"class":90},[69,96764,31733],{"class":86},[69,96766,96767],{"class":71,"line":106},[69,96768,96769],{"class":86},"aaa.shape\n",[19,96771,96773],{"id":96772},"_222-randint语句","2.2.2 randint语句",[59,96775,96777],{"className":31614,"code":96776,"language":31616,"meta":64,"style":64},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[66,96778,96779,96784],{"__ignoreMap":64},[69,96780,96781],{"class":71,"line":72},[69,96782,96783],{"class":75},"#生成随机的整数 random.randint(low,high,size)\n",[69,96785,96786,96788,96790,96792],{"class":71,"line":79},[69,96787,94335],{"class":86},[69,96789,1709],{"class":90},[69,96791,14955],{"class":86},[69,96793,96794],{"class":75},"#0~5中的随机一个数\n",[29,96796,96633],{},[59,96798,96800],{"className":31614,"code":96799,"language":31616,"meta":64,"style":64},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[66,96801,96802,96807,96829],{"__ignoreMap":64},[69,96803,96804],{"class":71,"line":72},[69,96805,96806],{"class":75},"#一维\n",[69,96808,96809,96811,96813,96815,96817,96819,96821,96823,96825,96827],{"class":71,"line":79},[69,96810,94335],{"class":86},[69,96812,1609],{"class":90},[69,96814,1767],{"class":86},[69,96816,1860],{"class":90},[69,96818,1767],{"class":86},[69,96820,32732],{"class":6458},[69,96822,1019],{"class":82},[69,96824,1398],{"class":86},[69,96826,390],{"class":90},[69,96828,31733],{"class":86},[69,96830,96831],{"class":71,"line":106},[69,96832,96833],{"class":75},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[29,96835,96688],{},[29,96837,96838],{},[24,96839],{"alt":64,"src":96840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[29,96842,96727],{},[29,96844,96845],{},[24,96846],{"alt":64,"src":96847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[19,96849,96851],{"id":96850},"_222-rand语句","2.2.2 rand语句",[29,96853,96854],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[59,96856,96858],{"className":31614,"code":96857,"language":31616,"meta":64,"style":64},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[66,96859,96860,96873,96878],{"__ignoreMap":64},[69,96861,96862,96865,96867,96869,96871],{"class":71,"line":72},[69,96863,96864],{"class":86},"np.random.rand(",[69,96866,124],{"class":90},[69,96868,1767],{"class":86},[69,96870,390],{"class":90},[69,96872,1404],{"class":86},[69,96874,96875],{"class":71,"line":79},[69,96876,96877],{"class":75},"#第一个参数100：行数，表示有100个样本\n",[69,96879,96880],{"class":71,"line":106},[69,96881,96882],{"class":75},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96884,96886],{"id":96885},"_23-arange创建数组","2.3 arange()创建数组",[19,96888,96890],{"id":96889},"_231-函数语句","2.3.1 函数语句",[59,96892,96894],{"className":31614,"code":96893,"language":31616,"meta":64,"style":64},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[66,96895,96896,96910,96915,96920,96925,96930,96935,96940],{"__ignoreMap":64},[69,96897,96898,96901,96903,96905,96908],{"class":71,"line":72},[69,96899,96900],{"class":86},"numpy.arange([start,] stop[, step], ",[69,96902,94721],{"class":6458},[69,96904,1019],{"class":82},[69,96906,96907],{"class":90},"None",[69,96909,1404],{"class":86},[69,96911,96912],{"class":71,"line":79},[69,96913,96914],{"class":75},"#参数\n",[69,96916,96917],{"class":71,"line":106},[69,96918,96919],{"class":1022},"\"\"\"\n",[69,96921,96922],{"class":71,"line":116},[69,96923,96924],{"class":1022},"start:起始值，可选，默认从 0 开始。\n",[69,96926,96927],{"class":71,"line":133},[69,96928,96929],{"class":1022},"stop:结束值（不包含该值）。\n",[69,96931,96932],{"class":71,"line":139},[69,96933,96934],{"class":1022},"step:步长，可选，默认是 1。可以为浮点数。\n",[69,96936,96937],{"class":71,"line":401},[69,96938,96939],{"class":1022},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[69,96941,96942],{"class":71,"line":470},[69,96943,96919],{"class":1022},[19,96945,96947],{"id":96946},"_232-实例","2.3.2 实例",[59,96949,96951],{"className":31614,"code":96950,"language":31616,"meta":64,"style":64},"#创建一维数组\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",[66,96952,96953,96957,96981,96986,96991,96995,97018,97022,97026,97031,97036],{"__ignoreMap":64},[69,96954,96955],{"class":71,"line":72},[69,96956,94326],{"class":75},[69,96958,96959,96961,96963,96965,96967,96969,96971,96973,96975,96977,96979],{"class":71,"line":79},[69,96960,94223],{"class":86},[69,96962,1609],{"class":90},[69,96964,1767],{"class":86},[69,96966,2112],{"class":90},[69,96968,1767],{"class":86},[69,96970,1609],{"class":90},[69,96972,1767],{"class":86},[69,96974,94721],{"class":6458},[69,96976,1019],{"class":82},[69,96978,1401],{"class":90},[69,96980,1404],{"class":86},[69,96982,96983],{"class":71,"line":106},[69,96984,96985],{"class":75},"#输出结果：\n",[69,96987,96988],{"class":71,"line":116},[69,96989,96990],{"class":75},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[69,96992,96993],{"class":71,"line":133},[69,96994,95168],{"class":75},[69,96996,96997,97000,97002,97004,97006,97009,97011,97013,97015],{"class":71,"line":139},[69,96998,96999],{"class":86},"np.array([np.arange(",[69,97001,1609],{"class":90},[69,97003,1767],{"class":86},[69,97005,1684],{"class":90},[69,97007,97008],{"class":86},"),np.arange(",[69,97010,1684],{"class":90},[69,97012,1767],{"class":86},[69,97014,1758],{"class":90},[69,97016,97017],{"class":86},")])\n",[69,97019,97020],{"class":71,"line":401},[69,97021,94785],{"class":75},[69,97023,97024],{"class":71,"line":470},[69,97025,96919],{"class":1022},[69,97027,97028],{"class":71,"line":475},[69,97029,97030],{"class":1022},"array([[1, 2, 3],\n",[69,97032,97033],{"class":71,"line":482},[69,97034,97035],{"class":1022},"       [4, 5, 6]])\n",[69,97037,97038],{"class":71,"line":497},[69,97039,96919],{"class":1022},[14,97041,97043],{"id":97042},"_24-生态分布","2.4 生态分布",[19,97045,97047],{"id":97046},"_241-标准正态分布","2.4.1 标准正态分布",[29,97049,97050],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[29,97052,97053],{},[24,97054],{"alt":64,"src":97055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[19,97057,97059],{"id":97058},"_242-常规正态分布","2.4.2 常规正态分布",[59,97061,97063],{"className":31614,"code":97062,"language":31616,"meta":64,"style":64},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[66,97064,97065,97070,97075,97080],{"__ignoreMap":64},[69,97066,97067],{"class":71,"line":72},[69,97068,97069],{"class":86},"random.normal(loc,scale,size)也可以生成正态分布\n",[69,97071,97072],{"class":71,"line":79},[69,97073,97074],{"class":75},"#loc:期望\n",[69,97076,97077],{"class":71,"line":106},[69,97078,97079],{"class":75},"#scale:方差\n",[69,97081,97082],{"class":71,"line":116},[69,97083,97084],{"class":75},"#size:用于确定是几维的数列\n",[29,97086,97087],{},[24,97088],{"alt":64,"src":97089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97091,97093],{"id":97092},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[29,97095,97096],{},"ndim:秩，维度个数",[29,97098,97099],{},"size:数组元素的个数",[29,97101,97102],{},"shape:数组的形状",[29,97104,97105],{},"dtype:数组元素的类型",[29,97107,97108],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[29,97110,97111],{},"他们都是属性，通过数组.属性的形式来确定",[29,97113,97114],{},"如果需要输出多个可以通过以下方式：",[59,97116,97118],{"className":31614,"code":97117,"language":31616,"meta":64,"style":64},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[66,97119,97120],{"__ignoreMap":64},[69,97121,97122,97124],{"class":71,"line":72},[69,97123,31651],{"class":90},[69,97125,97126],{"class":86},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97128,97130],{"id":97129},"_26-其他方式创建数组","2.6 其他方式创建数组",[19,97132,97134],{"id":97133},"_261-zeros创建数组","2.6.1 zeros()创建数组",[29,97136,97137],{},"①创建一维数组",[59,97139,97141],{"className":31614,"code":97140,"language":31616,"meta":64,"style":64},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[66,97142,97143,97152,97156,97161,97166],{"__ignoreMap":64},[69,97144,97145,97148,97150],{"class":71,"line":72},[69,97146,97147],{"class":86},"np.zeros(",[69,97149,390],{"class":90},[69,97151,1404],{"class":86},[69,97153,97154],{"class":71,"line":79},[69,97155,96919],{"class":1022},[69,97157,97158],{"class":71,"line":106},[69,97159,97160],{"class":1022},"输出结果：\n",[69,97162,97163],{"class":71,"line":116},[69,97164,97165],{"class":1022},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[69,97167,97168],{"class":71,"line":133},[69,97169,96919],{"class":1022},[29,97171,97172],{},"上方代码等价于：",[59,97174,97176],{"className":31614,"code":97175,"language":31616,"meta":64,"style":64},"np.zeros(shape=(10))#创建10个元素的0数组\n",[66,97177,97178],{"__ignoreMap":64},[69,97179,97180,97182,97185,97187,97189,97191,97193],{"class":71,"line":72},[69,97181,97147],{"class":86},[69,97183,97184],{"class":6458},"shape",[69,97186,1019],{"class":82},[69,97188,1398],{"class":86},[69,97190,390],{"class":90},[69,97192,83992],{"class":86},[69,97194,97195],{"class":75},"#创建10个元素的0数组\n",[29,97197,97198],{},"也可以指定类型",[59,97200,97202],{"className":31614,"code":97201,"language":31616,"meta":64,"style":64},"#指定类型\nnp.zeros(5,dtype=int)\n",[66,97203,97204,97209],{"__ignoreMap":64},[69,97205,97206],{"class":71,"line":72},[69,97207,97208],{"class":75},"#指定类型\n",[69,97210,97211,97213,97215,97217,97219,97221,97223],{"class":71,"line":79},[69,97212,97147],{"class":86},[69,97214,1709],{"class":90},[69,97216,1767],{"class":86},[69,97218,94721],{"class":6458},[69,97220,1019],{"class":82},[69,97222,1401],{"class":90},[69,97224,1404],{"class":86},[29,97226,97227],{},"②创建二维数组",[59,97229,97231],{"className":31614,"code":97230,"language":31616,"meta":64,"style":64},"np.zeros((3,4),dtype=int)\n",[66,97232,97233],{"__ignoreMap":64},[69,97234,97235,97238,97240,97242,97244,97246,97248,97250,97252],{"class":71,"line":72},[69,97236,97237],{"class":86},"np.zeros((",[69,97239,1465],{"class":90},[69,97241,1767],{"class":86},[69,97243,1684],{"class":90},[69,97245,43492],{"class":86},[69,97247,94721],{"class":6458},[69,97249,1019],{"class":82},[69,97251,1401],{"class":90},[69,97253,1404],{"class":86},[29,97255,97256],{},"③创建三维数组",[59,97258,97260],{"className":31614,"code":97259,"language":31616,"meta":64,"style":64},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[66,97261,97262,97267],{"__ignoreMap":64},[69,97263,97264],{"class":71,"line":72},[69,97265,97266],{"class":75},"#创建三维数组\n",[69,97268,97269,97271,97273,97275,97277,97279,97281,97283,97285,97287,97289],{"class":71,"line":79},[69,97270,97237],{"class":86},[69,97272,1465],{"class":90},[69,97274,1767],{"class":86},[69,97276,1684],{"class":90},[69,97278,1767],{"class":86},[69,97280,1709],{"class":90},[69,97282,43492],{"class":86},[69,97284,94721],{"class":6458},[69,97286,1019],{"class":82},[69,97288,1401],{"class":90},[69,97290,1404],{"class":86},[29,97292,97293],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[59,97295,97297],{"className":31614,"code":97296,"language":31616,"meta":64,"style":64},"#使用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",[66,97298,97299,97304,97319,97324,97329,97351],{"__ignoreMap":64},[69,97300,97301],{"class":71,"line":72},[69,97302,97303],{"class":75},"#使用zeros_like将创建的一维数组变成全0的数组\n",[69,97305,97306,97308,97310,97312,97314,97316],{"class":71,"line":79},[69,97307,187],{"class":86},[69,97309,1019],{"class":82},[69,97311,94223],{"class":86},[69,97313,1684],{"class":90},[69,97315,1818],{"class":86},[69,97317,97318],{"class":75},"#这个得到的结果：一维数组0，1，2，3\n",[69,97320,97321],{"class":71,"line":106},[69,97322,97323],{"class":86},"np.zeros_like(a)\n",[69,97325,97326],{"class":71,"line":116},[69,97327,97328],{"class":75},"#使用zeros_like将创建的二维数组变成全0的数组\n",[69,97330,97331,97333,97335,97337,97339,97341,97343,97345,97347,97349],{"class":71,"line":133},[69,97332,94527],{"class":86},[69,97334,1019],{"class":82},[69,97336,96648],{"class":86},[69,97338,32732],{"class":6458},[69,97340,1019],{"class":82},[69,97342,1398],{"class":86},[69,97344,1684],{"class":90},[69,97346,1767],{"class":86},[69,97348,1709],{"class":90},[69,97350,31733],{"class":86},[69,97352,97353],{"class":71,"line":139},[69,97354,97355],{"class":86},"np.zeros_like(aa)\n",[19,97357,97359],{"id":97358},"_262-ones创建数组","2.6.2 ones()创建数组",[29,97361,97362],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[19,97364,97366],{"id":97365},"_263-empty创建数组","2.6.3 empty()创建数组",[29,97368,97369],{},"①empty()用法",[59,97371,97373],{"className":31614,"code":97372,"language":31616,"meta":64,"style":64},"numpy.empty(shape,dtype=float,order='c')\n",[66,97374,97375],{"__ignoreMap":64},[69,97376,97377,97380,97382,97384,97386,97388,97390,97392,97394],{"class":71,"line":72},[69,97378,97379],{"class":86},"numpy.empty(shape,",[69,97381,94721],{"class":6458},[69,97383,1019],{"class":82},[69,97385,1436],{"class":90},[69,97387,1767],{"class":86},[69,97389,96518],{"class":6458},[69,97391,1019],{"class":82},[69,97393,77249],{"class":1022},[69,97395,1404],{"class":86},[29,97397,97398],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[29,97400,97401],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[29,97403,97404],{},[24,97405],{"alt":64,"src":97406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[29,97408,97409],{},"②empty()用法",[59,97411,97413],{"className":31614,"code":97412,"language":31616,"meta":64,"style":64},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[66,97414,97415,97436,97448,97469,97474],{"__ignoreMap":64},[69,97416,97417,97419,97421,97424,97426,97428,97430,97432,97434],{"class":71,"line":72},[69,97418,2232],{"class":86},[69,97420,1019],{"class":82},[69,97422,97423],{"class":86},"np.empty(",[69,97425,390],{"class":90},[69,97427,1767],{"class":86},[69,97429,94721],{"class":6458},[69,97431,1019],{"class":82},[69,97433,1401],{"class":90},[69,97435,1404],{"class":86},[69,97437,97438,97440,97442,97444,97446],{"class":71,"line":79},[69,97439,2207],{"class":86},[69,97441,1019],{"class":82},[69,97443,94223],{"class":86},[69,97445,1709],{"class":90},[69,97447,1404],{"class":86},[69,97449,97450,97453,97455,97458,97460,97462,97465,97467],{"class":71,"line":106},[69,97451,97452],{"class":86},"np.add(",[69,97454,1471],{"class":90},[69,97456,97457],{"class":86},",x,",[69,97459,94275],{"class":6458},[69,97461,1019],{"class":82},[69,97463,97464],{"class":86},"y[:",[69,97466,1709],{"class":90},[69,97468,5901],{"class":86},[69,97470,97471],{"class":71,"line":116},[69,97472,97473],{"class":75},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[69,97475,97476],{"class":71,"line":133},[69,97477,97478],{"class":86},"y\n",[29,97480,12756],{},[29,97482,97483],{},[24,97484],{"alt":64,"src":97485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[59,97487,97489],{"className":31614,"code":97488,"language":31616,"meta":64,"style":64},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[66,97490,97491,97507,97527,97542],{"__ignoreMap":64},[69,97492,97493,97495,97497,97499,97501,97503,97505],{"class":71,"line":72},[69,97494,2207],{"class":86},[69,97496,1019],{"class":82},[69,97498,94223],{"class":86},[69,97500,1609],{"class":90},[69,97502,1767],{"class":86},[69,97504,1733],{"class":90},[69,97506,1404],{"class":86},[69,97508,97509,97511,97513,97515,97517,97519,97521,97523,97525],{"class":71,"line":79},[69,97510,2232],{"class":86},[69,97512,1019],{"class":82},[69,97514,97423],{"class":86},[69,97516,1709],{"class":90},[69,97518,1767],{"class":86},[69,97520,94721],{"class":6458},[69,97522,1019],{"class":82},[69,97524,1401],{"class":90},[69,97526,1404],{"class":86},[69,97528,97529,97532,97534,97536,97538,97540],{"class":71,"line":106},[69,97530,97531],{"class":86},"np.add(x,",[69,97533,1471],{"class":90},[69,97535,1767],{"class":86},[69,97537,94275],{"class":6458},[69,97539,1019],{"class":82},[69,97541,94670],{"class":86},[69,97543,97544],{"class":71,"line":116},[69,97545,97546],{"class":75},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[29,97548,97549],{},"③empty_like()",[29,97551,97552],{},[195,97553,97554,97555,97560],{},"创建一个",[195,97556,97557],{},[195,97558,97559],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[29,97562,97563,97566],{},[66,97564,97565],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[29,97568,97569],{},[24,97570],{"alt":64,"src":97571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[19,97573,97575],{"id":97574},"_264-用法","2.6.4 ？？用法",[29,97577,97578],{},"当想查看一个函数的参数时，可以通过？？来实现",[59,97580,97582],{"className":31614,"code":97581,"language":31616,"meta":64,"style":64},"np.full??\n",[66,97583,97584],{"__ignoreMap":64},[69,97585,97586,97589],{"class":71,"line":72},[69,97587,97588],{"class":86},"np.full",[69,97590,97591],{"class":78624},"??\n",[19,97593,97595],{"id":97594},"_265-full创建数组","2.6.5 full()创建数组",[59,97597,97599],{"className":31614,"code":97598,"language":31616,"meta":64,"style":64},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[66,97600,97601,97606],{"__ignoreMap":64},[69,97602,97603],{"class":71,"line":72},[69,97604,97605],{"class":86},"full(shape,fill_value)\n",[69,97607,97608],{"class":71,"line":79},[69,97609,97610],{"class":86},"创建全为某个指定值的数组\n",[29,97612,95751],{},[59,97614,97616],{"className":31614,"code":97615,"language":31616,"meta":64,"style":64},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[66,97617,97618,97623],{"__ignoreMap":64},[69,97619,97620],{"class":71,"line":72},[69,97621,97622],{"class":75},"#创建一个一维数组,以20进行填充\n",[69,97624,97625,97628,97630,97632,97634],{"class":71,"line":79},[69,97626,97627],{"class":86},"np.full(",[69,97629,390],{"class":90},[69,97631,1767],{"class":86},[69,97633,2087],{"class":90},[69,97635,1404],{"class":86},[29,97637,94512],{},[59,97639,97641],{"className":31614,"code":97640,"language":31616,"meta":64,"style":64},"#创建二维数组\nnp.full((3,5),11)\n",[66,97642,97643,97647],{"__ignoreMap":64},[69,97644,97645],{"class":71,"line":72},[69,97646,95168],{"class":75},[69,97648,97649,97652,97654,97656,97658,97660,97662],{"class":71,"line":79},[69,97650,97651],{"class":86},"np.full((",[69,97653,1465],{"class":90},[69,97655,1767],{"class":86},[69,97657,1709],{"class":90},[69,97659,43492],{"class":86},[69,97661,1860],{"class":90},[69,97663,1404],{"class":86},[29,97665,97666],{},"③full_like用法",[29,97668,97669],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[29,97671,97672],{},"这里是指定填充而已",[59,97674,97676],{"className":31614,"code":97675,"language":31616,"meta":64,"style":64},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[66,97677,97678,97683,97707,97712],{"__ignoreMap":64},[69,97679,97680],{"class":71,"line":72},[69,97681,97682],{"class":75},"#创建一个指定形状数组\n",[69,97684,97685,97687,97689,97691,97693,97695,97697,97699,97701,97703,97705],{"class":71,"line":79},[69,97686,187],{"class":86},[69,97688,1019],{"class":82},[69,97690,94223],{"class":86},[69,97692,1609],{"class":90},[69,97694,1767],{"class":86},[69,97696,1715],{"class":90},[69,97698,94228],{"class":86},[69,97700,1684],{"class":90},[69,97702,1767],{"class":86},[69,97704,1809],{"class":90},[69,97706,1404],{"class":86},[69,97708,97709],{"class":71,"line":106},[69,97710,97711],{"class":75},"#进行指定填充\n",[69,97713,97714,97717,97719],{"class":71,"line":116},[69,97715,97716],{"class":86},"np.full_like(a,",[69,97718,390],{"class":90},[69,97720,1404],{"class":86},[29,97722,12756],{},[29,97724,97725],{},[24,97726],{"alt":64,"src":97727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[19,97729,97731],{"id":97730},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23237,97733,97735],{"id":97734},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[59,97737,97739],{"className":31614,"code":97738,"language":31616,"meta":64,"style":64},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[66,97740,97741,97758],{"__ignoreMap":64},[69,97742,97743,97746,97748,97750,97752,97754,97756],{"class":71,"line":72},[69,97744,97745],{"class":86},"np.eye(",[69,97747,1684],{"class":90},[69,97749,1767],{"class":86},[69,97751,94721],{"class":6458},[69,97753,1019],{"class":82},[69,97755,1401],{"class":90},[69,97757,1404],{"class":86},[69,97759,97760],{"class":71,"line":79},[69,97761,97762],{"class":75},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23237,97764,97766],{"id":97765},"_2662-法2identity","2.6.6.2 法2：identity()",[59,97768,97770],{"className":31614,"code":97769,"language":31616,"meta":64,"style":64},"#identity()\nnp.identity(5,dtype=int)\n",[66,97771,97772,97777],{"__ignoreMap":64},[69,97773,97774],{"class":71,"line":72},[69,97775,97776],{"class":75},"#identity()\n",[69,97778,97779,97782,97784,97786,97788,97790,97792],{"class":71,"line":79},[69,97780,97781],{"class":86},"np.identity(",[69,97783,1709],{"class":90},[69,97785,1767],{"class":86},[69,97787,94721],{"class":6458},[69,97789,1019],{"class":82},[69,97791,1401],{"class":90},[69,97793,1404],{"class":86},[29,97795,97796],{},"两个函数是有区别的",[29,97798,97799],{},[24,97800],{"alt":64,"src":97801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[29,97803,97804],{},[24,97805],{"alt":64,"src":97806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[59,97808,97810],{"className":31614,"code":97809,"language":31616,"meta":64,"style":64},"# 创建一个 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",[66,97811,97812,97817,97829,97834,97839,97844,97849,97853,97858,97878,97882,97887,97892],{"__ignoreMap":64},[69,97813,97814],{"class":71,"line":72},[69,97815,97816],{"class":75},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[69,97818,97819,97821,97823,97825,97827],{"class":71,"line":79},[69,97820,97745],{"class":86},[69,97822,1465],{"class":90},[69,97824,13677],{"class":86},[69,97826,1684],{"class":90},[69,97828,1404],{"class":86},[69,97830,97831],{"class":71,"line":106},[69,97832,97833],{"class":75},"# 输出:\n",[69,97835,97836],{"class":71,"line":116},[69,97837,97838],{"class":75},"# [[1. 0. 0. 0.]\n",[69,97840,97841],{"class":71,"line":133},[69,97842,97843],{"class":75},"#  [0. 1. 0. 0.]\n",[69,97845,97846],{"class":71,"line":139},[69,97847,97848],{"class":75},"#  [0. 0. 1. 0.]]\n",[69,97850,97851],{"class":71,"line":401},[69,97852,3644],{"emptyLinePlaceholder":1325},[69,97854,97855],{"class":71,"line":470},[69,97856,97857],{"class":75},"# 对角线向上偏移1\n",[69,97859,97860,97862,97864,97866,97868,97870,97872,97874,97876],{"class":71,"line":475},[69,97861,97745],{"class":86},[69,97863,1465],{"class":90},[69,97865,13677],{"class":86},[69,97867,1684],{"class":90},[69,97869,13677],{"class":86},[69,97871,1881],{"class":6458},[69,97873,1019],{"class":82},[69,97875,1609],{"class":90},[69,97877,1404],{"class":86},[69,97879,97880],{"class":71,"line":482},[69,97881,97833],{"class":75},[69,97883,97884],{"class":71,"line":497},[69,97885,97886],{"class":75},"# [[0. 1. 0. 0.]\n",[69,97888,97889],{"class":71,"line":502},[69,97890,97891],{"class":75},"#  [0. 0. 1. 0.]\n",[69,97893,97894],{"class":71,"line":509},[69,97895,97896],{"class":75},"#  [0. 0. 0. 1.]]\n",[19,97898,97900],{"id":97899},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[59,97902,97904],{"className":31614,"code":97903,"language":31616,"meta":64,"style":64},"#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",[66,97905,97906,97911,97915,97920,97925,97930,97935,97940,97945,97950,97955],{"__ignoreMap":64},[69,97907,97908],{"class":71,"line":72},[69,97909,97910],{"class":75},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[69,97912,97913],{"class":71,"line":79},[69,97914,96919],{"class":1022},[69,97916,97917],{"class":71,"line":106},[69,97918,97919],{"class":1022},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[69,97921,97922],{"class":71,"line":116},[69,97923,97924],{"class":1022},"参数介绍：\n",[69,97926,97927],{"class":71,"line":133},[69,97928,97929],{"class":1022},"start：序列的起始值\n",[69,97931,97932],{"class":71,"line":139},[69,97933,97934],{"class":1022},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[69,97936,97937],{"class":71,"line":401},[69,97938,97939],{"class":1022},"num：要生长的等步长的样本数量，默认为50\n",[69,97941,97942],{"class":71,"line":470},[69,97943,97944],{"class":1022},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[69,97946,97947],{"class":71,"line":475},[69,97948,97949],{"class":1022},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[69,97951,97952],{"class":71,"line":482},[69,97953,97954],{"class":1022},"dtype：ndarry的数据类型\n",[69,97956,97957],{"class":71,"line":497},[69,97958,96919],{"class":1022},[29,97960,97961],{},[24,97962],{"alt":64,"src":97963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[29,97965,97966],{},"这里num=是可以省略的",[29,97968,97969],{},"也就是下方两行代码结果是一模一样的",[59,97971,97973],{"className":31614,"code":97972,"language":31616,"meta":64,"style":64},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[66,97974,97975,97992],{"__ignoreMap":64},[69,97976,97977,97980,97982,97984,97986,97988,97990],{"class":71,"line":72},[69,97978,97979],{"class":86},"np.linspace(",[69,97981,1609],{"class":90},[69,97983,1767],{"class":86},[69,97985,1709],{"class":90},[69,97987,1767],{"class":86},[69,97989,1709],{"class":90},[69,97991,1404],{"class":86},[69,97993,97994,97996,97998,98000,98002,98004,98006,98008,98010],{"class":71,"line":79},[69,97995,97979],{"class":86},[69,97997,1609],{"class":90},[69,97999,1767],{"class":86},[69,98001,1709],{"class":90},[69,98003,1767],{"class":86},[69,98005,2910],{"class":6458},[69,98007,1019],{"class":82},[69,98009,1709],{"class":90},[69,98011,1404],{"class":86},[19,98013,98015],{"id":98014},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[59,98017,98019],{"className":31614,"code":98018,"language":31616,"meta":64,"style":64},"#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",[66,98020,98021,98026,98030,98035,98040,98045,98050,98054,98059,98064,98068],{"__ignoreMap":64},[69,98022,98023],{"class":71,"line":72},[69,98024,98025],{"class":75},"#logspace函数用于创建一个等比数列，格式如下：\n",[69,98027,98028],{"class":71,"line":79},[69,98029,96919],{"class":1022},[69,98031,98032],{"class":71,"line":106},[69,98033,98034],{"class":1022},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[69,98036,98037],{"class":71,"line":116},[69,98038,98039],{"class":1022},"参数为：\n",[69,98041,98042],{"class":71,"line":133},[69,98043,98044],{"class":1022},"start:序列的起始位置为：base**start\n",[69,98046,98047],{"class":71,"line":139},[69,98048,98049],{"class":1022},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[69,98051,98052],{"class":71,"line":401},[69,98053,97939],{"class":1022},[69,98055,98056],{"class":71,"line":470},[69,98057,98058],{"class":1022},"endpoint：是否包含 stop 这个值，默认是 True\n",[69,98060,98061],{"class":71,"line":475},[69,98062,98063],{"class":1022},"base：对数的底数，默认是 10（常见对数）\n",[69,98065,98066],{"class":71,"line":482},[69,98067,97954],{"class":1022},[69,98069,98070],{"class":71,"line":497},[69,98071,96919],{"class":1022},[29,98073,98074],{},[24,98075],{"alt":64,"src":98076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[29,98078,98079],{},"logspace()函数中的num参数也是可以不写num=的",[29,98081,98082],{},"endpoint是不可以省略的",[1297,98084,98085],{},"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":64,"searchDepth":79,"depth":79,"links":98087},[98088,98092,98097,98101,98105,98106],{"id":96477,"depth":79,"text":96478,"children":98089},[98090,98091],{"id":96481,"depth":106,"text":96482},{"id":96554,"depth":106,"text":96555},{"id":96586,"depth":79,"text":96587,"children":98093},[98094,98095,98096],{"id":96590,"depth":106,"text":96591},{"id":96772,"depth":106,"text":96773},{"id":96850,"depth":106,"text":96851},{"id":96885,"depth":79,"text":96886,"children":98098},[98099,98100],{"id":96889,"depth":106,"text":96890},{"id":96946,"depth":106,"text":96947},{"id":97042,"depth":79,"text":97043,"children":98102},[98103,98104],{"id":97046,"depth":106,"text":97047},{"id":97058,"depth":106,"text":97059},{"id":97092,"depth":79,"text":97093},{"id":97129,"depth":79,"text":97130,"children":98107},[98108,98109,98110,98111,98112,98113,98114,98115],{"id":97133,"depth":106,"text":97134},{"id":97358,"depth":106,"text":97359},{"id":97365,"depth":106,"text":97366},{"id":97574,"depth":106,"text":97575},{"id":97594,"depth":106,"text":97595},{"id":97730,"depth":106,"text":97731},{"id":97899,"depth":106,"text":97900},{"id":98014,"depth":106,"text":98015},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96469,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98122,"title":98123,"body":98124,"description":1322,"extension":1323,"meta":98217,"navigation":1325,"path":98218,"seo":98219,"stem":98220,"__hash__":98221},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98125,"toc":98215},[98126,98129,98132,98135,98138,98141,98144,98147,98150,98153,98156,98159,98161,98164,98167,98172,98175,98178,98212],[10,98127,98123],{"id":98128},"_20魔法命令mprun",[29,98130,98131],{},"逐行分析数据内存的使用情况",[29,98133,98134],{},"语法格式：",[29,98136,98137],{},"%mprun -f 模块名.函数名 模块名.函数名()",[29,98139,98140],{},"分析结果列如下：",[29,98142,98143],{},"Line行号",[29,98145,98146],{},"Mem usage内存使用大小",[29,98148,98149],{},"increment内存增量",[29,98151,98152],{},"Line content代码内容",[29,98154,98155],{},"补充说明：",[29,98157,98158],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[29,98160,96424],{},[29,98162,98163],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[29,98165,98166],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[29,98168,98169],{},[24,98170],{"alt":64,"src":98171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[29,98173,98174],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[29,98176,98177],{},"这时候需要重新加载模块",[59,98179,98181],{"className":31614,"code":98180,"language":31616,"meta":64,"style":64},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[66,98182,98183,98188,98195,98200],{"__ignoreMap":64},[69,98184,98185],{"class":71,"line":72},[69,98186,98187],{"class":75},"#重新加载模块\n",[69,98189,98190,98192],{"class":71,"line":79},[69,98191,31628],{"class":82},[69,98193,98194],{"class":86}," importlib\n",[69,98196,98197],{"class":71,"line":106},[69,98198,98199],{"class":86},"importlib.reload(mprun_test)\n",[69,98201,98202,98204,98207,98209],{"class":71,"line":116},[69,98203,127],{"class":82},[69,98205,98206],{"class":86},"mprun ",[69,98208,1920],{"class":82},[69,98210,98211],{"class":86},"f mprun_test.fun_test mprun_test.fun_test()\n",[1297,98213,98214],{},"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":64,"searchDepth":79,"depth":79,"links":98216},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98123,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98223,"title":98224,"body":98225,"description":1322,"extension":1323,"meta":98242,"navigation":1325,"path":98243,"seo":98244,"stem":98245,"__hash__":98246},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98226,"toc":98240},[98227,98230,98235],[10,98228,98224],{"id":98229},"_3一维数组的索引和切片",[29,98231,98232],{},[24,98233],{"alt":64,"src":98234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[29,98236,98237],{},[24,98238],{"alt":64,"src":98239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":64,"searchDepth":79,"depth":79,"links":98241},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98224,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98248,"title":98249,"body":98250,"description":1322,"extension":1323,"meta":98733,"navigation":1325,"path":98734,"seo":98735,"stem":98736,"__hash__":98737},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98251,"toc":98731},[98252,98255,98258,98263,98296,98299,98337,98340,98374,98377,98482,98485,98522,98525,98626,98629,98680,98683,98725,98728],[10,98253,98249],{"id":98254},"_4二维数组的索引与切片",[29,98256,98257],{},"①获取指定单个元素",[29,98259,98260],{},[24,98261],{"alt":64,"src":98262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[59,98264,98266],{"className":31614,"code":98265,"language":31616,"meta":64,"style":64},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[66,98267,98268,98273,98278,98283],{"__ignoreMap":64},[69,98269,98270],{"class":71,"line":72},[69,98271,98272],{"class":75},"#获取元素9\n",[69,98274,98275],{"class":71,"line":79},[69,98276,98277],{"class":75},"#先获取所在行，再获取所在列\n",[69,98279,98280],{"class":71,"line":106},[69,98281,98282],{"class":75},"#数组[行索引号，列索引号]\n",[69,98284,98285,98288,98290,98292,98294],{"class":71,"line":116},[69,98286,98287],{"class":86},"a[",[69,98289,1609],{"class":90},[69,98291,1767],{"class":86},[69,98293,1471],{"class":90},[69,98295,34482],{"class":86},[29,98297,98298],{},"②获取整行元素",[59,98300,98302],{"className":31614,"code":98301,"language":31616,"meta":64,"style":64},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[66,98303,98304,98309,98314,98322,98327],{"__ignoreMap":64},[69,98305,98306],{"class":71,"line":72},[69,98307,98308],{"class":75},"#获取整行 数组[行索引号]\n",[69,98310,98311],{"class":71,"line":79},[69,98312,98313],{"class":75},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[69,98315,98316,98318,98320],{"class":71,"line":106},[69,98317,98287],{"class":86},[69,98319,1471],{"class":90},[69,98321,34482],{"class":86},[69,98323,98324],{"class":71,"line":116},[69,98325,98326],{"class":75},"#也可以负索引获取一行\n",[69,98328,98329,98331,98333,98335],{"class":71,"line":133},[69,98330,98287],{"class":86},[69,98332,1920],{"class":82},[69,98334,1609],{"class":90},[69,98336,34482],{"class":86},[29,98338,98339],{},"③获取整列元素",[59,98341,98343],{"className":31614,"code":98342,"language":31616,"meta":64,"style":64},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[66,98344,98345,98350,98359,98364],{"__ignoreMap":64},[69,98346,98347],{"class":71,"line":72},[69,98348,98349],{"class":75},"#获取整列 数组名[:,列索引]\n",[69,98351,98352,98355,98357],{"class":71,"line":79},[69,98353,98354],{"class":86},"a[:,",[69,98356,1471],{"class":90},[69,98358,34482],{"class":86},[69,98360,98361],{"class":71,"line":106},[69,98362,98363],{"class":75},"#也可以负索引获取一列\n",[69,98365,98366,98368,98370,98372],{"class":71,"line":116},[69,98367,98354],{"class":86},[69,98369,1920],{"class":82},[69,98371,1609],{"class":90},[69,98373,34482],{"class":86},[29,98375,98376],{},"④部分行部分列的元素",[59,98378,98380],{"className":31614,"code":98379,"language":31616,"meta":64,"style":64},"#部分行部分列 数组名[行切片，列切片]\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",[66,98381,98382,98387,98397,98401,98405,98410,98415,98419,98431,98435,98439,98444,98449,98454,98459,98463,98468],{"__ignoreMap":64},[69,98383,98384],{"class":71,"line":72},[69,98385,98386],{"class":75},"#部分行部分列 数组名[行切片，列切片]\n",[69,98388,98389,98392,98394],{"class":71,"line":79},[69,98390,98391],{"class":86},"a[:",[69,98393,1471],{"class":90},[69,98395,98396],{"class":86},",:]\n",[69,98398,98399],{"class":71,"line":106},[69,98400,94785],{"class":75},[69,98402,98403],{"class":71,"line":116},[69,98404,95149],{"class":1022},[69,98406,98407],{"class":71,"line":133},[69,98408,98409],{"class":1022},"array([[ 1,  2,  3,  4,  5,  6],\n",[69,98411,98412],{"class":71,"line":139},[69,98413,98414],{"class":1022},"       [ 7,  8,  9, 10, 11, 12]])\n",[69,98416,98417],{"class":71,"line":401},[69,98418,95149],{"class":1022},[69,98420,98421,98423,98425,98427,98429],{"class":71,"line":470},[69,98422,98354],{"class":86},[69,98424,1609],{"class":90},[69,98426,2246],{"class":86},[69,98428,1684],{"class":90},[69,98430,34482],{"class":86},[69,98432,98433],{"class":71,"line":475},[69,98434,94785],{"class":75},[69,98436,98437],{"class":71,"line":482},[69,98438,95149],{"class":1022},[69,98440,98441],{"class":71,"line":497},[69,98442,98443],{"class":1022},"array([[ 2,  3,  4],\n",[69,98445,98446],{"class":71,"line":502},[69,98447,98448],{"class":1022},"       [ 8,  9, 10],\n",[69,98450,98451],{"class":71,"line":509},[69,98452,98453],{"class":1022},"       [14, 15, 16],\n",[69,98455,98456],{"class":71,"line":524},[69,98457,98458],{"class":1022},"       [20, 21, 22]])\n",[69,98460,98461],{"class":71,"line":2888},[69,98462,95149],{"class":1022},[69,98464,98465],{"class":71,"line":2893},[69,98466,98467],{"class":75},"#对列行同时进行切片，使用了step参数\n",[69,98469,98470,98473,98475,98478,98480],{"class":71,"line":2899},[69,98471,98472],{"class":86},"a[::",[69,98474,1471],{"class":90},[69,98476,98477],{"class":86},",::",[69,98479,1471],{"class":90},[69,98481,34482],{"class":86},[29,98483,98484],{},"⑤同时获取两个元素",[59,98486,98488],{"className":31614,"code":98487,"language":31616,"meta":64,"style":64},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[66,98489,98490,98495,98500],{"__ignoreMap":64},[69,98491,98492],{"class":71,"line":72},[69,98493,98494],{"class":75},"#同时获取第三行第二列，第四行第一列\n",[69,98496,98497],{"class":71,"line":79},[69,98498,98499],{"class":75},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[69,98501,98502,98505,98507,98509,98511,98513,98515,98517,98519],{"class":71,"line":106},[69,98503,98504],{"class":86},"a[(",[69,98506,1471],{"class":90},[69,98508,1767],{"class":86},[69,98510,1465],{"class":90},[69,98512,43483],{"class":86},[69,98514,1609],{"class":90},[69,98516,1767],{"class":86},[69,98518,1583],{"class":90},[69,98520,98521],{"class":86},")]\n",[29,98523,98524],{},"⑥切片，对行进行反向获取",[59,98526,98528],{"className":31614,"code":98527,"language":31616,"meta":64,"style":64},"#切片 对所有行进行反向获取\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",[66,98529,98530,98535,98545,98549,98553,98558,98563,98568,98573,98577,98582,98598,98602,98607,98612,98617,98622],{"__ignoreMap":64},[69,98531,98532],{"class":71,"line":72},[69,98533,98534],{"class":75},"#切片 对所有行进行反向获取\n",[69,98536,98537,98539,98541,98543],{"class":71,"line":79},[69,98538,98472],{"class":86},[69,98540,1920],{"class":82},[69,98542,1609],{"class":90},[69,98544,34482],{"class":86},[69,98546,98547],{"class":71,"line":106},[69,98548,94785],{"class":75},[69,98550,98551],{"class":71,"line":116},[69,98552,95149],{"class":1022},[69,98554,98555],{"class":71,"line":133},[69,98556,98557],{"class":1022},"array([[19, 20, 21, 22, 23, 24],\n",[69,98559,98560],{"class":71,"line":139},[69,98561,98562],{"class":1022},"       [13, 14, 15, 16, 17, 18],\n",[69,98564,98565],{"class":71,"line":401},[69,98566,98567],{"class":1022},"       [ 7,  8,  9, 10, 11, 12],\n",[69,98569,98570],{"class":71,"line":470},[69,98571,98572],{"class":1022},"       [ 1,  2,  3,  4,  5,  6]])\n",[69,98574,98575],{"class":71,"line":475},[69,98576,95149],{"class":1022},[69,98578,98579],{"class":71,"line":482},[69,98580,98581],{"class":75},"#对行列都进行反向切片获取\n",[69,98583,98584,98586,98588,98590,98592,98594,98596],{"class":71,"line":497},[69,98585,98472],{"class":86},[69,98587,1920],{"class":82},[69,98589,1609],{"class":90},[69,98591,98477],{"class":86},[69,98593,1920],{"class":82},[69,98595,1609],{"class":90},[69,98597,34482],{"class":86},[69,98599,98600],{"class":71,"line":502},[69,98601,95149],{"class":1022},[69,98603,98604],{"class":71,"line":509},[69,98605,98606],{"class":1022},"array([[24, 23, 22, 21, 20, 19],\n",[69,98608,98609],{"class":71,"line":524},[69,98610,98611],{"class":1022},"       [18, 17, 16, 15, 14, 13],\n",[69,98613,98614],{"class":71,"line":2888},[69,98615,98616],{"class":1022},"       [12, 11, 10,  9,  8,  7],\n",[69,98618,98619],{"class":71,"line":2893},[69,98620,98621],{"class":1022},"       [ 6,  5,  4,  3,  2,  1]])\n",[69,98623,98624],{"class":71,"line":2899},[69,98625,95149],{"class":1022},[29,98627,98628],{},"⑦修改元素",[59,98630,98632],{"className":31614,"code":98631,"language":31616,"meta":64,"style":64},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[66,98633,98634,98639,98657,98662],{"__ignoreMap":64},[69,98635,98636],{"class":71,"line":72},[69,98637,98638],{"class":75},"#获取前两行和前两列\n",[69,98640,98641,98644,98646,98648,98650,98653,98655],{"class":71,"line":79},[69,98642,98643],{"class":86},"sub_a",[69,98645,1019],{"class":82},[69,98647,98391],{"class":86},[69,98649,1471],{"class":90},[69,98651,98652],{"class":86},",:",[69,98654,1471],{"class":90},[69,98656,34482],{"class":86},[69,98658,98659],{"class":71,"line":106},[69,98660,98661],{"class":75},"#修改sub_a第一个元素的值\n",[69,98663,98664,98667,98669,98671,98673,98675,98677],{"class":71,"line":116},[69,98665,98666],{"class":86},"sub_a[",[69,98668,1583],{"class":90},[69,98670,1767],{"class":86},[69,98672,1583],{"class":90},[69,98674,2326],{"class":86},[69,98676,1019],{"class":82},[69,98678,98679],{"class":90},"100\n",[29,98681,98682],{},"⑧数组复制copy()",[59,98684,98686],{"className":31614,"code":98685,"language":31616,"meta":64,"style":64},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[66,98687,98688,98693,98703,98708],{"__ignoreMap":64},[69,98689,98690],{"class":71,"line":72},[69,98691,98692],{"class":75},"#数组复制\n",[69,98694,98695,98698,98700],{"class":71,"line":79},[69,98696,98697],{"class":86},"copy_a",[69,98699,1019],{"class":82},[69,98701,98702],{"class":86},"np.copy(sub_a)\n",[69,98704,98705],{"class":71,"line":106},[69,98706,98707],{"class":75},"#修改copy_a后不影响原数组\n",[69,98709,98710,98713,98715,98717,98719,98721,98723],{"class":71,"line":116},[69,98711,98712],{"class":86},"copy_a[",[69,98714,1583],{"class":90},[69,98716,1767],{"class":86},[69,98718,1583],{"class":90},[69,98720,2326],{"class":86},[69,98722,1019],{"class":82},[69,98724,98679],{"class":90},[29,98726,98727],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1297,98729,98730],{},"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":64,"searchDepth":79,"depth":79,"links":98732},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98249,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98739,"title":98740,"body":98741,"description":1322,"extension":1323,"meta":99233,"navigation":1325,"path":99234,"seo":99235,"stem":99236,"__hash__":99237},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98742,"toc":99225},[98743,98746,98750,98753,98756,98809,98812,98837,98840,98859,98879,98882,98898,98902,98948,98952,98994,98998,99001,99004,99007,99010,99013,99075,99135,99139,99142,99199,99203,99208,99217,99222],[10,98744,98740],{"id":98745},"_5改变数组的维度",[14,98747,98749],{"id":98748},"_51-使用reshape","5.1 使用reshape()",[29,98751,98752],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[29,98754,98755],{},"①一维数组转换为二维数组",[59,98757,98759],{"className":31614,"code":98758,"language":31616,"meta":64,"style":64},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[66,98760,98761,98777,98782,98787,98792],{"__ignoreMap":64},[69,98762,98763,98765,98767,98769,98771,98773,98775],{"class":71,"line":72},[69,98764,187],{"class":86},[69,98766,1019],{"class":82},[69,98768,94223],{"class":86},[69,98770,1609],{"class":90},[69,98772,1767],{"class":86},[69,98774,1911],{"class":90},[69,98776,1404],{"class":86},[69,98778,98779],{"class":71,"line":79},[69,98780,98781],{"class":75},"#将一维数组进行转换\n",[69,98783,98784],{"class":71,"line":106},[69,98785,98786],{"class":75},"#注意点：元素个数不可以变\n",[69,98788,98789],{"class":71,"line":116},[69,98790,98791],{"class":75},"#转换维度要保持一致，不一致就异常！！！\n",[69,98793,98794,98796,98798,98801,98803,98805,98807],{"class":71,"line":133},[69,98795,94527],{"class":86},[69,98797,1019],{"class":82},[69,98799,98800],{"class":86},"a.reshape(",[69,98802,1471],{"class":90},[69,98804,1767],{"class":86},[69,98806,1733],{"class":90},[69,98808,1404],{"class":86},[29,98810,98811],{},"②一维数组转换为三维数组",[59,98813,98815],{"className":31614,"code":98814,"language":31616,"meta":64,"style":64},"aaa=a.reshape(2,3,2)\n",[66,98816,98817],{"__ignoreMap":64},[69,98818,98819,98821,98823,98825,98827,98829,98831,98833,98835],{"class":71,"line":72},[69,98820,96742],{"class":86},[69,98822,1019],{"class":82},[69,98824,98800],{"class":86},[69,98826,1471],{"class":90},[69,98828,1767],{"class":86},[69,98830,1465],{"class":90},[69,98832,1767],{"class":86},[69,98834,1471],{"class":90},[69,98836,1404],{"class":86},[29,98838,98839],{},"③二维数组转化为一维数组",[59,98841,98843],{"className":31614,"code":98842,"language":31616,"meta":64,"style":64},"#知道元素个数：\naa.reshape(12)\n",[66,98844,98845,98850],{"__ignoreMap":64},[69,98846,98847],{"class":71,"line":72},[69,98848,98849],{"class":75},"#知道元素个数：\n",[69,98851,98852,98855,98857],{"class":71,"line":79},[69,98853,98854],{"class":86},"aa.reshape(",[69,98856,1886],{"class":90},[69,98858,1404],{"class":86},[59,98860,98862],{"className":31614,"code":98861,"language":31616,"meta":64,"style":64},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[66,98863,98864,98869],{"__ignoreMap":64},[69,98865,98866],{"class":71,"line":72},[69,98867,98868],{"class":75},"#不知道元素个数，参数传递-1\n",[69,98870,98871,98873,98875,98877],{"class":71,"line":79},[69,98872,98854],{"class":86},[69,98874,1920],{"class":82},[69,98876,1609],{"class":90},[69,98878,1404],{"class":86},[29,98880,98881],{},"④三维数组转换为一维数组",[59,98883,98885],{"className":31614,"code":98884,"language":31616,"meta":64,"style":64},"aaa.reshape(-1)\n",[66,98886,98887],{"__ignoreMap":64},[69,98888,98889,98892,98894,98896],{"class":71,"line":72},[69,98890,98891],{"class":86},"aaa.reshape(",[69,98893,1920],{"class":82},[69,98895,1609],{"class":90},[69,98897,1404],{"class":86},[14,98899,98901],{"id":98900},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[59,98903,98905],{"className":31614,"code":98904,"language":31616,"meta":64,"style":64},"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",[66,98906,98907,98934,98939,98943],{"__ignoreMap":64},[69,98908,98909,98911,98913,98915,98917,98919,98921,98923,98925,98927,98929,98931],{"class":71,"line":72},[69,98910,94527],{"class":86},[69,98912,1019],{"class":82},[69,98914,94223],{"class":86},[69,98916,1609],{"class":90},[69,98918,1767],{"class":86},[69,98920,1911],{"class":90},[69,98922,94228],{"class":86},[69,98924,1471],{"class":90},[69,98926,1767],{"class":86},[69,98928,1733],{"class":90},[69,98930,1818],{"class":86},[69,98932,98933],{"class":75},"#转换为2行6列的数组\n",[69,98935,98936],{"class":71,"line":79},[69,98937,98938],{"class":86},"aa.revel()\n",[69,98940,98941],{"class":71,"line":106},[69,98942,94785],{"class":75},[69,98944,98945],{"class":71,"line":116},[69,98946,98947],{"class":75},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98949,98951],{"id":98950},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[59,98953,98955],{"className":31614,"code":98954,"language":31616,"meta":64,"style":64},"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",[66,98956,98957,98981,98986,98990],{"__ignoreMap":64},[69,98958,98959,98961,98963,98965,98967,98969,98971,98973,98975,98977,98979],{"class":71,"line":72},[69,98960,94527],{"class":86},[69,98962,1019],{"class":82},[69,98964,94223],{"class":86},[69,98966,1609],{"class":90},[69,98968,1767],{"class":86},[69,98970,1911],{"class":90},[69,98972,94228],{"class":86},[69,98974,1471],{"class":90},[69,98976,1767],{"class":86},[69,98978,1733],{"class":90},[69,98980,1404],{"class":86},[69,98982,98983],{"class":71,"line":79},[69,98984,98985],{"class":86},"aa.flatten()\n",[69,98987,98988],{"class":71,"line":106},[69,98989,94785],{"class":75},[69,98991,98992],{"class":71,"line":116},[69,98993,98947],{"class":75},[14,98995,98997],{"id":98996},"_54-使用resize","5.4 使用resize()",[29,98999,99000],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[29,99002,99003],{},"通过resize方法可以改变数组的维度",[29,99005,99006],{},"#resize修改数组维度",[29,99008,99009],{},"#以元组的形式指定形状",[29,99011,99012],{},"#改变的是原数组",[59,99014,99016],{"className":31614,"code":99015,"language":31616,"meta":64,"style":64},"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",[66,99017,99018,99034,99054,99067,99071],{"__ignoreMap":64},[69,99019,99020,99022,99024,99026,99028,99030,99032],{"class":71,"line":72},[69,99021,187],{"class":86},[69,99023,1019],{"class":82},[69,99025,94223],{"class":86},[69,99027,1609],{"class":90},[69,99029,1767],{"class":86},[69,99031,1911],{"class":90},[69,99033,1404],{"class":86},[69,99035,99036,99039,99041,99043,99045,99047,99049,99051],{"class":71,"line":79},[69,99037,99038],{"class":86},"a.shape",[69,99040,1019],{"class":82},[69,99042,1398],{"class":86},[69,99044,1471],{"class":90},[69,99046,1767],{"class":86},[69,99048,1733],{"class":90},[69,99050,1818],{"class":86},[69,99052,99053],{"class":75},"#改变了原数组\n",[69,99055,99056,99058,99060,99063,99065],{"class":71,"line":106},[69,99057,187],{"class":86},[69,99059,1019],{"class":82},[69,99061,99062],{"class":86},"resize((",[69,99064,1886],{"class":90},[69,99066,31733],{"class":86},[69,99068,99069],{"class":71,"line":116},[69,99070,94785],{"class":75},[69,99072,99073],{"class":71,"line":133},[69,99074,98947],{"class":75},[59,99076,99078],{"className":31614,"code":99077,"language":31616,"meta":64,"style":64},"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",[66,99079,99080,99093,99097,99101,99106,99111,99116,99121,99126,99131],{"__ignoreMap":64},[69,99081,99082,99085,99087,99089,99091],{"class":71,"line":72},[69,99083,99084],{"class":86},"a.resize((",[69,99086,1733],{"class":90},[69,99088,1767],{"class":86},[69,99090,1471],{"class":90},[69,99092,31733],{"class":86},[69,99094,99095],{"class":71,"line":79},[69,99096,94785],{"class":75},[69,99098,99099],{"class":71,"line":106},[69,99100,95149],{"class":1022},[69,99102,99103],{"class":71,"line":116},[69,99104,99105],{"class":1022},"array([[ 1,  2],\n",[69,99107,99108],{"class":71,"line":133},[69,99109,99110],{"class":1022},"       [ 3,  4],\n",[69,99112,99113],{"class":71,"line":139},[69,99114,99115],{"class":1022},"       [ 5,  6],\n",[69,99117,99118],{"class":71,"line":401},[69,99119,99120],{"class":1022},"       [ 7,  8],\n",[69,99122,99123],{"class":71,"line":470},[69,99124,99125],{"class":1022},"       [ 9, 10],\n",[69,99127,99128],{"class":71,"line":475},[69,99129,99130],{"class":1022},"       [11, 12]])\n",[69,99132,99133],{"class":71,"line":482},[69,99134,95149],{"class":1022},[14,99136,99138],{"id":99137},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[29,99140,99141],{},"改变了原数组",[59,99143,99145],{"className":31614,"code":99144,"language":31616,"meta":64,"style":64},"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",[66,99146,99147,99163,99179,99183,99187,99191,99195],{"__ignoreMap":64},[69,99148,99149,99151,99153,99155,99157,99159,99161],{"class":71,"line":72},[69,99150,187],{"class":86},[69,99152,1019],{"class":82},[69,99154,94223],{"class":86},[69,99156,1609],{"class":90},[69,99158,1767],{"class":86},[69,99160,1911],{"class":90},[69,99162,1404],{"class":86},[69,99164,99165,99167,99169,99171,99173,99175,99177],{"class":71,"line":79},[69,99166,99038],{"class":86},[69,99168,1019],{"class":82},[69,99170,1398],{"class":86},[69,99172,1471],{"class":90},[69,99174,1767],{"class":86},[69,99176,1733],{"class":90},[69,99178,1404],{"class":86},[69,99180,99181],{"class":71,"line":106},[69,99182,94785],{"class":75},[69,99184,99185],{"class":71,"line":116},[69,99186,95149],{"class":1022},[69,99188,99189],{"class":71,"line":133},[69,99190,98409],{"class":1022},[69,99192,99193],{"class":71,"line":139},[69,99194,98414],{"class":1022},[69,99196,99197],{"class":71,"line":401},[69,99198,95149],{"class":1022},[14,99200,99202],{"id":99201},"_56-重要比较","5.6 重要比较：",[29,99204,99205],{},[24,99206],{"alt":64,"src":99207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[29,99209,99210,99211,99213,99214,99216],{},"口诀：NumPy 函数要么用 ",[66,99212,97184],{},"，要么用 ",[66,99215,32732],{},"，创建结构用 shape，造数据用 size",[29,99218,99219],{},[24,99220],{"alt":64,"src":99221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1297,99223,99224],{},"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":64,"searchDepth":79,"depth":79,"links":99226},[99227,99228,99229,99230,99231,99232],{"id":98748,"depth":79,"text":98749},{"id":98900,"depth":79,"text":98901},{"id":98950,"depth":79,"text":98951},{"id":98996,"depth":79,"text":98997},{"id":99137,"depth":79,"text":99138},{"id":99201,"depth":79,"text":99202},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98740,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99239,"title":99240,"body":99241,"description":1322,"extension":1323,"meta":100313,"navigation":1325,"path":100314,"seo":100315,"stem":100316,"__hash__":100317},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99242,"toc":100307},[99243,99246,99250,99253,99256,99259,99324,99327,99367,99370,99452,99455,99460,99482,99484,99489,99494,99497,99500,99655,99658,99860,99864,99867,99870,99938,99940,99945,99948,99951,100031,100035,100038,100040,100113,100115,100120,100122,100202,100206,100209,100212,100215,100218,100221,100224,100304],[10,99244,99240],{"id":99245},"_6数组的拼接",[14,99247,99249],{"id":99248},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[29,99251,99252],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[29,99254,99255],{},"函数内部传两个数列构成的数列或者元组",[29,99257,99258],{},"①一维数组的拼接",[59,99260,99262],{"className":31614,"code":99261,"language":31616,"meta":64,"style":64},"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",[66,99263,99264,99284,99304,99309,99314,99319],{"__ignoreMap":64},[69,99265,99266,99268,99270,99272,99274,99276,99278,99280,99282],{"class":71,"line":72},[69,99267,187],{"class":86},[69,99269,1019],{"class":82},[69,99271,94245],{"class":86},[69,99273,1609],{"class":90},[69,99275,1767],{"class":86},[69,99277,1471],{"class":90},[69,99279,1767],{"class":86},[69,99281,1465],{"class":90},[69,99283,5901],{"class":86},[69,99285,99286,99288,99290,99292,99294,99296,99298,99300,99302],{"class":71,"line":79},[69,99287,1654],{"class":86},[69,99289,1019],{"class":82},[69,99291,94245],{"class":86},[69,99293,1684],{"class":90},[69,99295,1767],{"class":86},[69,99297,1709],{"class":90},[69,99299,1767],{"class":86},[69,99301,1733],{"class":90},[69,99303,5901],{"class":86},[69,99305,99306],{"class":71,"line":106},[69,99307,99308],{"class":75},"#调用concatenate进行数组拼接\n",[69,99310,99311],{"class":71,"line":116},[69,99312,99313],{"class":86},"np.concatenate((a,b))\n",[69,99315,99316],{"class":71,"line":133},[69,99317,99318],{"class":75},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[69,99320,99321],{"class":71,"line":139},[69,99322,99323],{"class":75},"#np.concatenate([a,b])\n",[29,99325,99326],{},"②一维多个数组拼接",[59,99328,99330],{"className":31614,"code":99329,"language":31616,"meta":64,"style":64},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[66,99331,99332,99337,99357,99362],{"__ignoreMap":64},[69,99333,99334],{"class":71,"line":72},[69,99335,99336],{"class":75},"#也可以多个数组进行拼接\n",[69,99338,99339,99341,99343,99345,99347,99349,99351,99353,99355],{"class":71,"line":79},[69,99340,1679],{"class":86},[69,99342,1019],{"class":82},[69,99344,94245],{"class":86},[69,99346,390],{"class":90},[69,99348,1767],{"class":86},[69,99350,1860],{"class":90},[69,99352,1767],{"class":86},[69,99354,1911],{"class":90},[69,99356,5901],{"class":86},[69,99358,99359],{"class":71,"line":106},[69,99360,99361],{"class":86},"c\n",[69,99363,99364],{"class":71,"line":116},[69,99365,99366],{"class":86},"np.concatenate((a,b,c))\n",[29,99368,99369],{},"③二维数组拼接",[59,99371,99373],{"className":31614,"code":99372,"language":31616,"meta":64,"style":64},"#二维数组使用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",[66,99374,99375,99380,99404,99429,99434,99439],{"__ignoreMap":64},[69,99376,99377],{"class":71,"line":72},[69,99378,99379],{"class":75},"#二维数组使用concatenate进行拼接\n",[69,99381,99382,99384,99386,99388,99390,99392,99394,99396,99398,99400,99402],{"class":71,"line":79},[69,99383,94527],{"class":86},[69,99385,1019],{"class":82},[69,99387,94223],{"class":86},[69,99389,1609],{"class":90},[69,99391,1767],{"class":86},[69,99393,1911],{"class":90},[69,99395,94228],{"class":86},[69,99397,1465],{"class":90},[69,99399,1767],{"class":86},[69,99401,1684],{"class":90},[69,99403,1404],{"class":86},[69,99405,99406,99409,99411,99413,99415,99417,99419,99421,99423,99425,99427],{"class":71,"line":106},[69,99407,99408],{"class":86},"bb",[69,99410,1019],{"class":82},[69,99412,94223],{"class":86},[69,99414,1726],{"class":90},[69,99416,1767],{"class":86},[69,99418,2029],{"class":90},[69,99420,94228],{"class":86},[69,99422,1465],{"class":90},[69,99424,1767],{"class":86},[69,99426,1684],{"class":90},[69,99428,1404],{"class":86},[69,99430,99431],{"class":71,"line":116},[69,99432,99433],{"class":75},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[69,99435,99436],{"class":71,"line":133},[69,99437,99438],{"class":75},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[69,99440,99441,99444,99446,99448,99450],{"class":71,"line":139},[69,99442,99443],{"class":86},"np.concatenate((aa,bb),",[69,99445,48750],{"class":6458},[69,99447,1019],{"class":82},[69,99449,1583],{"class":90},[69,99451,1404],{"class":86},[29,99453,99454],{},"结果：",[29,99456,99457],{},[24,99458],{"alt":64,"src":99459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[59,99461,99463],{"className":31614,"code":99462,"language":31616,"meta":64,"style":64},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[66,99464,99465,99470],{"__ignoreMap":64},[69,99466,99467],{"class":71,"line":72},[69,99468,99469],{"class":75},"#指定axis为1进行拼接\n",[69,99471,99472,99474,99476,99478,99480],{"class":71,"line":79},[69,99473,99443],{"class":86},[69,99475,48750],{"class":6458},[69,99477,1019],{"class":82},[69,99479,1609],{"class":90},[69,99481,1404],{"class":86},[29,99483,99454],{},[29,99485,99486],{},[24,99487],{"alt":64,"src":99488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[29,99490,99491],{},[195,99492,99493],{},"二维数组总结：0竖着方向，1横着方向",[29,99495,99496],{},"④三维数组拼接",[29,99498,99499],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[59,99501,99503],{"className":31614,"code":99502,"language":31616,"meta":64,"style":64},"#两个三行六列\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",[66,99504,99505,99510,99538,99568,99573,99590,99595,99600,99605,99622,99627,99632,99637,99650],{"__ignoreMap":64},[69,99506,99507],{"class":71,"line":72},[69,99508,99509],{"class":75},"#两个三行六列\n",[69,99511,99512,99514,99516,99518,99520,99522,99524,99526,99528,99530,99532,99534,99536],{"class":71,"line":79},[69,99513,96742],{"class":86},[69,99515,1019],{"class":82},[69,99517,94223],{"class":86},[69,99519,1609],{"class":90},[69,99521,1767],{"class":86},[69,99523,1715],{"class":90},[69,99525,94228],{"class":86},[69,99527,1471],{"class":90},[69,99529,1767],{"class":86},[69,99531,1465],{"class":90},[69,99533,1767],{"class":86},[69,99535,1733],{"class":90},[69,99537,1404],{"class":86},[69,99539,99540,99543,99545,99547,99549,99551,99554,99556,99558,99560,99562,99564,99566],{"class":71,"line":106},[69,99541,99542],{"class":86},"bbb",[69,99544,1019],{"class":82},[69,99546,94223],{"class":86},[69,99548,1726],{"class":90},[69,99550,1767],{"class":86},[69,99552,99553],{"class":90},"137",[69,99555,94228],{"class":86},[69,99557,1471],{"class":90},[69,99559,1767],{"class":86},[69,99561,1465],{"class":90},[69,99563,1767],{"class":86},[69,99565,1733],{"class":90},[69,99567,1404],{"class":86},[69,99569,99570],{"class":71,"line":116},[69,99571,99572],{"class":75},"#axis=0\n",[69,99574,99575,99577,99579,99582,99584,99586,99588],{"class":71,"line":133},[69,99576,2082],{"class":86},[69,99578,1019],{"class":82},[69,99580,99581],{"class":86},"np.concatenate((aaa,bbb),",[69,99583,48750],{"class":6458},[69,99585,1019],{"class":82},[69,99587,1583],{"class":90},[69,99589,1404],{"class":86},[69,99591,99592],{"class":71,"line":139},[69,99593,99594],{"class":86},"s.shape\n",[69,99596,99597],{"class":71,"line":401},[69,99598,99599],{"class":75},"#输出：(4,3,6)\n",[69,99601,99602],{"class":71,"line":470},[69,99603,99604],{"class":75},"#axis=1\n",[69,99606,99607,99610,99612,99614,99616,99618,99620],{"class":71,"line":475},[69,99608,99609],{"class":86},"ss",[69,99611,1019],{"class":82},[69,99613,99581],{"class":86},[69,99615,48750],{"class":6458},[69,99617,1019],{"class":82},[69,99619,1609],{"class":90},[69,99621,1404],{"class":86},[69,99623,99624],{"class":71,"line":482},[69,99625,99626],{"class":86},"ss.shape\n",[69,99628,99629],{"class":71,"line":497},[69,99630,99631],{"class":75},"#输出：(2,6,6)\n",[69,99633,99634],{"class":71,"line":502},[69,99635,99636],{"class":75},"#axis=2\n",[69,99638,99639,99641,99643,99645,99647],{"class":71,"line":509},[69,99640,99581],{"class":86},[69,99642,48750],{"class":6458},[69,99644,1019],{"class":82},[69,99646,1471],{"class":90},[69,99648,99649],{"class":86},").shape\n",[69,99651,99652],{"class":71,"line":524},[69,99653,99654],{"class":75},"#输出：（2，3，12）\n",[29,99656,99657],{},"⑤四维数组拼接",[59,99659,99661],{"className":31614,"code":99660,"language":31616,"meta":64,"style":64},"#两个三行六列\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",[66,99662,99663,99667,99695,99723,99748,99774,99778,99791,99796,99800,99812,99817,99821,99833,99838,99843,99855],{"__ignoreMap":64},[69,99664,99665],{"class":71,"line":72},[69,99666,99509],{"class":75},[69,99668,99669,99671,99673,99675,99677,99679,99681,99683,99685,99687,99689,99691,99693],{"class":71,"line":79},[69,99670,96742],{"class":86},[69,99672,1019],{"class":82},[69,99674,94223],{"class":86},[69,99676,1609],{"class":90},[69,99678,1767],{"class":86},[69,99680,1715],{"class":90},[69,99682,94228],{"class":86},[69,99684,1471],{"class":90},[69,99686,1767],{"class":86},[69,99688,1465],{"class":90},[69,99690,1767],{"class":86},[69,99692,1733],{"class":90},[69,99694,1404],{"class":86},[69,99696,99697,99699,99701,99703,99705,99707,99709,99711,99713,99715,99717,99719,99721],{"class":71,"line":106},[69,99698,99542],{"class":86},[69,99700,1019],{"class":82},[69,99702,94223],{"class":86},[69,99704,1726],{"class":90},[69,99706,1767],{"class":86},[69,99708,99553],{"class":90},[69,99710,94228],{"class":86},[69,99712,1471],{"class":90},[69,99714,1767],{"class":86},[69,99716,1465],{"class":90},[69,99718,1767],{"class":86},[69,99720,1733],{"class":90},[69,99722,1404],{"class":86},[69,99724,99725,99728,99730,99732,99734,99736,99738,99740,99742,99744,99746],{"class":71,"line":116},[69,99726,99727],{"class":86},"aaaa",[69,99729,1019],{"class":82},[69,99731,98891],{"class":86},[69,99733,1471],{"class":90},[69,99735,1767],{"class":86},[69,99737,1465],{"class":90},[69,99739,1767],{"class":86},[69,99741,1465],{"class":90},[69,99743,1767],{"class":86},[69,99745,1471],{"class":90},[69,99747,1404],{"class":86},[69,99749,99750,99753,99755,99758,99760,99762,99764,99766,99768,99770,99772],{"class":71,"line":133},[69,99751,99752],{"class":86},"bbbb",[69,99754,1019],{"class":82},[69,99756,99757],{"class":86},"bbb.reshape(",[69,99759,1471],{"class":90},[69,99761,1767],{"class":86},[69,99763,1465],{"class":90},[69,99765,1767],{"class":86},[69,99767,1465],{"class":90},[69,99769,1767],{"class":86},[69,99771,1471],{"class":90},[69,99773,1404],{"class":86},[69,99775,99776],{"class":71,"line":139},[69,99777,99572],{"class":75},[69,99779,99780,99783,99785,99787,99789],{"class":71,"line":401},[69,99781,99782],{"class":86},"np.concatenate((aaaa,bbbb),",[69,99784,48750],{"class":6458},[69,99786,1019],{"class":82},[69,99788,1583],{"class":90},[69,99790,99649],{"class":86},[69,99792,99793],{"class":71,"line":470},[69,99794,99795],{"class":75},"#结果：（4，3，3，2）\n",[69,99797,99798],{"class":71,"line":475},[69,99799,99604],{"class":75},[69,99801,99802,99804,99806,99808,99810],{"class":71,"line":482},[69,99803,99782],{"class":86},[69,99805,48750],{"class":6458},[69,99807,1019],{"class":82},[69,99809,1609],{"class":90},[69,99811,99649],{"class":86},[69,99813,99814],{"class":71,"line":497},[69,99815,99816],{"class":75},"#结果：（2，6，3，2）\n",[69,99818,99819],{"class":71,"line":502},[69,99820,99636],{"class":75},[69,99822,99823,99825,99827,99829,99831],{"class":71,"line":509},[69,99824,99782],{"class":86},[69,99826,48750],{"class":6458},[69,99828,1019],{"class":82},[69,99830,1471],{"class":90},[69,99832,99649],{"class":86},[69,99834,99835],{"class":71,"line":524},[69,99836,99837],{"class":75},"#结果：（2，3，6，2）\n",[69,99839,99840],{"class":71,"line":2888},[69,99841,99842],{"class":75},"#axis=3\n",[69,99844,99845,99847,99849,99851,99853],{"class":71,"line":2893},[69,99846,99782],{"class":86},[69,99848,48750],{"class":6458},[69,99850,1019],{"class":82},[69,99852,1465],{"class":90},[69,99854,99649],{"class":86},[69,99856,99857],{"class":71,"line":2899},[69,99858,99859],{"class":75},"#结果：（2，3，3，4）\n",[14,99861,99863],{"id":99862},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[29,99865,99866],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[29,99868,99869],{},"①二维数组",[59,99871,99873],{"className":31614,"code":99872,"language":31616,"meta":64,"style":64},"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",[66,99874,99875,99899,99923,99928,99933],{"__ignoreMap":64},[69,99876,99877,99879,99881,99883,99885,99887,99889,99891,99893,99895,99897],{"class":71,"line":72},[69,99878,94527],{"class":86},[69,99880,1019],{"class":82},[69,99882,94223],{"class":86},[69,99884,1609],{"class":90},[69,99886,1767],{"class":86},[69,99888,1911],{"class":90},[69,99890,94228],{"class":86},[69,99892,1465],{"class":90},[69,99894,1767],{"class":86},[69,99896,1684],{"class":90},[69,99898,1404],{"class":86},[69,99900,99901,99903,99905,99907,99909,99911,99913,99915,99917,99919,99921],{"class":71,"line":79},[69,99902,99408],{"class":86},[69,99904,1019],{"class":82},[69,99906,94223],{"class":86},[69,99908,1726],{"class":90},[69,99910,1767],{"class":86},[69,99912,2029],{"class":90},[69,99914,94228],{"class":86},[69,99916,1465],{"class":90},[69,99918,1767],{"class":86},[69,99920,1684],{"class":90},[69,99922,1404],{"class":86},[69,99924,99925],{"class":71,"line":106},[69,99926,99927],{"class":86},"np.hstack((aa,bb))\n",[69,99929,99930],{"class":71,"line":116},[69,99931,99932],{"class":75},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[69,99934,99935],{"class":71,"line":133},[69,99936,99937],{"class":75},"#np.hstack([aa,bb])\n",[29,99939,99454],{},[29,99941,99942],{},[24,99943],{"alt":64,"src":99944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[29,99946,99947],{},"等效于concatenate()函数中axis=1时的情况",[29,99949,99950],{},"②三维数组",[59,99952,99954],{"className":31614,"code":99953,"language":31616,"meta":64,"style":64},"#两个三行六列\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",[66,99955,99956,99960,99988,100016,100021,100026],{"__ignoreMap":64},[69,99957,99958],{"class":71,"line":72},[69,99959,99509],{"class":75},[69,99961,99962,99964,99966,99968,99970,99972,99974,99976,99978,99980,99982,99984,99986],{"class":71,"line":79},[69,99963,96742],{"class":86},[69,99965,1019],{"class":82},[69,99967,94223],{"class":86},[69,99969,1609],{"class":90},[69,99971,1767],{"class":86},[69,99973,1715],{"class":90},[69,99975,94228],{"class":86},[69,99977,1471],{"class":90},[69,99979,1767],{"class":86},[69,99981,1465],{"class":90},[69,99983,1767],{"class":86},[69,99985,1733],{"class":90},[69,99987,1404],{"class":86},[69,99989,99990,99992,99994,99996,99998,100000,100002,100004,100006,100008,100010,100012,100014],{"class":71,"line":106},[69,99991,99542],{"class":86},[69,99993,1019],{"class":82},[69,99995,94223],{"class":86},[69,99997,1726],{"class":90},[69,99999,1767],{"class":86},[69,100001,99553],{"class":90},[69,100003,94228],{"class":86},[69,100005,1471],{"class":90},[69,100007,1767],{"class":86},[69,100009,1465],{"class":90},[69,100011,1767],{"class":86},[69,100013,1733],{"class":90},[69,100015,1404],{"class":86},[69,100017,100018],{"class":71,"line":116},[69,100019,100020],{"class":75},"#使用hstack\n",[69,100022,100023],{"class":71,"line":133},[69,100024,100025],{"class":86},"np.hstack((aaa,bbb)).shape\n",[69,100027,100028],{"class":71,"line":139},[69,100029,100030],{"class":75},"#输出：（2，6，6）\n",[14,100032,100034],{"id":100033},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[29,100036,100037],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[29,100039,99869],{},[59,100041,100043],{"className":31614,"code":100042,"language":31616,"meta":64,"style":64},"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",[66,100044,100045,100069,100093,100098,100103,100108],{"__ignoreMap":64},[69,100046,100047,100049,100051,100053,100055,100057,100059,100061,100063,100065,100067],{"class":71,"line":72},[69,100048,94527],{"class":86},[69,100050,1019],{"class":82},[69,100052,94223],{"class":86},[69,100054,1609],{"class":90},[69,100056,1767],{"class":86},[69,100058,1911],{"class":90},[69,100060,94228],{"class":86},[69,100062,1465],{"class":90},[69,100064,1767],{"class":86},[69,100066,1684],{"class":90},[69,100068,1404],{"class":86},[69,100070,100071,100073,100075,100077,100079,100081,100083,100085,100087,100089,100091],{"class":71,"line":79},[69,100072,99408],{"class":86},[69,100074,1019],{"class":82},[69,100076,94223],{"class":86},[69,100078,1726],{"class":90},[69,100080,1767],{"class":86},[69,100082,2029],{"class":90},[69,100084,94228],{"class":86},[69,100086,1465],{"class":90},[69,100088,1767],{"class":86},[69,100090,1684],{"class":90},[69,100092,1404],{"class":86},[69,100094,100095],{"class":71,"line":106},[69,100096,100097],{"class":75},"#vstack 垂直方向进行堆叠\n",[69,100099,100100],{"class":71,"line":116},[69,100101,100102],{"class":86},"np.vstack((aa,bb))\n",[69,100104,100105],{"class":71,"line":133},[69,100106,100107],{"class":75},"#与hstack传的参数类似，等价于：\n",[69,100109,100110],{"class":71,"line":139},[69,100111,100112],{"class":86},"np.vstack([aa,bb])\n",[29,100114,99454],{},[29,100116,100117],{},[24,100118],{"alt":64,"src":100119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[29,100121,99950],{},[59,100123,100125],{"className":31614,"code":100124,"language":31616,"meta":64,"style":64},"#两个三行六列\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",[66,100126,100127,100131,100159,100187,100192,100197],{"__ignoreMap":64},[69,100128,100129],{"class":71,"line":72},[69,100130,99509],{"class":75},[69,100132,100133,100135,100137,100139,100141,100143,100145,100147,100149,100151,100153,100155,100157],{"class":71,"line":79},[69,100134,96742],{"class":86},[69,100136,1019],{"class":82},[69,100138,94223],{"class":86},[69,100140,1609],{"class":90},[69,100142,1767],{"class":86},[69,100144,1715],{"class":90},[69,100146,94228],{"class":86},[69,100148,1471],{"class":90},[69,100150,1767],{"class":86},[69,100152,1465],{"class":90},[69,100154,1767],{"class":86},[69,100156,1733],{"class":90},[69,100158,1404],{"class":86},[69,100160,100161,100163,100165,100167,100169,100171,100173,100175,100177,100179,100181,100183,100185],{"class":71,"line":106},[69,100162,99542],{"class":86},[69,100164,1019],{"class":82},[69,100166,94223],{"class":86},[69,100168,1726],{"class":90},[69,100170,1767],{"class":86},[69,100172,99553],{"class":90},[69,100174,94228],{"class":86},[69,100176,1471],{"class":90},[69,100178,1767],{"class":86},[69,100180,1465],{"class":90},[69,100182,1767],{"class":86},[69,100184,1733],{"class":90},[69,100186,1404],{"class":86},[69,100188,100189],{"class":71,"line":116},[69,100190,100191],{"class":75},"#使用vstack\n",[69,100193,100194],{"class":71,"line":133},[69,100195,100196],{"class":86},"np.vstack((aaa,bbb)).shape\n",[69,100198,100199],{"class":71,"line":139},[69,100200,100201],{"class":75},"#输出：（4，3，6）\n",[14,100203,100205],{"id":100204},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[29,100207,100208],{},"该方法是三维数组特有的方法",[29,100210,100211],{},"也就是说",[29,100213,100214],{},"一维数组拼接方法用：concatenate()",[29,100216,100217],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[29,100219,100220],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[29,100222,100223],{},"四维数组及多维数组只能用concatenate进行拼接",[59,100225,100227],{"className":31614,"code":100226,"language":31616,"meta":64,"style":64},"#两个三行六列\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",[66,100228,100229,100233,100261,100289,100294,100299],{"__ignoreMap":64},[69,100230,100231],{"class":71,"line":72},[69,100232,99509],{"class":75},[69,100234,100235,100237,100239,100241,100243,100245,100247,100249,100251,100253,100255,100257,100259],{"class":71,"line":79},[69,100236,96742],{"class":86},[69,100238,1019],{"class":82},[69,100240,94223],{"class":86},[69,100242,1609],{"class":90},[69,100244,1767],{"class":86},[69,100246,1715],{"class":90},[69,100248,94228],{"class":86},[69,100250,1471],{"class":90},[69,100252,1767],{"class":86},[69,100254,1465],{"class":90},[69,100256,1767],{"class":86},[69,100258,1733],{"class":90},[69,100260,1404],{"class":86},[69,100262,100263,100265,100267,100269,100271,100273,100275,100277,100279,100281,100283,100285,100287],{"class":71,"line":106},[69,100264,99542],{"class":86},[69,100266,1019],{"class":82},[69,100268,94223],{"class":86},[69,100270,1726],{"class":90},[69,100272,1767],{"class":86},[69,100274,99553],{"class":90},[69,100276,94228],{"class":86},[69,100278,1471],{"class":90},[69,100280,1767],{"class":86},[69,100282,1465],{"class":90},[69,100284,1767],{"class":86},[69,100286,1733],{"class":90},[69,100288,1404],{"class":86},[69,100290,100291],{"class":71,"line":116},[69,100292,100293],{"class":75},"#使用dstack\n",[69,100295,100296],{"class":71,"line":133},[69,100297,100298],{"class":86},"np.dstack((aaa,bbb)).shape\n",[69,100300,100301],{"class":71,"line":139},[69,100302,100303],{"class":75},"#结果：（2，3，12）\n",[1297,100305,100306],{},"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":64,"searchDepth":79,"depth":79,"links":100308},[100309,100310,100311,100312],{"id":99248,"depth":79,"text":99249},{"id":99862,"depth":79,"text":99863},{"id":100033,"depth":79,"text":100034},{"id":100204,"depth":79,"text":100205},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99240,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100319,"title":100320,"body":100321,"description":1322,"extension":1323,"meta":100596,"navigation":1325,"path":100597,"seo":100598,"stem":100599,"__hash__":100600},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100322,"toc":100594},[100323,100326,100329,100423,100426,100429,100432,100435,100438,100441,100444,100447,100591],[10,100324,100320],{"id":100325},"_7数组转置",[29,100327,100328],{},"使用transpose()函数",[59,100330,100332],{"className":31614,"code":100331,"language":31616,"meta":64,"style":64},"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",[66,100333,100334,100344,100368,100373,100378,100383,100388,100396,100400,100404,100409,100414,100419],{"__ignoreMap":64},[69,100335,100336,100338,100340,100342],{"class":71,"line":72},[69,100337,31628],{"class":82},[69,100339,32616],{"class":86},[69,100341,32619],{"class":82},[69,100343,32622],{"class":86},[69,100345,100346,100348,100350,100352,100354,100356,100358,100360,100362,100364,100366],{"class":71,"line":79},[69,100347,187],{"class":86},[69,100349,1019],{"class":82},[69,100351,32953],{"class":86},[69,100353,1609],{"class":90},[69,100355,1767],{"class":86},[69,100357,1911],{"class":90},[69,100359,94228],{"class":86},[69,100361,1684],{"class":90},[69,100363,1767],{"class":86},[69,100365,1465],{"class":90},[69,100367,1404],{"class":86},[69,100369,100370],{"class":71,"line":106},[69,100371,100372],{"class":75},"#二维数组转置\n",[69,100374,100375],{"class":71,"line":116},[69,100376,100377],{"class":75},"#调用transpose()函数\n",[69,100379,100380],{"class":71,"line":133},[69,100381,100382],{"class":86},"a.transpose()\n",[69,100384,100385],{"class":71,"line":139},[69,100386,100387],{"class":75},"#对于二维数组也可以采用.T来实现\n",[69,100389,100390,100393],{"class":71,"line":401},[69,100391,100392],{"class":86},"a.T",[69,100394,100395],{"class":75},"#与上述代码一样\n",[69,100397,100398],{"class":71,"line":470},[69,100399,94785],{"class":75},[69,100401,100402],{"class":71,"line":475},[69,100403,95149],{"class":1022},[69,100405,100406],{"class":71,"line":482},[69,100407,100408],{"class":1022},"array([[ 1,  4,  7, 10],\n",[69,100410,100411],{"class":71,"line":497},[69,100412,100413],{"class":1022},"       [ 2,  5,  8, 11],\n",[69,100415,100416],{"class":71,"line":502},[69,100417,100418],{"class":1022},"       [ 3,  6,  9, 12]])\n",[69,100420,100421],{"class":71,"line":509},[69,100422,95149],{"class":1022},[29,100424,100425],{},"也可以使用np.transpose()的形式",[29,100427,100428],{},"#多维数组进行转置 np.transpose()",[29,100430,100431],{},"#对二维数组也可以使用np.transpose()进行转置",[29,100433,100434],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[29,100436,100437],{},"第二个参数，维度可以理解为用axis中的数来理解",[29,100439,100440],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[29,100442,100443],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[29,100445,100446],{},"四维及以上的数组也是一样的道理",[59,100448,100450],{"className":31614,"code":100449,"language":31616,"meta":64,"style":64},"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",[66,100451,100452,100480,100485,100490,100495,100513,100518,100550,100555,100560,100565,100586],{"__ignoreMap":64},[69,100453,100454,100456,100458,100460,100462,100464,100466,100468,100470,100472,100474,100476,100478],{"class":71,"line":72},[69,100455,2207],{"class":86},[69,100457,1019],{"class":82},[69,100459,94223],{"class":86},[69,100461,1609],{"class":90},[69,100463,1767],{"class":86},[69,100465,1715],{"class":90},[69,100467,94228],{"class":86},[69,100469,1465],{"class":90},[69,100471,1767],{"class":86},[69,100473,1733],{"class":90},[69,100475,1767],{"class":86},[69,100477,1471],{"class":90},[69,100479,1404],{"class":86},[69,100481,100482],{"class":71,"line":79},[69,100483,100484],{"class":86},"x.shape\n",[69,100486,100487],{"class":71,"line":106},[69,100488,100489],{"class":75},"#结果：（3,6,2）\n",[69,100491,100492],{"class":71,"line":116},[69,100493,100494],{"class":75},"#使用np.transpose()进行转置 变为(2,6,3)\n",[69,100496,100497,100500,100502,100504,100506,100508,100510],{"class":71,"line":133},[69,100498,100499],{"class":86},"np.transpose(x,(",[69,100501,1471],{"class":90},[69,100503,1767],{"class":86},[69,100505,1609],{"class":90},[69,100507,1767],{"class":86},[69,100509,1583],{"class":90},[69,100511,100512],{"class":86},")).shape\n",[69,100514,100515],{"class":71,"line":139},[69,100516,100517],{"class":75},"#结果：(2,6,3)\n",[69,100519,100520,100522,100524,100526,100528,100530,100532,100534,100536,100538,100540,100542,100544,100546,100548],{"class":71,"line":401},[69,100521,99727],{"class":86},[69,100523,1019],{"class":82},[69,100525,94223],{"class":86},[69,100527,1609],{"class":90},[69,100529,1767],{"class":86},[69,100531,1715],{"class":90},[69,100533,94228],{"class":86},[69,100535,1465],{"class":90},[69,100537,1767],{"class":86},[69,100539,1471],{"class":90},[69,100541,1767],{"class":86},[69,100543,1609],{"class":90},[69,100545,1767],{"class":86},[69,100547,1733],{"class":90},[69,100549,1404],{"class":86},[69,100551,100552],{"class":71,"line":470},[69,100553,100554],{"class":86},"aaaa.shape\n",[69,100556,100557],{"class":71,"line":475},[69,100558,100559],{"class":75},"#结果：（3，2，1，6）\n",[69,100561,100562],{"class":71,"line":482},[69,100563,100564],{"class":75},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[69,100566,100567,100570,100572,100574,100576,100578,100580,100582,100584],{"class":71,"line":497},[69,100568,100569],{"class":86},"np.transpose(aaaa,(",[69,100571,1609],{"class":90},[69,100573,1767],{"class":86},[69,100575,1471],{"class":90},[69,100577,1767],{"class":86},[69,100579,1583],{"class":90},[69,100581,1767],{"class":86},[69,100583,1465],{"class":90},[69,100585,100512],{"class":86},[69,100587,100588],{"class":71,"line":502},[69,100589,100590],{"class":75},"#结果：(2,1,3,6)\n",[1297,100592,100593],{},"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":64,"searchDepth":79,"depth":79,"links":100595},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100320,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100602,"title":100603,"body":100604,"description":1322,"extension":1323,"meta":101338,"navigation":1325,"path":101339,"seo":101340,"stem":101341,"__hash__":101342},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100605,"toc":101336},[100606,100609,100612,100615,100618,100621,100624,100627,100630,100739,100742,100745,101333],[10,100607,100603],{"id":100608},"_8数组分割",[29,100610,100611],{},"split分割",[29,100613,100614],{},"numpy.split(ary,indics_or_sections,axis)",[29,100616,100617],{},"解释：",[29,100619,100620],{},"ary:被分割的数组",[29,100622,100623],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[29,100625,100626],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[29,100628,100629],{},"①一维数组的分割",[59,100631,100633],{"className":31614,"code":100632,"language":31616,"meta":64,"style":64},"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",[66,100634,100635,100651,100656,100665,100669,100674,100682,100686,100691,100696,100709,100713,100718,100730,100734],{"__ignoreMap":64},[69,100636,100637,100639,100641,100643,100645,100647,100649],{"class":71,"line":72},[69,100638,187],{"class":86},[69,100640,1019],{"class":82},[69,100642,94223],{"class":86},[69,100644,1609],{"class":90},[69,100646,1767],{"class":86},[69,100648,1809],{"class":90},[69,100650,1404],{"class":86},[69,100652,100653],{"class":71,"line":79},[69,100654,100655],{"class":75},"#如果传入整数，必须能够平分，否则会报错\n",[69,100657,100658,100661,100663],{"class":71,"line":106},[69,100659,100660],{"class":86},"np.split(a,",[69,100662,1471],{"class":90},[69,100664,1404],{"class":86},[69,100666,100667],{"class":71,"line":116},[69,100668,94785],{"class":75},[69,100670,100671],{"class":71,"line":133},[69,100672,100673],{"class":75},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[69,100675,100676,100678,100680],{"class":71,"line":139},[69,100677,100660],{"class":86},[69,100679,1684],{"class":90},[69,100681,1404],{"class":86},[69,100683,100684],{"class":71,"line":401},[69,100685,94785],{"class":75},[69,100687,100688],{"class":71,"line":470},[69,100689,100690],{"class":75},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[69,100692,100693],{"class":71,"line":475},[69,100694,100695],{"class":75},"#传入数组\n",[69,100697,100698,100701,100703,100705,100707],{"class":71,"line":482},[69,100699,100700],{"class":86},"np.split(a,[",[69,100702,1465],{"class":90},[69,100704,1767],{"class":86},[69,100706,1709],{"class":90},[69,100708,5901],{"class":86},[69,100710,100711],{"class":71,"line":497},[69,100712,94785],{"class":75},[69,100714,100715],{"class":71,"line":502},[69,100716,100717],{"class":75},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[69,100719,100720,100722,100724,100726,100728],{"class":71,"line":509},[69,100721,100700],{"class":86},[69,100723,1709],{"class":90},[69,100725,1767],{"class":86},[69,100727,1758],{"class":90},[69,100729,5901],{"class":86},[69,100731,100732],{"class":71,"line":524},[69,100733,94785],{"class":75},[69,100735,100736],{"class":71,"line":2888},[69,100737,100738],{"class":75},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[29,100740,100741],{},"②二维数组的分割",[29,100743,100744],{},"使用split()",[59,100746,100748],{"className":31614,"code":100747,"language":31616,"meta":64,"style":64},"#二维数组分割\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",[66,100749,100750,100755,100779,100784,100793,100797,100801,100806,100811,100816,100821,100826,100831,100836,100840,100853,100857,100861,100865,100869,100873,100878,100883,100888,100892,100897,100913,100917,100921,100926,100931,100936,100941,100946,100951,100956,100961,100966,100971,100976,100981,100986,100991,100996,101001,101006,101011,101015,101019,101039,101043,101047,101052,101057,101062,101067,101072,101077,101082,101087,101092,101097,101102,101107,101112,101117,101122,101127,101132,101137,101141,101146,101155,101159,101163,101167,101171,101175,101179,101183,101187,101191,101200,101204,101208,101212,101216,101220,101224,101228,101232,101236,101240,101244,101248,101252,101256,101260,101264,101268,101272,101276,101280,101284,101297,101301,101305,101309,101313,101317,101321,101325,101329],{"__ignoreMap":64},[69,100751,100752],{"class":71,"line":72},[69,100753,100754],{"class":75},"#二维数组分割\n",[69,100756,100757,100759,100761,100763,100765,100767,100769,100771,100773,100775,100777],{"class":71,"line":79},[69,100758,94527],{"class":86},[69,100760,1019],{"class":82},[69,100762,94223],{"class":86},[69,100764,1609],{"class":90},[69,100766,1767],{"class":86},[69,100768,1715],{"class":90},[69,100770,94228],{"class":86},[69,100772,1733],{"class":90},[69,100774,1767],{"class":86},[69,100776,1733],{"class":90},[69,100778,1404],{"class":86},[69,100780,100781],{"class":71,"line":106},[69,100782,100783],{"class":75},"#默认axis=0  传入整数平均分,按行来的\n",[69,100785,100786,100789,100791],{"class":71,"line":116},[69,100787,100788],{"class":86},"np.split(aa,",[69,100790,1465],{"class":90},[69,100792,1404],{"class":86},[69,100794,100795],{"class":71,"line":133},[69,100796,96985],{"class":75},[69,100798,100799],{"class":71,"line":139},[69,100800,95149],{"class":1022},[69,100802,100803],{"class":71,"line":401},[69,100804,100805],{"class":1022},"[array([[ 1,  2,  3,  4,  5,  6],\n",[69,100807,100808],{"class":71,"line":470},[69,100809,100810],{"class":1022},"        [ 7,  8,  9, 10, 11, 12]]),\n",[69,100812,100813],{"class":71,"line":475},[69,100814,100815],{"class":1022}," array([[13, 14, 15, 16, 17, 18],\n",[69,100817,100818],{"class":71,"line":482},[69,100819,100820],{"class":1022},"        [19, 20, 21, 22, 23, 24]]),\n",[69,100822,100823],{"class":71,"line":497},[69,100824,100825],{"class":1022}," array([[25, 26, 27, 28, 29, 30],\n",[69,100827,100828],{"class":71,"line":502},[69,100829,100830],{"class":1022},"        [31, 32, 33, 34, 35, 36]])]\n",[69,100832,100833],{"class":71,"line":509},[69,100834,100835],{"class":1022}," '''\n",[69,100837,100838],{"class":71,"line":524},[69,100839,100695],{"class":75},[69,100841,100842,100845,100847,100849,100851],{"class":71,"line":2888},[69,100843,100844],{"class":86},"np.split(aa,[",[69,100846,1471],{"class":90},[69,100848,1767],{"class":86},[69,100850,1709],{"class":90},[69,100852,5901],{"class":86},[69,100854,100855],{"class":71,"line":2893},[69,100856,96985],{"class":75},[69,100858,100859],{"class":71,"line":2899},[69,100860,95149],{"class":1022},[69,100862,100863],{"class":71,"line":2919},[69,100864,100805],{"class":1022},[69,100866,100867],{"class":71,"line":2924},[69,100868,100810],{"class":1022},[69,100870,100871],{"class":71,"line":2938},[69,100872,100815],{"class":1022},[69,100874,100875],{"class":71,"line":2943},[69,100876,100877],{"class":1022},"        [19, 20, 21, 22, 23, 24],\n",[69,100879,100880],{"class":71,"line":2972},[69,100881,100882],{"class":1022},"        [25, 26, 27, 28, 29, 30]]),\n",[69,100884,100885],{"class":71,"line":2977},[69,100886,100887],{"class":1022}," array([[31, 32, 33, 34, 35, 36]])]\n",[69,100889,100890],{"class":71,"line":2994},[69,100891,95149],{"class":1022},[69,100893,100894],{"class":71,"line":2999},[69,100895,100896],{"class":75},"#axis=1 按照列来分\n",[69,100898,100899,100901,100903,100905,100907,100909,100911],{"class":71,"line":3004},[69,100900,100788],{"class":86},[69,100902,1465],{"class":90},[69,100904,1767],{"class":86},[69,100906,48750],{"class":6458},[69,100908,1019],{"class":82},[69,100910,1609],{"class":90},[69,100912,1404],{"class":86},[69,100914,100915],{"class":71,"line":3009},[69,100916,96985],{"class":75},[69,100918,100919],{"class":71,"line":3023},[69,100920,95149],{"class":1022},[69,100922,100923],{"class":71,"line":3028},[69,100924,100925],{"class":1022},"[array([[ 1,  2],\n",[69,100927,100928],{"class":71,"line":3821},[69,100929,100930],{"class":1022},"        [ 7,  8],\n",[69,100932,100933],{"class":71,"line":3835},[69,100934,100935],{"class":1022},"        [13, 14],\n",[69,100937,100938],{"class":71,"line":3843},[69,100939,100940],{"class":1022},"        [19, 20],\n",[69,100942,100943],{"class":71,"line":3848},[69,100944,100945],{"class":1022},"        [25, 26],\n",[69,100947,100948],{"class":71,"line":3854},[69,100949,100950],{"class":1022},"        [31, 32]]),\n",[69,100952,100953],{"class":71,"line":3860},[69,100954,100955],{"class":1022}," array([[ 3,  4],\n",[69,100957,100958],{"class":71,"line":3865},[69,100959,100960],{"class":1022},"        [ 9, 10],\n",[69,100962,100963],{"class":71,"line":9190},[69,100964,100965],{"class":1022},"        [15, 16],\n",[69,100967,100968],{"class":71,"line":9214},[69,100969,100970],{"class":1022},"        [21, 22],\n",[69,100972,100973],{"class":71,"line":9219},[69,100974,100975],{"class":1022},"        [27, 28],\n",[69,100977,100978],{"class":71,"line":9225},[69,100979,100980],{"class":1022},"        [33, 34]]),\n",[69,100982,100983],{"class":71,"line":9252},[69,100984,100985],{"class":1022}," array([[ 5,  6],\n",[69,100987,100988],{"class":71,"line":9257},[69,100989,100990],{"class":1022},"        [11, 12],\n",[69,100992,100993],{"class":71,"line":9263},[69,100994,100995],{"class":1022},"        [17, 18],\n",[69,100997,100998],{"class":71,"line":9275},[69,100999,101000],{"class":1022},"        [23, 24],\n",[69,101002,101003],{"class":71,"line":9287},[69,101004,101005],{"class":1022},"        [29, 30],\n",[69,101007,101008],{"class":71,"line":9299},[69,101009,101010],{"class":1022},"        [35, 36]])]\n",[69,101012,101013],{"class":71,"line":10958},[69,101014,100835],{"class":1022},[69,101016,101017],{"class":71,"line":10983},[69,101018,100695],{"class":75},[69,101020,101021,101023,101025,101027,101029,101031,101033,101035,101037],{"class":71,"line":11006},[69,101022,100844],{"class":86},[69,101024,1609],{"class":90},[69,101026,1767],{"class":86},[69,101028,1471],{"class":90},[69,101030,42845],{"class":86},[69,101032,48750],{"class":6458},[69,101034,1019],{"class":82},[69,101036,1609],{"class":90},[69,101038,1404],{"class":86},[69,101040,101041],{"class":71,"line":11030},[69,101042,94785],{"class":75},[69,101044,101045],{"class":71,"line":11035},[69,101046,95149],{"class":1022},[69,101048,101049],{"class":71,"line":11040},[69,101050,101051],{"class":1022},"[array([[ 1],\n",[69,101053,101054],{"class":71,"line":11045},[69,101055,101056],{"class":1022},"        [ 7],\n",[69,101058,101059],{"class":71,"line":11054},[69,101060,101061],{"class":1022},"        [13],\n",[69,101063,101064],{"class":71,"line":11059},[69,101065,101066],{"class":1022},"        [19],\n",[69,101068,101069],{"class":71,"line":11065},[69,101070,101071],{"class":1022},"        [25],\n",[69,101073,101074],{"class":71,"line":11086},[69,101075,101076],{"class":1022},"        [31]]),\n",[69,101078,101079],{"class":71,"line":11092},[69,101080,101081],{"class":1022}," array([[ 2],\n",[69,101083,101084],{"class":71,"line":11106},[69,101085,101086],{"class":1022},"        [ 8],\n",[69,101088,101089],{"class":71,"line":11112},[69,101090,101091],{"class":1022},"        [14],\n",[69,101093,101094],{"class":71,"line":11139},[69,101095,101096],{"class":1022},"        [20],\n",[69,101098,101099],{"class":71,"line":11148},[69,101100,101101],{"class":1022},"        [26],\n",[69,101103,101104],{"class":71,"line":11154},[69,101105,101106],{"class":1022},"        [32]]),\n",[69,101108,101109],{"class":71,"line":11162},[69,101110,101111],{"class":1022}," array([[ 3,  4,  5,  6],\n",[69,101113,101114],{"class":71,"line":11167},[69,101115,101116],{"class":1022},"        [ 9, 10, 11, 12],\n",[69,101118,101119],{"class":71,"line":17843},[69,101120,101121],{"class":1022},"        [15, 16, 17, 18],\n",[69,101123,101124],{"class":71,"line":17849},[69,101125,101126],{"class":1022},"        [21, 22, 23, 24],\n",[69,101128,101129],{"class":71,"line":17872},[69,101130,101131],{"class":1022},"        [27, 28, 29, 30],\n",[69,101133,101134],{"class":71,"line":17878},[69,101135,101136],{"class":1022},"        [33, 34, 35, 36]])]\n",[69,101138,101139],{"class":71,"line":17901},[69,101140,95149],{"class":1022},[69,101142,101143],{"class":71,"line":17915},[69,101144,101145],{"class":75},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[69,101147,101148,101151,101153],{"class":71,"line":17935},[69,101149,101150],{"class":86},"np.vsplit(aa,",[69,101152,1465],{"class":90},[69,101154,1404],{"class":86},[69,101156,101157],{"class":71,"line":17941},[69,101158,94785],{"class":75},[69,101160,101161],{"class":71,"line":17952},[69,101162,95149],{"class":1022},[69,101164,101165],{"class":71,"line":17975},[69,101166,100805],{"class":1022},[69,101168,101169],{"class":71,"line":17997},[69,101170,100810],{"class":1022},[69,101172,101173],{"class":71,"line":18002},[69,101174,100815],{"class":1022},[69,101176,101177],{"class":71,"line":18008},[69,101178,100820],{"class":1022},[69,101180,101181],{"class":71,"line":18022},[69,101182,100825],{"class":1022},[69,101184,101185],{"class":71,"line":18035},[69,101186,100830],{"class":1022},[69,101188,101189],{"class":71,"line":18040},[69,101190,95149],{"class":1022},[69,101192,101193,101196,101198],{"class":71,"line":18054},[69,101194,101195],{"class":86},"np.hsplit(aa,",[69,101197,1465],{"class":90},[69,101199,1404],{"class":86},[69,101201,101202],{"class":71,"line":18059},[69,101203,94785],{"class":75},[69,101205,101206],{"class":71,"line":18065},[69,101207,95149],{"class":1022},[69,101209,101210],{"class":71,"line":18070},[69,101211,100925],{"class":1022},[69,101213,101214],{"class":71,"line":18084},[69,101215,100930],{"class":1022},[69,101217,101218],{"class":71,"line":18089},[69,101219,100935],{"class":1022},[69,101221,101222],{"class":71,"line":18094},[69,101223,100940],{"class":1022},[69,101225,101226],{"class":71,"line":18108},[69,101227,100945],{"class":1022},[69,101229,101230],{"class":71,"line":18120},[69,101231,100950],{"class":1022},[69,101233,101234],{"class":71,"line":18125},[69,101235,100955],{"class":1022},[69,101237,101238],{"class":71,"line":18138},[69,101239,100960],{"class":1022},[69,101241,101242],{"class":71,"line":18143},[69,101243,100965],{"class":1022},[69,101245,101246],{"class":71,"line":18148},[69,101247,100970],{"class":1022},[69,101249,101250],{"class":71,"line":18153},[69,101251,100975],{"class":1022},[69,101253,101254],{"class":71,"line":18166},[69,101255,100980],{"class":1022},[69,101257,101258],{"class":71,"line":18171},[69,101259,100985],{"class":1022},[69,101261,101262],{"class":71,"line":33869},[69,101263,100990],{"class":1022},[69,101265,101266],{"class":71,"line":33875},[69,101267,100995],{"class":1022},[69,101269,101270],{"class":71,"line":33881},[69,101271,101000],{"class":1022},[69,101273,101274],{"class":71,"line":33887},[69,101275,101005],{"class":1022},[69,101277,101278],{"class":71,"line":33893},[69,101279,101010],{"class":1022},[69,101281,101282],{"class":71,"line":33904},[69,101283,95149],{"class":1022},[69,101285,101286,101289,101291,101293,101295],{"class":71,"line":33910},[69,101287,101288],{"class":86},"np.vsplit(aa,[",[69,101290,1471],{"class":90},[69,101292,1767],{"class":86},[69,101294,1709],{"class":90},[69,101296,5901],{"class":86},[69,101298,101299],{"class":71,"line":33930},[69,101300,94785],{"class":75},[69,101302,101303],{"class":71,"line":33936},[69,101304,95149],{"class":1022},[69,101306,101307],{"class":71,"line":33947},[69,101308,100805],{"class":1022},[69,101310,101311],{"class":71,"line":33953},[69,101312,100810],{"class":1022},[69,101314,101315],{"class":71,"line":33959},[69,101316,100815],{"class":1022},[69,101318,101319],{"class":71,"line":33965},[69,101320,100877],{"class":1022},[69,101322,101323],{"class":71,"line":33971},[69,101324,100882],{"class":1022},[69,101326,101327],{"class":71,"line":33977},[69,101328,100887],{"class":1022},[69,101330,101331],{"class":71,"line":33983},[69,101332,100835],{"class":1022},[1297,101334,101335],{},"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":64,"searchDepth":79,"depth":79,"links":101337},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100603,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101344,"title":101345,"body":101346,"description":1322,"extension":1323,"meta":101840,"navigation":1325,"path":101841,"seo":101842,"stem":101843,"__hash__":101844},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101347,"toc":101831},[101348,101351,101354,101379,101383,101442,101494,101498,101500,101536,101590,101592,101630,101701,101705,101710,101714,101717,101750,101753,101757,101760,101763,101766,101769,101774,101778,101781,101784,101787,101790,101795,101799,101804,101807,101828],[10,101349,101345],{"id":101350},"_9数学函数",[29,101352,101353],{},"补充回顾：python的列表推导式",[59,101355,101357],{"className":31614,"code":101356,"language":31616,"meta":64,"style":64},"[1\u002Fi for i in a]\n",[66,101358,101359],{"__ignoreMap":64},[69,101360,101361,101363,101365,101367,101370,101372,101374,101376],{"class":71,"line":72},[69,101362,2277],{"class":86},[69,101364,1609],{"class":90},[69,101366,1972],{"class":82},[69,101368,101369],{"class":86},"i ",[69,101371,4269],{"class":82},[69,101373,10680],{"class":86},[69,101375,27280],{"class":82},[69,101377,101378],{"class":86}," a]\n",[14,101380,101382],{"id":101381},"_91-求倒数","9.1 求倒数",[59,101384,101386],{"className":31614,"code":101385,"language":31616,"meta":64,"style":64},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[66,101387,101388,101393,101421,101433],{"__ignoreMap":64},[69,101389,101390],{"class":71,"line":72},[69,101391,101392],{"class":75},"#数组求倒数\n",[69,101394,101395,101397,101399,101401,101403,101405,101407,101409,101411,101413,101415,101417,101419],{"class":71,"line":79},[69,101396,187],{"class":86},[69,101398,1019],{"class":82},[69,101400,2277],{"class":86},[69,101402,1609],{"class":90},[69,101404,1767],{"class":86},[69,101406,1471],{"class":90},[69,101408,1767],{"class":86},[69,101410,1465],{"class":90},[69,101412,1767],{"class":86},[69,101414,1684],{"class":90},[69,101416,1767],{"class":86},[69,101418,1709],{"class":90},[69,101420,34482],{"class":86},[69,101422,101423,101425,101427,101430],{"class":71,"line":106},[69,101424,1654],{"class":86},[69,101426,1019],{"class":82},[69,101428,101429],{"class":86},"np.array(a)",[69,101431,101432],{"class":75},"#将列表转换为数组\n",[69,101434,101435,101437,101439],{"class":71,"line":116},[69,101436,1609],{"class":90},[69,101438,1972],{"class":82},[69,101440,101441],{"class":86},"b\n",[59,101443,101445],{"className":31614,"code":101444,"language":31616,"meta":64,"style":64},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[66,101446,101447,101475,101484,101489],{"__ignoreMap":64},[69,101448,101449,101451,101453,101455,101457,101459,101461,101463,101465,101467,101469,101471,101473],{"class":71,"line":72},[69,101450,187],{"class":86},[69,101452,1019],{"class":82},[69,101454,2277],{"class":86},[69,101456,1609],{"class":90},[69,101458,1767],{"class":86},[69,101460,1471],{"class":90},[69,101462,1767],{"class":86},[69,101464,1465],{"class":90},[69,101466,1767],{"class":86},[69,101468,1684],{"class":90},[69,101470,1767],{"class":86},[69,101472,1709],{"class":90},[69,101474,34482],{"class":86},[69,101476,101477,101479,101481],{"class":71,"line":79},[69,101478,1654],{"class":86},[69,101480,1019],{"class":82},[69,101482,101483],{"class":86},"np.array(a)\n",[69,101485,101486],{"class":71,"line":106},[69,101487,101488],{"class":75},"#调用numpy中的函数reciprocal()\n",[69,101490,101491],{"class":71,"line":116},[69,101492,101493],{"class":86},"np.reciprocal(b)\n",[14,101495,101497],{"id":101496},"_92-求平方","9.2 求平方",[29,101499,95751],{},[59,101501,101503],{"className":31614,"code":101502,"language":31616,"meta":64,"style":64},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[66,101504,101505,101510,101515,101531],{"__ignoreMap":64},[69,101506,101507],{"class":71,"line":72},[69,101508,101509],{"class":75},"#square()，求平方\n",[69,101511,101512],{"class":71,"line":79},[69,101513,101514],{"class":75},"#一维数组\n",[69,101516,101517,101519,101521,101523,101525,101527,101529],{"class":71,"line":106},[69,101518,187],{"class":86},[69,101520,1019],{"class":82},[69,101522,94223],{"class":86},[69,101524,1609],{"class":90},[69,101526,1767],{"class":86},[69,101528,390],{"class":90},[69,101530,1404],{"class":86},[69,101532,101533],{"class":71,"line":116},[69,101534,101535],{"class":86},"np.square(a)\n",[59,101537,101539],{"className":31614,"code":101538,"language":31616,"meta":64,"style":64},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[66,101540,101541,101546,101551,101572],{"__ignoreMap":64},[69,101542,101543],{"class":71,"line":72},[69,101544,101545],{"class":75},"#或者通过循环遍历的形式来计算\n",[69,101547,101548],{"class":71,"line":79},[69,101549,101550],{"class":75},"#这是一个列表\n",[69,101552,101553,101556,101558,101560,101562,101564,101566,101569],{"class":71,"line":106},[69,101554,101555],{"class":86},"[i",[69,101557,1843],{"class":82},[69,101559,101369],{"class":86},[69,101561,4269],{"class":82},[69,101563,10680],{"class":86},[69,101565,27280],{"class":82},[69,101567,101568],{"class":86}," a]",[69,101570,101571],{"class":75},"#这个求完之后在数列当中\n",[69,101573,101574,101577,101579,101581,101583,101585,101587],{"class":71,"line":116},[69,101575,101576],{"class":86},"np.array([i",[69,101578,1843],{"class":82},[69,101580,101369],{"class":86},[69,101582,4269],{"class":82},[69,101584,10680],{"class":86},[69,101586,27280],{"class":82},[69,101588,101589],{"class":86}," a])\n",[29,101591,94512],{},[59,101593,101595],{"className":31614,"code":101594,"language":31616,"meta":64,"style":64},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[66,101596,101597,101601,101625],{"__ignoreMap":64},[69,101598,101599],{"class":71,"line":72},[69,101600,94522],{"class":75},[69,101602,101603,101605,101607,101609,101611,101613,101615,101617,101619,101621,101623],{"class":71,"line":79},[69,101604,94527],{"class":86},[69,101606,1019],{"class":82},[69,101608,94223],{"class":86},[69,101610,1609],{"class":90},[69,101612,1767],{"class":86},[69,101614,1911],{"class":90},[69,101616,94228],{"class":86},[69,101618,1684],{"class":90},[69,101620,1767],{"class":86},[69,101622,1465],{"class":90},[69,101624,1404],{"class":86},[69,101626,101627],{"class":71,"line":106},[69,101628,101629],{"class":86},"np.square(aa)\n",[59,101631,101633],{"className":31614,"code":101632,"language":31616,"meta":64,"style":64},"#传统的方式\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",[66,101634,101635,101640,101649,101665,101681,101696],{"__ignoreMap":64},[69,101636,101637],{"class":71,"line":72},[69,101638,101639],{"class":75},"#传统的方式\n",[69,101641,101642,101644,101646],{"class":71,"line":79},[69,101643,99408],{"class":86},[69,101645,1019],{"class":82},[69,101647,101648],{"class":86},"np.empty_like(aa)\n",[69,101650,101651,101653,101655,101657,101659,101661,101663],{"class":71,"line":106},[69,101652,4269],{"class":82},[69,101654,10680],{"class":86},[69,101656,27280],{"class":82},[69,101658,33679],{"class":90},[69,101660,1398],{"class":86},[69,101662,1684],{"class":90},[69,101664,32022],{"class":86},[69,101666,101667,101669,101671,101673,101675,101677,101679],{"class":71,"line":116},[69,101668,4445],{"class":82},[69,101670,10742],{"class":86},[69,101672,27280],{"class":82},[69,101674,33679],{"class":90},[69,101676,1398],{"class":86},[69,101678,1465],{"class":90},[69,101680,32022],{"class":86},[69,101682,101683,101686,101688,101691,101693],{"class":71,"line":133},[69,101684,101685],{"class":86},"        bb[i,j]",[69,101687,1019],{"class":82},[69,101689,101690],{"class":86},"aa[i,j]",[69,101692,1843],{"class":82},[69,101694,101695],{"class":86},"aa[i,j]\n",[69,101697,101698],{"class":71,"line":139},[69,101699,101700],{"class":86},"bb\n",[14,101702,101704],{"id":101703},"_93-求各元素的符号","9.3 求各元素的符号",[29,101706,101707],{},[24,101708],{"alt":64,"src":101709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101711,101713],{"id":101712},"_94-modf函数","9.4 modf函数",[29,101715,101716],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[59,101718,101720],{"className":31614,"code":101719,"language":31616,"meta":64,"style":64},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[66,101721,101722,101745],{"__ignoreMap":64},[69,101723,101724,101726,101728,101730,101732,101734,101736,101738,101740,101743],{"class":71,"line":72},[69,101725,187],{"class":86},[69,101727,1019],{"class":82},[69,101729,94223],{"class":86},[69,101731,1920],{"class":82},[69,101733,390],{"class":90},[69,101735,1767],{"class":86},[69,101737,390],{"class":90},[69,101739,1767],{"class":86},[69,101741,101742],{"class":90},"0.3",[69,101744,1404],{"class":86},[69,101746,101747],{"class":71,"line":79},[69,101748,101749],{"class":86},"np.modf(a)\n",[29,101751,101752],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101754,101756],{"id":101755},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[29,101758,101759],{},"np.cell()",[29,101761,101762],{},"np.floor()",[29,101764,101765],{},"np.rint()",[29,101767,101768],{},"对各元素分别向上取整、向下取整、四舍五入",[29,101770,101771],{},[24,101772],{"alt":64,"src":101773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101775,101777],{"id":101776},"_96-around函数","9.6 around()函数",[29,101779,101780],{},"around()函数也可以实现对数的小数位数进行操作",[29,101782,101783],{},"其中的参数：",[29,101785,101786],{},"1.要传的数组",[29,101788,101789],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[29,101791,101792],{},[24,101793],{"alt":64,"src":101794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101796,101798],{"id":101797},"_97-三角函数","9.7 三角函数",[29,101800,101801],{},[24,101802],{"alt":64,"src":101803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[29,101805,101806],{},"引入图像模块非常重要",[59,101808,101810],{"className":31614,"code":101809,"language":31616,"meta":64,"style":64},"from matplotlib import pyplot as plt\n",[66,101811,101812],{"__ignoreMap":64},[69,101813,101814,101816,101819,101821,101824,101826],{"class":71,"line":72},[69,101815,31973],{"class":82},[69,101817,101818],{"class":86}," matplotlib ",[69,101820,31628],{"class":82},[69,101822,101823],{"class":86}," pyplot ",[69,101825,32619],{"class":82},[69,101827,32673],{"class":86},[1297,101829,101830],{},"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":64,"searchDepth":79,"depth":79,"links":101832},[101833,101834,101835,101836,101837,101838,101839],{"id":101381,"depth":79,"text":101382},{"id":101496,"depth":79,"text":101497},{"id":101703,"depth":79,"text":101704},{"id":101712,"depth":79,"text":101713},{"id":101755,"depth":79,"text":101756},{"id":101776,"depth":79,"text":101777},{"id":101797,"depth":79,"text":101798},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101345,"description":1322},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101846,"title":101847,"body":101848,"description":1322,"extension":1323,"meta":101852,"navigation":1325,"path":101853,"seo":101854,"stem":101855,"__hash__":101856},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101849,"toc":101850},[],{"title":64,"searchDepth":79,"depth":79,"links":101851},[],{"category":51656},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101847,"description":1322},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101858,"title":101859,"body":101860,"description":64,"extension":1323,"meta":103868,"navigation":1325,"path":103869,"seo":103870,"stem":103871,"__hash__":103872},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101861,"toc":103844},[101862,101865,101869,101872,101875,101881,101884,101907,101910,101944,101947,101988,101992,101995,102088,102091,102135,102138,102155,102158,102172,102175,102178,102223,102226,102263,102267,102270,102276,102281,102301,102305,102308,102374,102377,102395,102399,102402,102431,102441,102447,102451,102454,102460,102471,102475,102478,102508,102511,102791,102794,102797,102808,102811,102814,102836,102843,102846,102864,102867,102870,102884,102892,102895,102921,102927,102930,102933,102943,102955,102975,102984,103004,103014,103038,103051,103065,103070,103111,103128,103153,103165,103185,103191,103236,103255,103272,103285,103301,103308,103320,103329,103364,103385,103410,103423,103447,103462,103487,103490,103511,103520,103523,103534,103538,103541,103547,103559,103566,103570,103573,103585,103588,103602,103605,103615,103625,103628,103668,103671,103675,103681,103684,103698,103702,103705,103738,103742,103745,103768,103776,103779,103785,103791,103794,103797,103825,103829,103832,103838,103841],[10,101863,101859],{"id":101864},"_1环境安装与第一个-mujoco-程序",[14,101866,101868],{"id":101867},"_1目标说明","1.目标说明",[29,101870,101871],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[29,101873,101874],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[59,101876,101879],{"className":101877,"code":101878,"language":540,"meta":64},[538],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[66,101880,101878],{"__ignoreMap":64},[29,101882,101883],{},"需要掌握:",[37,101885,101886,101889,101892,101897,101902],{},[40,101887,101888],{},"Fedora 44 下 MuJoCo 的系统依赖",[40,101890,101891],{},"Python 虚拟环境创建",[40,101893,101894],{},[66,101895,101896],{},"mujoco.MjModel",[40,101898,101899],{},[66,101900,101901],{},"mujoco.MjData",[40,101903,101904],{},[66,101905,101906],{},"mujoco.mj_step(model, data)",[29,101908,101909],{},"MuJoCo 中最重要的两个对象:",[1530,101911,101912,101922],{},[1533,101913,101914],{},[1536,101915,101916,101919],{},[1539,101917,101918],{"align":1202},"对象",[1539,101920,101921],{"align":1202},"含义",[1576,101923,101924,101934],{},[1536,101925,101926,101931],{},[1581,101927,101928],{"align":1202},[66,101929,101930],{},"MjModel",[1581,101932,101933],{"align":1202},"模型结构，来自 XML，基本不随时间变化",[1536,101935,101936,101941],{},[1581,101937,101938],{"align":1202},[66,101939,101940],{},"MjData",[1581,101942,101943],{"align":1202},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[29,101945,101946],{},"可以先用一个类比理解：",[1530,101948,101949,101959],{},[1533,101950,101951],{},[1536,101952,101953,101956],{},[1539,101954,101955],{"align":1202},"类比",[1539,101957,101958],{"align":1202},"MuJoCo 对象",[1576,101960,101961,101970,101979],{},[1536,101962,101963,101966],{},[1581,101964,101965],{"align":1202},"游戏地图和角色配置",[1581,101967,101968],{"align":1202},[66,101969,101930],{},[1536,101971,101972,101975],{},[1581,101973,101974],{"align":1202},"游戏运行到当前帧的状态",[1581,101976,101977],{"align":1202},[66,101978,101940],{},[1536,101980,101981,101984],{},[1581,101982,101983],{"align":1202},"前进一帧",[1581,101985,101986],{"align":1202},[66,101987,101906],{},[14,101989,101991],{"id":101990},"_2环境与依赖安装","2.环境与依赖安装",[29,101993,101994],{},"Fedora 44 系统依赖:",[59,101996,101998],{"className":25059,"code":101997,"language":25061,"meta":64,"style":64},"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",[66,101999,102000,102012,102025,102038,102048,102058,102077],{"__ignoreMap":64},[69,102001,102002,102004,102006,102008,102010],{"class":71,"line":72},[69,102003,25813],{"class":109},[69,102005,27551],{"class":1022},[69,102007,25071],{"class":1022},[69,102009,27636],{"class":90},[69,102011,25915],{"class":90},[69,102013,102014,102017,102020,102023],{"class":71,"line":79},[69,102015,102016],{"class":1022},"  python3",[69,102018,102019],{"class":1022}," python3-pip",[69,102021,102022],{"class":1022}," python3-virtualenv",[69,102024,25915],{"class":90},[69,102026,102027,102030,102033,102036],{"class":71,"line":106},[69,102028,102029],{"class":1022},"  mesa-libGL",[69,102031,102032],{"class":1022}," mesa-libGLU",[69,102034,102035],{"class":1022}," mesa-dri-drivers",[69,102037,25915],{"class":90},[69,102039,102040,102043,102046],{"class":71,"line":116},[69,102041,102042],{"class":1022},"  libglvnd-glx",[69,102044,102045],{"class":1022}," libglvnd-opengl",[69,102047,25915],{"class":90},[69,102049,102050,102053,102056],{"class":71,"line":133},[69,102051,102052],{"class":1022},"  glfw",[69,102054,102055],{"class":1022}," glfw-devel",[69,102057,25915],{"class":90},[69,102059,102060,102063,102066,102069,102072,102075],{"class":71,"line":139},[69,102061,102062],{"class":1022},"  libX11",[69,102064,102065],{"class":1022}," libXcursor",[69,102067,102068],{"class":1022}," libXi",[69,102070,102071],{"class":1022}," libXinerama",[69,102073,102074],{"class":1022}," libXrandr",[69,102076,25915],{"class":90},[69,102078,102079,102082,102085],{"class":71,"line":401},[69,102080,102081],{"class":1022},"  gcc",[69,102083,102084],{"class":1022}," gcc-c++",[69,102086,102087],{"class":1022}," make\n",[29,102089,102090],{},"创建 Python 环境:",[59,102092,102094],{"className":25059,"code":102093,"language":25061,"meta":64,"style":64},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[66,102095,102096,102110,102118],{"__ignoreMap":64},[69,102097,102098,102101,102104,102107],{"class":71,"line":72},[69,102099,102100],{"class":109},"python3",[69,102102,102103],{"class":90}," -m",[69,102105,102106],{"class":1022}," venv",[69,102108,102109],{"class":1022}," .venv\n",[69,102111,102112,102115],{"class":71,"line":79},[69,102113,102114],{"class":90},"source",[69,102116,102117],{"class":1022}," .venv\u002Fbin\u002Factivate\n",[69,102119,102120,102122,102124,102127,102129,102132],{"class":71,"line":106},[69,102121,31616],{"class":109},[69,102123,102103],{"class":90},[69,102125,102126],{"class":1022}," pip",[69,102128,25071],{"class":1022},[69,102130,102131],{"class":90}," --upgrade",[69,102133,102134],{"class":1022}," pip\n",[29,102136,102137],{},"pip 安装:",[59,102139,102141],{"className":25059,"code":102140,"language":25061,"meta":64,"style":64},"pip install \"mujoco>=2.3\" numpy\n",[66,102142,102143],{"__ignoreMap":64},[69,102144,102145,102147,102149,102152],{"class":71,"line":72},[69,102146,25068],{"class":109},[69,102148,25071],{"class":1022},[69,102150,102151],{"class":1022}," \"mujoco>=2.3\"",[69,102153,102154],{"class":1022}," numpy\n",[29,102156,102157],{},"安装完成后，先做最小检查：",[59,102159,102161],{"className":25059,"code":102160,"language":25061,"meta":64,"style":64},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[66,102162,102163],{"__ignoreMap":64},[69,102164,102165,102167,102169],{"class":71,"line":72},[69,102166,31616],{"class":109},[69,102168,31594],{"class":90},[69,102170,102171],{"class":1022}," \"import mujoco; print(mujoco.__version__)\"\n",[29,102173,102174],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[29,102176,102177],{},"conda 安装:",[59,102179,102181],{"className":25059,"code":102180,"language":25061,"meta":64,"style":64},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[66,102182,102183,102203,102213],{"__ignoreMap":64},[69,102184,102185,102187,102189,102191,102194,102197,102200],{"class":71,"line":72},[69,102186,31566],{"class":109},[69,102188,30412],{"class":1022},[69,102190,26352],{"class":90},[69,102192,102193],{"class":1022}," mujoco-study",[69,102195,102196],{"class":1022}," python=",[69,102198,102199],{"class":90},"3.10",[69,102201,102202],{"class":90}," -y\n",[69,102204,102205,102207,102210],{"class":71,"line":79},[69,102206,31566],{"class":109},[69,102208,102209],{"class":1022}," activate",[69,102211,102212],{"class":1022}," mujoco-study\n",[69,102214,102215,102217,102219,102221],{"class":71,"line":106},[69,102216,25068],{"class":109},[69,102218,25071],{"class":1022},[69,102220,102151],{"class":1022},[69,102222,102154],{"class":1022},[29,102224,102225],{},"版本冲突说明:",[37,102227,102228,102234,102244,102253],{},[40,102229,102230,102231,29621],{},"不要安装 ",[66,102232,102233],{},"mujoco-py",[40,102235,102236,102237,102239,102240,102243],{},"如果旧项目里同时安装了 ",[66,102238,102233],{}," 和 ",[66,102241,102242],{},"mujoco","，建议新建干净虚拟环境。",[40,102245,102246,102249,102250,29621],{},[66,102247,102248],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[66,102251,102252],{},"~\u002F.mujoco\u002Fmujoco210",[40,102254,102255,102256,83760,102259,102262],{},"离屏渲染可能涉及 OpenGL 后端，",[66,102257,102258],{},"MUJOCO_GL=egl",[66,102260,102261],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102264,102266],{"id":102265},"_3核心概念解释","3.核心概念解释",[29,102268,102269],{},"MuJoCo 的基本执行流程:",[59,102271,102274],{"className":102272,"code":102273,"language":540,"meta":64},[538],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[66,102275,102273],{"__ignoreMap":64},[29,102277,102278,102280],{},[66,102279,101930],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[29,102282,102283,102285,102286,1604,102289,1604,102292,1604,102295,1604,102298,29621],{},[66,102284,101940],{}," 存放仿真运行时状态，例如 ",[66,102287,102288],{},"data.time",[66,102290,102291],{},"data.qpos",[66,102293,102294],{},"data.qvel",[66,102296,102297],{},"data.ctrl",[66,102299,102300],{},"data.xpos",[19,102302,102304],{"id":102303},"xml-是什么","XML 是什么",[29,102306,102307],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[59,102309,102311],{"className":54295,"code":102310,"language":54297,"meta":64,"style":64},"\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",[66,102312,102313,102335,102366],{"__ignoreMap":64},[69,102314,102315,102317,102319,102321,102323,102325,102328,102330,102333],{"class":71,"line":72},[69,102316,1011],{"class":86},[69,102318,680],{"class":348},[69,102320,16160],{"class":109},[69,102322,1019],{"class":86},[69,102324,54718],{"class":1022},[69,102326,102327],{"class":109}," pos",[69,102329,1019],{"class":86},[69,102331,102332],{"class":1022},"\"0 0 1\"",[69,102334,1026],{"class":86},[69,102336,102337,102339,102342,102344,102346,102349,102351,102353,102355,102358,102360,102363],{"class":71,"line":79},[69,102338,53372],{"class":86},[69,102340,102341],{"class":348},"geom",[69,102343,16160],{"class":109},[69,102345,1019],{"class":86},[69,102347,102348],{"class":1022},"\"box_geom\"",[69,102350,55051],{"class":109},[69,102352,1019],{"class":86},[69,102354,54718],{"class":1022},[69,102356,102357],{"class":109}," size",[69,102359,1019],{"class":86},[69,102361,102362],{"class":1022},"\"0.1 0.1 0.1\"",[69,102364,102365],{"class":86},"\u002F>\n",[69,102367,102368,102370,102372],{"class":71,"line":106},[69,102369,1036],{"class":86},[69,102371,680],{"class":348},[69,102373,1026],{"class":86},[29,102375,102376],{},"这段意思是：",[37,102378,102379,102385,102392],{},[40,102380,102381,102382,102384],{},"创建一个叫 ",[66,102383,54941],{}," 的刚体。",[40,102386,102387,102388,102391],{},"它初始放在 ",[66,102389,102390],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[40,102393,102394],{},"它里面有一个盒子形状的几何体。",[19,102396,102398],{"id":102397},"timestep-是什么","timestep 是什么",[29,102400,102401],{},"XML 里的：",[59,102403,102405],{"className":54295,"code":102404,"language":54297,"meta":64,"style":64},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[66,102406,102407],{"__ignoreMap":64},[69,102408,102409,102411,102413,102416,102418,102421,102424,102426,102429],{"class":71,"line":72},[69,102410,1011],{"class":86},[69,102412,70391],{"class":348},[69,102414,102415],{"class":109}," timestep",[69,102417,1019],{"class":86},[69,102419,102420],{"class":1022},"\"0.01\"",[69,102422,102423],{"class":109}," gravity",[69,102425,1019],{"class":86},[69,102427,102428],{"class":1022},"\"0 0 -9.81\"",[69,102430,102365],{"class":86},[29,102432,102433,102434,102437,102438,102440],{},"表示每调用一次 ",[66,102435,102436],{},"mj_step","，仿真时间前进 ",[66,102439,40222],{}," 秒。循环 100 次，大约就是 1 秒：",[59,102442,102445],{"className":102443,"code":102444,"language":540,"meta":64},[538],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[66,102446,102444],{"__ignoreMap":64},[19,102448,102450],{"id":102449},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[29,102452,102453],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[59,102455,102458],{"className":102456,"code":102457,"language":540,"meta":64},[538],"x y z qw qx qy qz\n",[66,102459,102457],{"__ignoreMap":64},[29,102461,102462,102463,102466,102467,102470],{},"表示一个自由刚体的位置和姿态。其中 ",[66,102464,102465],{},"x y z"," 是位置，",[66,102468,102469],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102472,102474],{"id":102473},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[29,102476,102477],{},"新建文件:",[59,102479,102481],{"className":25059,"code":102480,"language":25061,"meta":64,"style":64},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[66,102482,102483,102493,102500],{"__ignoreMap":64},[69,102484,102485,102488,102490],{"class":71,"line":72},[69,102486,102487],{"class":109},"mkdir",[69,102489,30452],{"class":90},[69,102491,102492],{"class":1022}," mujoco_tutorial\n",[69,102494,102495,102498],{"class":71,"line":79},[69,102496,102497],{"class":90},"cd",[69,102499,102492],{"class":1022},[69,102501,102502,102505],{"class":71,"line":106},[69,102503,102504],{"class":109},"touch",[69,102506,102507],{"class":1022}," ch1_first_sim.py\n",[29,102509,102510],{},"写入:",[59,102512,102514],{"className":31614,"code":102513,"language":31616,"meta":64,"style":64},"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",[66,102515,102516,102523,102527,102531,102541,102546,102551,102555,102560,102565,102569,102574,102579,102584,102589,102594,102599,102603,102607,102611,102624,102638,102648,102652,102664,102676,102688,102700,102712,102716,102733,102738,102742,102753,102764,102768,102772,102786],{"__ignoreMap":64},[69,102517,102518,102520],{"class":71,"line":72},[69,102519,31628],{"class":82},[69,102521,102522],{"class":86}," mujoco\n",[69,102524,102525],{"class":71,"line":79},[69,102526,3644],{"emptyLinePlaceholder":1325},[69,102528,102529],{"class":71,"line":106},[69,102530,3644],{"emptyLinePlaceholder":1325},[69,102532,102533,102536,102538],{"class":71,"line":116},[69,102534,102535],{"class":90},"XML",[69,102537,14805],{"class":82},[69,102539,102540],{"class":1022}," \"\"\"\n",[69,102542,102543],{"class":71,"line":133},[69,102544,102545],{"class":1022},"\u003Cmujoco model=\"first_sim\">\n",[69,102547,102548],{"class":71,"line":139},[69,102549,102550],{"class":1022},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[69,102552,102553],{"class":71,"line":401},[69,102554,3644],{"emptyLinePlaceholder":1325},[69,102556,102557],{"class":71,"line":470},[69,102558,102559],{"class":1022},"  \u003Cworldbody>\n",[69,102561,102562],{"class":71,"line":475},[69,102563,102564],{"class":1022},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[69,102566,102567],{"class":71,"line":482},[69,102568,3644],{"emptyLinePlaceholder":1325},[69,102570,102571],{"class":71,"line":497},[69,102572,102573],{"class":1022},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[69,102575,102576],{"class":71,"line":502},[69,102577,102578],{"class":1022},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[69,102580,102581],{"class":71,"line":509},[69,102582,102583],{"class":1022},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[69,102585,102586],{"class":71,"line":524},[69,102587,102588],{"class":1022},"    \u003C\u002Fbody>\n",[69,102590,102591],{"class":71,"line":2888},[69,102592,102593],{"class":1022},"  \u003C\u002Fworldbody>\n",[69,102595,102596],{"class":71,"line":2893},[69,102597,102598],{"class":1022},"\u003C\u002Fmujoco>\n",[69,102600,102601],{"class":71,"line":2899},[69,102602,96919],{"class":1022},[69,102604,102605],{"class":71,"line":2919},[69,102606,3644],{"emptyLinePlaceholder":1325},[69,102608,102609],{"class":71,"line":2924},[69,102610,3644],{"emptyLinePlaceholder":1325},[69,102612,102613,102615,102617,102620,102622],{"class":71,"line":2938},[69,102614,33183],{"class":82},[69,102616,3217],{"class":109},[69,102618,102619],{"class":86},"() -> ",[69,102621,96907],{"class":90},[69,102623,4983],{"class":86},[69,102625,102626,102629,102631,102634,102636],{"class":71,"line":2943},[69,102627,102628],{"class":86},"    model ",[69,102630,1019],{"class":82},[69,102632,102633],{"class":86}," mujoco.MjModel.from_xml_string(",[69,102635,102535],{"class":90},[69,102637,1404],{"class":86},[69,102639,102640,102643,102645],{"class":71,"line":2972},[69,102641,102642],{"class":86},"    data ",[69,102644,1019],{"class":82},[69,102646,102647],{"class":86}," mujoco.MjData(model)\n",[69,102649,102650],{"class":71,"line":2977},[69,102651,3644],{"emptyLinePlaceholder":1325},[69,102653,102654,102656,102658,102661],{"class":71,"line":2994},[69,102655,32535],{"class":90},[69,102657,1398],{"class":86},[69,102659,102660],{"class":1022},"\"nq:\"",[69,102662,102663],{"class":86},", model.nq)\n",[69,102665,102666,102668,102670,102673],{"class":71,"line":2999},[69,102667,32535],{"class":90},[69,102669,1398],{"class":86},[69,102671,102672],{"class":1022},"\"nv:\"",[69,102674,102675],{"class":86},", model.nv)\n",[69,102677,102678,102680,102682,102685],{"class":71,"line":3004},[69,102679,32535],{"class":90},[69,102681,1398],{"class":86},[69,102683,102684],{"class":1022},"\"nu:\"",[69,102686,102687],{"class":86},", model.nu)\n",[69,102689,102690,102692,102694,102697],{"class":71,"line":3009},[69,102691,32535],{"class":90},[69,102693,1398],{"class":86},[69,102695,102696],{"class":1022},"\"initial time:\"",[69,102698,102699],{"class":86},", data.time)\n",[69,102701,102702,102704,102706,102709],{"class":71,"line":3023},[69,102703,32535],{"class":90},[69,102705,1398],{"class":86},[69,102707,102708],{"class":1022},"\"initial qpos:\"",[69,102710,102711],{"class":86},", data.qpos.copy())\n",[69,102713,102714],{"class":71,"line":3028},[69,102715,3644],{"emptyLinePlaceholder":1325},[69,102717,102718,102720,102723,102725,102727,102729,102731],{"class":71,"line":3821},[69,102719,4445],{"class":82},[69,102721,102722],{"class":86}," _ ",[69,102724,27280],{"class":82},[69,102726,33679],{"class":90},[69,102728,1398],{"class":86},[69,102730,124],{"class":90},[69,102732,32022],{"class":86},[69,102734,102735],{"class":71,"line":3835},[69,102736,102737],{"class":86},"        mujoco.mj_step(model, data)\n",[69,102739,102740],{"class":71,"line":3843},[69,102741,3644],{"emptyLinePlaceholder":1325},[69,102743,102744,102746,102748,102751],{"class":71,"line":3848},[69,102745,32535],{"class":90},[69,102747,1398],{"class":86},[69,102749,102750],{"class":1022},"\"final time:\"",[69,102752,102699],{"class":86},[69,102754,102755,102757,102759,102762],{"class":71,"line":3854},[69,102756,32535],{"class":90},[69,102758,1398],{"class":86},[69,102760,102761],{"class":1022},"\"final qpos:\"",[69,102763,102711],{"class":86},[69,102765,102766],{"class":71,"line":3860},[69,102767,3644],{"emptyLinePlaceholder":1325},[69,102769,102770],{"class":71,"line":3865},[69,102771,3644],{"emptyLinePlaceholder":1325},[69,102773,102774,102776,102778,102781,102784],{"class":71,"line":9190},[69,102775,2782],{"class":82},[69,102777,32456],{"class":90},[69,102779,102780],{"class":82}," ==",[69,102782,102783],{"class":1022}," \"__main__\"",[69,102785,4983],{"class":86},[69,102787,102788],{"class":71,"line":9214},[69,102789,102790],{"class":86},"    main()\n",[19,102792,102793],{"id":102793},"代码逐段解释",[29,102795,102796],{},"导入库：",[59,102798,102800],{"className":31614,"code":102799,"language":31616,"meta":64,"style":64},"import mujoco\n",[66,102801,102802],{"__ignoreMap":64},[69,102803,102804,102806],{"class":71,"line":72},[69,102805,31628],{"class":82},[69,102807,102522],{"class":86},[29,102809,102810],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[29,102812,102813],{},"定义 XML：",[59,102815,102817],{"className":31614,"code":102816,"language":31616,"meta":64,"style":64},"XML = \"\"\"\n...\n\"\"\"\n",[66,102818,102819,102827,102832],{"__ignoreMap":64},[69,102820,102821,102823,102825],{"class":71,"line":72},[69,102822,102535],{"class":90},[69,102824,14805],{"class":82},[69,102826,102540],{"class":1022},[69,102828,102829],{"class":71,"line":79},[69,102830,102831],{"class":1022},"...\n",[69,102833,102834],{"class":71,"line":106},[69,102835,96919],{"class":1022},[29,102837,102838,102839,102842],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[66,102840,102841],{},"freejoint"," 的方块。",[29,102844,102845],{},"编译模型：",[59,102847,102849],{"className":31614,"code":102848,"language":31616,"meta":64,"style":64},"model = mujoco.MjModel.from_xml_string(XML)\n",[66,102850,102851],{"__ignoreMap":64},[69,102852,102853,102856,102858,102860,102862],{"class":71,"line":72},[69,102854,102855],{"class":86},"model ",[69,102857,1019],{"class":82},[69,102859,102633],{"class":86},[69,102861,102535],{"class":90},[69,102863,1404],{"class":86},[29,102865,102866],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[29,102868,102869],{},"创建数据：",[59,102871,102873],{"className":31614,"code":102872,"language":31616,"meta":64,"style":64},"data = mujoco.MjData(model)\n",[66,102874,102875],{"__ignoreMap":64},[69,102876,102877,102880,102882],{"class":71,"line":72},[69,102878,102879],{"class":86},"data ",[69,102881,1019],{"class":82},[69,102883,102647],{"class":86},[29,102885,102886,102888,102889,102891],{},[66,102887,34637],{}," 会保存仿真当前状态。刚创建时，时间是 ",[66,102890,1583],{},"，方块还在初始位置。",[29,102893,102894],{},"推进仿真：",[59,102896,102898],{"className":31614,"code":102897,"language":31616,"meta":64,"style":64},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[66,102899,102900,102916],{"__ignoreMap":64},[69,102901,102902,102904,102906,102908,102910,102912,102914],{"class":71,"line":72},[69,102903,4269],{"class":82},[69,102905,102722],{"class":86},[69,102907,27280],{"class":82},[69,102909,33679],{"class":90},[69,102911,1398],{"class":86},[69,102913,124],{"class":90},[69,102915,32022],{"class":86},[69,102917,102918],{"class":71,"line":79},[69,102919,102920],{"class":86},"    mujoco.mj_step(model, data)\n",[29,102922,102923,102924,102926],{},"每次 ",[66,102925,102436],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[19,102928,102929],{"id":102929},"代码逐行细讲",[29,102931,102932],{},"下面把完整代码按新手视角拆开讲。",[59,102934,102935],{"className":31614,"code":102799,"language":31616,"meta":64,"style":64},[66,102936,102937],{"__ignoreMap":64},[69,102938,102939,102941],{"class":71,"line":72},[69,102940,31628],{"class":82},[69,102942,102522],{"class":86},[29,102944,102945,102947,102948,1604,102950,1604,102952,29621],{},[66,102946,31628],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[66,102949,101896],{},[66,102951,101901],{},[66,102953,102954],{},"mujoco.mj_step",[59,102956,102957],{"className":31614,"code":102816,"language":31616,"meta":64,"style":64},[66,102958,102959,102967,102971],{"__ignoreMap":64},[69,102960,102961,102963,102965],{"class":71,"line":72},[69,102962,102535],{"class":90},[69,102964,14805],{"class":82},[69,102966,102540],{"class":1022},[69,102968,102969],{"class":71,"line":79},[69,102970,102831],{"class":1022},[69,102972,102973],{"class":71,"line":106},[69,102974,96919],{"class":1022},[29,102976,102977,102979,102980,102983],{},[66,102978,102535],{}," 是一个变量名。右边的三引号 ",[66,102981,102982],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[59,102985,102986],{"className":54295,"code":102545,"language":54297,"meta":64,"style":64},[66,102987,102988],{"__ignoreMap":64},[69,102989,102990,102992,102994,102997,102999,103002],{"class":71,"line":72},[69,102991,1011],{"class":86},[69,102993,102242],{"class":348},[69,102995,102996],{"class":109}," model",[69,102998,1019],{"class":86},[69,103000,103001],{"class":1022},"\"first_sim\"",[69,103003,1026],{"class":86},[29,103005,103006,103007,103010,103011,29621],{},"这是 XML 的根标签。",[66,103008,103009],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[66,103012,103013],{},"first_sim",[59,103015,103016],{"className":54295,"code":102404,"language":54297,"meta":64,"style":64},[66,103017,103018],{"__ignoreMap":64},[69,103019,103020,103022,103024,103026,103028,103030,103032,103034,103036],{"class":71,"line":72},[69,103021,1011],{"class":86},[69,103023,70391],{"class":348},[69,103025,102415],{"class":109},[69,103027,1019],{"class":86},[69,103029,102420],{"class":1022},[69,103031,102423],{"class":109},[69,103033,1019],{"class":86},[69,103035,102428],{"class":1022},[69,103037,102365],{"class":86},[29,103039,103040,103042,103043,103046,103047,103050],{},[66,103041,70391],{}," 用来设置仿真参数。",[66,103044,103045],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[66,103048,103049],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[59,103052,103054],{"className":54295,"code":103053,"language":54297,"meta":64,"style":64},"\u003Cworldbody>\n",[66,103055,103056],{"__ignoreMap":64},[69,103057,103058,103060,103063],{"class":71,"line":72},[69,103059,1011],{"class":86},[69,103061,103062],{"class":348},"worldbody",[69,103064,1026],{"class":86},[29,103066,103067,103069],{},[66,103068,103062],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[59,103071,103073],{"className":54295,"code":103072,"language":54297,"meta":64,"style":64},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[66,103074,103075],{"__ignoreMap":64},[69,103076,103077,103079,103081,103083,103085,103088,103090,103092,103095,103097,103099,103102,103104,103106,103109],{"class":71,"line":72},[69,103078,1011],{"class":86},[69,103080,102341],{"class":348},[69,103082,16160],{"class":109},[69,103084,1019],{"class":86},[69,103086,103087],{"class":1022},"\"floor\"",[69,103089,55051],{"class":109},[69,103091,1019],{"class":86},[69,103093,103094],{"class":1022},"\"plane\"",[69,103096,102357],{"class":109},[69,103098,1019],{"class":86},[69,103100,103101],{"class":1022},"\"2 2 0.1\"",[69,103103,79988],{"class":109},[69,103105,1019],{"class":86},[69,103107,103108],{"class":1022},"\"0.8 0.8 0.8 1\"",[69,103110,102365],{"class":86},[29,103112,103113,103114,103116,103117,103120,103121,103124,103125,103127],{},"这行创建地面。",[66,103115,102341],{}," 是几何体。",[66,103118,103119],{},"name=\"floor\""," 是名字。",[66,103122,103123],{},"type=\"plane\""," 表示平面。",[66,103126,56337],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[59,103129,103131],{"className":54295,"code":103130,"language":54297,"meta":64,"style":64},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[66,103132,103133],{"__ignoreMap":64},[69,103134,103135,103137,103139,103141,103143,103145,103147,103149,103151],{"class":71,"line":72},[69,103136,1011],{"class":86},[69,103138,680],{"class":348},[69,103140,16160],{"class":109},[69,103142,1019],{"class":86},[69,103144,54718],{"class":1022},[69,103146,102327],{"class":109},[69,103148,1019],{"class":86},[69,103150,102332],{"class":1022},[69,103152,1026],{"class":86},[29,103154,103155,103156,29621,103158,103161,103162,103164],{},"这行创建一个刚体，名字叫 ",[66,103157,54941],{},[66,103159,103160],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[66,103163,102390],{},"，也就是离地面 1 米高。",[59,103166,103168],{"className":54295,"code":103167,"language":54297,"meta":64,"style":64},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[66,103169,103170],{"__ignoreMap":64},[69,103171,103172,103174,103176,103178,103180,103183],{"class":71,"line":72},[69,103173,1011],{"class":86},[69,103175,102841],{"class":348},[69,103177,16160],{"class":109},[69,103179,1019],{"class":86},[69,103181,103182],{"class":1022},"\"box_free\"",[69,103184,102365],{"class":86},[29,103186,103187,103188,103190],{},"这行很重要。",[66,103189,102841],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[59,103192,103194],{"className":54295,"code":103193,"language":54297,"meta":64,"style":64},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[66,103195,103196],{"__ignoreMap":64},[69,103197,103198,103200,103202,103204,103206,103208,103210,103212,103214,103216,103218,103220,103223,103225,103227,103229,103231,103234],{"class":71,"line":72},[69,103199,1011],{"class":86},[69,103201,102341],{"class":348},[69,103203,16160],{"class":109},[69,103205,1019],{"class":86},[69,103207,102348],{"class":1022},[69,103209,55051],{"class":109},[69,103211,1019],{"class":86},[69,103213,54718],{"class":1022},[69,103215,102357],{"class":109},[69,103217,1019],{"class":86},[69,103219,102362],{"class":1022},[69,103221,103222],{"class":109}," mass",[69,103224,1019],{"class":86},[69,103226,4922],{"class":1022},[69,103228,79988],{"class":109},[69,103230,1019],{"class":86},[69,103232,103233],{"class":1022},"\"1 0 0 1\"",[69,103235,102365],{"class":86},[29,103237,103238,103239,103242,103243,103246,103247,103250,103251,103254],{},"这行给 box body 添加一个盒子形状。",[66,103240,103241],{},"type=\"box\""," 表示形状是盒子。",[66,103244,103245],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[66,103248,103249],{},"mass=\"1\""," 表示质量是 1。",[66,103252,103253],{},"rgba=\"1 0 0 1\""," 表示红色。",[59,103256,103258],{"className":31614,"code":103257,"language":31616,"meta":64,"style":64},"def main() -> None:\n",[66,103259,103260],{"__ignoreMap":64},[69,103261,103262,103264,103266,103268,103270],{"class":71,"line":72},[69,103263,33183],{"class":82},[69,103265,3217],{"class":109},[69,103267,102619],{"class":86},[69,103269,96907],{"class":90},[69,103271,4983],{"class":86},[29,103273,103274,103276,103277,103280,103281,103284],{},[66,103275,33183],{}," 用来定义函数。这里定义了一个叫 ",[66,103278,103279],{},"main"," 的函数。",[66,103282,103283],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[59,103286,103287],{"className":31614,"code":102848,"language":31616,"meta":64,"style":64},[66,103288,103289],{"__ignoreMap":64},[69,103290,103291,103293,103295,103297,103299],{"class":71,"line":72},[69,103292,102855],{"class":86},[69,103294,1019],{"class":82},[69,103296,102633],{"class":86},[69,103298,102535],{"class":90},[69,103300,1404],{"class":86},[29,103302,103303,103304,103307],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[66,103305,103306],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[59,103309,103310],{"className":31614,"code":102872,"language":31616,"meta":64,"style":64},[66,103311,103312],{"__ignoreMap":64},[69,103313,103314,103316,103318],{"class":71,"line":72},[69,103315,102879],{"class":86},[69,103317,1019],{"class":82},[69,103319,102647],{"class":86},[29,103321,103322,103323,103325,103326,103328],{},"这行创建仿真数据。",[66,103324,34637],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[66,103327,34637],{}," 都会变化。",[59,103330,103332],{"className":31614,"code":103331,"language":31616,"meta":64,"style":64},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[66,103333,103334,103344,103354],{"__ignoreMap":64},[69,103335,103336,103338,103340,103342],{"class":71,"line":72},[69,103337,31651],{"class":90},[69,103339,1398],{"class":86},[69,103341,102660],{"class":1022},[69,103343,102663],{"class":86},[69,103345,103346,103348,103350,103352],{"class":71,"line":79},[69,103347,31651],{"class":90},[69,103349,1398],{"class":86},[69,103351,102672],{"class":1022},[69,103353,102675],{"class":86},[69,103355,103356,103358,103360,103362],{"class":71,"line":106},[69,103357,31651],{"class":90},[69,103359,1398],{"class":86},[69,103361,102684],{"class":1022},[69,103363,102687],{"class":86},[29,103365,103366,103368,103369,103372,103373,103376,103377,103380,103381,103384],{},[66,103367,31651],{}," 用来输出信息。",[66,103370,103371],{},"model.nq"," 是位置变量数量，",[66,103374,103375],{},"model.nv"," 是速度变量数量，",[66,103378,103379],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[66,103382,103383],{},"nu"," 是 0。",[59,103386,103388],{"className":31614,"code":103387,"language":31616,"meta":64,"style":64},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[66,103389,103390,103400],{"__ignoreMap":64},[69,103391,103392,103394,103396,103398],{"class":71,"line":72},[69,103393,31651],{"class":90},[69,103395,1398],{"class":86},[69,103397,102696],{"class":1022},[69,103399,102699],{"class":86},[69,103401,103402,103404,103406,103408],{"class":71,"line":79},[69,103403,31651],{"class":90},[69,103405,1398],{"class":86},[69,103407,102708],{"class":1022},[69,103409,102711],{"class":86},[29,103411,103412,103413,103415,103416,103418,103419,103422],{},"这里打印初始时间和初始位置。",[66,103414,102288],{}," 一开始是 0。",[66,103417,102291],{}," 是位置数组。",[66,103420,103421],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[59,103424,103425],{"className":31614,"code":102897,"language":31616,"meta":64,"style":64},[66,103426,103427,103443],{"__ignoreMap":64},[69,103428,103429,103431,103433,103435,103437,103439,103441],{"class":71,"line":72},[69,103430,4269],{"class":82},[69,103432,102722],{"class":86},[69,103434,27280],{"class":82},[69,103436,33679],{"class":90},[69,103438,1398],{"class":86},[69,103440,124],{"class":90},[69,103442,32022],{"class":86},[69,103444,103445],{"class":71,"line":79},[69,103446,102920],{"class":86},[29,103448,103449,103451,103452,103455,103456,103458,103459,103461],{},[66,103450,4269],{}," 是循环。",[66,103453,103454],{},"range(100)"," 表示循环 100 次。",[66,103457,2378],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[66,103460,102436],{},"，仿真就前进一步。",[59,103463,103465],{"className":31614,"code":103464,"language":31616,"meta":64,"style":64},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[66,103466,103467,103477],{"__ignoreMap":64},[69,103468,103469,103471,103473,103475],{"class":71,"line":72},[69,103470,31651],{"class":90},[69,103472,1398],{"class":86},[69,103474,102750],{"class":1022},[69,103476,102699],{"class":86},[69,103478,103479,103481,103483,103485],{"class":71,"line":79},[69,103480,31651],{"class":90},[69,103482,1398],{"class":86},[69,103484,102761],{"class":1022},[69,103486,102711],{"class":86},[29,103488,103489],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[59,103491,103493],{"className":31614,"code":103492,"language":31616,"meta":64,"style":64},"if __name__ == \"__main__\":\n    main()\n",[66,103494,103495,103507],{"__ignoreMap":64},[69,103496,103497,103499,103501,103503,103505],{"class":71,"line":72},[69,103498,2782],{"class":82},[69,103500,32456],{"class":90},[69,103502,102780],{"class":82},[69,103504,102783],{"class":1022},[69,103506,4983],{"class":86},[69,103508,103509],{"class":71,"line":79},[69,103510,102790],{"class":86},[29,103512,103513,103514,103517,103518,29621],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[66,103515,103516],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[66,103519,103516],{},[29,103521,103522],{},"运行:",[59,103524,103526],{"className":25059,"code":103525,"language":25061,"meta":64,"style":64},"python ch1_first_sim.py\n",[66,103527,103528],{"__ignoreMap":64},[69,103529,103530,103532],{"class":71,"line":72},[69,103531,31616],{"class":109},[69,103533,102507],{"class":1022},[14,103535,103537],{"id":103536},"_5运行结果说明","5.运行结果说明",[29,103539,103540],{},"你应该看到类似输出:",[59,103542,103545],{"className":103543,"code":103544,"language":540,"meta":64},[538],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[66,103546,103544],{"__ignoreMap":64},[29,103548,103549,103551,103552,103555,103556,29621],{},[66,103550,102841],{}," 有 7 个位置变量: ",[66,103553,103554],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[66,103557,103558],{},"vx vy vz wx wy wz",[29,103560,103561,103562,103565],{},"你还会看到 ",[66,103563,103564],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103567,103569],{"id":103568},"_6验证步骤","6.验证步骤",[29,103571,103572],{},"确认版本:",[59,103574,103575],{"className":25059,"code":102160,"language":25061,"meta":64,"style":64},[66,103576,103577],{"__ignoreMap":64},[69,103578,103579,103581,103583],{"class":71,"line":72},[69,103580,31616],{"class":109},[69,103582,31594],{"class":90},[69,103584,102171],{"class":1022},[29,103586,103587],{},"确认导入的是官方 bindings:",[59,103589,103591],{"className":25059,"code":103590,"language":25061,"meta":64,"style":64},"python -c \"import mujoco; print(mujoco)\"\n",[66,103592,103593],{"__ignoreMap":64},[69,103594,103595,103597,103599],{"class":71,"line":72},[69,103596,31616],{"class":109},[69,103598,31594],{"class":90},[69,103600,103601],{"class":1022}," \"import mujoco; print(mujoco)\"\n",[29,103603,103604],{},"运行程序:",[59,103606,103607],{"className":25059,"code":103525,"language":25061,"meta":64,"style":64},[66,103608,103609],{"__ignoreMap":64},[69,103610,103611,103613],{"class":71,"line":72},[69,103612,31616],{"class":109},[69,103614,102507],{"class":1022},[29,103616,103617,103618,103621,103622,29621],{},"检查 ",[66,103619,103620],{},"final time"," 是否约等于 ",[66,103623,103624],{},"1.0",[29,103626,103627],{},"再做几个小实验：",[37,103629,103630,103640,103648,103661],{},[40,103631,103632,103633,103635,103636,103639],{},"把 ",[66,103634,103160],{}," 改成 ",[66,103637,103638],{},"pos=\"0 0 2\"","，观察初始高度变化。",[40,103641,103632,103642,103635,103644,103647],{},[66,103643,103049],{},[66,103645,103646],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[40,103649,103632,103650,103635,103652,103655,103656,103658,103659,29621],{},[66,103651,103045],{},[66,103653,103654],{},"timestep=\"0.005\"","，观察 100 步后的 ",[66,103657,103620],{}," 是否变成约 ",[66,103660,36565],{},[40,103662,103663,103664,103667],{},"删除 ",[66,103665,103666],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[29,103669,103670],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103672,103674],{"id":103673},"_7常见错误与解决方案","7.常见错误与解决方案",[19,103676,103678],{"id":103677},"modulenotfounderror-no-module-named-mujoco",[66,103679,103680],{},"ModuleNotFoundError: No module named 'mujoco'",[29,103682,103683],{},"解决:",[59,103685,103687],{"className":25059,"code":103686,"language":25061,"meta":64,"style":64},"pip install \"mujoco>=2.3\"\n",[66,103688,103689],{"__ignoreMap":64},[69,103690,103691,103693,103695],{"class":71,"line":72},[69,103692,25068],{"class":109},[69,103694,25071],{"class":1022},[69,103696,103697],{"class":1022}," \"mujoco>=2.3\"\n",[19,103699,103701],{"id":103700},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[29,103703,103704],{},"先安装系统依赖:",[59,103706,103708],{"className":25059,"code":103707,"language":25061,"meta":64,"style":64},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[66,103709,103710],{"__ignoreMap":64},[69,103711,103712,103714,103716,103718,103720,103723,103725,103728,103730,103733,103735],{"class":71,"line":72},[69,103713,25813],{"class":109},[69,103715,27551],{"class":1022},[69,103717,25071],{"class":1022},[69,103719,27636],{"class":90},[69,103721,103722],{"class":1022}," mesa-libGL",[69,103724,102035],{"class":1022},[69,103726,103727],{"class":1022}," glfw",[69,103729,102055],{"class":1022},[69,103731,103732],{"class":1022}," libX11",[69,103734,102068],{"class":1022},[69,103736,103737],{"class":1022}," libXrandr\n",[19,103739,103741],{"id":103740},"xml-解析失败","XML 解析失败",[29,103743,103744],{},"检查:",[37,103746,103747,103750,103753,103759],{},[40,103748,103749],{},"标签是否闭合",[40,103751,103752],{},"属性是否带引号",[40,103754,103755,103756],{},"根节点是否是 ",[66,103757,103758],{},"\u003Cmujoco>",[40,103760,103761,103763,103764,103767],{},[66,103762,680],{}," 是否放在 ",[66,103765,103766],{},"\u003Cworldbody>"," 内部",[19,103769,103771,103773,103774],{"id":103770},"final-time-不是严格等于-10",[66,103772,103620],{}," 不是严格等于 ",[66,103775,103624],{},[29,103777,103778],{},"这通常不是错误。浮点数计算可能得到：",[59,103780,103783],{"className":103781,"code":103782,"language":540,"meta":64},[538],"1.0000000000000007\n",[66,103784,103782],{"__ignoreMap":64},[29,103786,103787,103788,103790],{},"只要接近 ",[66,103789,103624],{}," 就正常。",[19,103792,103793],{"id":103793},"方块没有掉下来",[29,103795,103796],{},"检查：",[37,103798,103799,103805,103811,103816],{},[40,103800,103801,103802],{},"方块 body 里是否有 ",[66,103803,103804],{},"\u003Cfreejoint\u002F>",[40,103806,103807,103808],{},"重力是否是 ",[66,103809,103810],{},"0 0 -9.81",[40,103812,103813,103814],{},"是否真的调用了 ",[66,103815,101906],{},[40,103817,103818,103819,103821,103822],{},"你看的是否是 ",[66,103820,103564],{},"，不是 ",[66,103823,103824],{},"initial qpos",[14,103826,103828],{"id":103827},"_8本章小结","8.本章小结",[29,103830,103831],{},"本章你已经完成了 MuJoCo 的最小闭环：",[59,103833,103836],{"className":103834,"code":103835,"language":540,"meta":64},[538],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[66,103837,103835],{"__ignoreMap":64},[29,103839,103840],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1297,103842,103843],{},"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":64,"searchDepth":79,"depth":79,"links":103845},[103846,103847,103848,103853,103857,103858,103859,103867],{"id":101867,"depth":79,"text":101868},{"id":101990,"depth":79,"text":101991},{"id":102265,"depth":79,"text":102266,"children":103849},[103850,103851,103852],{"id":102303,"depth":106,"text":102304},{"id":102397,"depth":106,"text":102398},{"id":102449,"depth":106,"text":102450},{"id":102473,"depth":79,"text":102474,"children":103854},[103855,103856],{"id":102793,"depth":106,"text":102793},{"id":102929,"depth":106,"text":102929},{"id":103536,"depth":79,"text":103537},{"id":103568,"depth":79,"text":103569},{"id":103673,"depth":79,"text":103674,"children":103860},[103861,103862,103863,103864,103866],{"id":103677,"depth":106,"text":103680},{"id":103700,"depth":106,"text":103701},{"id":103740,"depth":106,"text":103741},{"id":103770,"depth":106,"text":103865},"final time 不是严格等于 1.0",{"id":103793,"depth":106,"text":103793},{"id":103827,"depth":79,"text":103828},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101859,"description":64},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103874,"title":103875,"body":103876,"description":64,"extension":1323,"meta":105532,"navigation":1325,"path":105533,"seo":105534,"stem":105535,"__hash__":105536},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103877,"toc":105508},[103878,103881,103883,103886,103889,103906,104001,104004,104010,104012,104014,104038,104041,104055,104058,104099,104101,104114,104116,104119,104167,104179,104182,104185,104191,104204,104271,104274,104293,104296,104299,104305,104307,104316,104319,104323,104332,104414,104423,104427,104433,104447,104457,104459,104789,104792,104804,104806,104817,104819,104822,104840,104843,104846,104864,104875,104878,104893,104903,104905,104926,104943,104963,104969,105009,105025,105041,105047,105050,105074,105090,105095,105125,105142,105167,105170,105185,105194,105209,105218,105233,105240,105242,105252,105265,105272,105275,105314,105321,105323,105375,105377,105383,105386,105393,105400,105403,105405,105423,105426,105429,105463,105475,105477,105480,105502,105505],[10,103879,103875],{"id":103880},"_2xml-与-mjcf-物理建模基础",[14,103882,101868],{"id":101867},[29,103884,103885],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[29,103887,103888],{},"本章结束后，你应该能看懂一个简单模型里：",[37,103890,103891,103894,103897,103900,103903],{},[40,103892,103893],{},"地面在哪里。",[40,103895,103896],{},"物体初始位置在哪里。",[40,103898,103899],{},"几何体是什么形状。",[40,103901,103902],{},"哪些 body 可以自由运动。",[40,103904,103905],{},"如何用名字在 Python 里找到 XML 中的对象。",[1530,103907,103908,103918],{},[1533,103909,103910],{},[1536,103911,103912,103915],{},[1539,103913,103914],{"align":1202},"标签",[1539,103916,103917],{"align":1202},"作用",[1576,103919,103920,103929,103939,103948,103958,103968,103981,103991],{},[1536,103921,103922,103926],{},[1581,103923,103924],{"align":1202},[66,103925,103758],{},[1581,103927,103928],{"align":1202},"根节点",[1536,103930,103931,103936],{},[1581,103932,103933],{"align":1202},[66,103934,103935],{},"\u003Coption>",[1581,103937,103938],{"align":1202},"仿真参数",[1536,103940,103941,103945],{},[1581,103942,103943],{"align":1202},[66,103944,103766],{},[1581,103946,103947],{"align":1202},"世界中的物体",[1536,103949,103950,103955],{},[1581,103951,103952],{"align":1202},[66,103953,103954],{},"\u003Cbody>",[1581,103956,103957],{"align":1202},"刚体",[1536,103959,103960,103965],{},[1581,103961,103962],{"align":1202},[66,103963,103964],{},"\u003Cgeom>",[1581,103966,103967],{"align":1202},"几何体、碰撞体、可视体",[1536,103969,103970,103978],{},[1581,103971,103972,26215,103975],{"align":1202},[66,103973,103974],{},"\u003Cjoint>",[66,103976,103977],{},"\u003Cfreejoint>",[1581,103979,103980],{"align":1202},"关节",[1536,103982,103983,103988],{},[1581,103984,103985],{"align":1202},[66,103986,103987],{},"\u003Csite>",[1581,103989,103990],{"align":1202},"标记点",[1536,103992,103993,103998],{},[1581,103994,103995],{"align":1202},[66,103996,103997],{},"\u003Cactuator>",[1581,103999,104000],{"align":1202},"控制器",[29,104002,104003],{},"初学时可以先记住：",[59,104005,104008],{"className":104006,"code":104007,"language":540,"meta":64},[538],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[66,104009,104007],{"__ignoreMap":64},[14,104011,101991],{"id":101990},[29,104013,101994],{},[59,104015,104017],{"className":25059,"code":104016,"language":25061,"meta":64,"style":64},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[66,104018,104019],{"__ignoreMap":64},[69,104020,104021,104023,104025,104027,104029,104031,104033,104035],{"class":71,"line":72},[69,104022,25813],{"class":109},[69,104024,27551],{"class":1022},[69,104026,25071],{"class":1022},[69,104028,27636],{"class":90},[69,104030,103722],{"class":1022},[69,104032,102035],{"class":1022},[69,104034,103727],{"class":1022},[69,104036,104037],{"class":1022}," glfw-devel\n",[29,104039,104040],{},"pip:",[59,104042,104043],{"className":25059,"code":102140,"language":25061,"meta":64,"style":64},[66,104044,104045],{"__ignoreMap":64},[69,104046,104047,104049,104051,104053],{"class":71,"line":72},[69,104048,25068],{"class":109},[69,104050,25071],{"class":1022},[69,104052,102151],{"class":1022},[69,104054,102154],{"class":1022},[29,104056,104057],{},"conda:",[59,104059,104061],{"className":25059,"code":104060,"language":25061,"meta":64,"style":64},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[66,104062,104063,104080,104089],{"__ignoreMap":64},[69,104064,104065,104067,104069,104071,104074,104076,104078],{"class":71,"line":72},[69,104066,31566],{"class":109},[69,104068,30412],{"class":1022},[69,104070,26352],{"class":90},[69,104072,104073],{"class":1022}," mujoco-xml",[69,104075,102196],{"class":1022},[69,104077,102199],{"class":90},[69,104079,102202],{"class":90},[69,104081,104082,104084,104086],{"class":71,"line":79},[69,104083,31566],{"class":109},[69,104085,102209],{"class":1022},[69,104087,104088],{"class":1022}," mujoco-xml\n",[69,104090,104091,104093,104095,104097],{"class":71,"line":106},[69,104092,25068],{"class":109},[69,104094,25071],{"class":1022},[69,104096,102151],{"class":1022},[69,104098,102154],{"class":1022},[29,104100,102225],{},[37,104102,104103,104106,104111],{},[40,104104,104105],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[40,104107,104108,104109,29621],{},"本章使用基础标签，适用于 ",[66,104110,102248],{},[40,104112,104113],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104115,102266],{"id":102265},[29,104117,104118],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[59,104120,104122],{"className":54295,"code":104121,"language":54297,"meta":64,"style":64},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[66,104123,104124,104138,104146,104151,104159],{"__ignoreMap":64},[69,104125,104126,104128,104130,104132,104134,104136],{"class":71,"line":72},[69,104127,1011],{"class":86},[69,104129,102242],{"class":348},[69,104131,102996],{"class":109},[69,104133,1019],{"class":86},[69,104135,63905],{"class":1022},[69,104137,1026],{"class":86},[69,104139,104140,104142,104144],{"class":71,"line":79},[69,104141,53372],{"class":86},[69,104143,103062],{"class":348},[69,104145,1026],{"class":86},[69,104147,104148],{"class":71,"line":106},[69,104149,104150],{"class":86},"    ...\n",[69,104152,104153,104155,104157],{"class":71,"line":116},[69,104154,53645],{"class":86},[69,104156,103062],{"class":348},[69,104158,1026],{"class":86},[69,104160,104161,104163,104165],{"class":71,"line":133},[69,104162,1036],{"class":86},[69,104164,102242],{"class":348},[69,104166,1026],{"class":86},[29,104168,104169,104171,104172,104174,104175,104178],{},[66,104170,680],{}," 表示刚体。",[66,104173,102341],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[66,104176,104177],{},"joint"," 表示刚体相对父刚体如何运动。",[19,104180,104181],{"id":104181},"层级结构非常重要",[29,104183,104184],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[59,104186,104189],{"className":104187,"code":104188,"language":540,"meta":64},[538],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[66,104190,104188],{"__ignoreMap":64},[29,104192,104193,102239,104196,104199,104200,104203],{},[66,104194,104195],{},"red_box_geom",[66,104197,104198],{},"box_center"," 都属于 ",[66,104201,104202],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[59,104205,104207],{"className":54295,"code":104206,"language":54297,"meta":64,"style":64},"\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",[66,104208,104209,104229,104243,104263],{"__ignoreMap":64},[69,104210,104211,104213,104215,104217,104219,104221,104223,104225,104227],{"class":71,"line":72},[69,104212,1011],{"class":86},[69,104214,680],{"class":348},[69,104216,16160],{"class":109},[69,104218,1019],{"class":86},[69,104220,54718],{"class":1022},[69,104222,102327],{"class":109},[69,104224,1019],{"class":86},[69,104226,102332],{"class":1022},[69,104228,1026],{"class":86},[69,104230,104231,104233,104235,104237,104239,104241],{"class":71,"line":79},[69,104232,53372],{"class":86},[69,104234,102841],{"class":348},[69,104236,16160],{"class":109},[69,104238,1019],{"class":86},[69,104240,103182],{"class":1022},[69,104242,102365],{"class":86},[69,104244,104245,104247,104249,104251,104253,104255,104257,104259,104261],{"class":71,"line":106},[69,104246,53372],{"class":86},[69,104248,102341],{"class":348},[69,104250,55051],{"class":109},[69,104252,1019],{"class":86},[69,104254,54718],{"class":1022},[69,104256,102357],{"class":109},[69,104258,1019],{"class":86},[69,104260,102362],{"class":1022},[69,104262,102365],{"class":86},[69,104264,104265,104267,104269],{"class":71,"line":116},[69,104266,1036],{"class":86},[69,104268,680],{"class":348},[69,104270,1026],{"class":86},[29,104272,104273],{},"含义:",[37,104275,104276,104282,104287,104290],{},[40,104277,104278,104279,104281],{},"创建名为 ",[66,104280,54941],{}," 的刚体",[40,104283,104284,104285],{},"初始位置在世界坐标 ",[66,104286,102390],{},[40,104288,104289],{},"它有一个自由关节",[40,104291,104292],{},"它有一个盒子几何体",[19,104294,104295],{"id":104295},"坐标怎么理解",[29,104297,104298],{},"MuJoCo 默认使用三维坐标：",[59,104300,104303],{"className":104301,"code":104302,"language":540,"meta":64},[538],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[66,104304,104302],{"__ignoreMap":64},[29,104306,327],{},[59,104308,104310],{"className":54295,"code":104309,"language":54297,"meta":64,"style":64},"pos=\"0 0 1\"\n",[66,104311,104312],{"__ignoreMap":64},[69,104313,104314],{"class":71,"line":72},[69,104315,104309],{"class":86},[29,104317,104318],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[19,104320,104322],{"id":104321},"geom-的-size-怎么理解","geom 的 size 怎么理解",[29,104324,104325,104326,83751,104329,104331],{},"不同 ",[66,104327,104328],{},"type",[66,104330,32732],{}," 含义不同：",[1530,104333,104334,104349],{},[1533,104335,104336],{},[1536,104337,104338,104342,104347],{},[1539,104339,104340],{"align":1202},[66,104341,104328],{},[1539,104343,104344,104346],{"align":1202},[66,104345,32732],{}," 示例",[1539,104348,101921],{"align":1202},[1576,104350,104351,104365,104380,104399],{},[1536,104352,104353,104357,104362],{},[1581,104354,104355],{"align":1202},[66,104356,54941],{},[1581,104358,104359],{"align":1202},[66,104360,104361],{},"size=\"0.1 0.2 0.3\"",[1581,104363,104364],{"align":1202},"x\u002Fy\u002Fz 半边长，不是完整长度",[1536,104366,104367,104372,104377],{},[1581,104368,104369],{"align":1202},[66,104370,104371],{},"sphere",[1581,104373,104374],{"align":1202},[66,104375,104376],{},"size=\"0.1\"",[1581,104378,104379],{"align":1202},"球半径",[1536,104381,104382,104387,104392],{},[1581,104383,104384],{"align":1202},[66,104385,104386],{},"capsule",[1581,104388,104389],{"align":1202},[66,104390,104391],{},"size=\"0.03\"",[1581,104393,104394,104395,104398],{"align":1202},"胶囊半径，长度常用 ",[66,104396,104397],{},"fromto"," 指定",[1536,104400,104401,104406,104411],{},[1581,104402,104403],{"align":1202},[66,104404,104405],{},"plane",[1581,104407,104408],{"align":1202},[66,104409,104410],{},"size=\"3 3 0.1\"",[1581,104412,104413],{"align":1202},"可视平面大小，通常当地面",[29,104415,104416,104417,104419,104420,104422],{},"最容易踩坑的是 box：",[66,104418,103245],{}," 表示边长大约是 ",[66,104421,33273],{},"，因为 MuJoCo 用的是半边长。",[19,104424,104426],{"id":104425},"site-是什么","site 是什么",[29,104428,104429,104432],{},[66,104430,104431],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[37,104434,104435,104438,104441,104444],{},[40,104436,104437],{},"标记机械臂末端。",[40,104439,104440],{},"标记目标位置。",[40,104442,104443],{},"放传感器或相机参考点。",[40,104445,104446],{},"在 Python 中读取某个关键点的世界坐标。",[29,104448,104449,104450,102239,104453,104456],{},"在后面的 Reacher 任务中，",[66,104451,104452],{},"tip",[66,104454,104455],{},"target"," 就会用 site 表示。",[14,104458,102474],{"id":102473},[59,104460,104462],{"className":31614,"code":104461,"language":31616,"meta":64,"style":64},"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",[66,104463,104464,104470,104480,104484,104488,104496,104501,104505,104509,104513,104518,104522,104527,104532,104537,104542,104546,104550,104554,104558,104562,104566,104578,104590,104598,104602,104617,104632,104636,104649,104664,104677,104690,104694,104710,104714,104718,104729,104741,104753,104765,104769,104773,104785],{"__ignoreMap":64},[69,104465,104466,104468],{"class":71,"line":72},[69,104467,31628],{"class":82},[69,104469,102522],{"class":86},[69,104471,104472,104474,104476,104478],{"class":71,"line":79},[69,104473,31628],{"class":82},[69,104475,32616],{"class":86},[69,104477,32619],{"class":82},[69,104479,32622],{"class":86},[69,104481,104482],{"class":71,"line":106},[69,104483,3644],{"emptyLinePlaceholder":1325},[69,104485,104486],{"class":71,"line":116},[69,104487,3644],{"emptyLinePlaceholder":1325},[69,104489,104490,104492,104494],{"class":71,"line":133},[69,104491,102535],{"class":90},[69,104493,14805],{"class":82},[69,104495,102540],{"class":1022},[69,104497,104498],{"class":71,"line":139},[69,104499,104500],{"class":1022},"\u003Cmujoco model=\"xml_basic\">\n",[69,104502,104503],{"class":71,"line":401},[69,104504,102550],{"class":1022},[69,104506,104507],{"class":71,"line":470},[69,104508,3644],{"emptyLinePlaceholder":1325},[69,104510,104511],{"class":71,"line":475},[69,104512,102559],{"class":1022},[69,104514,104515],{"class":71,"line":482},[69,104516,104517],{"class":1022},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[69,104519,104520],{"class":71,"line":497},[69,104521,3644],{"emptyLinePlaceholder":1325},[69,104523,104524],{"class":71,"line":502},[69,104525,104526],{"class":1022},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[69,104528,104529],{"class":71,"line":509},[69,104530,104531],{"class":1022},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[69,104533,104534],{"class":71,"line":524},[69,104535,104536],{"class":1022},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[69,104538,104539],{"class":71,"line":2888},[69,104540,104541],{"class":1022},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[69,104543,104544],{"class":71,"line":2893},[69,104545,102588],{"class":1022},[69,104547,104548],{"class":71,"line":2899},[69,104549,102593],{"class":1022},[69,104551,104552],{"class":71,"line":2919},[69,104553,102598],{"class":1022},[69,104555,104556],{"class":71,"line":2924},[69,104557,96919],{"class":1022},[69,104559,104560],{"class":71,"line":2938},[69,104561,3644],{"emptyLinePlaceholder":1325},[69,104563,104564],{"class":71,"line":2943},[69,104565,3644],{"emptyLinePlaceholder":1325},[69,104567,104568,104570,104572,104574,104576],{"class":71,"line":2972},[69,104569,33183],{"class":82},[69,104571,3217],{"class":109},[69,104573,102619],{"class":86},[69,104575,96907],{"class":90},[69,104577,4983],{"class":86},[69,104579,104580,104582,104584,104586,104588],{"class":71,"line":2977},[69,104581,102628],{"class":86},[69,104583,1019],{"class":82},[69,104585,102633],{"class":86},[69,104587,102535],{"class":90},[69,104589,1404],{"class":86},[69,104591,104592,104594,104596],{"class":71,"line":2994},[69,104593,102642],{"class":86},[69,104595,1019],{"class":82},[69,104597,102647],{"class":86},[69,104599,104600],{"class":71,"line":2999},[69,104601,3644],{"emptyLinePlaceholder":1325},[69,104603,104604,104607,104609,104612,104615],{"class":71,"line":3004},[69,104605,104606],{"class":86},"    box_body_id ",[69,104608,1019],{"class":82},[69,104610,104611],{"class":86}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[69,104613,104614],{"class":1022},"\"red_box\"",[69,104616,1404],{"class":86},[69,104618,104619,104622,104624,104627,104630],{"class":71,"line":3009},[69,104620,104621],{"class":86},"    site_id ",[69,104623,1019],{"class":82},[69,104625,104626],{"class":86}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[69,104628,104629],{"class":1022},"\"box_center\"",[69,104631,1404],{"class":86},[69,104633,104634],{"class":71,"line":3023},[69,104635,3644],{"emptyLinePlaceholder":1325},[69,104637,104638,104640,104643,104645,104647],{"class":71,"line":3028},[69,104639,4345],{"class":82},[69,104641,104642],{"class":86}," box_body_id ",[69,104644,1011],{"class":82},[69,104646,5337],{"class":90},[69,104648,4983],{"class":86},[69,104650,104651,104654,104657,104659,104662],{"class":71,"line":3821},[69,104652,104653],{"class":82},"        raise",[69,104655,104656],{"class":90}," RuntimeError",[69,104658,1398],{"class":86},[69,104660,104661],{"class":1022},"\"body red_box not found\"",[69,104663,1404],{"class":86},[69,104665,104666,104668,104671,104673,104675],{"class":71,"line":3835},[69,104667,4345],{"class":82},[69,104669,104670],{"class":86}," site_id ",[69,104672,1011],{"class":82},[69,104674,5337],{"class":90},[69,104676,4983],{"class":86},[69,104678,104679,104681,104683,104685,104688],{"class":71,"line":3843},[69,104680,104653],{"class":82},[69,104682,104656],{"class":90},[69,104684,1398],{"class":86},[69,104686,104687],{"class":1022},"\"site box_center not found\"",[69,104689,1404],{"class":86},[69,104691,104692],{"class":71,"line":3848},[69,104693,3644],{"emptyLinePlaceholder":1325},[69,104695,104696,104698,104700,104702,104704,104706,104708],{"class":71,"line":3854},[69,104697,4445],{"class":82},[69,104699,102722],{"class":86},[69,104701,27280],{"class":82},[69,104703,33679],{"class":90},[69,104705,1398],{"class":86},[69,104707,2967],{"class":90},[69,104709,32022],{"class":86},[69,104711,104712],{"class":71,"line":3860},[69,104713,102737],{"class":86},[69,104715,104716],{"class":71,"line":3865},[69,104717,3644],{"emptyLinePlaceholder":1325},[69,104719,104720,104722,104724,104727],{"class":71,"line":9190},[69,104721,32535],{"class":90},[69,104723,1398],{"class":86},[69,104725,104726],{"class":1022},"\"simulation time:\"",[69,104728,102699],{"class":86},[69,104730,104731,104733,104735,104738],{"class":71,"line":9214},[69,104732,32535],{"class":90},[69,104734,1398],{"class":86},[69,104736,104737],{"class":1022},"\"box body position:\"",[69,104739,104740],{"class":86},", data.xpos[box_body_id].copy())\n",[69,104742,104743,104745,104747,104750],{"class":71,"line":9219},[69,104744,32535],{"class":90},[69,104746,1398],{"class":86},[69,104748,104749],{"class":1022},"\"site position:\"",[69,104751,104752],{"class":86},", data.site_xpos[site_id].copy())\n",[69,104754,104755,104757,104759,104762],{"class":71,"line":9225},[69,104756,32535],{"class":90},[69,104758,1398],{"class":86},[69,104760,104761],{"class":1022},"\"box qpos:\"",[69,104763,104764],{"class":86},", np.array(data.qpos))\n",[69,104766,104767],{"class":71,"line":9252},[69,104768,3644],{"emptyLinePlaceholder":1325},[69,104770,104771],{"class":71,"line":9257},[69,104772,3644],{"emptyLinePlaceholder":1325},[69,104774,104775,104777,104779,104781,104783],{"class":71,"line":9263},[69,104776,2782],{"class":82},[69,104778,32456],{"class":90},[69,104780,102780],{"class":82},[69,104782,102783],{"class":1022},[69,104784,4983],{"class":86},[69,104786,104787],{"class":71,"line":9275},[69,104788,102790],{"class":86},[29,104790,104791],{},"保存为：",[59,104793,104795],{"className":25059,"code":104794,"language":25061,"meta":64,"style":64},"touch ch2_xml_basic.py\n",[66,104796,104797],{"__ignoreMap":64},[69,104798,104799,104801],{"class":71,"line":72},[69,104800,102504],{"class":109},[69,104802,104803],{"class":1022}," ch2_xml_basic.py\n",[29,104805,103522],{},[59,104807,104809],{"className":25059,"code":104808,"language":25061,"meta":64,"style":64},"python ch2_xml_basic.py\n",[66,104810,104811],{"__ignoreMap":64},[69,104812,104813,104815],{"class":71,"line":72},[69,104814,31616],{"class":109},[69,104816,104803],{"class":1022},[19,104818,102793],{"id":102793},[29,104820,104821],{},"用名字查找 body：",[59,104823,104825],{"className":31614,"code":104824,"language":31616,"meta":64,"style":64},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[66,104826,104827],{"__ignoreMap":64},[69,104828,104829,104832,104834,104836,104838],{"class":71,"line":72},[69,104830,104831],{"class":86},"box_body_id ",[69,104833,1019],{"class":82},[69,104835,104611],{"class":86},[69,104837,104614],{"class":1022},[69,104839,1404],{"class":86},[29,104841,104842],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[29,104844,104845],{},"用名字查找 site：",[59,104847,104849],{"className":31614,"code":104848,"language":31616,"meta":64,"style":64},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[66,104850,104851],{"__ignoreMap":64},[69,104852,104853,104856,104858,104860,104862],{"class":71,"line":72},[69,104854,104855],{"class":86},"site_id ",[69,104857,1019],{"class":82},[69,104859,104626],{"class":86},[69,104861,104629],{"class":1022},[69,104863,1404],{"class":86},[29,104865,104866,104867,104870,104871,104874],{},"注意第二个参数是对象类型。查 body 就用 ",[66,104868,104869],{},"mjOBJ_BODY","，查 site 就用 ",[66,104872,104873],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[29,104876,104877],{},"读取世界坐标：",[59,104879,104881],{"className":31614,"code":104880,"language":31616,"meta":64,"style":64},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[66,104882,104883,104888],{"__ignoreMap":64},[69,104884,104885],{"class":71,"line":72},[69,104886,104887],{"class":86},"data.xpos[box_body_id]\n",[69,104889,104890],{"class":71,"line":79},[69,104891,104892],{"class":86},"data.site_xpos[site_id]\n",[29,104894,104895,104898,104899,104902],{},[66,104896,104897],{},"xpos"," 是 body 的世界坐标，",[66,104900,104901],{},"site_xpos"," 是 site 的世界坐标。",[19,104904,102929],{"id":102929},[59,104906,104908],{"className":31614,"code":104907,"language":31616,"meta":64,"style":64},"import mujoco\nimport numpy as np\n",[66,104909,104910,104916],{"__ignoreMap":64},[69,104911,104912,104914],{"class":71,"line":72},[69,104913,31628],{"class":82},[69,104915,102522],{"class":86},[69,104917,104918,104920,104922,104924],{"class":71,"line":79},[69,104919,31628],{"class":82},[69,104921,32616],{"class":86},[69,104923,32619],{"class":82},[69,104925,32622],{"class":86},[29,104927,104928,104929,104932,104933,104936,104937,1604,104940,29621],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[66,104930,104931],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[66,104934,104935],{},"as np"," 是习惯写法，后面就可以写 ",[66,104938,104939],{},"np.array(...)",[66,104941,104942],{},"np.round(...)",[59,104944,104945],{"className":31614,"code":102816,"language":31616,"meta":64,"style":64},[66,104946,104947,104955,104959],{"__ignoreMap":64},[69,104948,104949,104951,104953],{"class":71,"line":72},[69,104950,102535],{"class":90},[69,104952,14805],{"class":82},[69,104954,102540],{"class":1022},[69,104956,104957],{"class":71,"line":79},[69,104958,102831],{"class":1022},[69,104960,104961],{"class":71,"line":106},[69,104962,96919],{"class":1022},[29,104964,104965,104966,29621],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[66,104967,104968],{},"mujoco.MjModel.from_xml_string(XML)",[59,104970,104972],{"className":54295,"code":104971,"language":54297,"meta":64,"style":64},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[66,104973,104974],{"__ignoreMap":64},[69,104975,104976,104978,104980,104982,104984,104986,104988,104990,104993,104995,104997,105000,105002,105004,105007],{"class":71,"line":72},[69,104977,1011],{"class":86},[69,104979,104431],{"class":348},[69,104981,16160],{"class":109},[69,104983,1019],{"class":86},[69,104985,104629],{"class":1022},[69,104987,102327],{"class":109},[69,104989,1019],{"class":86},[69,104991,104992],{"class":1022},"\"0 0 0\"",[69,104994,102357],{"class":109},[69,104996,1019],{"class":86},[69,104998,104999],{"class":1022},"\"0.03\"",[69,105001,79988],{"class":109},[69,105003,1019],{"class":86},[69,105005,105006],{"class":1022},"\"0 1 0 1\"",[69,105008,102365],{"class":86},[29,105010,105011,105013,105014,105017,105018,105020,105021,105024],{},[66,105012,104431],{}," 是标记点。",[66,105015,105016],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[66,105019,104391],{}," 表示显示出来的小球大小。",[66,105022,105023],{},"rgba=\"0 1 0 1\""," 表示绿色。",[59,105026,105027],{"className":31614,"code":104824,"language":31616,"meta":64,"style":64},[66,105028,105029],{"__ignoreMap":64},[69,105030,105031,105033,105035,105037,105039],{"class":71,"line":72},[69,105032,104831],{"class":86},[69,105034,1019],{"class":82},[69,105036,104611],{"class":86},[69,105038,104614],{"class":1022},[69,105040,1404],{"class":86},[29,105042,105043,105044,105046],{},"这行的作用是：根据名字 ",[66,105045,104614],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[29,105048,105049],{},"拆开看：",[37,105051,105052,105058,105063,105069],{},[40,105053,105054,105057],{},[66,105055,105056],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[40,105059,105060,105062],{},[66,105061,103306],{}," 是被查询的模型。",[40,105064,105065,105068],{},[66,105066,105067],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[40,105070,105071,105073],{},[66,105072,104614],{}," 是 XML 里写的名字。",[59,105075,105076],{"className":31614,"code":104848,"language":31616,"meta":64,"style":64},[66,105077,105078],{"__ignoreMap":64},[69,105079,105080,105082,105084,105086,105088],{"class":71,"line":72},[69,105081,104855],{"class":86},[69,105083,1019],{"class":82},[69,105085,104626],{"class":86},[69,105087,104629],{"class":1022},[69,105089,1404],{"class":86},[29,105091,105092,105093,29621],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[66,105094,104629],{},[59,105096,105098],{"className":31614,"code":105097,"language":31616,"meta":64,"style":64},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[66,105099,105100,105112],{"__ignoreMap":64},[69,105101,105102,105104,105106,105108,105110],{"class":71,"line":72},[69,105103,2782],{"class":82},[69,105105,104642],{"class":86},[69,105107,1011],{"class":82},[69,105109,5337],{"class":90},[69,105111,4983],{"class":86},[69,105113,105114,105117,105119,105121,105123],{"class":71,"line":79},[69,105115,105116],{"class":82},"    raise",[69,105118,104656],{"class":90},[69,105120,1398],{"class":86},[69,105122,104661],{"class":1022},[69,105124,1404],{"class":86},[29,105126,105127,105129,105130,105133,105134,105137,105138,105141],{},[66,105128,2782],{}," 是条件判断。",[66,105131,105132],{},"mj_name2id"," 找不到对象时会返回 ",[66,105135,105136],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[66,105139,105140],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[59,105143,105145],{"className":31614,"code":105144,"language":31616,"meta":64,"style":64},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[66,105146,105147,105163],{"__ignoreMap":64},[69,105148,105149,105151,105153,105155,105157,105159,105161],{"class":71,"line":72},[69,105150,4269],{"class":82},[69,105152,102722],{"class":86},[69,105154,27280],{"class":82},[69,105156,33679],{"class":90},[69,105158,1398],{"class":86},[69,105160,2967],{"class":90},[69,105162,32022],{"class":86},[69,105164,105165],{"class":71,"line":79},[69,105166,102920],{"class":86},[29,105168,105169],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[59,105171,105173],{"className":31614,"code":105172,"language":31616,"meta":64,"style":64},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[66,105174,105175],{"__ignoreMap":64},[69,105176,105177,105179,105181,105183],{"class":71,"line":72},[69,105178,31651],{"class":90},[69,105180,1398],{"class":86},[69,105182,104737],{"class":1022},[69,105184,104740],{"class":86},[29,105186,105187,105189,105190,105193],{},[66,105188,102300],{}," 保存所有 body 的世界坐标。",[66,105191,105192],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[59,105195,105197],{"className":31614,"code":105196,"language":31616,"meta":64,"style":64},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[66,105198,105199],{"__ignoreMap":64},[69,105200,105201,105203,105205,105207],{"class":71,"line":72},[69,105202,31651],{"class":90},[69,105204,1398],{"class":86},[69,105206,104749],{"class":1022},[69,105208,104752],{"class":86},[29,105210,105211,105214,105215,105217],{},[66,105212,105213],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[66,105216,104198],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[59,105219,105221],{"className":31614,"code":105220,"language":31616,"meta":64,"style":64},"print(\"box qpos:\", np.array(data.qpos))\n",[66,105222,105223],{"__ignoreMap":64},[69,105224,105225,105227,105229,105231],{"class":71,"line":72},[69,105226,31651],{"class":90},[69,105228,1398],{"class":86},[69,105230,104761],{"class":1022},[69,105232,104764],{"class":86},[29,105234,105235,105236,105239],{},"这里打印广义位置数组。",[66,105237,105238],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105241,103537],{"id":103536},[29,105243,105244,105245,105248,105249,29621],{},"程序会输出 ",[66,105246,105247],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[66,105250,105251],{},"qpos",[29,105253,105254,105256,105257,105260,105261,105264],{},[66,105255,105192],{}," 是 body 的世界坐标位置。",[66,105258,105259],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[66,105262,105263],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[29,105266,83443,105267,83751,105269,105271],{},[66,105268,104198],{},[66,105270,105016],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[29,105273,105274],{},"如果你把 site 改成：",[59,105276,105278],{"className":54295,"code":105277,"language":54297,"meta":64,"style":64},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[66,105279,105280],{"__ignoreMap":64},[69,105281,105282,105284,105286,105288,105290,105293,105295,105297,105300,105302,105304,105306,105308,105310,105312],{"class":71,"line":72},[69,105283,1011],{"class":86},[69,105285,104431],{"class":348},[69,105287,16160],{"class":109},[69,105289,1019],{"class":86},[69,105291,105292],{"class":1022},"\"box_top\"",[69,105294,102327],{"class":109},[69,105296,1019],{"class":86},[69,105298,105299],{"class":1022},"\"0 0 0.15\"",[69,105301,102357],{"class":109},[69,105303,1019],{"class":86},[69,105305,104999],{"class":1022},[69,105307,79988],{"class":109},[69,105309,1019],{"class":86},[69,105311,105006],{"class":1022},[69,105313,102365],{"class":86},[29,105315,105316,105317,105320],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[66,105318,105319],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105322,103569],{"id":103568},[37,105324,105325,105334,105337,105344,105350,105361],{},[40,105326,103632,105327,105329,105330,103635,105332,29621],{},[66,105328,104202],{}," 的初始高度从 ",[66,105331,1609],{},[66,105333,1471],{},[40,105335,105336],{},"重新运行程序。",[40,105338,105339,105340,105343],{},"观察 ",[66,105341,105342],{},"box qpos"," 和最终位置是否变化。",[40,105345,105346,105347,105349],{},"故意把 ",[66,105348,104431],{}," 名称改错，确认程序能报错。",[40,105351,103632,105352,105354,105355,103635,105357,105360],{},[66,105353,102341],{}," 的颜色 ",[66,105356,103253],{},[66,105358,105359],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[40,105362,103632,105363,83751,105365,103635,105368,105371,105372,105374],{},[66,105364,104198],{},[66,105366,105367],{},"pos",[66,105369,105370],{},"0 0 0.2","，观察 ",[66,105373,105319],{}," 如何变化。",[14,105376,103674],{"id":103673},[19,105378,105380],{"id":105379},"xml-error-schema-violation",[66,105381,105382],{},"XML Error: Schema violation",[29,105384,105385],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[19,105387,105389,82511,105391],{"id":105388},"mj_name2id-返回-1",[66,105390,105132],{},[66,105392,105136],{},[29,105394,105395,105396,105399],{},"说明名字没有找到。检查 XML 中 ",[66,105397,105398],{},"name=\"...\"","，并确认对象类型正确。",[19,105401,105402],{"id":105402},"物体不下落",[29,105404,103744],{},[37,105406,105407,105412,105417],{},[40,105408,105409,105410],{},"body 是否有 ",[66,105411,102841],{},[40,105413,105414,105415],{},"gravity 是否为 ",[66,105416,103810],{},[40,105418,105419,105420,105422],{},"body 是否被固定在 ",[66,105421,103062],{}," 中",[19,105424,105425],{"id":105425},"坐标看起来不符合预期",[29,105427,105428],{},"先区分两种坐标：",[1530,105430,105431,105440],{},[1533,105432,105433],{},[1536,105434,105435,105438],{},[1539,105436,105437],{"align":1202},"坐标",[1539,105439,101921],{"align":1202},[1576,105441,105442,105452],{},[1536,105443,105444,105449],{},[1581,105445,105446,105447],{"align":1202},"XML 里的 ",[66,105448,105367],{},[1581,105450,105451],{"align":1202},"相对父 body 的局部坐标",[1536,105453,105454,105460],{},[1581,105455,105456,26215,105458],{"align":1202},[66,105457,102300],{},[66,105459,105213],{},[1581,105461,105462],{"align":1202},"仿真更新后的世界坐标",[29,105464,105465,105466,105468,105469,83760,105472,105474],{},"如果你修改了 ",[66,105467,102291],{},"，但还没调用 ",[66,105470,105471],{},"mj_forward",[66,105473,102436],{},"，世界坐标可能还没有更新。",[14,105476,103828],{"id":103827},[29,105478,105479],{},"MJCF 建模先掌握四件事：",[37,105481,105482,105487,105492,105497],{},[40,105483,105484,105486],{},[66,105485,680],{}," 表示刚体层级。",[40,105488,105489,105491],{},[66,105490,102341],{}," 表示形状、碰撞和质量。",[40,105493,105494,105496],{},[66,105495,104177],{}," 决定 body 能不能动、怎么动。",[40,105498,105499,105501],{},[66,105500,104431],{}," 用来标记关键点，方便 Python 读取位置。",[29,105503,105504],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1297,105506,105507],{},"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":64,"searchDepth":79,"depth":79,"links":105509},[105510,105511,105512,105518,105522,105523,105524,105531],{"id":101867,"depth":79,"text":101868},{"id":101990,"depth":79,"text":101991},{"id":102265,"depth":79,"text":102266,"children":105513},[105514,105515,105516,105517],{"id":104181,"depth":106,"text":104181},{"id":104295,"depth":106,"text":104295},{"id":104321,"depth":106,"text":104322},{"id":104425,"depth":106,"text":104426},{"id":102473,"depth":79,"text":102474,"children":105519},[105520,105521],{"id":102793,"depth":106,"text":102793},{"id":102929,"depth":106,"text":102929},{"id":103536,"depth":79,"text":103537},{"id":103568,"depth":79,"text":103569},{"id":103673,"depth":79,"text":103674,"children":105525},[105526,105527,105529,105530],{"id":105379,"depth":106,"text":105382},{"id":105388,"depth":106,"text":105528},"mj_name2id 返回 -1",{"id":105402,"depth":106,"text":105402},{"id":105425,"depth":106,"text":105425},{"id":103827,"depth":79,"text":103828},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103875,"description":64},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105538,"title":105539,"body":105540,"description":64,"extension":1323,"meta":107035,"navigation":1325,"path":107036,"seo":107037,"stem":107038,"__hash__":107039},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105541,"toc":107007},[105542,105545,105547,105550,105553,105591,105594,105600,105603,105605,105607,105634,105636,105650,105652,105693,105695,105719,105721,105724,105733,105742,105745,105754,105762,105771,105774,105784,105787,105839,105846,105852,105860,105908,105911,105930,105933,105941,105945,105954,105987,105989,106337,106339,106351,106353,106364,106366,106369,106390,106396,106399,106424,106434,106437,106445,106448,106451,106472,106483,106485,106505,106508,106529,106538,106557,106563,106588,106591,106605,106612,106636,106639,106647,106656,106672,106684,106692,106701,106703,106706,106730,106735,106738,106760,106762,106801,106803,106810,106812,106820,106823,106826,106838,106879,106886,106897,106904,106907,106956,106959,106962,106968,106970,106975,107001,107004],[10,105543,105539],{"id":105544},"_3python-控制接口读取状态与推进仿真",[14,105546,101868],{"id":101867},[29,105548,105549],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[29,105551,105552],{},"你将学习:",[37,105554,105555,105560,105565,105569,105574,105585],{},[40,105556,105557],{},[66,105558,105559],{},"MjModel.from_xml_string",[40,105561,105562],{},[66,105563,105564],{},"MjData(model)",[40,105566,105567],{},[66,105568,102436],{},[40,105570,105571],{},[66,105572,105573],{},"mj_resetData",[40,105575,105576,105577,1604,105579,1604,105582],{},"读取 ",[66,105578,105251],{},[66,105580,105581],{},"qvel",[66,105583,105584],{},"ctrl",[40,105586,105587,105588],{},"使用 ",[66,105589,105590],{},"model.opt.timestep",[29,105592,105593],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[59,105595,105598],{"className":105596,"code":105597,"language":540,"meta":64},[538],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[66,105599,105597],{"__ignoreMap":64},[29,105601,105602],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105604,101991],{"id":101990},[29,105606,101994],{},[59,105608,105610],{"className":25059,"code":105609,"language":25061,"meta":64,"style":64},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[66,105611,105612],{"__ignoreMap":64},[69,105613,105614,105616,105618,105620,105622,105625,105627,105629,105631],{"class":71,"line":72},[69,105615,25813],{"class":109},[69,105617,27551],{"class":1022},[69,105619,25071],{"class":1022},[69,105621,27636],{"class":90},[69,105623,105624],{"class":1022}," python3",[69,105626,102019],{"class":1022},[69,105628,103722],{"class":1022},[69,105630,102035],{"class":1022},[69,105632,105633],{"class":1022}," glfw\n",[29,105635,104040],{},[59,105637,105638],{"className":25059,"code":102140,"language":25061,"meta":64,"style":64},[66,105639,105640],{"__ignoreMap":64},[69,105641,105642,105644,105646,105648],{"class":71,"line":72},[69,105643,25068],{"class":109},[69,105645,25071],{"class":1022},[69,105647,102151],{"class":1022},[69,105649,102154],{"class":1022},[29,105651,104057],{},[59,105653,105655],{"className":25059,"code":105654,"language":25061,"meta":64,"style":64},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[66,105656,105657,105674,105683],{"__ignoreMap":64},[69,105658,105659,105661,105663,105665,105668,105670,105672],{"class":71,"line":72},[69,105660,31566],{"class":109},[69,105662,30412],{"class":1022},[69,105664,26352],{"class":90},[69,105666,105667],{"class":1022}," mujoco-python-api",[69,105669,102196],{"class":1022},[69,105671,102199],{"class":90},[69,105673,102202],{"class":90},[69,105675,105676,105678,105680],{"class":71,"line":79},[69,105677,31566],{"class":109},[69,105679,102209],{"class":1022},[69,105681,105682],{"class":1022}," mujoco-python-api\n",[69,105684,105685,105687,105689,105691],{"class":71,"line":106},[69,105686,25068],{"class":109},[69,105688,25071],{"class":1022},[69,105690,102151],{"class":1022},[69,105692,102154],{"class":1022},[29,105694,102225],{},[37,105696,105697,105704,105713],{},[40,105698,105699,102239,105701,105703],{},[66,105700,101896],{},[66,105702,101901],{}," 是官方 Python bindings 的类名。",[40,105705,105706,105707,105710,105711,29621],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[66,105708,105709],{},"mjModel"," 在 Python 中是 ",[66,105712,101930],{},[40,105714,105715,105716,29621],{},"不要使用 ",[66,105717,105718],{},"sim = mujoco_py.MjSim(...)",[14,105720,102266],{"id":102265},[29,105722,105723],{},"仿真推进核心代码:",[59,105725,105727],{"className":31614,"code":105726,"language":31616,"meta":64,"style":64},"mujoco.mj_step(model, data)\n",[66,105728,105729],{"__ignoreMap":64},[69,105730,105731],{"class":71,"line":72},[69,105732,105726],{"class":86},[29,105734,105735,105736,1604,105738,1604,105740,29621],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[66,105737,102291],{},[66,105739,102294],{},[66,105741,102288],{},[29,105743,105744],{},"重置仿真:",[59,105746,105748],{"className":31614,"code":105747,"language":31616,"meta":64,"style":64},"mujoco.mj_resetData(model, data)\n",[66,105749,105750],{"__ignoreMap":64},[69,105751,105752],{"class":71,"line":72},[69,105753,105747],{"class":86},[29,105755,105756,105757,83760,105759,105761],{},"如果手动修改了 ",[66,105758,102291],{},[66,105760,102294],{},"，通常应调用:",[59,105763,105765],{"className":31614,"code":105764,"language":31616,"meta":64,"style":64},"mujoco.mj_forward(model, data)\n",[66,105766,105767],{"__ignoreMap":64},[69,105768,105769],{"class":71,"line":72},[69,105770,105764],{"class":86},[29,105772,105773],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[19,105775,105777,1604,105779,1604,105781,105783],{"id":105776},"qposqvelctrl-是什么",[66,105778,105251],{},[66,105780,105581],{},[66,105782,105584],{}," 是什么",[29,105785,105786],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1530,105788,105789,105801],{},[1533,105790,105791],{},[1536,105792,105793,105796,105798],{},[1539,105794,105795],{"align":1202},"字段",[1539,105797,101921],{"align":1202},[1539,105799,105800],{"align":1202},"谁来修改",[1576,105802,105803,105815,105827],{},[1536,105804,105805,105809,105812],{},[1581,105806,105807],{"align":1202},[66,105808,102291],{},[1581,105810,105811],{"align":1202},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1581,105813,105814],{"align":1202},"MuJoCo 更新，也可以手动设置初始状态",[1536,105816,105817,105821,105824],{},[1581,105818,105819],{"align":1202},[66,105820,102294],{},[1581,105822,105823],{"align":1202},"广义速度，例如小车速度、关节角速度",[1581,105825,105826],{"align":1202},"MuJoCo 更新，也可以手动清零",[1536,105828,105829,105833,105836],{},[1581,105830,105831],{"align":1202},[66,105832,102297],{},[1581,105834,105835],{"align":1202},"actuator 的控制输入",[1581,105837,105838],{"align":1202},"主要由你的控制代码写入",[29,105840,10267,105841,102239,105843,105845],{},[66,105842,105251],{},[66,105844,105581],{}," 不一定同维。自由刚体就是典型例子：",[59,105847,105850],{"className":105848,"code":105849,"language":540,"meta":64},[538],"freejoint: qpos 7 维，qvel 6 维\n",[66,105851,105849],{"__ignoreMap":64},[19,105853,105855,102239,105857,105859],{"id":105854},"mj_step-和-mj_forward-的区别",[66,105856,102436],{},[66,105858,105471],{}," 的区别",[1530,105861,105862,105875],{},[1533,105863,105864],{},[1536,105865,105866,105869,105872],{},[1539,105867,105868],{"align":1202},"函数",[1539,105870,105871],{"align":1202},"是否推进时间",[1539,105873,105874],{"align":1202},"什么时候用",[1576,105876,105877,105890],{},[1536,105878,105879,105884,105887],{},[1581,105880,105881],{"align":1202},[66,105882,105883],{},"mj_step(model, data)",[1581,105885,105886],{"align":1202},"是",[1581,105888,105889],{"align":1202},"正常仿真循环，每调用一次前进一步",[1536,105891,105892,105897,105900],{},[1581,105893,105894],{"align":1202},[66,105895,105896],{},"mj_forward(model, data)",[1581,105898,105899],{"align":1202},"否",[1581,105901,105902,105903,1604,105905,105907],{"align":1202},"手动改了 ",[66,105904,105251],{},[66,105906,105581],{}," 后，刷新派生量",[29,105909,105910],{},"例如你写：",[59,105912,105914],{"className":31614,"code":105913,"language":31616,"meta":64,"style":64},"data.qpos[2] = 2.0\n",[66,105915,105916],{"__ignoreMap":64},[69,105917,105918,105921,105923,105925,105927],{"class":71,"line":72},[69,105919,105920],{"class":86},"data.qpos[",[69,105922,1471],{"class":90},[69,105924,5687],{"class":86},[69,105926,1019],{"class":82},[69,105928,105929],{"class":90}," 2.0\n",[29,105931,105932],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[59,105934,105935],{"className":31614,"code":105764,"language":31616,"meta":64,"style":64},[66,105936,105937],{"__ignoreMap":64},[69,105938,105939],{"class":71,"line":72},[69,105940,105764],{"class":86},[19,105942,105944],{"id":105943},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[29,105946,105947,105950,105951,105953],{},[66,105948,105949],{},"mujoco.mj_resetData(model, data)"," 会把 ",[66,105952,34637],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[59,105955,105957],{"className":31614,"code":105956,"language":31616,"meta":64,"style":64},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[66,105958,105959,105963,105973,105983],{"__ignoreMap":64},[69,105960,105961],{"class":71,"line":72},[69,105962,105747],{"class":86},[69,105964,105965,105968,105970],{"class":71,"line":79},[69,105966,105967],{"class":86},"data.qpos[:] ",[69,105969,1019],{"class":82},[69,105971,105972],{"class":86}," random_qpos\n",[69,105974,105975,105978,105980],{"class":71,"line":106},[69,105976,105977],{"class":86},"data.qvel[:] ",[69,105979,1019],{"class":82},[69,105981,105982],{"class":90}," 0.0\n",[69,105984,105985],{"class":71,"line":116},[69,105986,105764],{"class":86},[14,105988,102474],{"id":102473},[59,105990,105992],{"className":31614,"code":105991,"language":31616,"meta":64,"style":64},"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",[66,105993,105994,106000,106010,106014,106018,106026,106031,106035,106039,106043,106048,106052,106057,106062,106067,106071,106075,106079,106083,106087,106091,106110,106117,106129,106140,106156,106172,106176,106180,106192,106204,106212,106216,106227,106231,106247,106251,106255,106264,106268,106273,106282,106286,106299,106304,106313,106317,106321,106333],{"__ignoreMap":64},[69,105995,105996,105998],{"class":71,"line":72},[69,105997,31628],{"class":82},[69,105999,102522],{"class":86},[69,106001,106002,106004,106006,106008],{"class":71,"line":79},[69,106003,31628],{"class":82},[69,106005,32616],{"class":86},[69,106007,32619],{"class":82},[69,106009,32622],{"class":86},[69,106011,106012],{"class":71,"line":106},[69,106013,3644],{"emptyLinePlaceholder":1325},[69,106015,106016],{"class":71,"line":116},[69,106017,3644],{"emptyLinePlaceholder":1325},[69,106019,106020,106022,106024],{"class":71,"line":133},[69,106021,102535],{"class":90},[69,106023,14805],{"class":82},[69,106025,102540],{"class":1022},[69,106027,106028],{"class":71,"line":139},[69,106029,106030],{"class":1022},"\u003Cmujoco model=\"state_api\">\n",[69,106032,106033],{"class":71,"line":401},[69,106034,102550],{"class":1022},[69,106036,106037],{"class":71,"line":470},[69,106038,3644],{"emptyLinePlaceholder":1325},[69,106040,106041],{"class":71,"line":475},[69,106042,102559],{"class":1022},[69,106044,106045],{"class":71,"line":482},[69,106046,106047],{"class":1022},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[69,106049,106050],{"class":71,"line":497},[69,106051,3644],{"emptyLinePlaceholder":1325},[69,106053,106054],{"class":71,"line":502},[69,106055,106056],{"class":1022},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[69,106058,106059],{"class":71,"line":509},[69,106060,106061],{"class":1022},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[69,106063,106064],{"class":71,"line":524},[69,106065,106066],{"class":1022},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[69,106068,106069],{"class":71,"line":2888},[69,106070,102588],{"class":1022},[69,106072,106073],{"class":71,"line":2893},[69,106074,102593],{"class":1022},[69,106076,106077],{"class":71,"line":2899},[69,106078,102598],{"class":1022},[69,106080,106081],{"class":71,"line":2919},[69,106082,96919],{"class":1022},[69,106084,106085],{"class":71,"line":2924},[69,106086,3644],{"emptyLinePlaceholder":1325},[69,106088,106089],{"class":71,"line":2938},[69,106090,3644],{"emptyLinePlaceholder":1325},[69,106092,106093,106095,106098,106101,106103,106106,106108],{"class":71,"line":2943},[69,106094,33183],{"class":82},[69,106096,106097],{"class":109}," print_state",[69,106099,106100],{"class":86},"(prefix: ",[69,106102,2554],{"class":90},[69,106104,106105],{"class":86},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[69,106107,96907],{"class":90},[69,106109,4983],{"class":86},[69,106111,106112,106114],{"class":71,"line":2972},[69,106113,32535],{"class":90},[69,106115,106116],{"class":86},"(prefix)\n",[69,106118,106119,106121,106123,106126],{"class":71,"line":2977},[69,106120,32535],{"class":90},[69,106122,1398],{"class":86},[69,106124,106125],{"class":1022},"\"  timestep:\"",[69,106127,106128],{"class":86},", model.opt.timestep)\n",[69,106130,106131,106133,106135,106138],{"class":71,"line":2994},[69,106132,32535],{"class":90},[69,106134,1398],{"class":86},[69,106136,106137],{"class":1022},"\"  time:\"",[69,106139,102699],{"class":86},[69,106141,106142,106144,106146,106149,106152,106154],{"class":71,"line":2999},[69,106143,32535],{"class":90},[69,106145,1398],{"class":86},[69,106147,106148],{"class":1022},"\"  qpos:\"",[69,106150,106151],{"class":86},", np.round(data.qpos.copy(), ",[69,106153,1684],{"class":90},[69,106155,31733],{"class":86},[69,106157,106158,106160,106162,106165,106168,106170],{"class":71,"line":3004},[69,106159,32535],{"class":90},[69,106161,1398],{"class":86},[69,106163,106164],{"class":1022},"\"  qvel:\"",[69,106166,106167],{"class":86},", np.round(data.qvel.copy(), ",[69,106169,1684],{"class":90},[69,106171,31733],{"class":86},[69,106173,106174],{"class":71,"line":3009},[69,106175,3644],{"emptyLinePlaceholder":1325},[69,106177,106178],{"class":71,"line":3023},[69,106179,3644],{"emptyLinePlaceholder":1325},[69,106181,106182,106184,106186,106188,106190],{"class":71,"line":3028},[69,106183,33183],{"class":82},[69,106185,3217],{"class":109},[69,106187,102619],{"class":86},[69,106189,96907],{"class":90},[69,106191,4983],{"class":86},[69,106193,106194,106196,106198,106200,106202],{"class":71,"line":3821},[69,106195,102628],{"class":86},[69,106197,1019],{"class":82},[69,106199,102633],{"class":86},[69,106201,102535],{"class":90},[69,106203,1404],{"class":86},[69,106205,106206,106208,106210],{"class":71,"line":3835},[69,106207,102642],{"class":86},[69,106209,1019],{"class":82},[69,106211,102647],{"class":86},[69,106213,106214],{"class":71,"line":3843},[69,106215,3644],{"emptyLinePlaceholder":1325},[69,106217,106218,106221,106224],{"class":71,"line":3848},[69,106219,106220],{"class":86},"    print_state(",[69,106222,106223],{"class":1022},"\"initial\"",[69,106225,106226],{"class":86},", model, data)\n",[69,106228,106229],{"class":71,"line":3854},[69,106230,3644],{"emptyLinePlaceholder":1325},[69,106232,106233,106235,106237,106239,106241,106243,106245],{"class":71,"line":3860},[69,106234,4445],{"class":82},[69,106236,102722],{"class":86},[69,106238,27280],{"class":82},[69,106240,33679],{"class":90},[69,106242,1398],{"class":86},[69,106244,2043],{"class":90},[69,106246,32022],{"class":86},[69,106248,106249],{"class":71,"line":3865},[69,106250,102737],{"class":86},[69,106252,106253],{"class":71,"line":9190},[69,106254,3644],{"emptyLinePlaceholder":1325},[69,106256,106257,106259,106262],{"class":71,"line":9214},[69,106258,106220],{"class":86},[69,106260,106261],{"class":1022},"\"after 50 steps\"",[69,106263,106226],{"class":86},[69,106265,106266],{"class":71,"line":9219},[69,106267,3644],{"emptyLinePlaceholder":1325},[69,106269,106270],{"class":71,"line":9225},[69,106271,106272],{"class":86},"    mujoco.mj_resetData(model, data)\n",[69,106274,106275,106277,106280],{"class":71,"line":9252},[69,106276,106220],{"class":86},[69,106278,106279],{"class":1022},"\"after reset\"",[69,106281,106226],{"class":86},[69,106283,106284],{"class":71,"line":9257},[69,106285,3644],{"emptyLinePlaceholder":1325},[69,106287,106288,106291,106293,106295,106297],{"class":71,"line":9263},[69,106289,106290],{"class":86},"    data.qpos[",[69,106292,1471],{"class":90},[69,106294,5687],{"class":86},[69,106296,1019],{"class":82},[69,106298,105929],{"class":90},[69,106300,106301],{"class":71,"line":9275},[69,106302,106303],{"class":86},"    mujoco.mj_forward(model, data)\n",[69,106305,106306,106308,106311],{"class":71,"line":9287},[69,106307,106220],{"class":86},[69,106309,106310],{"class":1022},"\"after manual qpos edit\"",[69,106312,106226],{"class":86},[69,106314,106315],{"class":71,"line":9299},[69,106316,3644],{"emptyLinePlaceholder":1325},[69,106318,106319],{"class":71,"line":10958},[69,106320,3644],{"emptyLinePlaceholder":1325},[69,106322,106323,106325,106327,106329,106331],{"class":71,"line":10983},[69,106324,2782],{"class":82},[69,106326,32456],{"class":90},[69,106328,102780],{"class":82},[69,106330,102783],{"class":1022},[69,106332,4983],{"class":86},[69,106334,106335],{"class":71,"line":11006},[69,106336,102790],{"class":86},[29,106338,104791],{},[59,106340,106342],{"className":25059,"code":106341,"language":25061,"meta":64,"style":64},"touch ch3_python_state.py\n",[66,106343,106344],{"__ignoreMap":64},[69,106345,106346,106348],{"class":71,"line":72},[69,106347,102504],{"class":109},[69,106349,106350],{"class":1022}," ch3_python_state.py\n",[29,106352,103522],{},[59,106354,106356],{"className":25059,"code":106355,"language":25061,"meta":64,"style":64},"python ch3_python_state.py\n",[66,106357,106358],{"__ignoreMap":64},[69,106359,106360,106362],{"class":71,"line":72},[69,106361,31616],{"class":109},[69,106363,106350],{"class":1022},[19,106365,102793],{"id":102793},[29,106367,106368],{},"打印状态的函数：",[59,106370,106372],{"className":31614,"code":106371,"language":31616,"meta":64,"style":64},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[66,106373,106374],{"__ignoreMap":64},[69,106375,106376,106378,106380,106382,106384,106386,106388],{"class":71,"line":72},[69,106377,33183],{"class":82},[69,106379,106097],{"class":109},[69,106381,106100],{"class":86},[69,106383,2554],{"class":90},[69,106385,106105],{"class":86},[69,106387,96907],{"class":90},[69,106389,4983],{"class":86},[29,106391,106392,106393,106395],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[66,106394,34637],{}," 里发生了什么。",[29,106397,106398],{},"推进 50 步：",[59,106400,106402],{"className":31614,"code":106401,"language":31616,"meta":64,"style":64},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[66,106403,106404,106420],{"__ignoreMap":64},[69,106405,106406,106408,106410,106412,106414,106416,106418],{"class":71,"line":72},[69,106407,4269],{"class":82},[69,106409,102722],{"class":86},[69,106411,27280],{"class":82},[69,106413,33679],{"class":90},[69,106415,1398],{"class":86},[69,106417,2043],{"class":90},[69,106419,32022],{"class":86},[69,106421,106422],{"class":71,"line":79},[69,106423,102920],{"class":86},[29,106425,106426,106427,106430,106431,106433],{},"由于 ",[66,106428,106429],{},"timestep=0.01","，所以 50 步后时间约为 ",[66,106432,36565],{}," 秒。",[29,106435,106436],{},"重置：",[59,106438,106439],{"className":31614,"code":105747,"language":31616,"meta":64,"style":64},[66,106440,106441],{"__ignoreMap":64},[69,106442,106443],{"class":71,"line":72},[69,106444,105747],{"class":86},[29,106446,106447],{},"这会把时间、位置、速度恢复到初始状态。",[29,106449,106450],{},"手动改高度：",[59,106452,106454],{"className":31614,"code":106453,"language":31616,"meta":64,"style":64},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[66,106455,106456,106468],{"__ignoreMap":64},[69,106457,106458,106460,106462,106464,106466],{"class":71,"line":72},[69,106459,105920],{"class":86},[69,106461,1471],{"class":90},[69,106463,5687],{"class":86},[69,106465,1019],{"class":82},[69,106467,105929],{"class":90},[69,106469,106470],{"class":71,"line":79},[69,106471,105764],{"class":86},[29,106473,106474,106475,106478,106479,106482],{},"这个例子里 ",[66,106476,106477],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[66,106480,106481],{},"2.0"," 表示把小球放到更高的位置。",[19,106484,102929],{"id":102929},[59,106486,106487],{"className":31614,"code":106371,"language":31616,"meta":64,"style":64},[66,106488,106489],{"__ignoreMap":64},[69,106490,106491,106493,106495,106497,106499,106501,106503],{"class":71,"line":72},[69,106492,33183],{"class":82},[69,106494,106097],{"class":109},[69,106496,106100],{"class":86},[69,106498,2554],{"class":90},[69,106500,106105],{"class":86},[69,106502,96907],{"class":90},[69,106504,4983],{"class":86},[29,106506,106507],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[37,106509,106510,106519,106524],{},[40,106511,106512,106515,106516,106518],{},[66,106513,106514],{},"prefix","：一段文字，比如 ",[66,106517,106223],{},"，用来说明现在打印的是哪个阶段。",[40,106520,106521,106523],{},[66,106522,103306],{},"：MuJoCo 模型。",[40,106525,106526,106528],{},[66,106527,34637],{},"：MuJoCo 当前状态。",[29,106530,106531,1604,106534,106537],{},[66,106532,106533],{},"prefix: str",[66,106535,106536],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[59,106539,106541],{"className":31614,"code":106540,"language":31616,"meta":64,"style":64},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[66,106542,106543],{"__ignoreMap":64},[69,106544,106545,106547,106549,106551,106553,106555],{"class":71,"line":72},[69,106546,31651],{"class":90},[69,106548,1398],{"class":86},[69,106550,106148],{"class":1022},[69,106552,106151],{"class":86},[69,106554,1684],{"class":90},[69,106556,31733],{"class":86},[29,106558,106559,106562],{},[66,106560,106561],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[59,106564,106566],{"className":31614,"code":106565,"language":31616,"meta":64,"style":64},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[66,106567,106568,106580],{"__ignoreMap":64},[69,106569,106570,106572,106574,106576,106578],{"class":71,"line":72},[69,106571,102855],{"class":86},[69,106573,1019],{"class":82},[69,106575,102633],{"class":86},[69,106577,102535],{"class":90},[69,106579,1404],{"class":86},[69,106581,106582,106584,106586],{"class":71,"line":79},[69,106583,102879],{"class":86},[69,106585,1019],{"class":82},[69,106587,102647],{"class":86},[29,106589,106590],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[59,106592,106594],{"className":31614,"code":106593,"language":31616,"meta":64,"style":64},"print_state(\"initial\", model, data)\n",[66,106595,106596],{"__ignoreMap":64},[69,106597,106598,106601,106603],{"class":71,"line":72},[69,106599,106600],{"class":86},"print_state(",[69,106602,106223],{"class":1022},[69,106604,106226],{"class":86},[29,106606,106607,106608,106611],{},"调用刚才定义的 ",[66,106609,106610],{},"print_state"," 函数，打印初始状态。",[59,106613,106614],{"className":31614,"code":106401,"language":31616,"meta":64,"style":64},[66,106615,106616,106632],{"__ignoreMap":64},[69,106617,106618,106620,106622,106624,106626,106628,106630],{"class":71,"line":72},[69,106619,4269],{"class":82},[69,106621,102722],{"class":86},[69,106623,27280],{"class":82},[69,106625,33679],{"class":90},[69,106627,1398],{"class":86},[69,106629,2043],{"class":90},[69,106631,32022],{"class":86},[69,106633,106634],{"class":71,"line":79},[69,106635,102920],{"class":86},[29,106637,106638],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[59,106640,106641],{"className":31614,"code":105747,"language":31616,"meta":64,"style":64},[66,106642,106643],{"__ignoreMap":64},[69,106644,106645],{"class":71,"line":72},[69,106646,105747],{"class":86},[29,106648,106649,106650,106652,106653,106655],{},"重置 ",[66,106651,34637],{},"。注意它不会重新创建 ",[66,106654,103306],{},"，因为模型结构没有变，只是状态回到初始值。",[59,106657,106658],{"className":31614,"code":105913,"language":31616,"meta":64,"style":64},[66,106659,106660],{"__ignoreMap":64},[69,106661,106662,106664,106666,106668,106670],{"class":71,"line":72},[69,106663,105920],{"class":86},[69,106665,1471],{"class":90},[69,106667,5687],{"class":86},[69,106669,1019],{"class":82},[69,106671,105929],{"class":90},[29,106673,106674,106675,1604,106678,1604,106681,106683],{},"这行是“手动改状态”。在 freejoint 中，",[66,106676,106677],{},"qpos[0]",[66,106679,106680],{},"qpos[1]",[66,106682,106477],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[59,106685,106686],{"className":31614,"code":105764,"language":31616,"meta":64,"style":64},[66,106687,106688],{"__ignoreMap":64},[69,106689,106690],{"class":71,"line":72},[69,106691,105764],{"class":86},[29,106693,106694,106695,106697,106698,106700],{},"手动改完 ",[66,106696,105251],{}," 后，调用 ",[66,106699,105471],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106702,103537],{"id":103536},[29,106704,106705],{},"你会看到:",[37,106707,106708,106713,106718,106721],{},[40,106709,106710,106711],{},"初始时间为 ",[66,106712,1583],{},[40,106714,106715,106716],{},"50 步后时间约为 ",[66,106717,36565],{},[40,106719,106720],{},"reset 后状态恢复",[40,106722,106723,106724,106727,106728],{},"手动修改 ",[66,106725,106726],{},"data.qpos[2]"," 后，小球高度变为 ",[66,106729,106481],{},[29,106731,106732,106734],{},[66,106733,106477],{}," 在这个例子中表示自由刚体的 z 坐标。",[29,106736,106737],{},"输出里可以重点看三件事：",[37,106739,106740,106748,106753],{},[40,106741,106742,106744,106745,106747],{},[66,106743,3631],{}," 是否随着 ",[66,106746,102436],{}," 增加。",[40,106749,106750,106752],{},[66,106751,105251],{}," 的 z 坐标是否因为下落而变化。",[40,106754,106755,106757,106758,29621],{},[66,106756,105573],{}," 后时间是否回到 ",[66,106759,1583],{},[14,106761,103569],{"id":103568},[37,106763,106764,106770,106776,106782,106785,106794],{},[40,106765,106766,106767,29621],{},"修改 timestep 为 ",[66,106768,106769],{},"0.005",[40,106771,106772,106773,29621],{},"重新运行，检查 50 步后时间是否约为 ",[66,106774,106775],{},"0.25",[40,106777,106778,106779,29621],{},"修改重力为 ",[66,106780,106781],{},"0 0 -1.0",[40,106783,106784],{},"观察小球下降速度是否变慢。",[40,106786,103632,106787,103635,106790,106793],{},[66,106788,106789],{},"data.qpos[2] = 2.0",[66,106791,106792],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[40,106795,106796,106797,106800],{},"注释掉 ",[66,106798,106799],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106802,103674],{"id":103673},[19,106804,106806,106807,106809],{"id":106805},"修改-dataqpos-后位置没有更新","修改 ",[66,106808,102291],{}," 后位置没有更新",[29,106811,103683],{},[59,106813,106814],{"className":31614,"code":105764,"language":31616,"meta":64,"style":64},[66,106815,106816],{"__ignoreMap":64},[69,106817,106818],{"class":71,"line":72},[69,106819,105764],{"class":86},[19,106821,106822],{"id":106822},"数组维度看不懂",[29,106824,106825],{},"打印模型维度:",[59,106827,106829],{"className":31614,"code":106828,"language":31616,"meta":64,"style":64},"print(model.nq, model.nv, model.nu)\n",[66,106830,106831],{"__ignoreMap":64},[69,106832,106833,106835],{"class":71,"line":72},[69,106834,31651],{"class":90},[69,106836,106837],{"class":86},"(model.nq, model.nv, model.nu)\n",[1530,106839,106840,106848],{},[1533,106841,106842],{},[1536,106843,106844,106846],{},[1539,106845,105795],{"align":1202},[1539,106847,101921],{"align":1202},[1576,106849,106850,106860,106870],{},[1536,106851,106852,106857],{},[1581,106853,106854],{"align":1202},[66,106855,106856],{},"nq",[1581,106858,106859],{"align":1202},"位置变量数量",[1536,106861,106862,106867],{},[1581,106863,106864],{"align":1202},[66,106865,106866],{},"nv",[1581,106868,106869],{"align":1202},"速度变量数量",[1536,106871,106872,106876],{},[1581,106873,106874],{"align":1202},[66,106875,103383],{},[1581,106877,106878],{"align":1202},"控制输入数量",[19,106880,106882,106883,106885],{"id":106881},"误以为-qpos-一定等于关节数","误以为 ",[66,106884,105251],{}," 一定等于关节数",[29,106887,106888,106889,83751,106891,106893,106894,106896],{},"不是。例如 ",[66,106890,102841],{},[66,106892,105251],{}," 是 7 维，但 ",[66,106895,105581],{}," 是 6 维。",[19,106898,106900,106901,106903],{"id":106899},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[66,106902,105251],{}," 的第几位",[29,106905,106906],{},"初学时可以先打印：",[59,106908,106910],{"className":31614,"code":106909,"language":31616,"meta":64,"style":64},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[66,106911,106912,106922,106932,106944],{"__ignoreMap":64},[69,106913,106914,106916,106918,106920],{"class":71,"line":72},[69,106915,31651],{"class":90},[69,106917,1398],{"class":86},[69,106919,102660],{"class":1022},[69,106921,102663],{"class":86},[69,106923,106924,106926,106928,106930],{"class":71,"line":79},[69,106925,31651],{"class":90},[69,106927,1398],{"class":86},[69,106929,102672],{"class":1022},[69,106931,102675],{"class":86},[69,106933,106934,106936,106938,106941],{"class":71,"line":106},[69,106935,31651],{"class":90},[69,106937,1398],{"class":86},[69,106939,106940],{"class":1022},"\"qpos:\"",[69,106942,106943],{"class":86},", data.qpos)\n",[69,106945,106946,106948,106950,106953],{"class":71,"line":116},[69,106947,31651],{"class":90},[69,106949,1398],{"class":86},[69,106951,106952],{"class":1022},"\"qvel:\"",[69,106954,106955],{"class":86},", data.qvel)\n",[29,106957,106958],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[19,106960,106961],{"id":106961},"仿真结果每次都一样",[29,106963,106964,106965,106967],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[66,106966,105251],{},"、目标点或控制输入。",[14,106969,103828],{"id":103827},[29,106971,106972,106973,25855],{},"Python 控制 MuJoCo 的核心就是读写 ",[66,106974,34637],{},[37,106976,106977,106985,106990,106995],{},[40,106978,106979,106980,102239,106982,106984],{},"用 ",[66,106981,102291],{},[66,106983,102294],{}," 读取状态。",[40,106986,106979,106987,106989],{},[66,106988,102297],{}," 写入控制。",[40,106991,106979,106992,106994],{},[66,106993,102436],{}," 推进时间。",[40,106996,106997,106998,107000],{},"手动改状态后用 ",[66,106999,105471],{}," 刷新派生量。",[29,107002,107003],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1297,107005,107006],{},"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":64,"searchDepth":79,"depth":79,"links":107008},[107009,107010,107011,107018,107022,107023,107024,107034],{"id":101867,"depth":79,"text":101868},{"id":101990,"depth":79,"text":101991},{"id":102265,"depth":79,"text":102266,"children":107012},[107013,107015,107017],{"id":105776,"depth":106,"text":107014},"qpos、qvel、ctrl 是什么",{"id":105854,"depth":106,"text":107016},"mj_step 和 mj_forward 的区别",{"id":105943,"depth":106,"text":105944},{"id":102473,"depth":79,"text":102474,"children":107019},[107020,107021],{"id":102793,"depth":106,"text":102793},{"id":102929,"depth":106,"text":102929},{"id":103536,"depth":79,"text":103537},{"id":103568,"depth":79,"text":103569},{"id":103673,"depth":79,"text":103674,"children":107025},[107026,107028,107029,107031,107033],{"id":106805,"depth":106,"text":107027},"修改 data.qpos 后位置没有更新",{"id":106822,"depth":106,"text":106822},{"id":106881,"depth":106,"text":107030},"误以为 qpos 一定等于关节数",{"id":106899,"depth":106,"text":107032},"不知道某个元素在 qpos 的第几位",{"id":106961,"depth":106,"text":106961},{"id":103827,"depth":79,"text":103828},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105539,"description":64},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107041,"title":107042,"body":107043,"description":64,"extension":1323,"meta":108733,"navigation":1325,"path":108734,"seo":108735,"stem":108736,"__hash__":108737},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107044,"toc":108709},[107045,107048,107050,107053,107055,107080,107083,107102,107105,107107,107109,107133,107135,107149,107151,107192,107194,107218,107220,107223,107257,107259,107272,107275,107343,107352,107356,107359,107393,107399,107402,107406,107445,107448,107468,107472,107515,107517,107546,107549,107555,107558,107560,107954,107956,107968,107970,107981,107983,107986,108015,108023,108026,108061,108064,108066,108074,108077,108079,108090,108100,108120,108123,108159,108171,108219,108238,108280,108293,108321,108326,108347,108357,108375,108378,108412,108415,108435,108438,108457,108463,108465,108468,108474,108480,108490,108493,108499,108508,108510,108556,108558,108564,108570,108573,108576,108596,108599,108605,108611,108613,108636,108639,108642,108651,108654,108692,108694,108697,108703,108706],[10,107046,107042],{"id":107047},"_4关节actuator-与力控制",[14,107049,101868],{"id":101867},[29,107051,107052],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[29,107054,105552],{},[37,107056,107057,107063,107068,107072,107077],{},[40,107058,107059,107062],{},[66,107060,107061],{},"hinge"," 关节",[40,107064,107065],{},[66,107066,107067],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[40,107069,107070],{},[66,107071,102297],{},[40,107073,107074],{},[66,107075,107076],{},"ctrlrange",[40,107078,107079],{},"读取关节角和角速度",[29,107081,107082],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[59,107084,107086],{"className":31614,"code":107085,"language":31616,"meta":64,"style":64},"data.ctrl[0] = ...\n",[66,107087,107088],{"__ignoreMap":64},[69,107089,107090,107093,107095,107097,107099],{"class":71,"line":72},[69,107091,107092],{"class":86},"data.ctrl[",[69,107094,1583],{"class":90},[69,107096,5687],{"class":86},[69,107098,1019],{"class":82},[69,107100,107101],{"class":90}," ...\n",[29,107103,107104],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107106,101991],{"id":101990},[29,107108,101994],{},[59,107110,107111],{"className":25059,"code":105609,"language":25061,"meta":64,"style":64},[66,107112,107113],{"__ignoreMap":64},[69,107114,107115,107117,107119,107121,107123,107125,107127,107129,107131],{"class":71,"line":72},[69,107116,25813],{"class":109},[69,107118,27551],{"class":1022},[69,107120,25071],{"class":1022},[69,107122,27636],{"class":90},[69,107124,105624],{"class":1022},[69,107126,102019],{"class":1022},[69,107128,103722],{"class":1022},[69,107130,102035],{"class":1022},[69,107132,105633],{"class":1022},[29,107134,104040],{},[59,107136,107137],{"className":25059,"code":102140,"language":25061,"meta":64,"style":64},[66,107138,107139],{"__ignoreMap":64},[69,107140,107141,107143,107145,107147],{"class":71,"line":72},[69,107142,25068],{"class":109},[69,107144,25071],{"class":1022},[69,107146,102151],{"class":1022},[69,107148,102154],{"class":1022},[29,107150,104057],{},[59,107152,107154],{"className":25059,"code":107153,"language":25061,"meta":64,"style":64},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[66,107155,107156,107173,107182],{"__ignoreMap":64},[69,107157,107158,107160,107162,107164,107167,107169,107171],{"class":71,"line":72},[69,107159,31566],{"class":109},[69,107161,30412],{"class":1022},[69,107163,26352],{"class":90},[69,107165,107166],{"class":1022}," mujoco-control",[69,107168,102196],{"class":1022},[69,107170,102199],{"class":90},[69,107172,102202],{"class":90},[69,107174,107175,107177,107179],{"class":71,"line":79},[69,107176,31566],{"class":109},[69,107178,102209],{"class":1022},[69,107180,107181],{"class":1022}," mujoco-control\n",[69,107183,107184,107186,107188,107190],{"class":71,"line":106},[69,107185,25068],{"class":109},[69,107187,25071],{"class":1022},[69,107189,102151],{"class":1022},[69,107191,102154],{"class":1022},[29,107193,102225],{},[37,107195,107196,107202,107209,107215],{},[40,107197,107198,107201],{},[66,107199,107200],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[40,107203,107204,107206,107207,29621],{},[66,107205,102297],{}," 长度等于 ",[66,107208,103379],{},[40,107210,83443,107211,107214],{},[66,107212,107213],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[40,107216,107217],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107219,102266],{"id":102265},[29,107221,107222],{},"关节决定 body 如何运动:",[59,107224,107226],{"className":54295,"code":107225,"language":54297,"meta":64,"style":64},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[66,107227,107228],{"__ignoreMap":64},[69,107229,107230,107232,107234,107236,107238,107241,107243,107245,107247,107250,107252,107255],{"class":71,"line":72},[69,107231,1011],{"class":86},[69,107233,104177],{"class":348},[69,107235,16160],{"class":109},[69,107237,1019],{"class":86},[69,107239,107240],{"class":1022},"\"hinge\"",[69,107242,55051],{"class":109},[69,107244,1019],{"class":86},[69,107246,107240],{"class":1022},[69,107248,107249],{"class":109}," axis",[69,107251,1019],{"class":86},[69,107253,107254],{"class":1022},"\"0 1 0\"",[69,107256,102365],{"class":86},[29,107258,104273],{},[37,107260,107261,107266,107269],{},[40,107262,107263,107264],{},"名字是 ",[66,107265,107061],{},[40,107267,107268],{},"类型是旋转关节",[40,107270,107271],{},"绕 y 轴旋转",[29,107273,107274],{},"actuator 决定如何施加控制:",[59,107276,107278],{"className":54295,"code":107277,"language":54297,"meta":64,"style":64},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[66,107279,107280,107289,107335],{"__ignoreMap":64},[69,107281,107282,107284,107287],{"class":71,"line":72},[69,107283,1011],{"class":86},[69,107285,107286],{"class":348},"actuator",[69,107288,1026],{"class":86},[69,107290,107291,107293,107296,107298,107300,107303,107306,107308,107310,107313,107315,107317,107320,107322,107325,107328,107330,107333],{"class":71,"line":79},[69,107292,53372],{"class":86},[69,107294,107295],{"class":348},"motor",[69,107297,16160],{"class":109},[69,107299,1019],{"class":86},[69,107301,107302],{"class":1022},"\"hinge_motor\"",[69,107304,107305],{"class":109}," joint",[69,107307,1019],{"class":86},[69,107309,107240],{"class":1022},[69,107311,107312],{"class":109}," gear",[69,107314,1019],{"class":86},[69,107316,4922],{"class":1022},[69,107318,107319],{"class":109}," ctrlrange",[69,107321,1019],{"class":86},[69,107323,107324],{"class":1022},"\"-2 2\"",[69,107326,107327],{"class":109}," ctrllimited",[69,107329,1019],{"class":86},[69,107331,107332],{"class":1022},"\"true\"",[69,107334,102365],{"class":86},[69,107336,107337,107339,107341],{"class":71,"line":106},[69,107338,1036],{"class":86},[69,107340,107286],{"class":348},[69,107342,1026],{"class":86},[29,107344,107345,107348,107349,29621],{},[66,107346,107347],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[66,107350,107351],{},"[-2, 2]",[19,107353,107355],{"id":107354},"joint-和-actuator-的关系","joint 和 actuator 的关系",[29,107357,107358],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1530,107360,107361,107371],{},[1533,107362,107363],{},[1536,107364,107365,107367,107369],{},[1539,107366,26990],{"align":1202},[1539,107368,103917],{"align":1202},[1539,107370,101955],{"align":1202},[1576,107372,107373,107383],{},[1536,107374,107375,107377,107380],{},[1581,107376,104177],{"align":1202},[1581,107378,107379],{"align":1202},"定义能怎么动",[1581,107381,107382],{"align":1202},"门轴允许门旋转",[1536,107384,107385,107387,107390],{},[1581,107386,107286],{"align":1202},[1581,107388,107389],{"align":1202},"定义怎么施力或控制",[1581,107391,107392],{"align":1202},"人推门、马达带动门",[29,107394,107395,107396,107398],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[66,107397,102297],{}," 主动控制它。",[29,107400,107401],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[19,107403,107405],{"id":107404},"hinge-joint","hinge joint",[59,107407,107409],{"className":54295,"code":107408,"language":54297,"meta":64,"style":64},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[66,107410,107411],{"__ignoreMap":64},[69,107412,107413,107415,107417,107419,107421,107423,107425,107427,107429,107431,107433,107435,107438,107440,107443],{"class":71,"line":72},[69,107414,1011],{"class":86},[69,107416,104177],{"class":348},[69,107418,16160],{"class":109},[69,107420,1019],{"class":86},[69,107422,107240],{"class":1022},[69,107424,55051],{"class":109},[69,107426,1019],{"class":86},[69,107428,107240],{"class":1022},[69,107430,107249],{"class":109},[69,107432,1019],{"class":86},[69,107434,107254],{"class":1022},[69,107436,107437],{"class":109}," damping",[69,107439,1019],{"class":86},[69,107441,107442],{"class":1022},"\"0.1\"",[69,107444,102365],{"class":86},[29,107446,107447],{},"含义：",[37,107449,107450,107456,107462],{},[40,107451,107452,107455],{},[66,107453,107454],{},"type=\"hinge\"","：只能绕一个轴旋转。",[40,107457,107458,107461],{},[66,107459,107460],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[40,107463,107464,107467],{},[66,107465,107466],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[19,107469,107471],{"id":107470},"motor-actuator","motor actuator",[59,107473,107475],{"className":54295,"code":107474,"language":54297,"meta":64,"style":64},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[66,107476,107477],{"__ignoreMap":64},[69,107478,107479,107481,107483,107485,107487,107489,107491,107493,107495,107497,107499,107501,107503,107505,107507,107509,107511,107513],{"class":71,"line":72},[69,107480,1011],{"class":86},[69,107482,107295],{"class":348},[69,107484,16160],{"class":109},[69,107486,1019],{"class":86},[69,107488,107302],{"class":1022},[69,107490,107305],{"class":109},[69,107492,1019],{"class":86},[69,107494,107240],{"class":1022},[69,107496,107312],{"class":109},[69,107498,1019],{"class":86},[69,107500,4922],{"class":1022},[69,107502,107319],{"class":109},[69,107504,1019],{"class":86},[69,107506,107324],{"class":1022},[69,107508,107327],{"class":109},[69,107510,1019],{"class":86},[69,107512,107332],{"class":1022},[69,107514,102365],{"class":86},[29,107516,107447],{},[37,107518,107519,107528,107534,107540],{},[40,107520,107521,107524,107525,107527],{},[66,107522,107523],{},"joint=\"hinge\"","：这个电机作用在名为 ",[66,107526,107061],{}," 的关节上。",[40,107529,107530,107533],{},[66,107531,107532],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[40,107535,107536,107539],{},[66,107537,107538],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[40,107541,107542,107545],{},[66,107543,107544],{},"ctrllimited=\"true\"","：启用控制范围限制。",[29,107547,107548],{},"简单理解：",[59,107550,107553],{"className":107551,"code":107552,"language":540,"meta":64},[538],"实际施加效果 ≈ data.ctrl[0] * gear\n",[66,107554,107552],{"__ignoreMap":64},[29,107556,107557],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107559,102474],{"id":102473},[59,107561,107563],{"className":31614,"code":107562,"language":31616,"meta":64,"style":64},"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",[66,107564,107565,107572,107576,107582,107592,107596,107600,107608,107613,107618,107622,107626,107631,107636,107640,107645,107650,107655,107660,107664,107668,107672,107677,107682,107687,107691,107695,107699,107703,107715,107727,107735,107739,107749,107759,107769,107773,107786,107799,107803,107820,107834,107869,107873,107877,107888,107903,107918,107930,107934,107938,107950],{"__ignoreMap":64},[69,107566,107567,107569],{"class":71,"line":72},[69,107568,31628],{"class":82},[69,107570,107571],{"class":86}," math\n",[69,107573,107574],{"class":71,"line":79},[69,107575,3644],{"emptyLinePlaceholder":1325},[69,107577,107578,107580],{"class":71,"line":106},[69,107579,31628],{"class":82},[69,107581,102522],{"class":86},[69,107583,107584,107586,107588,107590],{"class":71,"line":116},[69,107585,31628],{"class":82},[69,107587,32616],{"class":86},[69,107589,32619],{"class":82},[69,107591,32622],{"class":86},[69,107593,107594],{"class":71,"line":133},[69,107595,3644],{"emptyLinePlaceholder":1325},[69,107597,107598],{"class":71,"line":139},[69,107599,3644],{"emptyLinePlaceholder":1325},[69,107601,107602,107604,107606],{"class":71,"line":401},[69,107603,102535],{"class":90},[69,107605,14805],{"class":82},[69,107607,102540],{"class":1022},[69,107609,107610],{"class":71,"line":470},[69,107611,107612],{"class":1022},"\u003Cmujoco model=\"one_link_motor\">\n",[69,107614,107615],{"class":71,"line":475},[69,107616,107617],{"class":1022},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[69,107619,107620],{"class":71,"line":482},[69,107621,3644],{"emptyLinePlaceholder":1325},[69,107623,107624],{"class":71,"line":497},[69,107625,102559],{"class":1022},[69,107627,107628],{"class":71,"line":502},[69,107629,107630],{"class":1022},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[69,107632,107633],{"class":71,"line":509},[69,107634,107635],{"class":1022},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[69,107637,107638],{"class":71,"line":524},[69,107639,3644],{"emptyLinePlaceholder":1325},[69,107641,107642],{"class":71,"line":2888},[69,107643,107644],{"class":1022},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[69,107646,107647],{"class":71,"line":2893},[69,107648,107649],{"class":1022},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[69,107651,107652],{"class":71,"line":2899},[69,107653,107654],{"class":1022},"        \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",[69,107656,107657],{"class":71,"line":2919},[69,107658,107659],{"class":1022},"      \u003C\u002Fbody>\n",[69,107661,107662],{"class":71,"line":2924},[69,107663,102588],{"class":1022},[69,107665,107666],{"class":71,"line":2938},[69,107667,102593],{"class":1022},[69,107669,107670],{"class":71,"line":2943},[69,107671,3644],{"emptyLinePlaceholder":1325},[69,107673,107674],{"class":71,"line":2972},[69,107675,107676],{"class":1022},"  \u003Cactuator>\n",[69,107678,107679],{"class":71,"line":2977},[69,107680,107681],{"class":1022},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[69,107683,107684],{"class":71,"line":2994},[69,107685,107686],{"class":1022},"  \u003C\u002Factuator>\n",[69,107688,107689],{"class":71,"line":2999},[69,107690,102598],{"class":1022},[69,107692,107693],{"class":71,"line":3004},[69,107694,96919],{"class":1022},[69,107696,107697],{"class":71,"line":3009},[69,107698,3644],{"emptyLinePlaceholder":1325},[69,107700,107701],{"class":71,"line":3023},[69,107702,3644],{"emptyLinePlaceholder":1325},[69,107704,107705,107707,107709,107711,107713],{"class":71,"line":3028},[69,107706,33183],{"class":82},[69,107708,3217],{"class":109},[69,107710,102619],{"class":86},[69,107712,96907],{"class":90},[69,107714,4983],{"class":86},[69,107716,107717,107719,107721,107723,107725],{"class":71,"line":3821},[69,107718,102628],{"class":86},[69,107720,1019],{"class":82},[69,107722,102633],{"class":86},[69,107724,102535],{"class":90},[69,107726,1404],{"class":86},[69,107728,107729,107731,107733],{"class":71,"line":3835},[69,107730,102642],{"class":86},[69,107732,1019],{"class":82},[69,107734,102647],{"class":86},[69,107736,107737],{"class":71,"line":3843},[69,107738,3644],{"emptyLinePlaceholder":1325},[69,107740,107741,107743,107745,107747],{"class":71,"line":3848},[69,107742,32535],{"class":90},[69,107744,1398],{"class":86},[69,107746,102660],{"class":1022},[69,107748,102663],{"class":86},[69,107750,107751,107753,107755,107757],{"class":71,"line":3854},[69,107752,32535],{"class":90},[69,107754,1398],{"class":86},[69,107756,102672],{"class":1022},[69,107758,102675],{"class":86},[69,107760,107761,107763,107765,107767],{"class":71,"line":3860},[69,107762,32535],{"class":90},[69,107764,1398],{"class":86},[69,107766,102684],{"class":1022},[69,107768,102687],{"class":86},[69,107770,107771],{"class":71,"line":3865},[69,107772,3644],{"emptyLinePlaceholder":1325},[69,107774,107775,107777,107780,107782,107784],{"class":71,"line":9190},[69,107776,4345],{"class":82},[69,107778,107779],{"class":86}," model.nu ",[69,107781,22187],{"class":82},[69,107783,26355],{"class":90},[69,107785,4983],{"class":86},[69,107787,107788,107790,107792,107794,107797],{"class":71,"line":9214},[69,107789,104653],{"class":82},[69,107791,104656],{"class":90},[69,107793,1398],{"class":86},[69,107795,107796],{"class":1022},"\"expected exactly one actuator\"",[69,107798,1404],{"class":86},[69,107800,107801],{"class":71,"line":9219},[69,107802,3644],{"emptyLinePlaceholder":1325},[69,107804,107805,107807,107809,107811,107813,107815,107818],{"class":71,"line":9225},[69,107806,4445],{"class":82},[69,107808,32852],{"class":86},[69,107810,27280],{"class":82},[69,107812,33679],{"class":90},[69,107814,1398],{"class":86},[69,107816,107817],{"class":90},"2000",[69,107819,32022],{"class":86},[69,107821,107822,107825,107827,107829,107831],{"class":71,"line":9252},[69,107823,107824],{"class":86},"        t ",[69,107826,1019],{"class":82},[69,107828,32852],{"class":86},[69,107830,1843],{"class":82},[69,107832,107833],{"class":86}," model.opt.timestep\n",[69,107835,107836,107839,107841,107843,107845,107848,107850,107853,107855,107857,107860,107862,107864,107866],{"class":71,"line":9257},[69,107837,107838],{"class":86},"        data.ctrl[",[69,107840,1583],{"class":90},[69,107842,5687],{"class":86},[69,107844,1019],{"class":82},[69,107846,107847],{"class":90}," 1.5",[69,107849,7760],{"class":82},[69,107851,107852],{"class":86}," math.sin(",[69,107854,106481],{"class":90},[69,107856,7760],{"class":82},[69,107858,107859],{"class":86}," math.pi ",[69,107861,1843],{"class":82},[69,107863,63093],{"class":90},[69,107865,7760],{"class":82},[69,107867,107868],{"class":86}," t)\n",[69,107870,107871],{"class":71,"line":9263},[69,107872,102737],{"class":86},[69,107874,107875],{"class":71,"line":9275},[69,107876,3644],{"emptyLinePlaceholder":1325},[69,107878,107879,107881,107883,107886],{"class":71,"line":9287},[69,107880,32535],{"class":90},[69,107882,1398],{"class":86},[69,107884,107885],{"class":1022},"\"time:\"",[69,107887,102699],{"class":86},[69,107889,107890,107892,107894,107897,107899,107901],{"class":71,"line":9299},[69,107891,32535],{"class":90},[69,107893,1398],{"class":86},[69,107895,107896],{"class":1022},"\"joint qpos:\"",[69,107898,106151],{"class":86},[69,107900,1684],{"class":90},[69,107902,31733],{"class":86},[69,107904,107905,107907,107909,107912,107914,107916],{"class":71,"line":10958},[69,107906,32535],{"class":90},[69,107908,1398],{"class":86},[69,107910,107911],{"class":1022},"\"joint qvel:\"",[69,107913,106167],{"class":86},[69,107915,1684],{"class":90},[69,107917,31733],{"class":86},[69,107919,107920,107922,107924,107927],{"class":71,"line":10983},[69,107921,32535],{"class":90},[69,107923,1398],{"class":86},[69,107925,107926],{"class":1022},"\"last ctrl:\"",[69,107928,107929],{"class":86},", data.ctrl.copy())\n",[69,107931,107932],{"class":71,"line":11006},[69,107933,3644],{"emptyLinePlaceholder":1325},[69,107935,107936],{"class":71,"line":11030},[69,107937,3644],{"emptyLinePlaceholder":1325},[69,107939,107940,107942,107944,107946,107948],{"class":71,"line":11035},[69,107941,2782],{"class":82},[69,107943,32456],{"class":90},[69,107945,102780],{"class":82},[69,107947,102783],{"class":1022},[69,107949,4983],{"class":86},[69,107951,107952],{"class":71,"line":11040},[69,107953,102790],{"class":86},[29,107955,104791],{},[59,107957,107959],{"className":25059,"code":107958,"language":25061,"meta":64,"style":64},"touch ch4_joint_motor.py\n",[66,107960,107961],{"__ignoreMap":64},[69,107962,107963,107965],{"class":71,"line":72},[69,107964,102504],{"class":109},[69,107966,107967],{"class":1022}," ch4_joint_motor.py\n",[29,107969,103522],{},[59,107971,107973],{"className":25059,"code":107972,"language":25061,"meta":64,"style":64},"python ch4_joint_motor.py\n",[66,107974,107975],{"__ignoreMap":64},[69,107976,107977,107979],{"class":71,"line":72},[69,107978,31616],{"class":109},[69,107980,107967],{"class":1022},[19,107982,102793],{"id":102793},[29,107984,107985],{},"检查 actuator 数量：",[59,107987,107989],{"className":31614,"code":107988,"language":31616,"meta":64,"style":64},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[66,107990,107991,108003],{"__ignoreMap":64},[69,107992,107993,107995,107997,107999,108001],{"class":71,"line":72},[69,107994,2782],{"class":82},[69,107996,107779],{"class":86},[69,107998,22187],{"class":82},[69,108000,26355],{"class":90},[69,108002,4983],{"class":86},[69,108004,108005,108007,108009,108011,108013],{"class":71,"line":79},[69,108006,105116],{"class":82},[69,108008,104656],{"class":90},[69,108010,1398],{"class":86},[69,108012,107796],{"class":1022},[69,108014,1404],{"class":86},[29,108016,108017,108019,108020,108022],{},[66,108018,103379],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[66,108021,102297],{}," 长度应该是 1。",[29,108024,108025],{},"产生正弦控制信号：",[59,108027,108029],{"className":31614,"code":108028,"language":31616,"meta":64,"style":64},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[66,108030,108031],{"__ignoreMap":64},[69,108032,108033,108035,108037,108039,108041,108043,108045,108047,108049,108051,108053,108055,108057,108059],{"class":71,"line":72},[69,108034,107092],{"class":86},[69,108036,1583],{"class":90},[69,108038,5687],{"class":86},[69,108040,1019],{"class":82},[69,108042,107847],{"class":90},[69,108044,7760],{"class":82},[69,108046,107852],{"class":86},[69,108048,106481],{"class":90},[69,108050,7760],{"class":82},[69,108052,107859],{"class":86},[69,108054,1843],{"class":82},[69,108056,63093],{"class":90},[69,108058,7760],{"class":82},[69,108060,107868],{"class":86},[29,108062,108063],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[29,108065,102894],{},[59,108067,108068],{"className":31614,"code":105726,"language":31616,"meta":64,"style":64},[66,108069,108070],{"__ignoreMap":64},[69,108071,108072],{"class":71,"line":72},[69,108073,105726],{"class":86},[29,108075,108076],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[19,108078,102929],{"id":102929},[59,108080,108082],{"className":31614,"code":108081,"language":31616,"meta":64,"style":64},"import math\n",[66,108083,108084],{"__ignoreMap":64},[69,108085,108086,108088],{"class":71,"line":72},[69,108087,31628],{"class":82},[69,108089,107571],{"class":86},[29,108091,108092,108093,102239,108096,108099],{},"导入 Python 标准库里的数学模块。后面要用 ",[66,108094,108095],{},"math.sin",[66,108097,108098],{},"math.pi"," 生成周期变化的控制信号。",[59,108101,108102],{"className":31614,"code":104907,"language":31616,"meta":64,"style":64},[66,108103,108104,108110],{"__ignoreMap":64},[69,108105,108106,108108],{"class":71,"line":72},[69,108107,31628],{"class":82},[69,108109,102522],{"class":86},[69,108111,108112,108114,108116,108118],{"class":71,"line":79},[69,108113,31628],{"class":82},[69,108115,32616],{"class":86},[69,108117,32619],{"class":82},[69,108119,32622],{"class":86},[29,108121,108122],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[59,108124,108125],{"className":54295,"code":107408,"language":54297,"meta":64,"style":64},[66,108126,108127],{"__ignoreMap":64},[69,108128,108129,108131,108133,108135,108137,108139,108141,108143,108145,108147,108149,108151,108153,108155,108157],{"class":71,"line":72},[69,108130,1011],{"class":86},[69,108132,104177],{"class":348},[69,108134,16160],{"class":109},[69,108136,1019],{"class":86},[69,108138,107240],{"class":1022},[69,108140,55051],{"class":109},[69,108142,1019],{"class":86},[69,108144,107240],{"class":1022},[69,108146,107249],{"class":109},[69,108148,1019],{"class":86},[69,108150,107254],{"class":1022},[69,108152,107437],{"class":109},[69,108154,1019],{"class":86},[69,108156,107442],{"class":1022},[69,108158,102365],{"class":86},[29,108160,108161,108162,108164,108165,108167,108168,108170],{},"这行定义关节。",[66,108163,107061],{}," 表示旋转关节。",[66,108166,107460],{}," 表示绕 y 轴旋转。",[66,108169,107466],{}," 表示有一点阻尼，运动不会完全无损耗。",[59,108172,108174],{"className":54295,"code":108173,"language":54297,"meta":64,"style":64},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[66,108175,108176],{"__ignoreMap":64},[69,108177,108178,108180,108182,108184,108186,108189,108191,108193,108196,108199,108201,108204,108206,108208,108210,108212,108214,108217],{"class":71,"line":72},[69,108179,1011],{"class":86},[69,108181,102341],{"class":348},[69,108183,16160],{"class":109},[69,108185,1019],{"class":86},[69,108187,108188],{"class":1022},"\"link_geom\"",[69,108190,55051],{"class":109},[69,108192,1019],{"class":86},[69,108194,108195],{"class":1022},"\"capsule\"",[69,108197,108198],{"class":109}," fromto",[69,108200,1019],{"class":86},[69,108202,108203],{"class":1022},"\"0 0 0 0 0 0.5\"",[69,108205,102357],{"class":109},[69,108207,1019],{"class":86},[69,108209,104999],{"class":1022},[69,108211,103222],{"class":109},[69,108213,1019],{"class":86},[69,108215,108216],{"class":1022},"\"0.5\"",[69,108218,102365],{"class":86},[29,108220,108221,108222,108224,108225,108227,108228,108231,108232,29621,108235,108237],{},"这行定义摆杆的形状。",[66,108223,104386],{}," 是胶囊体，适合表示杆子。",[66,108226,104397],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[66,108229,108230],{},"(0,0,0)"," 延伸到 ",[66,108233,108234],{},"(0,0,0.5)",[66,108236,104391],{}," 是半径。",[59,108239,108240],{"className":54295,"code":107474,"language":54297,"meta":64,"style":64},[66,108241,108242],{"__ignoreMap":64},[69,108243,108244,108246,108248,108250,108252,108254,108256,108258,108260,108262,108264,108266,108268,108270,108272,108274,108276,108278],{"class":71,"line":72},[69,108245,1011],{"class":86},[69,108247,107295],{"class":348},[69,108249,16160],{"class":109},[69,108251,1019],{"class":86},[69,108253,107302],{"class":1022},[69,108255,107305],{"class":109},[69,108257,1019],{"class":86},[69,108259,107240],{"class":1022},[69,108261,107312],{"class":109},[69,108263,1019],{"class":86},[69,108265,4922],{"class":1022},[69,108267,107319],{"class":109},[69,108269,1019],{"class":86},[69,108271,107324],{"class":1022},[69,108273,107327],{"class":109},[69,108275,1019],{"class":86},[69,108277,107332],{"class":1022},[69,108279,102365],{"class":86},[29,108281,108282,108283,108285,108286,108289,108290,108292],{},"这行定义电机。它作用在 ",[66,108284,107061],{}," 关节上。",[66,108287,108288],{},"gear"," 可以理解成放大倍数。",[66,108291,107076],{}," 限制控制输入范围。",[59,108294,108295],{"className":31614,"code":107988,"language":31616,"meta":64,"style":64},[66,108296,108297,108309],{"__ignoreMap":64},[69,108298,108299,108301,108303,108305,108307],{"class":71,"line":72},[69,108300,2782],{"class":82},[69,108302,107779],{"class":86},[69,108304,22187],{"class":82},[69,108306,26355],{"class":90},[69,108308,4983],{"class":86},[69,108310,108311,108313,108315,108317,108319],{"class":71,"line":79},[69,108312,105116],{"class":82},[69,108314,104656],{"class":90},[69,108316,1398],{"class":86},[69,108318,107796],{"class":1022},[69,108320,1404],{"class":86},[29,108322,108323,108325],{},[66,108324,103379],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[59,108327,108329],{"className":31614,"code":108328,"language":31616,"meta":64,"style":64},"for step in range(2000):\n",[66,108330,108331],{"__ignoreMap":64},[69,108332,108333,108335,108337,108339,108341,108343,108345],{"class":71,"line":72},[69,108334,4269],{"class":82},[69,108336,32852],{"class":86},[69,108338,27280],{"class":82},[69,108340,33679],{"class":90},[69,108342,1398],{"class":86},[69,108344,107817],{"class":90},[69,108346,32022],{"class":86},[29,108348,108349,108350,108352,108353,108356],{},"循环 2000 步。这里没有用 ",[66,108351,2378],{},"，而是用 ",[66,108354,108355],{},"step","，因为后面要用当前步数计算时间。",[59,108358,108360],{"className":31614,"code":108359,"language":31616,"meta":64,"style":64},"t = step * model.opt.timestep\n",[66,108361,108362],{"__ignoreMap":64},[69,108363,108364,108367,108369,108371,108373],{"class":71,"line":72},[69,108365,108366],{"class":86},"t ",[69,108368,1019],{"class":82},[69,108370,32852],{"class":86},[69,108372,1843],{"class":82},[69,108374,107833],{"class":86},[29,108376,108377],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[59,108379,108380],{"className":31614,"code":108028,"language":31616,"meta":64,"style":64},[66,108381,108382],{"__ignoreMap":64},[69,108383,108384,108386,108388,108390,108392,108394,108396,108398,108400,108402,108404,108406,108408,108410],{"class":71,"line":72},[69,108385,107092],{"class":86},[69,108387,1583],{"class":90},[69,108389,5687],{"class":86},[69,108391,1019],{"class":82},[69,108393,107847],{"class":90},[69,108395,7760],{"class":82},[69,108397,107852],{"class":86},[69,108399,106481],{"class":90},[69,108401,7760],{"class":82},[69,108403,107859],{"class":86},[69,108405,1843],{"class":82},[69,108407,63093],{"class":90},[69,108409,7760],{"class":82},[69,108411,107868],{"class":86},[29,108413,108414],{},"这行给电机输入一个正弦波。拆开看：",[37,108416,108417,108423,108429],{},[40,108418,108419,108422],{},[66,108420,108421],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[40,108424,108425,108428],{},[66,108426,108427],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[40,108430,108431,108434],{},[66,108432,108433],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[29,108436,108437],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[59,108439,108441],{"className":31614,"code":108440,"language":31616,"meta":64,"style":64},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[66,108442,108443],{"__ignoreMap":64},[69,108444,108445,108447,108449,108451,108453,108455],{"class":71,"line":72},[69,108446,31651],{"class":90},[69,108448,1398],{"class":86},[69,108450,107896],{"class":1022},[69,108452,106151],{"class":86},[69,108454,1684],{"class":90},[69,108456,31733],{"class":86},[29,108458,108459,108460,108462],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[66,108461,102291],{}," 只有一个数。",[14,108464,103537],{"id":103536},[29,108466,108467],{},"输出类似:",[59,108469,108472],{"className":108470,"code":108471,"language":540,"meta":64},[538],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[66,108473,108471],{"__ignoreMap":64},[29,108475,108476,108477,108479],{},"这里 ",[66,108478,107347],{}," 是电机输入。",[29,108481,108482,108485,108486,108489],{},[66,108483,108484],{},"joint qpos"," 是关节角度，单位通常是弧度。",[66,108487,108488],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[29,108491,108492],{},"角度单位提示：",[59,108494,108497],{"className":108495,"code":108496,"language":540,"meta":64},[538],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[66,108498,108496],{"__ignoreMap":64},[29,108500,108501,108502,108504,108505,108507],{},"如果你看到 ",[66,108503,105251],{}," 是 ",[66,108506,36565],{},"，大约就是 28.6 度。",[14,108509,103569],{"id":103568},[37,108511,108512,108519,108522,108529,108532,108540,108548],{},[40,108513,103632,108514,103635,108516,29621],{},[66,108515,107532],{},[66,108517,108518],{},"gear=\"5\"",[40,108520,108521],{},"重新运行，观察关节运动是否更剧烈。",[40,108523,103632,108524,103635,108526,29621],{},[66,108525,107076],{},[66,108527,108528],{},"-0.2 0.2",[40,108530,108531],{},"重新运行，观察控制能力是否变弱。",[40,108533,108534,108535,108537,108538,29621],{},"去掉 actuator，确认 ",[66,108536,103379],{}," 变成 ",[66,108539,1583],{},[40,108541,103632,108542,103635,108544,108547],{},[66,108543,107466],{},[66,108545,108546],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[40,108549,103632,108550,103635,108552,108555],{},[66,108551,107460],{},[66,108553,108554],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108557,103674],{"id":103673},[19,108559,108561],{"id":108560},"indexerror-index-0-is-out-of-bounds",[66,108562,108563],{},"IndexError: index 0 is out of bounds",[29,108565,108566,108567,108569],{},"原因是 ",[66,108568,107213],{},"，没有 actuator。",[19,108571,108572],{"id":108572},"关节几乎不动",[29,108574,108575],{},"可能原因:",[37,108577,108578,108583,108587,108593],{},[40,108579,108580,108582],{},[66,108581,108288],{}," 太小",[40,108584,108585,108582],{},[66,108586,107076],{},[40,108588,108589,108592],{},[66,108590,108591],{},"damping"," 太大",[40,108594,108595],{},"重力方向导致运动不明显",[19,108597,108598],{"id":108598},"模型编译失败",[29,108600,108601,108602,108604],{},"检查 actuator 引用的 ",[66,108603,107523],{}," 是否存在，joint 名称是否拼写一致。",[19,108606,108608,108610],{"id":108607},"datactrl0-写了但没有效果",[66,108609,107347],{}," 写了但没有效果",[29,108612,103796],{},[37,108614,108615,108620,108623,108628,108633],{},[40,108616,108617,108619],{},[66,108618,103379],{}," 是否大于 0。",[40,108621,108622],{},"motor 是否引用了正确 joint。",[40,108624,108625,108627],{},[66,108626,108288],{}," 是否太小。",[40,108629,108630,108632],{},[66,108631,107076],{}," 是否把输入限制得太小。",[40,108634,108635],{},"body 是否真的有可动 joint。",[19,108637,108638],{"id":108638},"控制输入超过范围会怎样",[29,108640,108641],{},"如果设置了：",[59,108643,108645],{"className":54295,"code":108644,"language":54297,"meta":64,"style":64},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[66,108646,108647],{"__ignoreMap":64},[69,108648,108649],{"class":71,"line":72},[69,108650,108644],{"class":86},[29,108652,108653],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[59,108655,108657],{"className":31614,"code":108656,"language":31616,"meta":64,"style":64},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[66,108658,108659,108679],{"__ignoreMap":64},[69,108660,108661,108664,108666,108669,108671,108673,108675,108677],{"class":71,"line":72},[69,108662,108663],{"class":86},"action ",[69,108665,1019],{"class":82},[69,108667,108668],{"class":86}," np.clip(action, ",[69,108670,1920],{"class":82},[69,108672,106481],{"class":90},[69,108674,13677],{"class":86},[69,108676,106481],{"class":90},[69,108678,1404],{"class":86},[69,108680,108681,108683,108685,108687,108689],{"class":71,"line":79},[69,108682,107092],{"class":86},[69,108684,1583],{"class":90},[69,108686,5687],{"class":86},[69,108688,1019],{"class":82},[69,108690,108691],{"class":86}," action\n",[14,108693,103828],{"id":103827},[29,108695,108696],{},"这一章建立了控制任务的基本形式：",[59,108698,108701],{"className":108699,"code":108700,"language":540,"meta":64},[538],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[66,108702,108700],{"__ignoreMap":64},[29,108704,108705],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1297,108707,108708],{},"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":64,"searchDepth":79,"depth":79,"links":108710},[108711,108712,108713,108718,108722,108723,108724,108732],{"id":101867,"depth":79,"text":101868},{"id":101990,"depth":79,"text":101991},{"id":102265,"depth":79,"text":102266,"children":108714},[108715,108716,108717],{"id":107354,"depth":106,"text":107355},{"id":107404,"depth":106,"text":107405},{"id":107470,"depth":106,"text":107471},{"id":102473,"depth":79,"text":102474,"children":108719},[108720,108721],{"id":102793,"depth":106,"text":102793},{"id":102929,"depth":106,"text":102929},{"id":103536,"depth":79,"text":103537},{"id":103568,"depth":79,"text":103569},{"id":103673,"depth":79,"text":103674,"children":108725},[108726,108727,108728,108729,108731],{"id":108560,"depth":106,"text":108563},{"id":108572,"depth":106,"text":108572},{"id":108598,"depth":106,"text":108598},{"id":108607,"depth":106,"text":108730},"data.ctrl[0] 写了但没有效果",{"id":108638,"depth":106,"text":108638},{"id":103827,"depth":79,"text":103828},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107042,"description":64},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108739,"title":108740,"body":108741,"description":64,"extension":1323,"meta":110650,"navigation":1325,"path":110651,"seo":110652,"stem":110653,"__hash__":110654},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108742,"toc":110626},[108743,108746,108748,108751,108759,108762,108779,108782,108807,108810,108856,108858,108860,108915,108917,108936,108938,108981,108984,109001,109004,109020,109030,109037,109039,109042,109045,109079,109082,109130,109134,109137,109151,109160,109164,109167,109192,109195,109199,109212,109215,109221,109224,109239,109241,109244,109504,109506,109518,109521,109833,109835,109847,109849,109852,109867,109872,109875,109897,109900,109903,109937,109940,109944,109955,109958,109975,109978,109992,109999,110019,110026,110040,110043,110055,110070,110090,110093,110115,110118,110122,110137,110148,110163,110166,110196,110212,110241,110249,110273,110276,110294,110304,110316,110323,110332,110338,110347,110350,110352,110361,110364,110379,110381,110384,110395,110398,110409,110412,110430,110432,110449,110452,110480,110482,110486,110489,110519,110525,110528,110532,110540,110543,110545,110566,110569,110572,110588,110591,110607,110609,110612,110623],[10,108744,108740],{"id":108745},"_5viewer-可视化与-renderer-离屏渲染",[14,108747,101868],{"id":101867},[29,108749,108750],{},"本章掌握两类可视化方式:",[37,108752,108753,108756],{},[40,108754,108755],{},"交互式 viewer: 适合人工观察仿真",[40,108757,108758],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[29,108760,108761],{},"使用官方接口:",[59,108763,108765],{"className":31614,"code":108764,"language":31616,"meta":64,"style":64},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[66,108766,108767,108774],{"__ignoreMap":64},[69,108768,108769,108771],{"class":71,"line":72},[69,108770,31628],{"class":82},[69,108772,108773],{"class":86}," mujoco.viewer\n",[69,108775,108776],{"class":71,"line":79},[69,108777,108778],{"class":86},"mujoco.viewer.launch_passive(model, data)\n",[29,108780,108781],{},"以及:",[59,108783,108785],{"className":31614,"code":108784,"language":31616,"meta":64,"style":64},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[66,108786,108787,108797],{"__ignoreMap":64},[69,108788,108789,108792,108794],{"class":71,"line":72},[69,108790,108791],{"class":86},"renderer ",[69,108793,1019],{"class":82},[69,108795,108796],{"class":86}," mujoco.Renderer(model)\n",[69,108798,108799,108802,108804],{"class":71,"line":79},[69,108800,108801],{"class":86},"image ",[69,108803,1019],{"class":82},[69,108805,108806],{"class":86}," renderer.render()\n",[29,108808,108809],{},"新手建议先理解二者区别：",[1530,108811,108812,108828],{},[1533,108813,108814],{},[1536,108815,108816,108819,108822,108825],{},[1539,108817,108818],{"align":1202},"工具",[1539,108820,108821],{"align":1202},"用途",[1539,108823,108824],{"align":1202},"是否打开窗口",[1539,108826,108827],{"align":1202},"常见场景",[1576,108829,108830,108843],{},[1536,108831,108832,108835,108838,108840],{},[1581,108833,108834],{"align":1202},"Viewer",[1581,108836,108837],{"align":1202},"人眼实时观察仿真",[1581,108839,105886],{"align":1202},[1581,108841,108842],{"align":1202},"调试模型、看控制效果",[1536,108844,108845,108848,108851,108853],{},[1581,108846,108847],{"align":1202},"Renderer",[1581,108849,108850],{"align":1202},"生成图像数组",[1581,108852,105899],{"align":1202},[1581,108854,108855],{"align":1202},"保存图片、训练视觉策略、服务器批量采集",[14,108857,101991],{"id":101990},[29,108859,101994],{},[59,108861,108863],{"className":25059,"code":108862,"language":25061,"meta":64,"style":64},"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",[66,108864,108865,108877,108887,108895,108903],{"__ignoreMap":64},[69,108866,108867,108869,108871,108873,108875],{"class":71,"line":72},[69,108868,25813],{"class":109},[69,108870,27551],{"class":1022},[69,108872,25071],{"class":1022},[69,108874,27636],{"class":90},[69,108876,25915],{"class":90},[69,108878,108879,108881,108883,108885],{"class":71,"line":79},[69,108880,102029],{"class":1022},[69,108882,102032],{"class":1022},[69,108884,102035],{"class":1022},[69,108886,25915],{"class":90},[69,108888,108889,108891,108893],{"class":71,"line":106},[69,108890,102042],{"class":1022},[69,108892,102045],{"class":1022},[69,108894,25915],{"class":90},[69,108896,108897,108899,108901],{"class":71,"line":116},[69,108898,102052],{"class":1022},[69,108900,102055],{"class":1022},[69,108902,25915],{"class":90},[69,108904,108905,108907,108909,108911,108913],{"class":71,"line":133},[69,108906,102062],{"class":1022},[69,108908,102065],{"class":1022},[69,108910,102068],{"class":1022},[69,108912,102071],{"class":1022},[69,108914,103737],{"class":1022},[29,108916,104040],{},[59,108918,108920],{"className":25059,"code":108919,"language":25061,"meta":64,"style":64},"pip install \"mujoco>=2.3\" numpy pillow\n",[66,108921,108922],{"__ignoreMap":64},[69,108923,108924,108926,108928,108930,108933],{"class":71,"line":72},[69,108925,25068],{"class":109},[69,108927,25071],{"class":1022},[69,108929,102151],{"class":1022},[69,108931,108932],{"class":1022}," numpy",[69,108934,108935],{"class":1022}," pillow\n",[29,108937,104057],{},[59,108939,108941],{"className":25059,"code":108940,"language":25061,"meta":64,"style":64},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[66,108942,108943,108960,108969],{"__ignoreMap":64},[69,108944,108945,108947,108949,108951,108954,108956,108958],{"class":71,"line":72},[69,108946,31566],{"class":109},[69,108948,30412],{"class":1022},[69,108950,26352],{"class":90},[69,108952,108953],{"class":1022}," mujoco-render",[69,108955,102196],{"class":1022},[69,108957,102199],{"class":90},[69,108959,102202],{"class":90},[69,108961,108962,108964,108966],{"class":71,"line":79},[69,108963,31566],{"class":109},[69,108965,102209],{"class":1022},[69,108967,108968],{"class":1022}," mujoco-render\n",[69,108970,108971,108973,108975,108977,108979],{"class":71,"line":106},[69,108972,25068],{"class":109},[69,108974,25071],{"class":1022},[69,108976,102151],{"class":1022},[69,108978,108932],{"class":1022},[69,108980,108935],{"class":1022},[29,108982,108983],{},"离屏渲染后端:",[59,108985,108987],{"className":25059,"code":108986,"language":25061,"meta":64,"style":64},"export MUJOCO_GL=egl\n",[66,108988,108989],{"__ignoreMap":64},[69,108990,108991,108993,108996,108998],{"class":71,"line":72},[69,108992,26279],{"class":82},[69,108994,108995],{"class":86}," MUJOCO_GL",[69,108997,1019],{"class":82},[69,108999,109000],{"class":86},"egl\n",[29,109002,109003],{},"或:",[59,109005,109007],{"className":25059,"code":109006,"language":25061,"meta":64,"style":64},"export MUJOCO_GL=osmesa\n",[66,109008,109009],{"__ignoreMap":64},[69,109010,109011,109013,109015,109017],{"class":71,"line":72},[69,109012,26279],{"class":82},[69,109014,108995],{"class":86},[69,109016,1019],{"class":82},[69,109018,109019],{"class":86},"osmesa\n",[29,109021,109022,109023,109026,109027,29621],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[66,109024,109025],{},"egl"," 失败，再尝试 ",[66,109028,109029],{},"osmesa",[29,109031,109032,109033,109036],{},"如果你在本机桌面环境运行，通常先不要设置 ",[66,109034,109035],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109038,102266],{"id":102265},[29,109040,109041],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[29,109043,109044],{},"典型 viewer 流程:",[59,109046,109048],{"className":31614,"code":109047,"language":31616,"meta":64,"style":64},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[66,109049,109050,109063,109070,109074],{"__ignoreMap":64},[69,109051,109052,109055,109058,109060],{"class":71,"line":72},[69,109053,109054],{"class":82},"with",[69,109056,109057],{"class":86}," mujoco.viewer.launch_passive(model, data) ",[69,109059,32619],{"class":82},[69,109061,109062],{"class":86}," viewer:\n",[69,109064,109065,109067],{"class":71,"line":79},[69,109066,3495],{"class":82},[69,109068,109069],{"class":86}," viewer.is_running():\n",[69,109071,109072],{"class":71,"line":106},[69,109073,102737],{"class":86},[69,109075,109076],{"class":71,"line":116},[69,109077,109078],{"class":86},"        viewer.sync()\n",[29,109080,109081],{},"典型 renderer 流程:",[59,109083,109085],{"className":31614,"code":109084,"language":31616,"meta":64,"style":64},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[66,109086,109087,109113,109117,109122],{"__ignoreMap":64},[69,109088,109089,109091,109093,109096,109098,109100,109102,109104,109106,109108,109111],{"class":71,"line":72},[69,109090,108791],{"class":86},[69,109092,1019],{"class":82},[69,109094,109095],{"class":86}," mujoco.Renderer(model, ",[69,109097,26218],{"class":6458},[69,109099,1019],{"class":82},[69,109101,43578],{"class":90},[69,109103,13677],{"class":86},[69,109105,26214],{"class":6458},[69,109107,1019],{"class":82},[69,109109,109110],{"class":90},"640",[69,109112,1404],{"class":86},[69,109114,109115],{"class":71,"line":79},[69,109116,105726],{"class":86},[69,109118,109119],{"class":71,"line":106},[69,109120,109121],{"class":86},"renderer.update_scene(data)\n",[69,109123,109124,109126,109128],{"class":71,"line":116},[69,109125,108801],{"class":86},[69,109127,1019],{"class":82},[69,109129,108806],{"class":86},[19,109131,109133],{"id":109132},"viewer-的同步逻辑","viewer 的同步逻辑",[29,109135,109136],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[59,109138,109140],{"className":31614,"code":109139,"language":31616,"meta":64,"style":64},"mujoco.mj_step(model, data)\nviewer.sync()\n",[66,109141,109142,109146],{"__ignoreMap":64},[69,109143,109144],{"class":71,"line":72},[69,109145,105726],{"class":86},[69,109147,109148],{"class":71,"line":79},[69,109149,109150],{"class":86},"viewer.sync()\n",[29,109152,109153,109155,109156,109159],{},[66,109154,102436],{}," 负责算物理，",[66,109157,109158],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[19,109161,109163],{"id":109162},"为什么要-sleep","为什么要 sleep",[29,109165,109166],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[59,109168,109170],{"className":31614,"code":109169,"language":31616,"meta":64,"style":64},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[66,109171,109172],{"__ignoreMap":64},[69,109173,109174,109177,109179,109182,109184,109187,109189],{"class":71,"line":72},[69,109175,109176],{"class":86},"sleep_time ",[69,109178,1019],{"class":82},[69,109180,109181],{"class":86}," model.opt.timestep ",[69,109183,1920],{"class":82},[69,109185,109186],{"class":86}," (time.time() ",[69,109188,1920],{"class":82},[69,109190,109191],{"class":86}," step_start)\n",[29,109193,109194],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[19,109196,109198],{"id":109197},"renderer-输出是什么","renderer 输出是什么",[59,109200,109202],{"className":31614,"code":109201,"language":31616,"meta":64,"style":64},"image = renderer.render()\n",[66,109203,109204],{"__ignoreMap":64},[69,109205,109206,109208,109210],{"class":71,"line":72},[69,109207,108801],{"class":86},[69,109209,1019],{"class":82},[69,109211,108806],{"class":86},[29,109213,109214],{},"得到的是 NumPy 数组，形状通常是：",[59,109216,109219],{"className":109217,"code":109218,"language":540,"meta":64},[538],"(height, width, 3)\n",[66,109220,109218],{"__ignoreMap":64},[29,109222,109223],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[59,109225,109227],{"className":31614,"code":109226,"language":31616,"meta":64,"style":64},"Image.fromarray(image).save(\"render_output.png\")\n",[66,109228,109229],{"__ignoreMap":64},[69,109230,109231,109234,109237],{"class":71,"line":72},[69,109232,109233],{"class":86},"Image.fromarray(image).save(",[69,109235,109236],{"class":1022},"\"render_output.png\"",[69,109238,1404],{"class":86},[14,109240,102474],{"id":102473},[29,109242,109243],{},"交互式 Viewer:",[59,109245,109247],{"className":31614,"code":109246,"language":31616,"meta":64,"style":64},"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",[66,109248,109249,109255,109259,109265,109271,109275,109279,109287,109292,109296,109300,109304,109309,109314,109318,109322,109326,109331,109335,109339,109343,109347,109351,109355,109367,109379,109387,109391,109401,109421,109431,109436,109441,109445,109462,109475,109480,109484,109488,109500],{"__ignoreMap":64},[69,109250,109251,109253],{"class":71,"line":72},[69,109252,31628],{"class":82},[69,109254,33065],{"class":86},[69,109256,109257],{"class":71,"line":79},[69,109258,3644],{"emptyLinePlaceholder":1325},[69,109260,109261,109263],{"class":71,"line":106},[69,109262,31628],{"class":82},[69,109264,102522],{"class":86},[69,109266,109267,109269],{"class":71,"line":116},[69,109268,31628],{"class":82},[69,109270,108773],{"class":86},[69,109272,109273],{"class":71,"line":133},[69,109274,3644],{"emptyLinePlaceholder":1325},[69,109276,109277],{"class":71,"line":139},[69,109278,3644],{"emptyLinePlaceholder":1325},[69,109280,109281,109283,109285],{"class":71,"line":401},[69,109282,102535],{"class":90},[69,109284,14805],{"class":82},[69,109286,102540],{"class":1022},[69,109288,109289],{"class":71,"line":470},[69,109290,109291],{"class":1022},"\u003Cmujoco model=\"viewer_demo\">\n",[69,109293,109294],{"class":71,"line":475},[69,109295,102550],{"class":1022},[69,109297,109298],{"class":71,"line":482},[69,109299,3644],{"emptyLinePlaceholder":1325},[69,109301,109302],{"class":71,"line":497},[69,109303,102559],{"class":1022},[69,109305,109306],{"class":71,"line":502},[69,109307,109308],{"class":1022},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[69,109310,109311],{"class":71,"line":509},[69,109312,109313],{"class":1022},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[69,109315,109316],{"class":71,"line":524},[69,109317,3644],{"emptyLinePlaceholder":1325},[69,109319,109320],{"class":71,"line":2888},[69,109321,102573],{"class":1022},[69,109323,109324],{"class":71,"line":2893},[69,109325,102578],{"class":1022},[69,109327,109328],{"class":71,"line":2899},[69,109329,109330],{"class":1022},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[69,109332,109333],{"class":71,"line":2919},[69,109334,102588],{"class":1022},[69,109336,109337],{"class":71,"line":2924},[69,109338,102593],{"class":1022},[69,109340,109341],{"class":71,"line":2938},[69,109342,102598],{"class":1022},[69,109344,109345],{"class":71,"line":2943},[69,109346,96919],{"class":1022},[69,109348,109349],{"class":71,"line":2972},[69,109350,3644],{"emptyLinePlaceholder":1325},[69,109352,109353],{"class":71,"line":2977},[69,109354,3644],{"emptyLinePlaceholder":1325},[69,109356,109357,109359,109361,109363,109365],{"class":71,"line":2994},[69,109358,33183],{"class":82},[69,109360,3217],{"class":109},[69,109362,102619],{"class":86},[69,109364,96907],{"class":90},[69,109366,4983],{"class":86},[69,109368,109369,109371,109373,109375,109377],{"class":71,"line":2999},[69,109370,102628],{"class":86},[69,109372,1019],{"class":82},[69,109374,102633],{"class":86},[69,109376,102535],{"class":90},[69,109378,1404],{"class":86},[69,109380,109381,109383,109385],{"class":71,"line":3004},[69,109382,102642],{"class":86},[69,109384,1019],{"class":82},[69,109386,102647],{"class":86},[69,109388,109389],{"class":71,"line":3009},[69,109390,3644],{"emptyLinePlaceholder":1325},[69,109392,109393,109395,109397,109399],{"class":71,"line":3023},[69,109394,35414],{"class":82},[69,109396,109057],{"class":86},[69,109398,32619],{"class":82},[69,109400,109062],{"class":86},[69,109402,109403,109406,109409,109411,109414,109416,109419],{"class":71,"line":3028},[69,109404,109405],{"class":82},"        while",[69,109407,109408],{"class":86}," viewer.is_running() ",[69,109410,31698],{"class":82},[69,109412,109413],{"class":86}," data.time ",[69,109415,1011],{"class":82},[69,109417,109418],{"class":90}," 5.0",[69,109420,4983],{"class":86},[69,109422,109423,109426,109428],{"class":71,"line":3821},[69,109424,109425],{"class":86},"            step_start ",[69,109427,1019],{"class":82},[69,109429,109430],{"class":86}," time.time()\n",[69,109432,109433],{"class":71,"line":3835},[69,109434,109435],{"class":86},"            mujoco.mj_step(model, data)\n",[69,109437,109438],{"class":71,"line":3843},[69,109439,109440],{"class":86},"            viewer.sync()\n",[69,109442,109443],{"class":71,"line":3848},[69,109444,3644],{"emptyLinePlaceholder":1325},[69,109446,109447,109450,109452,109454,109456,109458,109460],{"class":71,"line":3854},[69,109448,109449],{"class":86},"            sleep_time ",[69,109451,1019],{"class":82},[69,109453,109181],{"class":86},[69,109455,1920],{"class":82},[69,109457,109186],{"class":86},[69,109459,1920],{"class":82},[69,109461,109191],{"class":86},[69,109463,109464,109466,109469,109471,109473],{"class":71,"line":3860},[69,109465,5886],{"class":82},[69,109467,109468],{"class":86}," sleep_time ",[69,109470,2346],{"class":82},[69,109472,5337],{"class":90},[69,109474,4983],{"class":86},[69,109476,109477],{"class":71,"line":3865},[69,109478,109479],{"class":86},"                time.sleep(sleep_time)\n",[69,109481,109482],{"class":71,"line":9190},[69,109483,3644],{"emptyLinePlaceholder":1325},[69,109485,109486],{"class":71,"line":9214},[69,109487,3644],{"emptyLinePlaceholder":1325},[69,109489,109490,109492,109494,109496,109498],{"class":71,"line":9219},[69,109491,2782],{"class":82},[69,109493,32456],{"class":90},[69,109495,102780],{"class":82},[69,109497,102783],{"class":1022},[69,109499,4983],{"class":86},[69,109501,109502],{"class":71,"line":9225},[69,109503,102790],{"class":86},[29,109505,104791],{},[59,109507,109509],{"className":25059,"code":109508,"language":25061,"meta":64,"style":64},"touch ch5_viewer.py\n",[66,109510,109511],{"__ignoreMap":64},[69,109512,109513,109515],{"class":71,"line":72},[69,109514,102504],{"class":109},[69,109516,109517],{"class":1022}," ch5_viewer.py\n",[29,109519,109520],{},"离屏 Renderer 保存图片:",[59,109522,109524],{"className":31614,"code":109523,"language":31616,"meta":64,"style":64},"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",[66,109525,109526,109538,109542,109548,109558,109562,109566,109574,109579,109583,109587,109591,109595,109600,109604,109608,109612,109616,109620,109624,109628,109632,109636,109640,109644,109656,109668,109676,109701,109705,109721,109725,109729,109744,109753,109757,109771,109776,109781,109785,109797,109809,109813,109817,109829],{"__ignoreMap":64},[69,109527,109528,109530,109533,109535],{"class":71,"line":72},[69,109529,31973],{"class":82},[69,109531,109532],{"class":86}," pathlib ",[69,109534,31628],{"class":82},[69,109536,109537],{"class":86}," Path\n",[69,109539,109540],{"class":71,"line":79},[69,109541,3644],{"emptyLinePlaceholder":1325},[69,109543,109544,109546],{"class":71,"line":106},[69,109545,31628],{"class":82},[69,109547,102522],{"class":86},[69,109549,109550,109552,109554,109556],{"class":71,"line":116},[69,109551,31973],{"class":82},[69,109553,48499],{"class":90},[69,109555,48502],{"class":82},[69,109557,48505],{"class":86},[69,109559,109560],{"class":71,"line":133},[69,109561,3644],{"emptyLinePlaceholder":1325},[69,109563,109564],{"class":71,"line":139},[69,109565,3644],{"emptyLinePlaceholder":1325},[69,109567,109568,109570,109572],{"class":71,"line":401},[69,109569,102535],{"class":90},[69,109571,14805],{"class":82},[69,109573,102540],{"class":1022},[69,109575,109576],{"class":71,"line":470},[69,109577,109578],{"class":1022},"\u003Cmujoco model=\"renderer_demo\">\n",[69,109580,109581],{"class":71,"line":475},[69,109582,102550],{"class":1022},[69,109584,109585],{"class":71,"line":482},[69,109586,3644],{"emptyLinePlaceholder":1325},[69,109588,109589],{"class":71,"line":497},[69,109590,102559],{"class":1022},[69,109592,109593],{"class":71,"line":502},[69,109594,109308],{"class":1022},[69,109596,109597],{"class":71,"line":509},[69,109598,109599],{"class":1022},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[69,109601,109602],{"class":71,"line":524},[69,109603,109313],{"class":1022},[69,109605,109606],{"class":71,"line":2888},[69,109607,3644],{"emptyLinePlaceholder":1325},[69,109609,109610],{"class":71,"line":2893},[69,109611,102573],{"class":1022},[69,109613,109614],{"class":71,"line":2899},[69,109615,102578],{"class":1022},[69,109617,109618],{"class":71,"line":2919},[69,109619,109330],{"class":1022},[69,109621,109622],{"class":71,"line":2924},[69,109623,102588],{"class":1022},[69,109625,109626],{"class":71,"line":2938},[69,109627,102593],{"class":1022},[69,109629,109630],{"class":71,"line":2943},[69,109631,102598],{"class":1022},[69,109633,109634],{"class":71,"line":2972},[69,109635,96919],{"class":1022},[69,109637,109638],{"class":71,"line":2977},[69,109639,3644],{"emptyLinePlaceholder":1325},[69,109641,109642],{"class":71,"line":2994},[69,109643,3644],{"emptyLinePlaceholder":1325},[69,109645,109646,109648,109650,109652,109654],{"class":71,"line":2999},[69,109647,33183],{"class":82},[69,109649,3217],{"class":109},[69,109651,102619],{"class":86},[69,109653,96907],{"class":90},[69,109655,4983],{"class":86},[69,109657,109658,109660,109662,109664,109666],{"class":71,"line":3004},[69,109659,102628],{"class":86},[69,109661,1019],{"class":82},[69,109663,102633],{"class":86},[69,109665,102535],{"class":90},[69,109667,1404],{"class":86},[69,109669,109670,109672,109674],{"class":71,"line":3009},[69,109671,102642],{"class":86},[69,109673,1019],{"class":82},[69,109675,102647],{"class":86},[69,109677,109678,109681,109683,109685,109687,109689,109691,109693,109695,109697,109699],{"class":71,"line":3023},[69,109679,109680],{"class":86},"    renderer ",[69,109682,1019],{"class":82},[69,109684,109095],{"class":86},[69,109686,26218],{"class":6458},[69,109688,1019],{"class":82},[69,109690,43578],{"class":90},[69,109692,13677],{"class":86},[69,109694,26214],{"class":6458},[69,109696,1019],{"class":82},[69,109698,109110],{"class":90},[69,109700,1404],{"class":86},[69,109702,109703],{"class":71,"line":3028},[69,109704,3644],{"emptyLinePlaceholder":1325},[69,109706,109707,109709,109711,109713,109715,109717,109719],{"class":71,"line":3821},[69,109708,4445],{"class":82},[69,109710,102722],{"class":86},[69,109712,27280],{"class":82},[69,109714,33679],{"class":90},[69,109716,1398],{"class":86},[69,109718,124],{"class":90},[69,109720,32022],{"class":86},[69,109722,109723],{"class":71,"line":3835},[69,109724,102737],{"class":86},[69,109726,109727],{"class":71,"line":3843},[69,109728,3644],{"emptyLinePlaceholder":1325},[69,109730,109731,109734,109737,109739,109742],{"class":71,"line":3848},[69,109732,109733],{"class":86},"    renderer.update_scene(data, ",[69,109735,109736],{"class":6458},"camera",[69,109738,1019],{"class":82},[69,109740,109741],{"class":1022},"\"fixed_camera\"",[69,109743,1404],{"class":86},[69,109745,109746,109749,109751],{"class":71,"line":3854},[69,109747,109748],{"class":86},"    image ",[69,109750,1019],{"class":82},[69,109752,108806],{"class":86},[69,109754,109755],{"class":71,"line":3860},[69,109756,3644],{"emptyLinePlaceholder":1325},[69,109758,109759,109762,109764,109767,109769],{"class":71,"line":3865},[69,109760,109761],{"class":86},"    output_path ",[69,109763,1019],{"class":82},[69,109765,109766],{"class":86}," Path(",[69,109768,109236],{"class":1022},[69,109770,1404],{"class":86},[69,109772,109773],{"class":71,"line":9190},[69,109774,109775],{"class":86},"    Image.fromarray(image).save(output_path)\n",[69,109777,109778],{"class":71,"line":9214},[69,109779,109780],{"class":86},"    renderer.close()\n",[69,109782,109783],{"class":71,"line":9219},[69,109784,3644],{"emptyLinePlaceholder":1325},[69,109786,109787,109789,109791,109794],{"class":71,"line":9225},[69,109788,32535],{"class":90},[69,109790,1398],{"class":86},[69,109792,109793],{"class":1022},"\"saved:\"",[69,109795,109796],{"class":86},", output_path.resolve())\n",[69,109798,109799,109801,109803,109806],{"class":71,"line":9252},[69,109800,32535],{"class":90},[69,109802,1398],{"class":86},[69,109804,109805],{"class":1022},"\"image shape:\"",[69,109807,109808],{"class":86},", image.shape)\n",[69,109810,109811],{"class":71,"line":9257},[69,109812,3644],{"emptyLinePlaceholder":1325},[69,109814,109815],{"class":71,"line":9263},[69,109816,3644],{"emptyLinePlaceholder":1325},[69,109818,109819,109821,109823,109825,109827],{"class":71,"line":9275},[69,109820,2782],{"class":82},[69,109822,32456],{"class":90},[69,109824,102780],{"class":82},[69,109826,102783],{"class":1022},[69,109828,4983],{"class":86},[69,109830,109831],{"class":71,"line":9287},[69,109832,102790],{"class":86},[29,109834,104791],{},[59,109836,109838],{"className":25059,"code":109837,"language":25061,"meta":64,"style":64},"touch ch5_renderer.py\n",[66,109839,109840],{"__ignoreMap":64},[69,109841,109842,109844],{"class":71,"line":72},[69,109843,102504],{"class":109},[69,109845,109846],{"class":1022}," ch5_renderer.py\n",[19,109848,102793],{"id":102793},[29,109850,109851],{},"viewer 上下文：",[59,109853,109855],{"className":31614,"code":109854,"language":31616,"meta":64,"style":64},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[66,109856,109857],{"__ignoreMap":64},[69,109858,109859,109861,109863,109865],{"class":71,"line":72},[69,109860,109054],{"class":82},[69,109862,109057],{"class":86},[69,109864,32619],{"class":82},[69,109866,109062],{"class":86},[29,109868,109869,109871],{},[66,109870,109054],{}," 语句会创建窗口，并在退出时自动清理资源。",[29,109873,109874],{},"窗口循环：",[59,109876,109878],{"className":31614,"code":109877,"language":31616,"meta":64,"style":64},"while viewer.is_running() and data.time \u003C 5.0:\n",[66,109879,109880],{"__ignoreMap":64},[69,109881,109882,109885,109887,109889,109891,109893,109895],{"class":71,"line":72},[69,109883,109884],{"class":82},"while",[69,109886,109408],{"class":86},[69,109888,31698],{"class":82},[69,109890,109413],{"class":86},[69,109892,1011],{"class":82},[69,109894,109418],{"class":90},[69,109896,4983],{"class":86},[29,109898,109899],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[29,109901,109902],{},"固定相机：",[59,109904,109906],{"className":54295,"code":109905,"language":54297,"meta":64,"style":64},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[66,109907,109908],{"__ignoreMap":64},[69,109909,109910,109912,109914,109916,109918,109920,109922,109924,109927,109930,109932,109935],{"class":71,"line":72},[69,109911,1011],{"class":86},[69,109913,109736],{"class":348},[69,109915,16160],{"class":109},[69,109917,1019],{"class":86},[69,109919,109741],{"class":1022},[69,109921,102327],{"class":109},[69,109923,1019],{"class":86},[69,109925,109926],{"class":1022},"\"1.5 -2.0 1.2\"",[69,109928,109929],{"class":109}," xyaxes",[69,109931,1019],{"class":86},[69,109933,109934],{"class":1022},"\"1 0.75 0 0 0 1\"",[69,109936,102365],{"class":86},[29,109938,109939],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[19,109941,109943],{"id":109942},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[59,109945,109947],{"className":31614,"code":109946,"language":31616,"meta":64,"style":64},"import time\n",[66,109948,109949],{"__ignoreMap":64},[69,109950,109951,109953],{"class":71,"line":72},[69,109952,31628],{"class":82},[69,109954,33065],{"class":86},[29,109956,109957],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[59,109959,109961],{"className":31614,"code":109960,"language":31616,"meta":64,"style":64},"import mujoco\nimport mujoco.viewer\n",[66,109962,109963,109969],{"__ignoreMap":64},[69,109964,109965,109967],{"class":71,"line":72},[69,109966,31628],{"class":82},[69,109968,102522],{"class":86},[69,109970,109971,109973],{"class":71,"line":79},[69,109972,31628],{"class":82},[69,109974,108773],{"class":86},[29,109976,109977],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[59,109979,109980],{"className":31614,"code":109854,"language":31616,"meta":64,"style":64},[66,109981,109982],{"__ignoreMap":64},[69,109983,109984,109986,109988,109990],{"class":71,"line":72},[69,109985,109054],{"class":82},[69,109987,109057],{"class":86},[69,109989,32619],{"class":82},[69,109991,109062],{"class":86},[29,109993,109994,109995,109998],{},"打开一个 viewer 窗口。",[66,109996,109997],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[59,110000,110001],{"className":31614,"code":109877,"language":31616,"meta":64,"style":64},[66,110002,110003],{"__ignoreMap":64},[69,110004,110005,110007,110009,110011,110013,110015,110017],{"class":71,"line":72},[69,110006,109884],{"class":82},[69,110008,109408],{"class":86},[69,110010,31698],{"class":82},[69,110012,109413],{"class":86},[69,110014,1011],{"class":82},[69,110016,109418],{"class":90},[69,110018,4983],{"class":86},[29,110020,110021,110022,110025],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[66,110023,110024],{},"viewer.is_running()"," 会变成 false，循环结束。",[59,110027,110029],{"className":31614,"code":110028,"language":31616,"meta":64,"style":64},"step_start = time.time()\n",[66,110030,110031],{"__ignoreMap":64},[69,110032,110033,110036,110038],{"class":71,"line":72},[69,110034,110035],{"class":86},"step_start ",[69,110037,1019],{"class":82},[69,110039,109430],{"class":86},[29,110041,110042],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[59,110044,110045],{"className":31614,"code":109139,"language":31616,"meta":64,"style":64},[66,110046,110047,110051],{"__ignoreMap":64},[69,110048,110049],{"class":71,"line":72},[69,110050,105726],{"class":86},[69,110052,110053],{"class":71,"line":79},[69,110054,109150],{"class":86},[29,110056,110057,110059,110060,110062,110063,110065,110066,110069],{},[66,110058,102436],{}," 推进物理仿真。",[66,110061,109158],{}," 把最新的 ",[66,110064,34637],{}," 同步到窗口里显示。没有 ",[66,110067,110068],{},"sync()","，窗口可能看不到最新状态。",[59,110071,110072],{"className":31614,"code":109169,"language":31616,"meta":64,"style":64},[66,110073,110074],{"__ignoreMap":64},[69,110075,110076,110078,110080,110082,110084,110086,110088],{"class":71,"line":72},[69,110077,109176],{"class":86},[69,110079,1019],{"class":82},[69,110081,109181],{"class":86},[69,110083,1920],{"class":82},[69,110085,109186],{"class":86},[69,110087,1920],{"class":82},[69,110089,109191],{"class":86},[29,110091,110092],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[59,110094,110096],{"className":31614,"code":110095,"language":31616,"meta":64,"style":64},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[66,110097,110098,110110],{"__ignoreMap":64},[69,110099,110100,110102,110104,110106,110108],{"class":71,"line":72},[69,110101,2782],{"class":82},[69,110103,109468],{"class":86},[69,110105,2346],{"class":82},[69,110107,5337],{"class":90},[69,110109,4983],{"class":86},[69,110111,110112],{"class":71,"line":79},[69,110113,110114],{"class":86},"    time.sleep(sleep_time)\n",[29,110116,110117],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[19,110119,110121],{"id":110120},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[59,110123,110125],{"className":31614,"code":110124,"language":31616,"meta":64,"style":64},"from pathlib import Path\n",[66,110126,110127],{"__ignoreMap":64},[69,110128,110129,110131,110133,110135],{"class":71,"line":72},[69,110130,31973],{"class":82},[69,110132,109532],{"class":86},[69,110134,31628],{"class":82},[69,110136,109537],{"class":86},[29,110138,110139,110140,110143,110144,110147],{},"导入 ",[66,110141,110142],{},"Path","，用来处理文件路径。相比直接写字符串，",[66,110145,110146],{},"Path(\"render_output.png\")"," 更清晰。",[59,110149,110151],{"className":31614,"code":110150,"language":31616,"meta":64,"style":64},"from PIL import Image\n",[66,110152,110153],{"__ignoreMap":64},[69,110154,110155,110157,110159,110161],{"class":71,"line":72},[69,110156,31973],{"class":82},[69,110158,48499],{"class":90},[69,110160,48502],{"class":82},[69,110162,48505],{"class":86},[29,110164,110165],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[59,110167,110168],{"className":54295,"code":109905,"language":54297,"meta":64,"style":64},[66,110169,110170],{"__ignoreMap":64},[69,110171,110172,110174,110176,110178,110180,110182,110184,110186,110188,110190,110192,110194],{"class":71,"line":72},[69,110173,1011],{"class":86},[69,110175,109736],{"class":348},[69,110177,16160],{"class":109},[69,110179,1019],{"class":86},[69,110181,109741],{"class":1022},[69,110183,102327],{"class":109},[69,110185,1019],{"class":86},[69,110187,109926],{"class":1022},[69,110189,109929],{"class":109},[69,110191,1019],{"class":86},[69,110193,109934],{"class":1022},[69,110195,102365],{"class":86},[29,110197,110198,110199,110201,110202,110204,110205,110208,110209,110211],{},"定义一个相机。",[66,110200,81031],{}," 是相机名字。",[66,110203,105367],{}," 是相机在世界里的位置。",[66,110206,110207],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[66,110210,105367],{}," 来调视角。",[59,110213,110215],{"className":31614,"code":110214,"language":31616,"meta":64,"style":64},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[66,110216,110217],{"__ignoreMap":64},[69,110218,110219,110221,110223,110225,110227,110229,110231,110233,110235,110237,110239],{"class":71,"line":72},[69,110220,108791],{"class":86},[69,110222,1019],{"class":82},[69,110224,109095],{"class":86},[69,110226,26218],{"class":6458},[69,110228,1019],{"class":82},[69,110230,43578],{"class":90},[69,110232,13677],{"class":86},[69,110234,26214],{"class":6458},[69,110236,1019],{"class":82},[69,110238,109110],{"class":90},[69,110240,1404],{"class":86},[29,110242,110243,110244,102239,110246,110248],{},"创建离屏渲染器。",[66,110245,26218],{},[66,110247,26214],{}," 决定输出图片大小。",[59,110250,110251],{"className":31614,"code":102897,"language":31616,"meta":64,"style":64},[66,110252,110253,110269],{"__ignoreMap":64},[69,110254,110255,110257,110259,110261,110263,110265,110267],{"class":71,"line":72},[69,110256,4269],{"class":82},[69,110258,102722],{"class":86},[69,110260,27280],{"class":82},[69,110262,33679],{"class":90},[69,110264,1398],{"class":86},[69,110266,124],{"class":90},[69,110268,32022],{"class":86},[69,110270,110271],{"class":71,"line":79},[69,110272,102920],{"class":86},[29,110274,110275],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[59,110277,110279],{"className":31614,"code":110278,"language":31616,"meta":64,"style":64},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[66,110280,110281],{"__ignoreMap":64},[69,110282,110283,110286,110288,110290,110292],{"class":71,"line":72},[69,110284,110285],{"class":86},"renderer.update_scene(data, ",[69,110287,109736],{"class":6458},[69,110289,1019],{"class":82},[69,110291,109741],{"class":1022},[69,110293,1404],{"class":86},[29,110295,110296,110297,110299,110300,110303],{},"告诉 renderer：用当前 ",[66,110298,34637],{}," 的状态更新画面，并使用名为 ",[66,110301,110302],{},"fixed_camera"," 的相机视角。",[59,110305,110306],{"className":31614,"code":109201,"language":31616,"meta":64,"style":64},[66,110307,110308],{"__ignoreMap":64},[69,110309,110310,110312,110314],{"class":71,"line":72},[69,110311,108801],{"class":86},[69,110313,1019],{"class":82},[69,110315,108806],{"class":86},[29,110317,110318,110319,110322],{},"真正渲染出图像。",[66,110320,110321],{},"image"," 是一个 NumPy 数组，不是文件。",[59,110324,110326],{"className":31614,"code":110325,"language":31616,"meta":64,"style":64},"Image.fromarray(image).save(output_path)\n",[66,110327,110328],{"__ignoreMap":64},[69,110329,110330],{"class":71,"line":72},[69,110331,110325],{"class":86},[29,110333,110334,110335,29621],{},"把数组转换成图片，并保存到 ",[66,110336,110337],{},"render_output.png",[59,110339,110341],{"className":31614,"code":110340,"language":31616,"meta":64,"style":64},"renderer.close()\n",[66,110342,110343],{"__ignoreMap":64},[69,110344,110345],{"class":71,"line":72},[69,110346,110340],{"class":86},[29,110348,110349],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110351,103537],{"id":103536},[29,110353,110354,110355,110357,110358,29621],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[66,110356,110337],{},"，并输出图像数组形状，例如 ",[66,110359,110360],{},"(480, 640, 3)",[29,110362,110363],{},"如果图片里看不到方块，先检查：",[37,110365,110366,110369,110372],{},[40,110367,110368],{},"方块是否掉到相机视野外。",[40,110370,110371],{},"camera 位置是否合理。",[40,110373,110374,110375,110378],{},"是否在 ",[66,110376,110377],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110380,103569],{"id":103568},[29,110382,110383],{},"运行 viewer:",[59,110385,110387],{"className":25059,"code":110386,"language":25061,"meta":64,"style":64},"python ch5_viewer.py\n",[66,110388,110389],{"__ignoreMap":64},[69,110390,110391,110393],{"class":71,"line":72},[69,110392,31616],{"class":109},[69,110394,109517],{"class":1022},[29,110396,110397],{},"运行 renderer:",[59,110399,110401],{"className":25059,"code":110400,"language":25061,"meta":64,"style":64},"python ch5_renderer.py\n",[66,110402,110403],{"__ignoreMap":64},[69,110404,110405,110407],{"class":71,"line":72},[69,110406,31616],{"class":109},[69,110408,109846],{"class":1022},[29,110410,110411],{},"如果在服务器上运行:",[59,110413,110415],{"className":25059,"code":110414,"language":25061,"meta":64,"style":64},"MUJOCO_GL=egl python ch5_renderer.py\n",[66,110416,110417],{"__ignoreMap":64},[69,110418,110419,110421,110423,110425,110428],{"class":71,"line":72},[69,110420,109035],{"class":86},[69,110422,1019],{"class":82},[69,110424,109025],{"class":1022},[69,110426,110427],{"class":109}," python",[69,110429,109846],{"class":1022},[29,110431,109003],{},[59,110433,110435],{"className":25059,"code":110434,"language":25061,"meta":64,"style":64},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[66,110436,110437],{"__ignoreMap":64},[69,110438,110439,110441,110443,110445,110447],{"class":71,"line":72},[69,110440,109035],{"class":86},[69,110442,1019],{"class":82},[69,110444,109029],{"class":1022},[69,110446,110427],{"class":109},[69,110448,109846],{"class":1022},[29,110450,110451],{},"再做几个练习：",[37,110453,110454,110461,110464,110470],{},[40,110455,110456,110457,110460],{},"把 renderer 分辨率改成 ",[66,110458,110459],{},"height=240, width=320","，观察输出 shape。",[40,110462,110463],{},"把方块颜色改成蓝色，重新保存图片。",[40,110465,110466,110467,110469],{},"把相机 ",[66,110468,105367],{}," 改远一点，观察画面中物体是否变小。",[40,110471,110472,110473,103635,110476,110479],{},"把 viewer 示例中的 ",[66,110474,110475],{},"data.time \u003C 5.0",[66,110477,110478],{},"data.time \u003C 20.0","，观察更长时间。",[14,110481,103674],{"id":103673},[19,110483,110485],{"id":110484},"viewer-窗口打不开","viewer 窗口打不开",[29,110487,110488],{},"安装:",[59,110490,110492],{"className":25059,"code":110491,"language":25061,"meta":64,"style":64},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[66,110493,110494],{"__ignoreMap":64},[69,110495,110496,110498,110500,110502,110504,110506,110508,110510,110512,110514,110516],{"class":71,"line":72},[69,110497,25813],{"class":109},[69,110499,27551],{"class":1022},[69,110501,25071],{"class":1022},[69,110503,27636],{"class":90},[69,110505,103727],{"class":1022},[69,110507,102055],{"class":1022},[69,110509,103732],{"class":1022},[69,110511,102068],{"class":1022},[69,110513,102074],{"class":1022},[69,110515,102065],{"class":1022},[69,110517,110518],{"class":1022}," libXinerama\n",[19,110520,110522],{"id":110521},"glfwerror",[66,110523,110524],{},"GLFWError",[29,110526,110527],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[19,110529,110531],{"id":110530},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[29,110533,110534,110535,83760,110537,110539],{},"尝试 ",[66,110536,102258],{},[66,110538,102261],{},"。可能存在版本差异。",[19,110541,110542],{"id":110542},"保存图片是黑的",[29,110544,103796],{},[37,110546,110547,110550,110553,110563],{},[40,110548,110549],{},"XML 里是否有 light。",[40,110551,110552],{},"相机是否对着模型。",[40,110554,110555,110556,110559,110560,29621],{},"是否先 ",[66,110557,110558],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[66,110561,110562],{},"renderer.render()",[40,110564,110565],{},"物体是否已经掉出视野。",[19,110567,110568],{"id":110568},"远程服务器没有显示器",[29,110570,110571],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[59,110573,110574],{"className":25059,"code":110414,"language":25061,"meta":64,"style":64},[66,110575,110576],{"__ignoreMap":64},[69,110577,110578,110580,110582,110584,110586],{"class":71,"line":72},[69,110579,109035],{"class":86},[69,110581,1019],{"class":82},[69,110583,109025],{"class":1022},[69,110585,110427],{"class":109},[69,110587,109846],{"class":1022},[29,110589,110590],{},"如果 EGL 不可用，再尝试：",[59,110592,110593],{"className":25059,"code":110434,"language":25061,"meta":64,"style":64},[66,110594,110595],{"__ignoreMap":64},[69,110596,110597,110599,110601,110603,110605],{"class":71,"line":72},[69,110598,109035],{"class":86},[69,110600,1019],{"class":82},[69,110602,109029],{"class":1022},[69,110604,110427],{"class":109},[69,110606,109846],{"class":1022},[14,110608,103828],{"id":103827},[29,110610,110611],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[37,110613,110614,110617,110620],{},[40,110615,110616],{},"先用 viewer 看模型和控制是否正常。",[40,110618,110619],{},"再用 renderer 保存图片或构造视觉观测。",[40,110621,110622],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1297,110624,110625],{},"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":64,"searchDepth":79,"depth":79,"links":110627},[110628,110629,110630,110635,110640,110641,110642,110649],{"id":101867,"depth":79,"text":101868},{"id":101990,"depth":79,"text":101991},{"id":102265,"depth":79,"text":102266,"children":110631},[110632,110633,110634],{"id":109132,"depth":106,"text":109133},{"id":109162,"depth":106,"text":109163},{"id":109197,"depth":106,"text":109198},{"id":102473,"depth":79,"text":102474,"children":110636},[110637,110638,110639],{"id":102793,"depth":106,"text":102793},{"id":109942,"depth":106,"text":109943},{"id":110120,"depth":106,"text":110121},{"id":103536,"depth":79,"text":103537},{"id":103568,"depth":79,"text":103569},{"id":103673,"depth":79,"text":103674,"children":110643},[110644,110645,110646,110647,110648],{"id":110484,"depth":106,"text":110485},{"id":110521,"depth":106,"text":110524},{"id":110530,"depth":106,"text":110531},{"id":110542,"depth":106,"text":110542},{"id":110568,"depth":106,"text":110568},{"id":103827,"depth":79,"text":103828},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108740,"description":64},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110656,"title":110657,"body":110658,"description":64,"extension":1323,"meta":112569,"navigation":1325,"path":112570,"seo":112571,"stem":112572,"__hash__":112573},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110659,"toc":112545},[110660,110663,110665,110668,110670,110689,110692,110698,110701,110703,110705,110729,110731,110745,110747,110788,110790,110801,110803,110806,110812,110815,110849,110852,110884,110887,110919,110923,110926,110966,110969,110975,110978,110984,110988,110991,110997,111000,111004,111007,111047,111049,111062,111065,111067,111649,111651,111663,111666,111677,111679,111682,111701,111713,111716,111737,111740,111743,111786,111789,111792,111812,111819,111821,111839,111854,111857,111863,111866,111872,111889,111896,111927,111938,111972,111983,112000,112009,112017,112022,112036,112039,112060,112066,112080,112085,112115,112125,112150,112158,112181,112184,112200,112203,112211,112217,112239,112252,112273,112282,112321,112332,112334,112337,112343,112346,112349,112355,112358,112378,112381,112383,112422,112424,112427,112435,112438,112441,112468,112471,112481,112487,112490,112496,112498,112504,112508,112511,112513,112516,112540,112543],[10,110661,110657],{"id":110662},"_6控制任务cartpole",[14,110664,101868],{"id":101867},[29,110666,110667],{},"本章搭建一个最小 Cartpole 控制任务。",[29,110669,105552],{},[37,110671,110672,110675,110677,110680,110683,110686],{},[40,110673,110674],{},"slide joint",[40,110676,107405],{},[40,110678,110679],{},"cart force actuator",[40,110681,110682],{},"状态观测",[40,110684,110685],{},"简单控制循环",[40,110687,110688],{},"reward 设计雏形",[29,110690,110691],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[59,110693,110696],{"className":110694,"code":110695,"language":540,"meta":64},[538],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[66,110697,110695],{"__ignoreMap":64},[29,110699,110700],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110702,101991],{"id":101990},[29,110704,101994],{},[59,110706,110707],{"className":25059,"code":105609,"language":25061,"meta":64,"style":64},[66,110708,110709],{"__ignoreMap":64},[69,110710,110711,110713,110715,110717,110719,110721,110723,110725,110727],{"class":71,"line":72},[69,110712,25813],{"class":109},[69,110714,27551],{"class":1022},[69,110716,25071],{"class":1022},[69,110718,27636],{"class":90},[69,110720,105624],{"class":1022},[69,110722,102019],{"class":1022},[69,110724,103722],{"class":1022},[69,110726,102035],{"class":1022},[69,110728,105633],{"class":1022},[29,110730,104040],{},[59,110732,110733],{"className":25059,"code":102140,"language":25061,"meta":64,"style":64},[66,110734,110735],{"__ignoreMap":64},[69,110736,110737,110739,110741,110743],{"class":71,"line":72},[69,110738,25068],{"class":109},[69,110740,25071],{"class":1022},[69,110742,102151],{"class":1022},[69,110744,102154],{"class":1022},[29,110746,104057],{},[59,110748,110750],{"className":25059,"code":110749,"language":25061,"meta":64,"style":64},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[66,110751,110752,110769,110778],{"__ignoreMap":64},[69,110753,110754,110756,110758,110760,110763,110765,110767],{"class":71,"line":72},[69,110755,31566],{"class":109},[69,110757,30412],{"class":1022},[69,110759,26352],{"class":90},[69,110761,110762],{"class":1022}," mujoco-cartpole",[69,110764,102196],{"class":1022},[69,110766,102199],{"class":90},[69,110768,102202],{"class":90},[69,110770,110771,110773,110775],{"class":71,"line":79},[69,110772,31566],{"class":109},[69,110774,102209],{"class":1022},[69,110776,110777],{"class":1022}," mujoco-cartpole\n",[69,110779,110780,110782,110784,110786],{"class":71,"line":106},[69,110781,25068],{"class":109},[69,110783,25071],{"class":1022},[69,110785,102151],{"class":1022},[69,110787,102154],{"class":1022},[29,110789,102225],{},[37,110791,110792,110795,110798],{},[40,110793,110794],{},"本章不依赖 Gymnasium。",[40,110796,110797],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[40,110799,110800],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110802,102266],{"id":102265},[29,110804,110805],{},"Cartpole 的模型结构:",[59,110807,110810],{"className":110808,"code":110809,"language":540,"meta":64},[538],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[66,110811,110809],{"__ignoreMap":64},[29,110813,110814],{},"小车通过 slide joint 左右移动:",[59,110816,110818],{"className":54295,"code":110817,"language":54297,"meta":64,"style":64},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[66,110819,110820],{"__ignoreMap":64},[69,110821,110822,110824,110826,110828,110830,110833,110835,110837,110840,110842,110844,110847],{"class":71,"line":72},[69,110823,1011],{"class":86},[69,110825,104177],{"class":348},[69,110827,16160],{"class":109},[69,110829,1019],{"class":86},[69,110831,110832],{"class":1022},"\"cart_x\"",[69,110834,55051],{"class":109},[69,110836,1019],{"class":86},[69,110838,110839],{"class":1022},"\"slide\"",[69,110841,107249],{"class":109},[69,110843,1019],{"class":86},[69,110845,110846],{"class":1022},"\"1 0 0\"",[69,110848,102365],{"class":86},[29,110850,110851],{},"杆子通过 hinge joint 旋转:",[59,110853,110855],{"className":54295,"code":110854,"language":54297,"meta":64,"style":64},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[66,110856,110857],{"__ignoreMap":64},[69,110858,110859,110861,110863,110865,110867,110870,110872,110874,110876,110878,110880,110882],{"class":71,"line":72},[69,110860,1011],{"class":86},[69,110862,104177],{"class":348},[69,110864,16160],{"class":109},[69,110866,1019],{"class":86},[69,110868,110869],{"class":1022},"\"pole_hinge\"",[69,110871,55051],{"class":109},[69,110873,1019],{"class":86},[69,110875,107240],{"class":1022},[69,110877,107249],{"class":109},[69,110879,1019],{"class":86},[69,110881,107254],{"class":1022},[69,110883,102365],{"class":86},[29,110885,110886],{},"控制力作用在小车 slide joint 上:",[59,110888,110890],{"className":54295,"code":110889,"language":54297,"meta":64,"style":64},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[66,110891,110892],{"__ignoreMap":64},[69,110893,110894,110896,110898,110900,110902,110905,110907,110909,110911,110913,110915,110917],{"class":71,"line":72},[69,110895,1011],{"class":86},[69,110897,107295],{"class":348},[69,110899,16160],{"class":109},[69,110901,1019],{"class":86},[69,110903,110904],{"class":1022},"\"cart_motor\"",[69,110906,107305],{"class":109},[69,110908,1019],{"class":86},[69,110910,110832],{"class":1022},[69,110912,107312],{"class":109},[69,110914,1019],{"class":86},[69,110916,55543],{"class":1022},[69,110918,102365],{"class":86},[19,110920,110922],{"id":110921},"cartpole-的状态是什么","Cartpole 的状态是什么",[29,110924,110925],{},"这个简化模型有两个关节：",[1530,110927,110928,110939],{},[1533,110929,110930],{},[1536,110931,110932,110934,110936],{},[1539,110933,103980],{"align":1202},[1539,110935,24974],{"align":1202},[1539,110937,110938],{"align":1202},"对应状态",[1576,110940,110941,110954],{},[1536,110942,110943,110948,110951],{},[1581,110944,110945],{"align":1202},[66,110946,110947],{},"cart_x",[1581,110949,110950],{"align":1202},"slide",[1581,110952,110953],{"align":1202},"小车 x 位置",[1536,110955,110956,110961,110963],{},[1581,110957,110958],{"align":1202},[66,110959,110960],{},"pole_hinge",[1581,110962,107061],{"align":1202},[1581,110964,110965],{"align":1202},"杆子角度",[29,110967,110968],{},"所以：",[59,110970,110973],{"className":110971,"code":110972,"language":540,"meta":64},[538],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[66,110974,110972],{"__ignoreMap":64},[29,110976,110977],{},"把它们拼起来就是观测：",[59,110979,110982],{"className":110980,"code":110981,"language":540,"meta":64},[538],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[66,110983,110981],{"__ignoreMap":64},[19,110985,110987],{"id":110986},"action-是什么","action 是什么",[29,110989,110990],{},"本章只有一个 actuator：",[59,110992,110995],{"className":110993,"code":110994,"language":540,"meta":64},[538],"data.ctrl[0] = action\n",[66,110996,110994],{"__ignoreMap":64},[29,110998,110999],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[19,111001,111003],{"id":111002},"reward-是什么","reward 是什么",[29,111005,111006],{},"奖励函数：",[59,111008,111010],{"className":31614,"code":111009,"language":31616,"meta":64,"style":64},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[66,111011,111012],{"__ignoreMap":64},[69,111013,111014,111016,111019,111021,111023,111025,111028,111030,111033,111035,111037,111039,111042,111044],{"class":71,"line":72},[69,111015,18285],{"class":82},[69,111017,111018],{"class":90}," float",[69,111020,1398],{"class":86},[69,111022,103624],{"class":90},[69,111024,53499],{"class":82},[69,111026,111027],{"class":90}," 0.1",[69,111029,7760],{"class":82},[69,111031,111032],{"class":86}," cart_x ",[69,111034,1843],{"class":82},[69,111036,111032],{"class":86},[69,111038,1920],{"class":82},[69,111040,111041],{"class":86}," pole_angle ",[69,111043,1843],{"class":82},[69,111045,111046],{"class":86}," pole_angle)\n",[29,111048,107447],{},[37,111050,111051,111056,111059],{},[40,111052,111053,111054,29621],{},"基础奖励是 ",[66,111055,103624],{},[40,111057,111058],{},"小车离中心越远，扣分越多。",[40,111060,111061],{},"杆子角度越大，扣分越多。",[29,111063,111064],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111066,102474],{"id":102473},[59,111068,111070],{"className":31614,"code":111069,"language":31616,"meta":64,"style":64},"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",[66,111071,111072,111078,111088,111092,111096,111104,111109,111113,111117,111121,111126,111130,111135,111140,111145,111149,111154,111159,111164,111168,111172,111176,111180,111184,111189,111193,111197,111201,111205,111209,111219,111226,111230,111234,111248,111262,111275,111305,111309,111313,111325,111337,111345,111349,111362,111366,111370,111379,111383,111399,111409,111422,111435,111439,111462,111480,111484,111496,111500,111504,111514,111524,111528,111544,111585,111589,111609,111625,111629,111633,111645],{"__ignoreMap":64},[69,111073,111074,111076],{"class":71,"line":72},[69,111075,31628],{"class":82},[69,111077,102522],{"class":86},[69,111079,111080,111082,111084,111086],{"class":71,"line":79},[69,111081,31628],{"class":82},[69,111083,32616],{"class":86},[69,111085,32619],{"class":82},[69,111087,32622],{"class":86},[69,111089,111090],{"class":71,"line":106},[69,111091,3644],{"emptyLinePlaceholder":1325},[69,111093,111094],{"class":71,"line":116},[69,111095,3644],{"emptyLinePlaceholder":1325},[69,111097,111098,111100,111102],{"class":71,"line":133},[69,111099,102535],{"class":90},[69,111101,14805],{"class":82},[69,111103,102540],{"class":1022},[69,111105,111106],{"class":71,"line":139},[69,111107,111108],{"class":1022},"\u003Cmujoco model=\"cartpole\">\n",[69,111110,111111],{"class":71,"line":401},[69,111112,102550],{"class":1022},[69,111114,111115],{"class":71,"line":470},[69,111116,3644],{"emptyLinePlaceholder":1325},[69,111118,111119],{"class":71,"line":475},[69,111120,102559],{"class":1022},[69,111122,111123],{"class":71,"line":482},[69,111124,111125],{"class":1022},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[69,111127,111128],{"class":71,"line":497},[69,111129,3644],{"emptyLinePlaceholder":1325},[69,111131,111132],{"class":71,"line":502},[69,111133,111134],{"class":1022},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[69,111136,111137],{"class":71,"line":509},[69,111138,111139],{"class":1022},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[69,111141,111142],{"class":71,"line":524},[69,111143,111144],{"class":1022},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[69,111146,111147],{"class":71,"line":2888},[69,111148,3644],{"emptyLinePlaceholder":1325},[69,111150,111151],{"class":71,"line":2893},[69,111152,111153],{"class":1022},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[69,111155,111156],{"class":71,"line":2899},[69,111157,111158],{"class":1022},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[69,111160,111161],{"class":71,"line":2919},[69,111162,111163],{"class":1022},"        \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",[69,111165,111166],{"class":71,"line":2924},[69,111167,107659],{"class":1022},[69,111169,111170],{"class":71,"line":2938},[69,111171,102588],{"class":1022},[69,111173,111174],{"class":71,"line":2943},[69,111175,102593],{"class":1022},[69,111177,111178],{"class":71,"line":2972},[69,111179,3644],{"emptyLinePlaceholder":1325},[69,111181,111182],{"class":71,"line":2977},[69,111183,107676],{"class":1022},[69,111185,111186],{"class":71,"line":2994},[69,111187,111188],{"class":1022},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[69,111190,111191],{"class":71,"line":2999},[69,111192,107686],{"class":1022},[69,111194,111195],{"class":71,"line":3004},[69,111196,102598],{"class":1022},[69,111198,111199],{"class":71,"line":3009},[69,111200,96919],{"class":1022},[69,111202,111203],{"class":71,"line":3023},[69,111204,3644],{"emptyLinePlaceholder":1325},[69,111206,111207],{"class":71,"line":3028},[69,111208,3644],{"emptyLinePlaceholder":1325},[69,111210,111211,111213,111216],{"class":71,"line":3821},[69,111212,33183],{"class":82},[69,111214,111215],{"class":109}," get_observation",[69,111217,111218],{"class":86},"(data: mujoco.MjData) -> np.ndarray:\n",[69,111220,111221,111223],{"class":71,"line":3835},[69,111222,5334],{"class":82},[69,111224,111225],{"class":86}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[69,111227,111228],{"class":71,"line":3843},[69,111229,3644],{"emptyLinePlaceholder":1325},[69,111231,111232],{"class":71,"line":3848},[69,111233,3644],{"emptyLinePlaceholder":1325},[69,111235,111236,111238,111241,111244,111246],{"class":71,"line":3854},[69,111237,33183],{"class":82},[69,111239,111240],{"class":109}," compute_reward",[69,111242,111243],{"class":86},"(obs: np.ndarray) -> ",[69,111245,1436],{"class":90},[69,111247,4983],{"class":86},[69,111249,111250,111253,111255,111258,111260],{"class":71,"line":3860},[69,111251,111252],{"class":86},"    cart_x ",[69,111254,1019],{"class":82},[69,111256,111257],{"class":86}," obs[",[69,111259,1583],{"class":90},[69,111261,34482],{"class":86},[69,111263,111264,111267,111269,111271,111273],{"class":71,"line":3865},[69,111265,111266],{"class":86},"    pole_angle ",[69,111268,1019],{"class":82},[69,111270,111257],{"class":86},[69,111272,1609],{"class":90},[69,111274,34482],{"class":86},[69,111276,111277,111279,111281,111283,111285,111287,111289,111291,111293,111295,111297,111299,111301,111303],{"class":71,"line":9190},[69,111278,5334],{"class":82},[69,111280,111018],{"class":90},[69,111282,1398],{"class":86},[69,111284,103624],{"class":90},[69,111286,53499],{"class":82},[69,111288,111027],{"class":90},[69,111290,7760],{"class":82},[69,111292,111032],{"class":86},[69,111294,1843],{"class":82},[69,111296,111032],{"class":86},[69,111298,1920],{"class":82},[69,111300,111041],{"class":86},[69,111302,1843],{"class":82},[69,111304,111046],{"class":86},[69,111306,111307],{"class":71,"line":9214},[69,111308,3644],{"emptyLinePlaceholder":1325},[69,111310,111311],{"class":71,"line":9219},[69,111312,3644],{"emptyLinePlaceholder":1325},[69,111314,111315,111317,111319,111321,111323],{"class":71,"line":9225},[69,111316,33183],{"class":82},[69,111318,3217],{"class":109},[69,111320,102619],{"class":86},[69,111322,96907],{"class":90},[69,111324,4983],{"class":86},[69,111326,111327,111329,111331,111333,111335],{"class":71,"line":9252},[69,111328,102628],{"class":86},[69,111330,1019],{"class":82},[69,111332,102633],{"class":86},[69,111334,102535],{"class":90},[69,111336,1404],{"class":86},[69,111338,111339,111341,111343],{"class":71,"line":9257},[69,111340,102642],{"class":86},[69,111342,1019],{"class":82},[69,111344,102647],{"class":86},[69,111346,111347],{"class":71,"line":9263},[69,111348,3644],{"emptyLinePlaceholder":1325},[69,111350,111351,111353,111355,111357,111359],{"class":71,"line":9275},[69,111352,106290],{"class":86},[69,111354,1609],{"class":90},[69,111356,5687],{"class":86},[69,111358,1019],{"class":82},[69,111360,111361],{"class":90}," 0.1\n",[69,111363,111364],{"class":71,"line":9287},[69,111365,106303],{"class":86},[69,111367,111368],{"class":71,"line":9299},[69,111369,3644],{"emptyLinePlaceholder":1325},[69,111371,111372,111375,111377],{"class":71,"line":10958},[69,111373,111374],{"class":86},"    total_reward ",[69,111376,1019],{"class":82},[69,111378,105982],{"class":90},[69,111380,111381],{"class":71,"line":10983},[69,111382,3644],{"emptyLinePlaceholder":1325},[69,111384,111385,111387,111389,111391,111393,111395,111397],{"class":71,"line":11006},[69,111386,4445],{"class":82},[69,111388,32852],{"class":86},[69,111390,27280],{"class":82},[69,111392,33679],{"class":90},[69,111394,1398],{"class":86},[69,111396,7652],{"class":90},[69,111398,32022],{"class":86},[69,111400,111401,111404,111406],{"class":71,"line":11030},[69,111402,111403],{"class":86},"        obs ",[69,111405,1019],{"class":82},[69,111407,111408],{"class":86}," get_observation(data)\n",[69,111410,111411,111414,111416,111418,111420],{"class":71,"line":11035},[69,111412,111413],{"class":86},"        pole_angle ",[69,111415,1019],{"class":82},[69,111417,111257],{"class":86},[69,111419,1609],{"class":90},[69,111421,34482],{"class":86},[69,111423,111424,111427,111429,111431,111433],{"class":71,"line":11040},[69,111425,111426],{"class":86},"        pole_angular_velocity ",[69,111428,1019],{"class":82},[69,111430,111257],{"class":86},[69,111432,1465],{"class":90},[69,111434,34482],{"class":86},[69,111436,111437],{"class":71,"line":11045},[69,111438,3644],{"emptyLinePlaceholder":1325},[69,111440,111441,111444,111446,111449,111451,111453,111455,111457,111459],{"class":71,"line":11054},[69,111442,111443],{"class":86},"        action ",[69,111445,1019],{"class":82},[69,111447,111448],{"class":90}," 2.0",[69,111450,7760],{"class":82},[69,111452,111041],{"class":86},[69,111454,1869],{"class":82},[69,111456,63093],{"class":90},[69,111458,7760],{"class":82},[69,111460,111461],{"class":86}," pole_angular_velocity\n",[69,111463,111464,111466,111468,111470,111472,111474,111476,111478],{"class":71,"line":11059},[69,111465,111443],{"class":86},[69,111467,1019],{"class":82},[69,111469,108668],{"class":86},[69,111471,1920],{"class":82},[69,111473,103624],{"class":90},[69,111475,13677],{"class":86},[69,111477,103624],{"class":90},[69,111479,1404],{"class":86},[69,111481,111482],{"class":71,"line":11065},[69,111483,3644],{"emptyLinePlaceholder":1325},[69,111485,111486,111488,111490,111492,111494],{"class":71,"line":11086},[69,111487,107838],{"class":86},[69,111489,1583],{"class":90},[69,111491,5687],{"class":86},[69,111493,1019],{"class":82},[69,111495,108691],{"class":86},[69,111497,111498],{"class":71,"line":11092},[69,111499,102737],{"class":86},[69,111501,111502],{"class":71,"line":11106},[69,111503,3644],{"emptyLinePlaceholder":1325},[69,111505,111506,111509,111511],{"class":71,"line":11112},[69,111507,111508],{"class":86},"        reward ",[69,111510,1019],{"class":82},[69,111512,111513],{"class":86}," compute_reward(get_observation(data))\n",[69,111515,111516,111519,111521],{"class":71,"line":11139},[69,111517,111518],{"class":86},"        total_reward ",[69,111520,10719],{"class":82},[69,111522,111523],{"class":86}," reward\n",[69,111525,111526],{"class":71,"line":11148},[69,111527,3644],{"emptyLinePlaceholder":1325},[69,111529,111530,111532,111534,111536,111538,111540,111542],{"class":71,"line":11154},[69,111531,3741],{"class":82},[69,111533,32852],{"class":86},[69,111535,127],{"class":82},[69,111537,6996],{"class":90},[69,111539,102780],{"class":82},[69,111541,5337],{"class":90},[69,111543,4983],{"class":86},[69,111545,111546,111548,111550,111553,111556,111559,111562,111564,111567,111570,111572,111574,111576,111578,111581,111583],{"class":71,"line":11162},[69,111547,35886],{"class":90},[69,111549,1398],{"class":86},[69,111551,111552],{"class":1022},"\"step:\"",[69,111554,111555],{"class":86},", step, ",[69,111557,111558],{"class":1022},"\"obs:\"",[69,111560,111561],{"class":86},", np.round(obs, ",[69,111563,1465],{"class":90},[69,111565,111566],{"class":86},"), ",[69,111568,111569],{"class":1022},"\"action:\"",[69,111571,13677],{"class":86},[69,111573,33254],{"class":90},[69,111575,1398],{"class":86},[69,111577,1436],{"class":90},[69,111579,111580],{"class":86},"(action), ",[69,111582,1465],{"class":90},[69,111584,31733],{"class":86},[69,111586,111587],{"class":71,"line":11167},[69,111588,3644],{"emptyLinePlaceholder":1325},[69,111590,111591,111593,111595,111598,111600,111602,111605,111607],{"class":71,"line":17843},[69,111592,32535],{"class":90},[69,111594,1398],{"class":86},[69,111596,111597],{"class":1022},"\"total_reward:\"",[69,111599,13677],{"class":86},[69,111601,33254],{"class":90},[69,111603,111604],{"class":86},"(total_reward, ",[69,111606,1465],{"class":90},[69,111608,31733],{"class":86},[69,111610,111611,111613,111615,111618,111621,111623],{"class":71,"line":17849},[69,111612,32535],{"class":90},[69,111614,1398],{"class":86},[69,111616,111617],{"class":1022},"\"final obs:\"",[69,111619,111620],{"class":86},", np.round(get_observation(data), ",[69,111622,1465],{"class":90},[69,111624,31733],{"class":86},[69,111626,111627],{"class":71,"line":17872},[69,111628,3644],{"emptyLinePlaceholder":1325},[69,111630,111631],{"class":71,"line":17878},[69,111632,3644],{"emptyLinePlaceholder":1325},[69,111634,111635,111637,111639,111641,111643],{"class":71,"line":17901},[69,111636,2782],{"class":82},[69,111638,32456],{"class":90},[69,111640,102780],{"class":82},[69,111642,102783],{"class":1022},[69,111644,4983],{"class":86},[69,111646,111647],{"class":71,"line":17915},[69,111648,102790],{"class":86},[29,111650,104791],{},[59,111652,111654],{"className":25059,"code":111653,"language":25061,"meta":64,"style":64},"touch ch6_cartpole.py\n",[66,111655,111656],{"__ignoreMap":64},[69,111657,111658,111660],{"class":71,"line":72},[69,111659,102504],{"class":109},[69,111661,111662],{"class":1022}," ch6_cartpole.py\n",[29,111664,111665],{},"运行：",[59,111667,111669],{"className":25059,"code":111668,"language":25061,"meta":64,"style":64},"python ch6_cartpole.py\n",[66,111670,111671],{"__ignoreMap":64},[69,111672,111673,111675],{"class":71,"line":72},[69,111674,31616],{"class":109},[69,111676,111662],{"class":1022},[19,111678,102793],{"id":102793},[29,111680,111681],{},"构造观测：",[59,111683,111685],{"className":31614,"code":111684,"language":31616,"meta":64,"style":64},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[66,111686,111687,111695],{"__ignoreMap":64},[69,111688,111689,111691,111693],{"class":71,"line":72},[69,111690,33183],{"class":82},[69,111692,111215],{"class":109},[69,111694,111218],{"class":86},[69,111696,111697,111699],{"class":71,"line":79},[69,111698,5334],{"class":82},[69,111700,111225],{"class":86},[29,111702,111703,111706,111707,111709,111710,111712],{},[66,111704,111705],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[66,111708,105251],{}," 2 维，",[66,111711,105581],{}," 2 维，所以 obs 是 4 维。",[29,111714,111715],{},"设置初始角度：",[59,111717,111719],{"className":31614,"code":111718,"language":31616,"meta":64,"style":64},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[66,111720,111721,111733],{"__ignoreMap":64},[69,111722,111723,111725,111727,111729,111731],{"class":71,"line":72},[69,111724,105920],{"class":86},[69,111726,1609],{"class":90},[69,111728,5687],{"class":86},[69,111730,1019],{"class":82},[69,111732,111361],{"class":90},[69,111734,111735],{"class":71,"line":79},[69,111736,105764],{"class":86},[29,111738,111739],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[29,111741,111742],{},"简单反馈控制：",[59,111744,111746],{"className":31614,"code":111745,"language":31616,"meta":64,"style":64},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[66,111747,111748,111768],{"__ignoreMap":64},[69,111749,111750,111752,111754,111756,111758,111760,111762,111764,111766],{"class":71,"line":72},[69,111751,108663],{"class":86},[69,111753,1019],{"class":82},[69,111755,111448],{"class":90},[69,111757,7760],{"class":82},[69,111759,111041],{"class":86},[69,111761,1869],{"class":82},[69,111763,63093],{"class":90},[69,111765,7760],{"class":82},[69,111767,111461],{"class":86},[69,111769,111770,111772,111774,111776,111778,111780,111782,111784],{"class":71,"line":79},[69,111771,108663],{"class":86},[69,111773,1019],{"class":82},[69,111775,108668],{"class":86},[69,111777,1920],{"class":82},[69,111779,103624],{"class":90},[69,111781,13677],{"class":86},[69,111783,103624],{"class":90},[69,111785,1404],{"class":86},[29,111787,111788],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[29,111790,111791],{},"限制动作：",[59,111793,111795],{"className":31614,"code":111794,"language":31616,"meta":64,"style":64},"np.clip(action, -1.0, 1.0)\n",[66,111796,111797],{"__ignoreMap":64},[69,111798,111799,111802,111804,111806,111808,111810],{"class":71,"line":72},[69,111800,111801],{"class":86},"np.clip(action, ",[69,111803,1920],{"class":82},[69,111805,103624],{"class":90},[69,111807,13677],{"class":86},[69,111809,103624],{"class":90},[69,111811,1404],{"class":86},[29,111813,111814,111815,111818],{},"因为 XML 里 ",[66,111816,111817],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[19,111820,102929],{"id":102929},[59,111822,111823],{"className":31614,"code":111684,"language":31616,"meta":64,"style":64},[66,111824,111825,111833],{"__ignoreMap":64},[69,111826,111827,111829,111831],{"class":71,"line":72},[69,111828,33183],{"class":82},[69,111830,111215],{"class":109},[69,111832,111218],{"class":86},[69,111834,111835,111837],{"class":71,"line":79},[69,111836,5334],{"class":82},[69,111838,111225],{"class":86},[29,111840,111841,111842,111845,111846,111849,111850,111853],{},"这段定义了一个函数，用来获取当前观测。",[66,111843,111844],{},"data.qpos.copy()"," 是位置数组副本，",[66,111847,111848],{},"data.qvel.copy()"," 是速度数组副本。",[66,111851,111852],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[29,111855,111856],{},"在本章模型里：",[59,111858,111861],{"className":111859,"code":111860,"language":540,"meta":64},[538],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[66,111862,111860],{"__ignoreMap":64},[29,111864,111865],{},"所以返回的 obs 是：",[59,111867,111870],{"className":111868,"code":111869,"language":540,"meta":64},[538],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[66,111871,111869],{"__ignoreMap":64},[59,111873,111875],{"className":31614,"code":111874,"language":31616,"meta":64,"style":64},"def compute_reward(obs: np.ndarray) -> float:\n",[66,111876,111877],{"__ignoreMap":64},[69,111878,111879,111881,111883,111885,111887],{"class":71,"line":72},[69,111880,33183],{"class":82},[69,111882,111240],{"class":109},[69,111884,111243],{"class":86},[69,111886,1436],{"class":90},[69,111888,4983],{"class":86},[29,111890,111891,111892,111895],{},"这行定义奖励函数。输入是观测 ",[66,111893,111894],{},"obs","，输出是一个浮点数奖励。",[59,111897,111899],{"className":31614,"code":111898,"language":31616,"meta":64,"style":64},"cart_x = obs[0]\npole_angle = obs[1]\n",[66,111900,111901,111914],{"__ignoreMap":64},[69,111902,111903,111906,111908,111910,111912],{"class":71,"line":72},[69,111904,111905],{"class":86},"cart_x ",[69,111907,1019],{"class":82},[69,111909,111257],{"class":86},[69,111911,1583],{"class":90},[69,111913,34482],{"class":86},[69,111915,111916,111919,111921,111923,111925],{"class":71,"line":79},[69,111917,111918],{"class":86},"pole_angle ",[69,111920,1019],{"class":82},[69,111922,111257],{"class":86},[69,111924,1609],{"class":90},[69,111926,34482],{"class":86},[29,111928,111929,111930,111933,111934,111937],{},"数组索引从 0 开始。",[66,111931,111932],{},"obs[0]"," 是第一个元素，也就是小车位置。",[66,111935,111936],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[59,111939,111940],{"className":31614,"code":111009,"language":31616,"meta":64,"style":64},[66,111941,111942],{"__ignoreMap":64},[69,111943,111944,111946,111948,111950,111952,111954,111956,111958,111960,111962,111964,111966,111968,111970],{"class":71,"line":72},[69,111945,18285],{"class":82},[69,111947,111018],{"class":90},[69,111949,1398],{"class":86},[69,111951,103624],{"class":90},[69,111953,53499],{"class":82},[69,111955,111027],{"class":90},[69,111957,7760],{"class":82},[69,111959,111032],{"class":86},[69,111961,1843],{"class":82},[69,111963,111032],{"class":86},[69,111965,1920],{"class":82},[69,111967,111041],{"class":86},[69,111969,1843],{"class":82},[69,111971,111046],{"class":86},[29,111973,111974,111975,111978,111979,111982],{},"这行计算奖励。",[66,111976,111977],{},"cart_x * cart_x"," 是小车位置的平方，",[66,111980,111981],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[59,111984,111986],{"className":31614,"code":111985,"language":31616,"meta":64,"style":64},"data.qpos[1] = 0.1\n",[66,111987,111988],{"__ignoreMap":64},[69,111989,111990,111992,111994,111996,111998],{"class":71,"line":72},[69,111991,105920],{"class":86},[69,111993,1609],{"class":90},[69,111995,5687],{"class":86},[69,111997,1019],{"class":82},[69,111999,111361],{"class":90},[29,112001,112002,112003,112005,112006,112008],{},"手动设置杆子的初始角度。因为 ",[66,112004,106677],{}," 是小车位置，",[66,112007,106680],{}," 是杆子角度，所以这里改的是杆子。",[59,112010,112011],{"className":31614,"code":105764,"language":31616,"meta":64,"style":64},[66,112012,112013],{"__ignoreMap":64},[69,112014,112015],{"class":71,"line":72},[69,112016,105764],{"class":86},[29,112018,106723,112019,112021],{},[66,112020,105251],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[59,112023,112025],{"className":31614,"code":112024,"language":31616,"meta":64,"style":64},"total_reward = 0.0\n",[66,112026,112027],{"__ignoreMap":64},[69,112028,112029,112032,112034],{"class":71,"line":72},[69,112030,112031],{"class":86},"total_reward ",[69,112033,1019],{"class":82},[69,112035,105982],{"class":90},[29,112037,112038],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[59,112040,112042],{"className":31614,"code":112041,"language":31616,"meta":64,"style":64},"for step in range(1000):\n",[66,112043,112044],{"__ignoreMap":64},[69,112045,112046,112048,112050,112052,112054,112056,112058],{"class":71,"line":72},[69,112047,4269],{"class":82},[69,112049,32852],{"class":86},[69,112051,27280],{"class":82},[69,112053,33679],{"class":90},[69,112055,1398],{"class":86},[69,112057,7652],{"class":90},[69,112059,32022],{"class":86},[29,112061,112062,112063,112065],{},"循环 1000 步。",[66,112064,108355],{}," 是当前步数，从 0 到 999。",[59,112067,112069],{"className":31614,"code":112068,"language":31616,"meta":64,"style":64},"obs = get_observation(data)\n",[66,112070,112071],{"__ignoreMap":64},[69,112072,112073,112076,112078],{"class":71,"line":72},[69,112074,112075],{"class":86},"obs ",[69,112077,1019],{"class":82},[69,112079,111408],{"class":86},[29,112081,112082,112083,29621],{},"读取当前状态，保存到 ",[66,112084,111894],{},[59,112086,112088],{"className":31614,"code":112087,"language":31616,"meta":64,"style":64},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[66,112089,112090,112102],{"__ignoreMap":64},[69,112091,112092,112094,112096,112098,112100],{"class":71,"line":72},[69,112093,111918],{"class":86},[69,112095,1019],{"class":82},[69,112097,111257],{"class":86},[69,112099,1609],{"class":90},[69,112101,34482],{"class":86},[69,112103,112104,112107,112109,112111,112113],{"class":71,"line":79},[69,112105,112106],{"class":86},"pole_angular_velocity ",[69,112108,1019],{"class":82},[69,112110,111257],{"class":86},[69,112112,1465],{"class":90},[69,112114,34482],{"class":86},[29,112116,112117,112118,112121,112122,29621],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[66,112119,112120],{},"obs[3]","？因为 obs 的顺序是 ",[66,112123,112124],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[59,112126,112128],{"className":31614,"code":112127,"language":31616,"meta":64,"style":64},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[66,112129,112130],{"__ignoreMap":64},[69,112131,112132,112134,112136,112138,112140,112142,112144,112146,112148],{"class":71,"line":72},[69,112133,108663],{"class":86},[69,112135,1019],{"class":82},[69,112137,111448],{"class":90},[69,112139,7760],{"class":82},[69,112141,111041],{"class":86},[69,112143,1869],{"class":82},[69,112145,63093],{"class":90},[69,112147,7760],{"class":82},[69,112149,111461],{"class":86},[29,112151,112152,112153,102239,112155,112157],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[66,112154,106481],{},[66,112156,36565],{}," 是人为设置的系数，不是固定公式。",[59,112159,112161],{"className":31614,"code":112160,"language":31616,"meta":64,"style":64},"action = np.clip(action, -1.0, 1.0)\n",[66,112162,112163],{"__ignoreMap":64},[69,112164,112165,112167,112169,112171,112173,112175,112177,112179],{"class":71,"line":72},[69,112166,108663],{"class":86},[69,112168,1019],{"class":82},[69,112170,108668],{"class":86},[69,112172,1920],{"class":82},[69,112174,103624],{"class":90},[69,112176,13677],{"class":86},[69,112178,103624],{"class":90},[69,112180,1404],{"class":86},[29,112182,112183],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[59,112185,112186],{"className":31614,"code":110994,"language":31616,"meta":64,"style":64},[66,112187,112188],{"__ignoreMap":64},[69,112189,112190,112192,112194,112196,112198],{"class":71,"line":72},[69,112191,107092],{"class":86},[69,112193,1583],{"class":90},[69,112195,5687],{"class":86},[69,112197,1019],{"class":82},[69,112199,108691],{"class":86},[29,112201,112202],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[59,112204,112205],{"className":31614,"code":105726,"language":31616,"meta":64,"style":64},[66,112206,112207],{"__ignoreMap":64},[69,112208,112209],{"class":71,"line":72},[69,112210,105726],{"class":86},[29,112212,112213,112214,112216],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[66,112215,107347],{}," 计算小车和杆子的下一刻状态。",[59,112218,112220],{"className":31614,"code":112219,"language":31616,"meta":64,"style":64},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[66,112221,112222,112231],{"__ignoreMap":64},[69,112223,112224,112227,112229],{"class":71,"line":72},[69,112225,112226],{"class":86},"reward ",[69,112228,1019],{"class":82},[69,112230,111513],{"class":86},[69,112232,112233,112235,112237],{"class":71,"line":79},[69,112234,112031],{"class":86},[69,112236,10719],{"class":82},[69,112238,111523],{"class":86},[29,112240,112241,112242,112244,112245,112248,112249,29621],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[66,112243,10719],{}," 是简写，",[66,112246,112247],{},"total_reward += reward"," 等价于 ",[66,112250,112251],{},"total_reward = total_reward + reward",[59,112253,112255],{"className":31614,"code":112254,"language":31616,"meta":64,"style":64},"if step % 100 == 0:\n",[66,112256,112257],{"__ignoreMap":64},[69,112258,112259,112261,112263,112265,112267,112269,112271],{"class":71,"line":72},[69,112260,2782],{"class":82},[69,112262,32852],{"class":86},[69,112264,127],{"class":82},[69,112266,6996],{"class":90},[69,112268,102780],{"class":82},[69,112270,5337],{"class":90},[69,112272,4983],{"class":86},[29,112274,112275,112277,112278,112281],{},[66,112276,127],{}," 是取余数。",[66,112279,112280],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[59,112283,112285],{"className":31614,"code":112284,"language":31616,"meta":64,"style":64},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[66,112286,112287],{"__ignoreMap":64},[69,112288,112289,112291,112293,112295,112297,112299,112301,112303,112305,112307,112309,112311,112313,112315,112317,112319],{"class":71,"line":72},[69,112290,31651],{"class":90},[69,112292,1398],{"class":86},[69,112294,111552],{"class":1022},[69,112296,111555],{"class":86},[69,112298,111558],{"class":1022},[69,112300,111561],{"class":86},[69,112302,1465],{"class":90},[69,112304,111566],{"class":86},[69,112306,111569],{"class":1022},[69,112308,13677],{"class":86},[69,112310,33254],{"class":90},[69,112312,1398],{"class":86},[69,112314,1436],{"class":90},[69,112316,111580],{"class":86},[69,112318,1465],{"class":90},[69,112320,31733],{"class":86},[29,112322,112323,112324,112327,112328,112331],{},"打印当前步数、观测和动作。",[66,112325,112326],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[66,112329,112330],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112333,103537],{"id":103536},[29,112335,112336],{},"观测向量:",[59,112338,112341],{"className":112339,"code":112340,"language":540,"meta":64},[538],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[66,112342,112340],{"__ignoreMap":64},[29,112344,112345],{},"控制器是教学用的简单线性反馈，不保证最优。",[29,112347,112348],{},"每隔 100 步会打印一次：",[59,112350,112353],{"className":112351,"code":112352,"language":540,"meta":64},[538],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[66,112354,112352],{"__ignoreMap":64},[29,112356,112357],{},"重点观察：",[37,112359,112360,112366,112371],{},[40,112361,112362,112365],{},[66,112363,112364],{},"pole_angle"," 是否越来越大。",[40,112367,112368,112370],{},[66,112369,110947],{}," 是否跑得太远。",[40,112372,112373,112374,83760,112376,29621],{},"action 是否经常被 clip 到 ",[66,112375,105136],{},[66,112377,1609],{},[29,112379,112380],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112382,103569],{"id":103568},[37,112384,112385,112391,112394,112400,112410,112416,112419],{},[40,112386,112387,112388,29621],{},"把初始角度改为 ",[66,112389,112390],{},"data.qpos[1] = 0.3",[40,112392,112393],{},"重新运行，观察控制是否变差。",[40,112395,112396,112397,112399],{},"把 actuator ",[66,112398,108288],{}," 改小。",[40,112401,112402,112403,112406,112407,29621],{},"打印 ",[66,112404,112405],{},"model.nq, model.nv, model.nu","，应为 ",[66,112408,112409],{},"2 2 1",[40,112411,112412,112413,112415],{},"把 reward 里的 ",[66,112414,111981],{}," 系数改大，观察总奖励变化。",[40,112417,112418],{},"把控制器改成反号，观察杆子是否更容易倒。",[40,112420,112421],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112423,103674],{"id":103673},[19,112425,112426],{"id":112426},"杆子方向和预期不一致",[29,112428,103617,112429,112431,112432,112434],{},[66,112430,107460],{}," 和 capsule 的 ",[66,112433,104397],{},"，必要时用 viewer 可视化确认。",[19,112436,112437],{"id":112437},"控制器越控越倒",[29,112439,112440],{},"说明反馈符号可能反了，尝试:",[59,112442,112444],{"className":31614,"code":112443,"language":31616,"meta":64,"style":64},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[66,112445,112446],{"__ignoreMap":64},[69,112447,112448,112450,112452,112454,112456,112458,112460,112462,112464,112466],{"class":71,"line":72},[69,112449,108663],{"class":86},[69,112451,1019],{"class":82},[69,112453,53499],{"class":82},[69,112455,106481],{"class":90},[69,112457,7760],{"class":82},[69,112459,111041],{"class":86},[69,112461,1920],{"class":82},[69,112463,63093],{"class":90},[69,112465,7760],{"class":82},[69,112467,111461],{"class":86},[19,112469,112470],{"id":112470},"小车飞走",[29,112472,112473,112474,112476,112477,112480],{},"降低 ",[66,112475,108288],{}," 或缩小 ",[66,112478,112479],{},"action"," 的 clip 范围。",[19,112482,112484,112486],{"id":112483},"obs3-为什么是杆子角速度",[66,112485,112120],{}," 为什么是杆子角速度",[29,112488,112489],{},"因为这个模型里：",[59,112491,112494],{"className":112492,"code":112493,"language":540,"meta":64},[538],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[66,112495,112493],{"__ignoreMap":64},[29,112497,110968],{},[59,112499,112502],{"className":112500,"code":112501,"language":540,"meta":64},[538],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[66,112503,112501],{"__ignoreMap":64},[19,112505,112507],{"id":112506},"reward-变成负数是否错误","reward 变成负数是否错误",[29,112509,112510],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112512,103828],{"id":103827},[29,112514,112515],{},"一个控制任务通常包含：",[37,112517,112518,112521,112529,112534,112537],{},[40,112519,112520],{},"模型：Cartpole 的 body、joint、actuator。",[40,112522,112523,112524,1604,112526,112528],{},"观测：从 ",[66,112525,105251],{},[66,112527,105581],{}," 里取状态。",[40,112530,112531,112532,29621],{},"动作：写入 ",[66,112533,102297],{},[40,112535,112536],{},"奖励：根据任务目标打分。",[40,112538,112539],{},"循环：obs -> action -> step -> reward。",[29,112541,112542],{},"这就是后面 Gymnasium 环境的基本骨架。",[1297,112544,105507],{},{"title":64,"searchDepth":79,"depth":79,"links":112546},[112547,112548,112549,112554,112558,112559,112560,112568],{"id":101867,"depth":79,"text":101868},{"id":101990,"depth":79,"text":101991},{"id":102265,"depth":79,"text":102266,"children":112550},[112551,112552,112553],{"id":110921,"depth":106,"text":110922},{"id":110986,"depth":106,"text":110987},{"id":111002,"depth":106,"text":111003},{"id":102473,"depth":79,"text":102474,"children":112555},[112556,112557],{"id":102793,"depth":106,"text":102793},{"id":102929,"depth":106,"text":102929},{"id":103536,"depth":79,"text":103537},{"id":103568,"depth":79,"text":103569},{"id":103673,"depth":79,"text":103674,"children":112561},[112562,112563,112564,112565,112567],{"id":112426,"depth":106,"text":112426},{"id":112437,"depth":106,"text":112437},{"id":112470,"depth":106,"text":112470},{"id":112483,"depth":106,"text":112566},"obs[3] 为什么是杆子角速度",{"id":112506,"depth":106,"text":112507},{"id":103827,"depth":79,"text":103828},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110657,"description":64},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112575,"title":112576,"body":112577,"description":64,"extension":1323,"meta":114591,"navigation":1325,"path":114592,"seo":114593,"stem":114594,"__hash__":114595},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112578,"toc":114567},[112579,112582,112584,112587,112589,112606,112609,112612,112618,112621,112623,112625,112649,112651,112665,112667,112708,112710,112728,112730,112733,112739,112742,112770,112774,112780,112805,112808,112839,112846,112849,112852,112858,112861,112867,112870,112876,112880,112883,112908,112911,112913,113673,113675,113687,113689,113700,113702,113705,113722,113725,113727,113738,113741,113743,113789,113792,113805,113808,113890,113893,113895,113911,113921,113934,113937,113976,113986,113997,114007,114020,114023,114052,114055,114065,114068,114074,114091,114102,114104,114110,114127,114138,114159,114162,114174,114177,114198,114201,114209,114217,114234,114237,114306,114313,114321,114324,114337,114344,114346,114349,114355,114358,114361,114367,114373,114375,114415,114417,114423,114432,114435,114437,114457,114460,114463,114469,114473,114475,114502,114505,114508,114535,114541,114544,114547,114549,114552,114555,114561,114564],[10,112580,112576],{"id":112581},"_7控制任务reacher-机械臂到达目标",[14,112583,101868],{"id":101867},[29,112585,112586],{},"本章搭建一个二维两关节 reacher 任务。",[29,112588,105552],{},[37,112590,112591,112594,112597,112600,112603],{},[40,112592,112593],{},"两个 hinge joint",[40,112595,112596],{},"两个 motor actuator",[40,112598,112599],{},"site 作为末端点和目标点",[40,112601,112602],{},"根据末端和目标距离设计 reward",[40,112604,112605],{},"构造机械臂任务的基本形式",[29,112607,112608],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[29,112610,112611],{},"Reacher 任务可以理解为：",[59,112613,112616],{"className":112614,"code":112615,"language":540,"meta":64},[538],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[66,112617,112615],{"__ignoreMap":64},[29,112619,112620],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112622,101991],{"id":101990},[29,112624,101994],{},[59,112626,112627],{"className":25059,"code":105609,"language":25061,"meta":64,"style":64},[66,112628,112629],{"__ignoreMap":64},[69,112630,112631,112633,112635,112637,112639,112641,112643,112645,112647],{"class":71,"line":72},[69,112632,25813],{"class":109},[69,112634,27551],{"class":1022},[69,112636,25071],{"class":1022},[69,112638,27636],{"class":90},[69,112640,105624],{"class":1022},[69,112642,102019],{"class":1022},[69,112644,103722],{"class":1022},[69,112646,102035],{"class":1022},[69,112648,105633],{"class":1022},[29,112650,104040],{},[59,112652,112653],{"className":25059,"code":102140,"language":25061,"meta":64,"style":64},[66,112654,112655],{"__ignoreMap":64},[69,112656,112657,112659,112661,112663],{"class":71,"line":72},[69,112658,25068],{"class":109},[69,112660,25071],{"class":1022},[69,112662,102151],{"class":1022},[69,112664,102154],{"class":1022},[29,112666,104057],{},[59,112668,112670],{"className":25059,"code":112669,"language":25061,"meta":64,"style":64},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[66,112671,112672,112689,112698],{"__ignoreMap":64},[69,112673,112674,112676,112678,112680,112683,112685,112687],{"class":71,"line":72},[69,112675,31566],{"class":109},[69,112677,30412],{"class":1022},[69,112679,26352],{"class":90},[69,112681,112682],{"class":1022}," mujoco-reacher",[69,112684,102196],{"class":1022},[69,112686,102199],{"class":90},[69,112688,102202],{"class":90},[69,112690,112691,112693,112695],{"class":71,"line":79},[69,112692,31566],{"class":109},[69,112694,102209],{"class":1022},[69,112696,112697],{"class":1022}," mujoco-reacher\n",[69,112699,112700,112702,112704,112706],{"class":71,"line":106},[69,112701,25068],{"class":109},[69,112703,25071],{"class":1022},[69,112705,102151],{"class":1022},[69,112707,102154],{"class":1022},[29,112709,102225],{},[37,112711,112712,112715,112718],{},[40,112713,112714],{},"本章使用低维状态，不使用图像输入。",[40,112716,112717],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[40,112719,112720,112721,1604,112723,1604,112725,112727],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[66,112722,105251],{},[66,112724,105581],{},[66,112726,104901],{}," 的方法一致。",[14,112729,102266],{"id":102265},[29,112731,112732],{},"Reacher 任务核心:",[59,112734,112737],{"className":112735,"code":112736,"language":540,"meta":64},[538],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[66,112738,112736],{"__ignoreMap":64},[29,112740,112741],{},"读取 site 世界坐标:",[59,112743,112745],{"className":31614,"code":112744,"language":31616,"meta":64,"style":64},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[66,112746,112747,112760],{"__ignoreMap":64},[69,112748,112749,112751,112753,112755,112758],{"class":71,"line":72},[69,112750,104855],{"class":86},[69,112752,1019],{"class":82},[69,112754,104626],{"class":86},[69,112756,112757],{"class":1022},"\"tip\"",[69,112759,1404],{"class":86},[69,112761,112762,112765,112767],{"class":71,"line":79},[69,112763,112764],{"class":86},"tip_pos ",[69,112766,1019],{"class":82},[69,112768,112769],{"class":86}," data.site_xpos[site_id]\n",[19,112771,112773],{"id":112772},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[29,112775,112776,112777,112779],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[66,112778,105251],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[59,112781,112783],{"className":31614,"code":112782,"language":31616,"meta":64,"style":64},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[66,112784,112785,112795],{"__ignoreMap":64},[69,112786,112787,112790,112792],{"class":71,"line":72},[69,112788,112789],{"class":86},"tip ",[69,112791,1019],{"class":82},[69,112793,112794],{"class":86}," data.site_xpos[tip_site_id]\n",[69,112796,112797,112800,112802],{"class":71,"line":79},[69,112798,112799],{"class":86},"target ",[69,112801,1019],{"class":82},[69,112803,112804],{"class":86}," data.site_xpos[target_site_id]\n",[29,112806,112807],{},"这样 reward 就很容易写：",[59,112809,112811],{"className":31614,"code":112810,"language":31616,"meta":64,"style":64},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[66,112812,112813,112828],{"__ignoreMap":64},[69,112814,112815,112818,112820,112823,112825],{"class":71,"line":72},[69,112816,112817],{"class":86},"dist ",[69,112819,1019],{"class":82},[69,112821,112822],{"class":86}," np.linalg.norm(tip ",[69,112824,1920],{"class":82},[69,112826,112827],{"class":86}," target)\n",[69,112829,112830,112832,112834,112836],{"class":71,"line":79},[69,112831,112226],{"class":86},[69,112833,1019],{"class":82},[69,112835,53499],{"class":82},[69,112837,112838],{"class":86},"dist\n",[29,112840,112841,112842,112845],{},"距离越小，",[66,112843,112844],{},"-dist"," 越接近 0，奖励越高。",[19,112847,112848],{"id":112848},"两关节机械臂的状态",[29,112850,112851],{},"这个模型有两个 hinge joint：",[59,112853,112856],{"className":112854,"code":112855,"language":540,"meta":64},[538],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[66,112857,112855],{"__ignoreMap":64},[29,112859,112860],{},"再加上末端和目标位置：",[59,112862,112865],{"className":112863,"code":112864,"language":540,"meta":64},[538],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[66,112866,112864],{"__ignoreMap":64},[29,112868,112869],{},"总维度：",[59,112871,112874],{"className":112872,"code":112873,"language":540,"meta":64},[538],"2 + 2 + 3 + 3 = 10\n",[66,112875,112873],{"__ignoreMap":64},[19,112877,112879],{"id":112878},"为什么-gravity-是-0","为什么 gravity 是 0",[29,112881,112882],{},"本章把重力设为：",[59,112884,112886],{"className":54295,"code":112885,"language":54297,"meta":64,"style":64},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[66,112887,112888],{"__ignoreMap":64},[69,112889,112890,112892,112894,112896,112898,112900,112902,112904,112906],{"class":71,"line":72},[69,112891,1011],{"class":86},[69,112893,70391],{"class":348},[69,112895,102415],{"class":109},[69,112897,1019],{"class":86},[69,112899,102420],{"class":1022},[69,112901,102423],{"class":109},[69,112903,1019],{"class":86},[69,112905,104992],{"class":1022},[69,112907,102365],{"class":86},[29,112909,112910],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112912,102474],{"id":102473},[59,112914,112916],{"className":31614,"code":112915,"language":31616,"meta":64,"style":64},"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",[66,112917,112918,112924,112934,112938,112942,112950,112955,112960,112964,112968,112973,112978,112982,112987,112992,112997,113001,113006,113011,113016,113021,113025,113029,113033,113037,113041,113046,113051,113055,113059,113063,113067,113071,113086,113095,113107,113130,113137,113141,113145,113155,113169,113183,113190,113194,113198,113212,113224,113236,113249,113264,113281,113285,113289,113301,113313,113321,113329,113333,113349,113354,113367,113380,113395,113399,113434,113466,113470,113474,113483,113487,113503,113513,113524,113540,113556,113572,113588,113592,113610,113630,113649,113653,113657,113669],{"__ignoreMap":64},[69,112919,112920,112922],{"class":71,"line":72},[69,112921,31628],{"class":82},[69,112923,102522],{"class":86},[69,112925,112926,112928,112930,112932],{"class":71,"line":79},[69,112927,31628],{"class":82},[69,112929,32616],{"class":86},[69,112931,32619],{"class":82},[69,112933,32622],{"class":86},[69,112935,112936],{"class":71,"line":106},[69,112937,3644],{"emptyLinePlaceholder":1325},[69,112939,112940],{"class":71,"line":116},[69,112941,3644],{"emptyLinePlaceholder":1325},[69,112943,112944,112946,112948],{"class":71,"line":133},[69,112945,102535],{"class":90},[69,112947,14805],{"class":82},[69,112949,102540],{"class":1022},[69,112951,112952],{"class":71,"line":139},[69,112953,112954],{"class":1022},"\u003Cmujoco model=\"two_link_reacher\">\n",[69,112956,112957],{"class":71,"line":401},[69,112958,112959],{"class":1022},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[69,112961,112962],{"class":71,"line":470},[69,112963,3644],{"emptyLinePlaceholder":1325},[69,112965,112966],{"class":71,"line":475},[69,112967,102559],{"class":1022},[69,112969,112970],{"class":71,"line":482},[69,112971,112972],{"class":1022},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[69,112974,112975],{"class":71,"line":497},[69,112976,112977],{"class":1022},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[69,112979,112980],{"class":71,"line":502},[69,112981,3644],{"emptyLinePlaceholder":1325},[69,112983,112984],{"class":71,"line":509},[69,112985,112986],{"class":1022},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[69,112988,112989],{"class":71,"line":524},[69,112990,112991],{"class":1022},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[69,112993,112994],{"class":71,"line":2888},[69,112995,112996],{"class":1022},"      \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",[69,112998,112999],{"class":71,"line":2893},[69,113000,3644],{"emptyLinePlaceholder":1325},[69,113002,113003],{"class":71,"line":2899},[69,113004,113005],{"class":1022},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[69,113007,113008],{"class":71,"line":2919},[69,113009,113010],{"class":1022},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[69,113012,113013],{"class":71,"line":2924},[69,113014,113015],{"class":1022},"        \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",[69,113017,113018],{"class":71,"line":2938},[69,113019,113020],{"class":1022},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[69,113022,113023],{"class":71,"line":2943},[69,113024,107659],{"class":1022},[69,113026,113027],{"class":71,"line":2972},[69,113028,102588],{"class":1022},[69,113030,113031],{"class":71,"line":2977},[69,113032,102593],{"class":1022},[69,113034,113035],{"class":71,"line":2994},[69,113036,3644],{"emptyLinePlaceholder":1325},[69,113038,113039],{"class":71,"line":2999},[69,113040,107676],{"class":1022},[69,113042,113043],{"class":71,"line":3004},[69,113044,113045],{"class":1022},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[69,113047,113048],{"class":71,"line":3009},[69,113049,113050],{"class":1022},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[69,113052,113053],{"class":71,"line":3023},[69,113054,107686],{"class":1022},[69,113056,113057],{"class":71,"line":3028},[69,113058,102598],{"class":1022},[69,113060,113061],{"class":71,"line":3821},[69,113062,96919],{"class":1022},[69,113064,113065],{"class":71,"line":3835},[69,113066,3644],{"emptyLinePlaceholder":1325},[69,113068,113069],{"class":71,"line":3843},[69,113070,3644],{"emptyLinePlaceholder":1325},[69,113072,113073,113075,113078,113081,113083],{"class":71,"line":3848},[69,113074,33183],{"class":82},[69,113076,113077],{"class":109}," site_position",[69,113079,113080],{"class":86},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[69,113082,2554],{"class":90},[69,113084,113085],{"class":86},") -> np.ndarray:\n",[69,113087,113088,113090,113092],{"class":71,"line":3854},[69,113089,104621],{"class":86},[69,113091,1019],{"class":82},[69,113093,113094],{"class":86}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[69,113096,113097,113099,113101,113103,113105],{"class":71,"line":3860},[69,113098,4345],{"class":82},[69,113100,104670],{"class":86},[69,113102,1011],{"class":82},[69,113104,5337],{"class":90},[69,113106,4983],{"class":86},[69,113108,113109,113111,113113,113115,113117,113120,113122,113124,113126,113128],{"class":71,"line":3865},[69,113110,104653],{"class":82},[69,113112,104656],{"class":90},[69,113114,1398],{"class":86},[69,113116,1447],{"class":82},[69,113118,113119],{"class":1022},"\"site not found: ",[69,113121,2283],{"class":90},[69,113123,81031],{"class":86},[69,113125,2332],{"class":90},[69,113127,1642],{"class":1022},[69,113129,1404],{"class":86},[69,113131,113132,113134],{"class":71,"line":9190},[69,113133,5334],{"class":82},[69,113135,113136],{"class":86}," data.site_xpos[site_id].copy()\n",[69,113138,113139],{"class":71,"line":9214},[69,113140,3644],{"emptyLinePlaceholder":1325},[69,113142,113143],{"class":71,"line":9219},[69,113144,3644],{"emptyLinePlaceholder":1325},[69,113146,113147,113149,113152],{"class":71,"line":9225},[69,113148,33183],{"class":82},[69,113150,113151],{"class":109}," get_obs",[69,113153,113154],{"class":86},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[69,113156,113157,113160,113162,113165,113167],{"class":71,"line":9252},[69,113158,113159],{"class":86},"    tip ",[69,113161,1019],{"class":82},[69,113163,113164],{"class":86}," site_position(model, data, ",[69,113166,112757],{"class":1022},[69,113168,1404],{"class":86},[69,113170,113171,113174,113176,113178,113181],{"class":71,"line":9257},[69,113172,113173],{"class":86},"    target ",[69,113175,1019],{"class":82},[69,113177,113164],{"class":86},[69,113179,113180],{"class":1022},"\"target\"",[69,113182,1404],{"class":86},[69,113184,113185,113187],{"class":71,"line":9263},[69,113186,5334],{"class":82},[69,113188,113189],{"class":86}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[69,113191,113192],{"class":71,"line":9275},[69,113193,3644],{"emptyLinePlaceholder":1325},[69,113195,113196],{"class":71,"line":9287},[69,113197,3644],{"emptyLinePlaceholder":1325},[69,113199,113200,113202,113205,113208,113210],{"class":71,"line":9299},[69,113201,33183],{"class":82},[69,113203,113204],{"class":109}," reward",[69,113206,113207],{"class":86},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[69,113209,1436],{"class":90},[69,113211,4983],{"class":86},[69,113213,113214,113216,113218,113220,113222],{"class":71,"line":10958},[69,113215,113159],{"class":86},[69,113217,1019],{"class":82},[69,113219,113164],{"class":86},[69,113221,112757],{"class":1022},[69,113223,1404],{"class":86},[69,113225,113226,113228,113230,113232,113234],{"class":71,"line":10983},[69,113227,113173],{"class":86},[69,113229,1019],{"class":82},[69,113231,113164],{"class":86},[69,113233,113180],{"class":1022},[69,113235,1404],{"class":86},[69,113237,113238,113241,113243,113245,113247],{"class":71,"line":11006},[69,113239,113240],{"class":86},"    dist ",[69,113242,1019],{"class":82},[69,113244,112822],{"class":86},[69,113246,1920],{"class":82},[69,113248,112827],{"class":86},[69,113250,113251,113254,113256,113259,113261],{"class":71,"line":11030},[69,113252,113253],{"class":86},"    control_cost ",[69,113255,1019],{"class":82},[69,113257,113258],{"class":90}," 0.01",[69,113260,7760],{"class":82},[69,113262,113263],{"class":86}," np.sum(np.square(data.ctrl))\n",[69,113265,113266,113268,113270,113272,113274,113276,113278],{"class":71,"line":11035},[69,113267,5334],{"class":82},[69,113269,111018],{"class":90},[69,113271,1398],{"class":86},[69,113273,1920],{"class":82},[69,113275,112817],{"class":86},[69,113277,1920],{"class":82},[69,113279,113280],{"class":86}," control_cost)\n",[69,113282,113283],{"class":71,"line":11040},[69,113284,3644],{"emptyLinePlaceholder":1325},[69,113286,113287],{"class":71,"line":11045},[69,113288,3644],{"emptyLinePlaceholder":1325},[69,113290,113291,113293,113295,113297,113299],{"class":71,"line":11054},[69,113292,33183],{"class":82},[69,113294,3217],{"class":109},[69,113296,102619],{"class":86},[69,113298,96907],{"class":90},[69,113300,4983],{"class":86},[69,113302,113303,113305,113307,113309,113311],{"class":71,"line":11059},[69,113304,102628],{"class":86},[69,113306,1019],{"class":82},[69,113308,102633],{"class":86},[69,113310,102535],{"class":90},[69,113312,1404],{"class":86},[69,113314,113315,113317,113319],{"class":71,"line":11065},[69,113316,102642],{"class":86},[69,113318,1019],{"class":82},[69,113320,102647],{"class":86},[69,113322,113323,113325,113327],{"class":71,"line":11086},[69,113324,111374],{"class":86},[69,113326,1019],{"class":82},[69,113328,105982],{"class":90},[69,113330,113331],{"class":71,"line":11092},[69,113332,3644],{"emptyLinePlaceholder":1325},[69,113334,113335,113337,113339,113341,113343,113345,113347],{"class":71,"line":11106},[69,113336,4445],{"class":82},[69,113338,32852],{"class":86},[69,113340,27280],{"class":82},[69,113342,33679],{"class":90},[69,113344,1398],{"class":86},[69,113346,66300],{"class":90},[69,113348,32022],{"class":86},[69,113350,113351],{"class":71,"line":11112},[69,113352,113353],{"class":86},"        mujoco.mj_forward(model, data)\n",[69,113355,113356,113359,113361,113363,113365],{"class":71,"line":11139},[69,113357,113358],{"class":86},"        tip ",[69,113360,1019],{"class":82},[69,113362,113164],{"class":86},[69,113364,112757],{"class":1022},[69,113366,1404],{"class":86},[69,113368,113369,113372,113374,113376,113378],{"class":71,"line":11148},[69,113370,113371],{"class":86},"        target ",[69,113373,1019],{"class":82},[69,113375,113164],{"class":86},[69,113377,113180],{"class":1022},[69,113379,1404],{"class":86},[69,113381,113382,113385,113387,113390,113392],{"class":71,"line":11154},[69,113383,113384],{"class":86},"        error ",[69,113386,1019],{"class":82},[69,113388,113389],{"class":86}," target ",[69,113391,1920],{"class":82},[69,113393,113394],{"class":86}," tip\n",[69,113396,113397],{"class":71,"line":11162},[69,113398,3644],{"emptyLinePlaceholder":1325},[69,113400,113401,113403,113405,113407,113409,113412,113414,113416,113419,113421,113424,113426,113428,113430,113432],{"class":71,"line":11167},[69,113402,107838],{"class":86},[69,113404,1583],{"class":90},[69,113406,5687],{"class":86},[69,113408,1019],{"class":82},[69,113410,113411],{"class":86}," np.clip(",[69,113413,106481],{"class":90},[69,113415,7760],{"class":82},[69,113417,113418],{"class":86}," error[",[69,113420,1471],{"class":90},[69,113422,113423],{"class":86},"], ",[69,113425,1920],{"class":82},[69,113427,103624],{"class":90},[69,113429,13677],{"class":86},[69,113431,103624],{"class":90},[69,113433,1404],{"class":86},[69,113435,113436,113438,113440,113442,113444,113446,113448,113450,113452,113454,113456,113458,113460,113462,113464],{"class":71,"line":17843},[69,113437,107838],{"class":86},[69,113439,1609],{"class":90},[69,113441,5687],{"class":86},[69,113443,1019],{"class":82},[69,113445,113411],{"class":86},[69,113447,106481],{"class":90},[69,113449,7760],{"class":82},[69,113451,113418],{"class":86},[69,113453,1583],{"class":90},[69,113455,113423],{"class":86},[69,113457,1920],{"class":82},[69,113459,103624],{"class":90},[69,113461,13677],{"class":86},[69,113463,103624],{"class":90},[69,113465,1404],{"class":86},[69,113467,113468],{"class":71,"line":17849},[69,113469,3644],{"emptyLinePlaceholder":1325},[69,113471,113472],{"class":71,"line":17872},[69,113473,102737],{"class":86},[69,113475,113476,113478,113480],{"class":71,"line":17878},[69,113477,111518],{"class":86},[69,113479,10719],{"class":82},[69,113481,113482],{"class":86}," reward(model, data)\n",[69,113484,113485],{"class":71,"line":17901},[69,113486,3644],{"emptyLinePlaceholder":1325},[69,113488,113489,113491,113493,113495,113497,113499,113501],{"class":71,"line":17915},[69,113490,3741],{"class":82},[69,113492,32852],{"class":86},[69,113494,127],{"class":82},[69,113496,6996],{"class":90},[69,113498,102780],{"class":82},[69,113500,5337],{"class":90},[69,113502,4983],{"class":86},[69,113504,113505,113508,113510],{"class":71,"line":17935},[69,113506,113507],{"class":86},"            obs ",[69,113509,1019],{"class":82},[69,113511,113512],{"class":86}," get_obs(model, data)\n",[69,113514,113515,113517,113519,113521],{"class":71,"line":17941},[69,113516,35886],{"class":90},[69,113518,1398],{"class":86},[69,113520,111552],{"class":1022},[69,113522,113523],{"class":86},", step)\n",[69,113525,113526,113528,113530,113533,113536,113538],{"class":71,"line":17952},[69,113527,35886],{"class":90},[69,113529,1398],{"class":86},[69,113531,113532],{"class":1022},"\"  tip:\"",[69,113534,113535],{"class":86},", np.round(tip, ",[69,113537,1465],{"class":90},[69,113539,31733],{"class":86},[69,113541,113542,113544,113546,113549,113552,113554],{"class":71,"line":17975},[69,113543,35886],{"class":90},[69,113545,1398],{"class":86},[69,113547,113548],{"class":1022},"\"  target:\"",[69,113550,113551],{"class":86},", np.round(target, ",[69,113553,1465],{"class":90},[69,113555,31733],{"class":86},[69,113557,113558,113560,113562,113565,113568,113570],{"class":71,"line":17997},[69,113559,35886],{"class":90},[69,113561,1398],{"class":86},[69,113563,113564],{"class":1022},"\"  ctrl:\"",[69,113566,113567],{"class":86},", np.round(data.ctrl.copy(), ",[69,113569,1465],{"class":90},[69,113571,31733],{"class":86},[69,113573,113574,113576,113578,113581,113584,113586],{"class":71,"line":18002},[69,113575,35886],{"class":90},[69,113577,1398],{"class":86},[69,113579,113580],{"class":1022},"\"  obs_dim:\"",[69,113582,113583],{"class":86},", obs.shape[",[69,113585,1583],{"class":90},[69,113587,5901],{"class":86},[69,113589,113590],{"class":71,"line":18008},[69,113591,3644],{"emptyLinePlaceholder":1325},[69,113593,113594,113596,113598,113600,113602,113604,113606,113608],{"class":71,"line":18022},[69,113595,32535],{"class":90},[69,113597,1398],{"class":86},[69,113599,111597],{"class":1022},[69,113601,13677],{"class":86},[69,113603,33254],{"class":90},[69,113605,111604],{"class":86},[69,113607,1465],{"class":90},[69,113609,31733],{"class":86},[69,113611,113612,113614,113616,113619,113622,113624,113626,113628],{"class":71,"line":18035},[69,113613,32535],{"class":90},[69,113615,1398],{"class":86},[69,113617,113618],{"class":1022},"\"final tip:\"",[69,113620,113621],{"class":86},", np.round(site_position(model, data, ",[69,113623,112757],{"class":1022},[69,113625,111566],{"class":86},[69,113627,1465],{"class":90},[69,113629,31733],{"class":86},[69,113631,113632,113634,113636,113639,113641,113643,113645,113647],{"class":71,"line":18040},[69,113633,32535],{"class":90},[69,113635,1398],{"class":86},[69,113637,113638],{"class":1022},"\"target:\"",[69,113640,113621],{"class":86},[69,113642,113180],{"class":1022},[69,113644,111566],{"class":86},[69,113646,1465],{"class":90},[69,113648,31733],{"class":86},[69,113650,113651],{"class":71,"line":18054},[69,113652,3644],{"emptyLinePlaceholder":1325},[69,113654,113655],{"class":71,"line":18059},[69,113656,3644],{"emptyLinePlaceholder":1325},[69,113658,113659,113661,113663,113665,113667],{"class":71,"line":18065},[69,113660,2782],{"class":82},[69,113662,32456],{"class":90},[69,113664,102780],{"class":82},[69,113666,102783],{"class":1022},[69,113668,4983],{"class":86},[69,113670,113671],{"class":71,"line":18070},[69,113672,102790],{"class":86},[29,113674,104791],{},[59,113676,113678],{"className":25059,"code":113677,"language":25061,"meta":64,"style":64},"touch ch7_reacher.py\n",[66,113679,113680],{"__ignoreMap":64},[69,113681,113682,113684],{"class":71,"line":72},[69,113683,102504],{"class":109},[69,113685,113686],{"class":1022}," ch7_reacher.py\n",[29,113688,111665],{},[59,113690,113692],{"className":25059,"code":113691,"language":25061,"meta":64,"style":64},"python ch7_reacher.py\n",[66,113693,113694],{"__ignoreMap":64},[69,113695,113696,113698],{"class":71,"line":72},[69,113697,31616],{"class":109},[69,113699,113686],{"class":1022},[19,113701,102793],{"id":102793},[29,113703,113704],{},"读取 site 坐标：",[59,113706,113708],{"className":31614,"code":113707,"language":31616,"meta":64,"style":64},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[66,113709,113710],{"__ignoreMap":64},[69,113711,113712,113714,113716,113718,113720],{"class":71,"line":72},[69,113713,33183],{"class":82},[69,113715,113077],{"class":109},[69,113717,113080],{"class":86},[69,113719,2554],{"class":90},[69,113721,113085],{"class":86},[29,113723,113724],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[29,113726,111681],{},[59,113728,113730],{"className":31614,"code":113729,"language":31616,"meta":64,"style":64},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[66,113731,113732],{"__ignoreMap":64},[69,113733,113734,113736],{"class":71,"line":72},[69,113735,18285],{"class":82},[69,113737,113189],{"class":86},[29,113739,113740],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[29,113742,111006],{},[59,113744,113746],{"className":31614,"code":113745,"language":31616,"meta":64,"style":64},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[66,113747,113748,113760,113773],{"__ignoreMap":64},[69,113749,113750,113752,113754,113756,113758],{"class":71,"line":72},[69,113751,112817],{"class":86},[69,113753,1019],{"class":82},[69,113755,112822],{"class":86},[69,113757,1920],{"class":82},[69,113759,112827],{"class":86},[69,113761,113762,113765,113767,113769,113771],{"class":71,"line":79},[69,113763,113764],{"class":86},"control_cost ",[69,113766,1019],{"class":82},[69,113768,113258],{"class":90},[69,113770,7760],{"class":82},[69,113772,113263],{"class":86},[69,113774,113775,113777,113779,113781,113783,113785,113787],{"class":71,"line":106},[69,113776,18285],{"class":82},[69,113778,111018],{"class":90},[69,113780,1398],{"class":86},[69,113782,1920],{"class":82},[69,113784,112817],{"class":86},[69,113786,1920],{"class":82},[69,113788,113280],{"class":86},[29,113790,113791],{},"奖励由两部分组成：",[37,113793,113794,113799],{},[40,113795,113796,113798],{},[66,113797,112844],{},"：末端离目标越远，奖励越低。",[40,113800,113801,113804],{},[66,113802,113803],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[29,113806,113807],{},"简单控制器：",[59,113809,113811],{"className":31614,"code":113810,"language":31616,"meta":64,"style":64},"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",[66,113812,113813,113826,113858],{"__ignoreMap":64},[69,113814,113815,113818,113820,113822,113824],{"class":71,"line":72},[69,113816,113817],{"class":86},"error ",[69,113819,1019],{"class":82},[69,113821,113389],{"class":86},[69,113823,1920],{"class":82},[69,113825,113394],{"class":86},[69,113827,113828,113830,113832,113834,113836,113838,113840,113842,113844,113846,113848,113850,113852,113854,113856],{"class":71,"line":79},[69,113829,107092],{"class":86},[69,113831,1583],{"class":90},[69,113833,5687],{"class":86},[69,113835,1019],{"class":82},[69,113837,113411],{"class":86},[69,113839,106481],{"class":90},[69,113841,7760],{"class":82},[69,113843,113418],{"class":86},[69,113845,1471],{"class":90},[69,113847,113423],{"class":86},[69,113849,1920],{"class":82},[69,113851,103624],{"class":90},[69,113853,13677],{"class":86},[69,113855,103624],{"class":90},[69,113857,1404],{"class":86},[69,113859,113860,113862,113864,113866,113868,113870,113872,113874,113876,113878,113880,113882,113884,113886,113888],{"class":71,"line":106},[69,113861,107092],{"class":86},[69,113863,1609],{"class":90},[69,113865,5687],{"class":86},[69,113867,1019],{"class":82},[69,113869,113411],{"class":86},[69,113871,106481],{"class":90},[69,113873,7760],{"class":82},[69,113875,113418],{"class":86},[69,113877,1583],{"class":90},[69,113879,113423],{"class":86},[69,113881,1920],{"class":82},[69,113883,103624],{"class":90},[69,113885,13677],{"class":86},[69,113887,103624],{"class":90},[69,113889,1404],{"class":86},[29,113891,113892],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[19,113894,102929],{"id":102929},[59,113896,113897],{"className":31614,"code":113707,"language":31616,"meta":64,"style":64},[66,113898,113899],{"__ignoreMap":64},[69,113900,113901,113903,113905,113907,113909],{"class":71,"line":72},[69,113902,33183],{"class":82},[69,113904,113077],{"class":109},[69,113906,113080],{"class":86},[69,113908,2554],{"class":90},[69,113910,113085],{"class":86},[29,113912,113913,113914,113916,113917,83760,113919,29621],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[66,113915,81031],{}," 是 site 的名字，比如 ",[66,113918,112757],{},[66,113920,113180],{},[59,113922,113924],{"className":31614,"code":113923,"language":31616,"meta":64,"style":64},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[66,113925,113926],{"__ignoreMap":64},[69,113927,113928,113930,113932],{"class":71,"line":72},[69,113929,104855],{"class":86},[69,113931,1019],{"class":82},[69,113933,113094],{"class":86},[29,113935,113936],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[59,113938,113940],{"className":31614,"code":113939,"language":31616,"meta":64,"style":64},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[66,113941,113942,113954],{"__ignoreMap":64},[69,113943,113944,113946,113948,113950,113952],{"class":71,"line":72},[69,113945,2782],{"class":82},[69,113947,104670],{"class":86},[69,113949,1011],{"class":82},[69,113951,5337],{"class":90},[69,113953,4983],{"class":86},[69,113955,113956,113958,113960,113962,113964,113966,113968,113970,113972,113974],{"class":71,"line":79},[69,113957,105116],{"class":82},[69,113959,104656],{"class":90},[69,113961,1398],{"class":86},[69,113963,1447],{"class":82},[69,113965,113119],{"class":1022},[69,113967,2283],{"class":90},[69,113969,81031],{"class":86},[69,113971,2332],{"class":90},[69,113973,1642],{"class":1022},[69,113975,1404],{"class":86},[29,113977,113978,113979,113982,113983,113985],{},"如果 site 没找到，就主动报错。",[66,113980,113981],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[66,113984,81031],{}," 的值放进字符串里。",[59,113987,113989],{"className":31614,"code":113988,"language":31616,"meta":64,"style":64},"return data.site_xpos[site_id].copy()\n",[66,113990,113991],{"__ignoreMap":64},[69,113992,113993,113995],{"class":71,"line":72},[69,113994,18285],{"class":82},[69,113996,113136],{"class":86},[29,113998,113999,114000,114002,114003,114006],{},"返回这个 site 的世界坐标。",[66,114001,104901],{}," 里的每一行都是一个 site 的 ",[66,114004,114005],{},"(x, y, z)"," 坐标。",[59,114008,114010],{"className":31614,"code":114009,"language":31616,"meta":64,"style":64},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[66,114011,114012],{"__ignoreMap":64},[69,114013,114014,114016,114018],{"class":71,"line":72},[69,114015,33183],{"class":82},[69,114017,113151],{"class":109},[69,114019,113154],{"class":86},[29,114021,114022],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[59,114024,114026],{"className":31614,"code":114025,"language":31616,"meta":64,"style":64},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[66,114027,114028,114040],{"__ignoreMap":64},[69,114029,114030,114032,114034,114036,114038],{"class":71,"line":72},[69,114031,112789],{"class":86},[69,114033,1019],{"class":82},[69,114035,113164],{"class":86},[69,114037,112757],{"class":1022},[69,114039,1404],{"class":86},[69,114041,114042,114044,114046,114048,114050],{"class":71,"line":79},[69,114043,112799],{"class":86},[69,114045,1019],{"class":82},[69,114047,113164],{"class":86},[69,114049,113180],{"class":1022},[69,114051,1404],{"class":86},[29,114053,114054],{},"分别读取末端点和目标点的世界坐标。",[59,114056,114057],{"className":31614,"code":113729,"language":31616,"meta":64,"style":64},[66,114058,114059],{"__ignoreMap":64},[69,114060,114061,114063],{"class":71,"line":72},[69,114062,18285],{"class":82},[69,114064,113189],{"class":86},[29,114066,114067],{},"把四部分拼成一个观测数组：",[59,114069,114072],{"className":114070,"code":114071,"language":540,"meta":64},[538],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[66,114073,114071],{"__ignoreMap":64},[59,114075,114077],{"className":31614,"code":114076,"language":31616,"meta":64,"style":64},"dist = np.linalg.norm(tip - target)\n",[66,114078,114079],{"__ignoreMap":64},[69,114080,114081,114083,114085,114087,114089],{"class":71,"line":72},[69,114082,112817],{"class":86},[69,114084,1019],{"class":82},[69,114086,112822],{"class":86},[69,114088,1920],{"class":82},[69,114090,112827],{"class":86},[29,114092,114093,114094,114097,114098,114101],{},"计算 tip 到 target 的距离。",[66,114095,114096],{},"tip - target"," 得到一个三维向量，",[66,114099,114100],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[29,114103,327],{},[59,114105,114108],{"className":114106,"code":114107,"language":540,"meta":64},[538],"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",[66,114109,114107],{"__ignoreMap":64},[59,114111,114113],{"className":31614,"code":114112,"language":31616,"meta":64,"style":64},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[66,114114,114115],{"__ignoreMap":64},[69,114116,114117,114119,114121,114123,114125],{"class":71,"line":72},[69,114118,113764],{"class":86},[69,114120,1019],{"class":82},[69,114122,113258],{"class":90},[69,114124,7760],{"class":82},[69,114126,113263],{"class":86},[29,114128,114129,114130,114133,114134,114137],{},"计算动作惩罚。",[66,114131,114132],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[66,114135,114136],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[59,114139,114141],{"className":31614,"code":114140,"language":31616,"meta":64,"style":64},"return float(-dist - control_cost)\n",[66,114142,114143],{"__ignoreMap":64},[69,114144,114145,114147,114149,114151,114153,114155,114157],{"class":71,"line":72},[69,114146,18285],{"class":82},[69,114148,111018],{"class":90},[69,114150,1398],{"class":86},[69,114152,1920],{"class":82},[69,114154,112817],{"class":86},[69,114156,1920],{"class":82},[69,114158,113280],{"class":86},[29,114160,114161],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[59,114163,114164],{"className":31614,"code":112024,"language":31616,"meta":64,"style":64},[66,114165,114166],{"__ignoreMap":64},[69,114167,114168,114170,114172],{"class":71,"line":72},[69,114169,112031],{"class":86},[69,114171,1019],{"class":82},[69,114173,105982],{"class":90},[29,114175,114176],{},"累计奖励变量，记录整个运行过程的总分。",[59,114178,114180],{"className":31614,"code":114179,"language":31616,"meta":64,"style":64},"for step in range(500):\n",[66,114181,114182],{"__ignoreMap":64},[69,114183,114184,114186,114188,114190,114192,114194,114196],{"class":71,"line":72},[69,114185,4269],{"class":82},[69,114187,32852],{"class":86},[69,114189,27280],{"class":82},[69,114191,33679],{"class":90},[69,114193,1398],{"class":86},[69,114195,66300],{"class":90},[69,114197,32022],{"class":86},[29,114199,114200],{},"运行 500 个控制步。",[59,114202,114203],{"className":31614,"code":105764,"language":31616,"meta":64,"style":64},[66,114204,114205],{"__ignoreMap":64},[69,114206,114207],{"class":71,"line":72},[69,114208,105764],{"class":86},[29,114210,114211,114212,102239,114214,114216],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[66,114213,104452],{},[66,114215,104455],{}," 是当前状态下的坐标。",[59,114218,114220],{"className":31614,"code":114219,"language":31616,"meta":64,"style":64},"error = target - tip\n",[66,114221,114222],{"__ignoreMap":64},[69,114223,114224,114226,114228,114230,114232],{"class":71,"line":72},[69,114225,113817],{"class":86},[69,114227,1019],{"class":82},[69,114229,113389],{"class":86},[69,114231,1920],{"class":82},[69,114233,113394],{"class":86},[29,114235,114236],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[59,114238,114240],{"className":31614,"code":114239,"language":31616,"meta":64,"style":64},"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",[66,114241,114242,114274],{"__ignoreMap":64},[69,114243,114244,114246,114248,114250,114252,114254,114256,114258,114260,114262,114264,114266,114268,114270,114272],{"class":71,"line":72},[69,114245,107092],{"class":86},[69,114247,1583],{"class":90},[69,114249,5687],{"class":86},[69,114251,1019],{"class":82},[69,114253,113411],{"class":86},[69,114255,106481],{"class":90},[69,114257,7760],{"class":82},[69,114259,113418],{"class":86},[69,114261,1471],{"class":90},[69,114263,113423],{"class":86},[69,114265,1920],{"class":82},[69,114267,103624],{"class":90},[69,114269,13677],{"class":86},[69,114271,103624],{"class":90},[69,114273,1404],{"class":86},[69,114275,114276,114278,114280,114282,114284,114286,114288,114290,114292,114294,114296,114298,114300,114302,114304],{"class":71,"line":79},[69,114277,107092],{"class":86},[69,114279,1609],{"class":90},[69,114281,5687],{"class":86},[69,114283,1019],{"class":82},[69,114285,113411],{"class":86},[69,114287,106481],{"class":90},[69,114289,7760],{"class":82},[69,114291,113418],{"class":86},[69,114293,1583],{"class":90},[69,114295,113423],{"class":86},[69,114297,1920],{"class":82},[69,114299,103624],{"class":90},[69,114301,13677],{"class":86},[69,114303,103624],{"class":90},[69,114305,1404],{"class":86},[29,114307,114308,114309,114312],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[66,114310,114311],{},"error -> ctrl -> step"," 的流程。",[59,114314,114315],{"className":31614,"code":105726,"language":31616,"meta":64,"style":64},[66,114316,114317],{"__ignoreMap":64},[69,114318,114319],{"class":71,"line":72},[69,114320,105726],{"class":86},[29,114322,114323],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[59,114325,114327],{"className":31614,"code":114326,"language":31616,"meta":64,"style":64},"obs = get_obs(model, data)\n",[66,114328,114329],{"__ignoreMap":64},[69,114330,114331,114333,114335],{"class":71,"line":72},[69,114332,112075],{"class":86},[69,114334,1019],{"class":82},[69,114336,113512],{"class":86},[29,114338,114339,114340,114343],{},"读取最新观测。后面打印 ",[66,114341,114342],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114345,103537],{"id":103536},[29,114347,114348],{},"观测维度为:",[59,114350,114353],{"className":114351,"code":114352,"language":540,"meta":64},[538],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[66,114354,114352],{"__ignoreMap":64},[29,114356,114357],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[29,114359,114360],{},"程序每 100 步打印：",[59,114362,114365],{"className":114363,"code":114364,"language":540,"meta":64},[538],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[66,114366,114364],{"__ignoreMap":64},[29,114368,114369,114370,114372],{},"如果控制有效，你应该看到最终 ",[66,114371,104452],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114374,103569],{"id":103568},[37,114376,114377,114380,114383,114389,114395,114402,114412],{},[40,114378,114379],{},"修改目标点位置。",[40,114381,114382],{},"重新运行，观察最终 tip 是否变化。",[40,114384,114385,114386,114388],{},"把 gravity 改成 ",[66,114387,103810],{},"，观察控制是否变差。",[40,114390,112402,114391,112406,114393,29621],{},[66,114392,103379],{},[66,114394,1471],{},[40,114396,103632,114397,103635,114399,114401],{},[66,114398,111817],{},[66,114400,108528],{},"，观察机械臂是否更难移动。",[40,114403,103632,114404,83751,114406,103635,114408,114411],{},[66,114405,104455],{},[66,114407,105367],{},[66,114409,114410],{},"0.2 0 0.6","，观察 reward 和 final tip。",[40,114413,114414],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114416,103674],{"id":103673},[19,114418,114420],{"id":114419},"site-not-found",[66,114421,114422],{},"site not found",[29,114424,114425,114426,102239,114429,29621],{},"检查 XML 中是否有 ",[66,114427,114428],{},"site name=\"tip\"",[66,114430,114431],{},"site name=\"target\"",[19,114433,114434],{"id":114434},"机械臂完全不动",[29,114436,103744],{},[37,114438,114439,114444,114447,114452],{},[40,114440,114441,114443],{},[66,114442,103379],{}," 是否为 2",[40,114445,114446],{},"actuator 是否引用正确 joint",[40,114448,114449,114451],{},[66,114450,102297],{}," 是否被赋值",[40,114453,114454,114455],{},"是否执行了 ",[66,114456,101906],{},[19,114458,114459],{"id":114459},"控制效果不好",[29,114461,114462],{},"正常。本章重点不是控制器最优，而是任务结构:",[59,114464,114467],{"className":114465,"code":114466,"language":540,"meta":64},[538],"obs → action → mj_step → reward → next_obs\n",[66,114468,114466],{"__ignoreMap":64},[19,114470,114472],{"id":114471},"tip-坐标不变化","tip 坐标不变化",[29,114474,103796],{},[37,114476,114477,114482,114490,114499],{},[40,114478,114479,114480,29621],{},"是否每步调用了 ",[66,114481,101906],{},[40,114483,114484,114485,102239,114487,29621],{},"是否写入了 ",[66,114486,107347],{},[66,114488,114489],{},"data.ctrl[1]",[40,114491,114492,114493,1604,114496,29621],{},"actuator 是否正确引用 ",[66,114494,114495],{},"joint1",[66,114497,114498],{},"joint2",[40,114500,114501],{},"控制输入是否太小。",[19,114503,114504],{"id":114504},"目标点不会动",[29,114506,114507],{},"本章的 target 是固定 site：",[59,114509,114511],{"className":54295,"code":114510,"language":54297,"meta":64,"style":64},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[66,114512,114513],{"__ignoreMap":64},[69,114514,114515,114517,114519,114521,114523,114525,114527,114529,114532],{"class":71,"line":72},[69,114516,1011],{"class":86},[69,114518,104431],{"class":348},[69,114520,16160],{"class":109},[69,114522,1019],{"class":86},[69,114524,113180],{"class":1022},[69,114526,102327],{"class":109},[69,114528,1019],{"class":86},[69,114530,114531],{"class":1022},"\"0.5 0 0.4\"",[69,114533,114534],{"class":86}," ...\u002F>\n",[29,114536,114537,114538,114540],{},"它直接挂在 ",[66,114539,103062],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[19,114542,114543],{"id":114543},"机械臂不像真实机械臂",[29,114545,114546],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114548,103828],{"id":103827},[29,114550,114551],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[29,114553,114554],{},"核心公式：",[59,114556,114559],{"className":114557,"code":114558,"language":540,"meta":64},[538],"distance = ||tip - target||\nreward = -distance - action_cost\n",[66,114560,114558],{"__ignoreMap":64},[29,114562,114563],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1297,114565,114566],{},"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":64,"searchDepth":79,"depth":79,"links":114568},[114569,114570,114571,114576,114580,114581,114582,114590],{"id":101867,"depth":79,"text":101868},{"id":101990,"depth":79,"text":101991},{"id":102265,"depth":79,"text":102266,"children":114572},[114573,114574,114575],{"id":112772,"depth":106,"text":112773},{"id":112848,"depth":106,"text":112848},{"id":112878,"depth":106,"text":112879},{"id":102473,"depth":79,"text":102474,"children":114577},[114578,114579],{"id":102793,"depth":106,"text":102793},{"id":102929,"depth":106,"text":102929},{"id":103536,"depth":79,"text":103537},{"id":103568,"depth":79,"text":103569},{"id":103673,"depth":79,"text":103674,"children":114583},[114584,114585,114586,114587,114588,114589],{"id":114419,"depth":106,"text":114422},{"id":114434,"depth":106,"text":114434},{"id":114459,"depth":106,"text":114459},{"id":114471,"depth":106,"text":114472},{"id":114504,"depth":106,"text":114504},{"id":114543,"depth":106,"text":114543},{"id":103827,"depth":79,"text":103828},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112576,"description":64},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114597,"title":114598,"body":114599,"description":64,"extension":1323,"meta":118061,"navigation":1325,"path":118062,"seo":118063,"stem":118064,"__hash__":118065},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114600,"toc":118032},[114601,114604,114606,114609,114612,114637,114640,114646,114649,114655,114657,114659,114683,114685,114703,114705,114748,114750,114777,114779,114782,114834,114837,114843,114852,114855,114893,114896,114935,114938,114946,114953,114956,114962,114964,115018,115025,115070,115073,115077,115093,115103,115105,116366,116368,116380,116382,116393,116395,116398,116419,116422,116425,116458,116464,116467,116500,116503,116506,116547,116552,116566,116569,116582,116587,116610,116612,116627,116637,116652,116659,116679,116694,116712,116715,116732,116740,116756,116762,116794,116807,116839,116849,116884,116898,116944,116958,117000,117011,117024,117030,117063,117066,117093,117103,117143,117153,117170,117177,117195,117198,117239,117252,117267,117270,117293,117296,117308,117311,117330,117335,117356,117359,117374,117377,117411,117423,117438,117441,117466,117469,117488,117491,117523,117526,117550,117556,117586,117593,117606,117609,117611,117613,117619,117622,117625,117637,117640,117642,117696,117698,117702,117708,117717,117720,117727,117729,117752,117755,117759,117761,117779,117785,117787,117820,117823,117829,117833,117836,117856,117861,117865,117872,117892,117897,117901,117904,117924,117927,118013,118017,118020,118026,118029],[10,114602,114598],{"id":114603},"_8gymnasium-风格强化学习接口基础",[14,114605,101868],{"id":101867},[29,114607,114608],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[29,114610,114611],{},"你将实现:",[59,114613,114615],{"className":31614,"code":114614,"language":31616,"meta":64,"style":64},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[66,114616,114617,114627],{"__ignoreMap":64},[69,114618,114619,114622,114624],{"class":71,"line":72},[69,114620,114621],{"class":86},"obs, info ",[69,114623,1019],{"class":82},[69,114625,114626],{"class":86}," env.reset()\n",[69,114628,114629,114632,114634],{"class":71,"line":79},[69,114630,114631],{"class":86},"obs, reward, terminated, truncated, info ",[69,114633,1019],{"class":82},[69,114635,114636],{"class":86}," env.step(action)\n",[29,114638,114639],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[29,114641,114642,114643,114645],{},"前面章节的代码都是“脚本式”的：在 ",[66,114644,103516],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[29,114647,114648],{},"可以先记住 Gymnasium 环境的核心交互：",[59,114650,114653],{"className":114651,"code":114652,"language":540,"meta":64},[538],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[66,114654,114652],{"__ignoreMap":64},[14,114656,101991],{"id":101990},[29,114658,101994],{},[59,114660,114661],{"className":25059,"code":105609,"language":25061,"meta":64,"style":64},[66,114662,114663],{"__ignoreMap":64},[69,114664,114665,114667,114669,114671,114673,114675,114677,114679,114681],{"class":71,"line":72},[69,114666,25813],{"class":109},[69,114668,27551],{"class":1022},[69,114670,25071],{"class":1022},[69,114672,27636],{"class":90},[69,114674,105624],{"class":1022},[69,114676,102019],{"class":1022},[69,114678,103722],{"class":1022},[69,114680,102035],{"class":1022},[69,114682,105633],{"class":1022},[29,114684,104040],{},[59,114686,114688],{"className":25059,"code":114687,"language":25061,"meta":64,"style":64},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[66,114689,114690],{"__ignoreMap":64},[69,114691,114692,114694,114696,114698,114700],{"class":71,"line":72},[69,114693,25068],{"class":109},[69,114695,25071],{"class":1022},[69,114697,102151],{"class":1022},[69,114699,108932],{"class":1022},[69,114701,114702],{"class":1022}," gymnasium\n",[29,114704,104057],{},[59,114706,114708],{"className":25059,"code":114707,"language":25061,"meta":64,"style":64},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[66,114709,114710,114727,114736],{"__ignoreMap":64},[69,114711,114712,114714,114716,114718,114721,114723,114725],{"class":71,"line":72},[69,114713,31566],{"class":109},[69,114715,30412],{"class":1022},[69,114717,26352],{"class":90},[69,114719,114720],{"class":1022}," mujoco-gym-api",[69,114722,102196],{"class":1022},[69,114724,102199],{"class":90},[69,114726,102202],{"class":90},[69,114728,114729,114731,114733],{"class":71,"line":79},[69,114730,31566],{"class":109},[69,114732,102209],{"class":1022},[69,114734,114735],{"class":1022}," mujoco-gym-api\n",[69,114737,114738,114740,114742,114744,114746],{"class":71,"line":106},[69,114739,25068],{"class":109},[69,114741,25071],{"class":1022},[69,114743,102151],{"class":1022},[69,114745,108932],{"class":1022},[69,114747,114702],{"class":1022},[29,114749,102225],{},[37,114751,114752,114762,114765,114771],{},[40,114753,114754,114755,114758,114759,29621],{},"本章使用 ",[66,114756,114757],{},"gymnasium","，不是旧版 ",[66,114760,114761],{},"gym",[40,114763,114764],{},"Gymnasium API 与旧 Gym API 有差异。",[40,114766,114767,114768,29621],{},"旧 Gym 常见返回值是 4 个: ",[66,114769,114770],{},"obs, reward, done, info",[40,114772,114773,114774,29621],{},"Gymnasium 返回值是 5 个: ",[66,114775,114776],{},"obs, reward, terminated, truncated, info",[14,114778,102266],{"id":102265},[29,114780,114781],{},"强化学习环境接口包含:",[1530,114783,114784,114793],{},[1533,114785,114786],{},[1536,114787,114788,114791],{},[1539,114789,114790],{"align":1202},"方法",[1539,114792,103917],{"align":1202},[1576,114794,114795,114805,114815,114825],{},[1536,114796,114797,114802],{},[1581,114798,114799],{"align":1202},[66,114800,114801],{},"reset()",[1581,114803,114804],{"align":1202},"重置环境",[1536,114806,114807,114812],{},[1581,114808,114809],{"align":1202},[66,114810,114811],{},"step(action)",[1581,114813,114814],{"align":1202},"执行动作",[1536,114816,114817,114822],{},[1581,114818,114819],{"align":1202},[66,114820,114821],{},"observation_space",[1581,114823,114824],{"align":1202},"观测空间",[1536,114826,114827,114832],{},[1581,114828,114829],{"align":1202},[66,114830,114831],{},"action_space",[1581,114833,24892],{"align":1202},[29,114835,114836],{},"一个最小环境需要完成:",[59,114838,114841],{"className":114839,"code":114840,"language":540,"meta":64},[538],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[66,114842,114840],{"__ignoreMap":64},[19,114844,114846,102239,114849,105859],{"id":114845},"terminated-和-truncated-的区别",[66,114847,114848],{},"terminated",[66,114850,114851],{},"truncated",[29,114853,114854],{},"Gymnasium 把“结束”拆成两个概念：",[1530,114856,114857,114867],{},[1533,114858,114859],{},[1536,114860,114861,114863,114865],{},[1539,114862,105795],{"align":1202},[1539,114864,101921],{"align":1202},[1539,114866,22426],{"align":1202},[1576,114868,114869,114881],{},[1536,114870,114871,114875,114878],{},[1581,114872,114873],{"align":1202},[66,114874,114848],{},[1581,114876,114877],{"align":1202},"任务自然结束",[1581,114879,114880],{"align":1202},"机械臂到达目标、机器人摔倒",[1536,114882,114883,114887,114890],{},[1581,114884,114885],{"align":1202},[66,114886,114851],{},[1581,114888,114889],{"align":1202},"因外部限制截断",[1581,114891,114892],{"align":1202},"达到最大步数、时间限制",[29,114894,114895],{},"本章中：",[59,114897,114899],{"className":31614,"code":114898,"language":31616,"meta":64,"style":64},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[66,114900,114901,114916],{"__ignoreMap":64},[69,114902,114903,114906,114908,114911,114913],{"class":71,"line":72},[69,114904,114905],{"class":86},"terminated ",[69,114907,1019],{"class":82},[69,114909,114910],{"class":86}," dist ",[69,114912,1011],{"class":82},[69,114914,114915],{"class":90}," 0.05\n",[69,114917,114918,114921,114923,114925,114928,114930,114932],{"class":71,"line":79},[69,114919,114920],{"class":86},"truncated ",[69,114922,1019],{"class":82},[69,114924,40109],{"class":90},[69,114926,114927],{"class":86},".steps ",[69,114929,2955],{"class":82},[69,114931,40109],{"class":90},[69,114933,114934],{"class":86},".max_steps\n",[29,114936,114937],{},"也就是：",[37,114939,114940,114943],{},[40,114941,114942],{},"末端距离目标小于 0.05，任务成功结束。",[40,114944,114945],{},"步数超过上限，episode 被截断。",[19,114947,114949,102239,114951],{"id":114948},"observation_space-和-action_space",[66,114950,114821],{},[66,114952,114831],{},[29,114954,114955],{},"这两个对象告诉算法：",[59,114957,114960],{"className":114958,"code":114959,"language":540,"meta":64},[538],"观测长什么样\n动作允许多大\n",[66,114961,114959],{"__ignoreMap":64},[29,114963,327],{},[59,114965,114967],{"className":31614,"code":114966,"language":31616,"meta":64,"style":64},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[66,114968,114969],{"__ignoreMap":64},[69,114970,114971,114973,114976,114978,114981,114984,114987,114989,114991,114994,114996,114998,115000,115002,115004,115006,115008,115011,115013,115015],{"class":71,"line":72},[69,114972,32059],{"class":90},[69,114974,114975],{"class":86},".action_space ",[69,114977,1019],{"class":82},[69,114979,114980],{"class":86}," spaces.Box(",[69,114982,114983],{"class":6458},"low",[69,114985,114986],{"class":82},"=-",[69,114988,103624],{"class":90},[69,114990,13677],{"class":86},[69,114992,114993],{"class":6458},"high",[69,114995,1019],{"class":82},[69,114997,103624],{"class":90},[69,114999,13677],{"class":86},[69,115001,97184],{"class":6458},[69,115003,1019],{"class":82},[69,115005,1398],{"class":86},[69,115007,1471],{"class":90},[69,115009,115010],{"class":86},",), ",[69,115012,94721],{"class":6458},[69,115014,1019],{"class":82},[69,115016,115017],{"class":86},"np.float32)\n",[29,115019,115020,115021,115024],{},"表示动作是 2 维数组，每个值都在 ",[66,115022,115023],{},"[-1, 1]"," 范围内。",[59,115026,115028],{"className":31614,"code":115027,"language":31616,"meta":64,"style":64},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[66,115029,115030],{"__ignoreMap":64},[69,115031,115032,115034,115037,115039,115041,115043,115045,115048,115050,115052,115054,115056,115058,115060,115062,115064,115066,115068],{"class":71,"line":72},[69,115033,32059],{"class":90},[69,115035,115036],{"class":86},".observation_space ",[69,115038,1019],{"class":82},[69,115040,114980],{"class":86},[69,115042,114983],{"class":6458},[69,115044,114986],{"class":82},[69,115046,115047],{"class":86},"np.inf, ",[69,115049,114993],{"class":6458},[69,115051,1019],{"class":82},[69,115053,115047],{"class":86},[69,115055,97184],{"class":6458},[69,115057,1019],{"class":82},[69,115059,1398],{"class":86},[69,115061,390],{"class":90},[69,115063,115010],{"class":86},[69,115065,94721],{"class":6458},[69,115067,1019],{"class":82},[69,115069,115017],{"class":86},[29,115071,115072],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[19,115074,115076],{"id":115075},"frame_skip-是什么","frame_skip 是什么",[59,115078,115080],{"className":31614,"code":115079,"language":31616,"meta":64,"style":64},"self.frame_skip = 5\n",[66,115081,115082],{"__ignoreMap":64},[69,115083,115084,115086,115089,115091],{"class":71,"line":72},[69,115085,32059],{"class":90},[69,115087,115088],{"class":86},".frame_skip ",[69,115090,1019],{"class":82},[69,115092,55654],{"class":90},[29,115094,115095,115096,115099,115100,115102],{},"表示外部调用一次 ",[66,115097,115098],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[66,115101,102436],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115104,102474],{"id":102473},[59,115106,115108],{"className":31614,"code":115107,"language":31616,"meta":64,"style":64},"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",[66,115109,115110,115122,115128,115138,115149,115153,115157,115165,115170,115174,115178,115182,115186,115190,115194,115198,115203,115207,115211,115215,115220,115224,115228,115232,115236,115240,115244,115248,115252,115256,115260,115264,115268,115272,115290,115305,115309,115322,115332,115347,115364,115368,115389,115408,115433,115447,115451,115461,115473,115483,115487,115529,115567,115571,115581,115597,115612,115631,115638,115642,115655,115670,115685,115698,115717,115733,115737,115778,115793,115808,115812,115851,115862,115875,115879,115889,115898,115902,115912,115927,115945,115949,115960,115977,115990,115994,116004,116008,116019,116030,116034,116048,116062,116078,116082,116095,116112,116127,116134,116138,116142,116154,116164,116182,116194,116206,116210,116218,116234,116243,116252,116260,116302,116315,116320,116324,116342,116346,116350,116362],{"__ignoreMap":64},[69,115111,115112,115114,115117,115119],{"class":71,"line":72},[69,115113,31628],{"class":82},[69,115115,115116],{"class":86}," gymnasium ",[69,115118,32619],{"class":82},[69,115120,115121],{"class":86}," gym\n",[69,115123,115124,115126],{"class":71,"line":79},[69,115125,31628],{"class":82},[69,115127,102522],{"class":86},[69,115129,115130,115132,115134,115136],{"class":71,"line":106},[69,115131,31628],{"class":82},[69,115133,32616],{"class":86},[69,115135,32619],{"class":82},[69,115137,32622],{"class":86},[69,115139,115140,115142,115144,115146],{"class":71,"line":116},[69,115141,31973],{"class":82},[69,115143,115116],{"class":86},[69,115145,31628],{"class":82},[69,115147,115148],{"class":86}," spaces\n",[69,115150,115151],{"class":71,"line":133},[69,115152,3644],{"emptyLinePlaceholder":1325},[69,115154,115155],{"class":71,"line":139},[69,115156,3644],{"emptyLinePlaceholder":1325},[69,115158,115159,115161,115163],{"class":71,"line":401},[69,115160,102535],{"class":90},[69,115162,14805],{"class":82},[69,115164,102540],{"class":1022},[69,115166,115167],{"class":71,"line":470},[69,115168,115169],{"class":1022},"\u003Cmujoco model=\"gym_reacher\">\n",[69,115171,115172],{"class":71,"line":475},[69,115173,112959],{"class":1022},[69,115175,115176],{"class":71,"line":482},[69,115177,3644],{"emptyLinePlaceholder":1325},[69,115179,115180],{"class":71,"line":497},[69,115181,102559],{"class":1022},[69,115183,115184],{"class":71,"line":502},[69,115185,112977],{"class":1022},[69,115187,115188],{"class":71,"line":509},[69,115189,3644],{"emptyLinePlaceholder":1325},[69,115191,115192],{"class":71,"line":524},[69,115193,112986],{"class":1022},[69,115195,115196],{"class":71,"line":2888},[69,115197,112991],{"class":1022},[69,115199,115200],{"class":71,"line":2893},[69,115201,115202],{"class":1022},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[69,115204,115205],{"class":71,"line":2899},[69,115206,3644],{"emptyLinePlaceholder":1325},[69,115208,115209],{"class":71,"line":2919},[69,115210,113005],{"class":1022},[69,115212,115213],{"class":71,"line":2924},[69,115214,113010],{"class":1022},[69,115216,115217],{"class":71,"line":2938},[69,115218,115219],{"class":1022},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[69,115221,115222],{"class":71,"line":2943},[69,115223,113020],{"class":1022},[69,115225,115226],{"class":71,"line":2972},[69,115227,107659],{"class":1022},[69,115229,115230],{"class":71,"line":2977},[69,115231,102588],{"class":1022},[69,115233,115234],{"class":71,"line":2994},[69,115235,102593],{"class":1022},[69,115237,115238],{"class":71,"line":2999},[69,115239,3644],{"emptyLinePlaceholder":1325},[69,115241,115242],{"class":71,"line":3004},[69,115243,107676],{"class":1022},[69,115245,115246],{"class":71,"line":3009},[69,115247,113045],{"class":1022},[69,115249,115250],{"class":71,"line":3023},[69,115251,113050],{"class":1022},[69,115253,115254],{"class":71,"line":3028},[69,115255,107686],{"class":1022},[69,115257,115258],{"class":71,"line":3821},[69,115259,102598],{"class":1022},[69,115261,115262],{"class":71,"line":3835},[69,115263,96919],{"class":1022},[69,115265,115266],{"class":71,"line":3843},[69,115267,3644],{"emptyLinePlaceholder":1325},[69,115269,115270],{"class":71,"line":3848},[69,115271,3644],{"emptyLinePlaceholder":1325},[69,115273,115274,115276,115279,115281,115283,115285,115288],{"class":71,"line":3854},[69,115275,15934],{"class":82},[69,115277,115278],{"class":109}," ReacherEnv",[69,115280,1398],{"class":86},[69,115282,114761],{"class":109},[69,115284,1946],{"class":86},[69,115286,115287],{"class":109},"Env",[69,115289,32022],{"class":86},[69,115291,115292,115295,115297,115299,115302],{"class":71,"line":3860},[69,115293,115294],{"class":86},"    metadata ",[69,115296,1019],{"class":82},[69,115298,5692],{"class":86},[69,115300,115301],{"class":1022},"\"render_modes\"",[69,115303,115304],{"class":86},": []}\n",[69,115306,115307],{"class":71,"line":3865},[69,115308,3644],{"emptyLinePlaceholder":1325},[69,115310,115311,115313,115315,115318,115320],{"class":71,"line":9190},[69,115312,32037],{"class":82},[69,115314,32040],{"class":90},[69,115316,115317],{"class":86},"(self) -> ",[69,115319,96907],{"class":90},[69,115321,4983],{"class":86},[69,115323,115324,115326,115328,115330],{"class":71,"line":9214},[69,115325,32053],{"class":90},[69,115327,18500],{"class":86},[69,115329,32065],{"class":90},[69,115331,3220],{"class":86},[69,115333,115334,115336,115339,115341,115343,115345],{"class":71,"line":9219},[69,115335,32081],{"class":90},[69,115337,115338],{"class":86},".model ",[69,115340,1019],{"class":82},[69,115342,102633],{"class":86},[69,115344,102535],{"class":90},[69,115346,1404],{"class":86},[69,115348,115349,115351,115354,115356,115359,115361],{"class":71,"line":9225},[69,115350,32081],{"class":90},[69,115352,115353],{"class":86},".data ",[69,115355,1019],{"class":82},[69,115357,115358],{"class":86}," mujoco.MjData(",[69,115360,32059],{"class":90},[69,115362,115363],{"class":86},".model)\n",[69,115365,115366],{"class":71,"line":9252},[69,115367,3644],{"emptyLinePlaceholder":1325},[69,115369,115370,115372,115375,115377,115380,115382,115385,115387],{"class":71,"line":9257},[69,115371,32081],{"class":90},[69,115373,115374],{"class":86},".tip_site_id ",[69,115376,1019],{"class":82},[69,115378,115379],{"class":86}," mujoco.mj_name2id(",[69,115381,32059],{"class":90},[69,115383,115384],{"class":86},".model, mujoco.mjtObj.mjOBJ_SITE, ",[69,115386,112757],{"class":1022},[69,115388,1404],{"class":86},[69,115390,115391,115393,115396,115398,115400,115402,115404,115406],{"class":71,"line":9263},[69,115392,32081],{"class":90},[69,115394,115395],{"class":86},".target_site_id ",[69,115397,1019],{"class":82},[69,115399,115379],{"class":86},[69,115401,32059],{"class":90},[69,115403,115384],{"class":86},[69,115405,113180],{"class":1022},[69,115407,1404],{"class":86},[69,115409,115410,115412,115414,115416,115418,115420,115423,115425,115427,115429,115431],{"class":71,"line":9275},[69,115411,3741],{"class":82},[69,115413,40109],{"class":90},[69,115415,115374],{"class":86},[69,115417,1011],{"class":82},[69,115419,5337],{"class":90},[69,115421,115422],{"class":82}," or",[69,115424,40109],{"class":90},[69,115426,115395],{"class":86},[69,115428,1011],{"class":82},[69,115430,5337],{"class":90},[69,115432,4983],{"class":86},[69,115434,115435,115438,115440,115442,115445],{"class":71,"line":9287},[69,115436,115437],{"class":82},"            raise",[69,115439,104656],{"class":90},[69,115441,1398],{"class":86},[69,115443,115444],{"class":1022},"\"required sites not found\"",[69,115446,1404],{"class":86},[69,115448,115449],{"class":71,"line":9299},[69,115450,3644],{"emptyLinePlaceholder":1325},[69,115452,115453,115455,115457,115459],{"class":71,"line":10958},[69,115454,32081],{"class":90},[69,115456,115088],{"class":86},[69,115458,1019],{"class":82},[69,115460,55654],{"class":90},[69,115462,115463,115465,115468,115470],{"class":71,"line":10983},[69,115464,32081],{"class":90},[69,115466,115467],{"class":86},".max_steps ",[69,115469,1019],{"class":82},[69,115471,115472],{"class":90}," 200\n",[69,115474,115475,115477,115479,115481],{"class":71,"line":11006},[69,115476,32081],{"class":90},[69,115478,114927],{"class":86},[69,115480,1019],{"class":82},[69,115482,48569],{"class":90},[69,115484,115485],{"class":71,"line":11030},[69,115486,3644],{"emptyLinePlaceholder":1325},[69,115488,115489,115491,115493,115495,115497,115499,115501,115503,115505,115507,115509,115511,115513,115515,115517,115519,115521,115523,115525,115527],{"class":71,"line":11035},[69,115490,32081],{"class":90},[69,115492,114975],{"class":86},[69,115494,1019],{"class":82},[69,115496,114980],{"class":86},[69,115498,114983],{"class":6458},[69,115500,114986],{"class":82},[69,115502,103624],{"class":90},[69,115504,13677],{"class":86},[69,115506,114993],{"class":6458},[69,115508,1019],{"class":82},[69,115510,103624],{"class":90},[69,115512,13677],{"class":86},[69,115514,97184],{"class":6458},[69,115516,1019],{"class":82},[69,115518,1398],{"class":86},[69,115520,1471],{"class":90},[69,115522,115010],{"class":86},[69,115524,94721],{"class":6458},[69,115526,1019],{"class":82},[69,115528,115017],{"class":86},[69,115530,115531,115533,115535,115537,115539,115541,115543,115545,115547,115549,115551,115553,115555,115557,115559,115561,115563,115565],{"class":71,"line":11040},[69,115532,32081],{"class":90},[69,115534,115036],{"class":86},[69,115536,1019],{"class":82},[69,115538,114980],{"class":86},[69,115540,114983],{"class":6458},[69,115542,114986],{"class":82},[69,115544,115047],{"class":86},[69,115546,114993],{"class":6458},[69,115548,1019],{"class":82},[69,115550,115047],{"class":86},[69,115552,97184],{"class":6458},[69,115554,1019],{"class":82},[69,115556,1398],{"class":86},[69,115558,390],{"class":90},[69,115560,115010],{"class":86},[69,115562,94721],{"class":6458},[69,115564,1019],{"class":82},[69,115566,115017],{"class":86},[69,115568,115569],{"class":71,"line":11045},[69,115570,3644],{"emptyLinePlaceholder":1325},[69,115572,115573,115575,115578],{"class":71,"line":11054},[69,115574,32037],{"class":82},[69,115576,115577],{"class":109}," _get_obs",[69,115579,115580],{"class":86},"(self) -> np.ndarray:\n",[69,115582,115583,115585,115587,115589,115592,115594],{"class":71,"line":11059},[69,115584,113358],{"class":86},[69,115586,1019],{"class":82},[69,115588,40109],{"class":90},[69,115590,115591],{"class":86},".data.site_xpos[",[69,115593,32059],{"class":90},[69,115595,115596],{"class":86},".tip_site_id].copy()\n",[69,115598,115599,115601,115603,115605,115607,115609],{"class":71,"line":11065},[69,115600,113371],{"class":86},[69,115602,1019],{"class":82},[69,115604,40109],{"class":90},[69,115606,115591],{"class":86},[69,115608,32059],{"class":90},[69,115610,115611],{"class":86},".target_site_id].copy()\n",[69,115613,115614,115616,115618,115621,115623,115626,115628],{"class":71,"line":11086},[69,115615,111403],{"class":86},[69,115617,1019],{"class":82},[69,115619,115620],{"class":86}," np.concatenate([",[69,115622,32059],{"class":90},[69,115624,115625],{"class":86},".data.qpos.copy(), ",[69,115627,32059],{"class":90},[69,115629,115630],{"class":86},".data.qvel.copy(), tip, target])\n",[69,115632,115633,115635],{"class":71,"line":11092},[69,115634,15992],{"class":82},[69,115636,115637],{"class":86}," obs.astype(np.float32)\n",[69,115639,115640],{"class":71,"line":11106},[69,115641,3644],{"emptyLinePlaceholder":1325},[69,115643,115644,115646,115649,115651,115653],{"class":71,"line":11112},[69,115645,32037],{"class":82},[69,115647,115648],{"class":109}," _get_reward",[69,115650,115317],{"class":86},[69,115652,1436],{"class":90},[69,115654,4983],{"class":86},[69,115656,115657,115659,115661,115663,115665,115667],{"class":71,"line":11139},[69,115658,113358],{"class":86},[69,115660,1019],{"class":82},[69,115662,40109],{"class":90},[69,115664,115591],{"class":86},[69,115666,32059],{"class":90},[69,115668,115669],{"class":86},".tip_site_id]\n",[69,115671,115672,115674,115676,115678,115680,115682],{"class":71,"line":11148},[69,115673,113371],{"class":86},[69,115675,1019],{"class":82},[69,115677,40109],{"class":90},[69,115679,115591],{"class":86},[69,115681,32059],{"class":90},[69,115683,115684],{"class":86},".target_site_id]\n",[69,115686,115687,115690,115692,115694,115696],{"class":71,"line":11154},[69,115688,115689],{"class":86},"        dist ",[69,115691,1019],{"class":82},[69,115693,112822],{"class":86},[69,115695,1920],{"class":82},[69,115697,112827],{"class":86},[69,115699,115700,115703,115705,115707,115709,115712,115714],{"class":71,"line":11162},[69,115701,115702],{"class":86},"        control_cost ",[69,115704,1019],{"class":82},[69,115706,113258],{"class":90},[69,115708,7760],{"class":82},[69,115710,115711],{"class":86}," np.sum(np.square(",[69,115713,32059],{"class":90},[69,115715,115716],{"class":86},".data.ctrl))\n",[69,115718,115719,115721,115723,115725,115727,115729,115731],{"class":71,"line":11167},[69,115720,15992],{"class":82},[69,115722,111018],{"class":90},[69,115724,1398],{"class":86},[69,115726,1920],{"class":82},[69,115728,112817],{"class":86},[69,115730,1920],{"class":82},[69,115732,113280],{"class":86},[69,115734,115735],{"class":71,"line":17843},[69,115736,3644],{"emptyLinePlaceholder":1325},[69,115738,115739,115741,115744,115747,115749,115752,115754,115756,115758,115760,115762,115765,115768,115770,115772,115774,115776],{"class":71,"line":17849},[69,115740,32037],{"class":82},[69,115742,115743],{"class":109}," reset",[69,115745,115746],{"class":86},"(self, ",[69,115748,1843],{"class":82},[69,115750,115751],{"class":86},", seed: ",[69,115753,1401],{"class":90},[69,115755,26346],{"class":82},[69,115757,40169],{"class":90},[69,115759,14805],{"class":82},[69,115761,40169],{"class":90},[69,115763,115764],{"class":86},", options: ",[69,115766,115767],{"class":90},"dict",[69,115769,26346],{"class":82},[69,115771,40169],{"class":90},[69,115773,14805],{"class":82},[69,115775,40169],{"class":90},[69,115777,32022],{"class":86},[69,115779,115780,115782,115785,115788,115790],{"class":71,"line":17872},[69,115781,32053],{"class":90},[69,115783,115784],{"class":86},"().reset(",[69,115786,115787],{"class":6458},"seed",[69,115789,1019],{"class":82},[69,115791,115792],{"class":86},"seed)\n",[69,115794,115795,115798,115800,115803,115805],{"class":71,"line":17878},[69,115796,115797],{"class":86},"        mujoco.mj_resetData(",[69,115799,32059],{"class":90},[69,115801,115802],{"class":86},".model, ",[69,115804,32059],{"class":90},[69,115806,115807],{"class":86},".data)\n",[69,115809,115810],{"class":71,"line":17901},[69,115811,3644],{"emptyLinePlaceholder":1325},[69,115813,115814,115816,115819,115821,115823,115826,115828,115830,115832,115834,115836,115838,115840,115842,115844,115846,115848],{"class":71,"line":17915},[69,115815,32081],{"class":90},[69,115817,115818],{"class":86},".data.qpos[:] ",[69,115820,1019],{"class":82},[69,115822,40109],{"class":90},[69,115824,115825],{"class":86},".np_random.uniform(",[69,115827,114983],{"class":6458},[69,115829,114986],{"class":82},[69,115831,87431],{"class":90},[69,115833,13677],{"class":86},[69,115835,114993],{"class":6458},[69,115837,1019],{"class":82},[69,115839,87431],{"class":90},[69,115841,13677],{"class":86},[69,115843,32732],{"class":6458},[69,115845,1019],{"class":82},[69,115847,32059],{"class":90},[69,115849,115850],{"class":86},".model.nq)\n",[69,115852,115853,115855,115858,115860],{"class":71,"line":17935},[69,115854,32081],{"class":90},[69,115856,115857],{"class":86},".data.qvel[:] ",[69,115859,1019],{"class":82},[69,115861,105982],{"class":90},[69,115863,115864,115867,115869,115871,115873],{"class":71,"line":17941},[69,115865,115866],{"class":86},"        mujoco.mj_forward(",[69,115868,32059],{"class":90},[69,115870,115802],{"class":86},[69,115872,32059],{"class":90},[69,115874,115807],{"class":86},[69,115876,115877],{"class":71,"line":17952},[69,115878,3644],{"emptyLinePlaceholder":1325},[69,115880,115881,115883,115885,115887],{"class":71,"line":17975},[69,115882,32081],{"class":90},[69,115884,114927],{"class":86},[69,115886,1019],{"class":82},[69,115888,48569],{"class":90},[69,115890,115891,115893,115895],{"class":71,"line":17997},[69,115892,15992],{"class":82},[69,115894,40109],{"class":90},[69,115896,115897],{"class":86},"._get_obs(), {}\n",[69,115899,115900],{"class":71,"line":18002},[69,115901,3644],{"emptyLinePlaceholder":1325},[69,115903,115904,115906,115909],{"class":71,"line":18008},[69,115905,32037],{"class":82},[69,115907,115908],{"class":109}," step",[69,115910,115911],{"class":86},"(self, action):\n",[69,115913,115914,115916,115918,115921,115923,115925],{"class":71,"line":18022},[69,115915,111443],{"class":86},[69,115917,1019],{"class":82},[69,115919,115920],{"class":86}," np.asarray(action, ",[69,115922,94721],{"class":6458},[69,115924,1019],{"class":82},[69,115926,115017],{"class":86},[69,115928,115929,115931,115933,115935,115937,115940,115942],{"class":71,"line":18035},[69,115930,111443],{"class":86},[69,115932,1019],{"class":82},[69,115934,108668],{"class":86},[69,115936,32059],{"class":90},[69,115938,115939],{"class":86},".action_space.low, ",[69,115941,32059],{"class":90},[69,115943,115944],{"class":86},".action_space.high)\n",[69,115946,115947],{"class":71,"line":18040},[69,115948,3644],{"emptyLinePlaceholder":1325},[69,115950,115951,115953,115956,115958],{"class":71,"line":18054},[69,115952,32081],{"class":90},[69,115954,115955],{"class":86},".data.ctrl[:] ",[69,115957,1019],{"class":82},[69,115959,108691],{"class":86},[69,115961,115962,115964,115966,115968,115970,115972,115974],{"class":71,"line":18059},[69,115963,4647],{"class":82},[69,115965,102722],{"class":86},[69,115967,27280],{"class":82},[69,115969,33679],{"class":90},[69,115971,1398],{"class":86},[69,115973,32059],{"class":90},[69,115975,115976],{"class":86},".frame_skip):\n",[69,115978,115979,115982,115984,115986,115988],{"class":71,"line":18065},[69,115980,115981],{"class":86},"            mujoco.mj_step(",[69,115983,32059],{"class":90},[69,115985,115802],{"class":86},[69,115987,32059],{"class":90},[69,115989,115807],{"class":86},[69,115991,115992],{"class":71,"line":18070},[69,115993,3644],{"emptyLinePlaceholder":1325},[69,115995,115996,115998,116000,116002],{"class":71,"line":18084},[69,115997,32081],{"class":90},[69,115999,114927],{"class":86},[69,116001,10719],{"class":82},[69,116003,56926],{"class":90},[69,116005,116006],{"class":71,"line":18089},[69,116007,3644],{"emptyLinePlaceholder":1325},[69,116009,116010,116012,116014,116016],{"class":71,"line":18094},[69,116011,111403],{"class":86},[69,116013,1019],{"class":82},[69,116015,40109],{"class":90},[69,116017,116018],{"class":86},"._get_obs()\n",[69,116020,116021,116023,116025,116027],{"class":71,"line":18108},[69,116022,111508],{"class":86},[69,116024,1019],{"class":82},[69,116026,40109],{"class":90},[69,116028,116029],{"class":86},"._get_reward()\n",[69,116031,116032],{"class":71,"line":18120},[69,116033,3644],{"emptyLinePlaceholder":1325},[69,116035,116036,116038,116040,116042,116044,116046],{"class":71,"line":18125},[69,116037,113358],{"class":86},[69,116039,1019],{"class":82},[69,116041,40109],{"class":90},[69,116043,115591],{"class":86},[69,116045,32059],{"class":90},[69,116047,115669],{"class":86},[69,116049,116050,116052,116054,116056,116058,116060],{"class":71,"line":18138},[69,116051,113371],{"class":86},[69,116053,1019],{"class":82},[69,116055,40109],{"class":90},[69,116057,115591],{"class":86},[69,116059,32059],{"class":90},[69,116061,115684],{"class":86},[69,116063,116064,116066,116068,116070,116073,116075],{"class":71,"line":18143},[69,116065,115689],{"class":86},[69,116067,1019],{"class":82},[69,116069,111018],{"class":90},[69,116071,116072],{"class":86},"(np.linalg.norm(tip ",[69,116074,1920],{"class":82},[69,116076,116077],{"class":86}," target))\n",[69,116079,116080],{"class":71,"line":18148},[69,116081,3644],{"emptyLinePlaceholder":1325},[69,116083,116084,116087,116089,116091,116093],{"class":71,"line":18153},[69,116085,116086],{"class":86},"        terminated ",[69,116088,1019],{"class":82},[69,116090,114910],{"class":86},[69,116092,1011],{"class":82},[69,116094,114915],{"class":90},[69,116096,116097,116100,116102,116104,116106,116108,116110],{"class":71,"line":18166},[69,116098,116099],{"class":86},"        truncated ",[69,116101,1019],{"class":82},[69,116103,40109],{"class":90},[69,116105,114927],{"class":86},[69,116107,2955],{"class":82},[69,116109,40109],{"class":90},[69,116111,114934],{"class":86},[69,116113,116114,116117,116119,116121,116124],{"class":71,"line":18171},[69,116115,116116],{"class":86},"        info ",[69,116118,1019],{"class":82},[69,116120,5692],{"class":86},[69,116122,116123],{"class":1022},"\"distance\"",[69,116125,116126],{"class":86},": dist}\n",[69,116128,116129,116131],{"class":71,"line":33869},[69,116130,15992],{"class":82},[69,116132,116133],{"class":86}," obs, reward, terminated, truncated, info\n",[69,116135,116136],{"class":71,"line":33875},[69,116137,3644],{"emptyLinePlaceholder":1325},[69,116139,116140],{"class":71,"line":33881},[69,116141,3644],{"emptyLinePlaceholder":1325},[69,116143,116144,116146,116148,116150,116152],{"class":71,"line":33887},[69,116145,33183],{"class":82},[69,116147,3217],{"class":109},[69,116149,102619],{"class":86},[69,116151,96907],{"class":90},[69,116153,4983],{"class":86},[69,116155,116156,116159,116161],{"class":71,"line":33893},[69,116157,116158],{"class":86},"    env ",[69,116160,1019],{"class":82},[69,116162,116163],{"class":86}," ReacherEnv()\n",[69,116165,116166,116169,116171,116174,116176,116178,116180],{"class":71,"line":33904},[69,116167,116168],{"class":86},"    obs, info ",[69,116170,1019],{"class":82},[69,116172,116173],{"class":86}," env.reset(",[69,116175,115787],{"class":6458},[69,116177,1019],{"class":82},[69,116179,1583],{"class":90},[69,116181,1404],{"class":86},[69,116183,116184,116186,116188,116191],{"class":71,"line":33910},[69,116185,32535],{"class":90},[69,116187,1398],{"class":86},[69,116189,116190],{"class":1022},"\"initial obs shape:\"",[69,116192,116193],{"class":86},", obs.shape)\n",[69,116195,116196,116198,116200,116203],{"class":71,"line":33930},[69,116197,32535],{"class":90},[69,116199,1398],{"class":86},[69,116201,116202],{"class":1022},"\"initial info:\"",[69,116204,116205],{"class":86},", info)\n",[69,116207,116208],{"class":71,"line":33936},[69,116209,3644],{"emptyLinePlaceholder":1325},[69,116211,116212,116214,116216],{"class":71,"line":33947},[69,116213,111374],{"class":86},[69,116215,1019],{"class":82},[69,116217,105982],{"class":90},[69,116219,116220,116222,116224,116226,116228,116230,116232],{"class":71,"line":33953},[69,116221,4445],{"class":82},[69,116223,32852],{"class":86},[69,116225,27280],{"class":82},[69,116227,33679],{"class":90},[69,116229,1398],{"class":86},[69,116231,2087],{"class":90},[69,116233,32022],{"class":86},[69,116235,116236,116238,116240],{"class":71,"line":33959},[69,116237,111443],{"class":86},[69,116239,1019],{"class":82},[69,116241,116242],{"class":86}," env.action_space.sample()\n",[69,116244,116245,116248,116250],{"class":71,"line":33965},[69,116246,116247],{"class":86},"        obs, reward, terminated, truncated, info ",[69,116249,1019],{"class":82},[69,116251,114636],{"class":86},[69,116253,116254,116256,116258],{"class":71,"line":33971},[69,116255,111518],{"class":86},[69,116257,10719],{"class":82},[69,116259,111523],{"class":86},[69,116261,116262,116264,116266,116268,116270,116273,116275,116277,116280,116282,116284,116287,116289,116291,116294,116296,116298,116300],{"class":71,"line":33977},[69,116263,33687],{"class":90},[69,116265,1398],{"class":86},[69,116267,111552],{"class":1022},[69,116269,111555],{"class":86},[69,116271,116272],{"class":1022},"\"reward:\"",[69,116274,13677],{"class":86},[69,116276,33254],{"class":90},[69,116278,116279],{"class":86},"(reward, ",[69,116281,1465],{"class":90},[69,116283,111566],{"class":86},[69,116285,116286],{"class":1022},"\"distance:\"",[69,116288,13677],{"class":86},[69,116290,33254],{"class":90},[69,116292,116293],{"class":86},"(info[",[69,116295,116123],{"class":1022},[69,116297,113423],{"class":86},[69,116299,1465],{"class":90},[69,116301,31733],{"class":86},[69,116303,116304,116306,116309,116312],{"class":71,"line":33983},[69,116305,3741],{"class":82},[69,116307,116308],{"class":86}," terminated ",[69,116310,116311],{"class":82},"or",[69,116313,116314],{"class":86}," truncated:\n",[69,116316,116317],{"class":71,"line":33989},[69,116318,116319],{"class":82},"            break\n",[69,116321,116322],{"class":71,"line":34009},[69,116323,3644],{"emptyLinePlaceholder":1325},[69,116325,116326,116328,116330,116332,116334,116336,116338,116340],{"class":71,"line":34015},[69,116327,32535],{"class":90},[69,116329,1398],{"class":86},[69,116331,111597],{"class":1022},[69,116333,13677],{"class":86},[69,116335,33254],{"class":90},[69,116337,111604],{"class":86},[69,116339,1465],{"class":90},[69,116341,31733],{"class":86},[69,116343,116344],{"class":71,"line":34031},[69,116345,3644],{"emptyLinePlaceholder":1325},[69,116347,116348],{"class":71,"line":34037},[69,116349,3644],{"emptyLinePlaceholder":1325},[69,116351,116352,116354,116356,116358,116360],{"class":71,"line":34051},[69,116353,2782],{"class":82},[69,116355,32456],{"class":90},[69,116357,102780],{"class":82},[69,116359,102783],{"class":1022},[69,116361,4983],{"class":86},[69,116363,116364],{"class":71,"line":34057},[69,116365,102790],{"class":86},[29,116367,104791],{},[59,116369,116371],{"className":25059,"code":116370,"language":25061,"meta":64,"style":64},"touch ch8_gym_env.py\n",[66,116372,116373],{"__ignoreMap":64},[69,116374,116375,116377],{"class":71,"line":72},[69,116376,102504],{"class":109},[69,116378,116379],{"class":1022}," ch8_gym_env.py\n",[29,116381,111665],{},[59,116383,116385],{"className":25059,"code":116384,"language":25061,"meta":64,"style":64},"python ch8_gym_env.py\n",[66,116386,116387],{"__ignoreMap":64},[69,116388,116389,116391],{"class":71,"line":72},[69,116390,31616],{"class":109},[69,116392,116379],{"class":1022},[19,116394,102793],{"id":102793},[29,116396,116397],{},"继承 Gymnasium 环境：",[59,116399,116401],{"className":31614,"code":116400,"language":31616,"meta":64,"style":64},"class ReacherEnv(gym.Env):\n",[66,116402,116403],{"__ignoreMap":64},[69,116404,116405,116407,116409,116411,116413,116415,116417],{"class":71,"line":72},[69,116406,15934],{"class":82},[69,116408,115278],{"class":109},[69,116410,1398],{"class":86},[69,116412,114761],{"class":109},[69,116414,1946],{"class":86},[69,116416,115287],{"class":109},[69,116418,32022],{"class":86},[29,116420,116421],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[29,116423,116424],{},"初始化模型：",[59,116426,116428],{"className":31614,"code":116427,"language":31616,"meta":64,"style":64},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[66,116429,116430,116444],{"__ignoreMap":64},[69,116431,116432,116434,116436,116438,116440,116442],{"class":71,"line":72},[69,116433,32059],{"class":90},[69,116435,115338],{"class":86},[69,116437,1019],{"class":82},[69,116439,102633],{"class":86},[69,116441,102535],{"class":90},[69,116443,1404],{"class":86},[69,116445,116446,116448,116450,116452,116454,116456],{"class":71,"line":79},[69,116447,32059],{"class":90},[69,116449,115353],{"class":86},[69,116451,1019],{"class":82},[69,116453,115358],{"class":86},[69,116455,32059],{"class":90},[69,116457,115363],{"class":86},[29,116459,116460,116461,116463],{},"这和前面章节一样，只是现在放到了类的 ",[66,116462,32065],{}," 里。",[29,116465,116466],{},"缓存 site ID：",[59,116468,116470],{"className":31614,"code":116469,"language":31616,"meta":64,"style":64},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[66,116471,116472,116486],{"__ignoreMap":64},[69,116473,116474,116476,116478,116480,116482,116484],{"class":71,"line":72},[69,116475,32059],{"class":90},[69,116477,115374],{"class":86},[69,116479,1019],{"class":82},[69,116481,115379],{"class":86},[69,116483,90775],{"class":90},[69,116485,1404],{"class":86},[69,116487,116488,116490,116492,116494,116496,116498],{"class":71,"line":79},[69,116489,32059],{"class":90},[69,116491,115395],{"class":86},[69,116493,1019],{"class":82},[69,116495,115379],{"class":86},[69,116497,90775],{"class":90},[69,116499,1404],{"class":86},[29,116501,116502],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[29,116504,116505],{},"reset：",[59,116507,116509],{"className":31614,"code":116508,"language":31616,"meta":64,"style":64},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[66,116510,116511],{"__ignoreMap":64},[69,116512,116513,116515,116517,116519,116521,116523,116525,116527,116529,116531,116533,116535,116537,116539,116541,116543,116545],{"class":71,"line":72},[69,116514,33183],{"class":82},[69,116516,115743],{"class":109},[69,116518,115746],{"class":86},[69,116520,1843],{"class":82},[69,116522,115751],{"class":86},[69,116524,1401],{"class":90},[69,116526,26346],{"class":82},[69,116528,40169],{"class":90},[69,116530,14805],{"class":82},[69,116532,40169],{"class":90},[69,116534,115764],{"class":86},[69,116536,115767],{"class":90},[69,116538,26346],{"class":82},[69,116540,40169],{"class":90},[69,116542,14805],{"class":82},[69,116544,40169],{"class":90},[69,116546,32022],{"class":86},[29,116548,116549,116551],{},[66,116550,71281],{}," 做四件事：",[37,116553,116554,116557,116560,116563],{},[40,116555,116556],{},"设置随机种子。",[40,116558,116559],{},"重置 MuJoCo data。",[40,116561,116562],{},"随机初始化关节角。",[40,116564,116565],{},"返回初始观测和 info。",[29,116567,116568],{},"step：",[59,116570,116572],{"className":31614,"code":116571,"language":31616,"meta":64,"style":64},"def step(self, action):\n",[66,116573,116574],{"__ignoreMap":64},[69,116575,116576,116578,116580],{"class":71,"line":72},[69,116577,33183],{"class":82},[69,116579,115908],{"class":109},[69,116581,115911],{"class":86},[29,116583,116584,116586],{},[66,116585,108355],{}," 做六件事：",[37,116588,116589,116592,116598,116601,116604,116607],{},[40,116590,116591],{},"检查并裁剪 action。",[40,116593,116594,116595,29621],{},"写入 ",[66,116596,116597],{},"self.data.ctrl",[40,116599,116600],{},"连续推进若干个 MuJoCo 物理步。",[40,116602,116603],{},"计算新观测。",[40,116605,116606],{},"计算奖励和结束条件。",[40,116608,116609],{},"返回 Gymnasium 标准五元组。",[19,116611,102929],{"id":102929},[59,116613,116615],{"className":31614,"code":116614,"language":31616,"meta":64,"style":64},"import gymnasium as gym\n",[66,116616,116617],{"__ignoreMap":64},[69,116618,116619,116621,116623,116625],{"class":71,"line":72},[69,116620,31628],{"class":82},[69,116622,115116],{"class":86},[69,116624,32619],{"class":82},[69,116626,115121],{"class":86},[29,116628,116629,116630,116632,116633,116636],{},"导入 Gymnasium，并起别名 ",[66,116631,114761],{},"。后面写 ",[66,116634,116635],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[59,116638,116640],{"className":31614,"code":116639,"language":31616,"meta":64,"style":64},"from gymnasium import spaces\n",[66,116641,116642],{"__ignoreMap":64},[69,116643,116644,116646,116648,116650],{"class":71,"line":72},[69,116645,31973],{"class":82},[69,116647,115116],{"class":86},[69,116649,31628],{"class":82},[69,116651,115148],{"class":86},[29,116653,116654,116655,116658],{},"导入空间定义工具。",[66,116656,116657],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[59,116660,116661],{"className":31614,"code":116400,"language":31616,"meta":64,"style":64},[66,116662,116663],{"__ignoreMap":64},[69,116664,116665,116667,116669,116671,116673,116675,116677],{"class":71,"line":72},[69,116666,15934],{"class":82},[69,116668,115278],{"class":109},[69,116670,1398],{"class":86},[69,116672,114761],{"class":109},[69,116674,1946],{"class":86},[69,116676,115287],{"class":109},[69,116678,32022],{"class":86},[29,116680,116681,116682,116685,116686,116688,116689,102239,116691,116693],{},"定义一个类，名字叫 ",[66,116683,116684],{},"ReacherEnv","。括号里的 ",[66,116687,116635],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[66,116690,71281],{},[66,116692,108355],{}," 这两个核心方法。",[59,116695,116697],{"className":31614,"code":116696,"language":31616,"meta":64,"style":64},"metadata = {\"render_modes\": []}\n",[66,116698,116699],{"__ignoreMap":64},[69,116700,116701,116704,116706,116708,116710],{"class":71,"line":72},[69,116702,116703],{"class":86},"metadata ",[69,116705,1019],{"class":82},[69,116707,5692],{"class":86},[69,116709,115301],{"class":1022},[69,116711,115304],{"class":86},[29,116713,116714],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[59,116716,116718],{"className":31614,"code":116717,"language":31616,"meta":64,"style":64},"def __init__(self) -> None:\n",[66,116719,116720],{"__ignoreMap":64},[69,116721,116722,116724,116726,116728,116730],{"class":71,"line":72},[69,116723,33183],{"class":82},[69,116725,32040],{"class":90},[69,116727,115317],{"class":86},[69,116729,96907],{"class":90},[69,116731,4983],{"class":86},[29,116733,116734,116736,116737,29621],{},[66,116735,32065],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[66,116738,116739],{},"env = ReacherEnv()",[59,116741,116743],{"className":31614,"code":116742,"language":31616,"meta":64,"style":64},"super().__init__()\n",[66,116744,116745],{"__ignoreMap":64},[69,116746,116747,116750,116752,116754],{"class":71,"line":72},[69,116748,116749],{"class":90},"super",[69,116751,18500],{"class":86},[69,116753,32065],{"class":90},[69,116755,3220],{"class":86},[29,116757,116758,116759,116761],{},"调用父类 ",[66,116760,116635],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[59,116763,116764],{"className":31614,"code":116427,"language":31616,"meta":64,"style":64},[66,116765,116766,116780],{"__ignoreMap":64},[69,116767,116768,116770,116772,116774,116776,116778],{"class":71,"line":72},[69,116769,32059],{"class":90},[69,116771,115338],{"class":86},[69,116773,1019],{"class":82},[69,116775,102633],{"class":86},[69,116777,102535],{"class":90},[69,116779,1404],{"class":86},[69,116781,116782,116784,116786,116788,116790,116792],{"class":71,"line":79},[69,116783,32059],{"class":90},[69,116785,115353],{"class":86},[69,116787,1019],{"class":82},[69,116789,115358],{"class":86},[69,116791,32059],{"class":90},[69,116793,115363],{"class":86},[29,116795,116796,116797,116799,116800,102239,116803,116806],{},"把 MuJoCo 模型和状态保存到 ",[66,116798,32059],{}," 上。",[66,116801,116802],{},"self.model",[66,116804,116805],{},"self.data"," 表示这个环境对象自己的模型和状态。",[59,116808,116809],{"className":31614,"code":116469,"language":31616,"meta":64,"style":64},[66,116810,116811,116825],{"__ignoreMap":64},[69,116812,116813,116815,116817,116819,116821,116823],{"class":71,"line":72},[69,116814,32059],{"class":90},[69,116816,115374],{"class":86},[69,116818,1019],{"class":82},[69,116820,115379],{"class":86},[69,116822,90775],{"class":90},[69,116824,1404],{"class":86},[69,116826,116827,116829,116831,116833,116835,116837],{"class":71,"line":79},[69,116828,32059],{"class":90},[69,116830,115395],{"class":86},[69,116832,1019],{"class":82},[69,116834,115379],{"class":86},[69,116836,90775],{"class":90},[69,116838,1404],{"class":86},[29,116840,116841,116842,102239,116845,116848],{},"提前查好 tip 和 target 的 site ID。这样 ",[66,116843,116844],{},"_get_obs",[66,116846,116847],{},"_get_reward"," 里就不用每次按名字查找。",[59,116850,116852],{"className":31614,"code":116851,"language":31616,"meta":64,"style":64},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[66,116853,116854,116864,116874],{"__ignoreMap":64},[69,116855,116856,116858,116860,116862],{"class":71,"line":72},[69,116857,32059],{"class":90},[69,116859,115088],{"class":86},[69,116861,1019],{"class":82},[69,116863,55654],{"class":90},[69,116865,116866,116868,116870,116872],{"class":71,"line":79},[69,116867,32059],{"class":90},[69,116869,115467],{"class":86},[69,116871,1019],{"class":82},[69,116873,115472],{"class":90},[69,116875,116876,116878,116880,116882],{"class":71,"line":106},[69,116877,32059],{"class":90},[69,116879,114927],{"class":86},[69,116881,1019],{"class":82},[69,116883,48569],{"class":90},[29,116885,116886,116889,116890,116893,116894,116897],{},[66,116887,116888],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[66,116891,116892],{},"max_steps"," 是一个 episode 最多运行多少步。",[66,116895,116896],{},"steps"," 记录当前 episode 已经走了多少步。",[59,116899,116900],{"className":31614,"code":114966,"language":31616,"meta":64,"style":64},[66,116901,116902],{"__ignoreMap":64},[69,116903,116904,116906,116908,116910,116912,116914,116916,116918,116920,116922,116924,116926,116928,116930,116932,116934,116936,116938,116940,116942],{"class":71,"line":72},[69,116905,32059],{"class":90},[69,116907,114975],{"class":86},[69,116909,1019],{"class":82},[69,116911,114980],{"class":86},[69,116913,114983],{"class":6458},[69,116915,114986],{"class":82},[69,116917,103624],{"class":90},[69,116919,13677],{"class":86},[69,116921,114993],{"class":6458},[69,116923,1019],{"class":82},[69,116925,103624],{"class":90},[69,116927,13677],{"class":86},[69,116929,97184],{"class":6458},[69,116931,1019],{"class":82},[69,116933,1398],{"class":86},[69,116935,1471],{"class":90},[69,116937,115010],{"class":86},[69,116939,94721],{"class":6458},[69,116941,1019],{"class":82},[69,116943,115017],{"class":86},[29,116945,116946,116947,116950,116951,102239,116954,116957],{},"定义动作空间。",[66,116948,116949],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[66,116952,116953],{},"low=-1.0",[66,116955,116956],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[59,116959,116960],{"className":31614,"code":115027,"language":31616,"meta":64,"style":64},[66,116961,116962],{"__ignoreMap":64},[69,116963,116964,116966,116968,116970,116972,116974,116976,116978,116980,116982,116984,116986,116988,116990,116992,116994,116996,116998],{"class":71,"line":72},[69,116965,32059],{"class":90},[69,116967,115036],{"class":86},[69,116969,1019],{"class":82},[69,116971,114980],{"class":86},[69,116973,114983],{"class":6458},[69,116975,114986],{"class":82},[69,116977,115047],{"class":86},[69,116979,114993],{"class":6458},[69,116981,1019],{"class":82},[69,116983,115047],{"class":86},[69,116985,97184],{"class":6458},[69,116987,1019],{"class":82},[69,116989,1398],{"class":86},[69,116991,390],{"class":90},[69,116993,115010],{"class":86},[69,116995,94721],{"class":6458},[69,116997,1019],{"class":82},[69,116999,115017],{"class":86},[29,117001,117002,117003,117006,117007,117010],{},"定义观测空间。",[66,117004,117005],{},"shape=(10,)"," 表示观测是 10 个数。",[66,117008,117009],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[59,117012,117014],{"className":31614,"code":117013,"language":31616,"meta":64,"style":64},"def _get_obs(self) -> np.ndarray:\n",[66,117015,117016],{"__ignoreMap":64},[69,117017,117018,117020,117022],{"class":71,"line":72},[69,117019,33183],{"class":82},[69,117021,115577],{"class":109},[69,117023,115580],{"class":86},[29,117025,117026,117027,117029],{},"定义内部函数，用来生成观测。函数名前面的 ",[66,117028,2378],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[59,117031,117033],{"className":31614,"code":117032,"language":31616,"meta":64,"style":64},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[66,117034,117035,117049],{"__ignoreMap":64},[69,117036,117037,117039,117041,117043,117045,117047],{"class":71,"line":72},[69,117038,112789],{"class":86},[69,117040,1019],{"class":82},[69,117042,40109],{"class":90},[69,117044,115591],{"class":86},[69,117046,32059],{"class":90},[69,117048,115596],{"class":86},[69,117050,117051,117053,117055,117057,117059,117061],{"class":71,"line":79},[69,117052,112799],{"class":86},[69,117054,1019],{"class":82},[69,117056,40109],{"class":90},[69,117058,115591],{"class":86},[69,117060,32059],{"class":90},[69,117062,115611],{"class":86},[29,117064,117065],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[59,117067,117069],{"className":31614,"code":117068,"language":31616,"meta":64,"style":64},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[66,117070,117071,117087],{"__ignoreMap":64},[69,117072,117073,117075,117077,117079,117081,117083,117085],{"class":71,"line":72},[69,117074,112075],{"class":86},[69,117076,1019],{"class":82},[69,117078,115620],{"class":86},[69,117080,32059],{"class":90},[69,117082,115625],{"class":86},[69,117084,32059],{"class":90},[69,117086,115630],{"class":86},[69,117088,117089,117091],{"class":71,"line":79},[69,117090,18285],{"class":82},[69,117092,115637],{"class":86},[29,117094,117095,117096,117099,117100,117102],{},"拼接观测，并转换成 ",[66,117097,117098],{},"float32","。很多强化学习库默认使用 ",[66,117101,117098],{},"，所以这里主动转换。",[59,117104,117105],{"className":31614,"code":116508,"language":31616,"meta":64,"style":64},[66,117106,117107],{"__ignoreMap":64},[69,117108,117109,117111,117113,117115,117117,117119,117121,117123,117125,117127,117129,117131,117133,117135,117137,117139,117141],{"class":71,"line":72},[69,117110,33183],{"class":82},[69,117112,115743],{"class":109},[69,117114,115746],{"class":86},[69,117116,1843],{"class":82},[69,117118,115751],{"class":86},[69,117120,1401],{"class":90},[69,117122,26346],{"class":82},[69,117124,40169],{"class":90},[69,117126,14805],{"class":82},[69,117128,40169],{"class":90},[69,117130,115764],{"class":86},[69,117132,115767],{"class":90},[69,117134,26346],{"class":82},[69,117136,40169],{"class":90},[69,117138,14805],{"class":82},[69,117140,40169],{"class":90},[69,117142,32022],{"class":86},[29,117144,117145,117146,117148,117149,117152],{},"定义 reset。",[66,117147,115787],{}," 用来控制随机数，保证实验可以复现。",[66,117150,117151],{},"options"," 用来接收额外配置，本章暂时不用。",[59,117154,117156],{"className":31614,"code":117155,"language":31616,"meta":64,"style":64},"super().reset(seed=seed)\n",[66,117157,117158],{"__ignoreMap":64},[69,117159,117160,117162,117164,117166,117168],{"class":71,"line":72},[69,117161,116749],{"class":90},[69,117163,115784],{"class":86},[69,117165,115787],{"class":6458},[69,117167,1019],{"class":82},[69,117169,115792],{"class":86},[29,117171,117172,117173,117176],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[66,117174,117175],{},"self.np_random"," 生成可复现的随机数。",[59,117178,117180],{"className":31614,"code":117179,"language":31616,"meta":64,"style":64},"mujoco.mj_resetData(self.model, self.data)\n",[66,117181,117182],{"__ignoreMap":64},[69,117183,117184,117187,117189,117191,117193],{"class":71,"line":72},[69,117185,117186],{"class":86},"mujoco.mj_resetData(",[69,117188,32059],{"class":90},[69,117190,115802],{"class":86},[69,117192,32059],{"class":90},[69,117194,115807],{"class":86},[29,117196,117197],{},"把 MuJoCo 状态重置到默认状态。",[59,117199,117201],{"className":31614,"code":117200,"language":31616,"meta":64,"style":64},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[66,117202,117203],{"__ignoreMap":64},[69,117204,117205,117207,117209,117211,117213,117215,117217,117219,117221,117223,117225,117227,117229,117231,117233,117235,117237],{"class":71,"line":72},[69,117206,32059],{"class":90},[69,117208,115818],{"class":86},[69,117210,1019],{"class":82},[69,117212,40109],{"class":90},[69,117214,115825],{"class":86},[69,117216,114983],{"class":6458},[69,117218,114986],{"class":82},[69,117220,87431],{"class":90},[69,117222,13677],{"class":86},[69,117224,114993],{"class":6458},[69,117226,1019],{"class":82},[69,117228,87431],{"class":90},[69,117230,13677],{"class":86},[69,117232,32732],{"class":6458},[69,117234,1019],{"class":82},[69,117236,32059],{"class":90},[69,117238,115850],{"class":86},[29,117240,116562,117241,117244,117245,117248,117249,117251],{},[66,117242,117243],{},"[:]"," 表示修改整个数组。",[66,117246,117247],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[66,117250,103371],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[59,117253,117255],{"className":31614,"code":117254,"language":31616,"meta":64,"style":64},"self.data.qvel[:] = 0.0\n",[66,117256,117257],{"__ignoreMap":64},[69,117258,117259,117261,117263,117265],{"class":71,"line":72},[69,117260,32059],{"class":90},[69,117262,115857],{"class":86},[69,117264,1019],{"class":82},[69,117266,105982],{"class":90},[29,117268,117269],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[59,117271,117273],{"className":31614,"code":117272,"language":31616,"meta":64,"style":64},"self.steps = 0\nreturn self._get_obs(), {}\n",[66,117274,117275,117285],{"__ignoreMap":64},[69,117276,117277,117279,117281,117283],{"class":71,"line":72},[69,117278,32059],{"class":90},[69,117280,114927],{"class":86},[69,117282,1019],{"class":82},[69,117284,48569],{"class":90},[69,117286,117287,117289,117291],{"class":71,"line":79},[69,117288,18285],{"class":82},[69,117290,40109],{"class":90},[69,117292,115897],{"class":86},[29,117294,117295],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[59,117297,117298],{"className":31614,"code":116571,"language":31616,"meta":64,"style":64},[66,117299,117300],{"__ignoreMap":64},[69,117301,117302,117304,117306],{"class":71,"line":72},[69,117303,33183],{"class":82},[69,117305,115908],{"class":109},[69,117307,115911],{"class":86},[29,117309,117310],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[59,117312,117314],{"className":31614,"code":117313,"language":31616,"meta":64,"style":64},"action = np.asarray(action, dtype=np.float32)\n",[66,117315,117316],{"__ignoreMap":64},[69,117317,117318,117320,117322,117324,117326,117328],{"class":71,"line":72},[69,117319,108663],{"class":86},[69,117321,1019],{"class":82},[69,117323,115920],{"class":86},[69,117325,94721],{"class":6458},[69,117327,1019],{"class":82},[69,117329,115017],{"class":86},[29,117331,117332,117333,29621],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[66,117334,117098],{},[59,117336,117338],{"className":31614,"code":117337,"language":31616,"meta":64,"style":64},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[66,117339,117340],{"__ignoreMap":64},[69,117341,117342,117344,117346,117348,117350,117352,117354],{"class":71,"line":72},[69,117343,108663],{"class":86},[69,117345,1019],{"class":82},[69,117347,108668],{"class":86},[69,117349,32059],{"class":90},[69,117351,115939],{"class":86},[69,117353,32059],{"class":90},[69,117355,115944],{"class":86},[29,117357,117358],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[59,117360,117362],{"className":31614,"code":117361,"language":31616,"meta":64,"style":64},"self.data.ctrl[:] = action\n",[66,117363,117364],{"__ignoreMap":64},[69,117365,117366,117368,117370,117372],{"class":71,"line":72},[69,117367,32059],{"class":90},[69,117369,115955],{"class":86},[69,117371,1019],{"class":82},[69,117373,108691],{"class":86},[29,117375,117376],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[59,117378,117380],{"className":31614,"code":117379,"language":31616,"meta":64,"style":64},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[66,117381,117382,117398],{"__ignoreMap":64},[69,117383,117384,117386,117388,117390,117392,117394,117396],{"class":71,"line":72},[69,117385,4269],{"class":82},[69,117387,102722],{"class":86},[69,117389,27280],{"class":82},[69,117391,33679],{"class":90},[69,117393,1398],{"class":86},[69,117395,32059],{"class":90},[69,117397,115976],{"class":86},[69,117399,117400,117403,117405,117407,117409],{"class":71,"line":79},[69,117401,117402],{"class":86},"    mujoco.mj_step(",[69,117404,32059],{"class":90},[69,117406,115802],{"class":86},[69,117408,32059],{"class":90},[69,117410,115807],{"class":86},[29,117412,117413,117414,117417,117418,117420,117421,29621],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[66,117415,117416],{},"frame_skip=5","，所以外部调用一次 ",[66,117419,115098],{},"，内部实际执行 5 次 ",[66,117422,102436],{},[59,117424,117426],{"className":31614,"code":117425,"language":31616,"meta":64,"style":64},"self.steps += 1\n",[66,117427,117428],{"__ignoreMap":64},[69,117429,117430,117432,117434,117436],{"class":71,"line":72},[69,117431,32059],{"class":90},[69,117433,114927],{"class":86},[69,117435,10719],{"class":82},[69,117437,56926],{"class":90},[29,117439,117440],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[59,117442,117444],{"className":31614,"code":117443,"language":31616,"meta":64,"style":64},"obs = self._get_obs()\nreward = self._get_reward()\n",[66,117445,117446,117456],{"__ignoreMap":64},[69,117447,117448,117450,117452,117454],{"class":71,"line":72},[69,117449,112075],{"class":86},[69,117451,1019],{"class":82},[69,117453,40109],{"class":90},[69,117455,116018],{"class":86},[69,117457,117458,117460,117462,117464],{"class":71,"line":79},[69,117459,112226],{"class":86},[69,117461,1019],{"class":82},[69,117463,40109],{"class":90},[69,117465,116029],{"class":86},[29,117467,117468],{},"计算新的观测和奖励。",[59,117470,117472],{"className":31614,"code":117471,"language":31616,"meta":64,"style":64},"dist = float(np.linalg.norm(tip - target))\n",[66,117473,117474],{"__ignoreMap":64},[69,117475,117476,117478,117480,117482,117484,117486],{"class":71,"line":72},[69,117477,112817],{"class":86},[69,117479,1019],{"class":82},[69,117481,111018],{"class":90},[69,117483,116072],{"class":86},[69,117485,1920],{"class":82},[69,117487,116077],{"class":86},[29,117489,117490],{},"计算末端到目标的距离，并转换成 Python float。",[59,117492,117493],{"className":31614,"code":114898,"language":31616,"meta":64,"style":64},[66,117494,117495,117507],{"__ignoreMap":64},[69,117496,117497,117499,117501,117503,117505],{"class":71,"line":72},[69,117498,114905],{"class":86},[69,117500,1019],{"class":82},[69,117502,114910],{"class":86},[69,117504,1011],{"class":82},[69,117506,114915],{"class":90},[69,117508,117509,117511,117513,117515,117517,117519,117521],{"class":71,"line":79},[69,117510,114920],{"class":86},[69,117512,1019],{"class":82},[69,117514,40109],{"class":90},[69,117516,114927],{"class":86},[69,117518,2955],{"class":82},[69,117520,40109],{"class":90},[69,117522,114934],{"class":86},[29,117524,117525],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[59,117527,117529],{"className":31614,"code":117528,"language":31616,"meta":64,"style":64},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[66,117530,117531,117544],{"__ignoreMap":64},[69,117532,117533,117536,117538,117540,117542],{"class":71,"line":72},[69,117534,117535],{"class":86},"info ",[69,117537,1019],{"class":82},[69,117539,5692],{"class":86},[69,117541,116123],{"class":1022},[69,117543,116126],{"class":86},[69,117545,117546,117548],{"class":71,"line":79},[69,117547,18285],{"class":82},[69,117549,116133],{"class":86},[29,117551,117552,117555],{},[66,117553,117554],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[59,117557,117559],{"className":31614,"code":117558,"language":31616,"meta":64,"style":64},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[66,117560,117561,117570],{"__ignoreMap":64},[69,117562,117563,117566,117568],{"class":71,"line":72},[69,117564,117565],{"class":86},"env ",[69,117567,1019],{"class":82},[69,117569,116163],{"class":86},[69,117571,117572,117574,117576,117578,117580,117582,117584],{"class":71,"line":79},[69,117573,114621],{"class":86},[69,117575,1019],{"class":82},[69,117577,116173],{"class":86},[69,117579,115787],{"class":6458},[69,117581,1019],{"class":82},[69,117583,1583],{"class":90},[69,117585,1404],{"class":86},[29,117587,117588,117589,117592],{},"创建环境并重置。",[66,117590,117591],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[59,117594,117596],{"className":31614,"code":117595,"language":31616,"meta":64,"style":64},"action = env.action_space.sample()\n",[66,117597,117598],{"__ignoreMap":64},[69,117599,117600,117602,117604],{"class":71,"line":72},[69,117601,108663],{"class":86},[69,117603,1019],{"class":82},[69,117605,116242],{"class":86},[29,117607,117608],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117610,103537],{"id":103536},[29,117612,106705],{},[59,117614,117617],{"className":117615,"code":117616,"language":540,"meta":64},[538],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[66,117618,117616],{"__ignoreMap":64},[29,117620,117621],{},"这个环境已经具备强化学习环境的基本结构。",[29,117623,117624],{},"主函数里使用随机动作：",[59,117626,117627],{"className":31614,"code":117595,"language":31616,"meta":64,"style":64},[66,117628,117629],{"__ignoreMap":64},[69,117630,117631,117633,117635],{"class":71,"line":72},[69,117632,108663],{"class":86},[69,117634,1019],{"class":82},[69,117636,116242],{"class":86},[29,117638,117639],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117641,103569],{"id":103568},[37,117643,117644,117647,117653,117662,117671,117680,117686],{},[40,117645,117646],{},"运行程序。",[40,117648,117649,117650,29621],{},"确认 ",[66,117651,117652],{},"obs.shape == (10,)",[40,117654,112402,117655,117658,117659,29621],{},[66,117656,117657],{},"env.action_space","，应类似 ",[66,117660,117661],{},"Box(-1.0, 1.0, (2,), float32)",[40,117663,106806,117664,117667,117668,29621],{},[66,117665,117666],{},"self.max_steps = 10","，确认环境会更快 ",[66,117669,117670],{},"truncated=True",[40,117672,103632,117673,103635,117676,117679],{},[66,117674,117675],{},"terminated = dist \u003C 0.05",[66,117677,117678],{},"dist \u003C 0.2","，观察是否更容易结束。",[40,117681,103632,117682,117685],{},[66,117683,117684],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[40,117687,117688,117689,117691,117692,117695],{},"在 ",[66,117690,117554],{}," 里加入 ",[66,117693,117694],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117697,103674],{"id":103673},[19,117699,117701],{"id":117700},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[29,117703,117704,117705,117707],{},"Gymnasium 的 ",[66,117706,108355],{}," 返回 5 个值:",[59,117709,117711],{"className":31614,"code":117710,"language":31616,"meta":64,"style":64},"obs, reward, terminated, truncated, info\n",[66,117712,117713],{"__ignoreMap":64},[69,117714,117715],{"class":71,"line":72},[69,117716,117710],{"class":86},[29,117718,117719],{},"不是旧 Gym 的 4 个值。",[19,117721,117723,117726],{"id":117722},"datactrl-action-维度错误",[66,117724,117725],{},"data.ctrl[:] = action"," 维度错误",[29,117728,103744],{},[59,117730,117732],{"className":31614,"code":117731,"language":31616,"meta":64,"style":64},"print(self.model.nu)\nprint(action.shape)\n",[66,117733,117734,117745],{"__ignoreMap":64},[69,117735,117736,117738,117740,117742],{"class":71,"line":72},[69,117737,31651],{"class":90},[69,117739,1398],{"class":86},[69,117741,32059],{"class":90},[69,117743,117744],{"class":86},".model.nu)\n",[69,117746,117747,117749],{"class":71,"line":79},[69,117748,31651],{"class":90},[69,117750,117751],{"class":86},"(action.shape)\n",[29,117753,117754],{},"两者必须匹配。",[19,117756,117758],{"id":117757},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[29,117760,103683],{},[59,117762,117764],{"className":31614,"code":117763,"language":31616,"meta":64,"style":64},"mujoco.mj_forward(self.model, self.data)\n",[66,117765,117766],{"__ignoreMap":64},[69,117767,117768,117771,117773,117775,117777],{"class":71,"line":72},[69,117769,117770],{"class":86},"mujoco.mj_forward(",[69,117772,32059],{"class":90},[69,117774,115802],{"class":86},[69,117776,32059],{"class":90},[69,117778,115807],{"class":86},[19,117780,117782,117784],{"id":117781},"observation_space-维度和-obs-不一致",[66,117783,114821],{}," 维度和 obs 不一致",[29,117786,103796],{},[59,117788,117790],{"className":31614,"code":117789,"language":31616,"meta":64,"style":64},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[66,117791,117792,117802,117809],{"__ignoreMap":64},[69,117793,117794,117796,117798,117800],{"class":71,"line":72},[69,117795,112075],{"class":86},[69,117797,1019],{"class":82},[69,117799,40109],{"class":90},[69,117801,116018],{"class":86},[69,117803,117804,117806],{"class":71,"line":79},[69,117805,31651],{"class":90},[69,117807,117808],{"class":86},"(obs.shape)\n",[69,117810,117811,117813,117815,117817],{"class":71,"line":106},[69,117812,31651],{"class":90},[69,117814,1398],{"class":86},[69,117816,32059],{"class":90},[69,117818,117819],{"class":86},".observation_space.shape)\n",[29,117821,117822],{},"两者必须一致。本章观测是：",[59,117824,117827],{"className":117825,"code":117826,"language":540,"meta":64},[538],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[66,117828,117826],{"__ignoreMap":64},[19,117830,117832],{"id":117831},"action-超过范围","action 超过范围",[29,117834,117835],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[59,117837,117838],{"className":31614,"code":117337,"language":31616,"meta":64,"style":64},[66,117839,117840],{"__ignoreMap":64},[69,117841,117842,117844,117846,117848,117850,117852,117854],{"class":71,"line":72},[69,117843,108663],{"class":86},[69,117845,1019],{"class":82},[69,117847,108668],{"class":86},[69,117849,32059],{"class":90},[69,117851,115939],{"class":86},[69,117853,32059],{"class":90},[69,117855,115944],{"class":86},[29,117857,117858,117859,29621],{},"这能避免无效动作直接写入 ",[66,117860,102297],{},[19,117862,117864],{"id":117863},"忘记返回-info","忘记返回 info",[29,117866,117704,117867,102239,117869,117871],{},[66,117868,71281],{},[66,117870,108355],{}," 都会返回 info：",[59,117873,117874],{"className":31614,"code":114614,"language":31616,"meta":64,"style":64},[66,117875,117876,117884],{"__ignoreMap":64},[69,117877,117878,117880,117882],{"class":71,"line":72},[69,117879,114621],{"class":86},[69,117881,1019],{"class":82},[69,117883,114626],{"class":86},[69,117885,117886,117888,117890],{"class":71,"line":79},[69,117887,114631],{"class":86},[69,117889,1019],{"class":82},[69,117891,114636],{"class":86},[29,117893,117894,117895,29621],{},"即使暂时没有额外信息，也返回 ",[66,117896,33695],{},[14,117898,117900],{"id":117899},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[29,117902,117903],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[37,117905,117906,117909,117912,117915,117918,117921],{},[40,117907,117908],{},"更稳定的 reward。",[40,117910,117911],{},"合理的 episode 长度。",[40,117913,117914],{},"可重复的随机目标采样。",[40,117916,117917],{},"render 接口。",[40,117919,117920],{},"环境注册代码。",[40,117922,117923],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[29,117925,117926],{},"如果只是自己写训练循环，最小形式是：",[59,117928,117930],{"className":31614,"code":117929,"language":31616,"meta":64,"style":64},"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",[66,117931,117932,117940,117956,117960,117976,117985,117994,118004],{"__ignoreMap":64},[69,117933,117934,117936,117938],{"class":71,"line":72},[69,117935,117565],{"class":86},[69,117937,1019],{"class":82},[69,117939,116163],{"class":86},[69,117941,117942,117944,117946,117948,117950,117952,117954],{"class":71,"line":79},[69,117943,114621],{"class":86},[69,117945,1019],{"class":82},[69,117947,116173],{"class":86},[69,117949,115787],{"class":6458},[69,117951,1019],{"class":82},[69,117953,1583],{"class":90},[69,117955,1404],{"class":86},[69,117957,117958],{"class":71,"line":106},[69,117959,3644],{"emptyLinePlaceholder":1325},[69,117961,117962,117964,117966,117968,117970,117972,117974],{"class":71,"line":116},[69,117963,4269],{"class":82},[69,117965,102722],{"class":86},[69,117967,27280],{"class":82},[69,117969,33679],{"class":90},[69,117971,1398],{"class":86},[69,117973,7652],{"class":90},[69,117975,32022],{"class":86},[69,117977,117978,117981,117983],{"class":71,"line":133},[69,117979,117980],{"class":86},"    action ",[69,117982,1019],{"class":82},[69,117984,116242],{"class":86},[69,117986,117987,117990,117992],{"class":71,"line":139},[69,117988,117989],{"class":86},"    obs, reward, terminated, truncated, info ",[69,117991,1019],{"class":82},[69,117993,114636],{"class":86},[69,117995,117996,117998,118000,118002],{"class":71,"line":401},[69,117997,4345],{"class":82},[69,117999,116308],{"class":86},[69,118001,116311],{"class":82},[69,118003,116314],{"class":86},[69,118005,118006,118009,118011],{"class":71,"line":470},[69,118007,118008],{"class":86},"        obs, info ",[69,118010,1019],{"class":82},[69,118012,114626],{"class":86},[14,118014,118016],{"id":118015},"_9本章小结","9.本章小结",[29,118018,118019],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[59,118021,118024],{"className":118022,"code":118023,"language":540,"meta":64},[538],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[66,118025,118023],{"__ignoreMap":64},[29,118027,118028],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1297,118030,118031],{},"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":64,"searchDepth":79,"depth":79,"links":118033},[118034,118035,118036,118043,118047,118048,118049,118059,118060],{"id":101867,"depth":79,"text":101868},{"id":101990,"depth":79,"text":101991},{"id":102265,"depth":79,"text":102266,"children":118037},[118038,118040,118042],{"id":114845,"depth":106,"text":118039},"terminated 和 truncated 的区别",{"id":114948,"depth":106,"text":118041},"observation_space 和 action_space",{"id":115075,"depth":106,"text":115076},{"id":102473,"depth":79,"text":102474,"children":118044},[118045,118046],{"id":102793,"depth":106,"text":102793},{"id":102929,"depth":106,"text":102929},{"id":103536,"depth":79,"text":103537},{"id":103568,"depth":79,"text":103569},{"id":103673,"depth":79,"text":103674,"children":118050},[118051,118052,118054,118055,118057,118058],{"id":117700,"depth":106,"text":117701},{"id":117722,"depth":106,"text":118053},"data.ctrl[:] = action 维度错误",{"id":117757,"depth":106,"text":117758},{"id":117781,"depth":106,"text":118056},"observation_space 维度和 obs 不一致",{"id":117831,"depth":106,"text":117832},{"id":117863,"depth":106,"text":117864},{"id":117899,"depth":79,"text":117900},{"id":118015,"depth":79,"text":118016},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114598,"description":64},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118067,"title":118068,"body":118069,"description":118492,"extension":1323,"meta":118493,"navigation":1325,"path":118494,"seo":118495,"stem":118496,"__hash__":118497},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118070,"toc":118482},[118071,118075,118078,118081,118101,118107,118113,118123,118126,118129,118149,118152,118156,118159,118165,118168,118182,118185,118188,118262,118265,118271,118274,118297,118300,118350,118353,118359,118362,118365,118368,118387,118390,118396,118399,118402,118405,118425,118428,118431,118434,118479],[10,118072,118074],{"id":118073},"mujoco-学习","MuJoCo 学习",[29,118076,118077],{},"初版",[29,118079,118080],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[37,118082,118083,118086,118089,118098],{},[40,118084,118085],{},"MuJoCo 模型文件在描述什么。",[40,118087,118088],{},"Python 代码怎样读取和推进仿真。",[40,118090,118091,1604,118093,1604,118095,118097],{},[66,118092,105251],{},[66,118094,105581],{},[66,118096,105584],{}," 这些数组为什么重要。",[40,118099,118100],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[29,118102,118103,118104,118106],{},"默认环境为 Fedora 44、Python >= 3.10、",[66,118105,102248],{}," 官方 Python bindings。",[29,118108,118109,118110,118112],{},"注意：本文禁止使用 ",[66,118111,102233],{},"。所有示例均使用：",[59,118114,118115],{"className":31614,"code":102799,"language":31616,"meta":64,"style":64},[66,118116,118117],{"__ignoreMap":64},[69,118118,118119,118121],{"class":71,"line":72},[69,118120,31628],{"class":82},[69,118122,102522],{"class":86},[14,118124,118125],{"id":118125},"适合谁阅读",[29,118127,118128],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[37,118130,118131,118134,118137,118140],{},[40,118132,118133],{},"没学过 MuJoCo，只会一点 Python。",[40,118135,118136],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[40,118138,118139],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[40,118141,118142,118143,118145,118146,118148],{},"以前接触过 ",[66,118144,102233],{},"，现在想迁移到官方 ",[66,118147,102242],{}," Python bindings。",[29,118150,118151],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118153,118155],{"id":118154},"mujoco-到底是什么","MuJoCo 到底是什么",[29,118157,118158],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[59,118160,118163],{"className":118161,"code":118162,"language":540,"meta":64},[538],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[66,118164,118162],{"__ignoreMap":64},[29,118166,118167],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[37,118169,118170,118173,118176,118179],{},[40,118171,118172],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[40,118174,118175],{},"快速测试控制算法，不必一开始就上真实机器人。",[40,118177,118178],{},"生成强化学习环境。",[40,118180,118181],{},"采集状态、动作、图像、奖励等训练数据。",[14,118183,118184],{"id":118184},"学习前的心智模型",[29,118186,118187],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1530,118189,118190,118202],{},[1533,118191,118192],{},[1536,118193,118194,118197,118200],{},[1539,118195,118196],{"align":1202},"部分",[1539,118198,118199],{"align":1202},"负责什么",[1539,118201,22426],{"align":1202},[1576,118203,118204,118215,118227,118239,118251],{},[1536,118205,118206,118209,118212],{},[1581,118207,118208],{"align":1202},"MJCF XML",[1581,118210,118211],{"align":1202},"定义世界和机器人结构",[1581,118213,118214],{"align":1202},"地面、盒子、关节、电机、摄像头",[1536,118216,118217,118221,118224],{},[1581,118218,118219],{"align":1202},[66,118220,101930],{},[1581,118222,118223],{"align":1202},"编译后的静态模型",[1581,118225,118226],{"align":1202},"有几个关节、有几个电机、时间步长是多少",[1536,118228,118229,118233,118236],{},[1581,118230,118231],{"align":1202},[66,118232,101940],{},[1581,118234,118235],{"align":1202},"运行中的动态状态",[1581,118237,118238],{"align":1202},"当前时间、位置、速度、电机输入",[1536,118240,118241,118245,118248],{},[1581,118242,118243],{"align":1202},[66,118244,102436],{},[1581,118246,118247],{"align":1202},"推进一步物理仿真",[1581,118249,118250],{"align":1202},"根据重力、力、碰撞更新状态",[1536,118252,118253,118256,118259],{},[1581,118254,118255],{"align":1202},"Viewer \u002F Renderer",[1581,118257,118258],{"align":1202},"把仿真显示出来",[1581,118260,118261],{"align":1202},"打开窗口或保存图片",[29,118263,118264],{},"一句话总结：",[59,118266,118269],{"className":118267,"code":118268,"language":540,"meta":64},[538],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[66,118270,118268],{"__ignoreMap":64},[29,118272,118273],{},"参考来源：",[162,118275,118276,118283,118290],{},[40,118277,118278,118279],{},"MuJoCo Python 官方文档：",[187,118280,118281],{"href":118281,"rel":118282},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[191],[40,118284,118285,118286],{},"MuJoCo XML Reference：",[187,118287,118288],{"href":118288,"rel":118289},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[191],[40,118291,118292,118293],{},"MuJoCo Overview：",[187,118294,118295],{"href":118295,"rel":118296},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[191],[14,118298,118299],{"id":118299},"章节目录",[37,118301,118302,118308,118314,118320,118326,118332,118338,118344],{},[40,118303,118304],{},[187,118305,118307],{"href":118306},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[40,118309,118310],{},[187,118311,118313],{"href":118312},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[40,118315,118316],{},[187,118317,118319],{"href":118318},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[40,118321,118322],{},[187,118323,118325],{"href":118324},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[40,118327,118328],{},[187,118329,118331],{"href":118330},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[40,118333,118334],{},[187,118335,118337],{"href":118336},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[40,118339,118340],{},[187,118341,118343],{"href":118342},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[40,118345,118346],{},[187,118347,118349],{"href":118348},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118351,118352],{"id":118352},"推荐学习路线",[59,118354,118357],{"className":118355,"code":118356,"language":540,"meta":64},[538],"环境安装\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",[66,118358,118356],{"__ignoreMap":64},[29,118360,118361],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118363,118364],{"id":118364},"建议的目录结构",[29,118366,118367],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[59,118369,118371],{"className":25059,"code":118370,"language":25061,"meta":64,"style":64},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[66,118372,118373,118381],{"__ignoreMap":64},[69,118374,118375,118377,118379],{"class":71,"line":72},[69,118376,102487],{"class":109},[69,118378,30452],{"class":90},[69,118380,102492],{"class":1022},[69,118382,118383,118385],{"class":71,"line":79},[69,118384,102497],{"class":90},[69,118386,102492],{"class":1022},[29,118388,118389],{},"每一章的代码都单独保存：",[59,118391,118394],{"className":118392,"code":118393,"language":540,"meta":64},[538],"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",[66,118395,118393],{"__ignoreMap":64},[29,118397,118398],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118400,118401],{"id":118401},"学习方法",[29,118403,118404],{},"每章建议按这个顺序操作：",[37,118406,118407,118410,118413,118416,118419,118422],{},[40,118408,118409],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[40,118411,118412],{},"复制最小可运行代码，保存成指定文件。",[40,118414,118415],{},"运行代码，确认没有报错。",[40,118417,118418],{},"对照“运行结果说明”理解输出。",[40,118420,118421],{},"做“验证步骤”，主动改一两个参数。",[40,118423,118424],{},"遇到报错先看“常见错误与解决方案”。",[29,118426,118427],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118429,118430],{"id":118430},"全局排错顺序",[29,118432,118433],{},"遇到问题时，按下面顺序查：",[37,118435,118436,118442,118448,118453,118456,118459,118466,118476],{},[40,118437,118438,118439],{},"Python 环境是否激活：",[66,118440,118441],{},"which python",[40,118443,118444,118445],{},"MuJoCo 是否能导入：",[66,118446,118447],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[40,118449,118450,118451],{},"是否误装了 ",[66,118452,102233],{},[40,118454,118455],{},"XML 标签是否闭合、属性是否拼写正确",[40,118457,118458],{},"actuator 引用的 joint 名字是否存在",[40,118460,118461,118463,118464],{},[66,118462,102297],{}," 的长度是否等于 ",[66,118465,103379],{},[40,118467,106806,118468,83760,118470,118472,118473],{},[66,118469,105251],{},[66,118471,105581],{}," 后是否调用了 ",[66,118474,118475],{},"mujoco.mj_forward",[40,118477,118478],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1297,118480,118481],{},"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":64,"searchDepth":79,"depth":79,"links":118483},[118484,118485,118486,118487,118488,118489,118490,118491],{"id":118125,"depth":79,"text":118125},{"id":118154,"depth":79,"text":118155},{"id":118184,"depth":79,"text":118184},{"id":118299,"depth":79,"text":118299},{"id":118352,"depth":79,"text":118352},{"id":118364,"depth":79,"text":118364},{"id":118401,"depth":79,"text":118401},{"id":118430,"depth":79,"text":118430},"仿真搭建。",{"category":24617},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118068,"description":118492},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118499,"title":118500,"body":118501,"description":1322,"extension":1323,"meta":118956,"navigation":1325,"path":118957,"seo":118958,"stem":118959,"__hash__":118960},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118502,"toc":118954},[118503,118506,118509,118515,118951],[10,118504,118500],{"id":118505},"_1-最常用的基本操作更新",[29,118507,118508],{},"装linux系统教程：",[29,118510,118511],{},[187,118512,118513],{"href":118513,"rel":118514},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[191],[59,118516,118520],{"className":118517,"code":118518,"language":118519,"meta":64,"style":64},"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",[66,118521,118522,118527,118532,118541,118546,118555,118560,118580,118585,118596,118601,118610,118615,118643,118648,118667,118672,118691,118695,118700,118716,118720,118725,118755,118759,118764,118780,118784,118789,118804,118808,118813,118829,118833,118838,118850,118862,118866,118871,118888,118892,118897,118915,118919,118924,118933,118937,118942],{"__ignoreMap":64},[69,118523,118524],{"class":71,"line":72},[69,118525,118526],{"class":75},"#更新相关的知识\n",[69,118528,118529],{"class":71,"line":79},[69,118530,118531],{"class":75},"# 更新软件包列表（从服务器获取最新软件信息）\n",[69,118533,118534,118536,118539],{"class":71,"line":106},[69,118535,25813],{"class":109},[69,118537,118538],{"class":1022}," apt",[69,118540,27478],{"class":1022},[69,118542,118543],{"class":71,"line":116},[69,118544,118545],{"class":75},"# 升级所有可更新的软件包（不删除旧包）\n",[69,118547,118548,118550,118552],{"class":71,"line":133},[69,118549,25813],{"class":109},[69,118551,118538],{"class":1022},[69,118553,118554],{"class":1022}," upgrade\n",[69,118556,118557],{"class":71,"line":139},[69,118558,118559],{"class":75},"#更新和升级软件包\n",[69,118561,118562,118564,118566,118569,118571,118573,118575,118578],{"class":71,"line":401},[69,118563,25813],{"class":109},[69,118565,118538],{"class":1022},[69,118567,118568],{"class":1022}," update",[69,118570,27426],{"class":86},[69,118572,25813],{"class":109},[69,118574,118538],{"class":1022},[69,118576,118577],{"class":1022}," upgrade",[69,118579,102202],{"class":90},[69,118581,118582],{"class":71,"line":470},[69,118583,118584],{"class":75},"#列出可更新的软件包及版本信息\n",[69,118586,118587,118590,118593],{"class":71,"line":475},[69,118588,118589],{"class":109},"apt",[69,118591,118592],{"class":1022}," list",[69,118594,118595],{"class":90}," --upgradable\n",[69,118597,118598],{"class":71,"line":482},[69,118599,118600],{"class":75},"#彻底升级（处理依赖关系，可能删除旧包）\n",[69,118602,118603,118605,118607],{"class":71,"line":497},[69,118604,25813],{"class":109},[69,118606,118538],{"class":1022},[69,118608,118609],{"class":1022}," full-upgrade\n",[69,118611,118612],{"class":71,"line":502},[69,118613,118614],{"class":75},"#设置指定版本\n",[69,118616,118617,118619,118621,118623,118625,118628,118630,118632,118634,118636,118639,118641],{"class":71,"line":509},[69,118618,25813],{"class":109},[69,118620,118538],{"class":1022},[69,118622,25071],{"class":1022},[69,118624,30138],{"class":82},[69,118626,118627],{"class":1022},"package_nam",[69,118629,1468],{"class":86},[69,118631,2346],{"class":82},[69,118633,1019],{"class":1022},[69,118635,1011],{"class":82},[69,118637,118638],{"class":1022},"version_numbe",[69,118640,2057],{"class":86},[69,118642,1026],{"class":82},[69,118644,118645],{"class":71,"line":524},[69,118646,118647],{"class":75},"#只安装软件包不升级\n",[69,118649,118650,118652,118654,118656,118658,118660,118662,118664],{"class":71,"line":2888},[69,118651,25813],{"class":109},[69,118653,118538],{"class":1022},[69,118655,25071],{"class":1022},[69,118657,30138],{"class":82},[69,118659,118627],{"class":1022},[69,118661,1468],{"class":86},[69,118663,2346],{"class":82},[69,118665,118666],{"class":90}," --no-upgrade\n",[69,118668,118669],{"class":71,"line":2893},[69,118670,118671],{"class":75},"#只升级，不存在就不安装\n",[69,118673,118674,118676,118678,118680,118682,118684,118686,118688],{"class":71,"line":2899},[69,118675,25813],{"class":109},[69,118677,118538],{"class":1022},[69,118679,25071],{"class":1022},[69,118681,30138],{"class":82},[69,118683,118627],{"class":1022},[69,118685,1468],{"class":86},[69,118687,2346],{"class":82},[69,118689,118690],{"class":90}," --only-upgrade\n",[69,118692,118693],{"class":71,"line":2919},[69,118694,3644],{"emptyLinePlaceholder":1325},[69,118696,118697],{"class":71,"line":2924},[69,118698,118699],{"class":75},"#安装指定的软件命令\n",[69,118701,118702,118704,118706,118708,118710,118712,118714],{"class":71,"line":2938},[69,118703,25813],{"class":109},[69,118705,118538],{"class":1022},[69,118707,25071],{"class":1022},[69,118709,30138],{"class":82},[69,118711,118627],{"class":1022},[69,118713,1468],{"class":86},[69,118715,1026],{"class":82},[69,118717,118718],{"class":71,"line":2943},[69,118719,3644],{"emptyLinePlaceholder":1325},[69,118721,118722],{"class":71,"line":2972},[69,118723,118724],{"class":75},"#安装多个软件包\n",[69,118726,118727,118729,118731,118733,118735,118738,118741,118743,118745,118748,118750,118752],{"class":71,"line":2977},[69,118728,25813],{"class":109},[69,118730,118538],{"class":1022},[69,118732,25071],{"class":1022},[69,118734,30138],{"class":82},[69,118736,118737],{"class":1022},"package_",[69,118739,118740],{"class":82},"1>",[69,118742,30138],{"class":82},[69,118744,118737],{"class":1022},[69,118746,118747],{"class":82},"2>",[69,118749,30138],{"class":82},[69,118751,118737],{"class":1022},[69,118753,118754],{"class":82},"3>\n",[69,118756,118757],{"class":71,"line":2994},[69,118758,3644],{"emptyLinePlaceholder":1325},[69,118760,118761],{"class":71,"line":2999},[69,118762,118763],{"class":75},"#更新指定的软件命令\n",[69,118765,118766,118768,118770,118772,118774,118776,118778],{"class":71,"line":3004},[69,118767,25813],{"class":109},[69,118769,118538],{"class":1022},[69,118771,118568],{"class":1022},[69,118773,30138],{"class":82},[69,118775,118627],{"class":1022},[69,118777,1468],{"class":86},[69,118779,1026],{"class":82},[69,118781,118782],{"class":71,"line":3009},[69,118783,3644],{"emptyLinePlaceholder":1325},[69,118785,118786],{"class":71,"line":3023},[69,118787,118788],{"class":75},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[69,118790,118791,118793,118796,118798,118800,118802],{"class":71,"line":3028},[69,118792,118589],{"class":109},[69,118794,118795],{"class":1022}," show",[69,118797,30138],{"class":82},[69,118799,118627],{"class":1022},[69,118801,1468],{"class":86},[69,118803,1026],{"class":82},[69,118805,118806],{"class":71,"line":3821},[69,118807,3644],{"emptyLinePlaceholder":1325},[69,118809,118810],{"class":71,"line":3835},[69,118811,118812],{"class":75},"#删除软件包命令\n",[69,118814,118815,118817,118819,118821,118823,118825,118827],{"class":71,"line":3843},[69,118816,25813],{"class":109},[69,118818,118538],{"class":1022},[69,118820,27315],{"class":1022},[69,118822,30138],{"class":82},[69,118824,118627],{"class":1022},[69,118826,1468],{"class":86},[69,118828,1026],{"class":82},[69,118830,118831],{"class":71,"line":3848},[69,118832,3644],{"emptyLinePlaceholder":1325},[69,118834,118835],{"class":71,"line":3854},[69,118836,118837],{"class":75},"# 清理旧版本和缓存（释放磁盘空间）\n",[69,118839,118840,118842,118844,118847],{"class":71,"line":3860},[69,118841,25813],{"class":109},[69,118843,118538],{"class":1022},[69,118845,118846],{"class":1022}," autoremove",[69,118848,118849],{"class":75},"  # 删除不再需要的依赖和库文件\n",[69,118851,118852,118854,118856,118859],{"class":71,"line":3865},[69,118853,25813],{"class":109},[69,118855,118538],{"class":1022},[69,118857,118858],{"class":1022}," clean",[69,118860,118861],{"class":75},"       # 清理下载的缓存包\n",[69,118863,118864],{"class":71,"line":9190},[69,118865,3644],{"emptyLinePlaceholder":1325},[69,118867,118868],{"class":71,"line":9214},[69,118869,118870],{"class":75},"#移除软件包及配置文件\n",[69,118872,118873,118875,118877,118880,118882,118884,118886],{"class":71,"line":9219},[69,118874,25813],{"class":109},[69,118876,118538],{"class":1022},[69,118878,118879],{"class":1022}," purge",[69,118881,30138],{"class":82},[69,118883,118627],{"class":1022},[69,118885,1468],{"class":86},[69,118887,1026],{"class":82},[69,118889,118890],{"class":71,"line":9225},[69,118891,3644],{"emptyLinePlaceholder":1325},[69,118893,118894],{"class":71,"line":9252},[69,118895,118896],{"class":75},"#查找软件包命令\n",[69,118898,118899,118901,118903,118906,118908,118911,118913],{"class":71,"line":9257},[69,118900,25813],{"class":109},[69,118902,118538],{"class":1022},[69,118904,118905],{"class":1022}," search",[69,118907,30138],{"class":82},[69,118909,118910],{"class":1022},"keywor",[69,118912,1704],{"class":86},[69,118914,1026],{"class":82},[69,118916,118917],{"class":71,"line":9263},[69,118918,3644],{"emptyLinePlaceholder":1325},[69,118920,118921],{"class":71,"line":9275},[69,118922,118923],{"class":75},"#列出所有已安装的包\n",[69,118925,118926,118928,118930],{"class":71,"line":9287},[69,118927,118589],{"class":109},[69,118929,118592],{"class":1022},[69,118931,118932],{"class":90}," --installed\n",[69,118934,118935],{"class":71,"line":9299},[69,118936,3644],{"emptyLinePlaceholder":1325},[69,118938,118939],{"class":71,"line":10958},[69,118940,118941],{"class":75},"#列出所有已安装的包的版本信息\n",[69,118943,118944,118946,118948],{"class":71,"line":10983},[69,118945,118589],{"class":109},[69,118947,118592],{"class":1022},[69,118949,118950],{"class":90}," --all-versions\n",[1297,118952,118953],{},"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":64,"searchDepth":79,"depth":79,"links":118955},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118500,"description":1322},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118962,"title":118963,"body":118964,"description":1322,"extension":1323,"meta":119705,"navigation":1325,"path":119706,"seo":119707,"stem":119708,"__hash__":119709},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118965,"toc":119692},[118966,118969,118973,118976,118982,118986,118990,118996,119001,119006,119011,119016,119021,119024,119027,119030,119033,119037,119040,119045,119048,119053,119056,119061,119068,119071,119074,119077,119080,119083,119094,119098,119102,119107,119112,119116,119121,119125,119130,119134,119138,119143,119146,119191,119196,119200,119204,119209,119215,119220,119230,119235,119245,119250,119255,119282,119286,119289,119294,119297,119322,119326,119331,119334,119339,119344,119364,119369,119372,119387,119391,119444,119447,119452,119456,119459,119474,119477,119480,119485,119489,119493,119496,119500,119504,119507,119512,119517,119521,119528,119536,119539,119546,119551,119556,119559,119564,119571,119576,119583,119587,119589,119594,119598,119601,119604,119609,119612,119617,119620,119625,119630,119635,119639,119644,119648,119689],[10,118967,118963],{"id":118968},"_2-linux装机教程",[14,118970,118972],{"id":118971},"_21-实体机","2.1 实体机",[29,118974,118975],{},"使用清华源：（Ubuntu24.04）",[29,118977,118978],{},[187,118979,118980],{"href":118980,"rel":118981},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[191],[14,118983,118985],{"id":118984},"_22-普通虚拟机","2.2 普通虚拟机",[19,118987,118989],{"id":118988},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[29,118991,118992],{},[187,118993,118994],{"href":118994,"rel":118995},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[191],[29,118997,118998],{},[24,118999],{"alt":64,"src":119000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[29,119002,119003],{},[24,119004],{"alt":64,"src":119005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[29,119007,119008],{},[24,119009],{"alt":64,"src":119010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[29,119012,119013],{},[24,119014],{"alt":64,"src":119015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[29,119017,119018],{},[24,119019],{"alt":64,"src":119020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[29,119022,119023],{},"内存4G（4096MB）；",[29,119025,119026],{},"CPU给4个核；",[29,119028,119029],{},"硬盘动态分配60G；",[29,119031,119032],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[19,119034,119036],{"id":119035},"_222-安装ubuntu","2.2.2 安装Ubuntu",[29,119038,119039],{},"按照1.1的步骤下载Ubuntu",[29,119041,119042],{},[24,119043],{"alt":64,"src":119044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[29,119046,119047],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[29,119049,119050],{},[24,119051],{"alt":64,"src":119052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[29,119054,119055],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[29,119057,119058],{},[24,119059],{"alt":64,"src":119060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[29,119062,119063,119064,119067],{},"选择“正常安装”(找不到都用Alt+F7)， ",[195,119065,119066],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[29,119069,119070],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[29,119072,119073],{},"将改动写入磁盘吗 继续",[29,119075,119076],{},"选择东八区（shanghai，大致在地图上点一下），继续",[29,119078,119079],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[29,119081,119082],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[29,119084,119085,119086,119089,119090,119093],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[195,119087,119088],{},"除了"," 选不发送系统信息与不升级之外， ",[195,119091,119092],{},"其它"," 都跳过或前进）",[19,119095,119097],{"id":119096},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23237,119099,119101],{"id":119100},"_2231-全屏","2.2.3.1 全屏",[29,119103,119104],{},[24,119105],{"alt":64,"src":119106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[29,119108,119109],{},[24,119110],{"alt":64,"src":119111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23237,119113,119115],{"id":119114},"_2232-文件交换","2.2.3.2 文件交换",[29,119117,119118],{},[24,119119],{"alt":64,"src":119120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23237,119122,119124],{"id":119123},"_2233-新建文本文档","2.2.3.3 新建文本文档",[29,119126,119127],{},[24,119128],{"alt":64,"src":119129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119131,119133],{"id":119132},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[19,119135,119137],{"id":119136},"_231-简介与优缺点","2.3.1 简介与优缺点",[37,119139,119140],{},[40,119141,119142],{},"什么情况下推荐？",[29,119144,119145],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[37,119147,119148],{"start":79},[40,119149,119150,119151],{},"优缺点：",[37,119152,119153,119183],{},[40,119154,119155,119156],{},"优点：",[37,119157,119158,119161,119168,119171,119174,119177,119180],{},[40,119159,119160],{},"WSL2是最好的Linux发行版;(bushi)",[40,119162,119163,119164,119167],{},"性能损耗极低。且比在Windows上跑深度性能 ",[195,119165,119166],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[40,119169,119170],{},"非常方便调用USB设备，可以USB直通;",[40,119172,119173],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[40,119175,119176],{},"非常方便Win与WSL2互相传文件等协同操作;",[40,119178,119179],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[40,119181,119182],{},"非常方便使用Windows的VScode远程开发;",[40,119184,119185,119186],{},"缺点：",[37,119187,119188],{},[40,119189,119190],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[29,119192,119193],{},[24,119194],{"alt":64,"src":119195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[19,119197,119199],{"id":119198},"_232-安装教程","2.3.2 安装教程",[23237,119201,119203],{"id":119202},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[37,119205,119206],{},[40,119207,119208],{},"方法一(图形界面)",[29,119210,119211,119212,25855],{},"用Win+R输入",[66,119213,119214],{},"appwiz.cpl",[29,119216,119217],{},[24,119218],{"alt":64,"src":119219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[29,119221,119222,119223,119226,119227,27709],{},"点击OK进入 ",[195,119224,119225],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[195,119228,119229],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[29,119231,119232],{},[24,119233],{"alt":64,"src":119234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[29,119236,119237,119238,102239,119241,119244],{},"选择 ",[195,119239,119240],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[195,119242,119243],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[29,119246,119247],{},[24,119248],{"alt":64,"src":119249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[37,119251,119252],{"start":79},[40,119253,119254],{},"方法二(命令行)",[59,119256,119260],{"className":119257,"code":119258,"language":119259,"meta":64,"style":64},"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",[66,119261,119262,119267,119272,119277],{"__ignoreMap":64},[69,119263,119264],{"class":71,"line":72},[69,119265,119266],{},"# 开启 Linux 子系统\n",[69,119268,119269],{"class":71,"line":79},[69,119270,119271],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[69,119273,119274],{"class":71,"line":106},[69,119275,119276],{},"# 开启虚拟机平台\n",[69,119278,119279],{"class":71,"line":116},[69,119280,119281],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23237,119283,119285],{"id":119284},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[29,119287,119288],{},"用管理员权限打开powershell",[29,119290,119291],{},[24,119292],{"alt":64,"src":119293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[29,119295,119296],{},"升级WSL并设置默认版本为WSL2",[59,119298,119300],{"className":119257,"code":119299,"language":119259,"meta":64,"style":64},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[66,119301,119302,119307,119312,119317],{"__ignoreMap":64},[69,119303,119304],{"class":71,"line":72},[69,119305,119306],{},"# 更新 wsl\n",[69,119308,119309],{"class":71,"line":79},[69,119310,119311],{},"wsl --update\n",[69,119313,119314],{"class":71,"line":106},[69,119315,119316],{},"# 将 wsl 版本设置为 wsl2\n",[69,119318,119319],{"class":71,"line":116},[69,119320,119321],{},"wsl --set-default-version 2\n",[23237,119323,119325],{"id":119324},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[37,119327,119328],{},[40,119329,119330],{},"方式一(商店下载)",[29,119332,119333],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[29,119335,119336],{},[24,119337],{"alt":64,"src":119338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[37,119340,119341],{"start":79},[40,119342,119343],{},"方式二(命令行安装)",[59,119345,119347],{"className":119257,"code":119346,"language":119259,"meta":64,"style":64},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[66,119348,119349,119354,119359],{"__ignoreMap":64},[69,119350,119351],{"class":71,"line":72},[69,119352,119353],{},"# 列出可安装的 Linux 版本\n",[69,119355,119356],{"class":71,"line":79},[69,119357,119358],{},"#（需要科学手段）\n",[69,119360,119361],{"class":71,"line":106},[69,119362,119363],{},"wsl --list --online\n",[29,119365,119366],{},[24,119367],{"alt":64,"src":119368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[29,119370,119371],{},"选择对应发行版并安装",[59,119373,119375],{"className":119257,"code":119374,"language":119259,"meta":64,"style":64},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[66,119376,119377,119382],{"__ignoreMap":64},[69,119378,119379],{"class":71,"line":72},[69,119380,119381],{},"# Ubuntu安装完毕后需要重启系统\n",[69,119383,119384],{"class":71,"line":79},[69,119385,119386],{},"wsl --install -d Ubuntu-24.04\n",[23237,119388,119390],{"id":119389},"_2324-查看系统状态","2.3.2.4 查看系统状态",[59,119392,119394],{"className":119257,"code":119393,"language":119259,"meta":64,"style":64},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[66,119395,119396,119401,119406,119411,119416,119420,119424,119429,119434,119439],{"__ignoreMap":64},[69,119397,119398],{"class":71,"line":72},[69,119399,119400],{},"# 查看 wsl\n",[69,119402,119403],{"class":71,"line":79},[69,119404,119405],{},"wsl -l\n",[69,119407,119408],{"class":71,"line":106},[69,119409,119410],{},"# 查看 wsl 运行版本或模式\n",[69,119412,119413],{"class":71,"line":116},[69,119414,119415],{},"wsl -l -v\n",[69,119417,119418],{"class":71,"line":133},[69,119419,3644],{"emptyLinePlaceholder":1325},[69,119421,119422],{"class":71,"line":139},[69,119423,3644],{"emptyLinePlaceholder":1325},[69,119425,119426],{"class":71,"line":401},[69,119427,119428],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[69,119430,119431],{"class":71,"line":470},[69,119432,119433],{},"wsl --set-version \u003Cdistro> 2\n",[69,119435,119436],{"class":71,"line":475},[69,119437,119438],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[69,119440,119441],{"class":71,"line":482},[69,119442,119443],{},"wsl --unregister \u003Cdistro>\n",[29,119445,119446],{},"输出Version为2即正常",[29,119448,119449],{},[24,119450],{"alt":64,"src":119451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23237,119453,119455],{"id":119454},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[29,119457,119458],{},"直接在Powershell里输入wsl命令进入子系统",[59,119460,119462],{"className":119257,"code":119461,"language":119259,"meta":64,"style":64},"# 进入子系统\nwsl\n",[66,119463,119464,119469],{"__ignoreMap":64},[69,119465,119466],{"class":71,"line":72},[69,119467,119468],{},"# 进入子系统\n",[69,119470,119471],{"class":71,"line":79},[69,119472,119473],{},"wsl\n",[29,119475,119476],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[29,119478,119479],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[29,119481,119482],{},[24,119483],{"alt":64,"src":119484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[19,119486,119488],{"id":119487},"_233-配置各种环境","2.3.3 配置各种环境",[23237,119490,119492],{"id":119491},"_2331-换源","2.3.3.1 换源",[29,119494,119495],{},"(同实体机LINUX，往下找教程)",[23237,119497,119499],{"id":119498},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24149,119501,119503],{"id":119502},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[29,119505,119506],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[29,119508,119509],{},[24,119510],{"alt":64,"src":119511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[29,119513,119514],{},[24,119515],{"alt":64,"src":119516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24149,119518,119520],{"id":119519},"_23322-cuda","2.3.3.2.2 CUDA",[29,119522,119523,119524],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[187,119525,119526],{"href":119526,"rel":119527},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[191],[29,119529,119530,119533],{},[24,119531],{"alt":64,"src":119532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[24,119534],{"alt":64,"src":119535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[29,119537,119538],{},"在下方的网站，选择合适的版本。",[29,119540,119541,119542],{},"WSL2 专属 CUDA 指南：",[187,119543,119544],{"href":119544,"rel":119545},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[191],[29,119547,119548],{},[195,119549,119550],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[29,119552,119553],{},[24,119554],{"alt":64,"src":119555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[29,119557,119558],{},"挨行敲一遍",[29,119560,119561],{},[24,119562],{"alt":64,"src":119563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[29,119565,119566,119567,119570],{},"敲完后，输入",[66,119568,119569],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[29,119572,119573],{},[24,119574],{"alt":64,"src":119575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[29,119577,119578,119579,119582],{},"（请详看下方教程的",[195,119580,119581],{},"安装CUDA的配置环境来看","如何配置环境）",[24149,119584,119586],{"id":119585},"_23323-cudnn","2.3.3.2.3 cuDNN",[29,119588,119495],{},[29,119590,119591],{},[24,119592],{"alt":64,"src":119593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23237,119595,119597],{"id":119596},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[29,119599,119600],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[29,119602,119603],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[29,119605,119606],{},[24,119607],{"alt":64,"src":119608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[29,119610,119611],{},"连接WSL2",[29,119613,119614],{},[24,119615],{"alt":64,"src":119616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[29,119618,119619],{},"远程开发成功。",[29,119621,119622],{},[24,119623],{"alt":64,"src":119624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[29,119626,119627],{},[24,119628],{"alt":64,"src":119629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[29,119631,119632],{},[24,119633],{"alt":64,"src":119634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23237,119636,119638],{"id":119637},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[29,119640,119641],{},[24,119642],{"alt":64,"src":119643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23237,119645,119647],{"id":119646},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[59,119649,119651],{"className":118517,"code":119650,"language":118519,"meta":64,"style":64},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[66,119652,119653,119661,119669,119680,119684],{"__ignoreMap":64},[69,119654,119655,119657,119659],{"class":71,"line":72},[69,119656,25813],{"class":109},[69,119658,118538],{"class":1022},[69,119660,27478],{"class":1022},[69,119662,119663,119665,119667],{"class":71,"line":79},[69,119664,25813],{"class":109},[69,119666,118538],{"class":1022},[69,119668,118554],{"class":1022},[69,119670,119671,119673,119675,119677],{"class":71,"line":106},[69,119672,25813],{"class":109},[69,119674,118538],{"class":1022},[69,119676,25071],{"class":1022},[69,119678,119679],{"class":1022}," mesa-utils\n",[69,119681,119682],{"class":71,"line":116},[69,119683,3644],{"emptyLinePlaceholder":1325},[69,119685,119686],{"class":71,"line":133},[69,119687,119688],{"class":75},"#然后重启wsl2即可\n",[1297,119690,119691],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":64,"searchDepth":79,"depth":79,"links":119693},[119694,119695,119700],{"id":118971,"depth":79,"text":118972},{"id":118984,"depth":79,"text":118985,"children":119696},[119697,119698,119699],{"id":118988,"depth":106,"text":118989},{"id":119035,"depth":106,"text":119036},{"id":119096,"depth":106,"text":119097},{"id":119132,"depth":79,"text":119133,"children":119701},[119702,119703,119704],{"id":119136,"depth":106,"text":119137},{"id":119198,"depth":106,"text":119199},{"id":119487,"depth":106,"text":119488},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118963,"description":1322},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119711,"title":119712,"body":119713,"description":1322,"extension":1323,"meta":122649,"navigation":1325,"path":122650,"seo":122651,"stem":122652,"__hash__":122653},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119714,"toc":122621},[119715,119718,119722,119728,119732,119738,119742,119930,119933,119938,119942,119946,119949,119952,119958,119963,119966,119969,119974,120007,120012,120016,120093,120096,120101,120105,120108,120147,120150,120159,120177,120182,120189,120306,120311,120314,120341,120346,120350,120359,120409,120416,120420,120423,120437,120444,120478,120483,120487,120510,120513,120518,120522,120525,120528,120531,120573,120577,120580,120583,120624,120628,120632,120635,120640,120645,120648,120671,120674,120682,120687,120690,120695,120700,120703,120708,120712,120717,120740,120745,120807,120815,120820,120825,120828,120833,120836,120841,120846,120864,120869,120875,120880,120894,120898,120901,120904,120907,120950,120953,120958,121059,121062,121067,121071,121075,121112,121116,121120,121124,121170,121174,121219,121223,121230,121238,121293,121296,121373,121376,121399,121403,121406,121411,121416,121424,121427,121432,121437,121442,121445,121450,121459,121462,121467,121470,121541,121546,121549,121554,121557,121562,121565,121570,121573,121578,121583,121586,121661,121664,121677,121682,121685,121699,121702,121731,121736,121765,121768,121773,121777,121782,121791,121794,121799,121802,121807,121810,121813,121818,121821,121826,121831,121834,121839,121842,121967,121972,122002,122005,122010,122015,122032,122035,122078,122081,122108,122113,122126,122269,122273,122278,122292,122295,122346,122349,122379,122382,122398,122403,122417,122420,122487,122492,122501,122506,122509,122521,122526,122533,122557,122560,122565,122568,122587,122592,122599,122611,122618],[10,119716,119712],{"id":119717},"_3-安装必备配置",[14,119719,119721],{"id":119720},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[59,119723,119726],{"className":119724,"code":119725,"language":540},[538],"  打开下方网站（注意，该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",[66,119727,119725],{"__ignoreMap":64},[19,119729,119731],{"id":119730},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[59,119733,119736],{"className":119734,"code":119735,"language":540},[538],"  输入以下命令\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",[66,119737,119735],{"__ignoreMap":64},[19,119739,119741],{"id":119740},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[59,119743,119747],{"className":119744,"code":119745,"language":119746,"meta":64,"style":64},"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",[66,119748,119749,119757,119768,119780,119794,119798,119808,119813,119817,119821,119826,119830,119842,119846,119851,119855,119866,119870,119886,119890,119901,119905,119910,119914,119922],{"__ignoreMap":64},[69,119750,119751,119753,119755],{"class":71,"line":72},[69,119752,25813],{"class":109},[69,119754,118538],{"class":1022},[69,119756,27478],{"class":1022},[69,119758,119759,119761,119763,119765],{"class":71,"line":79},[69,119760,25813],{"class":109},[69,119762,118538],{"class":1022},[69,119764,25071],{"class":1022},[69,119766,119767],{"class":1022}," vim\n",[69,119769,119770,119772,119775,119777],{"class":71,"line":106},[69,119771,25813],{"class":109},[69,119773,119774],{"class":1022}," rm",[69,119776,26562],{"class":90},[69,119778,119779],{"class":1022}," \u002Fetc\u002Fapt\u002Fsources.list\n",[69,119781,119782,119784,119786,119788,119791],{"class":71,"line":116},[69,119783,25813],{"class":109},[69,119785,119774],{"class":1022},[69,119787,26562],{"class":90},[69,119789,119790],{"class":1022}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[69,119792,119793],{"class":90},"**\n",[69,119795,119796],{"class":71,"line":133},[69,119797,3644],{"emptyLinePlaceholder":1325},[69,119799,119800,119802,119805],{"class":71,"line":139},[69,119801,25813],{"class":109},[69,119803,119804],{"class":1022}," vim",[69,119806,119807],{"class":1022}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[69,119809,119810],{"class":71,"line":401},[69,119811,119812],{"class":1022},"```\n",[69,119814,119815],{"class":71,"line":470},[69,119816,3644],{"emptyLinePlaceholder":1325},[69,119818,119819],{"class":71,"line":475},[69,119820,3644],{"emptyLinePlaceholder":1325},[69,119822,119823],{"class":71,"line":482},[69,119824,119825],{"class":109},"选择好Ubuntu版本后，复制下方的内容。\n",[69,119827,119828],{"class":71,"line":497},[69,119829,3644],{"emptyLinePlaceholder":1325},[69,119831,119832,119834,119837,119840],{"class":71,"line":502},[69,119833,1618],{"class":82},[69,119835,119836],{"class":1022},"[](",[69,119838,119839],{"class":109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[69,119841,1404],{"class":1022},[69,119843,119844],{"class":71,"line":509},[69,119845,3644],{"emptyLinePlaceholder":1325},[69,119847,119848],{"class":71,"line":524},[69,119849,119850],{"class":109},"粘贴进去\n",[69,119852,119853],{"class":71,"line":2888},[69,119854,3644],{"emptyLinePlaceholder":1325},[69,119856,119857,119859,119861,119864],{"class":71,"line":2893},[69,119858,1618],{"class":82},[69,119860,119836],{"class":1022},[69,119862,119863],{"class":109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[69,119865,1404],{"class":1022},[69,119867,119868],{"class":71,"line":2899},[69,119869,3644],{"emptyLinePlaceholder":1325},[69,119871,119872,119875,119878,119881,119883],{"class":71,"line":2919},[69,119873,119874],{"class":109},"按一下ESC，然后英文冒号，输入",[69,119876,119877],{"class":1022}," `",[69,119879,119880],{"class":109},":wq!",[69,119882,2358],{"class":1022},[69,119884,119885],{"class":109},"然后回车\n",[69,119887,119888],{"class":71,"line":2924},[69,119889,3644],{"emptyLinePlaceholder":1325},[69,119891,119892,119894,119896,119899],{"class":71,"line":2938},[69,119893,1618],{"class":82},[69,119895,119836],{"class":1022},[69,119897,119898],{"class":109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[69,119900,1404],{"class":1022},[69,119902,119903],{"class":71,"line":2943},[69,119904,3644],{"emptyLinePlaceholder":1325},[69,119906,119907],{"class":71,"line":2972},[69,119908,119909],{"class":109},"输入以下命令\n",[69,119911,119912],{"class":71,"line":2977},[69,119913,3644],{"emptyLinePlaceholder":1325},[69,119915,119916,119919],{"class":71,"line":2994},[69,119917,119918],{"class":1022},"```",[69,119920,119921],{"class":109},"Bash\n",[69,119923,119924,119926,119928],{"class":71,"line":2999},[69,119925,25813],{"class":109},[69,119927,118538],{"class":1022},[69,119929,27478],{"class":1022},[29,119931,119932],{},"这里被替换成对应学校则成功",[29,119934,119935],{},[24,119936],{"alt":64,"src":119937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119939,119941],{"id":119940},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[19,119943,119945],{"id":119944},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[29,119947,119948],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[29,119950,119951],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[29,119953,119954],{},[187,119955,119956],{"href":119956,"rel":119957},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[191],[29,119959,119960],{},[24,119961],{"alt":64,"src":119962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[29,119964,119965],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[29,119967,119968],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[29,119970,119971],{},[24,119972],{"alt":64,"src":119973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[59,119975,119977],{"className":118517,"code":119976,"language":118519,"meta":64,"style":64},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[66,119978,119979,119984,119991,119996],{"__ignoreMap":64},[69,119980,119981],{"class":71,"line":72},[69,119982,119983],{"class":75},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[69,119985,119986,119988],{"class":71,"line":79},[69,119987,102497],{"class":90},[69,119989,119990],{"class":1022}," ~\u002FDownloads\n",[69,119992,119993],{"class":71,"line":106},[69,119994,119995],{"class":75},"#下方chrome安装包名不一定是这个，根据名字来看\n",[69,119997,119998,120000,120002,120004],{"class":71,"line":116},[69,119999,25813],{"class":109},[69,120001,118538],{"class":1022},[69,120003,25071],{"class":1022},[69,120005,120006],{"class":1022}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[29,120008,120009],{},[24,120010],{"alt":64,"src":120011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[19,120013,120015],{"id":120014},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[59,120017,120019],{"className":118517,"code":120018,"language":118519,"meta":64,"style":64},"# 老版\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",[66,120020,120021,120026,120034,120045,120050,120054,120059,120069,120077,120088],{"__ignoreMap":64},[69,120022,120023],{"class":71,"line":72},[69,120024,120025],{"class":75},"# 老版\n",[69,120027,120028,120030,120032],{"class":71,"line":79},[69,120029,25813],{"class":109},[69,120031,118538],{"class":1022},[69,120033,27478],{"class":1022},[69,120035,120036,120038,120040,120042],{"class":71,"line":106},[69,120037,25813],{"class":109},[69,120039,118538],{"class":1022},[69,120041,25071],{"class":1022},[69,120043,120044],{"class":1022}," neofetch\n",[69,120046,120047],{"class":71,"line":116},[69,120048,120049],{"class":109},"neofetch\n",[69,120051,120052],{"class":71,"line":133},[69,120053,3644],{"emptyLinePlaceholder":1325},[69,120055,120056],{"class":71,"line":139},[69,120057,120058],{"class":75},"# 新版\n",[69,120060,120061,120063,120066],{"class":71,"line":401},[69,120062,25813],{"class":109},[69,120064,120065],{"class":1022}," add-apt-repository",[69,120067,120068],{"class":1022}," ppa:zhangsongcui3371\u002Ffastfetch\n",[69,120070,120071,120073,120075],{"class":71,"line":470},[69,120072,25813],{"class":109},[69,120074,118538],{"class":1022},[69,120076,27478],{"class":1022},[69,120078,120079,120081,120083,120085],{"class":71,"line":475},[69,120080,25813],{"class":109},[69,120082,118538],{"class":1022},[69,120084,25071],{"class":1022},[69,120086,120087],{"class":1022}," fastfetch\n",[69,120089,120090],{"class":71,"line":482},[69,120091,120092],{"class":109},"fastfetch\n",[29,120094,120095],{},"这里显示，一共有3162个debian的程序，7个snap程序",[29,120097,120098],{},[24,120099],{"alt":64,"src":120100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[19,120102,120104],{"id":120103},"_323-移除snap应用","3.2.3 移除snap应用",[29,120106,120107],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[59,120109,120111],{"className":118517,"code":120110,"language":118519,"meta":64,"style":64},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[66,120112,120113,120125,120136],{"__ignoreMap":64},[69,120114,120115,120117,120119,120122],{"class":71,"line":72},[69,120116,25813],{"class":109},[69,120118,27749],{"class":1022},[69,120120,120121],{"class":1022}," disable",[69,120123,120124],{"class":1022}," snapd.service\n",[69,120126,120127,120129,120131,120133],{"class":71,"line":79},[69,120128,25813],{"class":109},[69,120130,27749],{"class":1022},[69,120132,120121],{"class":1022},[69,120134,120135],{"class":1022}," snapd.socket\n",[69,120137,120138,120140,120142,120144],{"class":71,"line":106},[69,120139,25813],{"class":109},[69,120141,27749],{"class":1022},[69,120143,120121],{"class":1022},[69,120145,120146],{"class":1022}," snapd.seeded.service\n",[29,120148,120149],{},"然后查看snap应用列表",[29,120151,120152,120153,120158],{},"根据你安装的选择不同（最小安装或普通安装），有",[187,120154,120157],{"href":120155,"rel":120156},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[191],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[59,120160,120162],{"className":118517,"code":120161,"language":118519,"meta":64,"style":64},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[66,120163,120164,120169],{"__ignoreMap":64},[69,120165,120166],{"class":71,"line":72},[69,120167,120168],{"class":75},"# 查询当前系统上snap安装了哪些app\n",[69,120170,120171,120174],{"class":71,"line":79},[69,120172,120173],{"class":109},"snap",[69,120175,120176],{"class":1022}," list\n",[29,120178,120179],{},[24,120180],{"alt":64,"src":120181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[29,120183,120184,120185,120188],{},"卸载掉图中所有应用，按照 ",[195,120186,120187],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[59,120190,120192],{"className":118517,"code":120191,"language":118519,"meta":64,"style":64},"#移除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",[66,120193,120194,120199,120211,120216,120227,120232,120243,120248,120259,120264,120268,120273,120284,120295],{"__ignoreMap":64},[69,120195,120196],{"class":71,"line":72},[69,120197,120198],{"class":75},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[69,120200,120201,120203,120206,120208],{"class":71,"line":79},[69,120202,25813],{"class":109},[69,120204,120205],{"class":1022}," snap",[69,120207,27315],{"class":1022},[69,120209,120210],{"class":1022}," snap-store\n",[69,120212,120213],{"class":71,"line":106},[69,120214,120215],{"class":75},"#移除firefox浏览器\n",[69,120217,120218,120220,120222,120224],{"class":71,"line":116},[69,120219,25813],{"class":109},[69,120221,120205],{"class":1022},[69,120223,27315],{"class":1022},[69,120225,120226],{"class":1022}," firefox\n",[69,120228,120229],{"class":71,"line":133},[69,120230,120231],{"class":75},"#移除gnome-42-2204\n",[69,120233,120234,120236,120238,120240],{"class":71,"line":139},[69,120235,25813],{"class":109},[69,120237,120205],{"class":1022},[69,120239,27315],{"class":1022},[69,120241,120242],{"class":1022}," gnome-42-2204\n",[69,120244,120245],{"class":71,"line":401},[69,120246,120247],{"class":75},"#移除gtk-common-themes\n",[69,120249,120250,120252,120254,120256],{"class":71,"line":470},[69,120251,25813],{"class":109},[69,120253,120205],{"class":1022},[69,120255,27315],{"class":1022},[69,120257,120258],{"class":1022}," gtk-common-themes\n",[69,120260,120261],{"class":71,"line":475},[69,120262,120263],{"class":75},"#移除其它...\n",[69,120265,120266],{"class":71,"line":482},[69,120267,3918],{"class":86},[69,120269,120270],{"class":71,"line":497},[69,120271,120272],{"class":75},"#移除core22,bare以及snapd\n",[69,120274,120275,120277,120279,120281],{"class":71,"line":502},[69,120276,25813],{"class":109},[69,120278,120205],{"class":1022},[69,120280,27315],{"class":1022},[69,120282,120283],{"class":1022}," core22\n",[69,120285,120286,120288,120290,120292],{"class":71,"line":509},[69,120287,25813],{"class":109},[69,120289,120205],{"class":1022},[69,120291,27315],{"class":1022},[69,120293,120294],{"class":1022}," bare\n",[69,120296,120297,120299,120301,120303],{"class":71,"line":524},[69,120298,25813],{"class":109},[69,120300,120205],{"class":1022},[69,120302,27315],{"class":1022},[69,120304,120305],{"class":1022}," snapd\n",[29,120307,120308],{},[24,120309],{"alt":64,"src":120310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[29,120312,120313],{},"输入以下命令查看是否还有snap包",[59,120315,120317],{"className":118517,"code":120316,"language":118519,"meta":64,"style":64},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[66,120318,120319,120325,120329,120333,120337],{"__ignoreMap":64},[69,120320,120321,120323],{"class":71,"line":72},[69,120322,120173],{"class":109},[69,120324,120176],{"class":1022},[69,120326,120327],{"class":71,"line":79},[69,120328,120025],{"class":75},[69,120330,120331],{"class":71,"line":106},[69,120332,120049],{"class":109},[69,120334,120335],{"class":71,"line":116},[69,120336,120058],{"class":75},[69,120338,120339],{"class":71,"line":133},[69,120340,120092],{"class":109},[29,120342,120343],{},[24,120344],{"alt":64,"src":120345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[19,120347,120349],{"id":120348},"_324-移除snap","3.2.4 移除snap",[29,120351,120352,120353,120358],{},"在删除掉",[187,120354,120357],{"href":120355,"rel":120356},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[191],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[59,120360,120362],{"className":118517,"code":120361,"language":118519,"meta":64,"style":64}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[66,120363,120364,120369,120382,120387,120398],{"__ignoreMap":64},[69,120365,120366],{"class":71,"line":72},[69,120367,120368],{"class":75}," #使用apt移除掉snap\n",[69,120370,120371,120373,120375,120377,120380],{"class":71,"line":79},[69,120372,25813],{"class":109},[69,120374,118538],{"class":1022},[69,120376,118846],{"class":1022},[69,120378,120379],{"class":90}," --purge",[69,120381,120305],{"class":1022},[69,120383,120384],{"class":71,"line":106},[69,120385,120386],{"class":75},"#移除snapd的一些目录\n",[69,120388,120389,120391,120393,120395],{"class":71,"line":116},[69,120390,25813],{"class":109},[69,120392,119774],{"class":1022},[69,120394,26562],{"class":90},[69,120396,120397],{"class":1022}," \u002Fvar\u002Fcache\u002Fsnapd\n",[69,120399,120400,120402,120404,120406],{"class":71,"line":133},[69,120401,25813],{"class":109},[69,120403,119774],{"class":1022},[69,120405,26562],{"class":90},[69,120407,120408],{"class":1022}," ~\u002Fsnap\n",[29,120410,120411,120412,120415],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[66,120413,120414],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[19,120417,120419],{"id":120418},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[29,120421,120422],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[59,120424,120426],{"className":118517,"code":120425,"language":118519,"meta":64,"style":64},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[66,120427,120428],{"__ignoreMap":64},[69,120429,120430,120432,120434],{"class":71,"line":72},[69,120431,25813],{"class":109},[69,120433,119804],{"class":1022},[69,120435,120436],{"class":1022}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[29,120438,120439,120440,120443],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[66,120441,120442],{},":wq"," 回车",[59,120445,120447],{"className":118517,"code":120446,"language":118519,"meta":64,"style":64},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[66,120448,120449,120456,120470],{"__ignoreMap":64},[69,120450,120451,120454],{"class":71,"line":72},[69,120452,120453],{"class":109},"Package:",[69,120455,120305],{"class":1022},[69,120457,120458,120461,120464,120467],{"class":71,"line":79},[69,120459,120460],{"class":109},"Pin:",[69,120462,120463],{"class":1022}," release",[69,120465,120466],{"class":1022}," a=",[69,120468,120469],{"class":90},"*\n",[69,120471,120472,120475],{"class":71,"line":106},[69,120473,120474],{"class":109},"Pin-Priority:",[69,120476,120477],{"class":90}," -10\n",[29,120479,120480],{},[24,120481],{"alt":64,"src":120482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[19,120484,120486],{"id":120485},"_326-测试是否成功","3.2.6 测试是否成功",[59,120488,120490],{"className":118517,"code":120489,"language":118519,"meta":64,"style":64},"sudo apt update\nsudo apt install firefox\n",[66,120491,120492,120500],{"__ignoreMap":64},[69,120493,120494,120496,120498],{"class":71,"line":72},[69,120495,25813],{"class":109},[69,120497,118538],{"class":1022},[69,120499,27478],{"class":1022},[69,120501,120502,120504,120506,120508],{"class":71,"line":79},[69,120503,25813],{"class":109},[69,120505,118538],{"class":1022},[69,120507,25071],{"class":1022},[69,120509,120226],{"class":1022},[29,120511,120512],{},"这里提示snapd无法被安装，就证明成功了",[29,120514,120515],{},[24,120516],{"alt":64,"src":120517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[19,120519,120521],{"id":120520},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[29,120523,120524],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[29,120526,120527],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[29,120529,120530],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[59,120532,120534],{"className":118517,"code":120533,"language":118519,"meta":64,"style":64},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[66,120535,120536,120541,120550,120555,120563],{"__ignoreMap":64},[69,120537,120538],{"class":71,"line":72},[69,120539,120540],{"class":75},"# 添加Mozilla提供的源\n",[69,120542,120543,120545,120547],{"class":71,"line":79},[69,120544,25813],{"class":109},[69,120546,120065],{"class":1022},[69,120548,120549],{"class":1022}," ppa:mozillateam\u002Fppa\n",[69,120551,120552],{"class":71,"line":106},[69,120553,120554],{"class":75},"# 安装Firefox\n",[69,120556,120557,120559,120561],{"class":71,"line":116},[69,120558,25813],{"class":109},[69,120560,118538],{"class":1022},[69,120562,27478],{"class":1022},[69,120564,120565,120567,120569,120571],{"class":71,"line":133},[69,120566,25813],{"class":109},[69,120568,118538],{"class":1022},[69,120570,25071],{"class":1022},[69,120572,120226],{"class":1022},[19,120574,120576],{"id":120575},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[29,120578,120579],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[29,120581,120582],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[59,120584,120586],{"className":118517,"code":120585,"language":118519,"meta":64,"style":64},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[66,120587,120588,120593,120603,120611,120615],{"__ignoreMap":64},[69,120589,120590],{"class":71,"line":72},[69,120591,120592],{"class":75},"#删掉禁止安装snap的配置文件\n",[69,120594,120595,120597,120599,120601],{"class":71,"line":79},[69,120596,25813],{"class":109},[69,120598,119774],{"class":1022},[69,120600,26562],{"class":90},[69,120602,120436],{"class":1022},[69,120604,120605,120607,120609],{"class":71,"line":106},[69,120606,25813],{"class":109},[69,120608,118538],{"class":1022},[69,120610,27478],{"class":1022},[69,120612,120613],{"class":71,"line":116},[69,120614,3644],{"emptyLinePlaceholder":1325},[69,120616,120617,120619,120621],{"class":71,"line":133},[69,120618,25813],{"class":109},[69,120620,118538],{"class":1022},[69,120622,120623],{"class":1022}," dist-update\n",[14,120625,120627],{"id":120626},"_33-中文输入法","3.3 中文输入法",[19,120629,120631],{"id":120630},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[29,120633,120634],{},"官网下载搜狗输入法",[29,120636,120637],{},[24,120638],{"alt":64,"src":120639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[29,120641,120642],{},[24,120643],{"alt":64,"src":120644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[29,120646,120647],{},"打开终端输入如下",[59,120649,120651],{"className":118517,"code":120650,"language":118519,"meta":64,"style":64},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[66,120652,120653,120660],{"__ignoreMap":64},[69,120654,120655,120657],{"class":71,"line":72},[69,120656,102497],{"class":90},[69,120658,120659],{"class":1022}," ~\u002FDownloads\u002F\n",[69,120661,120662,120664,120666,120668],{"class":71,"line":79},[69,120663,25813],{"class":109},[69,120665,118538],{"class":1022},[69,120667,25071],{"class":1022},[69,120669,120670],{"class":1022}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[29,120672,120673],{},"打开Fcitx",[29,120675,120676,120679],{},[24,120677],{"alt":64,"src":120678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[24,120680],{"alt":64,"src":120681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[29,120683,120684],{},[24,120685],{"alt":64,"src":120686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[29,120688,120689],{},"添加搜狗输入法",[29,120691,120692],{},[24,120693],{"alt":64,"src":120694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[29,120696,120697],{},[24,120698],{"alt":64,"src":120699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[29,120701,120702],{},"将搜狗输入法设置为唯一输入法",[29,120704,120705],{},[24,120706],{"alt":64,"src":120707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[19,120709,120711],{"id":120710},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[37,120713,120714],{},[40,120715,120716],{},"卸载旧输入法",[59,120718,120720],{"className":119744,"code":120719,"language":119746,"meta":64,"style":64},"sudo apt purge fcitx* ibus*\n",[66,120721,120722],{"__ignoreMap":64},[69,120723,120724,120726,120728,120730,120733,120735,120738],{"class":71,"line":72},[69,120725,25813],{"class":109},[69,120727,118538],{"class":1022},[69,120729,118879],{"class":1022},[69,120731,120732],{"class":1022}," fcitx",[69,120734,1843],{"class":90},[69,120736,120737],{"class":1022}," ibus",[69,120739,120469],{"class":90},[37,120741,120742],{"start":79},[40,120743,120744],{},"安装Fcitx5",[59,120746,120748],{"className":118517,"code":120747,"language":118519,"meta":64,"style":64},"# 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",[66,120749,120750,120755,120769,120773,120778,120787,120795],{"__ignoreMap":64},[69,120751,120752],{"class":71,"line":72},[69,120753,120754],{"class":75},"# Ubuntu22.04及以上、Debian12及以上\n",[69,120756,120757,120759,120761,120763,120766],{"class":71,"line":79},[69,120758,25813],{"class":109},[69,120760,118538],{"class":1022},[69,120762,25071],{"class":1022},[69,120764,120765],{"class":1022}," fcitx5",[69,120767,120768],{"class":1022}," fcitx5-chinese-addons\n",[69,120770,120771],{"class":71,"line":106},[69,120772,3644],{"emptyLinePlaceholder":1325},[69,120774,120775],{"class":71,"line":116},[69,120776,120777],{"class":75},"# Ubuntu20.04\n",[69,120779,120780,120782,120784],{"class":71,"line":133},[69,120781,25813],{"class":109},[69,120783,120065],{"class":1022},[69,120785,120786],{"class":1022}," ppa:zhsj\u002Ffcitx5\n",[69,120788,120789,120791,120793],{"class":71,"line":139},[69,120790,25813],{"class":109},[69,120792,118538],{"class":1022},[69,120794,27478],{"class":1022},[69,120796,120797,120799,120801,120803,120805],{"class":71,"line":401},[69,120798,25813],{"class":109},[69,120800,118538],{"class":1022},[69,120802,25071],{"class":1022},[69,120804,120765],{"class":1022},[69,120806,120768],{"class":1022},[37,120808,120809,120812],{"start":106},[40,120810,120811],{},"Reboot System",[40,120813,120814],{},"启动Fcitx5",[29,120816,120817],{},[24,120818],{"alt":64,"src":120819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[37,120821,120822],{"start":133},[40,120823,120824],{},"修改一些设置",[29,120826,120827],{},"将Pinyin和Keyboard - English US加入到左边。",[29,120829,120830],{},[24,120831],{"alt":64,"src":120832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[29,120834,120835],{},"添加快捷键以便于更好切换中英文",[29,120837,120838],{},[24,120839],{"alt":64,"src":120840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[37,120842,120843],{"start":139},[40,120844,120845],{},"重启",[59,120847,120849],{"className":119744,"code":120848,"language":119746,"meta":64,"style":64},"sudo shutdown -r now\n",[66,120850,120851],{"__ignoreMap":64},[69,120852,120853,120855,120858,120861],{"class":71,"line":72},[69,120854,25813],{"class":109},[69,120856,120857],{"class":1022}," shutdown",[69,120859,120860],{"class":90}," -r",[69,120862,120863],{"class":1022}," now\n",[37,120865,120866],{"start":401},[40,120867,120868],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[29,120870,120871],{},[187,120872,120873],{"href":120873,"rel":120874},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[191],[37,120876,120877],{"start":470},[40,120878,120879],{},"再重启",[59,120881,120882],{"className":119744,"code":120848,"language":119746,"meta":64,"style":64},[66,120883,120884],{"__ignoreMap":64},[69,120885,120886,120888,120890,120892],{"class":71,"line":72},[69,120887,25813],{"class":109},[69,120889,120857],{"class":1022},[69,120891,120860],{"class":90},[69,120893,120863],{"class":1022},[14,120895,120897],{"id":120896},"_34-pip3源替换","3.4 pip3源替换",[29,120899,120900],{},"非Debian系发行版需要做。",[29,120902,120903],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[29,120905,120906],{},"使用dnf的系统也可能不用做。",[59,120908,120910],{"className":118517,"code":120909,"language":118519,"meta":64,"style":64},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[66,120911,120912,120917,120924,120929,120934],{"__ignoreMap":64},[69,120913,120914],{"class":71,"line":72},[69,120915,120916],{"class":75},"# 检查是否已安装 pip\n",[69,120918,120919,120922],{"class":71,"line":79},[69,120920,120921],{"class":109},"pip3",[69,120923,27529],{"class":90},[69,120925,120926],{"class":71,"line":106},[69,120927,120928],{"class":75},"# 如果未安装，先安装 pip3（见下方）\n",[69,120930,120931],{"class":71,"line":116},[69,120932,120933],{"class":75},"# 配置 pip 使用清华源\n",[69,120935,120936,120938,120941,120944,120947],{"class":71,"line":133},[69,120937,120921],{"class":109},[69,120939,120940],{"class":1022}," config",[69,120942,120943],{"class":1022}," set",[69,120945,120946],{"class":1022}," global.index-url",[69,120948,120949],{"class":1022}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[29,120951,120952],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[29,120954,120955],{},[24,120956],{"alt":64,"src":120957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[59,120959,120961],{"className":118517,"code":120960,"language":118519,"meta":64,"style":64},"#安装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",[66,120962,120963,120968,120976,120987,120991,120996,121015,121019,121024,121036,121040,121045],{"__ignoreMap":64},[69,120964,120965],{"class":71,"line":72},[69,120966,120967],{"class":75},"#安装pip3\n",[69,120969,120970,120972,120974],{"class":71,"line":79},[69,120971,25813],{"class":109},[69,120973,118538],{"class":1022},[69,120975,27478],{"class":1022},[69,120977,120978,120980,120982,120984],{"class":71,"line":106},[69,120979,25813],{"class":109},[69,120981,27312],{"class":1022},[69,120983,25071],{"class":1022},[69,120985,120986],{"class":1022}," python3-pip\n",[69,120988,120989],{"class":71,"line":116},[69,120990,3644],{"emptyLinePlaceholder":1325},[69,120992,120993],{"class":71,"line":133},[69,120994,120995],{"class":75},"#更新pip3\n",[69,120997,120998,121000,121002,121004,121006,121008,121011,121013],{"class":71,"line":139},[69,120999,102100],{"class":109},[69,121001,102103],{"class":90},[69,121003,102126],{"class":1022},[69,121005,25071],{"class":1022},[69,121007,27666],{"class":90},[69,121009,121010],{"class":1022}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[69,121012,102131],{"class":90},[69,121014,102134],{"class":1022},[69,121016,121017],{"class":71,"line":401},[69,121018,3644],{"emptyLinePlaceholder":1325},[69,121020,121021],{"class":71,"line":470},[69,121022,121023],{"class":75},"#设置pip源为清华源\n",[69,121025,121026,121028,121030,121032,121034],{"class":71,"line":475},[69,121027,120921],{"class":109},[69,121029,120940],{"class":1022},[69,121031,120943],{"class":1022},[69,121033,120946],{"class":1022},[69,121035,120949],{"class":1022},[69,121037,121038],{"class":71,"line":482},[69,121039,3644],{"emptyLinePlaceholder":1325},[69,121041,121042],{"class":71,"line":497},[69,121043,121044],{"class":75},"#测试\n",[69,121046,121047,121049,121051,121053,121055,121057],{"class":71,"line":502},[69,121048,102100],{"class":109},[69,121050,102103],{"class":90},[69,121052,102126],{"class":1022},[69,121054,25071],{"class":1022},[69,121056,102131],{"class":90},[69,121058,102134],{"class":1022},[29,121060,121061],{},"成功的话，会看到Looking后面是tsinghua字样。",[29,121063,121064],{},[24,121065],{"alt":64,"src":121066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121068,121070],{"id":121069},"_35-显卡驱动安装","3.5 显卡驱动安装",[19,121072,121074],{"id":121073},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[59,121076,121078],{"className":119744,"code":121077,"language":119746,"meta":64,"style":64},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[66,121079,121080,121085,121100,121105],{"__ignoreMap":64},[69,121081,121082],{"class":71,"line":72},[69,121083,121084],{"class":75},"# 如果是使用apt安装的驱动\n",[69,121086,121087,121089,121091,121093,121095,121098],{"class":71,"line":79},[69,121088,25813],{"class":109},[69,121090,27312],{"class":1022},[69,121092,27315],{"class":1022},[69,121094,120379],{"class":90},[69,121096,121097],{"class":1022}," nvidia",[69,121099,120469],{"class":90},[69,121101,121102],{"class":71,"line":106},[69,121103,121104],{"class":75},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[69,121106,121107,121109],{"class":71,"line":116},[69,121108,25813],{"class":109},[69,121110,121111],{"class":1022}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[19,121113,121115],{"id":121114},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23237,121117,121119],{"id":121118},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24149,121121,121123],{"id":121122},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[59,121125,121127],{"className":119744,"code":121126,"language":119746,"meta":64,"style":64},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[66,121128,121129,121134,121145,121150,121160,121165],{"__ignoreMap":64},[69,121130,121131],{"class":71,"line":72},[69,121132,121133],{"class":75},"# 安装英伟达驱动\n",[69,121135,121136,121138,121140,121142],{"class":71,"line":79},[69,121137,25813],{"class":109},[69,121139,118538],{"class":1022},[69,121141,25071],{"class":1022},[69,121143,121144],{"class":1022}," nvidia-driver-版本号\n",[69,121146,121147],{"class":71,"line":106},[69,121148,121149],{"class":75},"# 重启 \n",[69,121151,121152,121154,121156,121158],{"class":71,"line":116},[69,121153,25813],{"class":109},[69,121155,120857],{"class":1022},[69,121157,120860],{"class":90},[69,121159,120863],{"class":1022},[69,121161,121162],{"class":71,"line":133},[69,121163,121164],{"class":75},"# 检查驱动是否安装成功\n",[69,121166,121167],{"class":71,"line":139},[69,121168,121169],{"class":109},"nvidia-smi\n",[24149,121171,121173],{"id":121172},"_35212-debian","3.5.2.1.2 Debian",[59,121175,121177],{"className":119744,"code":121176,"language":119746,"meta":64,"style":64},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[66,121178,121179,121183,121197,121201,121211,121215],{"__ignoreMap":64},[69,121180,121181],{"class":71,"line":72},[69,121182,121133],{"class":75},[69,121184,121185,121187,121189,121191,121194],{"class":71,"line":79},[69,121186,25813],{"class":109},[69,121188,118538],{"class":1022},[69,121190,25071],{"class":1022},[69,121192,121193],{"class":1022}," nvidia-driver",[69,121195,121196],{"class":1022}," nvidia-settings\n",[69,121198,121199],{"class":71,"line":106},[69,121200,121149],{"class":75},[69,121202,121203,121205,121207,121209],{"class":71,"line":116},[69,121204,25813],{"class":109},[69,121206,120857],{"class":1022},[69,121208,120860],{"class":90},[69,121210,120863],{"class":1022},[69,121212,121213],{"class":71,"line":133},[69,121214,121164],{"class":75},[69,121216,121217],{"class":71,"line":139},[69,121218,121169],{"class":109},[23237,121220,121222],{"id":121221},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[29,121224,121225,121226,121229],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[195,121227,121228],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[29,121231,121232,121233],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[531,121234,121235],{},[195,121236,121237],{},"（也可以不禁用桌面环境，直接进行下一步。）",[59,121239,121241],{"className":119744,"code":121240,"language":119746,"meta":64,"style":64},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[66,121242,121243,121248,121258,121263,121276,121281],{"__ignoreMap":64},[69,121244,121245],{"class":71,"line":72},[69,121246,121247],{"class":75},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[69,121249,121250,121252,121255],{"class":71,"line":79},[69,121251,25813],{"class":109},[69,121253,121254],{"class":1022}," telinit",[69,121256,121257],{"class":90}," 3\n",[69,121259,121260],{"class":71,"line":106},[69,121261,121262],{"class":75},"# ubuntu 使用下方命令\n",[69,121264,121265,121267,121270,121273],{"class":71,"line":116},[69,121266,25813],{"class":109},[69,121268,121269],{"class":1022}," service",[69,121271,121272],{"class":1022}," lightdm",[69,121274,121275],{"class":1022}," stop\n",[69,121277,121278],{"class":71,"line":133},[69,121279,121280],{"class":75},"# Fedora 使用下方命令\n",[69,121282,121283,121285,121287,121290],{"class":71,"line":139},[69,121284,25813],{"class":109},[69,121286,27749],{"class":1022},[69,121288,121289],{"class":1022}," isolate",[69,121291,121292],{"class":1022}," multi-user.target\n",[29,121294,121295],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[59,121297,121299],{"className":119744,"code":121298,"language":119746,"meta":64,"style":64},"# 编译环境+准备工作\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",[66,121300,121301,121306,121317,121322,121329,121334,121346,121351,121358,121363],{"__ignoreMap":64},[69,121302,121303],{"class":71,"line":72},[69,121304,121305],{"class":75},"# 编译环境+准备工作\n",[69,121307,121308,121310,121312,121314],{"class":71,"line":79},[69,121309,25813],{"class":109},[69,121311,118538],{"class":1022},[69,121313,25071],{"class":1022},[69,121315,121316],{"class":1022}," build-essential\n",[69,121318,121319],{"class":71,"line":106},[69,121320,121321],{"class":75},"# 进入到.run目录中\n",[69,121323,121324,121326],{"class":71,"line":116},[69,121325,102497],{"class":90},[69,121327,121328],{"class":1022}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[69,121330,121331],{"class":71,"line":133},[69,121332,121333],{"class":75},"# 给驱动文件增加可执行权限：\n",[69,121335,121336,121338,121340,121343],{"class":71,"line":139},[69,121337,25813],{"class":109},[69,121339,25816],{"class":1022},[69,121341,121342],{"class":1022}," a+x",[69,121344,121345],{"class":1022}," NVIDIA-Linux-x86_64-550.107.02.run\n",[69,121347,121348],{"class":71,"line":401},[69,121349,121350],{"class":75},"# 然后执行安装：\n",[69,121352,121353,121355],{"class":71,"line":470},[69,121354,25813],{"class":109},[69,121356,121357],{"class":1022}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[69,121359,121360],{"class":71,"line":475},[69,121361,121362],{"class":75},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[69,121364,121365,121367,121370],{"class":71,"line":482},[69,121366,25813],{"class":109},[69,121368,121369],{"class":1022}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[69,121371,121372],{"class":90},"  --no-opengl-files\n",[29,121374,121375],{},"安装完毕重启即可",[59,121377,121379],{"className":119744,"code":121378,"language":119746,"meta":64,"style":64},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[66,121380,121381,121385,121391,121395],{"__ignoreMap":64},[69,121382,121383],{"class":71,"line":72},[69,121384,121149],{"class":75},[69,121386,121387,121389],{"class":71,"line":79},[69,121388,25813],{"class":109},[69,121390,27883],{"class":1022},[69,121392,121393],{"class":71,"line":106},[69,121394,121164],{"class":75},[69,121396,121397],{"class":71,"line":116},[69,121398,121169],{"class":109},[19,121400,121402],{"id":121401},"_353-安装cuda","3.5.3 安装CUDA",[29,121404,121405],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[29,121407,121408],{},[24,121409],{"alt":64,"src":121410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[37,121412,121413],{},[40,121414,121415],{},"先查看显卡驱动所支持的最高CUDA版本",[59,121417,121418],{"className":119744,"code":121169,"language":119746,"meta":64,"style":64},[66,121419,121420],{"__ignoreMap":64},[69,121421,121422],{"class":71,"line":72},[69,121423,121169],{"class":109},[29,121425,121426],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[29,121428,121429],{},[24,121430],{"alt":64,"src":121431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[37,121433,121434],{"start":79},[40,121435,121436],{},"下载CUDA并安装CUDA",[29,121438,119523,121439],{},[187,121440,119526],{"href":119526,"rel":121441},[191],[29,121443,121444],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[29,121446,121447],{},[24,121448],{"alt":64,"src":121449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[29,121451,121452,121453,121458],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[187,121454,121457],{"href":121455,"rel":121456},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[191],"Vinci机器人队单片机教程","）",[29,121460,121461],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[29,121463,121464],{},[24,121465],{"alt":64,"src":121466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[29,121468,121469],{},"将最下方框框里的命令敲入终端",[59,121471,121473],{"className":119744,"code":121472,"language":119746,"meta":64,"style":64},"# 在当前文件夹下创建一个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",[66,121474,121475,121480,121489,121494,121501,121506,121514,121519,121530,121535],{"__ignoreMap":64},[69,121476,121477],{"class":71,"line":72},[69,121478,121479],{"class":75},"# 在当前文件夹下创建一个ttt的子文件夹\n",[69,121481,121482,121484,121486],{"class":71,"line":79},[69,121483,102487],{"class":109},[69,121485,30452],{"class":90},[69,121487,121488],{"class":1022}," .\u002Fttt\n",[69,121490,121491],{"class":71,"line":106},[69,121492,121493],{"class":75},"# 进入ttt文件夹\n",[69,121495,121496,121498],{"class":71,"line":116},[69,121497,102497],{"class":90},[69,121499,121500],{"class":1022}," ttt\n",[69,121502,121503],{"class":71,"line":133},[69,121504,121505],{"class":75},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[69,121507,121508,121511],{"class":71,"line":139},[69,121509,121510],{"class":109},"wget",[69,121512,121513],{"class":1022}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[69,121515,121516],{"class":71,"line":401},[69,121517,121518],{"class":75},"# 给予权限\n",[69,121520,121521,121523,121525,121527],{"class":71,"line":470},[69,121522,25813],{"class":109},[69,121524,25816],{"class":1022},[69,121526,121342],{"class":1022},[69,121528,121529],{"class":1022}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[69,121531,121532],{"class":71,"line":475},[69,121533,121534],{"class":75},"# 运行脚本\n",[69,121536,121537,121539],{"class":71,"line":482},[69,121538,25813],{"class":109},[69,121540,121529],{"class":1022},[29,121542,121543],{},[24,121544],{"alt":64,"src":121545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[29,121547,121548],{},"正在安装中：",[29,121550,121551],{},[24,121552],{"alt":64,"src":121553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[29,121555,121556],{},"输入accept接受即可",[29,121558,121559],{},[24,121560],{"alt":64,"src":121561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[29,121563,121564],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[29,121566,121567],{},[24,121568],{"alt":64,"src":121569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[29,121571,121572],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[29,121574,121575],{},[24,121576],{"alt":64,"src":121577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[37,121579,121580],{"start":106},[40,121581,121582],{},"配置环境",[29,121584,121585],{},"根据上方确认一下路径，比如我上面红色框起来的为",[59,121587,121589],{"className":119744,"code":121588,"language":119746,"meta":64,"style":64},"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",[66,121590,121591,121607,121622],{"__ignoreMap":64},[69,121592,121593,121596,121599,121602,121605],{"class":71,"line":72},[69,121594,121595],{"class":109},"Please",[69,121597,121598],{"class":1022}," make",[69,121600,121601],{"class":1022}," sure",[69,121603,121604],{"class":1022}," that",[69,121606,3918],{"class":86},[69,121608,121609,121611,121614,121617,121620],{"class":71,"line":79},[69,121610,53499],{"class":109},[69,121612,121613],{"class":1022},"   PATH",[69,121615,121616],{"class":1022}," includes",[69,121618,121619],{"class":1022}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[69,121621,3918],{"class":86},[69,121623,121624,121626,121629,121631,121634,121637,121639,121642,121645,121648,121651,121653,121656,121658],{"class":71,"line":106},[69,121625,53499],{"class":109},[69,121627,121628],{"class":1022},"   LD_LIBRARY_PATH",[69,121630,121616],{"class":1022},[69,121632,121633],{"class":1022}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[69,121635,121636],{"class":1022}," or,",[69,121638,6451],{"class":1022},[69,121640,121641],{"class":1022}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[69,121643,121644],{"class":1022}," to",[69,121646,121647],{"class":1022}," \u002Fetc\u002Fld.so.conf",[69,121649,121650],{"class":1022}," and",[69,121652,28466],{"class":1022},[69,121654,121655],{"class":1022}," ldconfig",[69,121657,65830],{"class":1022},[69,121659,121660],{"class":1022}," root\n",[29,121662,121663],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[59,121665,121667],{"className":119744,"code":121666,"language":119746,"meta":64,"style":64},"which nvcc\n",[66,121668,121669],{"__ignoreMap":64},[69,121670,121671,121674],{"class":71,"line":72},[69,121672,121673],{"class":90},"which",[69,121675,121676],{"class":1022}," nvcc\n",[29,121678,121679],{},[24,121680],{"alt":64,"src":121681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[29,121683,121684],{},"所以我进行以下操作：",[59,121686,121688],{"className":119744,"code":121687,"language":119746,"meta":64,"style":64},"sudo vim ~\u002F.bashrc\n",[66,121689,121690],{"__ignoreMap":64},[69,121691,121692,121694,121696],{"class":71,"line":72},[69,121693,25813],{"class":109},[69,121695,119804],{"class":1022},[69,121697,121698],{"class":1022}," ~\u002F.bashrc\n",[29,121700,121701],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[59,121703,121705],{"className":119744,"code":121704,"language":119746,"meta":64,"style":64},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[66,121706,121707,121719],{"__ignoreMap":64},[69,121708,121709,121711,121714,121716],{"class":71,"line":72},[69,121710,26279],{"class":82},[69,121712,121713],{"class":86}," PATH",[69,121715,1019],{"class":82},[69,121717,121718],{"class":86},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[69,121720,121721,121723,121726,121728],{"class":71,"line":79},[69,121722,26279],{"class":82},[69,121724,121725],{"class":86}," LD_LIBRARY_PATH",[69,121727,1019],{"class":82},[69,121729,121730],{"class":86},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[29,121732,121733],{},[24,121734],{"alt":64,"src":121735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[59,121737,121739],{"className":119744,"code":121738,"language":119746,"meta":64,"style":64},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[66,121740,121741,121746,121752,121757],{"__ignoreMap":64},[69,121742,121743],{"class":71,"line":72},[69,121744,121745],{"class":75},"# 刷新当前终端的环境变量\n",[69,121747,121748,121750],{"class":71,"line":79},[69,121749,102114],{"class":90},[69,121751,121698],{"class":1022},[69,121753,121754],{"class":71,"line":106},[69,121755,121756],{"class":75},"# 验证CUDA是否安装成功\n",[69,121758,121759,121762],{"class":71,"line":116},[69,121760,121761],{"class":109},"nvcc",[69,121763,121764],{"class":90}," -V\n",[29,121766,121767],{},"出现下图这种则安装成功。",[29,121769,121770],{},[24,121771],{"alt":64,"src":121772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[19,121774,121776],{"id":121775},"_354-安装cudnn","3.5.4 安装cuDNN",[37,121778,121779],{},[40,121780,121781],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[29,121783,121784,121785,121790],{},"前往 NVIDIA cuDNN 下载页面：",[187,121786,121789],{"href":121787,"rel":121788},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[191],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[29,121792,121793],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[29,121795,121796],{},[24,121797],{"alt":64,"src":121798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[29,121800,121801],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[29,121803,121804],{},[24,121805],{"alt":64,"src":121806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[29,121808,121809],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[29,121811,121812],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[29,121814,121815],{},[195,121816,121817],{},"我这里选择所有Linux X86_64最通用的办法：",[29,121819,121820],{},"下载好的：",[29,121822,121823],{},[24,121824],{"alt":64,"src":121825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[37,121827,121828],{"start":79},[40,121829,121830],{},"安装cuDNN",[29,121832,121833],{},"找到该文件所在目录，并打开终端，cd到该目录。",[29,121835,121836],{},[24,121837],{"alt":64,"src":121838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[29,121840,121841],{},"解压文件，并复制到对应位置完成安装",[59,121843,121845],{"className":119744,"code":121844,"language":119746,"meta":64,"style":64},"# 解压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",[66,121846,121847,121852,121863,121868,121875,121880,121896,121910,121915,121926,121935,121939,121955],{"__ignoreMap":64},[69,121848,121849],{"class":71,"line":72},[69,121850,121851],{"class":75},"# 解压cuDNN文件\n",[69,121853,121854,121857,121860],{"class":71,"line":79},[69,121855,121856],{"class":109},"tar",[69,121858,121859],{"class":90}," -xvf",[69,121861,121862],{"class":1022}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[69,121864,121865],{"class":71,"line":106},[69,121866,121867],{"class":75},"# cd进文件夹\n",[69,121869,121870,121872],{"class":71,"line":116},[69,121871,102497],{"class":90},[69,121873,121874],{"class":1022}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[69,121876,121877],{"class":71,"line":133},[69,121878,121879],{"class":75},"# 复制cuDNN文件到CUDA目录\n",[69,121881,121882,121884,121886,121889,121891,121894],{"class":71,"line":139},[69,121883,25813],{"class":109},[69,121885,29097],{"class":1022},[69,121887,121888],{"class":1022}," include\u002Fcudnn",[69,121890,1843],{"class":90},[69,121892,121893],{"class":1022},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[69,121895,3918],{"class":86},[69,121897,121898,121900,121902,121905,121907],{"class":71,"line":401},[69,121899,25813],{"class":109},[69,121901,29097],{"class":1022},[69,121903,121904],{"class":1022}," lib\u002Flibcudnn",[69,121906,1843],{"class":90},[69,121908,121909],{"class":1022},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[69,121911,121912],{"class":71,"line":470},[69,121913,121914],{"class":75},"# 对比一下有没有缺文件\n",[69,121916,121917,121919,121922,121924],{"class":71,"line":475},[69,121918,27997],{"class":109},[69,121920,121921],{"class":1022}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[69,121923,1843],{"class":90},[69,121925,3918],{"class":86},[69,121927,121928,121930,121933],{"class":71,"line":482},[69,121929,27997],{"class":109},[69,121931,121932],{"class":1022}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[69,121934,120469],{"class":90},[69,121936,121937],{"class":71,"line":497},[69,121938,121518],{"class":75},[69,121940,121941,121943,121945,121948,121950,121952],{"class":71,"line":502},[69,121942,25813],{"class":109},[69,121944,25816],{"class":1022},[69,121946,121947],{"class":1022}," a+r",[69,121949,121921],{"class":1022},[69,121951,1843],{"class":90},[69,121953,121954],{"class":86},"   \n",[69,121956,121957,121959,121961,121963,121965],{"class":71,"line":509},[69,121958,25813],{"class":109},[69,121960,25816],{"class":1022},[69,121962,121947],{"class":1022},[69,121964,121932],{"class":1022},[69,121966,120469],{"class":90},[37,121968,121969],{"start":106},[40,121970,121971],{},"检查是否安装成功",[59,121973,121975],{"className":119744,"code":121974,"language":119746,"meta":64,"style":64},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[66,121976,121977,121982],{"__ignoreMap":64},[69,121978,121979],{"class":71,"line":72},[69,121980,121981],{"class":75},"# 检查cuDNN版本命令\n",[69,121983,121984,121987,121990,121992,121994,121997,122000],{"class":71,"line":79},[69,121985,121986],{"class":109},"cat",[69,121988,121989],{"class":1022}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[69,121991,26346],{"class":82},[69,121993,31472],{"class":109},[69,121995,121996],{"class":1022}," CUDNN_MAJOR",[69,121998,121999],{"class":90}," -A",[69,122001,48959],{"class":90},[29,122003,122004],{},"出现下图这样的就是安装成功了",[29,122006,122007],{},[24,122008],{"alt":64,"src":122009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[37,122011,122012],{"start":116},[40,122013,122014],{},"软链接(一般不需要)",[59,122016,122018],{"className":119744,"code":122017,"language":119746,"meta":64,"style":64},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[66,122019,122020,122025],{"__ignoreMap":64},[69,122021,122022],{"class":71,"line":72},[69,122023,122024],{"class":75},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[69,122026,122027,122029],{"class":71,"line":79},[69,122028,25813],{"class":109},[69,122030,122031],{"class":1022}," ldconfig\n",[29,122033,122034],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[59,122036,122041],{"className":122037,"code":122038,"language":122039,"meta":122040,"style":64},"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",[66,122042,122043,122048,122053,122058,122063,122068,122073],{"__ignoreMap":64},[69,122044,122045],{"class":71,"line":72},[69,122046,122047],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[69,122049,122050],{"class":71,"line":79},[69,122051,122052],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[69,122054,122055],{"class":71,"line":106},[69,122056,122057],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[69,122059,122060],{"class":71,"line":116},[69,122061,122062],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[69,122064,122065],{"class":71,"line":133},[69,122066,122067],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[69,122069,122070],{"class":71,"line":139},[69,122071,122072],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[69,122074,122075],{"class":71,"line":401},[69,122076,122077],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[29,122079,122080],{},"运行下方的命令",[59,122082,122084],{"className":119744,"code":122083,"language":119746,"meta":64,"style":64},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[66,122085,122086,122091,122098,122103],{"__ignoreMap":64},[69,122087,122088],{"class":71,"line":72},[69,122089,122090],{"class":75},"# cd进入CUDA路径\n",[69,122092,122093,122095],{"class":71,"line":79},[69,122094,102497],{"class":90},[69,122096,122097],{"class":1022}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[69,122099,122100],{"class":71,"line":106},[69,122101,122102],{"class":75}," # 查看本路径下的需要软链接的文件名\n",[69,122104,122105],{"class":71,"line":116},[69,122106,122107],{"class":109}," ls\n",[29,122109,122110],{},[24,122111],{"alt":64,"src":122112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[29,122114,122115,122116,19649,122119,19649,122122,122125],{},"如上图，我需要将",[66,122117,122118],{},"libcudnn_xxx_xxxxx.so.8.9.7",[66,122120,122121],{},"libcudnn_xxx_xxxxx.so.8",[66,122123,122124],{},"libcudnn_xxx_xxxxx.so","软链接",[59,122127,122129],{"className":119744,"code":122128,"language":119746,"meta":64,"style":64},"# 创建符号链接。对于每个 .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",[66,122130,122131,122136,122152,122166,122180,122194,122208,122222,122236,122241,122247,122252],{"__ignoreMap":64},[69,122132,122133],{"class":71,"line":72},[69,122134,122135],{"class":75},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[69,122137,122138,122140,122143,122146,122149],{"class":71,"line":79},[69,122139,25813],{"class":109},[69,122141,122142],{"class":1022}," ln",[69,122144,122145],{"class":90}," -sf",[69,122147,122148],{"class":1022}," libcudnn_cnn_train.so.8.9.7",[69,122150,122151],{"class":1022}," libcudnn_cnn_train.so.8\n",[69,122153,122154,122156,122158,122160,122163],{"class":71,"line":106},[69,122155,25813],{"class":109},[69,122157,122142],{"class":1022},[69,122159,122145],{"class":90},[69,122161,122162],{"class":1022}," libcudnn_adv_infer.so.8.9.7",[69,122164,122165],{"class":1022}," libcudnn_adv_infer.so.8\n",[69,122167,122168,122170,122172,122174,122177],{"class":71,"line":116},[69,122169,25813],{"class":109},[69,122171,122142],{"class":1022},[69,122173,122145],{"class":90},[69,122175,122176],{"class":1022}," libcudnn_adv_train.so.8.9.7",[69,122178,122179],{"class":1022}," libcudnn_adv_train.so.8\n",[69,122181,122182,122184,122186,122188,122191],{"class":71,"line":133},[69,122183,25813],{"class":109},[69,122185,122142],{"class":1022},[69,122187,122145],{"class":90},[69,122189,122190],{"class":1022}," libcudnn_cnn_infer.so.8.9.7",[69,122192,122193],{"class":1022}," libcudnn_cnn_infer.so.8\n",[69,122195,122196,122198,122200,122202,122205],{"class":71,"line":139},[69,122197,25813],{"class":109},[69,122199,122142],{"class":1022},[69,122201,122145],{"class":90},[69,122203,122204],{"class":1022}," libcudnn.so.8.9.7",[69,122206,122207],{"class":1022}," libcudnn.so.8\n",[69,122209,122210,122212,122214,122216,122219],{"class":71,"line":401},[69,122211,25813],{"class":109},[69,122213,122142],{"class":1022},[69,122215,122145],{"class":90},[69,122217,122218],{"class":1022}," libcudnn_ops_infer.so.8.9.7",[69,122220,122221],{"class":1022}," libcudnn_ops_infer.so.8\n",[69,122223,122224,122226,122228,122230,122233],{"class":71,"line":470},[69,122225,25813],{"class":109},[69,122227,122142],{"class":1022},[69,122229,122145],{"class":90},[69,122231,122232],{"class":1022}," libcudnn_ops_train.so.8.9.7",[69,122234,122235],{"class":1022}," libcudnn_ops_train.so.8\n",[69,122237,122238],{"class":71,"line":475},[69,122239,122240],{"class":75},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[69,122242,122243,122245],{"class":71,"line":482},[69,122244,25813],{"class":109},[69,122246,122031],{"class":1022},[69,122248,122249],{"class":71,"line":497},[69,122250,122251],{"class":75},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[69,122253,122254,122256,122259,122262,122264,122267],{"class":71,"line":502},[69,122255,27997],{"class":109},[69,122257,122258],{"class":90}," -l",[69,122260,122261],{"class":1022}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[69,122263,1843],{"class":90},[69,122265,122266],{"class":1022},".so",[69,122268,120469],{"class":90},[19,122270,122272],{"id":122271},"_355-常见问题","3.5.5 常见问题",[37,122274,122275],{},[40,122276,122277],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[59,122279,122281],{"className":119744,"code":122280,"language":119746,"meta":64,"style":64},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[66,122282,122283],{"__ignoreMap":64},[69,122284,122285,122287,122289],{"class":71,"line":72},[69,122286,25813],{"class":109},[69,122288,119804],{"class":1022},[69,122290,122291],{"class":1022}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[29,122293,122294],{},"blacklist-nouveau.conf文件内容如下：",[59,122296,122298],{"className":119744,"code":122297,"language":119746,"meta":64,"style":64},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[66,122299,122300,122308,122315,122327,122337],{"__ignoreMap":64},[69,122301,122302,122305],{"class":71,"line":72},[69,122303,122304],{"class":109},"blacklist",[69,122306,122307],{"class":1022}," nouveau\n",[69,122309,122310,122312],{"class":71,"line":79},[69,122311,122304],{"class":109},[69,122313,122314],{"class":1022}," lbm-nouveau\n",[69,122316,122317,122319,122322,122325],{"class":71,"line":106},[69,122318,117151],{"class":109},[69,122320,122321],{"class":1022}," nouveau",[69,122323,122324],{"class":1022}," modeset=",[69,122326,4329],{"class":90},[69,122328,122329,122332,122334],{"class":71,"line":116},[69,122330,122331],{"class":90},"alias",[69,122333,122321],{"class":1022},[69,122335,122336],{"class":1022}," off\n",[69,122338,122339,122341,122344],{"class":71,"line":133},[69,122340,122331],{"class":90},[69,122342,122343],{"class":1022}," lbm-nouveau",[69,122345,122336],{"class":1022},[29,122347,122348],{},"接着运行下方命令",[59,122350,122352],{"className":119744,"code":122351,"language":119746,"meta":64,"style":64},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[66,122353,122354,122364,122369],{"__ignoreMap":64},[69,122355,122356,122358,122361],{"class":71,"line":72},[69,122357,25813],{"class":109},[69,122359,122360],{"class":1022}," update-initramfs",[69,122362,122363],{"class":90}," -u\n",[69,122365,122366],{"class":71,"line":79},[69,122367,122368],{"class":109},"或者\n",[69,122370,122371,122373,122376],{"class":71,"line":106},[69,122372,25813],{"class":109},[69,122374,122375],{"class":1022}," dracut",[69,122377,122378],{"class":90}," --force\n",[29,122380,122381],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[59,122383,122385],{"className":119744,"code":122384,"language":119746,"meta":64,"style":64},"lsmod | grep nouveau\n",[66,122386,122387],{"__ignoreMap":64},[69,122388,122389,122392,122394,122396],{"class":71,"line":72},[69,122390,122391],{"class":109},"lsmod",[69,122393,26346],{"class":82},[69,122395,31472],{"class":109},[69,122397,122307],{"class":1022},[37,122399,122400],{"start":79},[40,122401,122402],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[59,122404,122406],{"className":119744,"code":122405,"language":119746,"meta":64,"style":64},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[66,122407,122408],{"__ignoreMap":64},[69,122409,122410,122412,122414],{"class":71,"line":72},[69,122411,25813],{"class":109},[69,122413,119804],{"class":1022},[69,122415,122416],{"class":1022}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[29,122418,122419],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[59,122421,122423],{"className":119744,"code":122422,"language":119746,"meta":64,"style":64},"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",[66,122424,122425,122433,122441,122449,122456,122464,122474,122482],{"__ignoreMap":64},[69,122426,122427,122430],{"class":71,"line":72},[69,122428,122429],{"class":109},"Section",[69,122431,122432],{"class":1022}," \"OutputClass\"\n",[69,122434,122435,122438],{"class":71,"line":79},[69,122436,122437],{"class":109},"   Identifier",[69,122439,122440],{"class":1022}," \"nvidia\"\n",[69,122442,122443,122446],{"class":71,"line":106},[69,122444,122445],{"class":109},"   MatchDriver",[69,122447,122448],{"class":1022}," \"nvidia-drm\"\n",[69,122450,122451,122454],{"class":71,"line":116},[69,122452,122453],{"class":109},"   Driver",[69,122455,122440],{"class":1022},[69,122457,122458,122461],{"class":71,"line":133},[69,122459,122460],{"class":109},"   Option",[69,122462,122463],{"class":1022}," \"AllowEmptyInitialConfiguration\"\n",[69,122465,122466,122468,122471],{"class":71,"line":139},[69,122467,122460],{"class":109},[69,122469,122470],{"class":1022}," \"PrimaryGPU\"",[69,122472,122473],{"class":1022}," \"yes\"\n",[69,122475,122476,122479],{"class":71,"line":401},[69,122477,122478],{"class":109},"   ModulePath",[69,122480,122481],{"class":1022}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[69,122483,122484],{"class":71,"line":470},[69,122485,122486],{"class":109},"EndSection\n",[37,122488,122489],{"start":106},[40,122490,122491],{},"安装N卡驱动提示错误",[59,122493,122495],{"className":122037,"code":122494,"language":122039,"meta":122040,"style":64},"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",[66,122496,122497],{"__ignoreMap":64},[69,122498,122499],{"class":71,"line":72},[69,122500,122494],{},[37,122502,122503],{},[40,122504,122505],{},"检查当前运行的内核版本：",[29,122507,122508],{},"运行以下命令以查看你当前正在使用的内核版本：",[59,122510,122512],{"className":118517,"code":122511,"language":118519,"meta":64,"style":64},"uname -r\n",[66,122513,122514],{"__ignoreMap":64},[69,122515,122516,122518],{"class":71,"line":72},[69,122517,71429],{"class":109},[69,122519,122520],{"class":90}," -r\n",[37,122522,122523],{"start":79},[40,122524,122525],{},"安装内核开发文件：",[29,122527,122528,122529,122532],{},"确保你已经安装了与当前内核版本相匹配的 ",[66,122530,122531],{},"kernel-devel"," 包。运行以下命令来安装：",[59,122534,122536],{"className":118517,"code":122535,"language":118519,"meta":64,"style":64},"sudo dnf install kernel-devel-$(uname -r)\n",[66,122537,122538],{"__ignoreMap":64},[69,122539,122540,122542,122544,122546,122549,122551,122553,122555],{"class":71,"line":72},[69,122541,25813],{"class":109},[69,122543,27551],{"class":1022},[69,122545,25071],{"class":1022},[69,122547,122548],{"class":1022}," kernel-devel-",[69,122550,26336],{"class":86},[69,122552,71429],{"class":109},[69,122554,120860],{"class":90},[69,122556,1404],{"class":86},[29,122558,122559],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[37,122561,122562],{"start":106},[40,122563,122564],{},"安装内核源代码（如果需要）：",[29,122566,122567],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[59,122569,122571],{"className":118517,"code":122570,"language":118519,"meta":64,"style":64},"sudo dnf install kernel-headers kernel-source\n",[66,122572,122573],{"__ignoreMap":64},[69,122574,122575,122577,122579,122581,122584],{"class":71,"line":72},[69,122576,25813],{"class":109},[69,122578,27551],{"class":1022},[69,122580,25071],{"class":1022},[69,122582,122583],{"class":1022}," kernel-headers",[69,122585,122586],{"class":1022}," kernel-source\n",[37,122588,122589],{"start":116},[40,122590,122591],{},"检查安装：",[29,122593,122594,122595,122598],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[66,122596,122597],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[59,122600,122602],{"className":118517,"code":122601,"language":118519,"meta":64,"style":64},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[66,122603,122604],{"__ignoreMap":64},[69,122605,122606,122608],{"class":71,"line":72},[69,122607,27997],{"class":109},[69,122609,122610],{"class":1022}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[29,122612,122613,122614,122617],{},"如果仍然遇到问题，可以通过 ",[66,122615,122616],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1297,122619,122620],{},"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":64,"searchDepth":79,"depth":79,"links":122622},[122623,122627,122637,122641,122642],{"id":119720,"depth":79,"text":119721,"children":122624},[122625,122626],{"id":119730,"depth":106,"text":119731},{"id":119740,"depth":106,"text":119741},{"id":119940,"depth":79,"text":119941,"children":122628},[122629,122630,122631,122632,122633,122634,122635,122636],{"id":119944,"depth":106,"text":119945},{"id":120014,"depth":106,"text":120015},{"id":120103,"depth":106,"text":120104},{"id":120348,"depth":106,"text":120349},{"id":120418,"depth":106,"text":120419},{"id":120485,"depth":106,"text":120486},{"id":120520,"depth":106,"text":120521},{"id":120575,"depth":106,"text":120576},{"id":120626,"depth":79,"text":120627,"children":122638},[122639,122640],{"id":120630,"depth":106,"text":120631},{"id":120710,"depth":106,"text":120711},{"id":120896,"depth":79,"text":120897},{"id":121069,"depth":79,"text":121070,"children":122643},[122644,122645,122646,122647,122648],{"id":121073,"depth":106,"text":121074},{"id":121114,"depth":106,"text":121115},{"id":121401,"depth":106,"text":121402},{"id":121775,"depth":106,"text":121776},{"id":122271,"depth":106,"text":122272},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119712,"description":1322},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122655,"title":122656,"body":122657,"description":1322,"extension":1323,"meta":122997,"navigation":1325,"path":122998,"seo":122999,"stem":123000,"__hash__":123001},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122658,"toc":122995},[122659,122662,122667,122670,122916,122921,122924,122960,122963,122992],[10,122660,122656],{"id":122661},"_4-命令教程长期积累",[37,122663,122664],{},[40,122665,122666],{},"大多数命令",[29,122668,122669],{},"常用 Linux 命令速查：",[59,122671,122673],{"className":118517,"code":122672,"language":118519,"meta":64,"style":64},"# 文件与目录\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",[66,122674,122675,122680,122687,122694,122702,122709,122716,122724,122732,122739,122746,122754,122758,122763,122770,122778,122785,122789,122794,122801,122809,122817,122825,122833,122837,122842,122850,122857,122864,122872,122880,122884,122889,122898,122907],{"__ignoreMap":64},[69,122676,122677],{"class":71,"line":72},[69,122678,122679],{"class":75},"# 文件与目录\n",[69,122681,122682,122684],{"class":71,"line":79},[69,122683,27997],{"class":109},[69,122685,122686],{"class":75},"        # 列出目录内容\n",[69,122688,122689,122691],{"class":71,"line":106},[69,122690,102497],{"class":90},[69,122692,122693],{"class":75},"        # 切换目录\n",[69,122695,122696,122699],{"class":71,"line":116},[69,122697,122698],{"class":90},"pwd",[69,122700,122701],{"class":75},"       # 显示当前路径\n",[69,122703,122704,122706],{"class":71,"line":133},[69,122705,102487],{"class":109},[69,122707,122708],{"class":75},"     # 创建目录\n",[69,122710,122711,122713],{"class":71,"line":139},[69,122712,26559],{"class":109},[69,122714,122715],{"class":75},"        # 删除文件或目录\n",[69,122717,122718,122721],{"class":71,"line":401},[69,122719,122720],{"class":109},"cp",[69,122722,122723],{"class":75},"        # 复制文件或目录\n",[69,122725,122726,122729],{"class":71,"line":470},[69,122727,122728],{"class":109},"mv",[69,122730,122731],{"class":75},"        # 移动\u002F重命名文件或目录\n",[69,122733,122734,122736],{"class":71,"line":475},[69,122735,102504],{"class":109},[69,122737,122738],{"class":75},"     # 创建空文件\n",[69,122740,122741,122743],{"class":71,"line":482},[69,122742,121986],{"class":109},[69,122744,122745],{"class":75},"       # 查看文件内容\n",[69,122747,122748,122751],{"class":71,"line":497},[69,122749,122750],{"class":109},"head\u002Ftail",[69,122752,122753],{"class":75}," # 查看文件头部\u002F尾部\n",[69,122755,122756],{"class":71,"line":502},[69,122757,3644],{"emptyLinePlaceholder":1325},[69,122759,122760],{"class":71,"line":509},[69,122761,122762],{"class":75},"# 权限管理\n",[69,122764,122765,122767],{"class":71,"line":524},[69,122766,25848],{"class":109},[69,122768,122769],{"class":75},"     # 修改文件权限\n",[69,122771,122772,122775],{"class":71,"line":2888},[69,122773,122774],{"class":109},"chown",[69,122776,122777],{"class":75},"     # 修改文件所有者\n",[69,122779,122780,122782],{"class":71,"line":2893},[69,122781,25813],{"class":109},[69,122783,122784],{"class":75},"      # 以管理员身份执行\n",[69,122786,122787],{"class":71,"line":2899},[69,122788,3644],{"emptyLinePlaceholder":1325},[69,122790,122791],{"class":71,"line":2919},[69,122792,122793],{"class":75},"# 系统信息\n",[69,122795,122796,122798],{"class":71,"line":2924},[69,122797,71429],{"class":109},[69,122799,122800],{"class":75},"     # 系统信息\n",[69,122802,122803,122806],{"class":71,"line":2938},[69,122804,122805],{"class":109},"df",[69,122807,122808],{"class":75},"        # 磁盘使用情况\n",[69,122810,122811,122814],{"class":71,"line":2943},[69,122812,122813],{"class":109},"free",[69,122815,122816],{"class":75},"      # 内存使用情况\n",[69,122818,122819,122822],{"class":71,"line":2972},[69,122820,122821],{"class":109},"top\u002Fhtop",[69,122823,122824],{"class":75},"  # 进程监控\n",[69,122826,122827,122830],{"class":71,"line":2977},[69,122828,122829],{"class":109},"ps",[69,122831,122832],{"class":75},"        # 查看进程\n",[69,122834,122835],{"class":71,"line":2994},[69,122836,3644],{"emptyLinePlaceholder":1325},[69,122838,122839],{"class":71,"line":2999},[69,122840,122841],{"class":75},"# 网络\n",[69,122843,122844,122847],{"class":71,"line":3004},[69,122845,122846],{"class":109},"ping",[69,122848,122849],{"class":75},"      # 测试网络连通性\n",[69,122851,122852,122854],{"class":71,"line":3009},[69,122853,28085],{"class":109},[69,122855,122856],{"class":75},"      # 发送 HTTP 请求\n",[69,122858,122859,122861],{"class":71,"line":3023},[69,122860,121510],{"class":109},[69,122862,122863],{"class":75},"      # 下载文件\n",[69,122865,122866,122869],{"class":71,"line":3028},[69,122867,122868],{"class":109},"ssh",[69,122870,122871],{"class":75},"       # 远程登录\n",[69,122873,122874,122877],{"class":71,"line":3821},[69,122875,122876],{"class":109},"scp",[69,122878,122879],{"class":75},"       # 远程文件传输\n",[69,122881,122882],{"class":71,"line":3835},[69,122883,3644],{"emptyLinePlaceholder":1325},[69,122885,122886],{"class":71,"line":3843},[69,122887,122888],{"class":75},"# 包管理（Debian\u002FUbuntu）\n",[69,122890,122891,122893,122895],{"class":71,"line":3848},[69,122892,118589],{"class":109},[69,122894,118568],{"class":1022},[69,122896,122897],{"class":75},"   # 更新软件源\n",[69,122899,122900,122902,122904],{"class":71,"line":3854},[69,122901,118589],{"class":109},[69,122903,25071],{"class":1022},[69,122905,122906],{"class":75},"  # 安装软件包\n",[69,122908,122909,122911,122913],{"class":71,"line":3860},[69,122910,118589],{"class":109},[69,122912,27315],{"class":1022},[69,122914,122915],{"class":75},"   # 卸载软件包\n",[37,122917,122918],{"start":79},[40,122919,122920],{},"KDE Dolphin 以root打开",[29,122922,122923],{},"kde5",[59,122925,122927],{"className":118517,"code":122926,"language":118519,"meta":64,"style":64},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[66,122928,122929],{"__ignoreMap":64},[69,122930,122931,122934,122937,122940,122942,122944,122947,122950,122952,122955,122957],{"class":71,"line":72},[69,122932,122933],{"class":109},"pkexec",[69,122935,122936],{"class":1022}," env",[69,122938,122939],{"class":1022}," DISPLAY=",[69,122941,29379],{"class":86},[69,122943,29437],{"class":1022},[69,122945,122946],{"class":86},"$XAUTHORITY ",[69,122948,122949],{"class":1022},"KDE_SESSION_VERSION=",[69,122951,1709],{"class":90},[69,122953,122954],{"class":1022}," KDE_FULL_SESSION=",[69,122956,2614],{"class":90},[69,122958,122959],{"class":1022}," dolphin\n",[29,122961,122962],{},"kde6",[59,122964,122966],{"className":118517,"code":122965,"language":118519,"meta":64,"style":64},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[66,122967,122968],{"__ignoreMap":64},[69,122969,122970,122972,122974,122976,122978,122980,122982,122984,122986,122988,122990],{"class":71,"line":72},[69,122971,122933],{"class":109},[69,122973,122936],{"class":1022},[69,122975,122939],{"class":1022},[69,122977,29379],{"class":86},[69,122979,29437],{"class":1022},[69,122981,122946],{"class":86},[69,122983,122949],{"class":1022},[69,122985,1733],{"class":90},[69,122987,122954],{"class":1022},[69,122989,2614],{"class":90},[69,122991,122959],{"class":1022},[1297,122993,122994],{},"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":64,"searchDepth":79,"depth":79,"links":122996},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122656,"description":1322},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123003,"title":123004,"body":123005,"description":1322,"extension":1323,"meta":123019,"navigation":1325,"path":123020,"seo":123021,"stem":123022,"__hash__":123023},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123006,"toc":123017},[123007,123010],[10,123008,123004],{"id":123009},"_5-各种环境配置",[29,123011,123012],{},[187,123013,123016],{"href":123014,"rel":123015},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[191],"电控组环境搭建大全",{"title":64,"searchDepth":79,"depth":79,"links":123018},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123004,"description":1322},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123025,"title":123026,"body":123027,"description":1322,"extension":1323,"meta":123375,"navigation":1325,"path":123376,"seo":123377,"stem":123378,"__hash__":123379},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123028,"toc":123367},[123029,123032,123036,123040,123044,123049,123056,123060,123353,123357,123364],[10,123030,123026],{"id":123031},"_6-拓展功能",[14,123033,123035],{"id":123034},"_61-wine","6.1 Wine",[14,123037,123039],{"id":123038},"_62-android","6.2 Android",[19,123041,123043],{"id":123042},"_621-i卡a卡","6.2.1 I卡、A卡",[37,123045,123046],{},[40,123047,123048],{},"Wayland-Waydroid(体验超级好)",[29,123050,123051,123052],{},"Waydroid 官网与安装指南：",[187,123053,123054],{"href":123054,"rel":123055},"https:\u002F\u002Fwaydro.id\u002F",[191],[19,123057,123059],{"id":123058},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[37,123061,123062],{},[40,123063,123064,123065,123067,123068,123072,123074,123077,123082,123279],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54943,123066],{},"BlissOS 官网下载：",[187,123069,123070],{"href":123070,"rel":123071},"https:\u002F\u002Fblissos.org\u002F",[191],[54943,123073],{},[24,123075],{"alt":64,"src":123076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[37,123078,123079],{"start":106},[40,123080,123081],{},"比较推荐的配置",[59,123083,123085],{"className":118517,"code":123084,"language":118519,"meta":64,"style":64},"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",[66,123086,123087,123094,123104,123114,123124,123136,123146,123153,123163,123172,123181,123191,123201,123210,123220,123230,123242,123252,123261,123271],{"__ignoreMap":64},[69,123088,123089,123092],{"class":71,"line":72},[69,123090,123091],{"class":109},"qemu-system-x86_64",[69,123093,25915],{"class":90},[69,123095,123096,123099,123102],{"class":71,"line":79},[69,123097,123098],{"class":90},"        -M",[69,123100,123101],{"class":1022}," q35,vmport=off",[69,123103,25915],{"class":90},[69,123105,123106,123109,123112],{"class":71,"line":106},[69,123107,123108],{"class":90},"        -accel",[69,123110,123111],{"class":1022}," kvm",[69,123113,25915],{"class":90},[69,123115,123116,123119,123122],{"class":71,"line":116},[69,123117,123118],{"class":90},"        -cpu",[69,123120,123121],{"class":1022}," qemu64,+sse3,+sse4.2",[69,123123,25915],{"class":90},[69,123125,123126,123129,123132,123134],{"class":71,"line":133},[69,123127,123128],{"class":90},"        -smp",[69,123130,123131],{"class":1022}," 8,cores=",[69,123133,1684],{"class":90},[69,123135,25915],{"class":90},[69,123137,123138,123141,123144],{"class":71,"line":139},[69,123139,123140],{"class":90},"        -m",[69,123142,123143],{"class":1022}," 6G",[69,123145,25915],{"class":90},[69,123147,123148,123151],{"class":71,"line":401},[69,123149,123150],{"class":90},"        -usb",[69,123152,25915],{"class":90},[69,123154,123155,123158,123161],{"class":71,"line":470},[69,123156,123157],{"class":90},"        -device",[69,123159,123160],{"class":1022}," virtio-tablet",[69,123162,25915],{"class":90},[69,123164,123165,123167,123170],{"class":71,"line":475},[69,123166,123157],{"class":90},[69,123168,123169],{"class":1022}," virtio-keyboard",[69,123171,25915],{"class":90},[69,123173,123174,123176,123179],{"class":71,"line":482},[69,123175,123157],{"class":90},[69,123177,123178],{"class":1022}," usb-tablet",[69,123180,25915],{"class":90},[69,123182,123183,123186,123189],{"class":71,"line":497},[69,123184,123185],{"class":90},"        -bios",[69,123187,123188],{"class":1022}," OVMF-pure-efi64.fd",[69,123190,25915],{"class":90},[69,123192,123193,123196,123199],{"class":71,"line":502},[69,123194,123195],{"class":90},"        -net",[69,123197,123198],{"class":1022}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[69,123200,25915],{"class":90},[69,123202,123203,123205,123208],{"class":71,"line":509},[69,123204,123195],{"class":90},[69,123206,123207],{"class":1022}," nic,model=virtio",[69,123209,25915],{"class":90},[69,123211,123212,123215,123218],{"class":71,"line":524},[69,123213,123214],{"class":90},"        -audio",[69,123216,123217],{"class":1022}," sdl,model=hda",[69,123219,25915],{"class":90},[69,123221,123222,123225,123228],{"class":71,"line":2888},[69,123223,123224],{"class":90},"        -display",[69,123226,123227],{"class":1022}," sdl,gl=on,show-cursor=on",[69,123229,25915],{"class":90},[69,123231,123232,123234,123237,123240],{"class":71,"line":2893},[69,123233,123157],{"class":90},[69,123235,123236],{"class":1022}," virtio-vga-gl,xres=1920,yres=",[69,123238,123239],{"class":90},"1080",[69,123241,25915],{"class":90},[69,123243,123244,123247,123250],{"class":71,"line":2899},[69,123245,123246],{"class":90},"        -drive",[69,123248,123249],{"class":1022}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[69,123251,25915],{"class":90},[69,123253,123254,123256,123259],{"class":71,"line":2919},[69,123255,123246],{"class":90},[69,123257,123258],{"class":1022}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[69,123260,25915],{"class":90},[69,123262,123263,123266,123269],{"class":71,"line":2924},[69,123264,123265],{"class":90},"        -monitor",[69,123267,123268],{"class":1022}," stdio",[69,123270,25915],{"class":90},[69,123272,123273,123276],{"class":71,"line":2938},[69,123274,123275],{"class":90},"        -serial",[69,123277,123278],{"class":1022}," none\n",[37,123280,123281],{"start":133},[40,123282,123283,123284],{},"常用操作：",[37,123285,123286,123289,123345],{},[40,123287,123288],{},"全屏：Ctrl+Alt+F",[40,123290,123291,123292,123297],{},"adb调试",[37,123293,123294],{},[40,123295,123296],{},"使Linux与Android用ADB连接。",[59,123298,123300],{"className":118517,"code":123299,"language":118519,"meta":64,"style":64},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[66,123301,123302,123307,123318,123323,123335,123340],{"__ignoreMap":64},[69,123303,123304],{"class":71,"line":72},[69,123305,123306],{"class":75},"# 连接安卓\n",[69,123308,123309,123312,123315],{"class":71,"line":79},[69,123310,123311],{"class":109},"adb",[69,123313,123314],{"class":1022}," connect",[69,123316,123317],{"class":90}," 127.0.0.1\n",[69,123319,123320],{"class":71,"line":106},[69,123321,123322],{"class":75},"# 打开shell\n",[69,123324,123325,123327,123329,123332],{"class":71,"line":116},[69,123326,123311],{"class":109},[69,123328,28119],{"class":90},[69,123330,123331],{"class":1022}," 127.0.0.1:5555",[69,123333,123334],{"class":1022}," shell\n",[69,123336,123337],{"class":71,"line":133},[69,123338,123339],{"class":75},"# 使用root权限\n",[69,123341,123342],{"class":71,"line":139},[69,123343,123344],{"class":109},"su\n",[40,123346,123347,123348],{},"中文输入法",[37,123349,123350],{},[40,123351,123352],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123354,123356],{"id":123355},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[29,123358,123359,123360],{},"rEFInd 官网与文档：",[187,123361,123362],{"href":123362,"rel":123363},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[191],[1297,123365,123366],{},"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":64,"searchDepth":79,"depth":79,"links":123368},[123369,123370,123374],{"id":123034,"depth":79,"text":123035},{"id":123038,"depth":79,"text":123039,"children":123371},[123372,123373],{"id":123042,"depth":106,"text":123043},{"id":123058,"depth":106,"text":123059},{"id":123355,"depth":79,"text":123356},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123026,"description":1322},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123381,"title":123382,"body":123383,"description":1322,"extension":1323,"meta":126682,"navigation":1325,"path":126683,"seo":126684,"stem":126685,"__hash__":126686},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123384,"toc":126656},[123385,123388,123392,123395,123402,123652,123655,123727,123730,123734,123738,123743,123746,123749,123752,123757,123760,123763,123766,123771,123774,123779,123782,123785,123790,123793,123798,123801,123805,123809,123812,123817,123820,123834,123837,123840,123849,123852,123861,123864,123867,123876,123879,123888,123891,123894,123903,123906,123909,123924,123927,123930,123939,123944,123947,123950,123959,123962,123971,123974,123983,123986,123995,124000,124003,124011,124016,124019,124028,124031,124039,124044,124047,124056,124059,124062,124066,124069,124074,124077,124082,124096,124101,124106,124117,124122,124128,124133,124148,124153,124156,124161,124166,124171,124179,124184,124191,124196,124207,124212,124215,124219,124222,124225,124230,124233,124252,124257,124260,124269,124274,124277,124299,124302,124332,124335,124340,124343,124357,124362,124381,124384,124387,124392,124404,124409,124414,124417,124422,124425,124440,124443,124448,124453,124457,124462,124502,124505,124509,124515,124521,124526,124529,124536,124541,124548,124551,124554,124561,124575,124578,124638,124641,124655,124667,124670,124673,124676,124740,124743,124746,124749,124769,124772,124777,124784,124788,124791,124795,124800,124805,124809,124812,124815,124857,124862,124865,124887,124902,124904,124909,124921,124981,124983,124985,125039,125041,125043,125049,125054,125057,125062,125066,125069,125131,125136,125139,125141,125145,125157,125239,125241,125243,125297,125303,125305,125309,125314,125316,125321,125325,125345,125380,125384,125387,125390,125393,125400,125403,125415,125418,125433,125436,125455,125503,125506,125523,125526,125540,125545,125548,125557,125572,125584,125622,125627,125636,125641,125646,125672,125681,125685,125689,125694,125697,125701,125705,125710,125713,125718,125721,125726,125729,125734,125737,125741,125746,125749,125754,125757,125761,125766,125769,125774,125777,125782,125785,125789,125794,125797,125802,125805,125810,125813,125817,125822,125825,125830,125833,125838,125841,125846,125849,125854,125857,125862,125865,125869,125874,125877,125882,125889,125893,125898,125901,125906,125909,125913,125918,125921,125924,125927,125930,125933,125937,125940,125950,125955,125960,125982,125987,125992,125999,126003,126008,126011,126014,126019,126022,126025,126028,126031,126034,126037,126040,126043,126046,126049,126052,126055,126060,126065,126070,126075,126080,126085,126090,126093,126097,126100,126104,126109,126114,126119,126124,126128,126134,126142,126147,126150,126155,126170,126173,126178,126212,126227,126230,126285,126311,126323,126326,126335,126338,126353,126358,126361,126367,126372,126375,126380,126383,126388,126393,126400,126403,126418,126421,126456,126461,126469,126507,126510,126513,126518,126521,126526,126537,126571,126576,126579,126588,126593,126599,126602,126607,126616,126621,126624,126627,126632,126640,126643,126648,126653],[10,123386,123382],{"id":123387},"_7-其他操作",[14,123389,123391],{"id":123390},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[29,123393,123394],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[29,123396,123397,123398,123401],{},"进入工控机的硬盘目录，进入",[66,123399,123400],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[59,123403,123407],{"className":123404,"code":123405,"language":123406,"meta":64,"style":64},"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",[66,123408,123409,123417,123428,123435,123442,123454,123461,123473,123484,123495,123502,123509,123516,123528,123540,123547,123559,123571,123578,123590,123602,123614,123625,123632,123643],{"__ignoreMap":64},[69,123410,123411,123414],{"class":71,"line":72},[69,123412,123413],{"class":348},"network",[69,123415,123416],{"class":86},": \n",[69,123418,123419,123422,123424,123426],{"class":71,"line":79},[69,123420,123421],{"class":348},"  version",[69,123423,94],{"class":86},[69,123425,1471],{"class":90},[69,123427,3918],{"class":86},[69,123429,123430,123433],{"class":71,"line":106},[69,123431,123432],{"class":348},"  wifis",[69,123434,123416],{"class":86},[69,123436,123437,123440],{"class":71,"line":116},[69,123438,123439],{"class":348},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[69,123441,123416],{"class":86},[69,123443,123444,123447,123449,123452],{"class":71,"line":133},[69,123445,123446],{"class":348},"      renderer",[69,123448,94],{"class":86},[69,123450,123451],{"class":1022},"NetworkManager",[69,123453,3918],{"class":86},[69,123455,123456,123459],{"class":71,"line":139},[69,123457,123458],{"class":348},"      match",[69,123460,123416],{"class":86},[69,123462,123463,123466,123468,123471],{"class":71,"line":401},[69,123464,123465],{"class":348},"        name",[69,123467,94],{"class":86},[69,123469,123470],{"class":1022},"\"wlan0\"",[69,123472,3918],{"class":86},[69,123474,123475,123478,123480,123482],{"class":71,"line":470},[69,123476,123477],{"class":348},"      dhcp4",[69,123479,94],{"class":86},[69,123481,2614],{"class":90},[69,123483,3918],{"class":86},[69,123485,123486,123489,123491,123493],{"class":71,"line":475},[69,123487,123488],{"class":348},"      dhcp6",[69,123490,94],{"class":86},[69,123492,2614],{"class":90},[69,123494,3918],{"class":86},[69,123496,123497,123500],{"class":71,"line":482},[69,123498,123499],{"class":348},"      access-points",[69,123501,123416],{"class":86},[69,123503,123504,123507],{"class":71,"line":497},[69,123505,123506],{"class":1022},"        \"EMIS_Vinci_Robocon_5G\"",[69,123508,123416],{"class":86},[69,123510,123511,123514],{"class":71,"line":502},[69,123512,123513],{"class":348},"          auth",[69,123515,123416],{"class":86},[69,123517,123518,123521,123523,123526],{"class":71,"line":509},[69,123519,123520],{"class":348},"            key-management",[69,123522,94],{"class":86},[69,123524,123525],{"class":1022},"\"psk\"",[69,123527,3918],{"class":86},[69,123529,123530,123533,123535,123538],{"class":71,"line":524},[69,123531,123532],{"class":348},"            password",[69,123534,94],{"class":86},[69,123536,123537],{"class":1022},"\"vinci666\"",[69,123539,3918],{"class":86},[69,123541,123542,123545],{"class":71,"line":2888},[69,123543,123544],{"class":348},"          networkmanager",[69,123546,123416],{"class":86},[69,123548,123549,123552,123554,123557],{"class":71,"line":2893},[69,123550,123551],{"class":348},"            uuid",[69,123553,94],{"class":86},[69,123555,123556],{"class":1022},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[69,123558,3918],{"class":86},[69,123560,123561,123564,123566,123569],{"class":71,"line":2899},[69,123562,123563],{"class":348},"            name",[69,123565,94],{"class":86},[69,123567,123568],{"class":1022},"\"EMIS_Vinci_Robocon_5G\"",[69,123570,3918],{"class":86},[69,123572,123573,123576],{"class":71,"line":2919},[69,123574,123575],{"class":348},"            passthrough",[69,123577,123416],{"class":86},[69,123579,123580,123583,123585,123588],{"class":71,"line":2924},[69,123581,123582],{"class":348},"              wifi-security.auth-alg",[69,123584,94],{"class":86},[69,123586,123587],{"class":1022},"\"open\"",[69,123589,3918],{"class":86},[69,123591,123592,123595,123597,123600],{"class":71,"line":2938},[69,123593,123594],{"class":348},"              ipv6.addr-gen-mode",[69,123596,94],{"class":86},[69,123598,123599],{"class":1022},"\"default\"",[69,123601,3918],{"class":86},[69,123603,123604,123607,123609,123612],{"class":71,"line":2943},[69,123605,123606],{"class":348},"              ipv6.ip6-privacy",[69,123608,94],{"class":86},[69,123610,123611],{"class":1022},"\"-1\"",[69,123613,3918],{"class":86},[69,123615,123616,123619,123621,123623],{"class":71,"line":2972},[69,123617,123618],{"class":348},"              proxy._",[69,123620,94],{"class":86},[69,123622,8894],{"class":1022},[69,123624,3918],{"class":86},[69,123626,123627,123630],{"class":71,"line":2977},[69,123628,123629],{"class":348},"      networkmanager",[69,123631,123416],{"class":86},[69,123633,123634,123637,123639,123641],{"class":71,"line":2994},[69,123635,123636],{"class":348},"        uuid",[69,123638,94],{"class":86},[69,123640,123556],{"class":1022},[69,123642,3918],{"class":86},[69,123644,123645,123647,123649],{"class":71,"line":2999},[69,123646,123465],{"class":348},[69,123648,94],{"class":86},[69,123650,123651],{"class":1022},"\"EMIS_Vinci_Robocon_5G\"\n",[29,123653,123654],{},"将其改为新wifi的名和密码：",[59,123656,123658],{"className":123404,"code":123657,"language":123406,"meta":64,"style":64},"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",[66,123659,123660,123666,123675,123681,123688,123697,123705,123711,123717],{"__ignoreMap":64},[69,123661,123662,123664],{"class":71,"line":72},[69,123663,123413],{"class":348},[69,123665,4983],{"class":86},[69,123667,123668,123670,123672],{"class":71,"line":79},[69,123669,123421],{"class":348},[69,123671,94],{"class":86},[69,123673,123674],{"class":90},"2\n",[69,123676,123677,123679],{"class":71,"line":106},[69,123678,123432],{"class":348},[69,123680,4983],{"class":86},[69,123682,123683,123686],{"class":71,"line":116},[69,123684,123685],{"class":348},"    wlan0",[69,123687,4983],{"class":86},[69,123689,123690,123692,123694],{"class":71,"line":133},[69,123691,123477],{"class":348},[69,123693,94],{"class":86},[69,123695,123696],{"class":90},"true\n",[69,123698,123699,123701,123703],{"class":71,"line":139},[69,123700,123488],{"class":348},[69,123702,94],{"class":86},[69,123704,123696],{"class":90},[69,123706,123707,123709],{"class":71,"line":401},[69,123708,123499],{"class":348},[69,123710,4983],{"class":86},[69,123712,123713,123715],{"class":71,"line":470},[69,123714,123506],{"class":1022},[69,123716,4983],{"class":86},[69,123718,123719,123722,123724],{"class":71,"line":475},[69,123720,123721],{"class":348},"          password",[69,123723,94],{"class":86},[69,123725,123726],{"class":1022},"\"vinci666\"\n",[29,123728,123729],{},"工控机开机即可连上网。",[14,123731,123733],{"id":123732},"_72-ssh远程开发","7.2 SSH远程开发",[19,123735,123737],{"id":123736},"_721-环境准备","7.2.1 环境准备",[29,123739,123740],{},[195,123741,123742],{},"1.硬件准备",[29,123744,123745],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[29,123747,123748],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[29,123750,123751],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[29,123753,123754],{},[195,123755,123756],{},"2.设置固定IP",[29,123758,123759],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[29,123761,123762],{},"1.进入设置界面",[29,123764,123765],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[29,123767,123768],{},[24,123769],{"alt":64,"src":123770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[29,123772,123773],{},"2.配置所连接的网络",[29,123775,123776],{},[24,123777],{"alt":64,"src":123778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[29,123780,123781],{},"3.设置固定IP",[29,123783,123784],{},"查看当前IP地址。",[29,123786,123787],{},[24,123788],{"alt":64,"src":123789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[29,123791,123792],{},"设置固定IP。",[29,123794,123795],{},[24,123796],{"alt":64,"src":123797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[29,123799,123800],{},"至此，IP配置完毕。",[19,123802,123804],{"id":123803},"_722-环境搭建","7.2.2 环境搭建",[29,123806,123807],{},[195,123808,26990],{},[29,123810,123811],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[29,123813,123814],{},[195,123815,123816],{},"实现",[29,123818,123819],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[37,123821,123822,123825,123828,123831],{},[40,123823,123824],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[40,123826,123827],{},"远程主机启动SSH服务；",[40,123829,123830],{},"本地主机登陆远程主机；",[40,123832,123833],{},"实现数据传输。",[29,123835,123836],{},"1.安装SSH客户端与服务端",[29,123838,123839],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[59,123841,123843],{"className":122037,"code":123842,"language":122039,"meta":122040,"style":64}," sudo apt install openssh-server\n",[66,123844,123845],{"__ignoreMap":64},[69,123846,123847],{"class":71,"line":72},[69,123848,123842],{},[29,123850,123851],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[59,123853,123855],{"className":122037,"code":123854,"language":122039,"meta":122040,"style":64},"sudo apt install openssh-client\n",[66,123856,123857],{"__ignoreMap":64},[69,123858,123859],{"class":71,"line":72},[69,123860,123854],{},[29,123862,123863],{},"2.远程主机启动SSH服务",[29,123865,123866],{},"远程主机启动 ssh 服务命令如下：",[59,123868,123870],{"className":122037,"code":123869,"language":122039,"meta":122040,"style":64},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[66,123871,123872],{"__ignoreMap":64},[69,123873,123874],{"class":71,"line":72},[69,123875,123869],{},[29,123877,123878],{},"启动后可使用如下命令查看服务是否正常运行：",[59,123880,123882],{"className":122037,"code":123881,"language":122039,"meta":122040,"style":64},"ps -e | grep ssh\n",[66,123883,123884],{"__ignoreMap":64},[69,123885,123886],{"class":71,"line":72},[69,123887,123881],{},[29,123889,123890],{},"如果启动成功，会包含 sshd 程序。",[29,123892,123893],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[59,123895,123897],{"className":122037,"code":123896,"language":122039,"meta":122040,"style":64},"sudo systemctl enable ssh\n",[66,123898,123899],{"__ignoreMap":64},[69,123900,123901],{"class":71,"line":72},[69,123902,123896],{},[29,123904,123905],{},"3.本地远程登录",[29,123907,123908],{},"登录远程主机可以调用如下命令:",[59,123910,123912],{"className":118517,"code":123911,"language":118519,"meta":64,"style":64},"ssh -X 用户名@ip地址\n",[66,123913,123914],{"__ignoreMap":64},[69,123915,123916,123918,123921],{"class":71,"line":72},[69,123917,122868],{"class":109},[69,123919,123920],{"class":90}," -X",[69,123922,123923],{"class":1022}," 用户名@ip地址\n",[29,123925,123926],{},"然后根据提示，录入登陆密码，即可成功登录。",[29,123928,123929],{},"如果退出，可以调用exit命令：",[59,123931,123933],{"className":122037,"code":123932,"language":122039,"meta":122040,"style":64},"exit\n",[66,123934,123935],{"__ignoreMap":64},[69,123936,123937],{"class":71,"line":72},[69,123938,123932],{},[29,123940,123941],{},[195,123942,123943],{},"4.实现数据传输",[29,123945,123946],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[29,123948,123949],{},"上传文件指令格式如下：",[59,123951,123953],{"className":122037,"code":123952,"language":122039,"meta":122040,"style":64},"scp 本地文件路径 账号@ip:路径\n",[66,123954,123955],{"__ignoreMap":64},[69,123956,123957],{"class":71,"line":72},[69,123958,123952],{},[29,123960,123961],{},"上传文件夹指令格式如下：",[59,123963,123965],{"className":122037,"code":123964,"language":122039,"meta":122040,"style":64},"scp -r 本地文件夹路径 账号@ip:路径\n",[66,123966,123967],{"__ignoreMap":64},[69,123968,123969],{"class":71,"line":72},[69,123970,123964],{},[29,123972,123973],{},"下载文件指令格式如下：",[59,123975,123977],{"className":122037,"code":123976,"language":122039,"meta":122040,"style":64},"scp 账号@ip:路径 本地文件夹路径\n",[66,123978,123979],{"__ignoreMap":64},[69,123980,123981],{"class":71,"line":72},[69,123982,123976],{},[29,123984,123985],{},"下载文件夹指令格式如下：",[59,123987,123989],{"className":122037,"code":123988,"language":122039,"meta":122040,"style":64},"scp -r 账号@ip:路径 本地文件夹路径\n",[66,123990,123991],{"__ignoreMap":64},[69,123992,123993],{"class":71,"line":72},[69,123994,123988],{},[29,123996,123997],{},[195,123998,123999],{},"优化",[29,124001,124002],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[37,124004,124005,124008],{},[40,124006,124007],{},"本地生成密钥对；",[40,124009,124010],{},"将公钥上传至远程主机。",[29,124012,124013],{},[195,124014,124015],{},"1.生成密钥对",[29,124017,124018],{},"本地客户端生成公私钥：（一路回车默认即可）",[59,124020,124022],{"className":122037,"code":124021,"language":122039,"meta":122040,"style":64},"ssh-keygen\n",[66,124023,124024],{"__ignoreMap":64},[69,124025,124026],{"class":71,"line":72},[69,124027,124021],{},[29,124029,124030],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[37,124032,124033,124036],{},[40,124034,124035],{},"id_rsa （私钥）；",[40,124037,124038],{},"id_rsa.pub (公钥)。",[29,124040,124041],{},[195,124042,124043],{},"2.公钥上传",[29,124045,124046],{},"上传指令如下：",[59,124048,124050],{"className":122037,"code":124049,"language":122039,"meta":122040,"style":64},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[66,124051,124052],{"__ignoreMap":64},[69,124053,124054],{"class":71,"line":72},[69,124055,124049],{},[29,124057,124058],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[29,124060,124061],{},"以后再远程登录就无需录入密码了。",[19,124063,124065],{"id":124064},"_723-使用vscode优化","7.2.3 使用VScode优化",[29,124067,124068],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[29,124070,124071],{},[195,124072,124073],{},"1.准备工作",[29,124075,124076],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[29,124078,124079],{},[195,124080,124081],{},"2.为VScode安装远程开发插件",[29,124083,124084,124085,124088,124089,124092,124093,29621],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[66,124086,124087],{},"扩展：商店","的搜索栏输入",[66,124090,124091],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[66,124094,124095],{},"安装",[29,124097,124098],{},[24,124099],{"alt":64,"src":124100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[29,124102,124103],{},[195,124104,124105],{},"3.配置远程连接",[29,124107,124108,124109,124112,124113,124116],{},"步骤1：使用快捷键",[66,124110,124111],{},"ctrl + shift + p","打开命令输入窗口，并输入",[66,124114,124115],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[29,124118,124119],{},[24,124120],{"alt":64,"src":124121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[29,124123,124124,124125,29621],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[66,124126,124127],{},"Add New SSH Host",[29,124129,124130],{},[24,124131],{"alt":64,"src":124132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[29,124134,124135,124136,124139,124140,124143,124144,124147],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[66,124137,124138],{},"ssh +X ubuntu@192.168.43.164","，其中，",[66,124141,124142],{},"ubuntu","需要替换为你的登录用户名，",[66,124145,124146],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[29,124149,124150],{},[24,124151],{"alt":64,"src":124152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[29,124154,124155],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[29,124157,124158],{},[24,124159],{"alt":64,"src":124160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[29,124162,124163],{},[24,124164],{"alt":64,"src":124165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[29,124167,124168],{},[195,124169,124170],{},"4.使用",[29,124172,124173,124174,124112,124176,124178],{},"步骤1：继续使用快捷键",[66,124175,124111],{},[66,124177,124115],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[29,124180,124181],{},[24,124182],{"alt":64,"src":124183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[29,124185,124186,124187,124190],{},"或者，也可以点击侧边栏的",[66,124188,124189],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[29,124192,124193],{},[24,124194],{"alt":64,"src":124195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[29,124197,124198,124199,124202,124203,124206],{},"步骤2：选择菜单栏的",[66,124200,124201],{},"文件","下的",[66,124204,124205],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[29,124208,124209],{},[24,124210],{"alt":64,"src":124211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[29,124213,124214],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124216,124218],{"id":124217},"_73-远程桌面","7.3 远程桌面",[29,124220,124221],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[29,124223,124224],{},"我们选择使用VNC来看。",[37,124226,124227],{},[40,124228,124229],{},"安装VNC服务器：",[29,124231,124232],{},"这里以TigerVNC为例进行安装：",[59,124234,124236],{"className":118517,"code":124235,"language":118519,"meta":64,"style":64},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[66,124237,124238],{"__ignoreMap":64},[69,124239,124240,124242,124244,124246,124249],{"class":71,"line":72},[69,124241,25813],{"class":109},[69,124243,118538],{"class":1022},[69,124245,25071],{"class":1022},[69,124247,124248],{"class":1022}," tigervnc-standalone-server",[69,124250,124251],{"class":1022}," tigervnc-common\n",[37,124253,124254],{"start":79},[40,124255,124256],{},"设置VNC密码：",[29,124258,124259],{},"为VNC用户设置密码，运行以下命令：",[59,124261,124263],{"className":118517,"code":124262,"language":118519,"meta":64,"style":64},"vncpasswd\n",[66,124264,124265],{"__ignoreMap":64},[69,124266,124267],{"class":71,"line":72},[69,124268,124262],{"class":109},[37,124270,124271],{"start":106},[40,124272,124273],{},"配置VNC启动脚本:",[29,124275,124276],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[59,124278,124280],{"className":118517,"code":124279,"language":118519,"meta":64,"style":64},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[66,124281,124282,124291],{"__ignoreMap":64},[69,124283,124284,124286,124288],{"class":71,"line":72},[69,124285,102487],{"class":109},[69,124287,30452],{"class":90},[69,124289,124290],{"class":1022}," ~\u002F.vnc\n",[69,124292,124293,124296],{"class":71,"line":79},[69,124294,124295],{"class":109},"nano",[69,124297,124298],{"class":1022}," ~\u002F.vnc\u002Fxstartup\n",[29,124300,124301],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[59,124303,124305],{"className":118517,"code":124304,"language":118519,"meta":64,"style":64},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[66,124306,124307,124312,124320,124327],{"__ignoreMap":64},[69,124308,124309],{"class":71,"line":72},[69,124310,124311],{"class":75},"#!\u002Fbin\u002Fsh\n",[69,124313,124314,124317],{"class":71,"line":79},[69,124315,124316],{"class":90},"unset",[69,124318,124319],{"class":1022}," SESSION_MANAGER\n",[69,124321,124322,124324],{"class":71,"line":106},[69,124323,124316],{"class":90},[69,124325,124326],{"class":1022}," DBUS_SESSION_BUS_ADDRESS\n",[69,124328,124329],{"class":71,"line":116},[69,124330,124331],{"class":109},"gnome-session\n",[29,124333,124334],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[37,124336,124337],{"start":116},[40,124338,124339],{},"给予执行权限：",[29,124341,124342],{},"为xstartup文件设置执行权限：",[59,124344,124346],{"className":118517,"code":124345,"language":118519,"meta":64,"style":64},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[66,124347,124348],{"__ignoreMap":64},[69,124349,124350,124352,124355],{"class":71,"line":72},[69,124351,25848],{"class":109},[69,124353,124354],{"class":1022}," +x",[69,124356,124298],{"class":1022},[37,124358,124359],{"start":133},[40,124360,124361],{},"启动VNC服务器：",[59,124363,124365],{"className":118517,"code":124364,"language":118519,"meta":64,"style":64},"vncserver -geometry 1920x1080 -localhost=0\n",[66,124366,124367],{"__ignoreMap":64},[69,124368,124369,124372,124375,124378],{"class":71,"line":72},[69,124370,124371],{"class":109},"vncserver",[69,124373,124374],{"class":90}," -geometry",[69,124376,124377],{"class":1022}," 1920x1080",[69,124379,124380],{"class":90}," -localhost=0\n",[29,124382,124383],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[29,124385,124386],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[37,124388,124389],{"start":139},[40,124390,124391],{},"查看已开启的VNC服务器：",[59,124393,124395],{"className":118517,"code":124394,"language":118519,"meta":64,"style":64},"vncserver -list\n",[66,124396,124397],{"__ignoreMap":64},[69,124398,124399,124401],{"class":71,"line":72},[69,124400,124371],{"class":109},[69,124402,124403],{"class":90}," -list\n",[29,124405,124406],{},[24,124407],{"alt":64,"src":124408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[37,124410,124411],{"start":401},[40,124412,124413],{},"连接到VNC服务器：",[29,124415,124416],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[37,124418,124419],{"start":470},[40,124420,124421],{},"停止VNC服务器：",[29,124423,124424],{},"如果需要停止VNC服务器，可以使用以下命令：",[59,124426,124428],{"className":118517,"code":124427,"language":118519,"meta":64,"style":64},"vncserver -kill :1\n",[66,124429,124430],{"__ignoreMap":64},[69,124431,124432,124434,124437],{"class":71,"line":72},[69,124433,124371],{"class":109},[69,124435,124436],{"class":90}," -kill",[69,124438,124439],{"class":1022}," :1\n",[29,124441,124442],{},"将:1替换为你实际使用的显示编号。",[29,124444,124445],{},[24,124446],{"alt":64,"src":124447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[29,124449,124450],{},[24,124451],{"alt":64,"src":124452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124454,124456],{"id":124455},"_74-usb端口设置","7.4 USB端口设置",[29,124458,124459],{},[195,124460,124461],{},"首先先配置好权限",[59,124463,124465],{"className":118517,"code":124464,"language":118519,"meta":64,"style":64},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[66,124466,124467,124472,124485,124492,124497],{"__ignoreMap":64},[69,124468,124469],{"class":71,"line":72},[69,124470,124471],{"class":75},"# 将用户权限提高\n",[69,124473,124474,124476,124478,124480,124483],{"class":71,"line":79},[69,124475,25813],{"class":109},[69,124477,27810],{"class":1022},[69,124479,27813],{"class":90},[69,124481,124482],{"class":1022}," dialout",[69,124484,27818],{"class":86},[69,124486,124487,124489],{"class":71,"line":106},[69,124488,27837],{"class":109},[69,124490,124491],{"class":1022}," dialout\n",[69,124493,124494],{"class":71,"line":116},[69,124495,124496],{"class":75},"# 查看下面命令是否输出dialout（若输出才正常）\n",[69,124498,124499],{"class":71,"line":133},[69,124500,124501],{"class":109},"groups\n",[29,124503,124504],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[19,124506,124508],{"id":124507},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[29,124510,124511,124514],{},[195,124512,124513],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[29,124516,124517,124520],{},[195,124518,124519],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[29,124522,124523],{},[195,124524,124525],{},"流程如下：",[29,124527,124528],{},"（1）.查找设备idVendor和idProduct",[29,124530,124531,124532,124535],{},"接入两个USB设备，在终端调用指令",[66,124533,124534],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[29,124537,124538],{},[24,124539],{"alt":64,"src":124540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[29,124542,124543,124544,124547],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[66,124545,124546],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[29,124549,124550],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[29,124552,124553],{},"（2）.编写映射规则",[29,124555,124556,124557,124560],{},"在",[66,124558,124559],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[59,124562,124564],{"className":118517,"code":124563,"language":118519,"meta":64,"style":64},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[66,124565,124566],{"__ignoreMap":64},[69,124567,124568,124570,124572],{"class":71,"line":72},[69,124569,25813],{"class":109},[69,124571,119804],{"class":1022},[69,124573,124574],{"class":1022}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[29,124576,124577],{},"输入如下内容：",[59,124579,124581],{"className":118517,"code":124580,"language":118519,"meta":64,"style":64},"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",[66,124582,124583,124613],{"__ignoreMap":64},[69,124584,124585,124588,124590,124593,124596,124599,124602,124604,124607,124610],{"class":71,"line":72},[69,124586,124587],{"class":86},"KERNEL",[69,124589,1019],{"class":82},[69,124591,124592],{"class":1022},"=\"ttyUSB*\",",[69,124594,124595],{"class":109}," ATTRS",[69,124597,124598],{"class":1022},"{idVendor}==",[69,124600,124601],{"class":109},"\"10c4\"",[69,124603,1767],{"class":109},[69,124605,124606],{"class":1022}," ATTRS{idProduct}==\"ea60\",",[69,124608,124609],{"class":1022}," MODE:=\"0777\",",[69,124611,124612],{"class":1022}," SYMLINK+=\"mylidar\"\n",[69,124614,124615,124617,124619,124621,124623,124625,124628,124630,124633,124635],{"class":71,"line":79},[69,124616,124587],{"class":86},[69,124618,1019],{"class":82},[69,124620,124592],{"class":1022},[69,124622,124595],{"class":109},[69,124624,124598],{"class":1022},[69,124626,124627],{"class":109},"\"1a86\"",[69,124629,1767],{"class":109},[69,124631,124632],{"class":1022}," ATTRS{idProduct}==\"7523\",",[69,124634,124609],{"class":1022},[69,124636,124637],{"class":1022}," SYMLINK+=\"mycar\"\n",[29,124639,124640],{},"代码解释：",[162,124642,124643,124646,124649,124652],{},[40,124644,124645],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[40,124647,124648],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[40,124650,124651],{},"SYMLINK是符号连接，即绑定的别名；",[40,124653,124654],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[29,124656,124657,124658,124661,124664],{},"***小提示：***",[531,124659,124660],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[66,124662,124663],{},"\u002Fetc\u002Fudev\u002Frule.d",[531,124665,124666],{},"目录即可。",[29,124668,124669],{},"表格 还在加载中，请等待加载完成后再尝试复制",[29,124671,124672],{},"（3）.使规则生效",[29,124674,124675],{},"在终端下输入如下指令：",[59,124677,124679],{"className":118517,"code":124678,"language":118519,"meta":64,"style":64},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[66,124680,124681,124686,124698,124709,124713,124718,124731],{"__ignoreMap":64},[69,124682,124683],{"class":71,"line":72},[69,124684,124685],{"class":75},"# Ubuntu用下方命令\n",[69,124687,124688,124690,124692,124695],{"class":71,"line":79},[69,124689,25813],{"class":109},[69,124691,121269],{"class":1022},[69,124693,124694],{"class":1022}," udev",[69,124696,124697],{"class":1022}," reload\n",[69,124699,124700,124702,124704,124706],{"class":71,"line":106},[69,124701,25813],{"class":109},[69,124703,121269],{"class":1022},[69,124705,124694],{"class":1022},[69,124707,124708],{"class":1022}," restart\n",[69,124710,124711],{"class":71,"line":116},[69,124712,3644],{"emptyLinePlaceholder":1325},[69,124714,124715],{"class":71,"line":133},[69,124716,124717],{"class":75},"#Fedora用下方命令\n",[69,124719,124720,124722,124725,124728],{"class":71,"line":139},[69,124721,25813],{"class":109},[69,124723,124724],{"class":1022}," udevadm",[69,124726,124727],{"class":1022}," control",[69,124729,124730],{"class":90}," --reload\n",[69,124732,124733,124735,124737],{"class":71,"line":401},[69,124734,25813],{"class":109},[69,124736,124724],{"class":1022},[69,124738,124739],{"class":1022}," trigger\n",[29,124741,124742],{},"再重新插拔设备即可。",[29,124744,124745],{},"（4）.测试",[29,124747,124748],{},"终端下输入如下指令",[59,124750,124752],{"className":118517,"code":124751,"language":118519,"meta":64,"style":64},"ll \u002Fdev | grep ttyUSB\n",[66,124753,124754],{"__ignoreMap":64},[69,124755,124756,124759,124762,124764,124766],{"class":71,"line":72},[69,124757,124758],{"class":109},"ll",[69,124760,124761],{"class":1022}," \u002Fdev",[69,124763,26346],{"class":82},[69,124765,31472],{"class":109},[69,124767,124768],{"class":1022}," ttyUSB\n",[29,124770,124771],{},"运行结果如下：",[29,124773,124774],{},[24,124775],{"alt":64,"src":124776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[29,124778,124779,124780,124783],{},"也可以多次插拔USB设备，会发现设备端口",[66,124781,124782],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[29,124785,124786],{},[195,124787,119185],{},[29,124789,124790],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[19,124792,124794],{"id":124793},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[29,124796,124797,124799],{},[195,124798,124513],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[29,124801,124802,124804],{},[195,124803,124519],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[29,124806,124807],{},[195,124808,124525],{},[29,124810,124811],{},"（1）.查看所连接的主机USB接口的KERNELS",[29,124813,124814],{},"调用如下指令查看第一台雷达的USB信息：",[59,124816,124818],{"className":118517,"code":124817,"language":118519,"meta":64,"style":64},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[66,124819,124820,124840],{"__ignoreMap":64},[69,124821,124822,124825,124827,124830,124833,124835,124837],{"class":71,"line":72},[69,124823,124824],{"class":109},"udevadm",[69,124826,71046],{"class":1022},[69,124828,124829],{"class":90}," --attribute-walk",[69,124831,124832],{"class":90}," --name=\u002Fdev\u002FttyUSB0",[69,124834,26346],{"class":82},[69,124836,31472],{"class":109},[69,124838,124839],{"class":1022}," KERNELS\n",[69,124841,124842,124844,124846,124848,124851,124853,124855],{"class":71,"line":79},[69,124843,124824],{"class":109},[69,124845,71046],{"class":1022},[69,124847,124829],{"class":90},[69,124849,124850],{"class":90}," --name=\u002Fdev\u002FttyACM0",[69,124852,26346],{"class":82},[69,124854,31472],{"class":109},[69,124856,124839],{"class":1022},[29,124858,124859],{},[24,124860],{"alt":64,"src":124861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[29,124863,124864],{},"调用如下指令查看第二台雷达的USB信息：",[59,124866,124868],{"className":118517,"code":124867,"language":118519,"meta":64,"style":64},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[66,124869,124870],{"__ignoreMap":64},[69,124871,124872,124874,124876,124878,124881,124883,124885],{"class":71,"line":72},[69,124873,124824],{"class":109},[69,124875,71046],{"class":1022},[69,124877,124829],{"class":90},[69,124879,124880],{"class":90}," --name=\u002Fdev\u002FttyUSB1",[69,124882,26346],{"class":82},[69,124884,31472],{"class":109},[69,124886,124839],{"class":1022},[29,124888,124889,124890,124893,124894,124897,124898,124901],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[66,124891,124892],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[66,124895,124896],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[195,124899,124900],{},"唯一性标识","”。",[29,124903,124553],{},[29,124905,124556,124906,124908],{},[66,124907,124559],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[59,124910,124911],{"className":118517,"code":124563,"language":118519,"meta":64,"style":64},[66,124912,124913],{"__ignoreMap":64},[69,124914,124915,124917,124919],{"class":71,"line":72},[69,124916,25813],{"class":109},[69,124918,119804],{"class":1022},[69,124920,124574],{"class":1022},[59,124922,124924],{"className":118517,"code":124923,"language":118519,"meta":64,"style":64},"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",[66,124925,124926,124955],{"__ignoreMap":64},[69,124927,124928,124930,124932,124934,124937,124939,124942,124945,124947,124950,124952],{"class":71,"line":72},[69,124929,124587],{"class":86},[69,124931,1019],{"class":82},[69,124933,124592],{"class":1022},[69,124935,124936],{"class":86}," KERNELS",[69,124938,1019],{"class":82},[69,124940,124941],{"class":1022},"=\"1-1.3:1.0\",",[69,124943,124944],{"class":109}," MODE:",[69,124946,1019],{"class":1022},[69,124948,124949],{"class":109},"\"0777\"",[69,124951,1767],{"class":109},[69,124953,124954],{"class":1022}," SYMLINK+=\"rplidar_front\"\n",[69,124956,124957,124959,124961,124963,124965,124967,124970,124972,124974,124976,124978],{"class":71,"line":79},[69,124958,124587],{"class":86},[69,124960,1019],{"class":82},[69,124962,124592],{"class":1022},[69,124964,124936],{"class":86},[69,124966,1019],{"class":82},[69,124968,124969],{"class":1022},"=\"1-1.4:1.0\",",[69,124971,124944],{"class":109},[69,124973,1019],{"class":1022},[69,124975,124949],{"class":109},[69,124977,1767],{"class":109},[69,124979,124980],{"class":1022}," SYMLINK+=\"rplidar_back\"\n",[29,124982,124672],{},[29,124984,124675],{},[59,124986,124987],{"className":118517,"code":124678,"language":118519,"meta":64,"style":64},[66,124988,124989,124993,125003,125013,125017,125021,125031],{"__ignoreMap":64},[69,124990,124991],{"class":71,"line":72},[69,124992,124685],{"class":75},[69,124994,124995,124997,124999,125001],{"class":71,"line":79},[69,124996,25813],{"class":109},[69,124998,121269],{"class":1022},[69,125000,124694],{"class":1022},[69,125002,124697],{"class":1022},[69,125004,125005,125007,125009,125011],{"class":71,"line":106},[69,125006,25813],{"class":109},[69,125008,121269],{"class":1022},[69,125010,124694],{"class":1022},[69,125012,124708],{"class":1022},[69,125014,125015],{"class":71,"line":116},[69,125016,3644],{"emptyLinePlaceholder":1325},[69,125018,125019],{"class":71,"line":133},[69,125020,124717],{"class":75},[69,125022,125023,125025,125027,125029],{"class":71,"line":139},[69,125024,25813],{"class":109},[69,125026,124724],{"class":1022},[69,125028,124727],{"class":1022},[69,125030,124730],{"class":90},[69,125032,125033,125035,125037],{"class":71,"line":401},[69,125034,25813],{"class":109},[69,125036,124724],{"class":1022},[69,125038,124739],{"class":1022},[29,125040,124742],{},[29,125042,124745],{},[29,125044,124748,125045,125048],{},[66,125046,125047],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[29,125050,125051],{},[24,125052],{"alt":64,"src":125053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[29,125055,125056],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[29,125058,125059,125061],{},[195,125060,119185],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[19,125063,125065],{"id":125064},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[29,125067,125068],{},"（1）.查看所连接的主机USB接口的信息",[59,125070,125072],{"className":118517,"code":125071,"language":118519,"meta":64,"style":64},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[66,125073,125074,125104],{"__ignoreMap":64},[69,125075,125076,125078,125080,125083,125085,125087,125089,125091,125094,125097,125099,125102],{"class":71,"line":72},[69,125077,124824],{"class":109},[69,125079,71046],{"class":1022},[69,125081,125082],{"class":90}," -a",[69,125084,30452],{"class":90},[69,125086,29658],{"class":86},[69,125088,124824],{"class":109},[69,125090,71046],{"class":1022},[69,125092,125093],{"class":90}," -q",[69,125095,125096],{"class":1022}," path",[69,125098,26352],{"class":90},[69,125100,125101],{"class":1022}," \u002Fdev\u002FttyACM0",[69,125103,1404],{"class":86},[69,125105,125106,125108,125110,125112,125114,125116,125118,125120,125122,125124,125126,125129],{"class":71,"line":79},[69,125107,124824],{"class":109},[69,125109,71046],{"class":1022},[69,125111,125082],{"class":90},[69,125113,30452],{"class":90},[69,125115,29658],{"class":86},[69,125117,124824],{"class":109},[69,125119,71046],{"class":1022},[69,125121,125093],{"class":90},[69,125123,125096],{"class":1022},[69,125125,26352],{"class":90},[69,125127,125128],{"class":1022}," \u002Fdev\u002FttyUSB0",[69,125130,1404],{"class":86},[29,125132,125133],{},[24,125134],{"alt":64,"src":125135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[29,125137,125138],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[29,125140,124553],{},[29,125142,124556,125143,124908],{},[66,125144,124559],{},[59,125146,125147],{"className":118517,"code":124563,"language":118519,"meta":64,"style":64},[66,125148,125149],{"__ignoreMap":64},[69,125150,125151,125153,125155],{"class":71,"line":72},[69,125152,25813],{"class":109},[69,125154,119804],{"class":1022},[69,125156,124574],{"class":1022},[59,125158,125160],{"className":118517,"code":125159,"language":118519,"meta":64,"style":64},"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",[66,125161,125162,125190,125216],{"__ignoreMap":64},[69,125163,125164,125166,125168,125171,125173,125175,125177,125179,125182,125185,125187],{"class":71,"line":72},[69,125165,124587],{"class":86},[69,125167,1019],{"class":82},[69,125169,125170],{"class":1022},"=\"ttyACM*\",",[69,125172,124595],{"class":109},[69,125174,124598],{"class":1022},[69,125176,124627],{"class":109},[69,125178,1767],{"class":109},[69,125180,125181],{"class":1022}," ATTRS{idProduct}==\"55d4\",",[69,125183,125184],{"class":1022}," ATTRS{serial}==\"0001\",",[69,125186,124609],{"class":1022},[69,125188,125189],{"class":1022}," SYMLINK+=\"ttyACM_MCU\"\n",[69,125191,125192,125194,125196,125198,125200,125202,125204,125206,125208,125211,125213],{"class":71,"line":79},[69,125193,124587],{"class":86},[69,125195,1019],{"class":82},[69,125197,125170],{"class":1022},[69,125199,124595],{"class":109},[69,125201,124598],{"class":1022},[69,125203,124627],{"class":109},[69,125205,1767],{"class":109},[69,125207,125181],{"class":1022},[69,125209,125210],{"class":1022}," ATTRS{serial}==\"0002\",",[69,125212,124609],{"class":1022},[69,125214,125215],{"class":1022}," SYMLINK+=\"ttyACM_Lidar\"\n",[69,125217,125218,125220,125222,125224,125226,125228,125230,125232,125234,125236],{"class":71,"line":106},[69,125219,124587],{"class":86},[69,125221,1019],{"class":82},[69,125223,124592],{"class":1022},[69,125225,124595],{"class":109},[69,125227,124598],{"class":1022},[69,125229,124627],{"class":109},[69,125231,1767],{"class":109},[69,125233,124632],{"class":1022},[69,125235,124609],{"class":1022},[69,125237,125238],{"class":1022}," SYMLINK+=\"ttyUSB_IMU\"\n",[29,125240,124672],{},[29,125242,124675],{},[59,125244,125245],{"className":118517,"code":124678,"language":118519,"meta":64,"style":64},[66,125246,125247,125251,125261,125271,125275,125279,125289],{"__ignoreMap":64},[69,125248,125249],{"class":71,"line":72},[69,125250,124685],{"class":75},[69,125252,125253,125255,125257,125259],{"class":71,"line":79},[69,125254,25813],{"class":109},[69,125256,121269],{"class":1022},[69,125258,124694],{"class":1022},[69,125260,124697],{"class":1022},[69,125262,125263,125265,125267,125269],{"class":71,"line":106},[69,125264,25813],{"class":109},[69,125266,121269],{"class":1022},[69,125268,124694],{"class":1022},[69,125270,124708],{"class":1022},[69,125272,125273],{"class":71,"line":116},[69,125274,3644],{"emptyLinePlaceholder":1325},[69,125276,125277],{"class":71,"line":133},[69,125278,124717],{"class":75},[69,125280,125281,125283,125285,125287],{"class":71,"line":139},[69,125282,25813],{"class":109},[69,125284,124724],{"class":1022},[69,125286,124727],{"class":1022},[69,125288,124730],{"class":90},[69,125290,125291,125293,125295],{"class":71,"line":401},[69,125292,25813],{"class":109},[69,125294,124724],{"class":1022},[69,125296,124739],{"class":1022},[29,125298,125299,125300],{},"再重新插拔设备即可，或者 ",[195,125301,125302],{},"直接重启系统。",[29,125304,124745],{},[29,125306,124748,125307,125048],{},[66,125308,125047],{},[29,125310,125311],{},[24,125312],{"alt":64,"src":125313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[29,125315,125056],{},[29,125317,125318,125320],{},[195,125319,119185],{}," 一些设备可能没有串口号等。",[19,125322,125324],{"id":125323},"_744-其他注意事项","7.4.4 其他注意事项",[29,125326,125327,125328,125330,125331,125334,125335,19649,125338,125341,125342,125344],{},"并非所有的USB设备端口号都是",[66,125329,124782],{},"的格式，比如Arduino的端口号可能是",[66,125332,125333],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[66,125336,125337],{},"videon",[66,125339,125340],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[66,125343,125337],{},"端口，绑定时需要关联的也是该接口。",[29,125346,125347,125348,125351,125352,125355,125356,125358,125359,125362,125363,125366,125367,125370,125371,125370,125374,125370,125377,29621],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[66,125349,125350],{},"KERNEL==\"ttyUSB*\"","修改为",[66,125353,125354],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[66,125357,125350],{},"修改为类似于",[66,125360,125361],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[66,125364,125365],{},"video[0,2,4,6]","表示可以绑定的端口为",[66,125368,125369],{},"video0","或",[66,125372,125373],{},"video2",[66,125375,125376],{},"video4",[66,125378,125379],{},"video6",[14,125381,125383],{"id":125382},"_75-挂载内网网页","7.5 挂载内网网页",[29,125385,125386],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[29,125388,125389],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[29,125391,125392],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[29,125394,125395,125396],{},"Termux 下载地址（F-Droid）：",[187,125397,125398],{"href":125398,"rel":125399},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[191],[29,125401,125402],{},"首先打开app后，先更新软件缓存：",[59,125404,125406],{"className":118517,"code":125405,"language":118519,"meta":64,"style":64},"pkg update\n",[66,125407,125408],{"__ignoreMap":64},[69,125409,125410,125413],{"class":71,"line":72},[69,125411,125412],{"class":109},"pkg",[69,125414,27478],{"class":1022},[29,125416,125417],{},"然后换源",[59,125419,125421],{"className":118517,"code":125420,"language":118519,"meta":64,"style":64},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[66,125422,125423],{"__ignoreMap":64},[69,125424,125425,125427,125430],{"class":71,"line":72},[69,125426,124295],{"class":109},[69,125428,125429],{"class":86}," $PREFIX",[69,125431,125432],{"class":1022},"\u002Fetc\u002Fapt\u002Fsources.list\n",[29,125434,125435],{},"将该文件内容替换为下面：",[59,125437,125439],{"className":118517,"code":125438,"language":118519,"meta":64,"style":64},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[66,125440,125441],{"__ignoreMap":64},[69,125442,125443,125446,125449,125452],{"class":71,"line":72},[69,125444,125445],{"class":109},"deb",[69,125447,125448],{"class":1022}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[69,125450,125451],{"class":1022}," stable",[69,125453,125454],{"class":1022}," main\n",[162,125456,125457,125484],{},[40,125458,125459,125460,125462,125463],{},"如果你使用的是",[66,125461,124295],{},"编辑器：",[162,125464,125465,125472,125478],{},[40,125466,125467,125468,125471],{},"按 ",[66,125469,125470],{},"Ctrl+O"," 保存文件。",[40,125473,125467,125474,125477],{},[66,125475,125476],{},"Enter"," 确认文件名。",[40,125479,125467,125480,125483],{},[66,125481,125482],{},"Ctrl+X"," 退出编辑器。",[40,125485,125459,125486,125462,125489],{},[66,125487,125488],{},"vim",[162,125490,125491,125497],{},[40,125492,125467,125493,125496],{},[66,125494,125495],{},"Esc"," 退出编辑模式。",[40,125498,125499,125500,125502],{},"输入 ",[66,125501,120442],{}," 保存并退出。",[29,125504,125505],{},"接下来重新更新软件源：",[59,125507,125509],{"className":118517,"code":125508,"language":118519,"meta":64,"style":64},"pkg update && pkg upgrade\n",[66,125510,125511],{"__ignoreMap":64},[69,125512,125513,125515,125517,125519,125521],{"class":71,"line":72},[69,125514,125412],{"class":109},[69,125516,118568],{"class":1022},[69,125518,27426],{"class":86},[69,125520,125412],{"class":109},[69,125522,118554],{"class":1022},[29,125524,125525],{},"安装python：",[59,125527,125529],{"className":118517,"code":125528,"language":118519,"meta":64,"style":64},"pkg install python\n",[66,125530,125531],{"__ignoreMap":64},[69,125532,125533,125535,125537],{"class":71,"line":72},[69,125534,125412],{"class":109},[69,125536,25071],{"class":1022},[69,125538,125539],{"class":1022}," python\n",[29,125541,125542,27709],{},[195,125543,125544],{},"通过Termux访问设备存储",[29,125546,125547],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[59,125549,125551],{"className":118517,"code":125550,"language":118519,"meta":64,"style":64},"termux-setup-storage\n",[66,125552,125553],{"__ignoreMap":64},[69,125554,125555],{"class":71,"line":72},[69,125556,125550],{"class":109},[37,125558,125559],{},[40,125560,125561,27709,125564],{},[195,125562,125563],{},"进入HTML文件所在的目录",[37,125565,125566],{},[40,125567,125568,125569,125571],{},"使用",[66,125570,102497],{},"命令进入HTML文件所在的目录：",[59,125573,125575],{"className":118517,"code":125574,"language":118519,"meta":64,"style":64},"cd ~\u002Fyour_html_folder\n",[66,125576,125577],{"__ignoreMap":64},[69,125578,125579,125581],{"class":71,"line":72},[69,125580,102497],{"class":90},[69,125582,125583],{"class":1022}," ~\u002Fyour_html_folder\n",[37,125585,125586],{"start":79},[40,125587,125588,27709,125591,125596,125613],{},[195,125589,125590],{},"启动Python HTTP服务器",[37,125592,125593],{},[40,125594,125595],{},"运行以下命令启动一个简单的HTTP服务器：",[59,125597,125599],{"className":118517,"code":125598,"language":118519,"meta":64,"style":64},"python -m http.server 8000\n",[66,125600,125601],{"__ignoreMap":64},[69,125602,125603,125605,125607,125610],{"class":71,"line":72},[69,125604,31616],{"class":109},[69,125606,102103],{"class":90},[69,125608,125609],{"class":1022}," http.server",[69,125611,125612],{"class":90}," 8000\n",[37,125614,125615],{"start":106},[40,125616,125617,125618,125621],{},"这会在端口",[66,125619,125620],{},"8000","上启动一个Web服务器。",[162,125623,125624],{},[40,125625,125626],{},"启动服务器后，Termux会显示日志信息，例如：",[59,125628,125630],{"className":122037,"code":125629,"language":122039,"meta":122040,"style":64},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[66,125631,125632],{"__ignoreMap":64},[69,125633,125634],{"class":71,"line":72},[69,125635,125629],{},[162,125637,125638],{},[40,125639,125640],{},"这表示服务器已成功启动。",[29,125642,125643],{},[195,125644,125645],{},"在浏览器中访问HTML文件",[37,125647,125648],{},[40,125649,125650,27709,125653,125658],{},[195,125651,125652],{},"在同一设备上访问",[37,125654,125655],{},[40,125656,125657],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[59,125659,125662],{"className":125660,"code":125661,"language":72885,"meta":64,"style":64},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[66,125663,125664],{"__ignoreMap":64},[69,125665,125666,125669],{"class":71,"line":72},[69,125667,125668],{"class":86},"http:",[69,125670,125671],{"class":75},"\u002F\u002Flocalhost:8000\n",[162,125673,125674],{},[40,125675,125676,125677,125680],{},"如果HTML文件中有",[66,125678,125679],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125682,125684],{"id":125683},"_76-linux重点知识","7.6 Linux重点知识",[19,125686,125688],{"id":125687},"_761-关于点的说明","7.6.1 关于点的说明",[29,125690,125691],{},[24,125692],{"alt":64,"src":125693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[29,125695,125696],{},"一点本目录，两点上目录",[19,125698,125700],{"id":125699},"_762-目录","7.6.2 目录",[23237,125702,125704],{"id":125703},"_7621-系统启动必须","7.6.2.1 系统启动必须",[29,125706,125707],{},[195,125708,125709],{},"\u002Fboot:",[29,125711,125712],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[29,125714,125715],{},[195,125716,125717],{},"\u002Fetc:",[29,125719,125720],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[29,125722,125723],{},[195,125724,125725],{},"\u002Flib：",[29,125727,125728],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[29,125730,125731],{},[195,125732,125733],{},"\u002Fsys:",[29,125735,125736],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23237,125738,125740],{"id":125739},"_7622-指令集合","7.6.2.2 指令集合",[29,125742,125743],{},[195,125744,125745],{},"\u002Fbin:",[29,125747,125748],{},"为二进制文件的缩写，存放最经常使用的命令",[29,125750,125751],{},[195,125752,125753],{},"\u002Fsbin:",[29,125755,125756],{},"只有系统管理员才能使用的程序和指令",[23237,125758,125760],{"id":125759},"_7623-外部文件管理","7.6.2.3 外部文件管理",[29,125762,125763],{},[195,125764,125765],{},"\u002Fdev:",[29,125767,125768],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[29,125770,125771],{},[195,125772,125773],{},"\u002Fmedia:",[29,125775,125776],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[29,125778,125779],{},[195,125780,125781],{},"\u002Fmnt:",[29,125783,125784],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23237,125786,125788],{"id":125787},"_7624-临时文件","7.6.2.4 临时文件",[29,125790,125791],{},[195,125792,125793],{},"\u002Frun:",[29,125795,125796],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[29,125798,125799],{},[195,125800,125801],{},"\u002Flost+found:",[29,125803,125804],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[29,125806,125807],{},[195,125808,125809],{},"\u002Ftmp:",[29,125811,125812],{},"这个目录是用来存放一些临时文件的",[23237,125814,125816],{"id":125815},"_7625-账户","7.6.2.5 账户",[29,125818,125819],{},[195,125820,125821],{},"\u002Froot：",[29,125823,125824],{},"系统管理员的用户主目录",[29,125826,125827,27709],{},[195,125828,125829],{},"\u002Fhome",[29,125831,125832],{},"用户的主目录，以用户的账号命名的",[29,125834,125835,27709],{},[195,125836,125837],{},"\u002Fusr",[29,125839,125840],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[29,125842,125843],{},[195,125844,125845],{},"\u002Fusr\u002Fbin：",[29,125847,125848],{},"系统用户使用的应用程序与指令",[29,125850,125851],{},[195,125852,125853],{},"\u002Fusr\u002Fsbin：",[29,125855,125856],{},"超级用户使用的比较高级的管理程序和系统守护程序",[29,125858,125859],{},[195,125860,125861],{},"\u002Fusr\u002Fsrc：",[29,125863,125864],{},"内核源代码默认的放置目录",[23237,125866,125868],{"id":125867},"_7626-运行过程要用","7.6.2.6 运行过程要用",[29,125870,125871],{},[195,125872,125873],{},"\u002Fvar：",[29,125875,125876],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[29,125878,125879],{},[195,125880,125881],{},"\u002Fproc:",[29,125883,125884,125885,125888],{},"管理 ",[195,125886,125887],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23237,125890,125892],{"id":125891},"_7627-扩展用的","7.6.2.7 扩展用的",[29,125894,125895],{},[195,125896,125897],{},"\u002Fopt:",[29,125899,125900],{},"默认是空的，我们安装额外软件可以放在这个里面",[29,125902,125903],{},[195,125904,125905],{},"\u002Fsrv:",[29,125907,125908],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[19,125910,125912],{"id":125911},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[29,125914,125915],{},[24,125916],{"alt":64,"src":125917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[29,125919,125920],{},"windows-->linux:",[29,125922,125923],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[29,125925,125926],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[29,125928,125929],{},"linux传输文件到windows",[29,125931,125932],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[19,125934,125936],{"id":125935},"_764-易忘知识","7.6.4 易忘知识",[29,125938,125939],{},"操作系统内核查看",[59,125941,125942],{"className":118517,"code":122511,"language":118519,"meta":64,"style":64},[66,125943,125944],{"__ignoreMap":64},[69,125945,125946,125948],{"class":71,"line":72},[69,125947,71429],{"class":109},[69,125949,122520],{"class":90},[29,125951,125952],{},[24,125953],{"alt":64,"src":125954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[29,125956,125957],{},[24,125958],{"alt":64,"src":125959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[59,125961,125963],{"className":118517,"code":125962,"language":118519,"meta":64,"style":64},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[66,125964,125965,125977],{"__ignoreMap":64},[69,125966,125967,125969,125972,125975],{"class":71,"line":72},[69,125968,122728],{"class":109},[69,125970,125971],{"class":1022}," mvtest",[69,125973,125974],{"class":1022}," mvtest2",[69,125976,3918],{"class":86},[69,125978,125979],{"class":71,"line":79},[69,125980,125981],{"class":109},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[29,125983,125984],{},[24,125985],{"alt":64,"src":125986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[29,125988,125989],{},[24,125990],{"alt":64,"src":125991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[29,125993,125994,125995,125998],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[66,125996,125997],{},"du -a"," 可以快速查看磁盘使用细节。",[19,126000,126002],{"id":126001},"_765-vim","7.6.5 Vim",[29,126004,126005],{},[24,126006],{"alt":64,"src":126007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[29,126009,126010],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[29,126012,126013],{},"一开始进去为命令模式，此时点击输入的字母为命令",[29,126015,126016],{},[195,126017,126018],{},"1.命令模式：",[29,126020,126021],{},"i 切换到输入模式，在光标当前位置开始输入文本",[29,126023,126024],{},"x 删除当前光标所在处的字符",[29,126026,126027],{},"：切换到底线命令模式，以在最底一行输入命令",[29,126029,126030],{},"a 进行插入模式，在光标下一个位置输入文本",[29,126032,126033],{},"o 在当前的下方插入一个新行，并进入插入模式",[29,126035,126036],{},"0 在当前行的上方插入一个新行，并进入插入模式",[29,126038,126039],{},"dd 剪切当前行",[29,126041,126042],{},"yy 复制当前行",[29,126044,126045],{},"p 粘贴剪贴板内容到光标下方",[29,126047,126048],{},"P 粘贴剪贴板内容到光标上方",[29,126050,126051],{},"u 撤销上一次操作",[29,126053,126054],{},"ctrl+r 重做上一次操作",[29,126056,126057,126059],{},[2182,126058],{}," 保存文件",[29,126061,126062,126064],{},[2032,126063],{}," 退出Vim编辑器",[29,126066,126067,126069],{},[2032,126068],{},"! 强制退出Vim编辑器，不保存修改",[29,126071,126072],{},[195,126073,126074],{},"2.输入模式：",[29,126076,126077],{},[24,126078],{"alt":64,"src":126079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[29,126081,126082],{},[195,126083,126084],{},"3.底线命令模式：",[29,126086,126087],{},[24,126088],{"alt":64,"src":126089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[29,126091,126092],{},"按下esc可以退出底线命令模式",[19,126094,126096],{"id":126095},"_766-apt","7.6.6 apt",[29,126098,126099],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[19,126101,126103],{"id":126102},"_767-home与root的区别","7.6.7 home与root的区别",[29,126105,126106],{},[24,126107],{"alt":64,"src":126108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[29,126110,126111],{},[24,126112],{"alt":64,"src":126113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[29,126115,126116],{},[24,126117],{"alt":64,"src":126118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[29,126120,126121],{},[24,126122],{"alt":64,"src":126123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[19,126125,126127],{"id":126126},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[29,126129,126130],{},[187,126131,126132],{"href":126132,"rel":126133},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[191],[37,126135,126136,126139],{},[40,126137,126138],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[40,126140,126141],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[29,126143,126144],{},[24,126145],{"alt":64,"src":126146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[29,126148,126149],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[29,126151,126152],{},[24,126153],{"alt":64,"src":126154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[59,126156,126158],{"className":122037,"code":126157,"language":122039,"meta":122040,"style":64},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[66,126159,126160,126165],{"__ignoreMap":64},[69,126161,126162],{"class":71,"line":72},[69,126163,126164],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[69,126166,126167],{"class":71,"line":79},[69,126168,126169],{},".\u002Fpycharm.sh\n",[29,126171,126172],{},"3️⃣创建.desktop文件",[29,126174,126175],{},[195,126176,126177],{},"原理：",[162,126179,126180,126190],{},[40,126181,126182,126183,126189],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[195,126184,126185,126188],{},[66,126186,126187],{},".desktop"," 文件"," 来识别应用。",[40,126191,126192,126194,126195],{},[66,126193,126187],{}," 文件相当于一个“应用注册表”，告诉系统：",[162,126196,126197,126200,126203,126206,126209],{},[40,126198,126199],{},"应用名字（Name）",[40,126201,126202],{},"图标（Icon）",[40,126204,126205],{},"执行命令（Exec）",[40,126207,126208],{},"分类（Categories）",[40,126210,126211],{},"是否需要终端（Terminal）",[59,126213,126215],{"className":122037,"code":126214,"language":122039,"meta":122040,"style":64},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[66,126216,126217,126222],{"__ignoreMap":64},[69,126218,126219],{"class":71,"line":72},[69,126220,126221],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[69,126223,126224],{"class":71,"line":79},[69,126225,126226],{},"nano pycharm.desktop\n",[29,126228,126229],{},"nano是一个命令行下的编辑器，也可以使用vim",[59,126231,126233],{"className":122037,"code":126232,"language":122039,"meta":122040,"style":64},"[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",[66,126234,126235,126240,126245,126250,126255,126260,126265,126270,126275,126280],{"__ignoreMap":64},[69,126236,126237],{"class":71,"line":72},[69,126238,126239],{},"[Desktop Entry]\n",[69,126241,126242],{"class":71,"line":79},[69,126243,126244],{},"Version=1.0\n",[69,126246,126247],{"class":71,"line":106},[69,126248,126249],{},"Type=Application\n",[69,126251,126252],{"class":71,"line":116},[69,126253,126254],{},"Name=PyCharm\n",[69,126256,126257],{"class":71,"line":133},[69,126258,126259],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[69,126261,126262],{"class":71,"line":139},[69,126263,126264],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[69,126266,126267],{"class":71,"line":401},[69,126268,126269],{},"Comment=JetBrains PyCharm IDE\n",[69,126271,126272],{"class":71,"line":470},[69,126273,126274],{},"Categories=Development;IDE;\n",[69,126276,126277],{"class":71,"line":475},[69,126278,126279],{},"Terminal=false\n",[69,126281,126282],{"class":71,"line":482},[69,126283,126284],{},"StartupWMClass=jetbrains-pycharm\n",[162,126286,126287,126293,126299,126305],{},[40,126288,126289,126292],{},[66,126290,126291],{},"Exec"," → 点击图标时执行的命令",[40,126294,126295,126298],{},[66,126296,126297],{},"Icon"," → 显示在菜单和桌面上的图标",[40,126300,126301,126304],{},[66,126302,126303],{},"Terminal=false"," → 不打开终端",[40,126306,126307,126310],{},[66,126308,126309],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126312,126313,126314],"blockquote",{},[29,126315,126316,126317,126319,126320],{},"可以理解成 ",[66,126318,126187],{}," 文件是 Linux 的 ",[195,126321,126322],{},"快捷方式配置文件",[29,126324,126325],{},"4️⃣设置可执行权限",[59,126327,126329],{"className":122037,"code":126328,"language":122039,"meta":122040,"style":64},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[66,126330,126331],{"__ignoreMap":64},[69,126332,126333],{"class":71,"line":72},[69,126334,126328],{},[29,126336,126337],{},"5️⃣桌面图标启动的话如下：",[59,126339,126341],{"className":122037,"code":126340,"language":122039,"meta":122040,"style":64},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[66,126342,126343,126348],{"__ignoreMap":64},[69,126344,126345],{"class":71,"line":72},[69,126346,126347],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[69,126349,126350],{"class":71,"line":79},[69,126351,126352],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[37,126354,126355],{"start":106},[40,126356,126357],{},"下载Appimage文件实现软件的安装",[29,126359,126360],{},"1️⃣先下载appimage",[29,126362,126363],{},[187,126364,126365],{"href":126365,"rel":126366},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[191],[29,126368,126369],{},[24,126370],{"alt":64,"src":126371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[29,126373,126374],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[29,126376,126377],{},[24,126378],{"alt":64,"src":126379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[29,126381,126382],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[29,126384,126385],{},[24,126386],{"alt":64,"src":126387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[29,126389,126390],{},[24,126391],{"alt":64,"src":126392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[29,126394,126395,126396,126399],{},"3️⃣给他们放在",[66,126397,126398],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[29,126401,126402],{},"4️⃣给软件执行权限",[59,126404,126406],{"className":122037,"code":126405,"language":122039,"meta":122040,"style":64},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[66,126407,126408,126413],{"__ignoreMap":64},[69,126409,126410],{"class":71,"line":72},[69,126411,126412],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[69,126414,126415],{"class":71,"line":79},[69,126416,126417],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[29,126419,126420],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[59,126422,126424],{"className":118517,"code":126423,"language":118519,"meta":64,"style":64},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[66,126425,126426,126433,126440,126446],{"__ignoreMap":64},[69,126427,126428,126430],{"class":71,"line":72},[69,126429,102497],{"class":90},[69,126431,126432],{"class":1022}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[69,126434,126435,126437],{"class":71,"line":79},[69,126436,102504],{"class":109},[69,126438,126439],{"class":1022}," .\u002Fqqmusic.desktop\n",[69,126441,126442,126444],{"class":71,"line":106},[69,126443,125488],{"class":109},[69,126445,126439],{"class":1022},[69,126447,126448,126450,126452,126454],{"class":71,"line":116},[69,126449,25813],{"class":109},[69,126451,25816],{"class":1022},[69,126453,124354],{"class":1022},[69,126455,126439],{"class":1022},[29,126457,126458,126460],{},[66,126459,102504],{},"：一个 Linux 命令，主要功能是：",[162,126462,126463,126466],{},[40,126464,126465],{},"如果文件不存在，就创建一个新的空文件",[40,126467,126468],{},"如果文件已存在，就更新该文件的最后修改时间",[59,126470,126472],{"className":122037,"code":126471,"language":122039,"meta":122040,"style":64},"[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",[66,126473,126474,126478,126483,126488,126493,126497,126502],{"__ignoreMap":64},[69,126475,126476],{"class":71,"line":72},[69,126477,126239],{},[69,126479,126480],{"class":71,"line":79},[69,126481,126482],{},"Name=QQ音乐\n",[69,126484,126485],{"class":71,"line":106},[69,126486,126487],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[69,126489,126490],{"class":71,"line":116},[69,126491,126492],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[69,126494,126495],{"class":71,"line":133},[69,126496,126249],{},[69,126498,126499],{"class":71,"line":139},[69,126500,126501],{},"Categories=Audio;Music;Player;\n",[69,126503,126504],{"class":71,"line":401},[69,126505,126506],{},"Comment=QQ Music Client for Linux\n",[29,126508,126509],{},"将文件复制进去",[29,126511,126512],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[29,126514,126515],{},[24,126516],{"alt":64,"src":126517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[29,126519,126520],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[29,126522,126523],{},[24,126524],{"alt":64,"src":126525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[29,126527,126528,126529,126532,126533,126536],{},"如果你用的不是KDE，那么也可以直接修改",[66,126530,126531],{},"qqmuic.desktop","：在exec的末尾加上",[66,126534,126535],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[59,126538,126540],{"className":122037,"code":126539,"language":122039,"meta":122040,"style":64},"[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",[66,126541,126542,126546,126550,126555,126559,126563,126567],{"__ignoreMap":64},[69,126543,126544],{"class":71,"line":72},[69,126545,126239],{},[69,126547,126548],{"class":71,"line":79},[69,126549,126482],{},[69,126551,126552],{"class":71,"line":106},[69,126553,126554],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[69,126556,126557],{"class":71,"line":116},[69,126558,126492],{},[69,126560,126561],{"class":71,"line":133},[69,126562,126249],{},[69,126564,126565],{"class":71,"line":139},[69,126566,126501],{},[69,126568,126569],{"class":71,"line":401},[69,126570,126506],{},[29,126572,126573],{},[24,126574],{"alt":64,"src":126575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[29,126577,126578],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[59,126580,126582],{"className":122037,"code":126581,"language":122039,"meta":122040,"style":64},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[66,126583,126584],{"__ignoreMap":64},[69,126585,126586],{"class":71,"line":72},[69,126587,126581],{},[37,126589,126590],{"start":116},[40,126591,126592],{},"去Flathub上安装软件",[29,126594,126595],{},[187,126596,126597],{"href":126597,"rel":126598},"https:\u002F\u002Fflathub.org\u002F",[191],[29,126600,126601],{},"1️⃣去上面的官网搜索软件+下载软件",[29,126603,126604],{},[24,126605],{"alt":64,"src":126606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[59,126608,126610],{"className":122037,"code":126609,"language":122039,"meta":122040,"style":64},"flatpak install flathub com.obsproject.Studio\n",[66,126611,126612],{"__ignoreMap":64},[69,126613,126614],{"class":71,"line":72},[69,126615,126609],{},[29,126617,126618],{},[24,126619],{"alt":64,"src":126620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[29,126622,126623],{},"2️⃣运行软件",[29,126625,126626],{},"a.官方方式：",[29,126628,126629],{},[24,126630],{"alt":64,"src":126631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[59,126633,126634],{"className":122037,"code":126609,"language":122039,"meta":122040,"style":64},[66,126635,126636],{"__ignoreMap":64},[69,126637,126638],{"class":71,"line":72},[69,126639,126609],{},[29,126641,126642],{},"b.当普通软件运行：",[29,126644,126645],{},[24,126646],{"alt":64,"src":126647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[29,126649,126650],{},[24,126651],{"alt":64,"src":126652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1297,126654,126655],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":64,"searchDepth":79,"depth":79,"links":126657},[126658,126659,126664,126665,126671,126672],{"id":123390,"depth":79,"text":123391},{"id":123732,"depth":79,"text":123733,"children":126660},[126661,126662,126663],{"id":123736,"depth":106,"text":123737},{"id":123803,"depth":106,"text":123804},{"id":124064,"depth":106,"text":124065},{"id":124217,"depth":79,"text":124218},{"id":124455,"depth":79,"text":124456,"children":126666},[126667,126668,126669,126670],{"id":124507,"depth":106,"text":124508},{"id":124793,"depth":106,"text":124794},{"id":125064,"depth":106,"text":125065},{"id":125323,"depth":106,"text":125324},{"id":125382,"depth":79,"text":125383},{"id":125683,"depth":79,"text":125684,"children":126673},[126674,126675,126676,126677,126678,126679,126680,126681],{"id":125687,"depth":106,"text":125688},{"id":125699,"depth":106,"text":125700},{"id":125911,"depth":106,"text":125912},{"id":125935,"depth":106,"text":125936},{"id":126001,"depth":106,"text":126002},{"id":126095,"depth":106,"text":126096},{"id":126102,"depth":106,"text":126103},{"id":126126,"depth":106,"text":126127},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123382,"description":1322},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126688,"title":126689,"body":126690,"description":1322,"extension":1323,"meta":126694,"navigation":1325,"path":126695,"seo":126696,"stem":126697,"__hash__":126698},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126691,"toc":126692},[],{"title":64,"searchDepth":79,"depth":79,"links":126693},[],{"category":31499},"\u002Fwiki\u002F2025-01-27-linux",{"title":126689,"description":1322},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126700,"title":126701,"body":126702,"description":126706,"extension":1323,"meta":127097,"navigation":1325,"path":127098,"seo":127099,"stem":127100,"__hash__":127101},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126703,"toc":127095},[126704,126707,126711,126728,126731,126784,126788,126790,126830,126839,126843,126846,127087,127092],[29,126705,126706],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126708,126710],{"id":126709},"_1ubuntu环境配置","1.Ubuntu环境配置",[37,126712,126713,126716,126719,126722,126725],{},[40,126714,126715],{},"ubuntu环境换源",[40,126717,126718],{},"安装cuda",[40,126720,126721],{},"安装miniconda",[40,126723,126724],{},"安装pytorch",[40,126726,126727],{},"安装genesis",[29,126729,126730],{},"参考链接：",[59,126732,126734],{"className":25059,"code":126733,"language":25061,"meta":64,"style":64},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[66,126735,126736],{"__ignoreMap":64},[69,126737,126738,126741,126744,126747,126749,126752,126755,126757,126760,126763,126765,126768,126771,126773,126776,126779,126781],{"class":71,"line":72},[69,126739,126740],{"class":109},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[69,126742,126743],{"class":1022},"=blogdetail",[69,126745,126746],{"class":86},"&sharetype",[69,126748,1019],{"class":82},[69,126750,126751],{"class":1022},"blogdetail",[69,126753,126754],{"class":86},"&sharerId",[69,126756,1019],{"class":82},[69,126758,126759],{"class":1022},"144728092",[69,126761,126762],{"class":86},"&sharerefer",[69,126764,1019],{"class":82},[69,126766,126767],{"class":1022},"PC",[69,126769,126770],{"class":86},"&sharesource",[69,126772,1019],{"class":82},[69,126774,126775],{"class":1022},"qq_69379513",[69,126777,126778],{"class":86},"&sharefrom",[69,126780,1019],{"class":82},[69,126782,126783],{"class":1022},"from_link\n",[10,126785,126787],{"id":126786},"_2genesis-报错issue","2.Genesis 报错issue",[29,126789,126730],{},[59,126791,126792],{"className":25059,"code":126733,"language":25061,"meta":64,"style":64},[66,126793,126794],{"__ignoreMap":64},[69,126795,126796,126798,126800,126802,126804,126806,126808,126810,126812,126814,126816,126818,126820,126822,126824,126826,126828],{"class":71,"line":72},[69,126797,126740],{"class":109},[69,126799,126743],{"class":1022},[69,126801,126746],{"class":86},[69,126803,1019],{"class":82},[69,126805,126751],{"class":1022},[69,126807,126754],{"class":86},[69,126809,1019],{"class":82},[69,126811,126759],{"class":1022},[69,126813,126762],{"class":86},[69,126815,1019],{"class":82},[69,126817,126767],{"class":1022},[69,126819,126770],{"class":86},[69,126821,1019],{"class":82},[69,126823,126775],{"class":1022},[69,126825,126778],{"class":86},[69,126827,1019],{"class":82},[69,126829,126783],{"class":1022},[59,126831,126833],{"className":25059,"code":126832,"language":25061,"meta":64,"style":64},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[66,126834,126835],{"__ignoreMap":64},[69,126836,126837],{"class":71,"line":72},[69,126838,126832],{"class":109},[10,126840,126842],{"id":126841},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[29,126844,126845],{},"hello_robot.py",[59,126847,126849],{"className":31614,"code":126848,"language":31616,"meta":64,"style":64},"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",[66,126850,126851,126857,126872,126876,126888,126900,126904,126917,126921,126940,126950,126960,126974,126978,126982,126987,126991,127001,127008,127022,127029,127039,127044,127048,127066,127071,127075,127082],{"__ignoreMap":64},[69,126852,126853,126855],{"class":71,"line":72},[69,126854,31628],{"class":82},[69,126856,46541],{"class":86},[69,126858,126859,126862,126865,126867,126869],{"class":71,"line":79},[69,126860,126861],{"class":86},"os.environ[",[69,126863,126864],{"class":1022},"'PYOPENGL_PLATFORM'",[69,126866,5687],{"class":86},[69,126868,1019],{"class":82},[69,126870,126871],{"class":1022}," 'glx'\n",[69,126873,126874],{"class":71,"line":106},[69,126875,3644],{"emptyLinePlaceholder":1325},[69,126877,126878,126880,126883,126885],{"class":71,"line":116},[69,126879,31628],{"class":82},[69,126881,126882],{"class":86}," genesis ",[69,126884,32619],{"class":82},[69,126886,126887],{"class":86}," gs\n",[69,126889,126890,126892,126895,126897],{"class":71,"line":133},[69,126891,31973],{"class":82},[69,126893,126894],{"class":86}," pynput ",[69,126896,31628],{"class":82},[69,126898,126899],{"class":86}," keyboard\n",[69,126901,126902],{"class":71,"line":139},[69,126903,3644],{"emptyLinePlaceholder":1325},[69,126905,126906,126909,126912,126914],{"class":71,"line":401},[69,126907,126908],{"class":86},"gs.init(",[69,126910,126911],{"class":6458},"backend",[69,126913,1019],{"class":82},[69,126915,126916],{"class":86},"gs.gpu)\n",[69,126918,126919],{"class":71,"line":470},[69,126920,3644],{"emptyLinePlaceholder":1325},[69,126922,126923,126926,126928,126931,126934,126936,126938],{"class":71,"line":475},[69,126924,126925],{"class":86},"scene ",[69,126927,1019],{"class":82},[69,126929,126930],{"class":86}," gs.Scene(",[69,126932,126933],{"class":6458},"show_viewer",[69,126935,1019],{"class":82},[69,126937,32712],{"class":90},[69,126939,1404],{"class":86},[69,126941,126942,126945,126947],{"class":71,"line":482},[69,126943,126944],{"class":86},"plane ",[69,126946,1019],{"class":82},[69,126948,126949],{"class":86}," scene.add_entity(gs.morphs.Plane())\n",[69,126951,126952,126955,126957],{"class":71,"line":497},[69,126953,126954],{"class":86},"franka ",[69,126956,1019],{"class":82},[69,126958,126959],{"class":86}," scene.add_entity(\n",[69,126961,126962,126965,126967,126969,126972],{"class":71,"line":502},[69,126963,126964],{"class":86},"    gs.morphs.MJCF(",[69,126966,46590],{"class":6458},[69,126968,1019],{"class":82},[69,126970,126971],{"class":1022},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[69,126973,39283],{"class":86},[69,126975,126976],{"class":71,"line":509},[69,126977,1404],{"class":86},[69,126979,126980],{"class":71,"line":524},[69,126981,3644],{"emptyLinePlaceholder":1325},[69,126983,126984],{"class":71,"line":2888},[69,126985,126986],{"class":86},"scene.build()\n",[69,126988,126989],{"class":71,"line":2893},[69,126990,3644],{"emptyLinePlaceholder":1325},[69,126992,126993,126995,126998],{"class":71,"line":2899},[69,126994,33183],{"class":82},[69,126996,126997],{"class":109}," on_press",[69,126999,127000],{"class":86},"(key):\n",[69,127002,127003,127006],{"class":71,"line":2919},[69,127004,127005],{"class":82},"    try",[69,127007,4983],{"class":86},[69,127009,127010,127012,127015,127017,127020],{"class":71,"line":2924},[69,127011,3741],{"class":82},[69,127013,127014],{"class":86}," key.char ",[69,127016,4193],{"class":82},[69,127018,127019],{"class":1022}," 'q'",[69,127021,4983],{"class":86},[69,127023,127024,127026],{"class":71,"line":2938},[69,127025,16971],{"class":82},[69,127027,127028],{"class":90}," False\n",[69,127030,127031,127034,127037],{"class":71,"line":2943},[69,127032,127033],{"class":82},"    except",[69,127035,127036],{"class":90}," AttributeError",[69,127038,4983],{"class":86},[69,127040,127041],{"class":71,"line":2972},[69,127042,127043],{"class":82},"        pass\n",[69,127045,127046],{"class":71,"line":2977},[69,127047,3644],{"emptyLinePlaceholder":1325},[69,127049,127050,127053,127055,127058,127061,127063],{"class":71,"line":2994},[69,127051,127052],{"class":86},"listener ",[69,127054,1019],{"class":82},[69,127056,127057],{"class":86}," keyboard.Listener(",[69,127059,127060],{"class":6458},"on_press",[69,127062,1019],{"class":82},[69,127064,127065],{"class":86},"on_press)\n",[69,127067,127068],{"class":71,"line":2999},[69,127069,127070],{"class":86},"listener.start()\n",[69,127072,127073],{"class":71,"line":3004},[69,127074,3644],{"emptyLinePlaceholder":1325},[69,127076,127077,127079],{"class":71,"line":3009},[69,127078,109884],{"class":82},[69,127080,127081],{"class":86}," listener.running:\n",[69,127083,127084],{"class":71,"line":3023},[69,127085,127086],{"class":86},"    scene.step()\n",[29,127088,127089],{},[24,127090],{"alt":64,"src":127091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1297,127093,127094],{},"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":64,"searchDepth":79,"depth":79,"links":127096},[],{"category":24617},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126701,"description":126706},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127103,"title":127104,"body":127105,"description":1322,"extension":1323,"meta":127120,"navigation":1325,"path":127121,"seo":127122,"stem":127123,"__hash__":127124},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127106,"toc":127117},[127107,127110,127114],[10,127108,127104],{"id":127109},"_1-基础知识",[14,127111,127113],{"id":127112},"_11-js的组成","1.1 js的组成",[29,127115,127116],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":64,"searchDepth":79,"depth":79,"links":127118},[127119],{"id":127112,"depth":79,"text":127113},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127104,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127126,"title":127127,"body":127128,"description":1322,"extension":1323,"meta":127267,"navigation":1325,"path":127268,"seo":127269,"stem":127270,"__hash__":127271},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127129,"toc":127255},[127130,127133,127137,127140,127144,127154,127158,127161,127164,127167,127171,127178,127184,127188,127194,127205,127209,127212,127216,127219,127223,127226,127230,127233,127237,127240,127243,127246,127249,127252],[10,127131,127127],{"id":127132},"_2-vscode必备内容",[14,127134,127136],{"id":127135},"_21-标签分类","2.1 标签分类",[29,127138,127139],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127141,127143],{"id":127142},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[29,127145,127146,127147,127149,127150,127153],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[66,127148,1618],{}," 然后按 ",[66,127151,127152],{},"Tab","，快速自动生成基本结构。",[14,127155,127157],{"id":127156},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[29,127159,127160],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[29,127162,127163],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[29,127165,127166],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127168,127170],{"id":127169},"_24-视图缩放","2.4 视图缩放",[29,127172,127173,127174,127177],{},"缩放视图 ",[66,127175,127176],{},"ctrl+"," 可实现代码增大。",[29,127179,127180,127183],{},[66,127181,127182],{},"ctrl-"," 可实现代码减小。",[14,127185,127187],{"id":127186},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[29,127189,127190,127191,29621],{},"VSCode 新建文件快捷键为 ",[66,127192,127193],{},"ctrl+N",[29,127195,127196,127197,127200,127201,127204],{},"保存快捷键为 ",[66,127198,127199],{},"ctrl+S","，将文本保存为 ",[66,127202,127203],{},".html"," 文件。",[14,127206,127208],{"id":127207},"_26-auto-rename-tag","2.6 Auto Rename Tag",[29,127210,127211],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127213,127215],{"id":127214},"_27-vscode-icons","2.7 vscode-icons",[29,127217,127218],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127220,127222],{"id":127221},"_28-easy-less","2.8 Easy LESS",[29,127224,127225],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127227,127229],{"id":127228},"_29-会了吧插件","2.9 会了吧插件",[29,127231,127232],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127234,127236],{"id":127235},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[29,127238,127239],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[29,127241,127242],{},"②选定多个相同的单词:ctrl+D",[29,127244,127245],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[29,127247,127248],{},"④全局替换某些单词:ctrl+h",[29,127250,127251],{},"⑤快速定位到某一行:ctrl+g",[29,127253,127254],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":64,"searchDepth":79,"depth":79,"links":127256},[127257,127258,127259,127260,127261,127262,127263,127264,127265,127266],{"id":127135,"depth":79,"text":127136},{"id":127142,"depth":79,"text":127143},{"id":127156,"depth":79,"text":127157},{"id":127169,"depth":79,"text":127170},{"id":127186,"depth":79,"text":127187},{"id":127207,"depth":79,"text":127208},{"id":127214,"depth":79,"text":127215},{"id":127221,"depth":79,"text":127222},{"id":127228,"depth":79,"text":127229},{"id":127235,"depth":79,"text":127236},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127127,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127273,"title":127274,"body":127275,"description":1322,"extension":1323,"meta":127434,"navigation":1325,"path":127435,"seo":127436,"stem":127437,"__hash__":127438},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127276,"toc":127426},[127277,127280,127284,127294,127300,127306,127310,127319,127323,127328,127331,127334,127338,127341,127351,127360,127369,127378,127388,127395,127400,127405,127418],[10,127278,127274],{"id":127279},"_3-html文本与容器标签",[14,127281,127283],{"id":127282},"_31-标题标签","3.1 标题标签",[29,127285,127286,127289,127290,127293],{},[66,127287,127288],{},"\u003Ch1>","我是一级标签",[66,127291,127292],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[29,127295,127296,127289,127298],{},[66,127297,127288],{},[66,127299,127292],{},[29,127301,124556,127302,127305],{},[66,127303,127304],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127307,127309],{"id":127308},"_32-段落标签","3.2 段落标签",[29,127311,127312,127315,127316],{},[66,127313,127314],{},"\u003Cp>","....",[66,127317,127318],{},"\u003C\u002Fp>",[14,127320,127322],{"id":127321},"_33-换行标签","3.3 换行标签",[29,127324,127325],{},[66,127326,127327],{},"\u003Cbr \u002F>",[29,127329,127330],{},"具有强制换行的作用",[29,127332,127333],{},"单标签",[14,127335,127337],{"id":127336},"_34-文本格式化标签","3.4 文本格式化标签",[29,127339,127340],{},"提供粗体、斜体和下划线等效果",[29,127342,127343,127344,83760,127347,127350],{},"加粗：",[66,127345,127346],{},"\u003Cstrong>...\u003C\u002Fstrong>",[66,127348,127349],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[29,127352,127353,127354,83760,127357,127350],{},"斜体：",[66,127355,127356],{},"\u003Cem>...\u003C\u002Fem>",[66,127358,127359],{},"\u003Ci>...\u003C\u002Fi>",[29,127361,127362,127363,83760,127366,127350],{},"删除线：",[66,127364,127365],{},"\u003Cdel>...\u003C\u002Fdel>",[66,127367,127368],{},"\u003Cs>...\u003C\u002Fs>",[29,127370,127371,127372,83760,127375,127350],{},"下划线：",[66,127373,127374],{},"\u003Cins>...\u003C\u002Fins>",[66,127376,127377],{},"\u003Cu>...\u003C\u002Fu>",[14,127379,127381,127382,19649,127385,103914],{"id":127380},"_35-div和span标签","3.5 ",[66,127383,127384],{},"\u003Cdiv>",[66,127386,127387],{},"\u003Cspan>",[29,127389,127390,102239,127392,127394],{},[66,127391,127384],{},[66,127393,127387],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[29,127396,127397],{},[66,127398,127399],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[29,127401,127402],{},[66,127403,127404],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[29,127406,127407,127408,127410,127411,127413,127414,127417],{},"两者特点：①",[66,127409,127384],{}," 标签用来布局，但一行通常只放一个 ",[66,127412,127384],{},"。可以理解为一个大盒子，独占一行，在 ",[66,127415,127416],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[29,127419,78470,127420,127422,127423,127425],{},[66,127421,127387],{}," 标签也可用于布局，一行可以放多个 ",[66,127424,127387],{},"，可理解为小盒子。",{"title":64,"searchDepth":79,"depth":79,"links":127427},[127428,127429,127430,127431,127432],{"id":127282,"depth":79,"text":127283},{"id":127308,"depth":79,"text":127309},{"id":127321,"depth":79,"text":127322},{"id":127336,"depth":79,"text":127337},{"id":127380,"depth":79,"text":127433},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127274,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127440,"title":127441,"body":127442,"description":1322,"extension":1323,"meta":127638,"navigation":1325,"path":127639,"seo":127640,"stem":127641,"__hash__":127642},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127443,"toc":127630},[127444,127447,127451,127454,127460,127467,127473,127479,127482,127485,127488,127491,127494,127497,127500,127504,127507,127510,127513,127519,127525,127531,127538,127542,127548,127554,127557,127560,127566,127572,127578,127581,127584,127588,127591,127601,127607,127611,127620,127624,127627],[10,127445,127441],{"id":127446},"_4-html图像与链接",[14,127448,127450],{"id":127449},"_41-图像标签","4.1 图像标签",[29,127452,127453],{},"（1）标签",[29,127455,127456,127459],{},[66,127457,127458],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[29,127461,127462,127463,127466],{},"src是",[66,127464,127465],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[29,127468,127469,127470],{},"alt:文本，替换文本。图像不能显示的文字 ",[66,127471,127472],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[29,127474,127475,127476],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[66,127477,127478],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[29,127480,127481],{},"width:像素，设置图像的宽度",[29,127483,127484],{},"height:像素，设置图像的高度",[29,127486,127487],{},"border：像素，设置图像的边框粗细",[29,127489,127490],{},"（2）图像标签属性的注意点：",[29,127492,127493],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[29,127495,127496],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[29,127498,127499],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127501,127503],{"id":127502},"_42-路径注意要点","4.2 路径注意要点：",[29,127505,127506],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[29,127508,127509],{},"（2）根目录：就是打开文件夹的第一层根目录",[29,127511,127512],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[29,127514,127515,127516],{},"①同一级路径：图像文件位于HTML文件同一级，如",[66,127517,127518],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[29,127520,127521,127522],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[66,127523,127524],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[29,127526,127527,127528],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[66,127529,127530],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[29,127532,127533,127534,1642],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[187,127535,127536],{"href":127536,"rel":127537},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[191],[14,127539,127541],{"id":127540},"_43-超链接标签","4.3 超链接标签",[29,127543,127544,127547],{},[66,127545,127546],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[29,127549,127550,127551],{},"①语法格式：",[66,127552,127553],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[29,127555,127556],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[29,127558,127559],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[29,127561,127562,127563],{},"③链接分类：外部链接：",[66,127564,127565],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[29,127567,127568,127569],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[66,127570,127571],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[29,127573,127574,127575],{},"空链接：如果当时没有确定链接目标时，",[66,127576,127577],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[29,127579,127580],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[29,127582,127583],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127585,127587],{"id":127586},"_44-锚点链接","4.4 锚点链接",[29,127589,127590],{},"点我们点击链接，可以快速定位到页面中的某个位置",[29,127592,127593,127594,127597,127598],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[66,127595,127596],{},"\u003Ca href=\"#two\">","第二级",[66,127599,127600],{},"\u003C\u002Fa>",[29,127602,127603,127604],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[66,127605,127606],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127608,127610],{"id":127609},"_45-注释标签","4.5 注释标签",[29,127612,127613,127616,127617],{},[66,127614,127615],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[66,127618,127619],{},"ctrl+\u002F",[14,127621,127623],{"id":127622},"_46-特殊字符","4.6 特殊字符",[29,127625,127626],{},"可以实现添加多个空格",[24,127628],{"style":26,"src":127629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":64,"searchDepth":79,"depth":79,"links":127631},[127632,127633,127634,127635,127636,127637],{"id":127449,"depth":79,"text":127450},{"id":127502,"depth":79,"text":127503},{"id":127540,"depth":79,"text":127541},{"id":127586,"depth":79,"text":127587},{"id":127609,"depth":79,"text":127610},{"id":127622,"depth":79,"text":127623},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127441,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127644,"title":127645,"body":127646,"description":1322,"extension":1323,"meta":127937,"navigation":1325,"path":127938,"seo":127939,"stem":127940,"__hash__":127941},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127647,"toc":127928},[127648,127651,127655,127658,127661,127664,127667,127670,127673,127676,127679,127682,127702,127708,127712,127715,127718,127721,127724,127727,127730,127734,127737,127740,127743,127746,127759,127764,127767,127770,127783,127786,127789,127792,127795,127798,127802,127805,127812,127815,127818,127821,127824,127827,127833,127836,127839,127845,127848,127851,127854,127860,127863,127866,127880,127887,127890,127893,127900,127909,127912,127915,127918,127922,127925],[10,127649,127645],{"id":127650},"_5-html表格列表与表单",[14,127652,127654],{"id":127653},"_51-表格标签","5.1 表格标签",[29,127656,127657],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[29,127659,127660],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[29,127662,127663],{},"②表格基本语法：",[24,127665],{"style":26,"src":127666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[29,127668,127669],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[24,127671],{"style":26,"src":127672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[29,127674,127675],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[24,127677],{"style":26,"src":127678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[29,127680,127681],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[29,127683,127684,127687,127688,127690,127691,127694,127695,127697,127698,127701],{},[66,127685,127686],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[66,127689,127686],{},"内部必须拥有",[66,127692,127693],{},"\u003Ctr>","标签，一般位于第一行，",[66,127696,127686],{},"比",[66,127699,127700],{},"\u003Cth>","范围广",[29,127703,127704,127707],{},[66,127705,127706],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127709,127711],{"id":127710},"_52-合并单元格","5.2 合并单元格",[29,127713,127714],{},"（1）合并单元格方式：",[29,127716,127717],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[29,127719,127720],{},"②跨列合并：colspan=\"合并单元格的个数\"",[29,127722,127723],{},"（2）目标单元格：",[29,127725,127726],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[29,127728,127729],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127731,127733],{"id":127732},"_53-列表标签","5.3 列表标签",[29,127735,127736],{},"（1）分类：无序列表、有序列表、自定义列表",[29,127738,127739],{},"①无序列表：",[24,127741],{"style":26,"src":127742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[29,127744,127745],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[29,127747,127748,127751,127752,127755,127756,127758],{},[66,127749,127750],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[66,127753,127754],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[66,127757,127750],{},"中输入其他标签或文字是不对的",[29,127760,127761,127763],{},[66,127762,127754],{},"之间相当于一个容器，可以容纳所有元素",[29,127765,127766],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[29,127768,127769],{},"在css中去除前边的小圆点采用如下代码:",[59,127771,127773],{"className":61,"code":127772,"language":63,"meta":64,"style":64},"list-style: none;\n",[66,127774,127775],{"__ignoreMap":64},[69,127776,127777,127780],{"class":71,"line":72},[69,127778,127779],{"class":348},"list-style",[69,127781,127782],{"class":86},": none;\n",[29,127784,127785],{},"②有序列表：",[24,127787],{"style":26,"src":127788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[29,127790,127791],{},"③自定义列表：",[24,127793],{"style":26,"src":127794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[24,127796],{"style":26,"src":127797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127799,127801],{"id":127800},"_54-表单标签","5.4 表单标签",[29,127803,127804],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[29,127806,127807,127808,127811],{},"（1）表单域：包含单元素的区域，",[66,127809,127810],{},"\u003Cform>","标签可以实现信息的收集和传递。",[24,127813],{"style":26,"src":127814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[29,127816,127817],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[29,127819,127820],{},"表单元素提交必须有name属性",[29,127822,127823],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[29,127825,127826],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[29,127828,78447,127829,127832],{},[66,127830,127831],{},"\u003Cinput>","输入表单元素",[24,127834],{"style":26,"src":127835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[24,127837],{"style":26,"src":127838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[29,127840,127841,127842],{},"单选按钮：",[66,127843,127844],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[24,127846],{"style":26,"src":127847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[29,127849,127850],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[24,127852],{"style":26,"src":127853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[29,127855,127856,127859],{},[195,127857,127858],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[29,127861,127862],{},"②select下拉表单元素：可以节约页面控件",[24,127864],{"style":26,"src":127865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[29,127867,127868,15036,127870,127873,127874,127876,127877,127879],{},[195,127869,272],{},[66,127871,127872],{},"\u003Cselect>","中至少包含一对",[66,127875,103935],{},"；在",[66,127878,103935],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[29,127881,127882,127883,127886],{},"③",[66,127884,127885],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[24,127888],{"style":26,"src":127889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[29,127891,127892],{},"3行20列",[14,127894,127896,127897,103914],{"id":127895},"_55-lable标签","5.5 ",[66,127898,127899],{},"\u003Clable>",[29,127901,127902,127903,127905,127906,127908],{},"它不是表单标签，但常常与表单标签搭配使用，",[66,127904,127899],{},"标签用于绑定一个表单标签，当点击",[66,127907,127899],{},"标签内的文本",[29,127910,127911],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[24,127913],{"style":26,"src":127914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[24,127916],{"style":26,"src":127917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127919,127921],{"id":127920},"_56-实例","5.6 实例",[24,127923],{"style":26,"src":127924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1297,127926,127927],{},"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":64,"searchDepth":79,"depth":79,"links":127929},[127930,127931,127932,127933,127934,127936],{"id":127653,"depth":79,"text":127654},{"id":127710,"depth":79,"text":127711},{"id":127732,"depth":79,"text":127733},{"id":127800,"depth":79,"text":127801},{"id":127895,"depth":79,"text":127935},"5.5 \u003Clable>标签",{"id":127920,"depth":79,"text":127921},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127645,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127943,"title":127944,"body":127945,"description":1322,"extension":1323,"meta":128492,"navigation":1325,"path":128493,"seo":128494,"stem":128495,"__hash__":128496},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127946,"toc":128467},[127947,127950,127954,127957,127960,127964,127967,127970,127973,127976,127979,127982,127985,127989,127992,127996,127999,128002,128005,128009,128012,128015,128018,128024,128027,128030,128033,128036,128039,128042,128045,128077,128081,128084,128087,128090,128094,128097,128100,128103,128106,128109,128113,128116,128119,128122,128126,128129,128133,128136,128140,128143,128148,128152,128155,128159,128162,128165,128168,128171,128197,128200,128204,128207,128210,128215,128218,128221,128225,128228,128233,128236,128239,128242,128246,128249,128252,128255,128259,128262,128265,128268,128272,128276,128279,128319,128322,128326,128333,128336,128340,128343,128389,128393,128396,128399,128402,128430,128434,128437,128464],[10,127948,127944],{"id":127949},"_6-css语法与文本样式",[14,127951,127953],{"id":127952},"_61-css语法规范","6.1 css语法规范",[29,127955,127956],{},"由两部分组成，选择器及一条或多条声明",[24,127958],{"style":26,"src":127959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[29,127961,127962],{},[195,127963,272],{},[29,127965,127966],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[29,127968,127969],{},"②属性与属性值以“键值对”的形式出现",[29,127971,127972],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[29,127974,127975],{},"④属性和属性值之间用英文“;”分开",[24,127977],{"style":26,"src":127978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[24,127980],{"style":26,"src":127981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[24,127983],{"style":26,"src":127984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127986,127988],{"id":127987},"_62-css选择器","6.2 css选择器",[29,127990,127991],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[19,127993,127995],{"id":127994},"_621-标签选择器","6.2.1 标签选择器",[29,127997,127998],{},"①优点：能快速为页面中同类型的标签统一设置样式",[29,128000,128001],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[24,128003],{"style":26,"src":128004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[19,128006,128008],{"id":128007},"_622-类选择器","6.2.2 类选择器",[29,128010,128011],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[29,128013,128014],{},"②样例",[24,128016],{"style":26,"src":128017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[29,128019,128020,128021,128023],{},"③ ",[195,128022,127858],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[29,128025,128026],{},"可以理解为给这个标签起了个名字，来表示；",[29,128028,128029],{},"长名称或词组可以使用横线来为选择器命名；",[29,128031,128032],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[29,128034,128035],{},"命名要有意义；",[24,128037],{"style":26,"src":128038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[29,128040,128041],{},"类选择器也可以指定特殊的元素p.center{}",[29,128043,128044],{},"p.center和.center都对",[59,128046,128048],{"className":61,"code":128047,"language":63,"meta":64,"style":64},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[66,128049,128050,128055,128063,128073],{"__ignoreMap":64},[69,128051,128052],{"class":71,"line":72},[69,128053,128054],{"class":75},"\u002F* 类选择器指定特殊元素 *\u002F\n",[69,128056,128057,128059,128061],{"class":71,"line":79},[69,128058,29],{"class":348},[69,128060,864],{"class":109},[69,128062,113],{"class":86},[69,128064,128065,128067,128069,128071],{"class":71,"line":106},[69,128066,71750],{"class":90},[69,128068,94],{"class":86},[69,128070,52823],{"class":90},[69,128072,130],{"class":86},[69,128074,128075],{"class":71,"line":116},[69,128076,142],{"class":86},[19,128078,128080],{"id":128079},"_623-多类名使用","6.2.3 多类名使用",[29,128082,128083],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[24,128085],{"style":26,"src":128086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[29,128088,128089],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[19,128091,128093],{"id":128092},"_624-id选择器","6.2.4 id选择器",[29,128095,128096],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[29,128098,128099],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[24,128101],{"style":26,"src":128102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[29,128104,128105],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[29,128107,128108],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[19,128110,128112],{"id":128111},"_625-通配符选择器","6.2.5 通配符选择器",[29,128114,128115],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[29,128117,128118],{},"* {",[29,128120,128121],{},"color=\"red\"}",[19,128123,128125],{"id":128124},"_626-总结","6.2.6 总结",[24,128127],{"style":26,"src":128128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128130,128132],{"id":128131},"_63-css字体属性","6.3 css字体属性",[29,128134,128135],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[19,128137,128139],{"id":128138},"_631-字体系列","6.3.1 字体系列",[29,128141,128142],{},"font-family: '宋体';",[29,128144,128145,128147],{},[195,128146,272],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[19,128149,128151],{"id":128150},"_632-字体大小","6.3.2 字体大小",[29,128153,128154],{},"font-size: 20px",[29,128156,128157,27709],{},[195,128158,127858],{},[29,128160,128161],{},"①px（像素）大小是网页的最常用单位",[29,128163,128164],{},"②谷歌浏览器默认为16px",[29,128166,128167],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[29,128169,128170],{},"④可以给body指定整个页面的大小：会自动引用",[59,128172,128173],{"className":61,"code":673,"language":63,"meta":64,"style":64},[66,128174,128175,128181,128193],{"__ignoreMap":64},[69,128176,128177,128179],{"class":71,"line":72},[69,128178,680],{"class":348},[69,128180,113],{"class":86},[69,128182,128183,128185,128187,128189,128191],{"class":71,"line":79},[69,128184,356],{"class":90},[69,128186,94],{"class":86},[69,128188,691],{"class":90},[69,128190,100],{"class":82},[69,128192,130],{"class":86},[69,128194,128195],{"class":71,"line":106},[69,128196,142],{"class":86},[29,128198,128199],{},"⑤标题标签比较特殊，需要单独指定大小",[19,128201,128203],{"id":128202},"_633-字体粗细","6.3.3 字体粗细",[29,128205,128206],{},"font-weight: bold;",[29,128208,128209],{},"font-weight: 100；",[29,128211,128212,128214],{},[195,128213,272],{}," ①粗体文字变细：尽量别用normal，多用数字",[29,128216,128217],{},"font-weight= 400;",[29,128219,128220],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[19,128222,128224],{"id":128223},"_634-文字样式","6.3.4 文字样式",[29,128226,128227],{},"font-style: normal；",[29,128229,128230,27709],{},[195,128231,128232],{},"属性值",[29,128234,128235],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[29,128237,128238],{},"②italic：浏览器会显示斜体的字体样式",[24,128240],{"style":26,"src":128241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[19,128243,128245],{"id":128244},"_635-字体符合属性","6.3.5 字体符合属性",[24,128247],{"style":26,"src":128248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[24,128250],{"style":26,"src":128251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[29,128253,128254],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[29,128256,128257,27709],{},[195,128258,127858],{},[29,128260,128261],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[29,128263,128264],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[29,128266,128267],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128269,128271],{"id":128270},"_64-css-test文本属性","6.4 css test文本属性",[19,128273,128275],{"id":128274},"_641-文本颜色","6.4.1 文本颜色",[29,128277,128278],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[59,128280,128282],{"className":61,"code":128281,"language":63,"meta":64,"style":64},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[66,128283,128284,128289,128295,128305,128310,128315],{"__ignoreMap":64},[69,128285,128286],{"class":71,"line":72},[69,128287,128288],{"class":75},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[69,128290,128291,128293],{"class":71,"line":79},[69,128292,29],{"class":348},[69,128294,113],{"class":86},[69,128296,128297,128299,128301,128303],{"class":71,"line":106},[69,128298,871],{"class":90},[69,128300,94],{"class":86},[69,128302,876],{"class":90},[69,128304,130],{"class":86},[69,128306,128307],{"class":71,"line":116},[69,128308,128309],{"class":75},"  \u002F* color: #ff0000; *\u002F\n",[69,128311,128312],{"class":71,"line":133},[69,128313,128314],{"class":75},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[69,128316,128317],{"class":71,"line":139},[69,128318,142],{"class":86},[24,128320],{"style":26,"src":128321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[19,128323,128325],{"id":128324},"_642-对齐文本","6.4.2 对齐文本",[29,128327,128328,128329,128332],{},"text-align属于用于设置元素内文本内容的 ",[195,128330,128331],{},"水平对齐"," 方式",[29,128334,128335],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[19,128337,128339],{"id":128338},"_643-装饰文本","6.4.3 装饰文本",[29,128341,128342],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[59,128344,128346],{"className":61,"code":128345,"language":63,"meta":64,"style":64},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[66,128347,128348,128354,128364,128368,128374,128385],{"__ignoreMap":64},[69,128349,128350,128352],{"class":71,"line":72},[69,128351,187],{"class":348},[69,128353,113],{"class":86},[69,128355,128356,128358,128360,128362],{"class":71,"line":79},[69,128357,71726],{"class":90},[69,128359,94],{"class":86},[69,128361,55964],{"class":90},[69,128363,130],{"class":86},[69,128365,128366],{"class":71,"line":106},[69,128367,142],{"class":86},[69,128369,128370,128372],{"class":71,"line":116},[69,128371,29],{"class":348},[69,128373,113],{"class":86},[69,128375,128376,128378,128380,128383],{"class":71,"line":133},[69,128377,71726],{"class":90},[69,128379,94],{"class":86},[69,128381,128382],{"class":90},"underline",[69,128384,130],{"class":86},[69,128386,128387],{"class":71,"line":139},[69,128388,142],{"class":86},[19,128390,128392],{"id":128391},"_644-文本缩进","6.4.4 文本缩进",[29,128394,128395],{},"实现文本的第一行首行缩进自己指定的距离",[29,128397,128398],{},"20px往右边走；-20px往左边走",[29,128400,128401],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[59,128403,128405],{"className":61,"code":128404,"language":63,"meta":64,"style":64},"p {\n  text-indent: 2em;\n}\n",[66,128406,128407,128413,128426],{"__ignoreMap":64},[69,128408,128409,128411],{"class":71,"line":72},[69,128410,29],{"class":348},[69,128412,113],{"class":86},[69,128414,128415,128418,128420,128422,128424],{"class":71,"line":79},[69,128416,128417],{"class":90},"  text-indent",[69,128419,94],{"class":86},[69,128421,1471],{"class":90},[69,128423,531],{"class":82},[69,128425,130],{"class":86},[69,128427,128428],{"class":71,"line":106},[69,128429,142],{"class":86},[19,128431,128433],{"id":128432},"_645-行间距","6.4.5 行间距",[29,128435,128436],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[59,128438,128440],{"className":61,"code":128439,"language":63,"meta":64,"style":64},"p {\n  line-height: 1.6;\n}\n",[66,128441,128442,128448,128460],{"__ignoreMap":64},[69,128443,128444,128446],{"class":71,"line":72},[69,128445,29],{"class":348},[69,128447,113],{"class":86},[69,128449,128450,128453,128455,128458],{"class":71,"line":79},[69,128451,128452],{"class":90},"  line-height",[69,128454,94],{"class":86},[69,128456,128457],{"class":90},"1.6",[69,128459,130],{"class":86},[69,128461,128462],{"class":71,"line":106},[69,128463,142],{"class":86},[1297,128465,128466],{},"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":64,"searchDepth":79,"depth":79,"links":128468},[128469,128470,128478,128485],{"id":127952,"depth":79,"text":127953},{"id":127987,"depth":79,"text":127988,"children":128471},[128472,128473,128474,128475,128476,128477],{"id":127994,"depth":106,"text":127995},{"id":128007,"depth":106,"text":128008},{"id":128079,"depth":106,"text":128080},{"id":128092,"depth":106,"text":128093},{"id":128111,"depth":106,"text":128112},{"id":128124,"depth":106,"text":128125},{"id":128131,"depth":79,"text":128132,"children":128479},[128480,128481,128482,128483,128484],{"id":128138,"depth":106,"text":128139},{"id":128150,"depth":106,"text":128151},{"id":128202,"depth":106,"text":128203},{"id":128223,"depth":106,"text":128224},{"id":128244,"depth":106,"text":128245},{"id":128270,"depth":79,"text":128271,"children":128486},[128487,128488,128489,128490,128491],{"id":128274,"depth":106,"text":128275},{"id":128324,"depth":106,"text":128325},{"id":128338,"depth":106,"text":128339},{"id":128391,"depth":106,"text":128392},{"id":128432,"depth":106,"text":128433},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127944,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128498,"title":128499,"body":128500,"description":1322,"extension":1323,"meta":129146,"navigation":1325,"path":129147,"seo":129148,"stem":129149,"__hash__":129150},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128501,"toc":129127},[128502,128505,128509,128513,128570,128574,128584,128587,128590,128594,128619,128623,128626,128629,128632,128635,128638,128642,128645,128648,128690,128693,128719,128725,128728,128732,128736,128742,128745,128748,128751,128754,128757,128760,128805,128809,128812,128815,128819,128823,128852,128855,128860,128863,128866,128869,128872,128876,128880,128883,128885,128888,128892,128895,128899,128902,128905,128908,128912,128916,128922,128932,128935,128938,128941,128944,128947,129070,129078,129086,129124],[10,128503,128499],{"id":128504},"_7-css引入方式与选择器进阶",[14,128506,128508],{"id":128507},"_71-css引入方式","7.1 css引入方式",[19,128510,128512],{"id":128511},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[59,128514,128516],{"className":997,"code":128515,"language":999,"meta":64,"style":64},"\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n",[66,128517,128518,128526,128533,128545,128558,128562],{"__ignoreMap":64},[69,128519,128520,128522,128524],{"class":71,"line":72},[69,128521,1011],{"class":86},[69,128523,1297],{"class":348},[69,128525,1026],{"class":86},[69,128527,128528,128531],{"class":71,"line":79},[69,128529,128530],{"class":348},"  h1",[69,128532,113],{"class":86},[69,128534,128535,128538,128540,128543],{"class":71,"line":106},[69,128536,128537],{"class":90},"    color",[69,128539,94],{"class":86},[69,128541,128542],{"class":90},"blue",[69,128544,130],{"class":86},[69,128546,128547,128550,128552,128554,128556],{"class":71,"line":116},[69,128548,128549],{"class":90},"    font-size",[69,128551,94],{"class":86},[69,128553,2187],{"class":90},[69,128555,100],{"class":82},[69,128557,130],{"class":86},[69,128559,128560],{"class":71,"line":133},[69,128561,136],{"class":86},[69,128563,128564,128566,128568],{"class":71,"line":139},[69,128565,1036],{"class":86},[69,128567,1297],{"class":348},[69,128569,1026],{"class":86},[29,128571,128572,27709],{},[195,128573,127858],{},[29,128575,78447,128576,128579,128580,128583],{},[66,128577,128578],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[66,128581,128582],{},"\u003Chead>","标签中",[29,128585,128586],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[29,128588,128589],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[19,128591,128593],{"id":128592},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[59,128595,128597],{"className":997,"code":128596,"language":999,"meta":64,"style":64},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[66,128598,128599],{"__ignoreMap":64},[69,128600,128601,128603,128605,128607,128609,128612,128615,128617],{"class":71,"line":72},[69,128602,1011],{"class":86},[69,128604,29],{"class":348},[69,128606,63852],{"class":109},[69,128608,1019],{"class":86},[69,128610,128611],{"class":1022},"\"color: red; font-size: 16px;\"",[69,128613,128614],{"class":86},">这是一个段落\u003C\u002F",[69,128616,29],{"class":348},[69,128618,1026],{"class":86},[29,128620,128621,27709],{},[195,128622,127858],{},[29,128624,128625],{},"①style其实就是标签的属性",[29,128627,128628],{},"②在双引号中间，写法要符合css规范",[29,128630,128631],{},"③可以控制当前的标签设置样式",[29,128633,128634],{},"④书写繁琐，简单时才用",[29,128636,128637],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[19,128639,128641],{"id":128640},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[29,128643,128644],{},"使用最多，单独建一个css文件，然后html引用",[29,128646,128647],{},"①css文件部分： style.css",[59,128649,128651],{"className":61,"code":128650,"language":63,"meta":64,"style":64},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[66,128652,128653,128658,128664,128674,128686],{"__ignoreMap":64},[69,128654,128655],{"class":71,"line":72},[69,128656,128657],{"class":75},"\u002F* style.css *\u002F\n",[69,128659,128660,128662],{"class":71,"line":79},[69,128661,10],{"class":348},[69,128663,113],{"class":86},[69,128665,128666,128668,128670,128672],{"class":71,"line":106},[69,128667,871],{"class":90},[69,128669,94],{"class":86},[69,128671,128542],{"class":90},[69,128673,130],{"class":86},[69,128675,128676,128678,128680,128682,128684],{"class":71,"line":116},[69,128677,356],{"class":90},[69,128679,94],{"class":86},[69,128681,2187],{"class":90},[69,128683,100],{"class":82},[69,128685,130],{"class":86},[69,128687,128688],{"class":71,"line":133},[69,128689,142],{"class":86},[29,128691,128692],{},"②html部分",[59,128694,128696],{"className":997,"code":128695,"language":999,"meta":64,"style":64},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[66,128697,128698],{"__ignoreMap":64},[69,128699,128700,128702,128704,128706,128708,128710,128712,128714,128717],{"class":71,"line":72},[69,128701,1011],{"class":86},[69,128703,70230],{"class":348},[69,128705,70233],{"class":109},[69,128707,1019],{"class":86},[69,128709,70238],{"class":1022},[69,128711,62283],{"class":109},[69,128713,1019],{"class":86},[69,128715,128716],{"class":1022},"\"style.css\"",[69,128718,1026],{"class":86},[29,128720,128721,128724],{},[66,128722,128723],{},"\u003Chr>","水平线标签（但是不常用！）",[29,128726,128727],{},"ctrl+0回到页面原来大小",[14,128729,128731],{"id":128730},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[19,128733,128735],{"id":128734},"_721-快速生成html","7.2.1 快速生成html",[29,128737,128738,128739],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[66,128740,128741],{},"\u003Cdiv>``\u003C\u002Fdiv>",[29,128743,128744],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[29,128746,128747],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[29,128749,128750],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[29,128752,128753],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[29,128755,128756],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[29,128758,128759],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[59,128761,128763],{"className":997,"code":128762,"language":999,"meta":64,"style":64},"\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",[66,128764,128765,128770,128775,128780,128785,128790,128795,128800],{"__ignoreMap":64},[69,128766,128767],{"class":71,"line":72},[69,128768,128769],{"class":75},"\u003C!-- Emmet 语法示例 -->\n",[69,128771,128772],{"class":71,"line":79},[69,128773,128774],{"class":75},"\u003C!-- div*3        → 生成3个div -->\n",[69,128776,128777],{"class":71,"line":106},[69,128778,128779],{"class":75},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[69,128781,128782],{"class":71,"line":116},[69,128783,128784],{"class":75},"\u003C!-- div+p        → 兄弟div和p -->\n",[69,128786,128787],{"class":71,"line":133},[69,128788,128789],{"class":75},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[69,128791,128792],{"class":71,"line":139},[69,128793,128794],{"class":75},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[69,128796,128797],{"class":71,"line":401},[69,128798,128799],{"class":75},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[69,128801,128802],{"class":71,"line":470},[69,128803,128804],{"class":75},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[19,128806,128808],{"id":128807},"_722-快速生成css","7.2.2 快速生成css",[29,128810,128811],{},"简写开头",[29,128813,128814],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128816,128818],{"id":128817},"_73-css复合选择器","7.3 css复合选择器",[19,128820,128822],{"id":128821},"_731-后代选择器","7.3.1 后代选择器",[59,128824,128826],{"className":61,"code":128825,"language":63,"meta":64,"style":64},".parent .child {\n  color: blue;\n}\n",[66,128827,128828,128838,128848],{"__ignoreMap":64},[69,128829,128830,128833,128836],{"class":71,"line":72},[69,128831,128832],{"class":109},".parent",[69,128834,128835],{"class":109}," .child",[69,128837,113],{"class":86},[69,128839,128840,128842,128844,128846],{"class":71,"line":79},[69,128841,871],{"class":90},[69,128843,94],{"class":86},[69,128845,128542],{"class":90},[69,128847,130],{"class":86},[69,128849,128850],{"class":71,"line":106},[69,128851,142],{"class":86},[29,128853,128854],{},"元素1 元素2 {样式声明}",[29,128856,128857],{},[195,128858,128859],{},"注意点:",[29,128861,128862],{},"①元素1和元素2中间用空格隔开",[29,128864,128865],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[29,128867,128868],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[29,128870,128871],{},"④元素1和元素2可以是任意基础选择器",[19,128873,128875],{"id":128874},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[29,128877,128878],{},[195,128879,128859],{},[29,128881,128882],{},"①元素1和元素2中间用大于号隔开",[29,128884,128865],{},[29,128886,128887],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[19,128889,128891],{"id":128890},"_733-并集选择器","7.3.3 并集选择器",[29,128893,128894],{},"元素1，元素2 {样式声明}",[29,128896,128897],{},[195,128898,128859],{},[29,128900,128901],{},"①元素1和元素2中间用逗号隔开",[29,128903,128904],{},"②逗号可以理解为和的意思",[29,128906,128907],{},"③并集选择器通常用于集体声明",[19,128909,128911],{"id":128910},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[29,128913,128914],{},[195,128915,128859],{},[29,128917,128918,128919,128921],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70230,128920],{},"－:visited－:hover－:active。",[29,128923,128924,128925,128928,128929,26977],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128926,128927],"hover",{}," 、 ",[128930,128931],"first-child",{},[29,128933,128934],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[29,128936,128937],{},"link对没访问的进行设置",[29,128939,128940],{},"vistied对已访问的进行改变",[29,128942,128943],{},"hover鼠标经过就会变",[29,128945,128946],{},"active常按(点)就会变",[59,128948,128950],{"className":61,"code":128949,"language":63,"meta":64,"style":64},"\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",[66,128951,128952,128957,128966,128976,128986,128990,128999,129010,129014,129022,129032,129042,129046,129055,129066],{"__ignoreMap":64},[69,128953,128954],{"class":71,"line":72},[69,128955,128956],{"class":75},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[69,128958,128959,128961,128964],{"class":71,"line":79},[69,128960,187],{"class":348},[69,128962,128963],{"class":109},":link",[69,128965,113],{"class":86},[69,128967,128968,128970,128972,128974],{"class":71,"line":106},[69,128969,871],{"class":90},[69,128971,94],{"class":86},[69,128973,63595],{"class":90},[69,128975,130],{"class":86},[69,128977,128978,128980,128982,128984],{"class":71,"line":116},[69,128979,71726],{"class":90},[69,128981,94],{"class":86},[69,128983,55964],{"class":90},[69,128985,130],{"class":86},[69,128987,128988],{"class":71,"line":133},[69,128989,142],{"class":86},[69,128991,128992,128994,128997],{"class":71,"line":139},[69,128993,187],{"class":348},[69,128995,128996],{"class":109},":visited",[69,128998,113],{"class":86},[69,129000,129001,129003,129005,129008],{"class":71,"line":401},[69,129002,871],{"class":90},[69,129004,94],{"class":86},[69,129006,129007],{"class":90},"purple",[69,129009,130],{"class":86},[69,129011,129012],{"class":71,"line":470},[69,129013,142],{"class":86},[69,129015,129016,129018,129020],{"class":71,"line":475},[69,129017,187],{"class":348},[69,129019,62166],{"class":109},[69,129021,113],{"class":86},[69,129023,129024,129026,129028,129030],{"class":71,"line":482},[69,129025,871],{"class":90},[69,129027,94],{"class":86},[69,129029,56116],{"class":90},[69,129031,130],{"class":86},[69,129033,129034,129036,129038,129040],{"class":71,"line":497},[69,129035,71726],{"class":90},[69,129037,94],{"class":86},[69,129039,128382],{"class":90},[69,129041,130],{"class":86},[69,129043,129044],{"class":71,"line":502},[69,129045,142],{"class":86},[69,129047,129048,129050,129053],{"class":71,"line":509},[69,129049,187],{"class":348},[69,129051,129052],{"class":109},":active",[69,129054,113],{"class":86},[69,129056,129057,129059,129061,129064],{"class":71,"line":524},[69,129058,871],{"class":90},[69,129060,94],{"class":86},[69,129062,129063],{"class":90},"green",[69,129065,130],{"class":86},[69,129067,129068],{"class":71,"line":2888},[69,129069,142],{"class":86},[19,129071,129073,129074,129077],{"id":129072},"_735-伪类选择器","7.3.5 ",[129075,129076],"focus",{},"伪类选择器",[29,129079,129080,129082,129083,129085],{},[129075,129081],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[66,129084,127831],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[59,129087,129089],{"className":61,"code":129088,"language":63,"meta":64,"style":64},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[66,129090,129091,129099,129110,129120],{"__ignoreMap":64},[69,129092,129093,129095,129097],{"class":71,"line":72},[69,129094,55048],{"class":348},[69,129096,63126],{"class":109},[69,129098,113],{"class":86},[69,129100,129101,129104,129106,129108],{"class":71,"line":79},[69,129102,129103],{"class":90},"  border-color",[69,129105,94],{"class":86},[69,129107,56116],{"class":90},[69,129109,130],{"class":86},[69,129111,129112,129114,129116,129118],{"class":71,"line":106},[69,129113,72020],{"class":90},[69,129115,94],{"class":86},[69,129117,55964],{"class":90},[69,129119,130],{"class":86},[69,129121,129122],{"class":71,"line":116},[69,129123,142],{"class":86},[1297,129125,129126],{},"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":64,"searchDepth":79,"depth":79,"links":129128},[129129,129134,129138],{"id":128507,"depth":79,"text":128508,"children":129130},[129131,129132,129133],{"id":128511,"depth":106,"text":128512},{"id":128592,"depth":106,"text":128593},{"id":128640,"depth":106,"text":128641},{"id":128730,"depth":79,"text":128731,"children":129135},[129136,129137],{"id":128734,"depth":106,"text":128735},{"id":128807,"depth":106,"text":128808},{"id":128817,"depth":79,"text":128818,"children":129139},[129140,129141,129142,129143,129144],{"id":128821,"depth":106,"text":128822},{"id":128874,"depth":106,"text":128875},{"id":128890,"depth":106,"text":128891},{"id":128910,"depth":106,"text":128911},{"id":129072,"depth":106,"text":129145},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128499,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129152,"title":129153,"body":129154,"description":1322,"extension":1323,"meta":131077,"navigation":1325,"path":131078,"seo":131079,"stem":131080,"__hash__":131081},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129155,"toc":131051},[129156,129159,129163,129172,129176,129202,129207,129210,129213,129216,129219,129223,129226,129236,129244,129248,129283,129288,129291,129294,129297,129300,129304,129307,129316,129320,129333,129338,129341,129344,129347,129351,129354,129358,129361,129416,129419,129450,129453,129507,129511,129514,129680,129803,129806,129809,129812,129815,129819,129822,129826,129829,129832,129836,129839,129870,129897,129925,129928,129932,129958,130001,130005,130099,130102,130129,130132,130135,130138,130141,130144,130147,130150,130153,130156,130160,130217,130244,130248,130296,130300,130341,130343,130346,130349,130352,130355,130359,130451,130454,130457,130460,130464,130587,130788,130792,130796,130799,130802,130805,130809,130812,130815,130840,130843,130846,130849,130852,130855,130859,130867,130929,130932,130990,130993,130996,130999,131002,131005,131008,131011,131048],[10,129157,129153],{"id":129158},"_8-css显示模式与背景特性",[14,129160,129162],{"id":129161},"_81-css元素显示模式","8.1 css元素显示模式",[29,129164,129165,129166,129168,129169,129171],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[66,129167,127384],{},"自己占一行，比如一行可以放多个",[66,129170,127387],{},"，HTML 元素一般分为块元素和行内元素两种类型",[19,129173,129175],{"id":129174},"_811-块元素","8.1.1 块元素",[29,129177,129178,129179,129181,129182,1604,129185,1604,129187,1604,129189,1604,129192,1604,129195,129198,129199,129201],{},"常见的块元素有",[66,129180,127288],{},"~",[66,129183,129184],{},"\u003Ch6>",[66,129186,127314],{},[66,129188,127384],{},[66,129190,129191],{},"\u003Cul>",[66,129193,129194],{},"\u003Col>",[66,129196,129197],{},"\u003Cli>","等，其中 ",[66,129200,127384],{}," 标签是最典型的块元素",[29,129203,129204],{},[195,129205,129206],{},"块级元素的特点：",[29,129208,129209],{},"① 比较霸道，自己独占一行。",[29,129211,129212],{},"② 高度，宽度、外边距以及内边距都可以控制。",[29,129214,129215],{},"③ 宽度默认是容器（父级宽度）的100%。",[29,129217,129218],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[29,129220,129221],{},[195,129222,272],{},[29,129224,129225],{},"①文字类的元素内不能使用块级元素",[29,129227,78470,129228,129230,129231,129233,129234],{},[66,129229,127314],{}," 标签主要用于存放文字，因此 ",[66,129232,127314],{}," 里面不能放块级元素，特别是不能放",[66,129235,127384],{},[29,129237,129238,129239,129181,129241,129243],{},"⑥同理， ",[66,129240,127288],{},[66,129242,129184],{},"等都是文字类块级标签，里面也不能放其他块级元素",[19,129245,129247],{"id":129246},"_812-行内元素","8.1.2 行内元素",[29,129249,129250,129251,1604,129253,1604,129256,1604,129259,1604,129262,1604,129265,1604,129268,1604,129271,1604,129274,1604,129277,129279,129280,129282],{},"常见的行内元素有 ",[66,129252,127546],{},[66,129254,129255],{},"\u003Cstrong>",[66,129257,129258],{},"\u003Cb>",[66,129260,129261],{},"\u003Cem>",[66,129263,129264],{},"\u003Ci>",[66,129266,129267],{},"\u003Cdel>",[66,129269,129270],{},"\u003Cs>",[66,129272,129273],{},"\u003Cins>",[66,129275,129276],{},"\u003Cu>",[66,129278,127387],{}," 等，其中 ",[66,129281,127387],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[29,129284,129285],{},[195,129286,129287],{},"特点：",[29,129289,129290],{},"① 相邻行内元素在一行上，一行可以显示多个。",[29,129292,129293],{},"② 高、宽直接设置是无效的。",[29,129295,129296],{},"③ 默认宽度就是它本身内容的宽度。",[29,129298,129299],{},"④ 行内元素只能容纳文本或其他行内元素。",[29,129301,129302],{},[195,129303,272],{},[29,129305,129306],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[29,129308,129309,129310,129312,129313,129315],{},"②特殊情况链接 ",[66,129311,127546],{}," 里面可以放块级元素，但是给 ",[66,129314,127546],{}," 转换一下块级模式最安全",[19,129317,129319],{"id":129318},"_813-行内块元素","8.1.3 行内块元素",[29,129321,129322,129323,1604,129326,1604,129329,129332],{},"在行内元素中有几个特殊的标签 —— ",[66,129324,129325],{},"\u003Cimg \u002F>",[66,129327,129328],{},"\u003Cinput \u002F>",[66,129330,129331],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[29,129334,129335],{},[195,129336,129337],{},"行内块元素的特点：",[29,129339,129340],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[29,129342,129343],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[29,129345,129346],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[19,129348,129350],{"id":129349},"_814-总结","8.1.4 总结",[24,129352],{"style":26,"src":129353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[19,129355,129357],{"id":129356},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[29,129359,129360],{},"①转换为块元素：display:block;",[59,129362,129364],{"className":61,"code":129363,"language":63,"meta":64,"style":64},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[66,129365,129366,129371,129377,129388,129400,129412],{"__ignoreMap":64},[69,129367,129368],{"class":71,"line":72},[69,129369,129370],{"class":75},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[69,129372,129373,129375],{"class":71,"line":79},[69,129374,187],{"class":348},[69,129376,113],{"class":86},[69,129378,129379,129382,129384,129386],{"class":71,"line":106},[69,129380,129381],{"class":90},"  display",[69,129383,94],{"class":86},[69,129385,62095],{"class":90},[69,129387,130],{"class":86},[69,129389,129390,129392,129394,129396,129398],{"class":71,"line":116},[69,129391,385],{"class":90},[69,129393,94],{"class":86},[69,129395,124],{"class":90},[69,129397,100],{"class":82},[69,129399,130],{"class":86},[69,129401,129402,129404,129406,129408,129410],{"class":71,"line":133},[69,129403,72010],{"class":90},[69,129405,94],{"class":86},[69,129407,1790],{"class":90},[69,129409,100],{"class":82},[69,129411,130],{"class":86},[69,129413,129414],{"class":71,"line":139},[69,129415,142],{"class":86},[29,129417,129418],{},"②转换为行内元素：display:inline;",[59,129420,129422],{"className":61,"code":129421,"language":63,"meta":64,"style":64},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[66,129423,129424,129429,129435,129446],{"__ignoreMap":64},[69,129425,129426],{"class":71,"line":72},[69,129427,129428],{"class":75},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[69,129430,129431,129433],{"class":71,"line":79},[69,129432,442],{"class":348},[69,129434,113],{"class":86},[69,129436,129437,129439,129441,129444],{"class":71,"line":106},[69,129438,129381],{"class":90},[69,129440,94],{"class":86},[69,129442,129443],{"class":90},"inline",[69,129445,130],{"class":86},[69,129447,129448],{"class":71,"line":116},[69,129449,142],{"class":86},[29,129451,129452],{},"③转换为行内块：display:inline-block;",[59,129454,129456],{"className":61,"code":129455,"language":63,"meta":64,"style":64},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[66,129457,129458,129463,129469,129479,129491,129503],{"__ignoreMap":64},[69,129459,129460],{"class":71,"line":72},[69,129461,129462],{"class":75},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[69,129464,129465,129467],{"class":71,"line":79},[69,129466,69],{"class":348},[69,129468,113],{"class":86},[69,129470,129471,129473,129475,129477],{"class":71,"line":106},[69,129472,129381],{"class":90},[69,129474,94],{"class":86},[69,129476,73604],{"class":90},[69,129478,130],{"class":86},[69,129480,129481,129483,129485,129487,129489],{"class":71,"line":116},[69,129482,385],{"class":90},[69,129484,94],{"class":86},[69,129486,1999],{"class":90},[69,129488,100],{"class":82},[69,129490,130],{"class":86},[69,129492,129493,129495,129497,129499,129501],{"class":71,"line":133},[69,129494,72010],{"class":90},[69,129496,94],{"class":86},[69,129498,2337],{"class":90},[69,129500,100],{"class":82},[69,129502,130],{"class":86},[69,129504,129505],{"class":71,"line":139},[69,129506,142],{"class":86},[19,129508,129510],{"id":129509},"_816-小米侧边栏","8.1.6 小米侧边栏",[24,129512],{"style":26,"src":129513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[59,129515,129517],{"className":997,"code":129516,"language":999,"meta":64,"style":64},"\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",[66,129518,129519,129524,129539,129558,129577,129596,129615,129634,129653,129672],{"__ignoreMap":64},[69,129520,129521],{"class":71,"line":72},[69,129522,129523],{"class":75},"\u003C!-- 小米侧边栏案例 -->\n",[69,129525,129526,129528,129530,129532,129534,129537],{"class":71,"line":79},[69,129527,1011],{"class":86},[69,129529,442],{"class":348},[69,129531,1016],{"class":109},[69,129533,1019],{"class":86},[69,129535,129536],{"class":1022},"\"sidebar\"",[69,129538,1026],{"class":86},[69,129540,129541,129543,129545,129547,129549,129551,129554,129556],{"class":71,"line":106},[69,129542,53372],{"class":86},[69,129544,187],{"class":348},[69,129546,62283],{"class":109},[69,129548,1019],{"class":86},[69,129550,62288],{"class":1022},[69,129552,129553],{"class":86},">手机 电话卡\u003C\u002F",[69,129555,187],{"class":348},[69,129557,1026],{"class":86},[69,129559,129560,129562,129564,129566,129568,129570,129573,129575],{"class":71,"line":116},[69,129561,53372],{"class":86},[69,129563,187],{"class":348},[69,129565,62283],{"class":109},[69,129567,1019],{"class":86},[69,129569,62288],{"class":1022},[69,129571,129572],{"class":86},">电视 盒子\u003C\u002F",[69,129574,187],{"class":348},[69,129576,1026],{"class":86},[69,129578,129579,129581,129583,129585,129587,129589,129592,129594],{"class":71,"line":133},[69,129580,53372],{"class":86},[69,129582,187],{"class":348},[69,129584,62283],{"class":109},[69,129586,1019],{"class":86},[69,129588,62288],{"class":1022},[69,129590,129591],{"class":86},">笔记本 平板\u003C\u002F",[69,129593,187],{"class":348},[69,129595,1026],{"class":86},[69,129597,129598,129600,129602,129604,129606,129608,129611,129613],{"class":71,"line":139},[69,129599,53372],{"class":86},[69,129601,187],{"class":348},[69,129603,62283],{"class":109},[69,129605,1019],{"class":86},[69,129607,62288],{"class":1022},[69,129609,129610],{"class":86},">出行 穿戴\u003C\u002F",[69,129612,187],{"class":348},[69,129614,1026],{"class":86},[69,129616,129617,129619,129621,129623,129625,129627,129630,129632],{"class":71,"line":401},[69,129618,53372],{"class":86},[69,129620,187],{"class":348},[69,129622,62283],{"class":109},[69,129624,1019],{"class":86},[69,129626,62288],{"class":1022},[69,129628,129629],{"class":86},">智能 路由器\u003C\u002F",[69,129631,187],{"class":348},[69,129633,1026],{"class":86},[69,129635,129636,129638,129640,129642,129644,129646,129649,129651],{"class":71,"line":470},[69,129637,53372],{"class":86},[69,129639,187],{"class":348},[69,129641,62283],{"class":109},[69,129643,1019],{"class":86},[69,129645,62288],{"class":1022},[69,129647,129648],{"class":86},">健康 儿童\u003C\u002F",[69,129650,187],{"class":348},[69,129652,1026],{"class":86},[69,129654,129655,129657,129659,129661,129663,129665,129668,129670],{"class":71,"line":475},[69,129656,53372],{"class":86},[69,129658,187],{"class":348},[69,129660,62283],{"class":109},[69,129662,1019],{"class":86},[69,129664,62288],{"class":1022},[69,129666,129667],{"class":86},">耳机 音响\u003C\u002F",[69,129669,187],{"class":348},[69,129671,1026],{"class":86},[69,129673,129674,129676,129678],{"class":71,"line":482},[69,129675,1036],{"class":86},[69,129677,442],{"class":348},[69,129679,1026],{"class":86},[59,129681,129683],{"className":61,"code":129682,"language":63,"meta":64,"style":64},".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",[66,129684,129685,129694,129704,129717,129729,129741,129753,129763,129774,129778,129788,129799],{"__ignoreMap":64},[69,129686,129687,129690,129692],{"class":71,"line":72},[69,129688,129689],{"class":109},".sidebar",[69,129691,2650],{"class":348},[69,129693,113],{"class":86},[69,129695,129696,129698,129700,129702],{"class":71,"line":79},[69,129697,129381],{"class":90},[69,129699,94],{"class":86},[69,129701,62095],{"class":90},[69,129703,130],{"class":86},[69,129705,129706,129708,129710,129713,129715],{"class":71,"line":106},[69,129707,385],{"class":90},[69,129709,94],{"class":86},[69,129711,129712],{"class":90},"234",[69,129714,100],{"class":82},[69,129716,130],{"class":86},[69,129718,129719,129721,129723,129725,129727],{"class":71,"line":116},[69,129720,72010],{"class":90},[69,129722,94],{"class":86},[69,129724,1840],{"class":90},[69,129726,100],{"class":82},[69,129728,130],{"class":86},[69,129730,129731,129733,129735,129737,129739],{"class":71,"line":133},[69,129732,128452],{"class":90},[69,129734,94],{"class":86},[69,129736,1840],{"class":90},[69,129738,100],{"class":82},[69,129740,130],{"class":86},[69,129742,129743,129745,129747,129749,129751],{"class":71,"line":139},[69,129744,72045],{"class":90},[69,129746,94],{"class":86},[69,129748,2337],{"class":90},[69,129750,100],{"class":82},[69,129752,130],{"class":86},[69,129754,129755,129757,129759,129761],{"class":71,"line":401},[69,129756,871],{"class":90},[69,129758,94],{"class":86},[69,129760,62068],{"class":90},[69,129762,130],{"class":86},[69,129764,129765,129767,129769,129772],{"class":71,"line":470},[69,129766,72100],{"class":90},[69,129768,94],{"class":86},[69,129770,129771],{"class":90},"#55585a",[69,129773,130],{"class":86},[69,129775,129776],{"class":71,"line":475},[69,129777,142],{"class":86},[69,129779,129780,129782,129784,129786],{"class":71,"line":482},[69,129781,129689],{"class":109},[69,129783,2650],{"class":348},[69,129785,62166],{"class":109},[69,129787,113],{"class":86},[69,129789,129790,129792,129794,129797],{"class":71,"line":497},[69,129791,72100],{"class":90},[69,129793,94],{"class":86},[69,129795,129796],{"class":90},"#ff6700",[69,129798,130],{"class":86},[69,129800,129801],{"class":71,"line":502},[69,129802,142],{"class":86},[24,129804],{"style":26,"src":129805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[29,129807,129808],{},"行高=盒子高度：实现文字的垂直居中",[29,129810,129811],{},"原理讲解：",[24,129813],{"style":26,"src":129814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129816,129818],{"id":129817},"_82-css背景","8.2 css背景",[29,129820,129821],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[19,129823,129825],{"id":129824},"_821-背景颜色","8.2.1 背景颜色",[29,129827,129828],{},"background-color:颜色值;",[29,129830,129831],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[19,129833,129835],{"id":129834},"_822-背景图片","8.2.2 背景图片",[29,129837,129838],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[59,129840,129842],{"className":61,"code":129841,"language":63,"meta":64,"style":64},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[66,129843,129844,129850,129866],{"__ignoreMap":64},[69,129845,129846,129848],{"class":71,"line":72},[69,129847,442],{"class":348},[69,129849,113],{"class":86},[69,129851,129852,129855,129857,129859,129861,129864],{"class":71,"line":79},[69,129853,129854],{"class":90},"  background-image",[69,129856,94],{"class":86},[69,129858,62952],{"class":90},[69,129860,1398],{"class":86},[69,129862,129863],{"class":6458},"images\u002Fbg.png",[69,129865,3963],{"class":86},[69,129867,129868],{"class":71,"line":106},[69,129869,142],{"class":86},[1530,129871,129872,129881],{},[1533,129873,129874],{},[1536,129875,129876,129879],{},[1539,129877,129878],{"align":1202},"参数值",[1539,129880,103917],{"align":1202},[1576,129882,129883,129890],{},[1536,129884,129885,129887],{},[1581,129886,55964],{"align":1202},[1581,129888,129889],{"align":1202},"无背景图（默认的）",[1536,129891,129892,129894],{},[1581,129893,62952],{"align":1202},[1581,129895,129896],{"align":1202},"使用绝对或相对地址指定背景图像",[59,129898,129899],{"className":61,"code":129841,"language":63,"meta":64,"style":64},[66,129900,129901,129907,129921],{"__ignoreMap":64},[69,129902,129903,129905],{"class":71,"line":72},[69,129904,442],{"class":348},[69,129906,113],{"class":86},[69,129908,129909,129911,129913,129915,129917,129919],{"class":71,"line":79},[69,129910,129854],{"class":90},[69,129912,94],{"class":86},[69,129914,62952],{"class":90},[69,129916,1398],{"class":86},[69,129918,129863],{"class":6458},[69,129920,3963],{"class":86},[69,129922,129923],{"class":71,"line":106},[69,129924,142],{"class":86},[29,129926,129927],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[19,129929,129931],{"id":129930},"_823-背景平铺","8.2.3 背景平铺",[59,129933,129935],{"className":61,"code":129934,"language":63,"meta":64,"style":64},"div {\n  background-repeat: no-repeat;\n}\n",[66,129936,129937,129943,129954],{"__ignoreMap":64},[69,129938,129939,129941],{"class":71,"line":72},[69,129940,442],{"class":348},[69,129942,113],{"class":86},[69,129944,129945,129948,129950,129952],{"class":71,"line":79},[69,129946,129947],{"class":90},"  background-repeat",[69,129949,94],{"class":86},[69,129951,62962],{"class":90},[69,129953,130],{"class":86},[69,129955,129956],{"class":71,"line":106},[69,129957,142],{"class":86},[1530,129959,129960,129968],{},[1533,129961,129962],{},[1536,129963,129964,129966],{},[1539,129965,129878],{"align":1202},[1539,129967,103917],{"align":1202},[1576,129969,129970,129978,129985,129993],{},[1536,129971,129972,129975],{},[1581,129973,129974],{"align":1202},"repeat",[1581,129976,129977],{"align":1202},"背景图像在纵向和横向上平铺（默认的）",[1536,129979,129980,129982],{},[1581,129981,62962],{"align":1202},[1581,129983,129984],{"align":1202},"背景图像不平铺",[1536,129986,129987,129990],{},[1581,129988,129989],{"align":1202},"repeat-x",[1581,129991,129992],{"align":1202},"背景图像在横向上平铺",[1536,129994,129995,129998],{},[1581,129996,129997],{"align":1202},"repeat-y",[1581,129999,130000],{"align":1202},"背景图像在纵向平铺",[19,130002,130004],{"id":130003},"_824-背景图片位置","8.2.4 背景图片位置",[59,130006,130008],{"className":61,"code":130007,"language":63,"meta":64,"style":64},"\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",[66,130009,130010,130015,130021,130035,130039,130044,130050,130066,130070,130075,130081,130095],{"__ignoreMap":64},[69,130011,130012],{"class":71,"line":72},[69,130013,130014],{"class":75},"\u002F* 方位名词 *\u002F\n",[69,130016,130017,130019],{"class":71,"line":79},[69,130018,442],{"class":348},[69,130020,113],{"class":86},[69,130022,130023,130026,130028,130030,130033],{"class":71,"line":106},[69,130024,130025],{"class":90},"  background-position",[69,130027,94],{"class":86},[69,130029,52823],{"class":90},[69,130031,130032],{"class":90}," top",[69,130034,130],{"class":86},[69,130036,130037],{"class":71,"line":116},[69,130038,142],{"class":86},[69,130040,130041],{"class":71,"line":133},[69,130042,130043],{"class":75},"\u002F* 精确单位 *\u002F\n",[69,130045,130046,130048],{"class":71,"line":139},[69,130047,442],{"class":348},[69,130049,113],{"class":86},[69,130051,130052,130054,130056,130058,130060,130062,130064],{"class":71,"line":401},[69,130053,130025],{"class":90},[69,130055,94],{"class":86},[69,130057,2087],{"class":90},[69,130059,100],{"class":82},[69,130061,58730],{"class":90},[69,130063,100],{"class":82},[69,130065,130],{"class":86},[69,130067,130068],{"class":71,"line":470},[69,130069,142],{"class":86},[69,130071,130072],{"class":71,"line":475},[69,130073,130074],{"class":75},"\u002F* 混合单位 *\u002F\n",[69,130076,130077,130079],{"class":71,"line":482},[69,130078,442],{"class":348},[69,130080,113],{"class":86},[69,130082,130083,130085,130087,130089,130091,130093],{"class":71,"line":497},[69,130084,130025],{"class":90},[69,130086,94],{"class":86},[69,130088,2087],{"class":90},[69,130090,100],{"class":82},[69,130092,18383],{"class":90},[69,130094,130],{"class":86},[69,130096,130097],{"class":71,"line":502},[69,130098,142],{"class":86},[29,130100,130101],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1530,130103,130104,130112],{},[1533,130105,130106],{},[1536,130107,130108,130110],{},[1539,130109,129878],{"align":1202},[1539,130111,27106],{"align":1202},[1576,130113,130114,130121],{},[1536,130115,130116,130118],{},[1581,130117,53196],{"align":1202},[1581,130119,130120],{"align":1202},"百分数|由浮点数和单位标识符组成的长度值",[1536,130122,130123,130126],{},[1581,130124,130125],{"align":1202},"position",[1581,130127,130128],{"align":1202},"top|center|bottom|left|center|right 方位名词",[29,130130,130131],{},"其他说明：",[29,130133,130134],{},"①参数是方位名词",[29,130136,130137],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[29,130139,130140],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[29,130142,130143],{},"②参数是精确单位",[29,130145,130146],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[29,130148,130149],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[29,130151,130152],{},"③参数是混合单位",[29,130154,130155],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[19,130157,130159],{"id":130158},"_825-背景图片固定","8.2.5 背景图片固定",[59,130161,130163],{"className":61,"code":130162,"language":63,"meta":64,"style":64},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[66,130164,130165,130170,130176,130188,130192,130197,130203,130213],{"__ignoreMap":64},[69,130166,130167],{"class":71,"line":72},[69,130168,130169],{"class":75},"\u002F* 背景滚动（默认） *\u002F\n",[69,130171,130172,130174],{"class":71,"line":79},[69,130173,442],{"class":348},[69,130175,113],{"class":86},[69,130177,130178,130181,130183,130186],{"class":71,"line":106},[69,130179,130180],{"class":90},"  background-attachment",[69,130182,94],{"class":86},[69,130184,130185],{"class":90},"scroll",[69,130187,130],{"class":86},[69,130189,130190],{"class":71,"line":116},[69,130191,142],{"class":86},[69,130193,130194],{"class":71,"line":133},[69,130195,130196],{"class":75},"\u002F* 背景固定 *\u002F\n",[69,130198,130199,130201],{"class":71,"line":139},[69,130200,442],{"class":348},[69,130202,113],{"class":86},[69,130204,130205,130207,130209,130211],{"class":71,"line":401},[69,130206,130180],{"class":90},[69,130208,94],{"class":86},[69,130210,87454],{"class":90},[69,130212,130],{"class":86},[69,130214,130215],{"class":71,"line":470},[69,130216,142],{"class":86},[1530,130218,130219,130228],{},[1533,130220,130221],{},[1536,130222,130223,130226],{},[1539,130224,130225],{"align":1202},"参数",[1539,130227,103917],{"align":1202},[1576,130229,130230,130237],{},[1536,130231,130232,130234],{},[1581,130233,130185],{"align":1202},[1581,130235,130236],{"align":1202},"背景图像是随对象内容滚动",[1536,130238,130239,130241],{},[1581,130240,87454],{"align":1202},[1581,130242,130243],{"align":1202},"背景图像固定",[19,130245,130247],{"id":130246},"_826-背景样式合写","8.2.6 背景样式合写",[59,130249,130251],{"className":61,"code":130250,"language":63,"meta":64,"style":64},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[66,130252,130253,130258,130264,130292],{"__ignoreMap":64},[69,130254,130255],{"class":71,"line":72},[69,130256,130257],{"class":75},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[69,130259,130260,130262],{"class":71,"line":79},[69,130261,442],{"class":348},[69,130263,113],{"class":86},[69,130265,130266,130268,130270,130272,130275,130277,130279,130281,130283,130286,130288,130290],{"class":71,"line":106},[69,130267,71834],{"class":90},[69,130269,94],{"class":86},[69,130271,62068],{"class":90},[69,130273,130274],{"class":90}," url",[69,130276,1398],{"class":86},[69,130278,129863],{"class":6458},[69,130280,14955],{"class":86},[69,130282,62962],{"class":90},[69,130284,130285],{"class":90}," fixed",[69,130287,18383],{"class":90},[69,130289,130032],{"class":90},[69,130291,130],{"class":86},[69,130293,130294],{"class":71,"line":116},[69,130295,142],{"class":86},[19,130297,130299],{"id":130298},"_827-背景色半透明","8.2.7 背景色半透明",[59,130301,130303],{"className":61,"code":130302,"language":63,"meta":64,"style":64},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[66,130304,130305,130311,130337],{"__ignoreMap":64},[69,130306,130307,130309],{"class":71,"line":72},[69,130308,442],{"class":348},[69,130310,113],{"class":86},[69,130312,130313,130315,130317,130319,130321,130323,130325,130327,130329,130331,130333,130335],{"class":71,"line":79},[69,130314,71834],{"class":90},[69,130316,94],{"class":86},[69,130318,56337],{"class":90},[69,130320,1398],{"class":86},[69,130322,1583],{"class":90},[69,130324,13677],{"class":86},[69,130326,1583],{"class":90},[69,130328,13677],{"class":86},[69,130330,1583],{"class":90},[69,130332,13677],{"class":86},[69,130334,101742],{"class":90},[69,130336,3963],{"class":86},[69,130338,130339],{"class":71,"line":106},[69,130340,142],{"class":86},[29,130342,100617],{},[29,130344,130345],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[29,130347,130348],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[29,130350,130351],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[29,130353,130354],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[19,130356,130358],{"id":130357},"_828-总结","8.2.8 总结",[1530,130360,130361,130372],{},[1533,130362,130363],{},[1536,130364,130365,130368,130370],{},[1539,130366,130367],{"align":1202},"属性",[1539,130369,103917],{"align":1202},[1539,130371,1544],{"align":1202},[1576,130373,130374,130385,130396,130407,130418,130429,130440],{},[1536,130375,130376,130379,130382],{},[1581,130377,130378],{"align":1202},"background-color",[1581,130380,130381],{"align":1202},"背景颜色",[1581,130383,130384],{"align":1202},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1536,130386,130387,130390,130393],{},[1581,130388,130389],{"align":1202},"background-image",[1581,130391,130392],{"align":1202},"背景图片",[1581,130394,130395],{"align":1202},"url(图片路径)",[1536,130397,130398,130401,130404],{},[1581,130399,130400],{"align":1202},"background-repeat",[1581,130402,130403],{"align":1202},"是否平铺",[1581,130405,130406],{"align":1202},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1536,130408,130409,130412,130415],{},[1581,130410,130411],{"align":1202},"background-position",[1581,130413,130414],{"align":1202},"背景位置",[1581,130416,130417],{"align":1202},"length\u002Fposition 分别是x和y坐标",[1536,130419,130420,130423,130426],{},[1581,130421,130422],{"align":1202},"background-attachment",[1581,130424,130425],{"align":1202},"背景附着",[1581,130427,130428],{"align":1202},"scroll(背景滚动) \u002Ffixed (背景固定)",[1536,130430,130431,130434,130437],{},[1581,130432,130433],{"align":1202},"背景简写",[1581,130435,130436],{"align":1202},"书写更简单",[1581,130438,130439],{"align":1202},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1536,130441,130442,130445,130448],{},[1581,130443,130444],{"align":1202},"背景半透明",[1581,130446,130447],{"align":1202},"背景颜色半透明",[1581,130449,130450],{"align":1202},"background: rgba(0,0,0.3); 后面必须是4个值",[29,130452,130453],{},"颜色渐变：",[24,130455],{"style":26,"src":130456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[24,130458],{"style":26,"src":130459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[19,130461,130463],{"id":130462},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[59,130465,130467],{"className":997,"code":130466,"language":999,"meta":64,"style":64},"\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",[66,130468,130469,130484,130503,130522,130541,130560,130579],{"__ignoreMap":64},[69,130470,130471,130473,130475,130477,130479,130482],{"class":71,"line":72},[69,130472,1011],{"class":86},[69,130474,442],{"class":348},[69,130476,1016],{"class":109},[69,130478,1019],{"class":86},[69,130480,130481],{"class":1022},"\"nav\"",[69,130483,1026],{"class":86},[69,130485,130486,130488,130490,130492,130494,130496,130499,130501],{"class":71,"line":79},[69,130487,53372],{"class":86},[69,130489,187],{"class":348},[69,130491,62283],{"class":109},[69,130493,1019],{"class":86},[69,130495,62288],{"class":1022},[69,130497,130498],{"class":86},">五彩导航1\u003C\u002F",[69,130500,187],{"class":348},[69,130502,1026],{"class":86},[69,130504,130505,130507,130509,130511,130513,130515,130518,130520],{"class":71,"line":106},[69,130506,53372],{"class":86},[69,130508,187],{"class":348},[69,130510,62283],{"class":109},[69,130512,1019],{"class":86},[69,130514,62288],{"class":1022},[69,130516,130517],{"class":86},">五彩导航2\u003C\u002F",[69,130519,187],{"class":348},[69,130521,1026],{"class":86},[69,130523,130524,130526,130528,130530,130532,130534,130537,130539],{"class":71,"line":116},[69,130525,53372],{"class":86},[69,130527,187],{"class":348},[69,130529,62283],{"class":109},[69,130531,1019],{"class":86},[69,130533,62288],{"class":1022},[69,130535,130536],{"class":86},">五彩导航3\u003C\u002F",[69,130538,187],{"class":348},[69,130540,1026],{"class":86},[69,130542,130543,130545,130547,130549,130551,130553,130556,130558],{"class":71,"line":133},[69,130544,53372],{"class":86},[69,130546,187],{"class":348},[69,130548,62283],{"class":109},[69,130550,1019],{"class":86},[69,130552,62288],{"class":1022},[69,130554,130555],{"class":86},">五彩导航4\u003C\u002F",[69,130557,187],{"class":348},[69,130559,1026],{"class":86},[69,130561,130562,130564,130566,130568,130570,130572,130575,130577],{"class":71,"line":139},[69,130563,53372],{"class":86},[69,130565,187],{"class":348},[69,130567,62283],{"class":109},[69,130569,1019],{"class":86},[69,130571,62288],{"class":1022},[69,130573,130574],{"class":86},">五彩导航5\u003C\u002F",[69,130576,187],{"class":348},[69,130578,1026],{"class":86},[69,130580,130581,130583,130585],{"class":71,"line":401},[69,130582,1036],{"class":86},[69,130584,442],{"class":348},[69,130586,1026],{"class":86},[59,130588,130590],{"className":61,"code":130589,"language":63,"meta":64,"style":64},".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",[66,130591,130592,130601,130611,130623,130635,130645,130657,130667,130671,130696,130719,130742,130765],{"__ignoreMap":64},[69,130593,130594,130597,130599],{"class":71,"line":72},[69,130595,130596],{"class":109},".nav",[69,130598,2650],{"class":348},[69,130600,113],{"class":86},[69,130602,130603,130605,130607,130609],{"class":71,"line":79},[69,130604,129381],{"class":90},[69,130606,94],{"class":86},[69,130608,73604],{"class":90},[69,130610,130],{"class":86},[69,130612,130613,130615,130617,130619,130621],{"class":71,"line":106},[69,130614,385],{"class":90},[69,130616,94],{"class":86},[69,130618,2204],{"class":90},[69,130620,100],{"class":82},[69,130622,130],{"class":86},[69,130624,130625,130627,130629,130631,130633],{"class":71,"line":116},[69,130626,72010],{"class":90},[69,130628,94],{"class":86},[69,130630,2243],{"class":90},[69,130632,100],{"class":82},[69,130634,130],{"class":86},[69,130636,130637,130639,130641,130643],{"class":71,"line":133},[69,130638,71750],{"class":90},[69,130640,94],{"class":86},[69,130642,52823],{"class":90},[69,130644,130],{"class":86},[69,130646,130647,130649,130651,130653,130655],{"class":71,"line":139},[69,130648,128452],{"class":90},[69,130650,94],{"class":86},[69,130652,2243],{"class":90},[69,130654,100],{"class":82},[69,130656,130],{"class":86},[69,130658,130659,130661,130663,130665],{"class":71,"line":401},[69,130660,871],{"class":90},[69,130662,94],{"class":86},[69,130664,62068],{"class":90},[69,130666,130],{"class":86},[69,130668,130669],{"class":71,"line":470},[69,130670,142],{"class":86},[69,130672,130673,130675,130677,130680,130682,130684,130687,130689,130691,130693],{"class":71,"line":475},[69,130674,130596],{"class":109},[69,130676,2650],{"class":348},[69,130678,130679],{"class":109},":nth-child",[69,130681,1398],{"class":86},[69,130683,1609],{"class":90},[69,130685,130686],{"class":86},") { ",[69,130688,130378],{"class":90},[69,130690,94],{"class":86},[69,130692,129796],{"class":90},[69,130694,130695],{"class":86},"; }\n",[69,130697,130698,130700,130702,130704,130706,130708,130710,130712,130714,130717],{"class":71,"line":482},[69,130699,130596],{"class":109},[69,130701,2650],{"class":348},[69,130703,130679],{"class":109},[69,130705,1398],{"class":86},[69,130707,1471],{"class":90},[69,130709,130686],{"class":86},[69,130711,130378],{"class":90},[69,130713,94],{"class":86},[69,130715,130716],{"class":90},"#ff0000",[69,130718,130695],{"class":86},[69,130720,130721,130723,130725,130727,130729,130731,130733,130735,130737,130740],{"class":71,"line":497},[69,130722,130596],{"class":109},[69,130724,2650],{"class":348},[69,130726,130679],{"class":109},[69,130728,1398],{"class":86},[69,130730,1465],{"class":90},[69,130732,130686],{"class":86},[69,130734,130378],{"class":90},[69,130736,94],{"class":86},[69,130738,130739],{"class":90},"#00a4ff",[69,130741,130695],{"class":86},[69,130743,130744,130746,130748,130750,130752,130754,130756,130758,130760,130763],{"class":71,"line":502},[69,130745,130596],{"class":109},[69,130747,2650],{"class":348},[69,130749,130679],{"class":109},[69,130751,1398],{"class":86},[69,130753,1684],{"class":90},[69,130755,130686],{"class":86},[69,130757,130378],{"class":90},[69,130759,94],{"class":86},[69,130761,130762],{"class":90},"#ff00ff",[69,130764,130695],{"class":86},[69,130766,130767,130769,130771,130773,130775,130777,130779,130781,130783,130786],{"class":71,"line":509},[69,130768,130596],{"class":109},[69,130770,2650],{"class":348},[69,130772,130679],{"class":109},[69,130774,1398],{"class":86},[69,130776,1709],{"class":90},[69,130778,130686],{"class":86},[69,130780,130378],{"class":90},[69,130782,94],{"class":86},[69,130784,130785],{"class":90},"#00ff00",[69,130787,130695],{"class":86},[14,130789,130791],{"id":130790},"_83-css三大特性","8.3 css三大特性",[19,130793,130795],{"id":130794},"_831-层叠性","8.3.1 层叠性",[29,130797,130798],{},"为了解决样式冲突问题",[29,130800,130801],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[29,130803,130804],{},"   ②样式不冲突，不会层叠",[19,130806,130808],{"id":130807},"_832-继承性","8.3.2 继承性",[29,130810,130811],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[29,130813,130814],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[59,130816,130818],{"className":61,"code":130817,"language":63,"meta":64,"style":64},"p {\n  color: #333;\n}\n",[66,130819,130820,130826,130836],{"__ignoreMap":64},[69,130821,130822,130824],{"class":71,"line":72},[69,130823,29],{"class":348},[69,130825,113],{"class":86},[69,130827,130828,130830,130832,130834],{"class":71,"line":79},[69,130829,871],{"class":90},[69,130831,94],{"class":86},[69,130833,63595],{"class":90},[69,130835,130],{"class":86},[69,130837,130838],{"class":71,"line":106},[69,130839,142],{"class":86},[24,130841],{"style":26,"src":130842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[29,130844,130845],{},"解释：①行高可以跟单位也可以不跟单位",[29,130847,130848],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[29,130850,130851],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[29,130853,130854],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[19,130856,130858],{"id":130857},"_833-优先级","8.3.3 优先级",[37,130860,130861,130864],{},[40,130862,130863],{},"选择器相同，则执行层叠性",[40,130865,130866],{},"选择器不同，则根据选择器权重执行",[1530,130868,130869,130879],{},[1533,130870,130871],{},[1536,130872,130873,130876],{},[1539,130874,130875],{"align":1202},"选择器",[1539,130877,130878],{"align":1202},"选择器权重",[1576,130880,130881,130889,130897,130905,130913,130921],{},[1536,130882,130883,130886],{},[1581,130884,130885],{"align":1202},"继承 或者*",[1581,130887,130888],{"align":1202},"0，0，0，0",[1536,130890,130891,130894],{},[1581,130892,130893],{"align":1202},"标签选择器",[1581,130895,130896],{"align":1202},"0，0，0，1",[1536,130898,130899,130902],{},[1581,130900,130901],{"align":1202},"类选择器，伪类选择器",[1581,130903,130904],{"align":1202},"0，0，1，0",[1536,130906,130907,130910],{},[1581,130908,130909],{"align":1202},"ID选择器",[1581,130911,130912],{"align":1202},"0，1，0，0",[1536,130914,130915,130918],{},[1581,130916,130917],{"align":1202},"行内样式",[1581,130919,130920],{"align":1202},"1，0，0，0",[1536,130922,130923,130926],{},[1581,130924,130925],{"align":1202},"！important",[1581,130927,130928],{"align":1202},"无穷大",[29,130930,130931],{},"! important用法：",[59,130933,130935],{"className":61,"code":130934,"language":63,"meta":64,"style":64},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[66,130936,130937,130942,130948,130961,130965,130970,130976,130986],{"__ignoreMap":64},[69,130938,130939],{"class":71,"line":72},[69,130940,130941],{"class":75},"\u002F* !important 拥有最高优先级 *\u002F\n",[69,130943,130944,130946],{"class":71,"line":79},[69,130945,442],{"class":348},[69,130947,113],{"class":86},[69,130949,130950,130952,130954,130956,130959],{"class":71,"line":106},[69,130951,871],{"class":90},[69,130953,94],{"class":86},[69,130955,52875],{"class":90},[69,130957,130958],{"class":82}," !important",[69,130960,130],{"class":86},[69,130962,130963],{"class":71,"line":116},[69,130964,142],{"class":86},[69,130966,130967],{"class":71,"line":133},[69,130968,130969],{"class":75},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[69,130971,130972,130974],{"class":71,"line":139},[69,130973,442],{"class":348},[69,130975,113],{"class":86},[69,130977,130978,130980,130982,130984],{"class":71,"line":401},[69,130979,871],{"class":90},[69,130981,94],{"class":86},[69,130983,876],{"class":90},[69,130985,130],{"class":86},[69,130987,130988],{"class":71,"line":470},[69,130989,142],{"class":86},[29,130991,130992],{},"优先级注意点：",[29,130994,130995],{},"①权重是有4组数字组成,但是不会有进位",[29,130997,130998],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[29,131000,131001],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[29,131003,131004],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[29,131006,131007],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[29,131009,131010],{},"⑥复合选择器",[1530,131012,131013,131023],{},[1533,131014,131015],{},[1536,131016,131017,131020],{},[1539,131018,131019],{"align":1202},"div ul li",[1539,131021,131022],{"align":1202},"0,0,0,3",[1576,131024,131025,131033,131041],{},[1536,131026,131027,131030],{},[1581,131028,131029],{"align":1202},".nav ul li",[1581,131031,131032],{"align":1202},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1536,131034,131035,131038],{},[1581,131036,131037],{"align":1202},"a:hover",[1581,131039,131040],{"align":1202},"0,0,1,1",[1536,131042,131043,131046],{},[1581,131044,131045],{"align":1202},".nav a",[1581,131047,131040],{"align":1202},[1297,131049,131050],{},"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":64,"searchDepth":79,"depth":79,"links":131052},[131053,131061,131072],{"id":129161,"depth":79,"text":129162,"children":131054},[131055,131056,131057,131058,131059,131060],{"id":129174,"depth":106,"text":129175},{"id":129246,"depth":106,"text":129247},{"id":129318,"depth":106,"text":129319},{"id":129349,"depth":106,"text":129350},{"id":129356,"depth":106,"text":129357},{"id":129509,"depth":106,"text":129510},{"id":129817,"depth":79,"text":129818,"children":131062},[131063,131064,131065,131066,131067,131068,131069,131070,131071],{"id":129824,"depth":106,"text":129825},{"id":129834,"depth":106,"text":129835},{"id":129930,"depth":106,"text":129931},{"id":130003,"depth":106,"text":130004},{"id":130158,"depth":106,"text":130159},{"id":130246,"depth":106,"text":130247},{"id":130298,"depth":106,"text":130299},{"id":130357,"depth":106,"text":130358},{"id":130462,"depth":106,"text":130463},{"id":130790,"depth":79,"text":130791,"children":131073},[131074,131075,131076],{"id":130794,"depth":106,"text":130795},{"id":130807,"depth":106,"text":130808},{"id":130857,"depth":106,"text":130858},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129153,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131083,"title":131084,"body":131085,"description":1322,"extension":1323,"meta":132668,"navigation":1325,"path":132669,"seo":132670,"stem":132671,"__hash__":132672},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131086,"toc":132647},[131087,131090,131094,131097,131100,131103,131106,131109,131112,131115,131119,131127,131164,131200,131203,131217,131222,131256,131259,131352,131357,131360,131390,131393,131398,131406,131410,131417,131463,131507,131512,131515,131518,131521,131524,131527,131530,131532,131535,131539,131544,131588,131593,131596,131599,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,131899,131903,131908,131911,131914,131945,131948,131965,131970,132022,132082,132087,132141,132179,132183,132187,132190,132194,132202,132205,132207,132218,132223,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,131088,131084],{"id":131089},"_9-css盒模型浮动与切图",[14,131091,131093],{"id":131092},"_91-盒子模型","9.1 盒子模型",[29,131095,131096],{},"利用盒子来设计网页",[29,131098,131099],{},"盒子包含：边框、外边距、内边距、实际内容",[29,131101,131102],{},"网页布局设置：",[29,131104,131105],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[29,131107,131108],{},"②利用css设置好盒子样式，然后摆放到相应位置",[29,131110,131111],{},"③往盒子里装内容",[24,131113],{"style":26,"src":131114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[19,131116,131118],{"id":131117},"_911-边框border","9.1.1 边框（border）",[37,131120,131121,131124],{},[40,131122,131123],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[40,131125,131126],{},"语法",[59,131128,131130],{"className":61,"code":131129,"language":63,"meta":64,"style":64},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[66,131131,131132,131137,131143,131160],{"__ignoreMap":64},[69,131133,131134],{"class":71,"line":72},[69,131135,131136],{"class":75},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[69,131138,131139,131141],{"class":71,"line":79},[69,131140,442],{"class":348},[69,131142,113],{"class":86},[69,131144,131145,131147,131149,131151,131153,131155,131158],{"class":71,"line":106},[69,131146,72118],{"class":90},[69,131148,94],{"class":86},[69,131150,1609],{"class":90},[69,131152,100],{"class":82},[69,131154,52752],{"class":90},[69,131156,131157],{"class":90}," #ccc",[69,131159,130],{"class":86},[69,131161,131162],{"class":71,"line":116},[69,131163,142],{"class":86},[1530,131165,131166,131174],{},[1533,131167,131168],{},[1536,131169,131170,131172],{},[1539,131171,130367],{"align":1202},[1539,131173,103917],{"align":1202},[1576,131175,131176,131184,131192],{},[1536,131177,131178,131181],{},[1581,131179,131180],{"align":1202},"border-width",[1581,131182,131183],{"align":1202},"定义边框粗细，单位是px",[1536,131185,131186,131189],{},[1581,131187,131188],{"align":1202},"border-style",[1581,131190,131191],{"align":1202},"边框的样式",[1536,131193,131194,131197],{},[1581,131195,131196],{"align":1202},"border-color",[1581,131198,131199],{"align":1202},"边框的颜色",[29,131201,131202],{},"边框样式 border-style 可以设置如下值：",[162,131204,131205,131208,131211,131214],{},[40,131206,131207],{},"none：没有边框即忽略所有边框的宽度（默认值）",[40,131209,131210],{},"solid：边框为单实线(最为常用的)",[40,131212,131213],{},"dashed：边框为虚线",[40,131215,131216],{},"dotted：边框为点线",[37,131218,131219],{"start":106},[40,131220,131221],{},"边框的合写分写",[59,131223,131224],{"className":61,"code":131129,"language":63,"meta":64,"style":64},[66,131225,131226,131230,131236,131252],{"__ignoreMap":64},[69,131227,131228],{"class":71,"line":72},[69,131229,131136],{"class":75},[69,131231,131232,131234],{"class":71,"line":79},[69,131233,442],{"class":348},[69,131235,113],{"class":86},[69,131237,131238,131240,131242,131244,131246,131248,131250],{"class":71,"line":106},[69,131239,72118],{"class":90},[69,131241,94],{"class":86},[69,131243,1609],{"class":90},[69,131245,100],{"class":82},[69,131247,52752],{"class":90},[69,131249,131157],{"class":90},[69,131251,130],{"class":86},[69,131253,131254],{"class":71,"line":116},[69,131255,142],{"class":86},[29,131257,131258],{},"边框分开写法：",[59,131260,131262],{"className":61,"code":131261,"language":63,"meta":64,"style":64},"\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",[66,131263,131264,131269,131275,131293,131311,131330,131348],{"__ignoreMap":64},[69,131265,131266],{"class":71,"line":72},[69,131267,131268],{"class":75},"\u002F* 边框分开写法 *\u002F\n",[69,131270,131271,131273],{"class":71,"line":79},[69,131272,442],{"class":348},[69,131274,113],{"class":86},[69,131276,131277,131280,131282,131284,131286,131288,131291],{"class":71,"line":106},[69,131278,131279],{"class":90},"  border-top",[69,131281,94],{"class":86},[69,131283,1609],{"class":90},[69,131285,100],{"class":82},[69,131287,52752],{"class":90},[69,131289,131290],{"class":90}," #000",[69,131292,130],{"class":86},[69,131294,131295,131298,131300,131302,131304,131306,131309],{"class":71,"line":116},[69,131296,131297],{"class":90},"  border-right",[69,131299,94],{"class":86},[69,131301,1471],{"class":90},[69,131303,100],{"class":82},[69,131305,63467],{"class":90},[69,131307,131308],{"class":90}," #333",[69,131310,130],{"class":86},[69,131312,131313,131316,131318,131320,131322,131325,131328],{"class":71,"line":133},[69,131314,131315],{"class":90},"  border-bottom",[69,131317,94],{"class":86},[69,131319,1465],{"class":90},[69,131321,100],{"class":82},[69,131323,131324],{"class":90}," dotted",[69,131326,131327],{"class":90}," #666",[69,131329,130],{"class":86},[69,131331,131332,131335,131337,131339,131341,131343,131346],{"class":71,"line":139},[69,131333,131334],{"class":90},"  border-left",[69,131336,94],{"class":86},[69,131338,1609],{"class":90},[69,131340,100],{"class":82},[69,131342,52752],{"class":90},[69,131344,131345],{"class":90}," #999",[69,131347,130],{"class":86},[69,131349,131350],{"class":71,"line":401},[69,131351,142],{"class":86},[37,131353,131354],{"start":116},[40,131355,131356],{},"表格的细线边框",[29,131358,131359],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[59,131361,131363],{"className":61,"code":131362,"language":63,"meta":64,"style":64},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[66,131364,131365,131370,131376,131386],{"__ignoreMap":64},[69,131366,131367],{"class":71,"line":72},[69,131368,131369],{"class":75},"\u002F* 表格细线边框合并 *\u002F\n",[69,131371,131372,131374],{"class":71,"line":79},[69,131373,1530],{"class":348},[69,131375,113],{"class":86},[69,131377,131378,131380,131382,131384],{"class":71,"line":106},[69,131379,71801],{"class":90},[69,131381,94],{"class":86},[69,131383,66261],{"class":90},[69,131385,130],{"class":86},[69,131387,131388],{"class":71,"line":116},[69,131389,142],{"class":86},[29,131391,131392],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[37,131394,131395],{"start":133},[40,131396,131397],{},"解决边框额外增加盒子的实际大小的方法：",[162,131399,131400,131403],{},[40,131401,131402],{},"测量盒子大小的时候,不量边框",[40,131404,131405],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[19,131407,131409],{"id":131408},"_912-内边距","9.1.2 内边距",[37,131411,131412,131415],{},[40,131413,131414],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[40,131416,131126],{},[1530,131418,131419,131429],{},[1533,131420,131421],{},[1536,131422,131423,131426],{},[1539,131424,131425],{"align":1202},"值的个数",[1539,131427,131428],{"align":1202},"表达意思",[1576,131430,131431,131439,131447,131455],{},[1536,131432,131433,131436],{},[1581,131434,131435],{"align":1202},"padding: 5px;",[1581,131437,131438],{"align":1202},"1个值，代表上下左右都有5个元素",[1536,131440,131441,131444],{},[1581,131442,131443],{"align":1202},"padding: 5px 10px;",[1581,131445,131446],{"align":1202},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1536,131448,131449,131452],{},[1581,131450,131451],{"align":1202},"padding: 5px 10px 20px;",[1581,131453,131454],{"align":1202},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1536,131456,131457,131460],{},[1581,131458,131459],{"align":1202},"padding: 5px 10px 20px 30px;",[1581,131461,131462],{"align":1202},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1530,131464,131465,131473],{},[1533,131466,131467],{},[1536,131468,131469,131471],{},[1539,131470,130367],{"align":1202},[1539,131472,103917],{"align":1202},[1576,131474,131475,131483,131491,131499],{},[1536,131476,131477,131480],{},[1581,131478,131479],{"align":1202},"padding-left",[1581,131481,131482],{"align":1202},"左内边距",[1536,131484,131485,131488],{},[1581,131486,131487],{"align":1202},"padding-right",[1581,131489,131490],{"align":1202},"右内边距",[1536,131492,131493,131496],{},[1581,131494,131495],{"align":1202},"padding-top",[1581,131497,131498],{"align":1202},"上内边距",[1536,131500,131501,131504],{},[1581,131502,131503],{"align":1202},"padding-bottom",[1581,131505,131506],{"align":1202},"下内边距",[37,131508,131509],{"start":106},[40,131510,131511],{},"内边距会影响盒子的实际大小",[29,131513,131514],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[29,131516,131517],{},"①内容和边框有了距离，添加了内边距",[29,131519,131520],{},"②padding影响了盒子实际大小",[29,131522,131523],{},"内边距对盒子大小的影响：",[29,131525,131526],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[29,131528,131529],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[29,131531,96441],{},[29,131533,131534],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[19,131536,131538],{"id":131537},"_913-外边距","9.1.3 外边距",[37,131540,131541],{},[40,131542,131543],{},"控制盒子与盒子之间的距离",[1530,131545,131546,131554],{},[1533,131547,131548],{},[1536,131549,131550,131552],{},[1539,131551,130367],{"align":1202},[1539,131553,103917],{"align":1202},[1576,131555,131556,131564,131572,131580],{},[1536,131557,131558,131561],{},[1581,131559,131560],{"align":1202},"margin-left",[1581,131562,131563],{"align":1202},"左外边距",[1536,131565,131566,131569],{},[1581,131567,131568],{"align":1202},"margin-right",[1581,131570,131571],{"align":1202},"右外边距",[1536,131573,131574,131577],{},[1581,131575,131576],{"align":1202},"margin-top",[1581,131578,131579],{"align":1202},"上外边距",[1536,131581,131582,131585],{},[1581,131583,131584],{"align":1202},"margin-bottom",[1581,131586,131587],{"align":1202},"下外边距",[37,131589,131590],{"start":79},[40,131591,131592],{},"外边距可以让块级盒子水平居中的两个条件：",[29,131594,131595],{},"①盒子必须指定了宽度（width）",[29,131597,131598],{},"②盒子左右的外边距都设置为 auto",[59,131600,131602],{"className":61,"code":131601,"language":63,"meta":64,"style":64},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[66,131603,131604,131609,131615,131630],{"__ignoreMap":64},[69,131605,131606],{"class":71,"line":72},[69,131607,131608],{"class":75},"\u002F* margin 复合写法（同上） *\u002F\n",[69,131610,131611,131613],{"class":71,"line":79},[69,131612,378],{"class":109},[69,131614,113],{"class":86},[69,131616,131617,131619,131621,131623,131625,131627],{"class":71,"line":106},[69,131618,71694],{"class":90},[69,131620,94],{"class":86},[69,131622,1583],{"class":90},[69,131624,52787],{"class":90},[69,131626,366],{"class":86},[69,131628,131629],{"class":75},"\u002F* 块级盒子水平居中 *\u002F\n",[69,131631,131632],{"class":71,"line":116},[69,131633,142],{"class":86},[37,131635,131636],{"start":106},[40,131637,131638],{},"外边距塌陷问题",[29,131640,131641],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[24,131643],{"style":26,"src":131644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[29,131646,131647],{},"解决方案：",[29,131649,131650],{},"①可以为父亲元素定义上边距",[59,131652,131653],{"className":61,"code":131601,"language":63,"meta":64,"style":64},[66,131654,131655,131659,131665,131679],{"__ignoreMap":64},[69,131656,131657],{"class":71,"line":72},[69,131658,131608],{"class":75},[69,131660,131661,131663],{"class":71,"line":79},[69,131662,378],{"class":109},[69,131664,113],{"class":86},[69,131666,131667,131669,131671,131673,131675,131677],{"class":71,"line":106},[69,131668,71694],{"class":90},[69,131670,94],{"class":86},[69,131672,1583],{"class":90},[69,131674,52787],{"class":90},[69,131676,366],{"class":86},[69,131678,131629],{"class":75},[69,131680,131681],{"class":71,"line":116},[69,131682,142],{"class":86},[29,131684,131685],{},"②可以为父亲元素定义上内边距",[29,131687,131688],{},"③可以为父亲元素添加overflow:hidden",[24,131690],{"style":26,"src":131691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[59,131693,131694],{"className":61,"code":131601,"language":63,"meta":64,"style":64},[66,131695,131696,131700,131706,131720],{"__ignoreMap":64},[69,131697,131698],{"class":71,"line":72},[69,131699,131608],{"class":75},[69,131701,131702,131704],{"class":71,"line":79},[69,131703,378],{"class":109},[69,131705,113],{"class":86},[69,131707,131708,131710,131712,131714,131716,131718],{"class":71,"line":106},[69,131709,71694],{"class":90},[69,131711,94],{"class":86},[69,131713,1583],{"class":90},[69,131715,52787],{"class":90},[69,131717,366],{"class":86},[69,131719,131629],{"class":75},[69,131721,131722],{"class":71,"line":116},[69,131723,142],{"class":86},[24,131725],{"style":26,"src":131726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[29,131728,131729],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[29,131731,131732],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[19,131734,131736],{"id":131735},"_914-清除内外边距","9.1.4 清除内外边距",[29,131738,131739],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[59,131741,131742],{"className":61,"code":131601,"language":63,"meta":64,"style":64},[66,131743,131744,131748,131754,131768],{"__ignoreMap":64},[69,131745,131746],{"class":71,"line":72},[69,131747,131608],{"class":75},[69,131749,131750,131752],{"class":71,"line":79},[69,131751,378],{"class":109},[69,131753,113],{"class":86},[69,131755,131756,131758,131760,131762,131764,131766],{"class":71,"line":106},[69,131757,71694],{"class":90},[69,131759,94],{"class":86},[69,131761,1583],{"class":90},[69,131763,52787],{"class":90},[69,131765,366],{"class":86},[69,131767,131629],{"class":75},[69,131769,131770],{"class":71,"line":116},[69,131771,142],{"class":86},[29,131773,131774],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[19,131776,131778],{"id":131777},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[162,131780,131781,131784,131787,131790,131793,131796],{},[40,131782,131783],{},"文件→打开 ：可以打开我们要测量的图片",[40,131785,131786],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[40,131788,131789],{},"右击标尺，把里面的单位改为像素",[40,131791,131792],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[40,131794,131795],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[40,131797,131798],{},"用选区拖动 可以测量大小",[24,131800],{"style":26,"src":131801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[162,131803,131804,131807],{},[40,131805,131806],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[40,131808,131809],{},"吸管取色工具",[24,131811],{"style":26,"src":131812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[19,131814,131816],{"id":131815},"_916-案例","9.1.6 案例",[37,131818,131819],{},[40,131820,131821],{},"小米商品",[24,131823],{"style":26,"src":131824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[59,131826,131827],{"className":61,"code":131601,"language":63,"meta":64,"style":64},[66,131828,131829,131833,131839,131853],{"__ignoreMap":64},[69,131830,131831],{"class":71,"line":72},[69,131832,131608],{"class":75},[69,131834,131835,131837],{"class":71,"line":79},[69,131836,378],{"class":109},[69,131838,113],{"class":86},[69,131840,131841,131843,131845,131847,131849,131851],{"class":71,"line":106},[69,131842,71694],{"class":90},[69,131844,94],{"class":86},[69,131846,1583],{"class":90},[69,131848,52787],{"class":90},[69,131850,366],{"class":86},[69,131852,131629],{"class":75},[69,131854,131855],{"class":71,"line":116},[69,131856,142],{"class":86},[37,131858,131859],{"start":79},[40,131860,131861],{},"快报模块",[24,131863],{"style":26,"src":131864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[59,131866,131867],{"className":997,"code":998,"language":999,"meta":64,"style":64},[66,131868,131869,131873,131887,131891],{"__ignoreMap":64},[69,131870,131871],{"class":71,"line":72},[69,131872,1006],{"class":75},[69,131874,131875,131877,131879,131881,131883,131885],{"class":71,"line":79},[69,131876,1011],{"class":86},[69,131878,442],{"class":348},[69,131880,1016],{"class":109},[69,131882,1019],{"class":86},[69,131884,1023],{"class":1022},[69,131886,1026],{"class":86},[69,131888,131889],{"class":71,"line":106},[69,131890,1031],{"class":86},[69,131892,131893,131895,131897],{"class":71,"line":116},[69,131894,1036],{"class":86},[69,131896,442],{"class":348},[69,131898,1026],{"class":86},[19,131900,131902],{"id":131901},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[37,131904,131905],{},[40,131906,131907],{},"圆角边框",[29,131909,131910],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[24,131912],{"style":26,"src":131913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[59,131915,131917],{"className":61,"code":131916,"language":63,"meta":64,"style":64},"div {\n  border: 1px solid #ccc;\n}\n",[66,131918,131919,131925,131941],{"__ignoreMap":64},[69,131920,131921,131923],{"class":71,"line":72},[69,131922,442],{"class":348},[69,131924,113],{"class":86},[69,131926,131927,131929,131931,131933,131935,131937,131939],{"class":71,"line":79},[69,131928,72118],{"class":90},[69,131930,94],{"class":86},[69,131932,1609],{"class":90},[69,131934,100],{"class":82},[69,131936,52752],{"class":90},[69,131938,131157],{"class":90},[69,131940,130],{"class":86},[69,131942,131943],{"class":71,"line":106},[69,131944,142],{"class":86},[29,131946,131947],{},"解释:",[162,131949,131950,131953,131956,131959,131962],{},[40,131951,131952],{},"参数值可以为数值或百分比的形式",[40,131954,131955],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[40,131957,131958],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[40,131960,131961],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[40,131963,131964],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[37,131966,131967],{"start":79},[40,131968,131969],{},"盒子阴影",[59,131971,131973],{"className":61,"code":131972,"language":63,"meta":64,"style":64},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[66,131974,131975,131981,132018],{"__ignoreMap":64},[69,131976,131977,131979],{"class":71,"line":72},[69,131978,442],{"class":348},[69,131980,113],{"class":86},[69,131982,131983,131986,131988,131990,131992,131994,131996,131998,132000,132002,132004,132006,132008,132010,132012,132014,132016],{"class":71,"line":79},[69,131984,131985],{"class":90},"  box-shadow",[69,131987,94],{"class":86},[69,131989,1583],{"class":90},[69,131991,15995],{"class":90},[69,131993,100],{"class":82},[69,131995,3282],{"class":90},[69,131997,100],{"class":82},[69,131999,79988],{"class":90},[69,132001,1398],{"class":86},[69,132003,1583],{"class":90},[69,132005,13677],{"class":86},[69,132007,1583],{"class":90},[69,132009,13677],{"class":86},[69,132011,1583],{"class":90},[69,132013,13677],{"class":86},[69,132015,87431],{"class":90},[69,132017,3963],{"class":86},[69,132019,132020],{"class":71,"line":106},[69,132021,142],{"class":86},[1530,132023,132024,132032],{},[1533,132025,132026],{},[1536,132027,132028,132030],{},[1539,132029,1544],{"align":1202},[1539,132031,28725],{"align":1202},[1576,132033,132034,132042,132050,132058,132066,132074],{},[1536,132035,132036,132039],{},[1581,132037,132038],{"align":1202},"h-shadow",[1581,132040,132041],{"align":1202},"必需,水平阴影的位置,允许负值",[1536,132043,132044,132047],{},[1581,132045,132046],{"align":1202},"v-shadow",[1581,132048,132049],{"align":1202},"必需,垂直阴影的位置,允许负值",[1536,132051,132052,132055],{},[1581,132053,132054],{"align":1202},"blur",[1581,132056,132057],{"align":1202},"可选,模糊距离,就是影子的虚实",[1536,132059,132060,132063],{},[1581,132061,132062],{"align":1202},"spread",[1581,132064,132065],{"align":1202},"可选,阴影尺寸",[1536,132067,132068,132071],{},[1581,132069,132070],{"align":1202},"color",[1581,132072,132073],{"align":1202},"可选,阴影的颜色",[1536,132075,132076,132079],{},[1581,132077,132078],{"align":1202},"inset",[1581,132080,132081],{"align":1202},"可选,将外部阴影(outset)改为内部阴影",[37,132083,132084],{"start":106},[40,132085,132086],{},"文字阴影",[59,132088,132090],{"className":61,"code":132089,"language":63,"meta":64,"style":64},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[66,132091,132092,132098,132137],{"__ignoreMap":64},[69,132093,132094,132096],{"class":71,"line":72},[69,132095,29],{"class":348},[69,132097,113],{"class":86},[69,132099,132100,132103,132105,132107,132109,132111,132113,132115,132117,132119,132121,132123,132125,132127,132129,132131,132133,132135],{"class":71,"line":79},[69,132101,132102],{"class":90},"  text-shadow",[69,132104,94],{"class":86},[69,132106,1609],{"class":90},[69,132108,100],{"class":82},[69,132110,26355],{"class":90},[69,132112,100],{"class":82},[69,132114,15995],{"class":90},[69,132116,100],{"class":82},[69,132118,79988],{"class":90},[69,132120,1398],{"class":86},[69,132122,1583],{"class":90},[69,132124,13677],{"class":86},[69,132126,1583],{"class":90},[69,132128,13677],{"class":86},[69,132130,1583],{"class":90},[69,132132,13677],{"class":86},[69,132134,101742],{"class":90},[69,132136,3963],{"class":86},[69,132138,132139],{"class":71,"line":106},[69,132140,142],{"class":86},[1530,132142,132143,132151],{},[1533,132144,132145],{},[1536,132146,132147,132149],{},[1539,132148,1544],{"align":1202},[1539,132150,28725],{"align":1202},[1576,132152,132153,132159,132166,132173],{},[1536,132154,132155,132157],{},[1581,132156,132038],{"align":1202},[1581,132158,132041],{"align":1202},[1536,132160,132161,132163],{},[1581,132162,132046],{"align":1202},[1581,132164,132165],{"align":1202},"必需,垂直阴影位置,允许负值",[1536,132167,132168,132170],{},[1581,132169,132054],{"align":1202},[1581,132171,132172],{"align":1202},"可选,模糊的距离",[1536,132174,132175,132177],{},[1581,132176,132070],{"align":1202},[1581,132178,132073],{"align":1202},[14,132180,132182],{"id":132181},"_92-浮动","9.2 浮动",[19,132184,132186],{"id":132185},"_921-浮动介绍","9.2.1 浮动介绍",[29,132188,132189],{},"在16.2中详细介绍",[19,132191,132193],{"id":132192},"_922-清除浮动","9.2.2 清除浮动",[37,132195,132196,132199],{},[40,132197,132198],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[40,132200,132201],{},"清除浮动的本质",[29,132203,132204],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[29,132206,10267],{},[162,132208,132209,132212,132215],{},[40,132210,132211],{},"如果父盒子本身有高度，则不需要清除浮动",[40,132213,132214],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[40,132216,132217],{},"父级有了高度，就不会影响下面的标准流了",[37,132219,132220],{"start":106},[40,132221,132222],{},"清除浮动样式",[59,132224,132226],{"className":61,"code":132225,"language":63,"meta":64,"style":64},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[66,132227,132228,132235,132245,132249,132256,132266],{"__ignoreMap":64},[69,132229,132230,132233],{"class":71,"line":72},[69,132231,132232],{"class":109},".left",[69,132234,113],{"class":86},[69,132236,132237,132239,132241,132243],{"class":71,"line":79},[69,132238,1197],{"class":90},[69,132240,94],{"class":86},[69,132242,1202],{"class":90},[69,132244,130],{"class":86},[69,132246,132247],{"class":71,"line":106},[69,132248,142],{"class":86},[69,132250,132251,132254],{"class":71,"line":116},[69,132252,132253],{"class":109},".right",[69,132255,113],{"class":86},[69,132257,132258,132260,132262,132264],{"class":71,"line":133},[69,132259,1197],{"class":90},[69,132261,94],{"class":86},[69,132263,73743],{"class":90},[69,132265,130],{"class":86},[69,132267,132268],{"class":71,"line":139},[69,132269,142],{"class":86},[1530,132271,132272,132280],{},[1533,132273,132274],{},[1536,132275,132276,132278],{},[1539,132277,128232],{"align":1202},[1539,132279,28725],{"align":1202},[1576,132281,132282,132289,132296],{},[1536,132283,132284,132286],{},[1581,132285,1202],{"align":1202},[1581,132287,132288],{"align":1202},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1536,132290,132291,132293],{},[1581,132292,73743],{"align":1202},[1581,132294,132295],{"align":1202},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1536,132297,132298,132301],{},[1581,132299,132300],{"align":1202},"both",[1581,132302,132303],{"align":1202},"同时清除左右侧浮动的影响",[29,132305,132306],{},"法一",[29,132308,132309],{},"额外标签法也称为隔墙法",[29,132311,132312],{},"使用方式：",[29,132314,132315],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[59,132317,132318],{"className":61,"code":132225,"language":63,"meta":64,"style":64},[66,132319,132320,132326,132336,132340,132346,132356],{"__ignoreMap":64},[69,132321,132322,132324],{"class":71,"line":72},[69,132323,132232],{"class":109},[69,132325,113],{"class":86},[69,132327,132328,132330,132332,132334],{"class":71,"line":79},[69,132329,1197],{"class":90},[69,132331,94],{"class":86},[69,132333,1202],{"class":90},[69,132335,130],{"class":86},[69,132337,132338],{"class":71,"line":106},[69,132339,142],{"class":86},[69,132341,132342,132344],{"class":71,"line":116},[69,132343,132253],{"class":109},[69,132345,113],{"class":86},[69,132347,132348,132350,132352,132354],{"class":71,"line":133},[69,132349,1197],{"class":90},[69,132351,94],{"class":86},[69,132353,73743],{"class":90},[69,132355,130],{"class":86},[69,132357,132358],{"class":71,"line":139},[69,132359,142],{"class":86},[29,132361,132362],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[29,132364,132365],{},"优点： 通俗易懂，书写方便",[29,132367,132368],{},"缺点： 添加许多无意义的标签，结构化较差",[29,132370,132371],{},"注意： 要求这个新的空标签必须是块级元素。",[29,132373,132374],{},"法二",[29,132376,132377],{},"父级添加overflow属性",[59,132379,132380],{"className":61,"code":132225,"language":63,"meta":64,"style":64},[66,132381,132382,132388,132398,132402,132408,132418],{"__ignoreMap":64},[69,132383,132384,132386],{"class":71,"line":72},[69,132385,132232],{"class":109},[69,132387,113],{"class":86},[69,132389,132390,132392,132394,132396],{"class":71,"line":79},[69,132391,1197],{"class":90},[69,132393,94],{"class":86},[69,132395,1202],{"class":90},[69,132397,130],{"class":86},[69,132399,132400],{"class":71,"line":106},[69,132401,142],{"class":86},[69,132403,132404,132406],{"class":71,"line":116},[69,132405,132253],{"class":109},[69,132407,113],{"class":86},[69,132409,132410,132412,132414,132416],{"class":71,"line":133},[69,132411,1197],{"class":90},[69,132413,94],{"class":86},[69,132415,73743],{"class":90},[69,132417,130],{"class":86},[69,132419,132420],{"class":71,"line":139},[69,132421,142],{"class":86},[29,132423,132424],{},"overflow: hidden;",[29,132426,132427],{},"优点：代码简洁",[29,132429,132430],{},"缺点：无法显示溢出的部分",[29,132432,132433],{},"注意：是给父元素添加代码",[29,132435,132436],{},"法三",[29,132438,132439],{},"父级添加after伪元素",[29,132441,132442,132445],{},[132443,132444],"after",{}," 方式是额外标签法的升级版",[29,132447,132448],{},"使用的时候复制就可以",[59,132450,132451],{"className":61,"code":132225,"language":63,"meta":64,"style":64},[66,132452,132453,132459,132469,132473,132479,132489],{"__ignoreMap":64},[69,132454,132455,132457],{"class":71,"line":72},[69,132456,132232],{"class":109},[69,132458,113],{"class":86},[69,132460,132461,132463,132465,132467],{"class":71,"line":79},[69,132462,1197],{"class":90},[69,132464,94],{"class":86},[69,132466,1202],{"class":90},[69,132468,130],{"class":86},[69,132470,132471],{"class":71,"line":106},[69,132472,142],{"class":86},[69,132474,132475,132477],{"class":71,"line":116},[69,132476,132253],{"class":109},[69,132478,113],{"class":86},[69,132480,132481,132483,132485,132487],{"class":71,"line":133},[69,132482,1197],{"class":90},[69,132484,94],{"class":86},[69,132486,73743],{"class":90},[69,132488,130],{"class":86},[69,132490,132491],{"class":71,"line":139},[69,132492,142],{"class":86},[29,132494,132495],{},"优点：没有增加标签，结构更简单",[29,132497,132498],{},"缺点：照顾低版本浏览器",[29,132500,132501],{},"代表网站： 百度、淘宝网、网易等",[29,132503,132504],{},"法四",[29,132506,132507],{},"父级添加双伪元素",[59,132509,132510],{"className":61,"code":132225,"language":63,"meta":64,"style":64},[66,132511,132512,132518,132528,132532,132538,132548],{"__ignoreMap":64},[69,132513,132514,132516],{"class":71,"line":72},[69,132515,132232],{"class":109},[69,132517,113],{"class":86},[69,132519,132520,132522,132524,132526],{"class":71,"line":79},[69,132521,1197],{"class":90},[69,132523,94],{"class":86},[69,132525,1202],{"class":90},[69,132527,130],{"class":86},[69,132529,132530],{"class":71,"line":106},[69,132531,142],{"class":86},[69,132533,132534,132536],{"class":71,"line":116},[69,132535,132253],{"class":109},[69,132537,113],{"class":86},[69,132539,132540,132542,132544,132546],{"class":71,"line":133},[69,132541,1197],{"class":90},[69,132543,94],{"class":86},[69,132545,73743],{"class":90},[69,132547,130],{"class":86},[69,132549,132550],{"class":71,"line":139},[69,132551,142],{"class":86},[29,132553,132554],{},"优点：代码更简洁",[29,132556,132498],{},[29,132558,132559],{},"代表网站：小米、腾讯等",[14,132561,132563],{"id":132562},"_93-ps切图","9.3 PS切图",[19,132565,132567],{"id":132566},"_931-常见图片格式","9.3.1 常见图片格式",[1530,132569,132570,132580],{},[1533,132571,132572],{},[1536,132573,132574,132577],{},[1539,132575,132576],{"align":1202},"jpg图像格式",[1539,132578,132579],{"align":1202},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1576,132581,132582,132590,132598],{},[1536,132583,132584,132587],{},[1581,132585,132586],{"align":1202},"gif图像格式",[1581,132588,132589],{"align":1202},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1536,132591,132592,132595],{},[1581,132593,132594],{"align":1202},"png图像格式",[1581,132596,132597],{"align":1202},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1536,132599,132600,132603],{},[1581,132601,132602],{"align":1202},"PSD图像格式",[1581,132604,132605],{"align":1202},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[19,132607,132609],{"id":132608},"_932-图层切图","9.3.2 图层切图",[29,132611,132612],{},"最简单的切图方式：右击图层 → 导出 → 切片",[29,132614,132615],{},"按住shift选中两个图层->图层菜单->合并图层",[19,132617,132619],{"id":132618},"_933-切片切图","9.3.3 切片切图",[162,132621,132622,132625],{},[40,132623,132624],{},"利用切片工具手动划出",[40,132626,132627],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[19,132629,132631],{"id":132630},"_934-切图步骤","9.3.4 切图步骤",[29,132633,132634],{},"用切片工具选中：",[24,132636],{"style":26,"src":132637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[29,132639,132640],{},"文件 -> 导出",[24,132642],{"style":26,"src":132643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1297,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":64,"searchDepth":79,"depth":79,"links":132648},[132649,132658,132662],{"id":131092,"depth":79,"text":131093,"children":132650},[132651,132652,132653,132654,132655,132656,132657],{"id":131117,"depth":106,"text":131118},{"id":131408,"depth":106,"text":131409},{"id":131537,"depth":106,"text":131538},{"id":131735,"depth":106,"text":131736},{"id":131777,"depth":106,"text":131778},{"id":131815,"depth":106,"text":131816},{"id":131901,"depth":106,"text":131902},{"id":132181,"depth":79,"text":132182,"children":132659},[132660,132661],{"id":132185,"depth":106,"text":132186},{"id":132192,"depth":106,"text":132193},{"id":132562,"depth":79,"text":132563,"children":132663},[132664,132665,132666,132667],{"id":132566,"depth":106,"text":132567},{"id":132608,"depth":106,"text":132609},{"id":132618,"depth":106,"text":132619},{"id":132630,"depth":106,"text":132631},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131084,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132674,"title":132675,"body":132676,"description":1322,"extension":1323,"meta":133317,"navigation":1325,"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属性书写顺序",[37,132686,132687,132693,132699,132705],{},[40,132688,132689,132692],{},[195,132690,132691],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[40,132694,132695,132698],{},[195,132696,132697],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[40,132700,132701,132704],{},[195,132702,132703],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[40,132706,132707,132710],{},[195,132708,132709],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[59,132712,132713],{"className":61,"code":131129,"language":63,"meta":64,"style":64},[66,132714,132715,132719,132725,132741],{"__ignoreMap":64},[69,132716,132717],{"class":71,"line":72},[69,132718,131136],{"class":75},[69,132720,132721,132723],{"class":71,"line":79},[69,132722,442],{"class":348},[69,132724,113],{"class":86},[69,132726,132727,132729,132731,132733,132735,132737,132739],{"class":71,"line":106},[69,132728,72118],{"class":90},[69,132730,94],{"class":86},[69,132732,1609],{"class":90},[69,132734,100],{"class":82},[69,132736,52752],{"class":90},[69,132738,131157],{"class":90},[69,132740,130],{"class":86},[69,132742,132743],{"class":71,"line":116},[69,132744,142],{"class":86},[14,132746,132748],{"id":132747},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[19,132750,132752],{"id":132751},"_1021-header头部制作","10.2.1 header头部制作",[24,132754],{"style":26,"src":132755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[162,132757,132758,132765,132772,132778,132785,132792],{},[40,132759,132760,132761,132764],{},"1号是版心盒子 ",[195,132762,132763],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[40,132766,132767,132768,132771],{},"版心盒子 里面包含 2号盒子 ",[195,132769,132770],{},"logo"," 图标",[40,132773,132774,132775,132777],{},"版心盒子 里面包含 3号盒子 ",[195,132776,54940],{}," 导航栏",[40,132779,132780,132781,132784],{},"版心盒子 里面包含 4号盒子 ",[195,132782,132783],{},"search"," 搜索框",[40,132786,132787,132788,132791],{},"版心盒子 里面包含 5号盒子 ",[195,132789,132790],{},"user"," 个人信息",[40,132793,132794,132795],{},"注意，要求里面的 ",[195,132796,132797],{},"4个子盒子 必须都浮动",[37,132799,132800],{},[40,132801,132802],{},[195,132803,132804],{},"导航栏注意点:",[29,132806,132807,132808,132811,132812],{},"实际开发中， ",[195,132809,132810],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[195,132813,132814],{},"用 li 包含链接(li+a)的做法",[162,132816,132817,132820],{},[40,132818,132819],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[40,132821,132822],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[29,132824,10267],{},[29,132826,132827],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[29,132829,132830],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[29,132832,132833],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[37,132835,132836],{"start":79},[40,132837,132838],{},[195,132839,132840],{},"4号盒子search的细节：",[162,132842,132843,132846,132849],{},[40,132844,132845],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[40,132847,132848],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[40,132850,132851,132854],{},[66,132852,132853],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[19,132856,132858],{"id":132857},"_1022-banner制作","10.2.2 banner制作",[24,132860],{"style":26,"src":132861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[162,132863,132864,132871,132877,132884],{},[40,132865,132866,132867,132870],{},"1号盒子是通栏的大盒子 ",[195,132868,132869],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[40,132872,132873,132874,132876],{},"2号盒子是版心 ",[195,132875,2182],{}," ， 要水平居中对齐",[40,132878,132879,132880,132883],{},"3号盒子版心内，左对齐 ",[195,132881,132882],{},"subnav"," 侧导航栏",[40,132885,132886,132887,132890],{},"4号盒子版心内，右对齐 ",[195,132888,132889],{},"course"," 课程",[19,132892,132894],{"id":132893},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[24,132896],{"style":26,"src":132897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[162,132899,132900,132903,132906,132909],{},[40,132901,132902],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[40,132904,132905],{},"1号盒子是标题 H3 左侧浮动",[40,132907,132908],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[40,132910,132911],{},"3号盒子 右浮动 mod 修改",[19,132913,132915],{"id":132914},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[24,132917],{"style":26,"src":132918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[162,132920,132921,132927,132934,132941,132944],{},[40,132922,132923,132924,132926],{},"1号盒子为最大的盒子 ",[195,132925,54941],{}," 版心水平居中对齐",[40,132928,132929,132930,132933],{},"2号盒子为上面部分 ",[195,132931,132932],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[40,132935,132936,132937,132940],{},"3号盒子为底下部分 ",[195,132938,132939],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[40,132942,132943],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[40,132945,132946],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[19,132948,132950],{"id":132949},"_1025-底部模块制作","10.2.5 底部模块制作",[24,132952],{"style":26,"src":132953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[162,132955,132956,132963,132966,132973],{},[40,132957,132958,132959,132962],{},"1号盒子通栏大盒子 底部 ",[195,132960,132961],{},"footer"," 给高度 底色是白色",[40,132964,132965],{},"2号盒子版心水平居中",[40,132967,132968,132969,132972],{},"3号盒子版权 ",[195,132970,132971],{},"copyright"," 左对齐",[40,132974,132975,132976,132979],{},"4号盒子 链接组 ",[195,132977,132978],{},"links"," 右对齐",[19,132981,132983],{"id":132982},"_1026-代码模块","10.2.6 代码模块",[37,132985,132986],{},[40,132987,132988],{},"html部分",[59,132990,132992],{"className":997,"code":132991,"language":999,"meta":64,"style":64},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[66,132993,132994],{"__ignoreMap":64},[69,132995,132996,132998,133000,133002,133004,133007,133010,133012,133015,133018,133020],{"class":71,"line":72},[69,132997,1011],{"class":86},[69,132999,187],{"class":348},[69,133001,62283],{"class":109},[69,133003,1019],{"class":86},[69,133005,133006],{"class":1022},"\"https:\u002F\u002Fexample.com\"",[69,133008,133009],{"class":109}," target",[69,133011,1019],{"class":86},[69,133013,133014],{"class":1022},"\"_blank\"",[69,133016,133017],{"class":86},">链接文字\u003C\u002F",[69,133019,187],{"class":348},[69,133021,1026],{"class":86},[37,133023,133024],{"start":79},[40,133025,133026],{},"css部分",[59,133028,133029],{"className":997,"code":132991,"language":999,"meta":64,"style":64},[66,133030,133031],{"__ignoreMap":64},[69,133032,133033,133035,133037,133039,133041,133043,133045,133047,133049,133051,133053],{"class":71,"line":72},[69,133034,1011],{"class":86},[69,133036,187],{"class":348},[69,133038,62283],{"class":109},[69,133040,1019],{"class":86},[69,133042,133006],{"class":1022},[69,133044,133009],{"class":109},[69,133046,1019],{"class":86},[69,133048,133014],{"class":1022},[69,133050,133017],{"class":86},[69,133052,187],{"class":348},[69,133054,1026],{"class":86},[19,133056,133058],{"id":133057},"_1027-收获","10.2.7 收获",[37,133060,133061,133064,133067,133070,133073],{},[40,133062,133063],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[40,133065,133066],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[40,133068,133069],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[40,133071,133072],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[40,133074,133075],{},"遗忘代码",[59,133077,133079],{"className":61,"code":133078,"language":63,"meta":64,"style":64},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[66,133080,133081,133103,133108,133118],{"__ignoreMap":64},[69,133082,133083,133085,133087,133089,133091,133093,133095,133097,133099,133101],{"class":71,"line":72},[69,133084,442],{"class":348},[69,133086,13677],{"class":86},[69,133088,29],{"class":348},[69,133090,13677],{"class":86},[69,133092,10],{"class":348},[69,133094,13677],{"class":86},[69,133096,162],{"class":348},[69,133098,13677],{"class":86},[69,133100,40],{"class":348},[69,133102,113],{"class":86},[69,133104,133105],{"class":71,"line":79},[69,133106,133107],{"class":75},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[69,133109,133110,133112,133114,133116],{"class":71,"line":106},[69,133111,129381],{"class":90},[69,133113,94],{"class":86},[69,133115,62095],{"class":90},[69,133117,130],{"class":86},[69,133119,133120],{"class":71,"line":116},[69,133121,142],{"class":86},[37,133123,133124],{"start":139},[40,133125,133126],{},"html引css的程序",[59,133128,133129],{"className":61,"code":133078,"language":63,"meta":64,"style":64},[66,133130,133131,133153,133157,133167],{"__ignoreMap":64},[69,133132,133133,133135,133137,133139,133141,133143,133145,133147,133149,133151],{"class":71,"line":72},[69,133134,442],{"class":348},[69,133136,13677],{"class":86},[69,133138,29],{"class":348},[69,133140,13677],{"class":86},[69,133142,10],{"class":348},[69,133144,13677],{"class":86},[69,133146,162],{"class":348},[69,133148,13677],{"class":86},[69,133150,40],{"class":348},[69,133152,113],{"class":86},[69,133154,133155],{"class":71,"line":79},[69,133156,133107],{"class":75},[69,133158,133159,133161,133163,133165],{"class":71,"line":106},[69,133160,129381],{"class":90},[69,133162,94],{"class":86},[69,133164,62095],{"class":90},[69,133166,130],{"class":86},[69,133168,133169],{"class":71,"line":116},[69,133170,142],{"class":86},[37,133172,133173,133176,133179,133182,133185],{"start":401},[40,133174,133175],{},"浮动的盒子不会有外边距合并问题",[40,133177,133178],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[40,133180,133181],{},"ctrl+g快速定位行；shift+alt多个光标",[40,133183,133184],{},"学习上方各个模块的选择器起名方法，以后就这样用",[40,133186,133187],{},"在写选择器时尽量写全一些，例如",[59,133189,133191],{"className":61,"code":133190,"language":63,"meta":64,"style":64},"\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",[66,133192,133193,133198,133214,133219,133234,133239,133254,133259,133274,133279],{"__ignoreMap":64},[69,133194,133195],{"class":71,"line":72},[69,133196,133197],{"class":75},"\u002F* 静态定位（默认） *\u002F\n",[69,133199,133200,133203,133205,133207,133209,133212],{"class":71,"line":79},[69,133201,133202],{"class":109},".static",[69,133204,81028],{"class":86},[69,133206,130125],{"class":90},[69,133208,94],{"class":86},[69,133210,133211],{"class":90},"static",[69,133213,130695],{"class":86},[69,133215,133216],{"class":71,"line":106},[69,133217,133218],{"class":75},"\u002F* 相对定位 *\u002F\n",[69,133220,133221,133224,133226,133228,133230,133232],{"class":71,"line":116},[69,133222,133223],{"class":109},".relative",[69,133225,81028],{"class":86},[69,133227,130125],{"class":90},[69,133229,94],{"class":86},[69,133231,55991],{"class":90},[69,133233,130695],{"class":86},[69,133235,133236],{"class":71,"line":133},[69,133237,133238],{"class":75},"\u002F* 绝对定位 *\u002F\n",[69,133240,133241,133244,133246,133248,133250,133252],{"class":71,"line":139},[69,133242,133243],{"class":109},".absolute",[69,133245,81028],{"class":86},[69,133247,130125],{"class":90},[69,133249,94],{"class":86},[69,133251,56058],{"class":90},[69,133253,130695],{"class":86},[69,133255,133256],{"class":71,"line":401},[69,133257,133258],{"class":75},"\u002F* 固定定位 *\u002F\n",[69,133260,133261,133264,133266,133268,133270,133272],{"class":71,"line":470},[69,133262,133263],{"class":109},".fixed",[69,133265,81028],{"class":86},[69,133267,130125],{"class":90},[69,133269,94],{"class":86},[69,133271,87454],{"class":90},[69,133273,130695],{"class":86},[69,133275,133276],{"class":71,"line":475},[69,133277,133278],{"class":75},"\u002F* 粘性定位 *\u002F\n",[69,133280,133281,133284,133286,133288,133290,133293],{"class":71,"line":482},[69,133282,133283],{"class":109},".sticky",[69,133285,81028],{"class":86},[69,133287,130125],{"class":90},[69,133289,94],{"class":86},[69,133291,133292],{"class":90},"sticky",[69,133294,130695],{"class":86},[37,133296,133297,133300],{"start":502},[40,133298,133299],{},"一定要用好注释",[40,133301,133302],{},"浮动的盒子不会有外边距合并的问题",[1297,133304,132646],{},{"title":64,"searchDepth":79,"depth":79,"links":133306},[133307,133308],{"id":132683,"depth":79,"text":132684},{"id":132747,"depth":79,"text":132748,"children":133309},[133310,133311,133312,133313,133314,133315,133316],{"id":132751,"depth":106,"text":132752},{"id":132857,"depth":106,"text":132858},{"id":132893,"depth":106,"text":132894},{"id":132914,"depth":106,"text":132915},{"id":132949,"depth":106,"text":132950},{"id":132982,"depth":106,"text":132983},{"id":133057,"depth":106,"text":133058},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132675,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133323,"title":133324,"body":133325,"description":1322,"extension":1323,"meta":134811,"navigation":1325,"path":134812,"seo":134813,"stem":134814,"__hash__":134815},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133326,"toc":134803},[133327,133330,133334,133338,133349,133353,133370,133414,133447,133450,133467,133470,133473,133517,133521,133525,133528,133531,133535,133538,133549,133612,133653,133656,133671,133725,133733,133736,133747,133801,133827,133830,133843,133897,133929,133983,134006,134060,134063,134066,134073,134127,134148,134202,134205,134208,134293,134301,134358,134381,134385,134388,134406,134410,134429,134483,134521,134525,134528,134531,134553,134557,134565,134568,134573,134584,134587,134591,134605,134649,134652,134656,134659,134664,134690,134695,134772,134775,134779,134782,134785,134788,134791,134794,134797,134800],[10,133328,133324],{"id":133329},"_11-传统布局与定位体系",[14,133331,133333],{"id":133332},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[19,133335,133337],{"id":133336},"_1111-普通流标准流","11.1.1 普通流（标准流）",[162,133339,133340,133343,133346],{},[40,133341,133342],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[40,133344,133345],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[40,133347,133348],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[19,133350,133352],{"id":133351},"_1112-浮动","11.1.2 浮动",[162,133354,133355,133358,133361,133364,133367],{},[40,133356,133357],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[40,133359,133360],{},"浮动可以改变元素标签默认的排列方式",[40,133362,133363],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[40,133365,133366],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[40,133368,133369],{},"在使用行内块转换时盒子之间是有空隙的",[59,133371,133372],{"className":61,"code":132225,"language":63,"meta":64,"style":64},[66,133373,133374,133380,133390,133394,133400,133410],{"__ignoreMap":64},[69,133375,133376,133378],{"class":71,"line":72},[69,133377,132232],{"class":109},[69,133379,113],{"class":86},[69,133381,133382,133384,133386,133388],{"class":71,"line":79},[69,133383,1197],{"class":90},[69,133385,94],{"class":86},[69,133387,1202],{"class":90},[69,133389,130],{"class":86},[69,133391,133392],{"class":71,"line":106},[69,133393,142],{"class":86},[69,133395,133396,133398],{"class":71,"line":116},[69,133397,132253],{"class":109},[69,133399,113],{"class":86},[69,133401,133402,133404,133406,133408],{"class":71,"line":133},[69,133403,1197],{"class":90},[69,133405,94],{"class":86},[69,133407,73743],{"class":90},[69,133409,130],{"class":86},[69,133411,133412],{"class":71,"line":139},[69,133413,142],{"class":86},[1530,133415,133416,133424],{},[1533,133417,133418],{},[1536,133419,133420,133422],{},[1539,133421,128232],{"align":1202},[1539,133423,28725],{"align":1202},[1576,133425,133426,133433,133440],{},[1536,133427,133428,133430],{},[1581,133429,55964],{"align":1202},[1581,133431,133432],{"align":1202},"元素不浮动（默认值）",[1536,133434,133435,133437],{},[1581,133436,1202],{"align":1202},[1581,133438,133439],{"align":1202},"元素向左浮动",[1536,133441,133442,133444],{},[1581,133443,73743],{"align":1202},[1581,133445,133446],{"align":1202},"元素向右浮动",[29,133448,133449],{},"浮动重点：",[162,133451,133452,133455,133458,133461,133464],{},[40,133453,133454],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[40,133456,133457],{},"浮动的元素会一行内显示并且元素顶部对齐",[40,133459,133460],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[40,133462,133463],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[40,133465,133466],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[29,133468,133469],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[29,133471,133472],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[59,133474,133475],{"className":61,"code":132225,"language":63,"meta":64,"style":64},[66,133476,133477,133483,133493,133497,133503,133513],{"__ignoreMap":64},[69,133478,133479,133481],{"class":71,"line":72},[69,133480,132232],{"class":109},[69,133482,113],{"class":86},[69,133484,133485,133487,133489,133491],{"class":71,"line":79},[69,133486,1197],{"class":90},[69,133488,94],{"class":86},[69,133490,1202],{"class":90},[69,133492,130],{"class":86},[69,133494,133495],{"class":71,"line":106},[69,133496,142],{"class":86},[69,133498,133499,133501],{"class":71,"line":116},[69,133500,132253],{"class":109},[69,133502,113],{"class":86},[69,133504,133505,133507,133509,133511],{"class":71,"line":133},[69,133506,1197],{"class":90},[69,133508,94],{"class":86},[69,133510,73743],{"class":90},[69,133512,130],{"class":86},[69,133514,133515],{"class":71,"line":139},[69,133516,142],{"class":86},[19,133518,133520],{"id":133519},"_1113-定位","11.1.3 定位",[23237,133522,133524],{"id":133523},"_11131-使用场景","11.1.3.1 使用场景",[29,133526,133527],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[29,133529,133530],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23237,133532,133534],{"id":133533},"_11132-定位组成","11.1.3.2 定位组成",[29,133536,133537],{},"定位 = 定位模式 + 边偏移",[37,133539,133540],{},[40,133541,133542,133545,133546],{},[195,133543,133544],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[195,133547,133548],{},"定位模式",[59,133550,133552],{"className":61,"code":133551,"language":63,"meta":64,"style":64},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[66,133553,133554,133560,133574,133591,133608],{"__ignoreMap":64},[69,133555,133556,133558],{"class":71,"line":72},[69,133557,378],{"class":109},[69,133559,113],{"class":86},[69,133561,133562,133565,133567,133569,133571],{"class":71,"line":79},[69,133563,133564],{"class":90},"  position",[69,133566,94],{"class":86},[69,133568,55991],{"class":90},[69,133570,366],{"class":86},[69,133572,133573],{"class":75},"\u002F* 定位模式 *\u002F\n",[69,133575,133576,133579,133581,133583,133585,133588],{"class":71,"line":106},[69,133577,133578],{"class":90},"  top",[69,133580,94],{"class":86},[69,133582,390],{"class":90},[69,133584,100],{"class":82},[69,133586,133587],{"class":86},";           ",[69,133589,133590],{"class":75},"\u002F* 边偏移：上 *\u002F\n",[69,133592,133593,133596,133598,133600,133602,133605],{"class":71,"line":116},[69,133594,133595],{"class":90},"  left",[69,133597,94],{"class":86},[69,133599,2087],{"class":90},[69,133601,100],{"class":82},[69,133603,133604],{"class":86},";          ",[69,133606,133607],{"class":75},"\u002F* 边偏移：左 *\u002F\n",[69,133609,133610],{"class":71,"line":133},[69,133611,142],{"class":86},[1530,133613,133614,133623],{},[1533,133615,133616],{},[1536,133617,133618,133620],{},[1539,133619,1544],{"align":1202},[1539,133621,133622],{"align":1202},"语义",[1576,133624,133625,133632,133639,133646],{},[1536,133626,133627,133629],{},[1581,133628,133211],{"align":1202},[1581,133630,133631],{"align":1202},"静态定位",[1536,133633,133634,133636],{},[1581,133635,55991],{"align":1202},[1581,133637,133638],{"align":1202},"相对定位",[1536,133640,133641,133643],{},[1581,133642,56058],{"align":1202},[1581,133644,133645],{"align":1202},"绝对定位",[1536,133647,133648,133650],{},[1581,133649,87454],{"align":1202},[1581,133651,133652],{"align":1202},"固定定位",[29,133654,133655],{},"（1）静态定位：",[162,133657,133658,133669],{},[40,133659,133660,133661,133664,133665,133668],{},"静态定位是元素的 ",[195,133662,133663],{},"默认定位方式"," ， ",[195,133666,133667],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[40,133670,6425],{},[59,133672,133673],{"className":61,"code":133551,"language":63,"meta":64,"style":64},[66,133674,133675,133681,133693,133707,133721],{"__ignoreMap":64},[69,133676,133677,133679],{"class":71,"line":72},[69,133678,378],{"class":109},[69,133680,113],{"class":86},[69,133682,133683,133685,133687,133689,133691],{"class":71,"line":79},[69,133684,133564],{"class":90},[69,133686,94],{"class":86},[69,133688,55991],{"class":90},[69,133690,366],{"class":86},[69,133692,133573],{"class":75},[69,133694,133695,133697,133699,133701,133703,133705],{"class":71,"line":106},[69,133696,133578],{"class":90},[69,133698,94],{"class":86},[69,133700,390],{"class":90},[69,133702,100],{"class":82},[69,133704,133587],{"class":86},[69,133706,133590],{"class":75},[69,133708,133709,133711,133713,133715,133717,133719],{"class":71,"line":116},[69,133710,133595],{"class":90},[69,133712,94],{"class":86},[69,133714,2087],{"class":90},[69,133716,100],{"class":82},[69,133718,133604],{"class":86},[69,133720,133607],{"class":75},[69,133722,133723],{"class":71,"line":133},[69,133724,142],{"class":86},[162,133726,133727,133730],{},[40,133728,133729],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[40,133731,133732],{},"静态定位在布局时我们几乎不用的",[29,133734,133735],{},"（2）相对定位",[162,133737,133738,133745],{},[40,133739,133740,133741,133744],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[195,133742,133743],{},"原来的位置"," 来说的（自恋型）",[40,133746,6425],{},[59,133748,133749],{"className":61,"code":133551,"language":63,"meta":64,"style":64},[66,133750,133751,133757,133769,133783,133797],{"__ignoreMap":64},[69,133752,133753,133755],{"class":71,"line":72},[69,133754,378],{"class":109},[69,133756,113],{"class":86},[69,133758,133759,133761,133763,133765,133767],{"class":71,"line":79},[69,133760,133564],{"class":90},[69,133762,94],{"class":86},[69,133764,55991],{"class":90},[69,133766,366],{"class":86},[69,133768,133573],{"class":75},[69,133770,133771,133773,133775,133777,133779,133781],{"class":71,"line":106},[69,133772,133578],{"class":90},[69,133774,94],{"class":86},[69,133776,390],{"class":90},[69,133778,100],{"class":82},[69,133780,133587],{"class":86},[69,133782,133590],{"class":75},[69,133784,133785,133787,133789,133791,133793,133795],{"class":71,"line":116},[69,133786,133595],{"class":90},[69,133788,94],{"class":86},[69,133790,2087],{"class":90},[69,133792,100],{"class":82},[69,133794,133604],{"class":86},[69,133796,133607],{"class":75},[69,133798,133799],{"class":71,"line":133},[69,133800,142],{"class":86},[162,133802,133803],{},[40,133804,133805,133806,133808,133809,133811,133812,133815,133816,133819,133820,133822,133823,133826],{},"相对定位的特点：",[54943,133807],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54943,133810],{},"  ② ",[195,133813,133814],{},"原来"," 在标准流的 ",[195,133817,133818],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54943,133821],{},"  ③因此， ",[195,133824,133825],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[29,133828,133829],{},"（3）绝对定位",[162,133831,133832,133841],{},[40,133833,133834,133836,133837,133840],{},[195,133835,133645],{}," 是元素在移动位置的时候，是相对于它 ",[195,133838,133839],{},"祖先元素"," 来说的（拼爹型）",[40,133842,6425],{},[59,133844,133845],{"className":61,"code":133551,"language":63,"meta":64,"style":64},[66,133846,133847,133853,133865,133879,133893],{"__ignoreMap":64},[69,133848,133849,133851],{"class":71,"line":72},[69,133850,378],{"class":109},[69,133852,113],{"class":86},[69,133854,133855,133857,133859,133861,133863],{"class":71,"line":79},[69,133856,133564],{"class":90},[69,133858,94],{"class":86},[69,133860,55991],{"class":90},[69,133862,366],{"class":86},[69,133864,133573],{"class":75},[69,133866,133867,133869,133871,133873,133875,133877],{"class":71,"line":106},[69,133868,133578],{"class":90},[69,133870,94],{"class":86},[69,133872,390],{"class":90},[69,133874,100],{"class":82},[69,133876,133587],{"class":86},[69,133878,133590],{"class":75},[69,133880,133881,133883,133885,133887,133889,133891],{"class":71,"line":116},[69,133882,133595],{"class":90},[69,133884,94],{"class":86},[69,133886,2087],{"class":90},[69,133888,100],{"class":82},[69,133890,133604],{"class":86},[69,133892,133607],{"class":75},[69,133894,133895],{"class":71,"line":133},[69,133896,142],{"class":86},[162,133898,133899,133914,133923,133926],{},[40,133900,133901,133902,133904,133905,133907,133908,133910,133911,133913],{},"绝对定位的特点：",[54943,133903],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54943,133906],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54943,133909],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54943,133912],{},"  (4)固定定位",[40,133915,133916,133918,133919,133922],{},[195,133917,133652],{}," 是元素 ",[195,133920,133921],{},"固定于浏览器可视区的位置"," 。（认死理型）",[40,133924,133925],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[40,133927,133928],{},"语法:",[59,133930,133931],{"className":61,"code":133551,"language":63,"meta":64,"style":64},[66,133932,133933,133939,133951,133965,133979],{"__ignoreMap":64},[69,133934,133935,133937],{"class":71,"line":72},[69,133936,378],{"class":109},[69,133938,113],{"class":86},[69,133940,133941,133943,133945,133947,133949],{"class":71,"line":79},[69,133942,133564],{"class":90},[69,133944,94],{"class":86},[69,133946,55991],{"class":90},[69,133948,366],{"class":86},[69,133950,133573],{"class":75},[69,133952,133953,133955,133957,133959,133961,133963],{"class":71,"line":106},[69,133954,133578],{"class":90},[69,133956,94],{"class":86},[69,133958,390],{"class":90},[69,133960,100],{"class":82},[69,133962,133587],{"class":86},[69,133964,133590],{"class":75},[69,133966,133967,133969,133971,133973,133975,133977],{"class":71,"line":116},[69,133968,133595],{"class":90},[69,133970,94],{"class":86},[69,133972,2087],{"class":90},[69,133974,100],{"class":82},[69,133976,133604],{"class":86},[69,133978,133607],{"class":75},[69,133980,133981],{"class":71,"line":133},[69,133982,142],{"class":86},[162,133984,133985,133994],{},[40,133986,133987,133988,133990,133991,133993],{},"特点:",[54943,133989],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54943,133992],{},"  ②固定定位不再占有原先的位置,完全脱标",[40,133995,133996,133997,133999,134000,134002,134003,134005],{},"固定在版心位置的方法:",[54943,133998],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54943,134001],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54943,134004],{},"  实例：",[59,134007,134008],{"className":61,"code":133551,"language":63,"meta":64,"style":64},[66,134009,134010,134016,134028,134042,134056],{"__ignoreMap":64},[69,134011,134012,134014],{"class":71,"line":72},[69,134013,378],{"class":109},[69,134015,113],{"class":86},[69,134017,134018,134020,134022,134024,134026],{"class":71,"line":79},[69,134019,133564],{"class":90},[69,134021,94],{"class":86},[69,134023,55991],{"class":90},[69,134025,366],{"class":86},[69,134027,133573],{"class":75},[69,134029,134030,134032,134034,134036,134038,134040],{"class":71,"line":106},[69,134031,133578],{"class":90},[69,134033,94],{"class":86},[69,134035,390],{"class":90},[69,134037,100],{"class":82},[69,134039,133587],{"class":86},[69,134041,133590],{"class":75},[69,134043,134044,134046,134048,134050,134052,134054],{"class":71,"line":116},[69,134045,133595],{"class":90},[69,134047,94],{"class":86},[69,134049,2087],{"class":90},[69,134051,100],{"class":82},[69,134053,133604],{"class":86},[69,134055,133607],{"class":75},[69,134057,134058],{"class":71,"line":133},[69,134059,142],{"class":86},[24,134061],{"style":26,"src":134062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[29,134064,134065],{},"(5)粘性定位",[162,134067,134068,134071],{},[40,134069,134070],{},"粘性定位可以被认为是相对定位和固定定位的混合",[40,134072,6425],{},[59,134074,134075],{"className":61,"code":133551,"language":63,"meta":64,"style":64},[66,134076,134077,134083,134095,134109,134123],{"__ignoreMap":64},[69,134078,134079,134081],{"class":71,"line":72},[69,134080,378],{"class":109},[69,134082,113],{"class":86},[69,134084,134085,134087,134089,134091,134093],{"class":71,"line":79},[69,134086,133564],{"class":90},[69,134088,94],{"class":86},[69,134090,55991],{"class":90},[69,134092,366],{"class":86},[69,134094,133573],{"class":75},[69,134096,134097,134099,134101,134103,134105,134107],{"class":71,"line":106},[69,134098,133578],{"class":90},[69,134100,94],{"class":86},[69,134102,390],{"class":90},[69,134104,100],{"class":82},[69,134106,133587],{"class":86},[69,134108,133590],{"class":75},[69,134110,134111,134113,134115,134117,134119,134121],{"class":71,"line":116},[69,134112,133595],{"class":90},[69,134114,94],{"class":86},[69,134116,2087],{"class":90},[69,134118,100],{"class":82},[69,134120,133604],{"class":86},[69,134122,133607],{"class":75},[69,134124,134125],{"class":71,"line":133},[69,134126,142],{"class":86},[162,134128,134129],{},[40,134130,134131,134132,134134,134135,134137,134138,134140,134141,134144,134145,134147],{},"粘性定位的特点：",[54943,134133],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54943,134136],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54943,134139],{},"  ③必须添加 top 、left、right、bottom ",[195,134142,134143],{},"其中一个"," 才有效",[54943,134146],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[59,134149,134150],{"className":61,"code":133551,"language":63,"meta":64,"style":64},[66,134151,134152,134158,134170,134184,134198],{"__ignoreMap":64},[69,134153,134154,134156],{"class":71,"line":72},[69,134155,378],{"class":109},[69,134157,113],{"class":86},[69,134159,134160,134162,134164,134166,134168],{"class":71,"line":79},[69,134161,133564],{"class":90},[69,134163,94],{"class":86},[69,134165,55991],{"class":90},[69,134167,366],{"class":86},[69,134169,133573],{"class":75},[69,134171,134172,134174,134176,134178,134180,134182],{"class":71,"line":106},[69,134173,133578],{"class":90},[69,134175,94],{"class":86},[69,134177,390],{"class":90},[69,134179,100],{"class":82},[69,134181,133587],{"class":86},[69,134183,133590],{"class":75},[69,134185,134186,134188,134190,134192,134194,134196],{"class":71,"line":116},[69,134187,133595],{"class":90},[69,134189,94],{"class":86},[69,134191,2087],{"class":90},[69,134193,100],{"class":82},[69,134195,133604],{"class":86},[69,134197,133607],{"class":75},[69,134199,134200],{"class":71,"line":133},[69,134201,142],{"class":86},[24,134203],{"style":26,"src":134204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[29,134206,134207],{},"(6)总结",[1530,134209,134210,134225],{},[1533,134211,134212],{},[1536,134213,134214,134216,134219,134222],{},[1539,134215,133548],{"align":1202},[1539,134217,134218],{"align":1202},"是否脱标",[1539,134220,134221],{"align":1202},"移动位置",[1539,134223,134224],{"align":1202},"是否常用",[1576,134226,134227,134240,134254,134268,134281],{},[1536,134228,134229,134232,134234,134237],{},[1581,134230,134231],{"align":1202},"Static 静态定位",[1581,134233,105899],{"align":1202},[1581,134235,134236],{"align":1202},"不能使用边偏移",[1581,134238,134239],{"align":1202},"很少",[1536,134241,134242,134245,134248,134251],{},[1581,134243,134244],{"align":1202},"Relative 相对定位",[1581,134246,134247],{"align":1202},"否(占有位置)",[1581,134249,134250],{"align":1202},"相对于自身位置移动",[1581,134252,134253],{"align":1202},"基本单独使用",[1536,134255,134256,134259,134262,134265],{},[1581,134257,134258],{"align":1202},"Absolute 绝对定位",[1581,134260,134261],{"align":1202},"是(不占有位置)",[1581,134263,134264],{"align":1202},"带有定位的父级",[1581,134266,134267],{"align":1202},"要和定位父级元素搭配使用",[1536,134269,134270,134273,134275,134278],{},[1581,134271,134272],{"align":1202},"Fixed 固定定位",[1581,134274,134261],{"align":1202},[1581,134276,134277],{"align":1202},"浏览器可视区",[1581,134279,134280],{"align":1202},"单独使用,不需要父级",[1536,134282,134283,134286,134288,134290],{},[1581,134284,134285],{"align":1202},"Sticky 粘性定位",[1581,134287,134247],{"align":1202},[1581,134289,134277],{"align":1202},[1581,134291,134292],{"align":1202},"当前阶段少",[37,134294,134295],{"start":79},[40,134296,134297,134300],{},[195,134298,134299],{},"边偏移"," 则决定了该元素的最终位置",[1530,134302,134303,134314],{},[1533,134304,134305],{},[1536,134306,134307,134310,134312],{},[1539,134308,134309],{"align":1202},"边偏移属性",[1539,134311,28728],{"align":1202},[1539,134313,28725],{"align":1202},[1576,134315,134316,134327,134338,134348],{},[1536,134317,134318,134321,134324],{},[1581,134319,134320],{"align":1202},"top",[1581,134322,134323],{"align":1202},"top: 80px;",[1581,134325,134326],{"align":1202},"顶端偏移量，定义元素相对于父元素上边线的距离",[1536,134328,134329,134332,134335],{},[1581,134330,134331],{"align":1202},"bottom",[1581,134333,134334],{"align":1202},"bottom: 80px ;",[1581,134336,134337],{"align":1202},"底部偏移量，定义元素相对于其父元素下边线的距离",[1536,134339,134340,134342,134345],{},[1581,134341,1202],{"align":1202},[1581,134343,134344],{"align":1202},"left: 80px ;",[1581,134346,134347],{"align":1202},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1536,134349,134350,134352,134355],{},[1581,134351,73743],{"align":1202},[1581,134353,134354],{"align":1202},"right: 80px ;",[1581,134356,134357],{"align":1202},"右侧偏移量，定义元素相对于其父元素右边线的距离",[162,134359,134360],{},[40,134361,10267,134362,134364,134365,134367,134368,134370,134371,134374,134375,134377,134378,134380],{},[54943,134363],{},"  ① ",[195,134366,134299],{}," 需要和 ",[195,134369,133548],{}," 联合使用， ",[195,134372,134373],{},"单独使用无效"," ；",[54943,134376],{},"  ②top和bottom不要同时使用",[54943,134379],{},"  ③left和right不要同时使用",[23237,134382,134384],{"id":134383},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[29,134386,134387],{},"子级是绝对定位的话，父级要用相对定位",[162,134389,134390,134393,134396,134399],{},[40,134391,134392],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[40,134394,134395],{},"父盒子需要加定位限制子盒子在父盒子内显示",[40,134397,134398],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[40,134400,134401,134402,134405],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[195,134403,134404],{},"子绝父绝"," 也会遇到",[23237,134407,134409],{"id":134408},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[162,134411,134412,134427],{},[40,134413,134414,134415,134418,134419,134422,134423,134426],{},"在使用 ",[195,134416,134417],{},"定位"," 布局时，可能会 ",[195,134420,134421],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[195,134424,134425],{},"z-index"," 来控制盒子的前后次序 (z轴)",[40,134428,6425],{},[59,134430,134431],{"className":61,"code":133551,"language":63,"meta":64,"style":64},[66,134432,134433,134439,134451,134465,134479],{"__ignoreMap":64},[69,134434,134435,134437],{"class":71,"line":72},[69,134436,378],{"class":109},[69,134438,113],{"class":86},[69,134440,134441,134443,134445,134447,134449],{"class":71,"line":79},[69,134442,133564],{"class":90},[69,134444,94],{"class":86},[69,134446,55991],{"class":90},[69,134448,366],{"class":86},[69,134450,133573],{"class":75},[69,134452,134453,134455,134457,134459,134461,134463],{"class":71,"line":106},[69,134454,133578],{"class":90},[69,134456,94],{"class":86},[69,134458,390],{"class":90},[69,134460,100],{"class":82},[69,134462,133587],{"class":86},[69,134464,133590],{"class":75},[69,134466,134467,134469,134471,134473,134475,134477],{"class":71,"line":116},[69,134468,133595],{"class":90},[69,134470,94],{"class":86},[69,134472,2087],{"class":90},[69,134474,100],{"class":82},[69,134476,133604],{"class":86},[69,134478,133607],{"class":75},[69,134480,134481],{"class":71,"line":133},[69,134482,142],{"class":86},[162,134484,134485],{},[40,134486,134487,134488,134364,134490,134492,134493,128928,134496,83760,134499,134501,134502,134504,134505,134508,134509,134374,134512,134514,134515,134518,134520],{},"z-index的特性",[54943,134489],{},[195,134491,128232],{}," ： ",[195,134494,134495],{},"正整数",[195,134497,134498],{},"负整数",[195,134500,1583],{}," ，默认值是 0，数值越大，盒子越靠上；",[54943,134503],{},"  ②如果 ",[195,134506,134507],{},"属性值相同"," ，则按照书写顺序， ",[195,134510,134511],{},"后来居上",[54943,134513],{},"  ③数字后面 ",[195,134516,134517],{},"不能加单位",[54943,134519],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23237,134522,134524],{"id":134523},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[29,134526,134527],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[29,134529,134530],{},"方法:",[162,134532,134533,134543],{},[40,134534,134535,134536,134539,134540],{},"left: 50%; 让 ",[195,134537,134538],{},"盒子的左侧"," 移动到 ",[195,134541,134542],{},"父级元素的水平中心位置",[40,134544,134545,134546,134549,134550],{},"margin-left: -100px; 让盒子 ",[195,134547,134548],{},"向左"," 移动 ",[195,134551,134552],{},"自身宽度的一半",[23237,134554,134556],{"id":134555},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[37,134558,134559,134562],{},[40,134560,134561],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[40,134563,134564],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[29,134566,134567],{},"也就是说绝对定位和固定定位和浮动类似",[37,134569,134570],{"start":106},[40,134571,134572],{},"display 是显示模式， 可以改变显示模式有以下方式:",[162,134574,134575,134578,134581],{},[40,134576,134577],{},"可以用inline-block 转换为行内块",[40,134579,134580],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[40,134582,134583],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[29,134585,134586],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23237,134588,134590],{"id":134589},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[37,134592,134593,134596,134599,134602],{},[40,134594,134595],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[40,134597,134598],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[40,134600,134601],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[40,134603,134604],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[59,134606,134607],{"className":61,"code":132225,"language":63,"meta":64,"style":64},[66,134608,134609,134615,134625,134629,134635,134645],{"__ignoreMap":64},[69,134610,134611,134613],{"class":71,"line":72},[69,134612,132232],{"class":109},[69,134614,113],{"class":86},[69,134616,134617,134619,134621,134623],{"class":71,"line":79},[69,134618,1197],{"class":90},[69,134620,94],{"class":86},[69,134622,1202],{"class":90},[69,134624,130],{"class":86},[69,134626,134627],{"class":71,"line":106},[69,134628,142],{"class":86},[69,134630,134631,134633],{"class":71,"line":116},[69,134632,132253],{"class":109},[69,134634,113],{"class":86},[69,134636,134637,134639,134641,134643],{"class":71,"line":133},[69,134638,1197],{"class":90},[69,134640,94],{"class":86},[69,134642,73743],{"class":90},[69,134644,130],{"class":86},[69,134646,134647],{"class":71,"line":139},[69,134648,142],{"class":86},[24,134650],{"style":26,"src":134651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23237,134653,134655],{"id":134654},"_11138-轮播图","11.1.3.8 轮播图",[24,134657],{"style":26,"src":134658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[37,134660,134661],{},[40,134662,134663],{},"制作顺序:",[162,134665,134666,134669,134672,134681],{},[40,134667,134668],{},"大盒子我们类名为： tb-promo 淘宝广告",[40,134670,134671],{},"里面先放一张图片",[40,134673,134674,134675,134677,134678,134680],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54943,134676],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54943,134679],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[40,134682,134683,134684,134686,134687,134689],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54943,134685],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54943,134688],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[37,134691,134692],{"start":79},[40,134693,134694],{},"代码模块",[59,134696,134698],{"className":61,"code":134697,"language":63,"meta":64,"style":64},"\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",[66,134699,134700,134705,134712,134722,134732,134742,134746,134751,134758,134768],{"__ignoreMap":64},[69,134701,134702],{"class":71,"line":72},[69,134703,134704],{"class":75},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[69,134706,134707,134710],{"class":71,"line":79},[69,134708,134709],{"class":109},".son",[69,134711,113],{"class":86},[69,134713,134714,134716,134718,134720],{"class":71,"line":106},[69,134715,133564],{"class":90},[69,134717,94],{"class":86},[69,134719,56058],{"class":90},[69,134721,130],{"class":86},[69,134723,134724,134726,134728,134730],{"class":71,"line":116},[69,134725,133578],{"class":90},[69,134727,94],{"class":86},[69,134729,1583],{"class":90},[69,134731,130],{"class":86},[69,134733,134734,134736,134738,134740],{"class":71,"line":133},[69,134735,133595],{"class":90},[69,134737,94],{"class":86},[69,134739,1583],{"class":90},[69,134741,130],{"class":86},[69,134743,134744],{"class":71,"line":139},[69,134745,142],{"class":86},[69,134747,134748],{"class":71,"line":401},[69,134749,134750],{"class":75},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[69,134752,134753,134756],{"class":71,"line":470},[69,134754,134755],{"class":109},".father",[69,134757,113],{"class":86},[69,134759,134760,134762,134764,134766],{"class":71,"line":475},[69,134761,133564],{"class":90},[69,134763,94],{"class":86},[69,134765,55991],{"class":90},[69,134767,130],{"class":86},[69,134769,134770],{"class":71,"line":482},[69,134771,142],{"class":86},[29,134773,134774],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[19,134776,134778],{"id":134777},"_1114-定位数值的移动","11.1.4 定位数值的移动",[24,134780],{"style":26,"src":134781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[29,134783,134784],{},"✨ 黄金口诀：",[29,134786,134787],{},"\"TOP正下负上，LEFT正右负左\"",[29,134789,134790],{},"\"RIGHT正左负右，BOTTOM正上负下",[29,134792,134793],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[29,134795,134796],{},"✨ 简单记：",[29,134798,134799],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1297,134801,134802],{},"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":64,"searchDepth":79,"depth":79,"links":134804},[134805],{"id":133332,"depth":79,"text":133333,"children":134806},[134807,134808,134809,134810],{"id":133336,"depth":106,"text":133337},{"id":133351,"depth":106,"text":133352},{"id":133519,"depth":106,"text":133520},{"id":134777,"depth":106,"text":134778},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133324,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134817,"title":134818,"body":134819,"description":1322,"extension":1323,"meta":136242,"navigation":1325,"path":136243,"seo":136244,"stem":136245,"__hash__":136246},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134820,"toc":136221},[134821,134824,134828,134836,134840,134845,134853,134865,134869,134874,134882,134893,134897,134902,134943,134951,134955,134958,134961,134964,135058,135061,135155,135158,135252,135255,135258,135293,135296,135299,135329,135332,135335,135338,135341,135344,135347,135350,135420,135423,135427,135431,135472,135476,135482,135485,135488,135492,135495,135498,135501,135582,135585,135588,135592,135596,135599,135602,135605,135608,135611,135617,135626,135630,135649,135653,135663,135666,135669,135672,135675,135678,135681,135684,135687,135696,135700,135709,135712,135717,135770,135775,135941,135944,135947,135952,135955,135958,135961,135964,135969,136117,136120,136123,136128,136131,136136,136170,136173,136176,136180,136183,136190,136193,136196,136199,136202,136205,136208,136211,136215,136218],[10,134822,134818],{"id":134823},"_12-显示隐藏与图形资源",[14,134825,134827],{"id":134826},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[162,134829,134830,134833],{},[40,134831,134832],{},"目的:让一个元素在页面中消失或者显示出来",[40,134834,134835],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[19,134837,134839],{"id":134838},"_1211-display-显示","12.1.1 display 显示",[37,134841,134842],{},[40,134843,134844],{},"display 设置或检索对象是否及如何显示",[162,134846,134847,134850],{},[40,134848,134849],{},"display: none;隐藏对象",[40,134851,134852],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[37,134854,134855,134862],{"start":79},[40,134856,134857,134858,134861],{},"特点： display 隐藏元素后， ",[195,134859,134860],{},"不再占"," 有原来的位置",[40,134863,134864],{},"在js中使用非常的广泛",[19,134866,134868],{"id":134867},"_1212-visibility可见性","12.1.2 visibility可见性",[37,134870,134871],{},[40,134872,134873],{},"visibility 属性用于指定一个元素应可见还是隐藏",[162,134875,134876,134879],{},[40,134877,134878],{},"visibility： visible；元素可见",[40,134880,134881],{},"visibility：hidden；元素隐藏",[37,134883,134884,134887,134890],{"start":79},[40,134885,134886],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[40,134888,134889],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[40,134891,134892],{},"隐藏后继续占有原有位置",[19,134894,134896],{"id":134895},"_1213-overflow溢出","12.1.3 overflow溢出",[162,134898,134899],{},[40,134900,134901],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1530,134903,134904,134912],{},[1533,134905,134906],{},[1536,134907,134908,134910],{},[1539,134909,128232],{"align":1202},[1539,134911,28725],{"align":1202},[1576,134913,134914,134922,134929,134936],{},[1536,134915,134916,134919],{},[1581,134917,134918],{"align":1202},"visible",[1581,134920,134921],{"align":1202},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1536,134923,134924,134926],{},[1581,134925,62940],{"align":1202},[1581,134927,134928],{"align":1202},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1536,134930,134931,134933],{},[1581,134932,130185],{"align":1202},[1581,134934,134935],{"align":1202},"不管超出内容否，总是显示滚动条",[1536,134937,134938,134940],{},[1581,134939,73884],{"align":1202},[1581,134941,134942],{"align":1202},"超出自动显示滚动条，不超出不显示滚动条",[162,134944,134945,134948],{},[40,134946,134947],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[40,134949,134950],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[19,134952,134954],{"id":134953},"_1214-案例收获","12.1.4 案例收获",[24,134956],{"style":26,"src":134957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[29,134959,134960],{},"问题：没做出来动态效果，使用hover没实现",[29,134962,134963],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[59,134965,134966],{"className":61,"code":133190,"language":63,"meta":64,"style":64},[66,134967,134968,134972,134986,134990,135004,135008,135022,135026,135040,135044],{"__ignoreMap":64},[69,134969,134970],{"class":71,"line":72},[69,134971,133197],{"class":75},[69,134973,134974,134976,134978,134980,134982,134984],{"class":71,"line":79},[69,134975,133202],{"class":109},[69,134977,81028],{"class":86},[69,134979,130125],{"class":90},[69,134981,94],{"class":86},[69,134983,133211],{"class":90},[69,134985,130695],{"class":86},[69,134987,134988],{"class":71,"line":106},[69,134989,133218],{"class":75},[69,134991,134992,134994,134996,134998,135000,135002],{"class":71,"line":116},[69,134993,133223],{"class":109},[69,134995,81028],{"class":86},[69,134997,130125],{"class":90},[69,134999,94],{"class":86},[69,135001,55991],{"class":90},[69,135003,130695],{"class":86},[69,135005,135006],{"class":71,"line":133},[69,135007,133238],{"class":75},[69,135009,135010,135012,135014,135016,135018,135020],{"class":71,"line":139},[69,135011,133243],{"class":109},[69,135013,81028],{"class":86},[69,135015,130125],{"class":90},[69,135017,94],{"class":86},[69,135019,56058],{"class":90},[69,135021,130695],{"class":86},[69,135023,135024],{"class":71,"line":401},[69,135025,133258],{"class":75},[69,135027,135028,135030,135032,135034,135036,135038],{"class":71,"line":470},[69,135029,133263],{"class":109},[69,135031,81028],{"class":86},[69,135033,130125],{"class":90},[69,135035,94],{"class":86},[69,135037,87454],{"class":90},[69,135039,130695],{"class":86},[69,135041,135042],{"class":71,"line":475},[69,135043,133278],{"class":75},[69,135045,135046,135048,135050,135052,135054,135056],{"class":71,"line":482},[69,135047,133283],{"class":109},[69,135049,81028],{"class":86},[69,135051,130125],{"class":90},[69,135053,94],{"class":86},[69,135055,133292],{"class":90},[69,135057,130695],{"class":86},[29,135059,135060],{},"完整代码：",[59,135062,135063],{"className":61,"code":133190,"language":63,"meta":64,"style":64},[66,135064,135065,135069,135083,135087,135101,135105,135119,135123,135137,135141],{"__ignoreMap":64},[69,135066,135067],{"class":71,"line":72},[69,135068,133197],{"class":75},[69,135070,135071,135073,135075,135077,135079,135081],{"class":71,"line":79},[69,135072,133202],{"class":109},[69,135074,81028],{"class":86},[69,135076,130125],{"class":90},[69,135078,94],{"class":86},[69,135080,133211],{"class":90},[69,135082,130695],{"class":86},[69,135084,135085],{"class":71,"line":106},[69,135086,133218],{"class":75},[69,135088,135089,135091,135093,135095,135097,135099],{"class":71,"line":116},[69,135090,133223],{"class":109},[69,135092,81028],{"class":86},[69,135094,130125],{"class":90},[69,135096,94],{"class":86},[69,135098,55991],{"class":90},[69,135100,130695],{"class":86},[69,135102,135103],{"class":71,"line":133},[69,135104,133238],{"class":75},[69,135106,135107,135109,135111,135113,135115,135117],{"class":71,"line":139},[69,135108,133243],{"class":109},[69,135110,81028],{"class":86},[69,135112,130125],{"class":90},[69,135114,94],{"class":86},[69,135116,56058],{"class":90},[69,135118,130695],{"class":86},[69,135120,135121],{"class":71,"line":401},[69,135122,133258],{"class":75},[69,135124,135125,135127,135129,135131,135133,135135],{"class":71,"line":470},[69,135126,133263],{"class":109},[69,135128,81028],{"class":86},[69,135130,130125],{"class":90},[69,135132,94],{"class":86},[69,135134,87454],{"class":90},[69,135136,130695],{"class":86},[69,135138,135139],{"class":71,"line":475},[69,135140,133278],{"class":75},[69,135142,135143,135145,135147,135149,135151,135153],{"class":71,"line":482},[69,135144,133283],{"class":109},[69,135146,81028],{"class":86},[69,135148,130125],{"class":90},[69,135150,94],{"class":86},[69,135152,133292],{"class":90},[69,135154,130695],{"class":86},[29,135156,135157],{},"分布思路重点详解：",[59,135159,135160],{"className":61,"code":133190,"language":63,"meta":64,"style":64},[66,135161,135162,135166,135180,135184,135198,135202,135216,135220,135234,135238],{"__ignoreMap":64},[69,135163,135164],{"class":71,"line":72},[69,135165,133197],{"class":75},[69,135167,135168,135170,135172,135174,135176,135178],{"class":71,"line":79},[69,135169,133202],{"class":109},[69,135171,81028],{"class":86},[69,135173,130125],{"class":90},[69,135175,94],{"class":86},[69,135177,133211],{"class":90},[69,135179,130695],{"class":86},[69,135181,135182],{"class":71,"line":106},[69,135183,133218],{"class":75},[69,135185,135186,135188,135190,135192,135194,135196],{"class":71,"line":116},[69,135187,133223],{"class":109},[69,135189,81028],{"class":86},[69,135191,130125],{"class":90},[69,135193,94],{"class":86},[69,135195,55991],{"class":90},[69,135197,130695],{"class":86},[69,135199,135200],{"class":71,"line":133},[69,135201,133238],{"class":75},[69,135203,135204,135206,135208,135210,135212,135214],{"class":71,"line":139},[69,135205,133243],{"class":109},[69,135207,81028],{"class":86},[69,135209,130125],{"class":90},[69,135211,94],{"class":86},[69,135213,56058],{"class":90},[69,135215,130695],{"class":86},[69,135217,135218],{"class":71,"line":401},[69,135219,133258],{"class":75},[69,135221,135222,135224,135226,135228,135230,135232],{"class":71,"line":470},[69,135223,133263],{"class":109},[69,135225,81028],{"class":86},[69,135227,130125],{"class":90},[69,135229,94],{"class":86},[69,135231,87454],{"class":90},[69,135233,130695],{"class":86},[69,135235,135236],{"class":71,"line":475},[69,135237,133278],{"class":75},[69,135239,135240,135242,135244,135246,135248,135250],{"class":71,"line":482},[69,135241,133283],{"class":109},[69,135243,81028],{"class":86},[69,135245,130125],{"class":90},[69,135247,94],{"class":86},[69,135249,133292],{"class":90},[69,135251,130695],{"class":86},[24,135253],{"style":26,"src":135254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[29,135256,135257],{},"图片太大，盒子太小，此时需要修改图片的大小",[59,135259,135261],{"className":997,"code":135260,"language":999,"meta":64,"style":64},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[66,135262,135263],{"__ignoreMap":64},[69,135264,135265,135267,135269,135271,135273,135276,135278,135280,135283,135286,135288,135291],{"class":71,"line":72},[69,135266,1011],{"class":86},[69,135268,24],{"class":348},[69,135270,56466],{"class":109},[69,135272,1019],{"class":86},[69,135274,135275],{"class":1022},"\"images\u002Fpic.jpg\"",[69,135277,56474],{"class":109},[69,135279,1019],{"class":86},[69,135281,135282],{"class":1022},"\"描述文字\"",[69,135284,135285],{"class":109}," title",[69,135287,1019],{"class":86},[69,135289,135290],{"class":1022},"\"悬停提示\"",[69,135292,1026],{"class":86},[24,135294],{"style":26,"src":135295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[29,135297,135298],{},"制造遮罩层",[59,135300,135301],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,135302,135303],{"__ignoreMap":64},[69,135304,135305,135307,135309,135311,135313,135315,135317,135319,135321,135323,135325,135327],{"class":71,"line":72},[69,135306,1011],{"class":86},[69,135308,24],{"class":348},[69,135310,56466],{"class":109},[69,135312,1019],{"class":86},[69,135314,135275],{"class":1022},[69,135316,56474],{"class":109},[69,135318,1019],{"class":86},[69,135320,135282],{"class":1022},[69,135322,135285],{"class":109},[69,135324,1019],{"class":86},[69,135326,135290],{"class":1022},[69,135328,1026],{"class":86},[29,135330,135331],{},"此时是这样的为标准流",[24,135333],{"style":26,"src":135334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[29,135336,135337],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[29,135339,135340],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[29,135342,135343],{},"让他在中间，用center(background-position)",[29,135345,135346],{},"将需要变的尽可能放到一个盒子中",[29,135348,135349],{},"放大盒子上内部盒子发生变化",[59,135351,135353],{"className":61,"code":135352,"language":63,"meta":64,"style":64},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[66,135354,135355,135361,135371,135375,135382,135392,135404,135416],{"__ignoreMap":64},[69,135356,135357,135359],{"class":71,"line":72},[69,135358,128832],{"class":109},[69,135360,113],{"class":86},[69,135362,135363,135365,135367,135369],{"class":71,"line":79},[69,135364,133564],{"class":90},[69,135366,94],{"class":86},[69,135368,55991],{"class":90},[69,135370,130],{"class":86},[69,135372,135373],{"class":71,"line":106},[69,135374,142],{"class":86},[69,135376,135377,135380],{"class":71,"line":116},[69,135378,135379],{"class":109},".child",[69,135381,113],{"class":86},[69,135383,135384,135386,135388,135390],{"class":71,"line":133},[69,135385,133564],{"class":90},[69,135387,94],{"class":86},[69,135389,56058],{"class":90},[69,135391,130],{"class":86},[69,135393,135394,135396,135398,135400,135402],{"class":71,"line":139},[69,135395,133578],{"class":90},[69,135397,94],{"class":86},[69,135399,2043],{"class":90},[69,135401,127],{"class":82},[69,135403,130],{"class":86},[69,135405,135406,135408,135410,135412,135414],{"class":71,"line":401},[69,135407,133595],{"class":90},[69,135409,94],{"class":86},[69,135411,2043],{"class":90},[69,135413,127],{"class":82},[69,135415,130],{"class":86},[69,135417,135418],{"class":71,"line":470},[69,135419,142],{"class":86},[29,135421,135422],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135424,135426],{"id":135425},"_122-精灵图","12.2 精灵图",[19,135428,135430],{"id":135429},"_1221-理解","12.2.1 理解",[37,135432,135433,135451],{},[40,135434,135435,135436,133664,135439,135442,135443,135446,135447,135450],{},"目的： ",[195,135437,135438],{},"为了有效地减少服务器接收和发送请求的次数",[195,135440,135441],{},"提高"," 页面的 ",[195,135444,135445],{},"加载速度"," ，出现了 ",[195,135448,135449],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[40,135452,135453,135454,135456,135457,135459,135460,135462,135463,135465,135466,135468,135469,135471],{},"使用精灵图核心：",[54943,135455],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54943,135458],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54943,135461],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54943,135464],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54943,135467],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54943,135470],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[19,135473,135475],{"id":135474},"_1222-扒图","12.2.2 扒图",[59,135477,135480],{"className":135478,"code":135479,"language":540},[538],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[66,135481,135479],{"__ignoreMap":64},[24,135483],{"style":26,"src":135484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[24,135486],{"style":26,"src":135487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[19,135489,135491],{"id":135490},"_1223-精灵图的实现","12.2.3 精灵图的实现",[24,135493],{"style":26,"src":135494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[29,135496,135497],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[24,135499],{"style":26,"src":135500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[59,135502,135504],{"className":61,"code":135503,"language":63,"meta":64,"style":64},"\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",[66,135505,135506,135511,135518,135530,135542,135561,135578],{"__ignoreMap":64},[69,135507,135508],{"class":71,"line":72},[69,135509,135510],{"class":75},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[69,135512,135513,135516],{"class":71,"line":79},[69,135514,135515],{"class":109},".icon",[69,135517,113],{"class":86},[69,135519,135520,135522,135524,135526,135528],{"class":71,"line":106},[69,135521,385],{"class":90},[69,135523,94],{"class":86},[69,135525,2087],{"class":90},[69,135527,100],{"class":82},[69,135529,130],{"class":86},[69,135531,135532,135534,135536,135538,135540],{"class":71,"line":116},[69,135533,72010],{"class":90},[69,135535,94],{"class":86},[69,135537,2087],{"class":90},[69,135539,100],{"class":82},[69,135541,130],{"class":86},[69,135543,135544,135546,135548,135550,135552,135555,135557,135559],{"class":71,"line":133},[69,135545,71834],{"class":90},[69,135547,94],{"class":86},[69,135549,62952],{"class":90},[69,135551,1398],{"class":86},[69,135553,135554],{"class":6458},"sprites.png",[69,135556,14955],{"class":86},[69,135558,62962],{"class":90},[69,135560,130],{"class":86},[69,135562,135563,135565,135567,135569,135571,135574,135576],{"class":71,"line":139},[69,135564,130025],{"class":90},[69,135566,94],{"class":86},[69,135568,52993],{"class":90},[69,135570,100],{"class":82},[69,135572,135573],{"class":90}," -20",[69,135575,100],{"class":82},[69,135577,130],{"class":86},[69,135579,135580],{"class":71,"line":401},[69,135581,142],{"class":86},[24,135583],{"style":26,"src":135584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[29,135586,135587],{},"在前端中坐标轴的正方向是右和下",[14,135589,135591],{"id":135590},"_123-字体图标","12.3 字体图标",[19,135593,135595],{"id":135594},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[29,135597,135598],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[29,135600,135601],{},"精灵图是有诸多优点的，但是缺点很明显。",[29,135603,135604],{},"1.图片文件还是比较大的。",[29,135606,135607],{},"2.图片本身放大和缩小会失真。",[29,135609,135610],{},"3.一旦图片制作完毕想要更换非常复杂。",[29,135612,135613,135614,26977],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[195,135615,135616],{},"字体图标 iconfont",[29,135618,135619,135622,135623,29621],{},[195,135620,135621],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[195,135624,135625],{},"展示的是图标，本质属于字体",[19,135627,135629],{"id":135628},"_1232-字体图标的优点","12.3.2 字体图标的优点",[162,135631,135632,135637,135640,135643,135646],{},[40,135633,135634,135636],{},[195,135635,27113],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[40,135638,135639],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[40,135641,135642],{},"兼容性：几乎支持所有的浏览器，请放心使用",[40,135644,135645],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[40,135647,135648],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[19,135650,135652],{"id":135651},"_1233-字体库下载网站","12.3.3 字体库下载网站",[162,135654,135655],{},[40,135656,135657,135658],{},"icomoon字体库：",[187,135659,135662],{"href":135660,"rel":135661},"http:\u002F\u002Ficomoon.io\u002F",[191],"http:\u002F\u002Ficomoon.io",[29,135664,135665],{},"进去之后点icomoon app",[24,135667],{"style":26,"src":135668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[29,135670,135671],{},"可以对其编辑：",[24,135673],{"style":26,"src":135674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[29,135676,135677],{},"生成字体：",[24,135679],{"style":26,"src":135680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[29,135682,135683],{},"下载：",[24,135685],{"style":26,"src":135686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[162,135688,135689],{},[40,135690,135691,135692],{},"阿里iconfont字体库： ",[187,135693,135694],{"href":135694,"rel":135695},"http:\u002F\u002Fwww.iconfont.cn\u002F",[191],[19,135697,135699],{"id":135698},"_1234-字体图标的引入","12.3.4 字体图标的引入",[37,135701,135702],{},[40,135703,135704,135705,135708],{},"把下载包里面的 ",[195,135706,135707],{},"fonts"," 文件夹放入页面根目录下",[24,135710],{"style":26,"src":135711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[37,135713,135714],{"start":79},[40,135715,135716],{},"字体文件格式",[1530,135718,135719,135728],{},[1533,135720,135721],{},[1536,135722,135723,135726],{},[1539,135724,135725],{"align":1202},"格式",[1539,135727,24977],{"align":1202},[1576,135729,135730,135740,135750,135760],{},[1536,135731,135732,135737],{},[1581,135733,135734],{"align":1202},[195,135735,135736],{},".ttf",[1581,135738,135739],{"align":1202},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1536,135741,135742,135747],{},[1581,135743,135744],{"align":1202},[195,135745,135746],{},".woff",[1581,135748,135749],{"align":1202},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1536,135751,135752,135757],{},[1581,135753,135754],{"align":1202},[195,135755,135756],{},".eot",[1581,135758,135759],{"align":1202},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1536,135761,135762,135767],{},[1581,135763,135764],{"align":1202},[195,135765,135766],{},"svg",[1581,135768,135769],{"align":1202},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[37,135771,135772],{"start":106},[40,135773,135774],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[59,135776,135778],{"className":61,"code":135777,"language":63,"meta":64,"style":64},"\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",[66,135779,135780,135785,135792,135804,135820,135845,135866,135886,135906,135910,135916,135926,135937],{"__ignoreMap":64},[69,135781,135782],{"class":71,"line":72},[69,135783,135784],{"class":75},"\u002F* 引入字体图标 *\u002F\n",[69,135786,135787,135790],{"class":71,"line":79},[69,135788,135789],{"class":82},"@font-face",[69,135791,113],{"class":86},[69,135793,135794,135797,135799,135802],{"class":71,"line":106},[69,135795,135796],{"class":90},"  font-family",[69,135798,94],{"class":86},[69,135800,135801],{"class":1022},"'icomoon'",[69,135803,130],{"class":86},[69,135805,135806,135809,135811,135813,135815,135818],{"class":71,"line":116},[69,135807,135808],{"class":90},"  src",[69,135810,94],{"class":86},[69,135812,62952],{"class":90},[69,135814,1398],{"class":86},[69,135816,135817],{"class":1022},"'fonts\u002Ficomoon.eot'",[69,135819,3963],{"class":86},[69,135821,135822,135824,135826,135828,135830,135833,135835,135838,135840,135843],{"class":71,"line":133},[69,135823,135808],{"class":90},[69,135825,94],{"class":86},[69,135827,62952],{"class":90},[69,135829,1398],{"class":86},[69,135831,135832],{"class":1022},"'fonts\u002Ficomoon.eot?#iefix'",[69,135834,14955],{"class":86},[69,135836,135837],{"class":90},"format",[69,135839,1398],{"class":86},[69,135841,135842],{"class":1022},"'embedded-opentype'",[69,135844,39283],{"class":86},[69,135846,135847,135850,135852,135855,135857,135859,135861,135864],{"class":71,"line":139},[69,135848,135849],{"class":90},"       url",[69,135851,1398],{"class":86},[69,135853,135854],{"class":1022},"'fonts\u002Ficomoon.woff'",[69,135856,14955],{"class":86},[69,135858,135837],{"class":90},[69,135860,1398],{"class":86},[69,135862,135863],{"class":1022},"'woff'",[69,135865,39283],{"class":86},[69,135867,135868,135870,135872,135875,135877,135879,135881,135884],{"class":71,"line":401},[69,135869,135849],{"class":90},[69,135871,1398],{"class":86},[69,135873,135874],{"class":1022},"'fonts\u002Ficomoon.ttf'",[69,135876,14955],{"class":86},[69,135878,135837],{"class":90},[69,135880,1398],{"class":86},[69,135882,135883],{"class":1022},"'truetype'",[69,135885,39283],{"class":86},[69,135887,135888,135890,135892,135895,135897,135899,135901,135904],{"class":71,"line":470},[69,135889,135849],{"class":90},[69,135891,1398],{"class":86},[69,135893,135894],{"class":1022},"'fonts\u002Ficomoon.svg#icomoon'",[69,135896,14955],{"class":86},[69,135898,135837],{"class":90},[69,135900,1398],{"class":86},[69,135902,135903],{"class":1022},"'svg'",[69,135905,3963],{"class":86},[69,135907,135908],{"class":71,"line":475},[69,135909,142],{"class":86},[69,135911,135912,135914],{"class":71,"line":482},[69,135913,135515],{"class":109},[69,135915,113],{"class":86},[69,135917,135918,135920,135922,135924],{"class":71,"line":497},[69,135919,135796],{"class":90},[69,135921,94],{"class":86},[69,135923,135801],{"class":1022},[69,135925,130],{"class":86},[69,135927,135928,135931,135933,135935],{"class":71,"line":502},[69,135929,135930],{"class":90},"  font-style",[69,135932,94],{"class":86},[69,135934,65067],{"class":90},[69,135936,130],{"class":86},[69,135938,135939],{"class":71,"line":509},[69,135940,142],{"class":86},[29,135942,135943],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[24,135945],{"style":26,"src":135946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[37,135948,135949],{"start":116},[40,135950,135951],{},"添加字体",[24,135953],{"style":26,"src":135954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[29,135956,135957],{},"复制：",[24,135959],{"style":26,"src":135960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[29,135962,135963],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[37,135965,135966],{"start":133},[40,135967,135968],{},"代码展示：",[59,135970,135971],{"className":61,"code":135777,"language":63,"meta":64,"style":64},[66,135972,135973,135977,135983,135993,136007,136029,136047,136065,136083,136087,136093,136103,136113],{"__ignoreMap":64},[69,135974,135975],{"class":71,"line":72},[69,135976,135784],{"class":75},[69,135978,135979,135981],{"class":71,"line":79},[69,135980,135789],{"class":82},[69,135982,113],{"class":86},[69,135984,135985,135987,135989,135991],{"class":71,"line":106},[69,135986,135796],{"class":90},[69,135988,94],{"class":86},[69,135990,135801],{"class":1022},[69,135992,130],{"class":86},[69,135994,135995,135997,135999,136001,136003,136005],{"class":71,"line":116},[69,135996,135808],{"class":90},[69,135998,94],{"class":86},[69,136000,62952],{"class":90},[69,136002,1398],{"class":86},[69,136004,135817],{"class":1022},[69,136006,3963],{"class":86},[69,136008,136009,136011,136013,136015,136017,136019,136021,136023,136025,136027],{"class":71,"line":133},[69,136010,135808],{"class":90},[69,136012,94],{"class":86},[69,136014,62952],{"class":90},[69,136016,1398],{"class":86},[69,136018,135832],{"class":1022},[69,136020,14955],{"class":86},[69,136022,135837],{"class":90},[69,136024,1398],{"class":86},[69,136026,135842],{"class":1022},[69,136028,39283],{"class":86},[69,136030,136031,136033,136035,136037,136039,136041,136043,136045],{"class":71,"line":139},[69,136032,135849],{"class":90},[69,136034,1398],{"class":86},[69,136036,135854],{"class":1022},[69,136038,14955],{"class":86},[69,136040,135837],{"class":90},[69,136042,1398],{"class":86},[69,136044,135863],{"class":1022},[69,136046,39283],{"class":86},[69,136048,136049,136051,136053,136055,136057,136059,136061,136063],{"class":71,"line":401},[69,136050,135849],{"class":90},[69,136052,1398],{"class":86},[69,136054,135874],{"class":1022},[69,136056,14955],{"class":86},[69,136058,135837],{"class":90},[69,136060,1398],{"class":86},[69,136062,135883],{"class":1022},[69,136064,39283],{"class":86},[69,136066,136067,136069,136071,136073,136075,136077,136079,136081],{"class":71,"line":470},[69,136068,135849],{"class":90},[69,136070,1398],{"class":86},[69,136072,135894],{"class":1022},[69,136074,14955],{"class":86},[69,136076,135837],{"class":90},[69,136078,1398],{"class":86},[69,136080,135903],{"class":1022},[69,136082,3963],{"class":86},[69,136084,136085],{"class":71,"line":475},[69,136086,142],{"class":86},[69,136088,136089,136091],{"class":71,"line":482},[69,136090,135515],{"class":109},[69,136092,113],{"class":86},[69,136094,136095,136097,136099,136101],{"class":71,"line":497},[69,136096,135796],{"class":90},[69,136098,94],{"class":86},[69,136100,135801],{"class":1022},[69,136102,130],{"class":86},[69,136104,136105,136107,136109,136111],{"class":71,"line":502},[69,136106,135930],{"class":90},[69,136108,94],{"class":86},[69,136110,65067],{"class":90},[69,136112,130],{"class":86},[69,136114,136115],{"class":71,"line":509},[69,136116,142],{"class":86},[24,136118],{"style":26,"src":136119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[29,136121,136122],{},"更加细节展示：",[37,136124,136125],{},[40,136126,136127],{},"html 标签内添加小图标",[24,136129],{"style":26,"src":136130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[37,136132,136133],{"start":79},[40,136134,136135],{},"给标签定义字体",[59,136137,136138],{"className":997,"code":998,"language":999,"meta":64,"style":64},[66,136139,136140,136144,136158,136162],{"__ignoreMap":64},[69,136141,136142],{"class":71,"line":72},[69,136143,1006],{"class":75},[69,136145,136146,136148,136150,136152,136154,136156],{"class":71,"line":79},[69,136147,1011],{"class":86},[69,136149,442],{"class":348},[69,136151,1016],{"class":109},[69,136153,1019],{"class":86},[69,136155,1023],{"class":1022},[69,136157,1026],{"class":86},[69,136159,136160],{"class":71,"line":106},[69,136161,1031],{"class":86},[69,136163,136164,136166,136168],{"class":71,"line":116},[69,136165,1036],{"class":86},[69,136167,442],{"class":348},[69,136169,1026],{"class":86},[29,136171,136172],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[24,136174],{"style":26,"src":136175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[19,136177,136179],{"id":136178},"_1235-字体图标的追加","12.3.5 字体图标的追加",[29,136181,136182],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[29,136184,136185,136186,136189],{},"把压缩包里面的 ",[195,136187,136188],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[29,136191,136192],{},"打开网站，点下方：",[24,136194],{"style":26,"src":136195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[24,136197],{"style":26,"src":136198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[24,136200],{"style":26,"src":136201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[29,136203,136204],{},"点yes重新加载",[29,136206,136207],{},"然后重复之前的操作就可以实现了",[29,136209,136210],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[19,136212,136214],{"id":136213},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[24,136216],{"style":26,"src":136217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1297,136219,136220],{},"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":64,"searchDepth":79,"depth":79,"links":136222},[136223,136229,136234],{"id":134826,"depth":79,"text":134827,"children":136224},[136225,136226,136227,136228],{"id":134838,"depth":106,"text":134839},{"id":134867,"depth":106,"text":134868},{"id":134895,"depth":106,"text":134896},{"id":134953,"depth":106,"text":134954},{"id":135425,"depth":79,"text":135426,"children":136230},[136231,136232,136233],{"id":135429,"depth":106,"text":135430},{"id":135474,"depth":106,"text":135475},{"id":135490,"depth":106,"text":135491},{"id":135590,"depth":79,"text":135591,"children":136235},[136236,136237,136238,136239,136240,136241],{"id":135594,"depth":106,"text":135595},{"id":135628,"depth":106,"text":135629},{"id":135651,"depth":106,"text":135652},{"id":135698,"depth":106,"text":135699},{"id":136178,"depth":106,"text":136179},{"id":136213,"depth":106,"text":136214},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134818,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136248,"title":136249,"body":136250,"description":1322,"extension":1323,"meta":137475,"navigation":1325,"path":137476,"seo":137477,"stem":137478,"__hash__":137479},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136251,"toc":137456},[136252,136255,136259,136262,136276,136344,136374,136377,136381,136385,136487,136534,136538,136541,136544,136578,136581,136584,136587,136590,136593,136596,136599,136601,136604,136607,136610,136613,136616,136619,136622,136650,136653,136657,136660,136667,136670,136673,136699,136702,136706,136709,136712,136719,136723,136726,136728,136760,136763,136766,136778,136784,136787,136790,136793,136795,136799,136801,136804,136807,136852,136856,136858,136861,136868,136910,136913,136917,136922,136936,136940,136943,136946,136949,136952,136955,136989,136992,136995,137049,137052,137055,137058,137061,137113,137116,137119,137168,137172,137174,137177,137180,137183,137186,137189,137246,137249,137255,137258,137261,137293,137296,137300,137304,137307,137339,137343,137346,137390,137394,137397,137400,137403,137406,137409,137412,137415,137417,137420,137422,137425,137428,137431,137434,137439,137442,137444,137447,137450,137453],[10,136253,136249],{"id":136254},"_13-界面样式与布局技巧",[14,136256,136258],{"id":136257},"_131-css三角","13.1 css三角",[29,136260,136261],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[162,136263,136264,136267,136270,136273],{},[40,136265,136266],{},"用css 边框可以模拟三角效果",[40,136268,136269],{},"宽度高度为0",[40,136271,136272],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[40,136274,136275],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[59,136277,136279],{"className":61,"code":136278,"language":63,"meta":64,"style":64},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[66,136280,136281,136286,136293,136303,136313,136329,136340],{"__ignoreMap":64},[69,136282,136283],{"class":71,"line":72},[69,136284,136285],{"class":75},"\u002F* CSS 实现三角形 *\u002F\n",[69,136287,136288,136291],{"class":71,"line":79},[69,136289,136290],{"class":109},".triangle",[69,136292,113],{"class":86},[69,136294,136295,136297,136299,136301],{"class":71,"line":106},[69,136296,385],{"class":90},[69,136298,94],{"class":86},[69,136300,1583],{"class":90},[69,136302,130],{"class":86},[69,136304,136305,136307,136309,136311],{"class":71,"line":116},[69,136306,72010],{"class":90},[69,136308,94],{"class":86},[69,136310,1583],{"class":90},[69,136312,130],{"class":86},[69,136314,136315,136317,136319,136321,136323,136325,136327],{"class":71,"line":133},[69,136316,72118],{"class":90},[69,136318,94],{"class":86},[69,136320,390],{"class":90},[69,136322,100],{"class":82},[69,136324,52752],{"class":90},[69,136326,65217],{"class":90},[69,136328,130],{"class":86},[69,136330,136331,136334,136336,136338],{"class":71,"line":139},[69,136332,136333],{"class":90},"  border-bottom-color",[69,136335,94],{"class":86},[69,136337,63595],{"class":90},[69,136339,130],{"class":86},[69,136341,136342],{"class":71,"line":401},[69,136343,142],{"class":86},[59,136345,136346],{"className":61,"code":131916,"language":63,"meta":64,"style":64},[66,136347,136348,136354,136370],{"__ignoreMap":64},[69,136349,136350,136352],{"class":71,"line":72},[69,136351,442],{"class":348},[69,136353,113],{"class":86},[69,136355,136356,136358,136360,136362,136364,136366,136368],{"class":71,"line":79},[69,136357,72118],{"class":90},[69,136359,94],{"class":86},[69,136361,1609],{"class":90},[69,136363,100],{"class":82},[69,136365,52752],{"class":90},[69,136367,131157],{"class":90},[69,136369,130],{"class":86},[69,136371,136372],{"class":71,"line":106},[69,136373,142],{"class":86},[24,136375],{"style":26,"src":136376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136378,136380],{"id":136379},"_132-css用户界面样式","13.2 css用户界面样式",[19,136382,136384],{"id":136383},"_1321-鼠标样式","13.2.1 鼠标样式",[59,136386,136388],{"className":61,"code":136387,"language":63,"meta":64,"style":64},"\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",[66,136389,136390,136395,136414,136432,136451,136468],{"__ignoreMap":64},[69,136391,136392],{"class":71,"line":72},[69,136393,136394],{"class":75},"\u002F* 鼠标样式 *\u002F\n",[69,136396,136397,136399,136401,136404,136406,136408,136411],{"class":71,"line":79},[69,136398,442],{"class":348},[69,136400,81028],{"class":86},[69,136402,136403],{"class":90},"cursor",[69,136405,94],{"class":86},[69,136407,63256],{"class":90},[69,136409,136410],{"class":86},"; }   ",[69,136412,136413],{"class":75},"\u002F* 手型 *\u002F\n",[69,136415,136416,136418,136420,136422,136424,136427,136429],{"class":71,"line":106},[69,136417,442],{"class":348},[69,136419,81028],{"class":86},[69,136421,136403],{"class":90},[69,136423,94],{"class":86},[69,136425,136426],{"class":90},"default",[69,136428,136410],{"class":86},[69,136430,136431],{"class":75},"\u002F* 默认 *\u002F\n",[69,136433,136434,136436,136438,136440,136442,136445,136448],{"class":71,"line":116},[69,136435,442],{"class":348},[69,136437,81028],{"class":86},[69,136439,136403],{"class":90},[69,136441,94],{"class":86},[69,136443,136444],{"class":90},"move",[69,136446,136447],{"class":86},"; }      ",[69,136449,136450],{"class":75},"\u002F* 移动 *\u002F\n",[69,136452,136453,136455,136457,136459,136461,136463,136465],{"class":71,"line":133},[69,136454,442],{"class":348},[69,136456,81028],{"class":86},[69,136458,136403],{"class":90},[69,136460,94],{"class":86},[69,136462,540],{"class":90},[69,136464,136447],{"class":86},[69,136466,136467],{"class":75},"\u002F* 文本 *\u002F\n",[69,136469,136470,136472,136474,136476,136478,136481,136484],{"class":71,"line":139},[69,136471,442],{"class":348},[69,136473,81028],{"class":86},[69,136475,136403],{"class":90},[69,136477,94],{"class":86},[69,136479,136480],{"class":90},"not-allowed",[69,136482,136483],{"class":86},"; } ",[69,136485,136486],{"class":75},"\u002F* 禁止 *\u002F\n",[1530,136488,136489,136497],{},[1533,136490,136491],{},[1536,136492,136493,136495],{},[1539,136494,128232],{"align":1202},[1539,136496,28725],{"align":1202},[1576,136498,136499,136506,136513,136520,136527],{},[1536,136500,136501,136503],{},[1581,136502,136426],{"align":1202},[1581,136504,136505],{"align":1202},"小白 默认",[1536,136507,136508,136510],{},[1581,136509,63256],{"align":1202},[1581,136511,136512],{"align":1202},"小手",[1536,136514,136515,136517],{},[1581,136516,136444],{"align":1202},[1581,136518,136519],{"align":1202},"移动",[1536,136521,136522,136524],{},[1581,136523,540],{"align":1202},[1581,136525,136526],{"align":1202},"文本",[1536,136528,136529,136531],{},[1581,136530,136480],{"align":1202},[1581,136532,136533],{"align":1202},"禁止",[19,136535,136537],{"id":136536},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[29,136539,136540],{},"去除表单轮廓线",[29,136542,136543],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[59,136545,136546],{"className":61,"code":131129,"language":63,"meta":64,"style":64},[66,136547,136548,136552,136558,136574],{"__ignoreMap":64},[69,136549,136550],{"class":71,"line":72},[69,136551,131136],{"class":75},[69,136553,136554,136556],{"class":71,"line":79},[69,136555,442],{"class":348},[69,136557,113],{"class":86},[69,136559,136560,136562,136564,136566,136568,136570,136572],{"class":71,"line":106},[69,136561,72118],{"class":90},[69,136563,94],{"class":86},[69,136565,1609],{"class":90},[69,136567,100],{"class":82},[69,136569,52752],{"class":90},[69,136571,131157],{"class":90},[69,136573,130],{"class":86},[69,136575,136576],{"class":71,"line":116},[69,136577,142],{"class":86},[29,136579,136580],{},"文本域：",[24,136582],{"style":26,"src":136583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[29,136585,136586],{},"此时会有一个空白区域",[24,136588],{"style":26,"src":136589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[29,136591,136592],{},"写在同一行就不会出现这个问题",[24,136594],{"style":26,"src":136595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[29,136597,136598],{},"文本域是行内块元素，一定记住！！！",[29,136600,99454],{},[24,136602],{"style":26,"src":136603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[29,136605,136606],{},"文本域尽量放在一行",[29,136608,136609],{},"知识回顾：cols是列，rols是行",[24,136611],{"style":26,"src":136612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[29,136614,136615],{},"它可以进行拖动，显然这是我们不愿意看到的",[24,136617],{"style":26,"src":136618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[29,136620,136621],{},"使用resize进行解决",[59,136623,136625],{"className":61,"code":136624,"language":63,"meta":64,"style":64},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[66,136626,136627,136633,136646],{"__ignoreMap":64},[69,136628,136629,136631],{"class":71,"line":72},[69,136630,55048],{"class":348},[69,136632,113],{"class":86},[69,136634,136635,136637,136639,136641,136643],{"class":71,"line":79},[69,136636,72020],{"class":90},[69,136638,94],{"class":86},[69,136640,55964],{"class":90},[69,136642,366],{"class":86},[69,136644,136645],{"class":75},"\u002F* 取消表单轮廓线 *\u002F\n",[69,136647,136648],{"class":71,"line":106},[69,136649,142],{"class":86},[29,136651,136652],{},"此时就无法通过右下方实现拖动了",[19,136654,136656],{"id":136655},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[29,136658,136659],{},"实现一个盒子中的文字和图片对齐",[29,136661,136662,136663,136666],{},"用于设置一个元素的 ",[195,136664,136665],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[29,136668,136669],{},"图片和文字默认是基线对齐",[24,136671],{"style":26,"src":136672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[59,136674,136675],{"className":61,"code":136624,"language":63,"meta":64,"style":64},[66,136676,136677,136683,136695],{"__ignoreMap":64},[69,136678,136679,136681],{"class":71,"line":72},[69,136680,55048],{"class":348},[69,136682,113],{"class":86},[69,136684,136685,136687,136689,136691,136693],{"class":71,"line":79},[69,136686,72020],{"class":90},[69,136688,94],{"class":86},[69,136690,55964],{"class":90},[69,136692,366],{"class":86},[69,136694,136645],{"class":75},[69,136696,136697],{"class":71,"line":106},[69,136698,142],{"class":86},[24,136700],{"style":26,"src":136701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23237,136703,136705],{"id":136704},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[29,136707,136708],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[24,136710],{"style":26,"src":136711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[29,136713,136714,136715,136718],{},"此时可以给图片、表单这些行内块元素的 ",[195,136716,136717],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23237,136720,136722],{"id":136721},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[29,136724,136725],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[29,136727,327],{},[59,136729,136731],{"className":61,"code":136730,"language":63,"meta":64,"style":64},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[66,136732,136733,136738,136744,136756],{"__ignoreMap":64},[69,136734,136735],{"class":71,"line":72},[69,136736,136737],{"class":75},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[69,136739,136740,136742],{"class":71,"line":79},[69,136741,24],{"class":348},[69,136743,113],{"class":86},[69,136745,136746,136749,136751,136754],{"class":71,"line":106},[69,136747,136748],{"class":90},"  vertical-align",[69,136750,94],{"class":86},[69,136752,136753],{"class":90},"middle",[69,136755,130],{"class":86},[69,136757,136758],{"class":71,"line":116},[69,136759,142],{"class":86},[24,136761],{"style":26,"src":136762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[29,136764,136765],{},"主要解决方法有两种：",[37,136767,136768],{},[40,136769,136770,136773,136774,136777],{},[195,136771,136772],{},"给图片"," 添加 ",[195,136775,136776],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[29,136779,136780,136781],{},"2.把图片转换为块级元素 ",[195,136782,136783],{},"display: block",[29,136785,136786],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[29,136788,136789],{},"img {",[29,136791,136792],{},"vertical-align:middle;",[29,136794,2332],{},[19,136796,136798],{"id":136797},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[29,136800,973],{},[24,136802],{"style":26,"src":136803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[29,136805,136806],{},"单行文本溢出显示省略号--必须满足三个条件：",[59,136808,136810],{"className":61,"code":136809,"language":63,"meta":64,"style":64},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[66,136811,136812,136817,136823,136833,136838,136848],{"__ignoreMap":64},[69,136813,136814],{"class":71,"line":72},[69,136815,136816],{"class":75},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[69,136818,136819,136821],{"class":71,"line":79},[69,136820,24],{"class":348},[69,136822,113],{"class":86},[69,136824,136825,136827,136829,136831],{"class":71,"line":106},[69,136826,136748],{"class":90},[69,136828,94],{"class":86},[69,136830,136753],{"class":90},[69,136832,130],{"class":86},[69,136834,136835],{"class":71,"line":116},[69,136836,136837],{"class":75},"  \u002F* 或 *\u002F\n",[69,136839,136840,136842,136844,136846],{"class":71,"line":133},[69,136841,129381],{"class":90},[69,136843,94],{"class":86},[69,136845,62095],{"class":90},[69,136847,130],{"class":86},[69,136849,136850],{"class":71,"line":139},[69,136851,142],{"class":86},[19,136853,136855],{"id":136854},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[29,136857,973],{},[24,136859],{"style":26,"src":136860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[29,136862,136863,136864,136867],{},"多行文本溢出显示省略号， ",[195,136865,136866],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[59,136869,136870],{"className":61,"code":136809,"language":63,"meta":64,"style":64},[66,136871,136872,136876,136882,136892,136896,136906],{"__ignoreMap":64},[69,136873,136874],{"class":71,"line":72},[69,136875,136816],{"class":75},[69,136877,136878,136880],{"class":71,"line":79},[69,136879,24],{"class":348},[69,136881,113],{"class":86},[69,136883,136884,136886,136888,136890],{"class":71,"line":106},[69,136885,136748],{"class":90},[69,136887,94],{"class":86},[69,136889,136753],{"class":90},[69,136891,130],{"class":86},[69,136893,136894],{"class":71,"line":116},[69,136895,136837],{"class":75},[69,136897,136898,136900,136902,136904],{"class":71,"line":133},[69,136899,129381],{"class":90},[69,136901,94],{"class":86},[69,136903,62095],{"class":90},[69,136905,130],{"class":86},[69,136907,136908],{"class":71,"line":139},[69,136909,142],{"class":86},[29,136911,136912],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136914,136916],{"id":136915},"_133-常见布局技巧","13.3 常见布局技巧",[29,136918,136919],{},[195,136920,136921],{},"巧妙利用一个技术更快更好的布局：",[37,136923,136924,136927,136930,136933],{},[40,136925,136926],{},"margin负值的运用",[40,136928,136929],{},"文字围绕浮动元素",[40,136931,136932],{},"行内块的巧妙运用",[40,136934,136935],{},"CSS三角强化",[19,136937,136939],{"id":136938},"_1331-margin负值的运用","13.3.1 margin负值的运用",[29,136941,136942],{},"应用场景：",[24,136944],{"style":26,"src":136945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[24,136947],{"style":26,"src":136948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[29,136950,136951],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[29,136953,136954],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[59,136956,136957],{"className":61,"code":131129,"language":63,"meta":64,"style":64},[66,136958,136959,136963,136969,136985],{"__ignoreMap":64},[69,136960,136961],{"class":71,"line":72},[69,136962,131136],{"class":75},[69,136964,136965,136967],{"class":71,"line":79},[69,136966,442],{"class":348},[69,136968,113],{"class":86},[69,136970,136971,136973,136975,136977,136979,136981,136983],{"class":71,"line":106},[69,136972,72118],{"class":90},[69,136974,94],{"class":86},[69,136976,1609],{"class":90},[69,136978,100],{"class":82},[69,136980,52752],{"class":90},[69,136982,131157],{"class":90},[69,136984,130],{"class":86},[69,136986,136987],{"class":71,"line":116},[69,136988,142],{"class":86},[24,136990],{"style":26,"src":136991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[29,136993,136994],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[59,136996,136998],{"className":61,"code":136997,"language":63,"meta":64,"style":64},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[66,136999,137000,137005,137011,137021,137033,137045],{"__ignoreMap":64},[69,137001,137002],{"class":71,"line":72},[69,137003,137004],{"class":75},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[69,137006,137007,137009],{"class":71,"line":79},[69,137008,378],{"class":109},[69,137010,113],{"class":86},[69,137012,137013,137015,137017,137019],{"class":71,"line":106},[69,137014,133564],{"class":90},[69,137016,94],{"class":86},[69,137018,55991],{"class":90},[69,137020,130],{"class":86},[69,137022,137023,137025,137027,137029,137031],{"class":71,"line":116},[69,137024,133578],{"class":90},[69,137026,94],{"class":86},[69,137028,390],{"class":90},[69,137030,100],{"class":82},[69,137032,130],{"class":86},[69,137034,137035,137037,137039,137041,137043],{"class":71,"line":133},[69,137036,133595],{"class":90},[69,137038,94],{"class":86},[69,137040,2087],{"class":90},[69,137042,100],{"class":82},[69,137044,130],{"class":86},[69,137046,137047],{"class":71,"line":139},[69,137048,142],{"class":86},[29,137050,137051],{},"加上上述代码会发现：",[24,137053],{"style":26,"src":137054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[29,137056,137057],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[29,137059,137060],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[59,137062,137063],{"className":61,"code":136997,"language":63,"meta":64,"style":64},[66,137064,137065,137069,137075,137085,137097,137109],{"__ignoreMap":64},[69,137066,137067],{"class":71,"line":72},[69,137068,137004],{"class":75},[69,137070,137071,137073],{"class":71,"line":79},[69,137072,378],{"class":109},[69,137074,113],{"class":86},[69,137076,137077,137079,137081,137083],{"class":71,"line":106},[69,137078,133564],{"class":90},[69,137080,94],{"class":86},[69,137082,55991],{"class":90},[69,137084,130],{"class":86},[69,137086,137087,137089,137091,137093,137095],{"class":71,"line":116},[69,137088,133578],{"class":90},[69,137090,94],{"class":86},[69,137092,390],{"class":90},[69,137094,100],{"class":82},[69,137096,130],{"class":86},[69,137098,137099,137101,137103,137105,137107],{"class":71,"line":133},[69,137100,133595],{"class":90},[69,137102,94],{"class":86},[69,137104,2087],{"class":90},[69,137106,100],{"class":82},[69,137108,130],{"class":86},[69,137110,137111],{"class":71,"line":139},[69,137112,142],{"class":86},[29,137114,137115],{},"解决方式2：",[29,137117,137118],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[59,137120,137122],{"className":61,"code":137121,"language":63,"meta":64,"style":64},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[66,137123,137124,137130,137140,137152,137164],{"__ignoreMap":64},[69,137125,137126,137128],{"class":71,"line":72},[69,137127,442],{"class":348},[69,137129,113],{"class":86},[69,137131,137132,137134,137136,137138],{"class":71,"line":79},[69,137133,133564],{"class":90},[69,137135,94],{"class":86},[69,137137,55991],{"class":90},[69,137139,130],{"class":86},[69,137141,137142,137144,137146,137148,137150],{"class":71,"line":106},[69,137143,133578],{"class":90},[69,137145,94],{"class":86},[69,137147,390],{"class":90},[69,137149,100],{"class":82},[69,137151,130],{"class":86},[69,137153,137154,137156,137158,137160,137162],{"class":71,"line":116},[69,137155,133595],{"class":90},[69,137157,94],{"class":86},[69,137159,2087],{"class":90},[69,137161,100],{"class":82},[69,137163,130],{"class":86},[69,137165,137166],{"class":71,"line":133},[69,137167,142],{"class":86},[19,137169,137171],{"id":137170},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[29,137173,136942],{},[24,137175],{"style":26,"src":137176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[29,137178,137179],{},"实现结构图：",[24,137181],{"style":26,"src":137182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[29,137184,137185],{},"巧妙运用浮动元素不会压住文字的特性",[29,137187,137188],{},"代码显示：",[59,137190,137192],{"className":61,"code":137191,"language":63,"meta":64,"style":64},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[66,137193,137194,137200,137210,137214,137218,137222,137228,137242],{"__ignoreMap":64},[69,137195,137196,137198],{"class":71,"line":72},[69,137197,378],{"class":109},[69,137199,113],{"class":86},[69,137201,137202,137204,137206,137208],{"class":71,"line":79},[69,137203,1197],{"class":90},[69,137205,94],{"class":86},[69,137207,1202],{"class":90},[69,137209,130],{"class":86},[69,137211,137212],{"class":71,"line":106},[69,137213,142],{"class":86},[69,137215,137216],{"class":71,"line":116},[69,137217,467],{"class":86},[69,137219,137220],{"class":71,"line":133},[69,137221,131608],{"class":75},[69,137223,137224,137226],{"class":71,"line":139},[69,137225,378],{"class":109},[69,137227,113],{"class":86},[69,137229,137230,137232,137234,137236,137238,137240],{"class":71,"line":401},[69,137231,71694],{"class":90},[69,137233,94],{"class":86},[69,137235,1583],{"class":90},[69,137237,52787],{"class":90},[69,137239,366],{"class":86},[69,137241,131629],{"class":75},[69,137243,137244],{"class":71,"line":470},[69,137245,142],{"class":86},[29,137247,137248],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[59,137250,137253],{"className":137251,"code":137252,"language":540},[538],"\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",[66,137254,137252],{"__ignoreMap":64},[24,137256],{"style":26,"src":137257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[29,137259,137260],{},"最终展示结果：",[59,137262,137263],{"className":61,"code":131601,"language":63,"meta":64,"style":64},[66,137264,137265,137269,137275,137289],{"__ignoreMap":64},[69,137266,137267],{"class":71,"line":72},[69,137268,131608],{"class":75},[69,137270,137271,137273],{"class":71,"line":79},[69,137272,378],{"class":109},[69,137274,113],{"class":86},[69,137276,137277,137279,137281,137283,137285,137287],{"class":71,"line":106},[69,137278,71694],{"class":90},[69,137280,94],{"class":86},[69,137282,1583],{"class":90},[69,137284,52787],{"class":90},[69,137286,366],{"class":86},[69,137288,131629],{"class":75},[69,137290,137291],{"class":71,"line":116},[69,137292,142],{"class":86},[24,137294],{"style":26,"src":137295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137297,137299],{"id":137298},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[19,137301,137303],{"id":137302},"_1341-原理","13.4.1 原理",[24,137305],{"style":26,"src":137306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[59,137308,137309],{"className":61,"code":131601,"language":63,"meta":64,"style":64},[66,137310,137311,137315,137321,137335],{"__ignoreMap":64},[69,137312,137313],{"class":71,"line":72},[69,137314,131608],{"class":75},[69,137316,137317,137319],{"class":71,"line":79},[69,137318,378],{"class":109},[69,137320,113],{"class":86},[69,137322,137323,137325,137327,137329,137331,137333],{"class":71,"line":106},[69,137324,71694],{"class":90},[69,137326,94],{"class":86},[69,137328,1583],{"class":90},[69,137330,52787],{"class":90},[69,137332,366],{"class":86},[69,137334,131629],{"class":75},[69,137336,137337],{"class":71,"line":116},[69,137338,142],{"class":86},[19,137340,137342],{"id":137341},"_1342-实例","13.4.2 实例",[24,137344],{"style":26,"src":137345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[59,137347,137348],{"className":61,"code":132225,"language":63,"meta":64,"style":64},[66,137349,137350,137356,137366,137370,137376,137386],{"__ignoreMap":64},[69,137351,137352,137354],{"class":71,"line":72},[69,137353,132232],{"class":109},[69,137355,113],{"class":86},[69,137357,137358,137360,137362,137364],{"class":71,"line":79},[69,137359,1197],{"class":90},[69,137361,94],{"class":86},[69,137363,1202],{"class":90},[69,137365,130],{"class":86},[69,137367,137368],{"class":71,"line":106},[69,137369,142],{"class":86},[69,137371,137372,137374],{"class":71,"line":116},[69,137373,132253],{"class":109},[69,137375,113],{"class":86},[69,137377,137378,137380,137382,137384],{"class":71,"line":133},[69,137379,1197],{"class":90},[69,137381,94],{"class":86},[69,137383,73743],{"class":90},[69,137385,130],{"class":86},[69,137387,137388],{"class":71,"line":139},[69,137389,142],{"class":86},[14,137391,137393],{"id":137392},"_135-css的初始化","13.5 css的初始化",[29,137395,137396],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[29,137398,137399],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[29,137401,137402],{},"每个网页都必须首先进行 CSS初始化。",[29,137404,137405],{},"这里我们以 京东CSS初始化代码为例。",[29,137407,137408],{},"在网页右键查看网页源代码",[29,137410,137411],{},"找到css的link引入语句",[29,137413,137414],{},"然后ctrl+f 输入body",[29,137416,78447],{},[24,137418],{"style":26,"src":137419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[29,137421,78470],{},[24,137423],{"style":26,"src":137424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[29,137426,137427],{},"③打开了网页上传压缩的代码",[24,137429],{"style":26,"src":137430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[29,137432,137433],{},"④从body前可以查看这个网页的初始化代码",[29,137435,137436],{},[195,137437,137438],{},"Unicode编码字体：",[29,137440,137441],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[29,137443,84428],{},[29,137445,137446],{},"黑体 \\9ED1\\4F53",[29,137448,137449],{},"宋体 \\5B8B\\4F53",[29,137451,137452],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1297,137454,137455],{},"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":64,"searchDepth":79,"depth":79,"links":137457},[137458,137459,137466,137470,137474],{"id":136257,"depth":79,"text":136258},{"id":136379,"depth":79,"text":136380,"children":137460},[137461,137462,137463,137464,137465],{"id":136383,"depth":106,"text":136384},{"id":136536,"depth":106,"text":136537},{"id":136655,"depth":106,"text":136656},{"id":136797,"depth":106,"text":136798},{"id":136854,"depth":106,"text":136855},{"id":136915,"depth":79,"text":136916,"children":137467},[137468,137469],{"id":136938,"depth":106,"text":136939},{"id":137170,"depth":106,"text":137171},{"id":137298,"depth":79,"text":137299,"children":137471},[137472,137473],{"id":137302,"depth":106,"text":137303},{"id":137341,"depth":106,"text":137342},{"id":137392,"depth":79,"text":137393},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136249,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137481,"title":137482,"body":137483,"description":1322,"extension":1323,"meta":139169,"navigation":1325,"path":139170,"seo":139171,"stem":139172,"__hash__":139173},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137484,"toc":139158},[137485,137488,137492,137496,137499,137506,137509,137512,137550,137553,137555,137569,137573,137582,137586,137591,137594,137597,137600,137635,137640,137643,137673,137676,137681,137684,137687,137717,137720,137774,137777,137781,137786,137798,137801,137805,137835,137838,137843,137846,137876,137879,137883,137900,137904,137908,137911,137944,137947,137951,137954,137957,137960,137963,137966,138077,138080,138083,138086,138188,138191,138195,138199,138203,138206,138246,138249,138251,138267,138271,138274,138279,138360,138363,138366,138492,138497,138500,138508,138511,138516,138601,138604,138608,138611,138614,138618,138638,138643,138727,138730,138735,138738,138741,138819,138822,138825,138828,138831,138834,138839,138842,138845,138917,138920,138925,138928,139025,139028,139034,139037,139040,139043,139046,139049,139052,139055,139058,139062,139067,139070,139103,139108,139111,139152,139155],[10,137486,137482],{"id":137487},"_14-html5与css3新特性",[14,137489,137491],{"id":137490},"_141-html5的新特性","14.1 HTML5的新特性",[19,137493,137495],{"id":137494},"_1411-基本标签","14.1.1 基本标签",[29,137497,137498],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[29,137500,137501,137502,137505],{},"这些新特性都有兼容性问题，基本是 ",[195,137503,137504],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[29,137507,137508],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[29,137510,137511],{},"现在使用的是新特性：",[162,137513,137514,137520,137526,137532,137538,137544],{},[40,137515,137516,137519],{},[66,137517,137518],{},"\u003Cheader>"," 头部标签",[40,137521,137522,137525],{},[66,137523,137524],{},"\u003Cnav>"," 导航标签",[40,137527,137528,137531],{},[66,137529,137530],{},"\u003Carticle>"," 内容标签",[40,137533,137534,137537],{},[66,137535,137536],{},"\u003Csection>"," 定义文档某个区域",[40,137539,137540,137543],{},[66,137541,137542],{},"\u003Caside>"," 侧边栏标签",[40,137545,137546,137549],{},[66,137547,137548],{},"\u003Cfooter>"," 尾部标签",[24,137551],{"style":26,"src":137552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[29,137554,272],{},[162,137556,137557,137560,137563,137566],{},[40,137558,137559],{},"这种语义化标准主要是针对搜索引擎的",[40,137561,137562],{},"这些标签页面中可以经常使用",[40,137564,137565],{},"在IE9中，需要把这些元素转换为块级元素",[40,137567,137568],{},"移动端更喜欢使用这些标签",[19,137570,137572],{"id":137571},"_1412-多媒体标签","14.1.2 多媒体标签",[29,137574,137575,137576,137578,137579,137581],{},"音频 ",[195,137577,29410],{}," 和视频 ",[195,137580,29419],{}," 两个标签",[23237,137583,137585],{"id":137584},"_14121-视频标签-video","14.1.2.1 视频标签- video",[37,137587,137588],{},[40,137589,137590],{},"支持格式：",[24,137592],{"style":26,"src":137593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[29,137595,137596],{},"尽量使用MP4，兼容性好",[29,137598,137599],{},"用MP4就可以",[59,137601,137603],{"className":997,"code":137602,"language":999,"meta":64,"style":64},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[66,137604,137605],{"__ignoreMap":64},[69,137606,137607,137609,137611,137613,137615,137618,137620,137623,137626,137629,137631,137633],{"class":71,"line":72},[69,137608,1011],{"class":86},[69,137610,29419],{"class":348},[69,137612,56466],{"class":109},[69,137614,1019],{"class":86},[69,137616,137617],{"class":1022},"\"movie.mp4\"",[69,137619,93644],{"class":109},[69,137621,137622],{"class":109}," autoplay",[69,137624,137625],{"class":109}," muted",[69,137627,137628],{"class":109}," loop",[69,137630,56541],{"class":86},[69,137632,29419],{"class":348},[69,137634,1026],{"class":86},[37,137636,137637],{"start":79},[40,137638,137639],{},"兼容写法",[29,137641,137642],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[59,137644,137645],{"className":997,"code":137602,"language":999,"meta":64,"style":64},[66,137646,137647],{"__ignoreMap":64},[69,137648,137649,137651,137653,137655,137657,137659,137661,137663,137665,137667,137669,137671],{"class":71,"line":72},[69,137650,1011],{"class":86},[69,137652,29419],{"class":348},[69,137654,56466],{"class":109},[69,137656,1019],{"class":86},[69,137658,137617],{"class":1022},[69,137660,93644],{"class":109},[69,137662,137622],{"class":109},[69,137664,137625],{"class":109},[69,137666,137628],{"class":109},[69,137668,56541],{"class":86},[69,137670,29419],{"class":348},[69,137672,1026],{"class":86},[29,137674,137675],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[37,137677,137678],{"start":106},[40,137679,137680],{},"video常用属性",[24,137682],{"style":26,"src":137683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[29,137685,137686],{},"poster属性后面是跟的等待加载图片的地址",[59,137688,137689],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,137690,137691],{"__ignoreMap":64},[69,137692,137693,137695,137697,137699,137701,137703,137705,137707,137709,137711,137713,137715],{"class":71,"line":72},[69,137694,1011],{"class":86},[69,137696,24],{"class":348},[69,137698,56466],{"class":109},[69,137700,1019],{"class":86},[69,137702,135275],{"class":1022},[69,137704,56474],{"class":109},[69,137706,1019],{"class":86},[69,137708,135282],{"class":1022},[69,137710,135285],{"class":109},[69,137712,1019],{"class":86},[69,137714,135290],{"class":1022},[69,137716,1026],{"class":86},[29,137718,137719],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[59,137721,137723],{"className":61,"code":137722,"language":63,"meta":64,"style":64},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[66,137724,137725,137730,137736,137760,137765,137770],{"__ignoreMap":64},[69,137726,137727],{"class":71,"line":72},[69,137728,137729],{"class":75},"\u002F* 2D 位移 *\u002F\n",[69,137731,137732,137734],{"class":71,"line":79},[69,137733,442],{"class":348},[69,137735,113],{"class":86},[69,137737,137738,137741,137743,137746,137748,137750,137752,137754,137756,137758],{"class":71,"line":106},[69,137739,137740],{"class":90},"  transform",[69,137742,94],{"class":86},[69,137744,137745],{"class":90},"translate",[69,137747,1398],{"class":86},[69,137749,124],{"class":90},[69,137751,100],{"class":82},[69,137753,13677],{"class":86},[69,137755,2043],{"class":90},[69,137757,100],{"class":82},[69,137759,3963],{"class":86},[69,137761,137762],{"class":71,"line":116},[69,137763,137764],{"class":75},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[69,137766,137767],{"class":71,"line":133},[69,137768,137769],{"class":75},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[69,137771,137772],{"class":71,"line":139},[69,137773,142],{"class":86},[29,137775,137776],{},"muted:自动静音属性",[23237,137778,137780],{"id":137779},"_14122-音频标签audio","14.1.2.2 音频标签audio",[37,137782,137783],{},[40,137784,137785],{},"基本使用",[29,137787,137788,137789,137794,137795],{},"当前 ",[195,137790,137791],{},[66,137792,137793],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[195,137796,137797],{},"mp3格式",[24,137799],{"style":26,"src":137800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[37,137802,137803],{"start":79},[40,137804,137639],{},[59,137806,137807],{"className":997,"code":137602,"language":999,"meta":64,"style":64},[66,137808,137809],{"__ignoreMap":64},[69,137810,137811,137813,137815,137817,137819,137821,137823,137825,137827,137829,137831,137833],{"class":71,"line":72},[69,137812,1011],{"class":86},[69,137814,29419],{"class":348},[69,137816,56466],{"class":109},[69,137818,1019],{"class":86},[69,137820,137617],{"class":1022},[69,137822,93644],{"class":109},[69,137824,137622],{"class":109},[69,137826,137625],{"class":109},[69,137828,137628],{"class":109},[69,137830,56541],{"class":86},[69,137832,29419],{"class":348},[69,137834,1026],{"class":86},[29,137836,137837],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[37,137839,137840],{"start":106},[40,137841,137842],{},"常用属性",[24,137844],{"style":26,"src":137845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[59,137847,137848],{"className":997,"code":137602,"language":999,"meta":64,"style":64},[66,137849,137850],{"__ignoreMap":64},[69,137851,137852,137854,137856,137858,137860,137862,137864,137866,137868,137870,137872,137874],{"class":71,"line":72},[69,137853,1011],{"class":86},[69,137855,29419],{"class":348},[69,137857,56466],{"class":109},[69,137859,1019],{"class":86},[69,137861,137617],{"class":1022},[69,137863,93644],{"class":109},[69,137865,137622],{"class":109},[69,137867,137625],{"class":109},[69,137869,137628],{"class":109},[69,137871,56541],{"class":86},[69,137873,29419],{"class":348},[69,137875,1026],{"class":86},[29,137877,137878],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23237,137880,137882],{"id":137881},"_14123-总结","14.1.2.3 总结",[162,137884,137885,137888,137891,137894,137897],{},[40,137886,137887],{},"音频标签和视频标签使用方式基本一致",[40,137889,137890],{},"浏览器支持情况不同",[40,137892,137893],{},"谷歌浏览器把音频和视频自动播放禁止了",[40,137895,137896],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[40,137898,137899],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[19,137901,137903],{"id":137902},"_1413-表单元素","14.1.3 表单元素",[23237,137905,137907],{"id":137906},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[24,137909],{"style":26,"src":137910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[59,137912,137914],{"className":997,"code":137913,"language":999,"meta":64,"style":64},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[66,137915,137916],{"__ignoreMap":64},[69,137917,137918,137920,137922,137924,137926,137928,137930,137932,137935,137937,137939,137942],{"class":71,"line":72},[69,137919,1011],{"class":86},[69,137921,55048],{"class":348},[69,137923,55051],{"class":109},[69,137925,1019],{"class":86},[69,137927,63925],{"class":1022},[69,137929,16160],{"class":109},[69,137931,1019],{"class":86},[69,137933,137934],{"class":1022},"\"username\"",[69,137936,62246],{"class":109},[69,137938,1019],{"class":86},[69,137940,137941],{"class":1022},"\"请输入用户名\"",[69,137943,1026],{"class":86},[24,137945],{"style":26,"src":137946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23237,137948,137950],{"id":137949},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[24,137952],{"style":26,"src":137953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[29,137955,137956],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[29,137958,137959],{},"快捷操作：",[24,137961],{"style":26,"src":137962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[29,137964,137965],{},"例子1：",[59,137967,137969],{"className":997,"code":137968,"language":999,"meta":64,"style":64},"\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",[66,137970,137971,137994,138021,138050,138069],{"__ignoreMap":64},[69,137972,137973,137975,137977,137979,137981,137984,137987,137989,137992],{"class":71,"line":72},[69,137974,1011],{"class":86},[69,137976,67851],{"class":348},[69,137978,67854],{"class":109},[69,137980,1019],{"class":86},[69,137982,137983],{"class":1022},"\"\u002Fsubmit\"",[69,137985,137986],{"class":109}," method",[69,137988,1019],{"class":86},[69,137990,137991],{"class":1022},"\"post\"",[69,137993,1026],{"class":86},[69,137995,137996,137998,138000,138002,138004,138006,138008,138010,138012,138014,138016,138019],{"class":71,"line":79},[69,137997,53372],{"class":86},[69,137999,55048],{"class":348},[69,138001,55051],{"class":109},[69,138003,1019],{"class":86},[69,138005,63925],{"class":1022},[69,138007,16160],{"class":109},[69,138009,1019],{"class":86},[69,138011,137934],{"class":1022},[69,138013,62246],{"class":109},[69,138015,1019],{"class":86},[69,138017,138018],{"class":1022},"\"用户名\"",[69,138020,1026],{"class":86},[69,138022,138023,138025,138027,138029,138031,138034,138036,138038,138041,138043,138045,138048],{"class":71,"line":106},[69,138024,53372],{"class":86},[69,138026,55048],{"class":348},[69,138028,55051],{"class":109},[69,138030,1019],{"class":86},[69,138032,138033],{"class":1022},"\"password\"",[69,138035,16160],{"class":109},[69,138037,1019],{"class":86},[69,138039,138040],{"class":1022},"\"pwd\"",[69,138042,62246],{"class":109},[69,138044,1019],{"class":86},[69,138046,138047],{"class":1022},"\"密码\"",[69,138049,1026],{"class":86},[69,138051,138052,138054,138056,138058,138060,138062,138065,138067],{"class":71,"line":116},[69,138053,53372],{"class":86},[69,138055,55114],{"class":348},[69,138057,55051],{"class":109},[69,138059,1019],{"class":86},[69,138061,67874],{"class":1022},[69,138063,138064],{"class":86},">提交\u003C\u002F",[69,138066,55114],{"class":348},[69,138068,1026],{"class":86},[69,138070,138071,138073,138075],{"class":71,"line":133},[69,138072,1036],{"class":86},[69,138074,67851],{"class":348},[69,138076,1026],{"class":86},[24,138078],{"style":26,"src":138079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[29,138081,138082],{},"value是表单域的内容",[29,138084,138085],{},"例子2：",[59,138087,138088],{"className":997,"code":137968,"language":999,"meta":64,"style":64},[66,138089,138090,138110,138136,138162,138180],{"__ignoreMap":64},[69,138091,138092,138094,138096,138098,138100,138102,138104,138106,138108],{"class":71,"line":72},[69,138093,1011],{"class":86},[69,138095,67851],{"class":348},[69,138097,67854],{"class":109},[69,138099,1019],{"class":86},[69,138101,137983],{"class":1022},[69,138103,137986],{"class":109},[69,138105,1019],{"class":86},[69,138107,137991],{"class":1022},[69,138109,1026],{"class":86},[69,138111,138112,138114,138116,138118,138120,138122,138124,138126,138128,138130,138132,138134],{"class":71,"line":79},[69,138113,53372],{"class":86},[69,138115,55048],{"class":348},[69,138117,55051],{"class":109},[69,138119,1019],{"class":86},[69,138121,63925],{"class":1022},[69,138123,16160],{"class":109},[69,138125,1019],{"class":86},[69,138127,137934],{"class":1022},[69,138129,62246],{"class":109},[69,138131,1019],{"class":86},[69,138133,138018],{"class":1022},[69,138135,1026],{"class":86},[69,138137,138138,138140,138142,138144,138146,138148,138150,138152,138154,138156,138158,138160],{"class":71,"line":106},[69,138139,53372],{"class":86},[69,138141,55048],{"class":348},[69,138143,55051],{"class":109},[69,138145,1019],{"class":86},[69,138147,138033],{"class":1022},[69,138149,16160],{"class":109},[69,138151,1019],{"class":86},[69,138153,138040],{"class":1022},[69,138155,62246],{"class":109},[69,138157,1019],{"class":86},[69,138159,138047],{"class":1022},[69,138161,1026],{"class":86},[69,138163,138164,138166,138168,138170,138172,138174,138176,138178],{"class":71,"line":116},[69,138165,53372],{"class":86},[69,138167,55114],{"class":348},[69,138169,55051],{"class":109},[69,138171,1019],{"class":86},[69,138173,67874],{"class":1022},[69,138175,138064],{"class":86},[69,138177,55114],{"class":348},[69,138179,1026],{"class":86},[69,138181,138182,138184,138186],{"class":71,"line":133},[69,138183,1036],{"class":86},[69,138185,67851],{"class":348},[69,138187,1026],{"class":86},[24,138189],{"style":26,"src":138190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138192,138194],{"id":138193},"_142-css新特性","14.2 CSS新特性",[19,138196,138198],{"id":138197},"_1421-新增选择器","14.2.1 新增选择器",[23237,138200,138202],{"id":138201},"_14211-属性选择器","14.2.1.1 属性选择器",[24,138204],{"style":26,"src":138205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[59,138207,138209],{"className":61,"code":138208,"language":63,"meta":64,"style":64},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[66,138210,138211,138226,138242],{"__ignoreMap":64},[69,138212,138213,138215,138217,138219,138221,138223],{"class":71,"line":72},[69,138214,55048],{"class":348},[69,138216,2277],{"class":86},[69,138218,104328],{"class":109},[69,138220,1019],{"class":82},[69,138222,63925],{"class":1022},[69,138224,138225],{"class":86},"] {\n",[69,138227,138228,138230,138232,138234,138236,138238,138240],{"class":71,"line":79},[69,138229,72118],{"class":90},[69,138231,94],{"class":86},[69,138233,1609],{"class":90},[69,138235,100],{"class":82},[69,138237,52752],{"class":90},[69,138239,131345],{"class":90},[69,138241,130],{"class":86},[69,138243,138244],{"class":71,"line":106},[69,138245,142],{"class":86},[24,138247],{"style":26,"src":138248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[29,138250,272],{},[162,138252,138253,138256,138259,138262],{},[40,138254,138255],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[40,138257,138258],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[40,138260,138261],{},"属性选择器也可以选择出来自定义的属性",[40,138263,138264,138266],{},[195,138265,10267],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23237,138268,138270],{"id":138269},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[24,138272],{"style":26,"src":138273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[37,138275,138276],{},[40,138277,138278],{},"fist-child",[59,138280,138282],{"className":61,"code":138281,"language":63,"meta":64,"style":64},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[66,138283,138284,138289,138304,138324,138342],{"__ignoreMap":64},[69,138285,138286],{"class":71,"line":72},[69,138287,138288],{"class":75},"\u002F* 属性选择器 *\u002F\n",[69,138290,138291,138293,138295,138297,138299,138301],{"class":71,"line":79},[69,138292,55048],{"class":348},[69,138294,2277],{"class":86},[69,138296,104328],{"class":109},[69,138298,1019],{"class":82},[69,138300,63925],{"class":1022},[69,138302,138303],{"class":86},"] { }\n",[69,138305,138306,138308,138310,138312,138315,138318,138321],{"class":71,"line":106},[69,138307,55048],{"class":348},[69,138309,2277],{"class":86},[69,138311,15934],{"class":109},[69,138313,138314],{"class":82},"^=",[69,138316,138317],{"class":1022},"\"icon\"",[69,138319,138320],{"class":86},"] { }  ",[69,138322,138323],{"class":75},"\u002F* 以 icon 开头 *\u002F\n",[69,138325,138326,138328,138330,138332,138335,138337,138339],{"class":71,"line":116},[69,138327,55048],{"class":348},[69,138329,2277],{"class":86},[69,138331,15934],{"class":109},[69,138333,138334],{"class":82},"$=",[69,138336,138317],{"class":1022},[69,138338,138320],{"class":86},[69,138340,138341],{"class":75},"\u002F* 以 icon 结尾 *\u002F\n",[69,138343,138344,138346,138348,138350,138353,138355,138357],{"class":71,"line":133},[69,138345,55048],{"class":348},[69,138347,2277],{"class":86},[69,138349,15934],{"class":109},[69,138351,138352],{"class":82},"*=",[69,138354,138317],{"class":1022},[69,138356,138320],{"class":86},[69,138358,138359],{"class":75},"\u002F* 包含 icon *\u002F\n",[29,138361,138362],{},"ul的第一个儿子文本为红色",[29,138364,138365],{},"一定要在冒号前加空格，不然就是选中所有的了",[59,138367,138369],{"className":61,"code":138368,"language":63,"meta":64,"style":64},".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",[66,138370,138371,138377,138387,138391,138395,138400,138413,138426,138442,138459,138476],{"__ignoreMap":64},[69,138372,138373,138375],{"class":71,"line":72},[69,138374,864],{"class":109},[69,138376,113],{"class":86},[69,138378,138379,138381,138383,138385],{"class":71,"line":79},[69,138380,871],{"class":90},[69,138382,94],{"class":86},[69,138384,876],{"class":90},[69,138386,130],{"class":86},[69,138388,138389],{"class":71,"line":106},[69,138390,142],{"class":86},[69,138392,138393],{"class":71,"line":116},[69,138394,467],{"class":86},[69,138396,138397],{"class":71,"line":133},[69,138398,138399],{"class":75},"\u002F* 结构伪类选择器 *\u002F\n",[69,138401,138402,138404,138407,138410],{"class":71,"line":139},[69,138403,40],{"class":348},[69,138405,138406],{"class":109},":first-child",[69,138408,138409],{"class":86}," { }           ",[69,138411,138412],{"class":75},"\u002F* 第一个 *\u002F\n",[69,138414,138415,138417,138420,138423],{"class":71,"line":401},[69,138416,40],{"class":348},[69,138418,138419],{"class":109},":last-child",[69,138421,138422],{"class":86}," { }            ",[69,138424,138425],{"class":75},"\u002F* 最后一个 *\u002F\n",[69,138427,138428,138430,138432,138434,138436,138439],{"class":71,"line":470},[69,138429,40],{"class":348},[69,138431,130679],{"class":109},[69,138433,1398],{"class":86},[69,138435,1471],{"class":90},[69,138437,138438],{"class":86},") { }          ",[69,138440,138441],{"class":75},"\u002F* 第2个 *\u002F\n",[69,138443,138444,138446,138448,138450,138453,138456],{"class":71,"line":475},[69,138445,40],{"class":348},[69,138447,130679],{"class":109},[69,138449,1398],{"class":86},[69,138451,138452],{"class":90},"2n",[69,138454,138455],{"class":86},") { }         ",[69,138457,138458],{"class":75},"\u002F* 偶数 *\u002F\n",[69,138460,138461,138463,138465,138467,138470,138473],{"class":71,"line":482},[69,138462,40],{"class":348},[69,138464,130679],{"class":109},[69,138466,1398],{"class":86},[69,138468,138469],{"class":90},"2n+1",[69,138471,138472],{"class":86},") { }       ",[69,138474,138475],{"class":75},"\u002F* 奇数 *\u002F\n",[69,138477,138478,138480,138482,138484,138487,138489],{"class":71,"line":497},[69,138479,40],{"class":348},[69,138481,130679],{"class":109},[69,138483,1398],{"class":86},[69,138485,138486],{"class":90},"-n+3",[69,138488,138472],{"class":86},[69,138490,138491],{"class":75},"\u002F* 前3个 *\u002F\n",[442,138493,138496],{"className":138494},[138495],"example","\n  示例内容\n",[29,138498,138499],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[162,138501,138502],{},[40,138503,138504,138507],{},[66,138505,138506],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[29,138509,138510],{},"也就是说它选择的是熊大",[37,138512,138513],{"start":139},[40,138514,138515],{},"权重",[59,138517,138519],{"className":61,"code":138518,"language":63,"meta":64,"style":64},"\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",[66,138520,138521,138525,138535,138545,138559,138573,138587],{"__ignoreMap":64},[69,138522,138523],{"class":71,"line":72},[69,138524,138399],{"class":75},[69,138526,138527,138529,138531,138533],{"class":71,"line":79},[69,138528,40],{"class":348},[69,138530,138406],{"class":109},[69,138532,138409],{"class":86},[69,138534,138412],{"class":75},[69,138536,138537,138539,138541,138543],{"class":71,"line":106},[69,138538,40],{"class":348},[69,138540,138419],{"class":109},[69,138542,138422],{"class":86},[69,138544,138425],{"class":75},[69,138546,138547,138549,138551,138553,138555,138557],{"class":71,"line":116},[69,138548,40],{"class":348},[69,138550,130679],{"class":109},[69,138552,1398],{"class":86},[69,138554,1471],{"class":90},[69,138556,138438],{"class":86},[69,138558,138441],{"class":75},[69,138560,138561,138563,138565,138567,138569,138571],{"class":71,"line":133},[69,138562,40],{"class":348},[69,138564,130679],{"class":109},[69,138566,1398],{"class":86},[69,138568,138452],{"class":90},[69,138570,138455],{"class":86},[69,138572,138458],{"class":75},[69,138574,138575,138577,138579,138581,138583,138585],{"class":71,"line":139},[69,138576,40],{"class":348},[69,138578,130679],{"class":109},[69,138580,1398],{"class":86},[69,138582,138469],{"class":90},[69,138584,138472],{"class":86},[69,138586,138475],{"class":75},[69,138588,138589,138591,138593,138595,138597,138599],{"class":71,"line":401},[69,138590,40],{"class":348},[69,138592,130679],{"class":109},[69,138594,1398],{"class":86},[69,138596,138486],{"class":90},[69,138598,138472],{"class":86},[69,138600,138491],{"class":75},[29,138602,138603],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23237,138605,138607],{"id":138606},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[29,138609,138610],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[24,138612],{"style":26,"src":138613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[37,138615,138616],{},[40,138617,272],{},[162,138619,138620,138623,138626,138629,138632,138635],{},[40,138621,138622],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[40,138624,138625],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[40,138627,138628],{},"语法： element::before {}",[40,138630,138631],{},"before 和 after 必须有 content 属性",[40,138633,138634],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[40,138636,138637],{},"伪元素选择器和标签选择器一样，权重为 1",[37,138639,138640],{"start":79},[40,138641,138642],{},"实例",[59,138644,138645],{"className":61,"code":138518,"language":63,"meta":64,"style":64},[66,138646,138647,138651,138661,138671,138685,138699,138713],{"__ignoreMap":64},[69,138648,138649],{"class":71,"line":72},[69,138650,138399],{"class":75},[69,138652,138653,138655,138657,138659],{"class":71,"line":79},[69,138654,40],{"class":348},[69,138656,138406],{"class":109},[69,138658,138409],{"class":86},[69,138660,138412],{"class":75},[69,138662,138663,138665,138667,138669],{"class":71,"line":106},[69,138664,40],{"class":348},[69,138666,138419],{"class":109},[69,138668,138422],{"class":86},[69,138670,138425],{"class":75},[69,138672,138673,138675,138677,138679,138681,138683],{"class":71,"line":116},[69,138674,40],{"class":348},[69,138676,130679],{"class":109},[69,138678,1398],{"class":86},[69,138680,1471],{"class":90},[69,138682,138438],{"class":86},[69,138684,138441],{"class":75},[69,138686,138687,138689,138691,138693,138695,138697],{"class":71,"line":133},[69,138688,40],{"class":348},[69,138690,130679],{"class":109},[69,138692,1398],{"class":86},[69,138694,138452],{"class":90},[69,138696,138455],{"class":86},[69,138698,138458],{"class":75},[69,138700,138701,138703,138705,138707,138709,138711],{"class":71,"line":139},[69,138702,40],{"class":348},[69,138704,130679],{"class":109},[69,138706,1398],{"class":86},[69,138708,138469],{"class":90},[69,138710,138472],{"class":86},[69,138712,138475],{"class":75},[69,138714,138715,138717,138719,138721,138723,138725],{"class":71,"line":401},[69,138716,40],{"class":348},[69,138718,130679],{"class":109},[69,138720,1398],{"class":86},[69,138722,138486],{"class":90},[69,138724,138472],{"class":86},[69,138726,138491],{"class":75},[24,138728],{"style":26,"src":138729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[37,138731,138732],{"start":106},[40,138733,138734],{},"使用场景1",[24,138736],{"style":26,"src":138737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[29,138739,138740],{},"不需要再加盒子来整红色那部分了",[59,138742,138744],{"className":61,"code":138743,"language":63,"meta":64,"style":64},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[66,138745,138746,138751,138760,138771,138781,138785,138794,138805,138815],{"__ignoreMap":64},[69,138747,138748],{"class":71,"line":72},[69,138749,138750],{"class":75},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[69,138752,138753,138755,138758],{"class":71,"line":79},[69,138754,442],{"class":348},[69,138756,138757],{"class":109},"::before",[69,138759,113],{"class":86},[69,138761,138762,138765,138767,138769],{"class":71,"line":106},[69,138763,138764],{"class":90},"  content",[69,138766,94],{"class":86},[69,138768,8894],{"class":1022},[69,138770,130],{"class":86},[69,138772,138773,138775,138777,138779],{"class":71,"line":116},[69,138774,129381],{"class":90},[69,138776,94],{"class":86},[69,138778,62095],{"class":90},[69,138780,130],{"class":86},[69,138782,138783],{"class":71,"line":133},[69,138784,142],{"class":86},[69,138786,138787,138789,138792],{"class":71,"line":139},[69,138788,442],{"class":348},[69,138790,138791],{"class":109},"::after",[69,138793,113],{"class":86},[69,138795,138796,138798,138800,138803],{"class":71,"line":401},[69,138797,138764],{"class":90},[69,138799,94],{"class":86},[69,138801,138802],{"class":1022},"\"→\"",[69,138804,130],{"class":86},[69,138806,138807,138809,138811,138813],{"class":71,"line":470},[69,138808,871],{"class":90},[69,138810,94],{"class":86},[69,138812,63296],{"class":90},[69,138814,130],{"class":86},[69,138816,138817],{"class":71,"line":475},[69,138818,142],{"class":86},[24,138820],{"style":26,"src":138821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[29,138823,138824],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[24,138826],{"style":26,"src":138827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[29,138829,138830],{},"但是在引用时需要先转义一下",[29,138832,138833],{},"content='\\e930'",[37,138835,138836],{"start":116},[40,138837,138838],{},"使用场景2",[29,138840,138841],{},"仿土豆效果",[29,138843,138844],{},"通过使用伪元素选择器可以减少body中盒子的数量",[59,138846,138847],{"className":61,"code":138743,"language":63,"meta":64,"style":64},[66,138848,138849,138853,138861,138871,138881,138885,138893,138903,138913],{"__ignoreMap":64},[69,138850,138851],{"class":71,"line":72},[69,138852,138750],{"class":75},[69,138854,138855,138857,138859],{"class":71,"line":79},[69,138856,442],{"class":348},[69,138858,138757],{"class":109},[69,138860,113],{"class":86},[69,138862,138863,138865,138867,138869],{"class":71,"line":106},[69,138864,138764],{"class":90},[69,138866,94],{"class":86},[69,138868,8894],{"class":1022},[69,138870,130],{"class":86},[69,138872,138873,138875,138877,138879],{"class":71,"line":116},[69,138874,129381],{"class":90},[69,138876,94],{"class":86},[69,138878,62095],{"class":90},[69,138880,130],{"class":86},[69,138882,138883],{"class":71,"line":133},[69,138884,142],{"class":86},[69,138886,138887,138889,138891],{"class":71,"line":139},[69,138888,442],{"class":348},[69,138890,138791],{"class":109},[69,138892,113],{"class":86},[69,138894,138895,138897,138899,138901],{"class":71,"line":401},[69,138896,138764],{"class":90},[69,138898,94],{"class":86},[69,138900,138802],{"class":1022},[69,138902,130],{"class":86},[69,138904,138905,138907,138909,138911],{"class":71,"line":470},[69,138906,871],{"class":90},[69,138908,94],{"class":86},[69,138910,63296],{"class":90},[69,138912,130],{"class":86},[69,138914,138915],{"class":71,"line":475},[69,138916,142],{"class":86},[24,138918],{"style":26,"src":138919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[37,138921,138922],{"start":133},[40,138923,138924],{},"使用场景3",[29,138926,138927],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[59,138929,138931],{"className":61,"code":138930,"language":63,"meta":64,"style":64},".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",[66,138932,138933,138939,138949,138953,138957,138961,138969,138979,138989,138993,139001,139011,139021],{"__ignoreMap":64},[69,138934,138935,138937],{"class":71,"line":72},[69,138936,378],{"class":109},[69,138938,113],{"class":86},[69,138940,138941,138943,138945,138947],{"class":71,"line":79},[69,138942,1197],{"class":90},[69,138944,94],{"class":86},[69,138946,1202],{"class":90},[69,138948,130],{"class":86},[69,138950,138951],{"class":71,"line":106},[69,138952,142],{"class":86},[69,138954,138955],{"class":71,"line":116},[69,138956,467],{"class":86},[69,138958,138959],{"class":71,"line":133},[69,138960,138750],{"class":75},[69,138962,138963,138965,138967],{"class":71,"line":139},[69,138964,442],{"class":348},[69,138966,138757],{"class":109},[69,138968,113],{"class":86},[69,138970,138971,138973,138975,138977],{"class":71,"line":401},[69,138972,138764],{"class":90},[69,138974,94],{"class":86},[69,138976,8894],{"class":1022},[69,138978,130],{"class":86},[69,138980,138981,138983,138985,138987],{"class":71,"line":470},[69,138982,129381],{"class":90},[69,138984,94],{"class":86},[69,138986,62095],{"class":90},[69,138988,130],{"class":86},[69,138990,138991],{"class":71,"line":475},[69,138992,142],{"class":86},[69,138994,138995,138997,138999],{"class":71,"line":482},[69,138996,442],{"class":348},[69,138998,138791],{"class":109},[69,139000,113],{"class":86},[69,139002,139003,139005,139007,139009],{"class":71,"line":497},[69,139004,138764],{"class":90},[69,139006,94],{"class":86},[69,139008,138802],{"class":1022},[69,139010,130],{"class":86},[69,139012,139013,139015,139017,139019],{"class":71,"line":502},[69,139014,871],{"class":90},[69,139016,94],{"class":86},[69,139018,63296],{"class":90},[69,139020,130],{"class":86},[69,139022,139023],{"class":71,"line":509},[69,139024,142],{"class":86},[29,139026,139027],{},"div {\nmargin: 0 auto;\n}",[59,139029,139032],{"className":139030,"code":139031,"language":540},[538],"\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",[66,139033,139031],{"__ignoreMap":64},[29,139035,139036],{},"如果想让多个元素都发生变化",[29,139038,139039],{},"不能如下操作：",[29,139041,139042],{},"transition: width 2s ease 0.5s;",[29,139044,139045],{},"transition: height 2s ease 0.5s;不对！！！",[29,139047,139048],{},"上方会样式冲突，导致不显示任何过渡效果",[29,139050,139051],{},"使用如下：加逗号隔开",[29,139053,139054],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[29,139056,139057],{},"transition all 2s ease;",[19,139059,139061],{"id":139060},"_1426-过渡练习","14.2.6 过渡练习",[37,139063,139064],{},[40,139065,139066],{},"进度条",[24,139068],{"style":26,"src":139069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[59,139071,139073],{"className":61,"code":139072,"language":63,"meta":64,"style":64},"div {\n  transition: all 0.3s ease;\n}\n",[66,139074,139075,139081,139099],{"__ignoreMap":64},[69,139076,139077,139079],{"class":71,"line":72},[69,139078,442],{"class":348},[69,139080,113],{"class":86},[69,139082,139083,139086,139088,139090,139093,139095,139097],{"class":71,"line":79},[69,139084,139085],{"class":90},"  transition",[69,139087,94],{"class":86},[69,139089,29357],{"class":90},[69,139091,139092],{"class":90}," 0.3",[69,139094,2082],{"class":82},[69,139096,79901],{"class":90},[69,139098,130],{"class":86},[69,139100,139101],{"class":71,"line":106},[69,139102,142],{"class":86},[37,139104,139105],{"start":79},[40,139106,139107],{},"小米logo",[29,139109,139110],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[59,139112,139114],{"className":61,"code":139113,"language":63,"meta":64,"style":64},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[66,139115,139116,139121,139127,139143,139148],{"__ignoreMap":64},[69,139117,139118],{"class":71,"line":72},[69,139119,139120],{"class":75},"\u002F* CSS3 过渡 *\u002F\n",[69,139122,139123,139125],{"class":71,"line":79},[69,139124,442],{"class":348},[69,139126,113],{"class":86},[69,139128,139129,139131,139133,139135,139137,139139,139141],{"class":71,"line":106},[69,139130,139085],{"class":90},[69,139132,94],{"class":86},[69,139134,29357],{"class":90},[69,139136,139092],{"class":90},[69,139138,2082],{"class":82},[69,139140,79901],{"class":90},[69,139142,130],{"class":86},[69,139144,139145],{"class":71,"line":116},[69,139146,139147],{"class":75},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[69,139149,139150],{"class":71,"line":133},[69,139151,142],{"class":86},[29,139153,139154],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1297,139156,139157],{},"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":64,"searchDepth":79,"depth":79,"links":139159},[139160,139165],{"id":137490,"depth":79,"text":137491,"children":139161},[139162,139163,139164],{"id":137494,"depth":106,"text":137495},{"id":137571,"depth":106,"text":137572},{"id":137902,"depth":106,"text":137903},{"id":138193,"depth":79,"text":138194,"children":139166},[139167,139168],{"id":138197,"depth":106,"text":138198},{"id":139060,"depth":106,"text":139061},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137482,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139175,"title":139176,"body":139177,"description":1322,"extension":1323,"meta":140920,"navigation":1325,"path":140921,"seo":140922,"stem":140923,"__hash__":140924},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139178,"toc":140901},[139179,139182,139186,139189,139195,139201,139205,139207,139210,139213,139216,139219,139222,139225,139228,139232,139236,139239,139242,139245,139249,139252,139255,139260,139263,139266,139269,139273,139276,139285,139288,139291,139295,139298,139301,139306,139313,139327,139335,139342,139347,139350,139353,139356,139363,139367,139373,139379,139382,139385,139390,139396,139398,139406,139411,139414,139420,139422,139427,139432,139435,139437,139442,139445,139450,139455,139489,139493,139497,139500,139504,139507,139593,139596,139633,139636,139672,139676,139681,139694,139748,139750,139778,139780,139808,139814,139828,139830,139874,139876,139920,139923,139930,139941,139943,139970,139972,139998,140005,140021,140023,140117,140119,140213,140220,140223,140228,140234,140308,140311,140313,140349,140351,140387,140390,140397,140416,140419,140422,140424,140448,140450,140474,140477,140480,140510,140514,140517,140580,140582,140648,140650,140714,140717,140749,140751,140777,140779,140805,140808,140839,140841,140867,140869,140895,140898],[10,139180,139176],{"id":139181},"_15-品优购项目上篇-搭建与公共模块",[14,139183,139185],{"id":139184},"_151-项目规划","15.1 项目规划",[24,139187],{"style":26,"src":139188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[29,139190,139191,139194],{},[195,139192,139193],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[29,139196,139197,139200],{},[195,139198,139199],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139202,139204],{"id":139203},"_152-项目介绍","15.2 项目介绍",[29,139206,139193],{},[24,139208],{"style":26,"src":139209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[29,139211,139212],{},"主页：",[24,139214],{"style":26,"src":139215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[29,139217,139218],{},"列表页：",[24,139220],{"style":26,"src":139221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[29,139223,139224],{},"注册页：",[24,139226],{"style":26,"src":139227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139229,139231],{"id":139230},"_153-项目搭建工作","15.3 项目搭建工作",[19,139233,139235],{"id":139234},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[24,139237],{"style":26,"src":139238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[29,139240,139241],{},"经常更换的图片要放到upload文件夹中",[29,139243,139244],{},"不经常换的放到images文件夹中",[19,139246,139248],{"id":139247},"_1532-创建文件如下","15.3.2 创建文件如下",[24,139250],{"style":26,"src":139251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[24,139253],{"style":26,"src":139254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[29,139256,139257],{},[195,139258,139259],{},"初始化样式：",[29,139261,139262],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[29,139264,139265],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[29,139267,139268],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[19,139270,139272],{"id":139271},"_1533-项目模块化开发","15.3.3 项目模块化开发",[29,139274,139275],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[29,139277,139278,139279,139284],{},"这里最典型的应用就是 ",[195,139280,139281],{},[66,139282,139283],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[24,139286],{"style":26,"src":139287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[29,139289,139290],{},"通过link方法来引入",[19,139292,139294],{"id":139293},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[24,139296],{"style":26,"src":139297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[29,139299,139300],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[37,139302,139303],{},[40,139304,139305],{},"制作favicon图标",[29,139307,139308,139309,139312],{},"①把品优购图标切成 ",[66,139310,139311],{},"png"," 图片",[29,139314,139315,139316,139318,139319,139322,139323],{},"②把 ",[66,139317,139311],{}," 图片转换为 ",[66,139320,139321],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[187,139324,139325],{"href":139325,"rel":139326},"http:\u002F\u002Fwww.bitbug.net\u002F",[191],[37,139328,139329,139332],{"start":79},[40,139330,139331],{},"favicon图标放到网站根目录下",[40,139333,139334],{},"HTML页面引入favicon",[29,139336,139337,139338,139341],{},"在html 页面里面的 ",[66,139339,139340],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[29,139343,139344],{},[66,139345,139346],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[29,139348,139349],{},"复制这行代码或者在生成这个的网站进行复制",[24,139351],{"style":26,"src":139352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[29,139354,139355],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[29,139357,139358,139359],{},"例如:",[187,139360,139361],{"href":139361,"rel":139362},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[191],[19,139364,139366],{"id":139365},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[29,139368,139369,139372],{},[195,139370,139371],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[29,139374,139375,139378],{},[195,139376,139377],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[29,139380,139381],{},"页面必须有三个标签用来符合 SEO 优化",[24,139383],{"style":26,"src":139384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[37,139386,139387],{},[40,139388,139389],{},"title网站标题",[29,139391,139392,139395],{},[195,139393,139394],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[29,139397,70016],{},[162,139399,139400,139403],{},[40,139401,139402],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[40,139404,139405],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[37,139407,139408],{"start":79},[40,139409,139410],{},"description网站描述",[29,139412,139413],{},"简要说明我们网站主要是做什么的",[29,139415,139416,139419],{},[195,139417,139418],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[29,139421,70016],{},[29,139423,139424],{},[66,139425,139426],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[37,139428,139429],{"start":106},[40,139430,139431],{},"keywords关键词",[29,139433,139434],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[29,139436,70016],{},[29,139438,139439],{},[66,139440,139441],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[29,139443,139444],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[29,139446,139447],{},[195,139448,139449],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[37,139451,139452],{"start":116},[40,139453,139454],{},"代码总结",[59,139456,139457],{"className":997,"code":998,"language":999,"meta":64,"style":64},[66,139458,139459,139463,139477,139481],{"__ignoreMap":64},[69,139460,139461],{"class":71,"line":72},[69,139462,1006],{"class":75},[69,139464,139465,139467,139469,139471,139473,139475],{"class":71,"line":79},[69,139466,1011],{"class":86},[69,139468,442],{"class":348},[69,139470,1016],{"class":109},[69,139472,1019],{"class":86},[69,139474,1023],{"class":1022},[69,139476,1026],{"class":86},[69,139478,139479],{"class":71,"line":106},[69,139480,1031],{"class":86},[69,139482,139483,139485,139487],{"class":71,"line":116},[69,139484,1036],{"class":86},[69,139486,442],{"class":348},[69,139488,1026],{"class":86},[14,139490,139492],{"id":139491},"_154-项目公共部分制作","15.4 项目公共部分制作",[19,139494,139496],{"id":139495},"_1541-常用模块类命名","15.4.1 常用模块类命名",[24,139498],{"style":26,"src":139499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[19,139501,139503],{"id":139502},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[29,139505,139506],{},"布局思路：",[162,139508,139509,139512,139515,139537,139570],{},[40,139510,139511],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[40,139513,139514],{},"里面包含版心的盒子",[40,139516,139517,139518],{},"版心盒子里面包含 1 号左侧盒子左浮动",[162,139519,139520,139528,139534],{},[40,139521,139522,139523,22739,139525,139527],{},"1 号盒子 里面包含一个",[66,139524,162],{},[66,139526,162],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[40,139529,139530,139531,139533],{},"里面的内容是水平排列，所以需要给",[66,139532,40],{},"设置浮动",[40,139535,139536],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[40,139538,139539,139540],{},"版心盒子里面包含 2 号右侧盒子右浮动",[162,139541,139542,139556,139561],{},[40,139543,139544,139545,22739,139547,139549,139550,139552,139553,139555],{},"2 号盒子 里面包含一个",[66,139546,162],{},[66,139548,162],{},"包裹",[66,139551,40],{},"，中间的",[66,139554,2307],{},"可以用样式去设置，也可以用字符 |",[40,139557,139558,139559,139533],{},"里面内容水平排列，给",[66,139560,40],{},[40,139562,139563,139564,139566,139567,139569],{},"找到里面所有偶数的 ",[66,139565,40],{}," 设置样式（偶数的 ",[66,139568,40],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[40,139571,139572,139573],{},"需要用到字体图标",[162,139574,139575,139581,139584,139587,139590],{},[40,139576,139577,139578],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[66,139579,139580],{},"arrow-icon",[40,139582,139583],{},"先要引入字体图片的资源",[40,139585,139586],{},"在样式里面利用 font-face 来进行声明",[40,139588,139589],{},"在伪元素的 content属性设置 图标的编码",[40,139591,139592],{},"给伪元素设置font-family属性",[29,139594,139595],{},"结构实例代码：",[59,139597,139599],{"className":61,"code":139598,"language":63,"meta":64,"style":64},"div::before {\n  content: \"\";\n  display: block;\n}\n",[66,139600,139601,139609,139619,139629],{"__ignoreMap":64},[69,139602,139603,139605,139607],{"class":71,"line":72},[69,139604,442],{"class":348},[69,139606,138757],{"class":109},[69,139608,113],{"class":86},[69,139610,139611,139613,139615,139617],{"class":71,"line":79},[69,139612,138764],{"class":90},[69,139614,94],{"class":86},[69,139616,8894],{"class":1022},[69,139618,130],{"class":86},[69,139620,139621,139623,139625,139627],{"class":71,"line":106},[69,139622,129381],{"class":90},[69,139624,94],{"class":86},[69,139626,62095],{"class":90},[69,139628,130],{"class":86},[69,139630,139631],{"class":71,"line":116},[69,139632,142],{"class":86},[29,139634,139635],{},"样式实例代码：",[59,139637,139638],{"className":61,"code":139598,"language":63,"meta":64,"style":64},[66,139639,139640,139648,139658,139668],{"__ignoreMap":64},[69,139641,139642,139644,139646],{"class":71,"line":72},[69,139643,442],{"class":348},[69,139645,138757],{"class":109},[69,139647,113],{"class":86},[69,139649,139650,139652,139654,139656],{"class":71,"line":79},[69,139651,138764],{"class":90},[69,139653,94],{"class":86},[69,139655,8894],{"class":1022},[69,139657,130],{"class":86},[69,139659,139660,139662,139664,139666],{"class":71,"line":106},[69,139661,129381],{"class":90},[69,139663,94],{"class":86},[69,139665,62095],{"class":90},[69,139667,130],{"class":86},[69,139669,139670],{"class":71,"line":116},[69,139671,142],{"class":86},[19,139673,139675],{"id":139674},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[162,139677,139678],{},[40,139679,139680],{},"header 盒子必须要有高度",[29,139682,139683,139684,139686,139687],{},"1 号盒子是 ",[66,139685,132770],{}," 标志定位，在正常开发过程中， ",[195,139688,139689,139690,139693],{},"logo的布局其实是有讲究的，需要进行 ",[66,139691,139692],{},"logoSEO","的优化 （★★★）",[162,139695,139696,139704,139712,139739],{},[40,139697,139698,139700,139701,139703],{},[66,139699,132770],{}," 里面首先放一个 ",[66,139702,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[40,139705,139706,139708,139709,139711],{},[66,139707,10],{}," 里面再放一个链接，可以返回首页的，把 ",[66,139710,132770],{}," 的背景图片给链接即可",[40,139713,139714,139715],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[162,139716,139717,139732],{},[40,139718,139719,139720,139723,139724,139727,139728,139731],{},"方法1：",[66,139721,139722],{},"text-indent"," 移到盒子外面（",[66,139725,139726],{},"text-indent: -9999px",") ，然后 ",[66,139729,139730],{},"overflow:hidden"," ，淘宝的做法",[40,139733,139734,139735,139738],{},"方法2：直接给 ",[66,139736,139737],{},"font-size: 0;"," 就看不到文字了，京东的做法",[40,139740,139741,139742,139744,139745,139747],{},"最后给链接一个 ",[66,139743,52640],{}," 属性，这样鼠标放到 ",[66,139746,132770],{}," 上就可以看到提示文字了",[29,139749,139595],{},[59,139751,139752],{"className":997,"code":132991,"language":999,"meta":64,"style":64},[66,139753,139754],{"__ignoreMap":64},[69,139755,139756,139758,139760,139762,139764,139766,139768,139770,139772,139774,139776],{"class":71,"line":72},[69,139757,1011],{"class":86},[69,139759,187],{"class":348},[69,139761,62283],{"class":109},[69,139763,1019],{"class":86},[69,139765,133006],{"class":1022},[69,139767,133009],{"class":109},[69,139769,1019],{"class":86},[69,139771,133014],{"class":1022},[69,139773,133017],{"class":86},[69,139775,187],{"class":348},[69,139777,1026],{"class":86},[29,139779,139635],{},[59,139781,139782],{"className":997,"code":132991,"language":999,"meta":64,"style":64},[66,139783,139784],{"__ignoreMap":64},[69,139785,139786,139788,139790,139792,139794,139796,139798,139800,139802,139804,139806],{"class":71,"line":72},[69,139787,1011],{"class":86},[69,139789,187],{"class":348},[69,139791,62283],{"class":109},[69,139793,1019],{"class":86},[69,139795,133006],{"class":1022},[69,139797,133009],{"class":109},[69,139799,1019],{"class":86},[69,139801,133014],{"class":1022},[69,139803,133017],{"class":86},[69,139805,187],{"class":348},[69,139807,1026],{"class":86},[29,139809,139810,139811,139813],{},"2 号盒子是 ",[66,139812,132783],{}," 搜索模块定位",[162,139815,139816,139819,139822,139825],{},[40,139817,139818],{},"search盒子利用定位的方式放在对应的位置",[40,139820,139821],{},"search盒子设置绝对定位，header盒子设置相对定位",[40,139823,139824],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[40,139826,139827],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[29,139829,139595],{},[59,139831,139832],{"className":61,"code":133078,"language":63,"meta":64,"style":64},[66,139833,139834,139856,139860,139870],{"__ignoreMap":64},[69,139835,139836,139838,139840,139842,139844,139846,139848,139850,139852,139854],{"class":71,"line":72},[69,139837,442],{"class":348},[69,139839,13677],{"class":86},[69,139841,29],{"class":348},[69,139843,13677],{"class":86},[69,139845,10],{"class":348},[69,139847,13677],{"class":86},[69,139849,162],{"class":348},[69,139851,13677],{"class":86},[69,139853,40],{"class":348},[69,139855,113],{"class":86},[69,139857,139858],{"class":71,"line":79},[69,139859,133107],{"class":75},[69,139861,139862,139864,139866,139868],{"class":71,"line":106},[69,139863,129381],{"class":90},[69,139865,94],{"class":86},[69,139867,62095],{"class":90},[69,139869,130],{"class":86},[69,139871,139872],{"class":71,"line":116},[69,139873,142],{"class":86},[29,139875,139635],{},[59,139877,139878],{"className":61,"code":133078,"language":63,"meta":64,"style":64},[66,139879,139880,139902,139906,139916],{"__ignoreMap":64},[69,139881,139882,139884,139886,139888,139890,139892,139894,139896,139898,139900],{"class":71,"line":72},[69,139883,442],{"class":348},[69,139885,13677],{"class":86},[69,139887,29],{"class":348},[69,139889,13677],{"class":86},[69,139891,10],{"class":348},[69,139893,13677],{"class":86},[69,139895,162],{"class":348},[69,139897,13677],{"class":86},[69,139899,40],{"class":348},[69,139901,113],{"class":86},[69,139903,139904],{"class":71,"line":79},[69,139905,133107],{"class":75},[69,139907,139908,139910,139912,139914],{"class":71,"line":106},[69,139909,129381],{"class":90},[69,139911,94],{"class":86},[69,139913,62095],{"class":90},[69,139915,130],{"class":86},[69,139917,139918],{"class":71,"line":116},[69,139919,142],{"class":86},[29,139921,139922],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[29,139924,139925,139926,139929],{},"3 号盒子是 ",[66,139927,139928],{},"hotwords"," 热词模块定位",[162,139931,139932,139935,139938],{},[40,139933,139934],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[40,139936,139937],{},"给里面所有的a标签设置 左右10px的外边距",[40,139939,139940],{},"给第一个a标签设置文字变红色（#c81623）",[29,139942,139595],{},[59,139944,139946],{"className":61,"code":139945,"language":63,"meta":64,"style":64},"div {\n  margin: 0 auto;\n}\n",[66,139947,139948,139954,139966],{"__ignoreMap":64},[69,139949,139950,139952],{"class":71,"line":72},[69,139951,442],{"class":348},[69,139953,113],{"class":86},[69,139955,139956,139958,139960,139962,139964],{"class":71,"line":79},[69,139957,71694],{"class":90},[69,139959,94],{"class":86},[69,139961,1583],{"class":90},[69,139963,52787],{"class":90},[69,139965,130],{"class":86},[69,139967,139968],{"class":71,"line":106},[69,139969,142],{"class":86},[29,139971,139635],{},[59,139973,139974],{"className":61,"code":139945,"language":63,"meta":64,"style":64},[66,139975,139976,139982,139994],{"__ignoreMap":64},[69,139977,139978,139980],{"class":71,"line":72},[69,139979,442],{"class":348},[69,139981,113],{"class":86},[69,139983,139984,139986,139988,139990,139992],{"class":71,"line":79},[69,139985,71694],{"class":90},[69,139987,94],{"class":86},[69,139989,1583],{"class":90},[69,139991,52787],{"class":90},[69,139993,130],{"class":86},[69,139995,139996],{"class":71,"line":106},[69,139997,142],{"class":86},[29,139999,140000,140001,140004],{},"4 号盒子是 ",[66,140002,140003],{},"shopcar"," 购物车模块",[162,140006,140007,140012,140015,140018],{},[40,140008,124556,140009,140011],{},[66,140010,140003],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[40,140013,140014],{},"count 统计部分用绝对定位做",[40,140016,140017],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[40,140019,140020],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[29,140022,139595],{},[59,140024,140025],{"className":61,"code":133190,"language":63,"meta":64,"style":64},[66,140026,140027,140031,140045,140049,140063,140067,140081,140085,140099,140103],{"__ignoreMap":64},[69,140028,140029],{"class":71,"line":72},[69,140030,133197],{"class":75},[69,140032,140033,140035,140037,140039,140041,140043],{"class":71,"line":79},[69,140034,133202],{"class":109},[69,140036,81028],{"class":86},[69,140038,130125],{"class":90},[69,140040,94],{"class":86},[69,140042,133211],{"class":90},[69,140044,130695],{"class":86},[69,140046,140047],{"class":71,"line":106},[69,140048,133218],{"class":75},[69,140050,140051,140053,140055,140057,140059,140061],{"class":71,"line":116},[69,140052,133223],{"class":109},[69,140054,81028],{"class":86},[69,140056,130125],{"class":90},[69,140058,94],{"class":86},[69,140060,55991],{"class":90},[69,140062,130695],{"class":86},[69,140064,140065],{"class":71,"line":133},[69,140066,133238],{"class":75},[69,140068,140069,140071,140073,140075,140077,140079],{"class":71,"line":139},[69,140070,133243],{"class":109},[69,140072,81028],{"class":86},[69,140074,130125],{"class":90},[69,140076,94],{"class":86},[69,140078,56058],{"class":90},[69,140080,130695],{"class":86},[69,140082,140083],{"class":71,"line":401},[69,140084,133258],{"class":75},[69,140086,140087,140089,140091,140093,140095,140097],{"class":71,"line":470},[69,140088,133263],{"class":109},[69,140090,81028],{"class":86},[69,140092,130125],{"class":90},[69,140094,94],{"class":86},[69,140096,87454],{"class":90},[69,140098,130695],{"class":86},[69,140100,140101],{"class":71,"line":475},[69,140102,133278],{"class":75},[69,140104,140105,140107,140109,140111,140113,140115],{"class":71,"line":482},[69,140106,133283],{"class":109},[69,140108,81028],{"class":86},[69,140110,130125],{"class":90},[69,140112,94],{"class":86},[69,140114,133292],{"class":90},[69,140116,130695],{"class":86},[29,140118,139635],{},[59,140120,140121],{"className":61,"code":133190,"language":63,"meta":64,"style":64},[66,140122,140123,140127,140141,140145,140159,140163,140177,140181,140195,140199],{"__ignoreMap":64},[69,140124,140125],{"class":71,"line":72},[69,140126,133197],{"class":75},[69,140128,140129,140131,140133,140135,140137,140139],{"class":71,"line":79},[69,140130,133202],{"class":109},[69,140132,81028],{"class":86},[69,140134,130125],{"class":90},[69,140136,94],{"class":86},[69,140138,133211],{"class":90},[69,140140,130695],{"class":86},[69,140142,140143],{"class":71,"line":106},[69,140144,133218],{"class":75},[69,140146,140147,140149,140151,140153,140155,140157],{"class":71,"line":116},[69,140148,133223],{"class":109},[69,140150,81028],{"class":86},[69,140152,130125],{"class":90},[69,140154,94],{"class":86},[69,140156,55991],{"class":90},[69,140158,130695],{"class":86},[69,140160,140161],{"class":71,"line":133},[69,140162,133238],{"class":75},[69,140164,140165,140167,140169,140171,140173,140175],{"class":71,"line":139},[69,140166,133243],{"class":109},[69,140168,81028],{"class":86},[69,140170,130125],{"class":90},[69,140172,94],{"class":86},[69,140174,56058],{"class":90},[69,140176,130695],{"class":86},[69,140178,140179],{"class":71,"line":401},[69,140180,133258],{"class":75},[69,140182,140183,140185,140187,140189,140191,140193],{"class":71,"line":470},[69,140184,133263],{"class":109},[69,140186,81028],{"class":86},[69,140188,130125],{"class":90},[69,140190,94],{"class":86},[69,140192,87454],{"class":90},[69,140194,130695],{"class":86},[69,140196,140197],{"class":71,"line":475},[69,140198,133278],{"class":75},[69,140200,140201,140203,140205,140207,140209,140211],{"class":71,"line":482},[69,140202,133283],{"class":109},[69,140204,81028],{"class":86},[69,140206,130125],{"class":90},[69,140208,94],{"class":86},[69,140210,133292],{"class":90},[69,140212,130695],{"class":86},[19,140214,140216,140217,140219],{"id":140215},"_1544-nav导航模块制作","15.4.4 ",[66,140218,54940],{},"导航模块制作",[24,140221],{"style":26,"src":140222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[29,140224,140225,140227],{},[66,140226,54940],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[29,140229,140230,140231],{},"1 号盒子左侧浮动，",[66,140232,140233],{},"dropdown",[162,140235,140236,140246,140254,140260,140268,140278,140286,140297],{},[40,140237,140238,140239,102239,140242,140245],{},"1号盒子有讲究，根据相关性 里面包含 ",[66,140240,140241],{},".dt",[66,140243,140244],{},".dd"," 两个盒子",[40,140247,140248,140250,140251,140253],{},[66,140249,140241],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[66,140252,140244],{}," 挤到下面去了",[40,140255,140256,140257,140259],{},"给 ",[66,140258,140244],{}," 盒子设置宽度 和 高度，以及背景颜色",[40,140261,140256,140262,140264,140265,121458],{},[66,140263,140244],{}," 盒子里面定义 无序列表 （",[66,140266,140267],{},"ul > li > a",[40,140269,140270,140271,140273,140274,140277],{},"每个 ",[66,140272,40],{}," 都有一个高度（",[66,140275,140276],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[40,140279,140256,140280,140282,140283,121458],{},[66,140281,40],{}," 里面的a设置文字大小（",[66,140284,140285],{},"14px",[40,140287,140256,140288,140290,140291,140293,140294,140296],{},[66,140289,40],{}," 设置 ",[66,140292,128926],{},"，当鼠标移入的时候，让",[66,140295,40],{},"的背景变成白色，让里面的文字变成红色",[40,140298,140299,140301,140302,140304,140305,140307],{},[66,140300,40],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[66,140303,40],{},"的右侧，那么给",[66,140306,40],{},"设置相对定位",[29,140309,140310],{},"一定要注意相关性",[29,140312,139595],{},[59,140314,140315],{"className":61,"code":139598,"language":63,"meta":64,"style":64},[66,140316,140317,140325,140335,140345],{"__ignoreMap":64},[69,140318,140319,140321,140323],{"class":71,"line":72},[69,140320,442],{"class":348},[69,140322,138757],{"class":109},[69,140324,113],{"class":86},[69,140326,140327,140329,140331,140333],{"class":71,"line":79},[69,140328,138764],{"class":90},[69,140330,94],{"class":86},[69,140332,8894],{"class":1022},[69,140334,130],{"class":86},[69,140336,140337,140339,140341,140343],{"class":71,"line":106},[69,140338,129381],{"class":90},[69,140340,94],{"class":86},[69,140342,62095],{"class":90},[69,140344,130],{"class":86},[69,140346,140347],{"class":71,"line":116},[69,140348,142],{"class":86},[29,140350,139635],{},[59,140352,140353],{"className":61,"code":139598,"language":63,"meta":64,"style":64},[66,140354,140355,140363,140373,140383],{"__ignoreMap":64},[69,140356,140357,140359,140361],{"class":71,"line":72},[69,140358,442],{"class":348},[69,140360,138757],{"class":109},[69,140362,113],{"class":86},[69,140364,140365,140367,140369,140371],{"class":71,"line":79},[69,140366,138764],{"class":90},[69,140368,94],{"class":86},[69,140370,8894],{"class":1022},[69,140372,130],{"class":86},[69,140374,140375,140377,140379,140381],{"class":71,"line":106},[69,140376,129381],{"class":90},[69,140378,94],{"class":86},[69,140380,62095],{"class":90},[69,140382,130],{"class":86},[69,140384,140385],{"class":71,"line":116},[69,140386,142],{"class":86},[29,140388,140389],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[29,140391,140392,140393,140396],{},"2 号盒子左侧浮动，",[66,140394,140395],{},"navitems"," 导航栏组",[162,140398,140399,140404,140413],{},[40,140400,140401,140402],{},"里面结构是 ",[66,140403,140267],{},[40,140405,140406,140407,140409,140410,140412],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[66,140408,187],{},"左右的",[66,140411,32119],{},"把两侧撑开",[40,140414,140415],{},"让文字垂直居中（行高等于高度）",[24,140417],{"style":26,"src":140418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[29,140420,140421],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[29,140423,139595],{},[59,140425,140426],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,140427,140428,140434,140444],{"__ignoreMap":64},[69,140429,140430,140432],{"class":71,"line":72},[69,140431,378],{"class":109},[69,140433,113],{"class":86},[69,140435,140436,140438,140440,140442],{"class":71,"line":79},[69,140437,1197],{"class":90},[69,140439,94],{"class":86},[69,140441,1202],{"class":90},[69,140443,130],{"class":86},[69,140445,140446],{"class":71,"line":106},[69,140447,142],{"class":86},[29,140449,139635],{},[59,140451,140452],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,140453,140454,140460,140470],{"__ignoreMap":64},[69,140455,140456,140458],{"class":71,"line":72},[69,140457,378],{"class":109},[69,140459,113],{"class":86},[69,140461,140462,140464,140466,140468],{"class":71,"line":79},[69,140463,1197],{"class":90},[69,140465,94],{"class":86},[69,140467,1202],{"class":90},[69,140469,130],{"class":86},[69,140471,140472],{"class":71,"line":106},[69,140473,142],{"class":86},[29,140475,140476],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[24,140478],{"style":26,"src":140479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[59,140481,140482],{"className":61,"code":131916,"language":63,"meta":64,"style":64},[66,140483,140484,140490,140506],{"__ignoreMap":64},[69,140485,140486,140488],{"class":71,"line":72},[69,140487,442],{"class":348},[69,140489,113],{"class":86},[69,140491,140492,140494,140496,140498,140500,140502,140504],{"class":71,"line":79},[69,140493,72118],{"class":90},[69,140495,94],{"class":86},[69,140497,1609],{"class":90},[69,140499,100],{"class":82},[69,140501,52752],{"class":90},[69,140503,131157],{"class":90},[69,140505,130],{"class":86},[69,140507,140508],{"class":71,"line":106},[69,140509,142],{"class":86},[19,140511,140513],{"id":140512},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[24,140515],{"style":26,"src":140516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[162,140518,140519,140524,140529],{},[40,140520,140521,140523],{},[66,140522,132961],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[40,140525,140526,140528],{},[66,140527,132961],{}," 里面有一个大的版心",[40,140530,140531,140532,140535,140536],{},"版心里面包含 1 号盒子，",[66,140533,140534],{},"mod_service"," 是服务模块，mod 是模块的意思",[162,140537,140538,140543,140556,140572,140577],{},[40,140539,140256,140540,140542],{},[66,140541,140534],{}," 设置高度（80px）和下边框",[40,140544,140545,140546,140549,140550,140552,140553,140555],{},"在里面定义 ",[66,140547,140548],{},"ul > li"," ,每个",[66,140551,40],{}," 宽度是300px 高度是 50px，给每个",[66,140554,40],{},"设置35px的左内边距",[40,140557,140558,140559,140561,140562,140564,140565,140567,140568,19649,140570,121458],{},"在每个",[66,140560,40],{},"里面，放一个 ",[66,140563,24149],{},"（里面放图标），一个",[66,140566,442],{},"（里面放",[66,140569,442],{},[66,140571,29],{},[40,140573,140256,140574,140576],{},[66,140575,24149],{},"设置浮动，让h5与这个div左右排列",[40,140578,140579],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[29,140581,139595],{},[59,140583,140585],{"className":61,"code":140584,"language":63,"meta":64,"style":64},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[66,140586,140587,140593,140605,140617,140644],{"__ignoreMap":64},[69,140588,140589,140591],{"class":71,"line":72},[69,140590,135515],{"class":109},[69,140592,113],{"class":86},[69,140594,140595,140597,140599,140601,140603],{"class":71,"line":79},[69,140596,385],{"class":90},[69,140598,94],{"class":86},[69,140600,2087],{"class":90},[69,140602,100],{"class":82},[69,140604,130],{"class":86},[69,140606,140607,140609,140611,140613,140615],{"class":71,"line":106},[69,140608,72010],{"class":90},[69,140610,94],{"class":86},[69,140612,2087],{"class":90},[69,140614,100],{"class":82},[69,140616,130],{"class":86},[69,140618,140619,140621,140623,140625,140627,140629,140631,140633,140636,140638,140640,140642],{"class":71,"line":116},[69,140620,71834],{"class":90},[69,140622,94],{"class":86},[69,140624,62952],{"class":90},[69,140626,1398],{"class":86},[69,140628,135554],{"class":6458},[69,140630,14955],{"class":86},[69,140632,62962],{"class":90},[69,140634,140635],{"class":90}," -10",[69,140637,100],{"class":82},[69,140639,135573],{"class":90},[69,140641,100],{"class":82},[69,140643,130],{"class":86},[69,140645,140646],{"class":71,"line":133},[69,140647,142],{"class":86},[29,140649,139635],{},[59,140651,140652],{"className":61,"code":140584,"language":63,"meta":64,"style":64},[66,140653,140654,140660,140672,140684,140710],{"__ignoreMap":64},[69,140655,140656,140658],{"class":71,"line":72},[69,140657,135515],{"class":109},[69,140659,113],{"class":86},[69,140661,140662,140664,140666,140668,140670],{"class":71,"line":79},[69,140663,385],{"class":90},[69,140665,94],{"class":86},[69,140667,2087],{"class":90},[69,140669,100],{"class":82},[69,140671,130],{"class":86},[69,140673,140674,140676,140678,140680,140682],{"class":71,"line":106},[69,140675,72010],{"class":90},[69,140677,94],{"class":86},[69,140679,2087],{"class":90},[69,140681,100],{"class":82},[69,140683,130],{"class":86},[69,140685,140686,140688,140690,140692,140694,140696,140698,140700,140702,140704,140706,140708],{"class":71,"line":116},[69,140687,71834],{"class":90},[69,140689,94],{"class":86},[69,140691,62952],{"class":90},[69,140693,1398],{"class":86},[69,140695,135554],{"class":6458},[69,140697,14955],{"class":86},[69,140699,62962],{"class":90},[69,140701,140635],{"class":90},[69,140703,100],{"class":82},[69,140705,135573],{"class":90},[69,140707,100],{"class":82},[69,140709,130],{"class":86},[69,140711,140712],{"class":71,"line":133},[69,140713,142],{"class":86},[29,140715,140716],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[162,140718,140719,140722,140728,140734,140746],{},[40,140720,140721],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[40,140723,140724,140725,121458],{},"里面的布局利用 自定义列表来实现（",[66,140726,140727],{},"dl > dt + dd",[40,140729,140256,140730,140733],{},[66,140731,140732],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[40,140735,140256,140736,140739,140740,19649,140742,140745],{},[66,140737,140738],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[66,140741,140738],{},[66,140743,140744],{},"dd","之间有些距离",[40,140747,140748],{},"最后一个 dl 结构和样式不一样，需要单独设置",[29,140750,139595],{},[59,140752,140753],{"className":61,"code":139945,"language":63,"meta":64,"style":64},[66,140754,140755,140761,140773],{"__ignoreMap":64},[69,140756,140757,140759],{"class":71,"line":72},[69,140758,442],{"class":348},[69,140760,113],{"class":86},[69,140762,140763,140765,140767,140769,140771],{"class":71,"line":79},[69,140764,71694],{"class":90},[69,140766,94],{"class":86},[69,140768,1583],{"class":90},[69,140770,52787],{"class":90},[69,140772,130],{"class":86},[69,140774,140775],{"class":71,"line":106},[69,140776,142],{"class":86},[29,140778,139635],{},[59,140780,140781],{"className":61,"code":139945,"language":63,"meta":64,"style":64},[66,140782,140783,140789,140801],{"__ignoreMap":64},[69,140784,140785,140787],{"class":71,"line":72},[69,140786,442],{"class":348},[69,140788,113],{"class":86},[69,140790,140791,140793,140795,140797,140799],{"class":71,"line":79},[69,140792,71694],{"class":90},[69,140794,94],{"class":86},[69,140796,1583],{"class":90},[69,140798,52787],{"class":90},[69,140800,130],{"class":86},[69,140802,140803],{"class":71,"line":106},[69,140804,142],{"class":86},[29,140806,140807],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[162,140809,140810,140819,140822,140833],{},[40,140811,140812,140813,140815,140816,140818],{},"分为上下两块，上面是 ",[66,140814,132978],{}," 友情链接，下面是 ",[66,140817,132971],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[40,140820,140821],{},"把内容分别复制到相应模块中",[40,140823,140256,140824,140826,140827,140829,140830,140832],{},[66,140825,132978],{}," 设置 15px 的下外边距，给",[66,140828,132978],{}," 里面 的 ",[66,140831,187],{}," 标签设置 左右 3px 的外边距",[40,140834,140835,140836,140838],{},"给",[66,140837,132971],{}," 设置 20px 的行高",[29,140840,139595],{},[59,140842,140843],{"className":61,"code":139945,"language":63,"meta":64,"style":64},[66,140844,140845,140851,140863],{"__ignoreMap":64},[69,140846,140847,140849],{"class":71,"line":72},[69,140848,442],{"class":348},[69,140850,113],{"class":86},[69,140852,140853,140855,140857,140859,140861],{"class":71,"line":79},[69,140854,71694],{"class":90},[69,140856,94],{"class":86},[69,140858,1583],{"class":90},[69,140860,52787],{"class":90},[69,140862,130],{"class":86},[69,140864,140865],{"class":71,"line":106},[69,140866,142],{"class":86},[29,140868,139635],{},[59,140870,140871],{"className":61,"code":139945,"language":63,"meta":64,"style":64},[66,140872,140873,140879,140891],{"__ignoreMap":64},[69,140874,140875,140877],{"class":71,"line":72},[69,140876,442],{"class":348},[69,140878,113],{"class":86},[69,140880,140881,140883,140885,140887,140889],{"class":71,"line":79},[69,140882,71694],{"class":90},[69,140884,94],{"class":86},[69,140886,1583],{"class":90},[69,140888,52787],{"class":90},[69,140890,130],{"class":86},[69,140892,140893],{"class":71,"line":106},[69,140894,142],{"class":86},[29,140896,140897],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1297,140899,140900],{},"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":64,"searchDepth":79,"depth":79,"links":140902},[140903,140904,140905,140912],{"id":139184,"depth":79,"text":139185},{"id":139203,"depth":79,"text":139204},{"id":139230,"depth":79,"text":139231,"children":140906},[140907,140908,140909,140910,140911],{"id":139234,"depth":106,"text":139235},{"id":139247,"depth":106,"text":139248},{"id":139271,"depth":106,"text":139272},{"id":139293,"depth":106,"text":139294},{"id":139365,"depth":106,"text":139366},{"id":139491,"depth":79,"text":139492,"children":140913},[140914,140915,140916,140917,140919],{"id":139495,"depth":106,"text":139496},{"id":139502,"depth":106,"text":139503},{"id":139674,"depth":106,"text":139675},{"id":140215,"depth":106,"text":140918},"15.4.4 nav导航模块制作",{"id":140512,"depth":106,"text":140513},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139176,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140926,"title":140927,"body":140928,"description":1322,"extension":1323,"meta":143330,"navigation":1325,"path":143331,"seo":143332,"stem":143333,"__hash__":143334},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140929,"toc":143307},[140930,140933,140937,140941,140953,140956,140959,140962,140973,140975,140999,141001,141025,141030,141033,141035,141071,141073,141109,141112,141117,141120,141123,141126,141156,141163,141166,141176,141178,141212,141215,141249,141255,141272,141274,141310,141312,141348,141353,141378,141380,141406,141408,141432,141439,141442,141506,141508,141550,141552,141592,141599,141604,141606,141636,141638,141668,141672,141675,141682,141694,141696,141722,141724,141748,141751,141753,141777,141783,141793,141795,141825,141827,141857,141864,141905,141907,141943,141945,141981,141985,141988,141991,141994,142000,142005,142008,142031,142034,142058,142061,142085,142090,142093,142096,142099,142102,142105,142179,142181,142211,142213,142243,142246,142249,142281,142285,142289,142303,142312,142315,142320,142322,142416,142418,142512,142535,142537,142561,142563,142587,142594,142597,142607,142609,142633,142638,142646,142648,142678,142683,142723,142725,142751,142753,142779,142783,142786,142791,142794,142798,142806,142813,142821,142823,142853,142855,142885,142893,142896,142899,142901,142931,142933,142963,142966,142971,142973,142997,142999,143023,143026,143111,143113,143137,143139,143163,143167,143169,143193,143195,143229,143233,143247,143250,143255,143258,143263,143266,143296,143304],[10,140931,140927],{"id":140932},"_16-品优购项目下篇-主体与页面开发",[14,140934,140936],{"id":140935},"_161-项目主体模块制作","16.1 项目主体模块制作",[19,140938,140940],{"id":140939},"_1611-首页制作","16.1.1 首页制作",[29,140942,140943,140945,140946,140948,140949,140952],{},[195,140944,103279],{}," 主体模块是 ",[195,140947,75279],{}," 里面专有的，注意需要新的样式文件 ",[195,140950,140951],{},"index.css，"," 就不要写在common.css中了",[24,140954],{"style":26,"src":140955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[24,140957],{"style":26,"src":140958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[29,140960,140961],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[162,140963,140964,140967,140970],{},[40,140965,140966],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[40,140968,140969],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[40,140971,140972],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[29,140974,139595],{},[59,140976,140977],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,140978,140979,140985,140995],{"__ignoreMap":64},[69,140980,140981,140983],{"class":71,"line":72},[69,140982,378],{"class":109},[69,140984,113],{"class":86},[69,140986,140987,140989,140991,140993],{"class":71,"line":79},[69,140988,1197],{"class":90},[69,140990,94],{"class":86},[69,140992,1202],{"class":90},[69,140994,130],{"class":86},[69,140996,140997],{"class":71,"line":106},[69,140998,142],{"class":86},[29,141000,139635],{},[59,141002,141003],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,141004,141005,141011,141021],{"__ignoreMap":64},[69,141006,141007,141009],{"class":71,"line":72},[69,141008,378],{"class":109},[69,141010,113],{"class":86},[69,141012,141013,141015,141017,141019],{"class":71,"line":79},[69,141014,1197],{"class":90},[69,141016,94],{"class":86},[69,141018,1202],{"class":90},[69,141020,130],{"class":86},[69,141022,141023],{"class":71,"line":106},[69,141024,142],{"class":86},[37,141026,141027],{},[40,141028,141029],{},"左侧focus模块制作",[24,141031],{"style":26,"src":141032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[29,141034,139595],{},[59,141036,141037],{"className":61,"code":129088,"language":63,"meta":64,"style":64},[66,141038,141039,141047,141057,141067],{"__ignoreMap":64},[69,141040,141041,141043,141045],{"class":71,"line":72},[69,141042,55048],{"class":348},[69,141044,63126],{"class":109},[69,141046,113],{"class":86},[69,141048,141049,141051,141053,141055],{"class":71,"line":79},[69,141050,129103],{"class":90},[69,141052,94],{"class":86},[69,141054,56116],{"class":90},[69,141056,130],{"class":86},[69,141058,141059,141061,141063,141065],{"class":71,"line":106},[69,141060,72020],{"class":90},[69,141062,94],{"class":86},[69,141064,55964],{"class":90},[69,141066,130],{"class":86},[69,141068,141069],{"class":71,"line":116},[69,141070,142],{"class":86},[29,141072,139635],{},[59,141074,141075],{"className":61,"code":129088,"language":63,"meta":64,"style":64},[66,141076,141077,141085,141095,141105],{"__ignoreMap":64},[69,141078,141079,141081,141083],{"class":71,"line":72},[69,141080,55048],{"class":348},[69,141082,63126],{"class":109},[69,141084,113],{"class":86},[69,141086,141087,141089,141091,141093],{"class":71,"line":79},[69,141088,129103],{"class":90},[69,141090,94],{"class":86},[69,141092,56116],{"class":90},[69,141094,130],{"class":86},[69,141096,141097,141099,141101,141103],{"class":71,"line":106},[69,141098,72020],{"class":90},[69,141100,94],{"class":86},[69,141102,55964],{"class":90},[69,141104,130],{"class":86},[69,141106,141107],{"class":71,"line":116},[69,141108,142],{"class":86},[29,141110,141111],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[37,141113,141114],{"start":79},[40,141115,141116],{},"右侧newsflash模块制作",[24,141118],{"style":26,"src":141119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[29,141121,141122],{},"右侧的模块 分为上中下三个盒子",[29,141124,141125],{},"结构代码：",[59,141127,141128],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,141129,141130],{"__ignoreMap":64},[69,141131,141132,141134,141136,141138,141140,141142,141144,141146,141148,141150,141152,141154],{"class":71,"line":72},[69,141133,1011],{"class":86},[69,141135,24],{"class":348},[69,141137,56466],{"class":109},[69,141139,1019],{"class":86},[69,141141,135275],{"class":1022},[69,141143,56474],{"class":109},[69,141145,1019],{"class":86},[69,141147,135282],{"class":1022},[69,141149,135285],{"class":109},[69,141151,1019],{"class":86},[69,141153,135290],{"class":1022},[69,141155,1026],{"class":86},[29,141157,141158,141159,141162],{},"1 号盒子为 ",[66,141160,141161],{},"news"," 新闻模块 高度为 165px",[24,141164],{"style":26,"src":141165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[29,141167,141168,141169,141172,141173],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[66,141170,141171],{},"news-hd","，下面是 ",[66,141174,141175],{},"news-bd",[29,141177,141125],{},[59,141179,141180],{"className":997,"code":998,"language":999,"meta":64,"style":64},[66,141181,141182,141186,141200,141204],{"__ignoreMap":64},[69,141183,141184],{"class":71,"line":72},[69,141185,1006],{"class":75},[69,141187,141188,141190,141192,141194,141196,141198],{"class":71,"line":79},[69,141189,1011],{"class":86},[69,141191,442],{"class":348},[69,141193,1016],{"class":109},[69,141195,1019],{"class":86},[69,141197,1023],{"class":1022},[69,141199,1026],{"class":86},[69,141201,141202],{"class":71,"line":106},[69,141203,1031],{"class":86},[69,141205,141206,141208,141210],{"class":71,"line":116},[69,141207,1036],{"class":86},[69,141209,442],{"class":348},[69,141211,1026],{"class":86},[29,141213,141214],{},"样式代码：",[59,141216,141217],{"className":997,"code":998,"language":999,"meta":64,"style":64},[66,141218,141219,141223,141237,141241],{"__ignoreMap":64},[69,141220,141221],{"class":71,"line":72},[69,141222,1006],{"class":75},[69,141224,141225,141227,141229,141231,141233,141235],{"class":71,"line":79},[69,141226,1011],{"class":86},[69,141228,442],{"class":348},[69,141230,1016],{"class":109},[69,141232,1019],{"class":86},[69,141234,1023],{"class":1022},[69,141236,1026],{"class":86},[69,141238,141239],{"class":71,"line":106},[69,141240,1031],{"class":86},[69,141242,141243,141245,141247],{"class":71,"line":116},[69,141244,1036],{"class":86},[69,141246,442],{"class":348},[69,141248,1026],{"class":86},[29,141250,141251,141252,141254],{},"上面是",[66,141253,141171],{},"，设置高度是 33px，设置下边框",[162,141256,141257,141263],{},[40,141258,141259,141260,141262],{},"里面放一个",[66,141261,24149],{}," 标题",[40,141264,141265,141266,141268,141269,141271],{},"放一个a",[66,141267,103914],{},"，内容是 更多，然后让 ",[66,141270,187],{}," 进行右浮动，三角用伪元素设置字体图标就好",[29,141273,141125],{},[59,141275,141276],{"className":61,"code":139598,"language":63,"meta":64,"style":64},[66,141277,141278,141286,141296,141306],{"__ignoreMap":64},[69,141279,141280,141282,141284],{"class":71,"line":72},[69,141281,442],{"class":348},[69,141283,138757],{"class":109},[69,141285,113],{"class":86},[69,141287,141288,141290,141292,141294],{"class":71,"line":79},[69,141289,138764],{"class":90},[69,141291,94],{"class":86},[69,141293,8894],{"class":1022},[69,141295,130],{"class":86},[69,141297,141298,141300,141302,141304],{"class":71,"line":106},[69,141299,129381],{"class":90},[69,141301,94],{"class":86},[69,141303,62095],{"class":90},[69,141305,130],{"class":86},[69,141307,141308],{"class":71,"line":116},[69,141309,142],{"class":86},[29,141311,141214],{},[59,141313,141314],{"className":61,"code":139598,"language":63,"meta":64,"style":64},[66,141315,141316,141324,141334,141344],{"__ignoreMap":64},[69,141317,141318,141320,141322],{"class":71,"line":72},[69,141319,442],{"class":348},[69,141321,138757],{"class":109},[69,141323,113],{"class":86},[69,141325,141326,141328,141330,141332],{"class":71,"line":79},[69,141327,138764],{"class":90},[69,141329,94],{"class":86},[69,141331,8894],{"class":1022},[69,141333,130],{"class":86},[69,141335,141336,141338,141340,141342],{"class":71,"line":106},[69,141337,129381],{"class":90},[69,141339,94],{"class":86},[69,141341,62095],{"class":90},[69,141343,130],{"class":86},[69,141345,141346],{"class":71,"line":116},[69,141347,142],{"class":86},[29,141349,141350,141351],{},"下面是",[66,141352,141175],{},[162,141354,141355,141363],{},[40,141356,141357,141358,102239,141360,141362],{},"里面包含 ",[66,141359,162],{},[66,141361,40],{}," 还有链接",[40,141364,140835,141365,141367,141368,141370,141371,141374,141375],{},[66,141366,40],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[66,141369,132424],{}," 2.设置 ",[66,141372,141373],{},"white-space: nowrap;"," 3. 设置 ",[66,141376,141377],{},"text-overflow: ellipsis;",[29,141379,141125],{},[59,141381,141383],{"className":61,"code":141382,"language":63,"meta":64,"style":64},"div {\n  overflow: hidden;\n}\n",[66,141384,141385,141391,141402],{"__ignoreMap":64},[69,141386,141387,141389],{"class":71,"line":72},[69,141388,442],{"class":348},[69,141390,113],{"class":86},[69,141392,141393,141396,141398,141400],{"class":71,"line":79},[69,141394,141395],{"class":90},"  overflow",[69,141397,94],{"class":86},[69,141399,62940],{"class":90},[69,141401,130],{"class":86},[69,141403,141404],{"class":71,"line":106},[69,141405,142],{"class":86},[29,141407,141214],{},[59,141409,141410],{"className":61,"code":141382,"language":63,"meta":64,"style":64},[66,141411,141412,141418,141428],{"__ignoreMap":64},[69,141413,141414,141416],{"class":71,"line":72},[69,141415,442],{"class":348},[69,141417,113],{"class":86},[69,141419,141420,141422,141424,141426],{"class":71,"line":79},[69,141421,141395],{"class":90},[69,141423,94],{"class":86},[69,141425,62940],{"class":90},[69,141427,130],{"class":86},[69,141429,141430],{"class":71,"line":106},[69,141431,142],{"class":86},[29,141433,141434,141435,141438],{},"2 号盒子为 ",[66,141436,141437],{},"lifeservice"," 生活服务模块 高度为 209px",[24,141440],{"style":26,"src":141441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[162,141443,141444,141447,141457,141481,141492],{},[40,141445,141446],{},"设置边框（左右下边框）",[40,141448,141449,141450,141453,141454,141456],{},"里面的内容 是 ",[66,141451,141452],{},"ul > 12*li","，给",[66,141455,40],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[40,141458,141459,141460],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[162,141461,141462,141467,141476],{},[40,141463,141464,141466],{},[66,141465,141437],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[40,141468,141469,141470,141472,141473,141475],{},"可以让 ",[66,141471,141437],{}," 里面的 ",[66,141474,162],{}," 宽度为 252，就可以装的下 4 个 小 li",[40,141477,141478,141480],{},[66,141479,141437],{}," 盒子 overflow 隐藏多余的部分就可以了",[40,141482,117688,141483,141485,141486,141488,141489,141491],{},[66,141484,40],{}," 里面放一个 ",[66,141487,1830],{},"（里面放图标），下面的文本用 ",[66,141490,29],{}," 标签包裹",[40,141493,140256,141494,141496,141497,141499,141500,140290,141502,141505],{},[66,141495,1830],{}," 设置 24px宽和28px的高（注意 ",[66,141498,1830],{}," 是行内元素， 转成行内块），给 ",[66,141501,40],{},[66,141503,141504],{},"text-align:center"," 让里面内容居中显示",[29,141507,141125],{},[59,141509,141511],{"className":61,"code":141510,"language":63,"meta":64,"style":64},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[66,141512,141513,141531,141536,141546],{"__ignoreMap":64},[69,141514,141515,141517,141519,141521,141523,141525,141527,141529],{"class":71,"line":72},[69,141516,69],{"class":348},[69,141518,13677],{"class":86},[69,141520,187],{"class":348},[69,141522,13677],{"class":86},[69,141524,531],{"class":348},[69,141526,13677],{"class":86},[69,141528,195],{"class":348},[69,141530,113],{"class":86},[69,141532,141533],{"class":71,"line":79},[69,141534,141535],{"class":75},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[69,141537,141538,141540,141542,141544],{"class":71,"line":106},[69,141539,129381],{"class":90},[69,141541,94],{"class":86},[69,141543,129443],{"class":90},[69,141545,130],{"class":86},[69,141547,141548],{"class":71,"line":116},[69,141549,142],{"class":86},[29,141551,141214],{},[59,141553,141554],{"className":61,"code":141510,"language":63,"meta":64,"style":64},[66,141555,141556,141574,141578,141588],{"__ignoreMap":64},[69,141557,141558,141560,141562,141564,141566,141568,141570,141572],{"class":71,"line":72},[69,141559,69],{"class":348},[69,141561,13677],{"class":86},[69,141563,187],{"class":348},[69,141565,13677],{"class":86},[69,141567,531],{"class":348},[69,141569,13677],{"class":86},[69,141571,195],{"class":348},[69,141573,113],{"class":86},[69,141575,141576],{"class":71,"line":79},[69,141577,141535],{"class":75},[69,141579,141580,141582,141584,141586],{"class":71,"line":106},[69,141581,129381],{"class":90},[69,141583,94],{"class":86},[69,141585,129443],{"class":90},[69,141587,130],{"class":86},[69,141589,141590],{"class":71,"line":116},[69,141591,142],{"class":86},[29,141593,141594,141595,141598],{},"3 号盒子为 ",[66,141596,141597],{},"bargain"," 特价商品",[162,141600,141601],{},[40,141602,141603],{},"这个比较简单，直接插入一张图片即可",[29,141605,141125],{},[59,141607,141608],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,141609,141610],{"__ignoreMap":64},[69,141611,141612,141614,141616,141618,141620,141622,141624,141626,141628,141630,141632,141634],{"class":71,"line":72},[69,141613,1011],{"class":86},[69,141615,24],{"class":348},[69,141617,56466],{"class":109},[69,141619,1019],{"class":86},[69,141621,135275],{"class":1022},[69,141623,56474],{"class":109},[69,141625,1019],{"class":86},[69,141627,135282],{"class":1022},[69,141629,135285],{"class":109},[69,141631,1019],{"class":86},[69,141633,135290],{"class":1022},[69,141635,1026],{"class":86},[29,141637,141214],{},[59,141639,141640],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,141641,141642],{"__ignoreMap":64},[69,141643,141644,141646,141648,141650,141652,141654,141656,141658,141660,141662,141664,141666],{"class":71,"line":72},[69,141645,1011],{"class":86},[69,141647,24],{"class":348},[69,141649,56466],{"class":109},[69,141651,1019],{"class":86},[69,141653,135275],{"class":1022},[69,141655,56474],{"class":109},[69,141657,1019],{"class":86},[69,141659,135282],{"class":1022},[69,141661,135285],{"class":109},[69,141663,1019],{"class":86},[69,141665,135290],{"class":1022},[69,141667,1026],{"class":86},[19,141669,141671],{"id":141670},"_1612-推荐模块制作","16.1.2 推荐模块制作",[24,141673],{"style":26,"src":141674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[29,141676,141677,141678,141681],{},"大盒子 ",[66,141679,141680],{},"recom"," 推荐模块 recommend",[162,141683,141684],{},[40,141685,141686,141687,141689,141690,141693],{},"给这个 ",[66,141688,141680],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[66,141691,141692],{},"#ebebeb","），设置距离上边 12px",[29,141695,141125],{},[59,141697,141699],{"className":61,"code":141698,"language":63,"meta":64,"style":64},"div {\n  background-color: #f0f0f0;\n}\n",[66,141700,141701,141707,141718],{"__ignoreMap":64},[69,141702,141703,141705],{"class":71,"line":72},[69,141704,442],{"class":348},[69,141706,113],{"class":86},[69,141708,141709,141711,141713,141716],{"class":71,"line":79},[69,141710,72100],{"class":90},[69,141712,94],{"class":86},[69,141714,141715],{"class":90},"#f0f0f0",[69,141717,130],{"class":86},[69,141719,141720],{"class":71,"line":106},[69,141721,142],{"class":86},[29,141723,141214],{},[59,141725,141726],{"className":61,"code":141698,"language":63,"meta":64,"style":64},[66,141727,141728,141734,141744],{"__ignoreMap":64},[69,141729,141730,141732],{"class":71,"line":72},[69,141731,442],{"class":348},[69,141733,113],{"class":86},[69,141735,141736,141738,141740,141742],{"class":71,"line":79},[69,141737,72100],{"class":90},[69,141739,94],{"class":86},[69,141741,141715],{"class":90},[69,141743,130],{"class":86},[69,141745,141746],{"class":71,"line":106},[69,141747,142],{"class":86},[29,141749,141750],{},"里面包含 2 个盒子， 浮动即可",[29,141752,141125],{},[59,141754,141755],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,141756,141757,141763,141773],{"__ignoreMap":64},[69,141758,141759,141761],{"class":71,"line":72},[69,141760,378],{"class":109},[69,141762,113],{"class":86},[69,141764,141765,141767,141769,141771],{"class":71,"line":79},[69,141766,1197],{"class":90},[69,141768,94],{"class":86},[69,141770,1202],{"class":90},[69,141772,130],{"class":86},[69,141774,141775],{"class":71,"line":106},[69,141776,142],{"class":86},[29,141778,141779,141780],{},"1 号盒子 ",[66,141781,141782],{},"recom_hd",[162,141784,141785,141788],{},[40,141786,141787],{},"设置宽度205px，高度163px",[40,141789,141259,141790,141792],{},[66,141791,24],{},"标签，插入图片即可",[29,141794,141125],{},[59,141796,141797],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,141798,141799],{"__ignoreMap":64},[69,141800,141801,141803,141805,141807,141809,141811,141813,141815,141817,141819,141821,141823],{"class":71,"line":72},[69,141802,1011],{"class":86},[69,141804,24],{"class":348},[69,141806,56466],{"class":109},[69,141808,1019],{"class":86},[69,141810,135275],{"class":1022},[69,141812,56474],{"class":109},[69,141814,1019],{"class":86},[69,141816,135282],{"class":1022},[69,141818,135285],{"class":109},[69,141820,1019],{"class":86},[69,141822,135290],{"class":1022},[69,141824,1026],{"class":86},[29,141826,141214],{},[59,141828,141829],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,141830,141831],{"__ignoreMap":64},[69,141832,141833,141835,141837,141839,141841,141843,141845,141847,141849,141851,141853,141855],{"class":71,"line":72},[69,141834,1011],{"class":86},[69,141836,24],{"class":348},[69,141838,56466],{"class":109},[69,141840,1019],{"class":86},[69,141842,135275],{"class":1022},[69,141844,56474],{"class":109},[69,141846,1019],{"class":86},[69,141848,135282],{"class":1022},[69,141850,135285],{"class":109},[69,141852,1019],{"class":86},[69,141854,135290],{"class":1022},[69,141856,1026],{"class":86},[29,141858,141859,141860,141863],{},"2 号盒子 ",[66,141861,141862],{},"recom_bd"," ，注意里面的小竖线",[162,141865,141866,141877,141880,141885,141890],{},[40,141867,141868,141869,141871,141872,141874,141875],{},"右侧结构里面放 ",[66,141870,162],{}," 包含 4个 ",[66,141873,40],{},"，每个li里面包含一个",[66,141876,24],{},[40,141878,141879],{},"直接利用切片工具把里面的内容当成一张图片",[40,141881,140256,141882,141884],{},[66,141883,40],{}," 设置浮动",[40,141886,140256,141887,141889],{},[66,141888,24],{}," 设置宽高，宽度 248px，高度 163px",[40,141891,141892,141893,141453,141896,141898,141899,141901,141902],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[66,141894,141895],{},"top 10px",[66,141897,40],{},"设置相对定位（注意，最后一个",[66,141900,40],{},"不用设置伪元素），可以利用 ",[66,141903,141904],{},"nth-child(-n+3){...}",[29,141906,141125],{},[59,141908,141909],{"className":61,"code":139598,"language":63,"meta":64,"style":64},[66,141910,141911,141919,141929,141939],{"__ignoreMap":64},[69,141912,141913,141915,141917],{"class":71,"line":72},[69,141914,442],{"class":348},[69,141916,138757],{"class":109},[69,141918,113],{"class":86},[69,141920,141921,141923,141925,141927],{"class":71,"line":79},[69,141922,138764],{"class":90},[69,141924,94],{"class":86},[69,141926,8894],{"class":1022},[69,141928,130],{"class":86},[69,141930,141931,141933,141935,141937],{"class":71,"line":106},[69,141932,129381],{"class":90},[69,141934,94],{"class":86},[69,141936,62095],{"class":90},[69,141938,130],{"class":86},[69,141940,141941],{"class":71,"line":116},[69,141942,142],{"class":86},[29,141944,141214],{},[59,141946,141947],{"className":61,"code":139598,"language":63,"meta":64,"style":64},[66,141948,141949,141957,141967,141977],{"__ignoreMap":64},[69,141950,141951,141953,141955],{"class":71,"line":72},[69,141952,442],{"class":348},[69,141954,138757],{"class":109},[69,141956,113],{"class":86},[69,141958,141959,141961,141963,141965],{"class":71,"line":79},[69,141960,138764],{"class":90},[69,141962,94],{"class":86},[69,141964,8894],{"class":1022},[69,141966,130],{"class":86},[69,141968,141969,141971,141973,141975],{"class":71,"line":106},[69,141970,129381],{"class":90},[69,141972,94],{"class":86},[69,141974,62095],{"class":90},[69,141976,130],{"class":86},[69,141978,141979],{"class":71,"line":116},[69,141980,142],{"class":86},[19,141982,141984],{"id":141983},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[24,141986],{"style":26,"src":141987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[29,141989,141990],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[29,141992,141993],{},"第一楼是家用电器模块： 里面包含两个盒子",[29,141995,141996,141999],{},[66,141997,141998],{},"box_hd"," 制作",[29,142001,141779,142002,142004],{},[66,142003,141998],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[24,142006],{"style":26,"src":142007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[162,142009,142010,142015,142020,142023],{},[40,142011,142012,142014],{},[66,142013,141998],{}," 给 30px 的高度，2个像素的下边框",[40,142016,142017,142018],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[66,142019,140267],{},[40,142021,142022],{},"左侧盒左浮动，右侧盒子右浮动",[40,142024,142025,142027,142028,142030],{},[66,142026,187],{},"标签之间的距离用左右的",[66,142029,32119],{},"撑开即可",[29,142032,142033],{},"结构代码",[59,142035,142036],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,142037,142038,142044,142054],{"__ignoreMap":64},[69,142039,142040,142042],{"class":71,"line":72},[69,142041,378],{"class":109},[69,142043,113],{"class":86},[69,142045,142046,142048,142050,142052],{"class":71,"line":79},[69,142047,1197],{"class":90},[69,142049,94],{"class":86},[69,142051,1202],{"class":90},[69,142053,130],{"class":86},[69,142055,142056],{"class":71,"line":106},[69,142057,142],{"class":86},[29,142059,142060],{},"样式代码",[59,142062,142063],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,142064,142065,142071,142081],{"__ignoreMap":64},[69,142066,142067,142069],{"class":71,"line":72},[69,142068,378],{"class":109},[69,142070,113],{"class":86},[69,142072,142073,142075,142077,142079],{"class":71,"line":79},[69,142074,1197],{"class":90},[69,142076,94],{"class":86},[69,142078,1202],{"class":90},[69,142080,130],{"class":86},[69,142082,142083],{"class":71,"line":106},[69,142084,142],{"class":86},[29,142086,142087,141999],{},[66,142088,142089],{},"box_bd",[29,142091,142092],{},"2 号盒子 box_bd，不要给高度",[24,142094],{"style":26,"src":142095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[29,142097,142098],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[29,142100,142101],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[29,142103,142104],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[162,142106,142107,142119,142135],{},[40,142108,142109,142111,142112,142115,142116,142118],{},[66,142110,142089],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[66,142113,142114],{},"tab_content","，在",[66,142117,142114],{}," 里面包裹tab选项卡对应的内容",[40,142120,142121,142122,142125,142126,142128,142129,142131,142132,142134],{},"内容被一个大盒子包裹（",[66,142123,142124],{},"tab_list_item","），里面是 ",[66,142127,162],{}," 包裹 5个 ",[66,142130,40],{},"，每个",[66,142133,40],{},"设置对应的宽度，然后设置浮动",[40,142136,142137,142138,142140,142141,142143,142144],{},"而这5个",[66,142139,40],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[66,142142,40],{},"设置",[162,142145,142146,142164,142167],{},[40,142147,142148,142149,142151,142152,142154,142155,142157,142158,142160,142161,142163],{},"第一个小 ",[66,142150,40],{}," 分为上下结构，上面是 ",[66,142153,162],{}," 包裹 ",[66,142156,40],{}," ，",[66,142159,40],{},"里面包裹 ",[66,142162,187],{},"，下面插入一张图片",[40,142165,142166],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[40,142168,142169,142170,142172,142173,142175,142176,142178],{},"后面的小 ",[66,142171,40],{}," 里面先放一个",[66,142174,187],{},"标签，然后在",[66,142177,187],{},"标签里面插入图片即可",[29,142180,142033],{},[59,142182,142183],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,142184,142185],{"__ignoreMap":64},[69,142186,142187,142189,142191,142193,142195,142197,142199,142201,142203,142205,142207,142209],{"class":71,"line":72},[69,142188,1011],{"class":86},[69,142190,24],{"class":348},[69,142192,56466],{"class":109},[69,142194,1019],{"class":86},[69,142196,135275],{"class":1022},[69,142198,56474],{"class":109},[69,142200,1019],{"class":86},[69,142202,135282],{"class":1022},[69,142204,135285],{"class":109},[69,142206,1019],{"class":86},[69,142208,135290],{"class":1022},[69,142210,1026],{"class":86},[29,142212,142060],{},[59,142214,142215],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,142216,142217],{"__ignoreMap":64},[69,142218,142219,142221,142223,142225,142227,142229,142231,142233,142235,142237,142239,142241],{"class":71,"line":72},[69,142220,1011],{"class":86},[69,142222,24],{"class":348},[69,142224,56466],{"class":109},[69,142226,1019],{"class":86},[69,142228,135275],{"class":1022},[69,142230,56474],{"class":109},[69,142232,1019],{"class":86},[69,142234,135282],{"class":1022},[69,142236,135285],{"class":109},[69,142238,1019],{"class":86},[69,142240,135290],{"class":1022},[69,142242,1026],{"class":86},[29,142244,142245],{},"tab栏切换需求！！！！！！介绍：",[24,142247],{"style":26,"src":142248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[162,142250,142251,142259,142265,142268],{},[40,142252,142253,142256,142257],{},[66,142254,142255],{},"tab","栏的布局是 ",[66,142258,140267],{},[40,142260,142261,142262,142264],{},"有多少个",[66,142263,142255],{},"选项卡，那么对应就有多少个内容",[40,142266,142267],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[40,142269,142270,142271,142274,142275,142277,142278,142280],{},"等后面我们学习了",[66,142272,142273],{},"js","之后，我们就会配合",[66,142276,142273],{},"来实现，",[66,142279,142255],{},"栏的切换",[14,142282,142284],{"id":142283},"_162-列表制作","16.2 列表制作",[19,142286,142288],{"id":142287},"_1621-准备工作","16.2.1 准备工作",[162,142290,142291,142294,142297,142300],{},[40,142292,142293],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[40,142295,142296],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[40,142298,142299],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[40,142301,142302],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[19,142304,142306,142307,102239,142309,142311],{"id":142305},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[66,142308,132763],{},[66,142310,54940],{}," 修改",[24,142313],{"style":26,"src":142314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[162,142316,142317],{},[40,142318,142319],{},"秒杀盒子 sk（ second kill ） 定位即可",[29,142321,141125],{},[59,142323,142324],{"className":61,"code":133190,"language":63,"meta":64,"style":64},[66,142325,142326,142330,142344,142348,142362,142366,142380,142384,142398,142402],{"__ignoreMap":64},[69,142327,142328],{"class":71,"line":72},[69,142329,133197],{"class":75},[69,142331,142332,142334,142336,142338,142340,142342],{"class":71,"line":79},[69,142333,133202],{"class":109},[69,142335,81028],{"class":86},[69,142337,130125],{"class":90},[69,142339,94],{"class":86},[69,142341,133211],{"class":90},[69,142343,130695],{"class":86},[69,142345,142346],{"class":71,"line":106},[69,142347,133218],{"class":75},[69,142349,142350,142352,142354,142356,142358,142360],{"class":71,"line":116},[69,142351,133223],{"class":109},[69,142353,81028],{"class":86},[69,142355,130125],{"class":90},[69,142357,94],{"class":86},[69,142359,55991],{"class":90},[69,142361,130695],{"class":86},[69,142363,142364],{"class":71,"line":133},[69,142365,133238],{"class":75},[69,142367,142368,142370,142372,142374,142376,142378],{"class":71,"line":139},[69,142369,133243],{"class":109},[69,142371,81028],{"class":86},[69,142373,130125],{"class":90},[69,142375,94],{"class":86},[69,142377,56058],{"class":90},[69,142379,130695],{"class":86},[69,142381,142382],{"class":71,"line":401},[69,142383,133258],{"class":75},[69,142385,142386,142388,142390,142392,142394,142396],{"class":71,"line":470},[69,142387,133263],{"class":109},[69,142389,81028],{"class":86},[69,142391,130125],{"class":90},[69,142393,94],{"class":86},[69,142395,87454],{"class":90},[69,142397,130695],{"class":86},[69,142399,142400],{"class":71,"line":475},[69,142401,133278],{"class":75},[69,142403,142404,142406,142408,142410,142412,142414],{"class":71,"line":482},[69,142405,133283],{"class":109},[69,142407,81028],{"class":86},[69,142409,130125],{"class":90},[69,142411,94],{"class":86},[69,142413,133292],{"class":90},[69,142415,130695],{"class":86},[29,142417,141214],{},[59,142419,142420],{"className":61,"code":133190,"language":63,"meta":64,"style":64},[66,142421,142422,142426,142440,142444,142458,142462,142476,142480,142494,142498],{"__ignoreMap":64},[69,142423,142424],{"class":71,"line":72},[69,142425,133197],{"class":75},[69,142427,142428,142430,142432,142434,142436,142438],{"class":71,"line":79},[69,142429,133202],{"class":109},[69,142431,81028],{"class":86},[69,142433,130125],{"class":90},[69,142435,94],{"class":86},[69,142437,133211],{"class":90},[69,142439,130695],{"class":86},[69,142441,142442],{"class":71,"line":106},[69,142443,133218],{"class":75},[69,142445,142446,142448,142450,142452,142454,142456],{"class":71,"line":116},[69,142447,133223],{"class":109},[69,142449,81028],{"class":86},[69,142451,130125],{"class":90},[69,142453,94],{"class":86},[69,142455,55991],{"class":90},[69,142457,130695],{"class":86},[69,142459,142460],{"class":71,"line":133},[69,142461,133238],{"class":75},[69,142463,142464,142466,142468,142470,142472,142474],{"class":71,"line":139},[69,142465,133243],{"class":109},[69,142467,81028],{"class":86},[69,142469,130125],{"class":90},[69,142471,94],{"class":86},[69,142473,56058],{"class":90},[69,142475,130695],{"class":86},[69,142477,142478],{"class":71,"line":401},[69,142479,133258],{"class":75},[69,142481,142482,142484,142486,142488,142490,142492],{"class":71,"line":470},[69,142483,133263],{"class":109},[69,142485,81028],{"class":86},[69,142487,130125],{"class":90},[69,142489,94],{"class":86},[69,142491,87454],{"class":90},[69,142493,130695],{"class":86},[69,142495,142496],{"class":71,"line":475},[69,142497,133278],{"class":75},[69,142499,142500,142502,142504,142506,142508,142510],{"class":71,"line":482},[69,142501,133283],{"class":109},[69,142503,81028],{"class":86},[69,142505,130125],{"class":90},[69,142507,94],{"class":86},[69,142509,133292],{"class":90},[69,142511,130695],{"class":86},[162,142513,142514,142525],{},[40,142515,142516,142517,142520,142521,102239,142523],{},"1 号盒子左侧浮动 ",[66,142518,142519],{},"sk_list"," 里面包含 ",[66,142522,162],{},[66,142524,40],{},[40,142526,142527,142528,142520,142531,102239,142533],{},"2 号盒子左侧浮动 ",[66,142529,142530],{},"sk_con",[66,142532,162],{},[66,142534,40],{},[29,142536,141125],{},[59,142538,142539],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,142540,142541,142547,142557],{"__ignoreMap":64},[69,142542,142543,142545],{"class":71,"line":72},[69,142544,378],{"class":109},[69,142546,113],{"class":86},[69,142548,142549,142551,142553,142555],{"class":71,"line":79},[69,142550,1197],{"class":90},[69,142552,94],{"class":86},[69,142554,1202],{"class":90},[69,142556,130],{"class":86},[69,142558,142559],{"class":71,"line":106},[69,142560,142],{"class":86},[29,142562,141214],{},[59,142564,142565],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,142566,142567,142573,142583],{"__ignoreMap":64},[69,142568,142569,142571],{"class":71,"line":72},[69,142570,378],{"class":109},[69,142572,113],{"class":86},[69,142574,142575,142577,142579,142581],{"class":71,"line":79},[69,142576,1197],{"class":90},[69,142578,94],{"class":86},[69,142580,1202],{"class":90},[69,142582,130],{"class":86},[69,142584,142585],{"class":71,"line":106},[69,142586,142],{"class":86},[19,142588,142590,142591],{"id":142589},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[66,142592,142593],{},"sk_container",[24,142595],{"style":26,"src":142596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[162,142598,142599,142604],{},[40,142600,141779,142601,142603],{},[66,142602,142593],{}," 给宽度 1200，不要给高度",[40,142605,142606],{},"一定不要忘记清除浮动",[29,142608,141125],{},[59,142610,142611],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,142612,142613,142619,142629],{"__ignoreMap":64},[69,142614,142615,142617],{"class":71,"line":72},[69,142616,378],{"class":109},[69,142618,113],{"class":86},[69,142620,142621,142623,142625,142627],{"class":71,"line":79},[69,142622,1197],{"class":90},[69,142624,94],{"class":86},[69,142626,1202],{"class":90},[69,142628,130],{"class":86},[69,142630,142631],{"class":71,"line":106},[69,142632,142],{"class":86},[37,142634,142635],{},[40,142636,142637],{},"sk_hd制作",[162,142639,142640],{},[40,142641,141859,142642,142645],{},[66,142643,142644],{},"sk_hd"," ，插入图片即可",[29,142647,141125],{},[59,142649,142650],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,142651,142652],{"__ignoreMap":64},[69,142653,142654,142656,142658,142660,142662,142664,142666,142668,142670,142672,142674,142676],{"class":71,"line":72},[69,142655,1011],{"class":86},[69,142657,24],{"class":348},[69,142659,56466],{"class":109},[69,142661,1019],{"class":86},[69,142663,135275],{"class":1022},[69,142665,56474],{"class":109},[69,142667,1019],{"class":86},[69,142669,135282],{"class":1022},[69,142671,135285],{"class":109},[69,142673,1019],{"class":86},[69,142675,135290],{"class":1022},[69,142677,1026],{"class":86},[37,142679,142680],{"start":79},[40,142681,142682],{},"sk_bd制作",[162,142684,142685],{},[40,142686,142687,142688,142691,142692,102239,142694,142696],{},"3 号盒子 ",[66,142689,142690],{},"sk_bd"," ，里面包含很多的 ",[66,142693,162],{},[66,142695,40],{},[162,142697,142698,142707],{},[40,142699,142700,142701,142703,142704,142706],{},"当鼠标移入到 ",[66,142702,40],{}," 上面的时候显示红色的边框，在这里先给 ",[66,142705,40],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[40,142708,142709,142710,142712,142713,142715,142716,142719,142720,142722],{},"由于给每个 ",[66,142711,40],{}," 都设置了外边距，导致一行的最后一个 ",[66,142714,40],{}," 掉了下来，在这里我们利用 ",[66,142717,142718],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[66,142721,40],{},"，去掉外边距就好了",[29,142724,141125],{},[59,142726,142727],{"className":61,"code":139945,"language":63,"meta":64,"style":64},[66,142728,142729,142735,142747],{"__ignoreMap":64},[69,142730,142731,142733],{"class":71,"line":72},[69,142732,442],{"class":348},[69,142734,113],{"class":86},[69,142736,142737,142739,142741,142743,142745],{"class":71,"line":79},[69,142738,71694],{"class":90},[69,142740,94],{"class":86},[69,142742,1583],{"class":90},[69,142744,52787],{"class":90},[69,142746,130],{"class":86},[69,142748,142749],{"class":71,"line":106},[69,142750,142],{"class":86},[29,142752,141214],{},[59,142754,142755],{"className":61,"code":139945,"language":63,"meta":64,"style":64},[66,142756,142757,142763,142775],{"__ignoreMap":64},[69,142758,142759,142761],{"class":71,"line":72},[69,142760,442],{"class":348},[69,142762,113],{"class":86},[69,142764,142765,142767,142769,142771,142773],{"class":71,"line":79},[69,142766,71694],{"class":90},[69,142768,94],{"class":86},[69,142770,1583],{"class":90},[69,142772,52787],{"class":90},[69,142774,130],{"class":86},[69,142776,142777],{"class":71,"line":106},[69,142778,142],{"class":86},[14,142780,142782],{"id":142781},"_163-注册页面制作","16.3 注册页面制作",[24,142784],{"style":26,"src":142785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[29,142787,142788,142790],{},[195,142789,10267],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[24,142792],{"style":26,"src":142793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[19,142795,142797],{"id":142796},"_1631-准备工作","16.3.1 准备工作",[162,142799,142800,142803],{},[40,142801,142802],{},"创建register.html，引入 base.css，引入favicon图标",[40,142804,142805],{},"创建register.css ，在html页面进行引入",[19,142807,142809,142810,142812],{"id":142808},"_1632-header-头部实现","16.3.2 ",[66,142811,132763],{}," 头部实现",[162,142814,142815,142818],{},[40,142816,142817],{},"整个内容用 版心 进行包裹",[40,142819,142820],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[29,142822,141125],{},[59,142824,142825],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,142826,142827],{"__ignoreMap":64},[69,142828,142829,142831,142833,142835,142837,142839,142841,142843,142845,142847,142849,142851],{"class":71,"line":72},[69,142830,1011],{"class":86},[69,142832,24],{"class":348},[69,142834,56466],{"class":109},[69,142836,1019],{"class":86},[69,142838,135275],{"class":1022},[69,142840,56474],{"class":109},[69,142842,1019],{"class":86},[69,142844,135282],{"class":1022},[69,142846,135285],{"class":109},[69,142848,1019],{"class":86},[69,142850,135290],{"class":1022},[69,142852,1026],{"class":86},[29,142854,141214],{},[59,142856,142857],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,142858,142859],{"__ignoreMap":64},[69,142860,142861,142863,142865,142867,142869,142871,142873,142875,142877,142879,142881,142883],{"class":71,"line":72},[69,142862,1011],{"class":86},[69,142864,24],{"class":348},[69,142866,56466],{"class":109},[69,142868,1019],{"class":86},[69,142870,135275],{"class":1022},[69,142872,56474],{"class":109},[69,142874,1019],{"class":86},[69,142876,135282],{"class":1022},[69,142878,135285],{"class":109},[69,142880,1019],{"class":86},[69,142882,135290],{"class":1022},[69,142884,1026],{"class":86},[19,142886,142888,142889,142892],{"id":142887},"_1633-registerarea-主体模块实现","16.3.3 ",[66,142890,142891],{},"registerarea"," 主体模块实现",[24,142894],{"style":26,"src":142895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[29,142897,142898],{},"整个大盒子 高度为 522px，设置4个边框",[29,142900,141125],{},[59,142902,142903],{"className":61,"code":131916,"language":63,"meta":64,"style":64},[66,142904,142905,142911,142927],{"__ignoreMap":64},[69,142906,142907,142909],{"class":71,"line":72},[69,142908,442],{"class":348},[69,142910,113],{"class":86},[69,142912,142913,142915,142917,142919,142921,142923,142925],{"class":71,"line":79},[69,142914,72118],{"class":90},[69,142916,94],{"class":86},[69,142918,1609],{"class":90},[69,142920,100],{"class":82},[69,142922,52752],{"class":90},[69,142924,131157],{"class":90},[69,142926,130],{"class":86},[69,142928,142929],{"class":71,"line":106},[69,142930,142],{"class":86},[29,142932,141214],{},[59,142934,142935],{"className":61,"code":131916,"language":63,"meta":64,"style":64},[66,142936,142937,142943,142959],{"__ignoreMap":64},[69,142938,142939,142941],{"class":71,"line":72},[69,142940,442],{"class":348},[69,142942,113],{"class":86},[69,142944,142945,142947,142949,142951,142953,142955,142957],{"class":71,"line":79},[69,142946,72118],{"class":90},[69,142948,94],{"class":86},[69,142950,1609],{"class":90},[69,142952,100],{"class":82},[69,142954,52752],{"class":90},[69,142956,131157],{"class":90},[69,142958,130],{"class":86},[69,142960,142961],{"class":71,"line":106},[69,142962,142],{"class":86},[29,142964,142965],{},"1号盒子 是一个 h3 标签，放标题",[162,142967,142968],{},[40,142969,142970],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[29,142972,141125],{},[59,142974,142975],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,142976,142977,142983,142993],{"__ignoreMap":64},[69,142978,142979,142981],{"class":71,"line":72},[69,142980,378],{"class":109},[69,142982,113],{"class":86},[69,142984,142985,142987,142989,142991],{"class":71,"line":79},[69,142986,1197],{"class":90},[69,142988,94],{"class":86},[69,142990,1202],{"class":90},[69,142992,130],{"class":86},[69,142994,142995],{"class":71,"line":106},[69,142996,142],{"class":86},[29,142998,141214],{},[59,143000,143001],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,143002,143003,143009,143019],{"__ignoreMap":64},[69,143004,143005,143007],{"class":71,"line":72},[69,143006,378],{"class":109},[69,143008,113],{"class":86},[69,143010,143011,143013,143015,143017],{"class":71,"line":79},[69,143012,1197],{"class":90},[69,143014,94],{"class":86},[69,143016,1202],{"class":90},[69,143018,130],{"class":86},[69,143020,143021],{"class":71,"line":106},[69,143022,142],{"class":86},[29,143024,143025],{},"2号盒子 里面放注册的内容",[162,143027,143028,143031,143040,143054,143067,143070,143073,143091,143105],{},[40,143029,143030],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[40,143032,143033,143034,143036,143037,143039],{},"里面的内容利用 ",[66,143035,162],{}," 包含 ",[66,143038,40],{}," 来实现的（不需要用表格）",[40,143041,140270,143042,143044,143045,143047,143048,143050,143051,143053],{},[66,143043,40],{}," 里面，左侧放 ",[66,143046,34844],{}," 标签， 中间放",[66,143049,55048],{}," 标签， 右侧放 ",[66,143052,69],{}," 提示信息",[40,143055,143056,143057,143059,143060,143062,143063,143066],{},"左侧 ",[66,143058,34844],{},"里面的文字都是右对齐，我们可以给",[66,143061,34844],{},"设置一个宽度（88px），然后利用",[66,143064,143065],{},"text-align"," 来设置右对齐",[40,143068,143069],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[40,143071,143072],{},"右侧 span修饰一下文字颜色",[40,143074,143075,143076],{},"提示信息的样式优化",[162,143077,143078,143081,143084],{},[40,143079,143080],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[40,143082,143083],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[40,143085,143086,143087,143090],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[66,143088,143089],{},"vertical-algin"," 来设置 图片与文字对齐方式",[40,143092,143093,143094],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[162,143095,143096,143102],{},[40,143097,143098,143099,143101],{},"设置 ",[66,143100,531],{}," 的 左右 12px 的内边距，设置一下文字颜色",[40,143103,143104],{},"分别设置 背景颜色",[40,143106,143107,143108,143110],{},"同意协议 和 完成注册 都是用 ",[66,143109,40],{}," 进行包裹",[29,143112,141125],{},[59,143114,143115],{"className":61,"code":141698,"language":63,"meta":64,"style":64},[66,143116,143117,143123,143133],{"__ignoreMap":64},[69,143118,143119,143121],{"class":71,"line":72},[69,143120,442],{"class":348},[69,143122,113],{"class":86},[69,143124,143125,143127,143129,143131],{"class":71,"line":79},[69,143126,72100],{"class":90},[69,143128,94],{"class":86},[69,143130,141715],{"class":90},[69,143132,130],{"class":86},[69,143134,143135],{"class":71,"line":106},[69,143136,142],{"class":86},[29,143138,141214],{},[59,143140,143141],{"className":61,"code":141698,"language":63,"meta":64,"style":64},[66,143142,143143,143149,143159],{"__ignoreMap":64},[69,143144,143145,143147],{"class":71,"line":72},[69,143146,442],{"class":348},[69,143148,113],{"class":86},[69,143150,143151,143153,143155,143157],{"class":71,"line":79},[69,143152,72100],{"class":90},[69,143154,94],{"class":86},[69,143156,141715],{"class":90},[69,143158,130],{"class":86},[69,143160,143161],{"class":71,"line":106},[69,143162,142],{"class":86},[19,143164,143166],{"id":143165},"_1634-底部实现","16.3.4 底部实现",[29,143168,141125],{},[59,143170,143171],{"className":61,"code":141698,"language":63,"meta":64,"style":64},[66,143172,143173,143179,143189],{"__ignoreMap":64},[69,143174,143175,143177],{"class":71,"line":72},[69,143176,442],{"class":348},[69,143178,113],{"class":86},[69,143180,143181,143183,143185,143187],{"class":71,"line":79},[69,143182,72100],{"class":90},[69,143184,94],{"class":86},[69,143186,141715],{"class":90},[69,143188,130],{"class":86},[69,143190,143191],{"class":71,"line":106},[69,143192,142],{"class":86},[29,143194,141214],{},[59,143196,143197],{"className":997,"code":998,"language":999,"meta":64,"style":64},[66,143198,143199,143203,143217,143221],{"__ignoreMap":64},[69,143200,143201],{"class":71,"line":72},[69,143202,1006],{"class":75},[69,143204,143205,143207,143209,143211,143213,143215],{"class":71,"line":79},[69,143206,1011],{"class":86},[69,143208,442],{"class":348},[69,143210,1016],{"class":109},[69,143212,1019],{"class":86},[69,143214,1023],{"class":1022},[69,143216,1026],{"class":86},[69,143218,143219],{"class":71,"line":106},[69,143220,1031],{"class":86},[69,143222,143223,143225,143227],{"class":71,"line":116},[69,143224,1036],{"class":86},[69,143226,442],{"class":348},[69,143228,1026],{"class":86},[14,143230,143232],{"id":143231},"_164-项目总结","16.4 项目总结",[37,143234,143235,143238,143241,143244],{},[40,143236,143237],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[40,143239,143240],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[40,143242,143243],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[40,143245,143246],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[24,143248],{"style":26,"src":143249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[37,143251,143252],{"start":133},[40,143253,143254],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[24,143256],{"style":26,"src":143257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[37,143259,143260],{"start":139},[40,143261,143262],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[24,143264],{"style":26,"src":143265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[59,143267,143268],{"className":997,"code":137913,"language":999,"meta":64,"style":64},[66,143269,143270],{"__ignoreMap":64},[69,143271,143272,143274,143276,143278,143280,143282,143284,143286,143288,143290,143292,143294],{"class":71,"line":72},[69,143273,1011],{"class":86},[69,143275,55048],{"class":348},[69,143277,55051],{"class":109},[69,143279,1019],{"class":86},[69,143281,63925],{"class":1022},[69,143283,16160],{"class":109},[69,143285,1019],{"class":86},[69,143287,137934],{"class":1022},[69,143289,62246],{"class":109},[69,143291,1019],{"class":86},[69,143293,137941],{"class":1022},[69,143295,1026],{"class":86},[37,143297,143298,143301],{"start":401},[40,143299,143300],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[40,143302,143303],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1297,143305,143306],{},"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":64,"searchDepth":79,"depth":79,"links":143308},[143309,143314,143321,143329],{"id":140935,"depth":79,"text":140936,"children":143310},[143311,143312,143313],{"id":140939,"depth":106,"text":140940},{"id":141670,"depth":106,"text":141671},{"id":141983,"depth":106,"text":141984},{"id":142283,"depth":79,"text":142284,"children":143315},[143316,143317,143319],{"id":142287,"depth":106,"text":142288},{"id":142305,"depth":106,"text":143318},"16.2.2 列表页 header 和 nav 修改",{"id":142589,"depth":106,"text":143320},"16.2.3 列表页主体 sk_container",{"id":142781,"depth":79,"text":142782,"children":143322},[143323,143324,143326,143328],{"id":142796,"depth":106,"text":142797},{"id":142808,"depth":106,"text":143325},"16.3.2 header 头部实现",{"id":142887,"depth":106,"text":143327},"16.3.3 registerarea 主体模块实现",{"id":143165,"depth":106,"text":143166},{"id":143231,"depth":79,"text":143232},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140927,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143336,"title":143337,"body":143338,"description":1322,"extension":1323,"meta":143446,"navigation":1325,"path":143447,"seo":143448,"stem":143449,"__hash__":143450},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143339,"toc":143441},[143340,143343,143347,143350,143353,143362,143371,143375,143380,143387,143405,143408,143411,143414,143417,143420,143423,143426,143429,143432,143435,143438],[10,143341,143337],{"id":143342},"_17-web服务器与网站发布",[14,143344,143346],{"id":143345},"_171-web服务器","17.1 Web服务器",[29,143348,143349],{},"把自己网站上传到服务器上，可以让其他人访问",[24,143351],{"style":26,"src":143352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[29,143354,143355,143358,143359],{},[195,143356,143357],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[195,143360,143361],{},"Web 服务器等",[29,143363,143364,143365,102239,143368,26977],{},"根据服务器在网络中所在的位置不同，又可分为 ",[195,143366,143367],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[195,143369,143370],{},"远程服务器",[19,143372,143374],{"id":143373},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[29,143376,143377],{},[195,143378,143379],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[29,143381,143382,143383],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[187,143384,143385],{"href":143385,"rel":143386},"http:\u002F\u002Ffree.3v.do\u002F",[191],[162,143388,143389,143392,143395,143402],{},[40,143390,143391],{},"去免费空间网站注册账号。",[40,143393,143394],{},"记录下主机名、用户名、密码、域名。",[40,143396,143397,143398,143401],{},"利用 ",[66,143399,143400],{},"utftp"," 软件 上传网站到远程服务器",[40,143403,143404],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[29,143406,143407],{},"使用软件上传，对上传软件文件进行解压",[24,143409],{"style":26,"src":143410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[24,143412],{"style":26,"src":143413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[29,143415,143416],{},"输入刚刚申请的服务器账号信息：",[24,143418],{"style":26,"src":143419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[24,143421],{"style":26,"src":143422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[24,143424],{"style":26,"src":143425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[24,143427],{"style":26,"src":143428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[29,143430,143431],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[24,143433],{"style":26,"src":143434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[29,143436,143437],{},"浏览器输入域名即可访问",[29,143439,143440],{},"首页一定必须是index",{"title":64,"searchDepth":79,"depth":79,"links":143442},[143443],{"id":143345,"depth":79,"text":143346,"children":143444},[143445],{"id":143373,"depth":106,"text":143374},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143337,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143452,"title":143453,"body":143454,"description":1322,"extension":1323,"meta":144381,"navigation":1325,"path":144382,"seo":144383,"stem":144384,"__hash__":144385},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143455,"toc":144364},[143456,143459,143463,143466,143469,143480,143483,143487,143491,143496,143499,143502,143505,143508,143512,143538,143542,143546,143549,143552,143556,143589,143593,143596,143599,143663,143667,143671,143674,143677,143680,143684,143729,143733,143736,143766,143770,143774,143777,143780,143784,143787,143856,143859,143967,143969,143975,143979,143982,143985,144081,144084,144088,144112,144116,144119,144123,144126,144130,144133,144136,144139,144142,144146,144149,144152,144156,144160,144163,144166,144169,144172,144176,144179,144183,144186,144189,144234,144238,144242,144245,144248,144251,144283,144287,144290,144324,144328,144331,144361],[10,143457,143453],{"id":143458},"_18-2d动画与3d转换",[14,143460,143462],{"id":143461},"_181-css3-2d转换","18.1 CSS3 2D转换",[29,143464,143465],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[29,143467,143468],{},"转换（transform）你可以简单理解为变形",[162,143470,143471,143474,143477],{},[40,143472,143473],{},"移动：translate",[40,143475,143476],{},"旋转：rotate",[40,143478,143479],{},"缩放：scale",[24,143481],{"style":26,"src":143482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[19,143484,143486],{"id":143485},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23237,143488,143490],{"id":143489},"_18111-translate介绍","18.1.1.1 translate介绍",[29,143492,143493,143494],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[195,143495,134417],{},[24,143497],{"style":26,"src":143498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[29,143500,143501],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[29,143503,143504],{},"对于行内元素无效",[29,143506,143507],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23237,143509,143511],{"id":143510},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[59,143513,143514],{"className":61,"code":139945,"language":63,"meta":64,"style":64},[66,143515,143516,143522,143534],{"__ignoreMap":64},[69,143517,143518,143520],{"class":71,"line":72},[69,143519,442],{"class":348},[69,143521,113],{"class":86},[69,143523,143524,143526,143528,143530,143532],{"class":71,"line":79},[69,143525,71694],{"class":90},[69,143527,94],{"class":86},[69,143529,1583],{"class":90},[69,143531,52787],{"class":90},[69,143533,130],{"class":86},[69,143535,143536],{"class":71,"line":106},[69,143537,142],{"class":86},[19,143539,143541],{"id":143540},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23237,143543,143545],{"id":143544},"_18121-rotate介绍","18.1.2.1 rotate介绍",[29,143547,143548],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[24,143550],{"style":26,"src":143551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23237,143553,143555],{"id":143554},"_18122-旋转效果","18.1.2.2 旋转效果",[59,143557,143559],{"className":61,"code":143558,"language":63,"meta":64,"style":64},"div {\n  transform: rotate(45deg);\n}\n",[66,143560,143561,143567,143585],{"__ignoreMap":64},[69,143562,143563,143565],{"class":71,"line":72},[69,143564,442],{"class":348},[69,143566,113],{"class":86},[69,143568,143569,143571,143573,143576,143578,143580,143583],{"class":71,"line":79},[69,143570,137740],{"class":90},[69,143572,94],{"class":86},[69,143574,143575],{"class":90},"rotate",[69,143577,1398],{"class":86},[69,143579,1917],{"class":90},[69,143581,143582],{"class":82},"deg",[69,143584,3963],{"class":86},[69,143586,143587],{"class":71,"line":106},[69,143588,142],{"class":86},[23237,143590,143592],{"id":143591},"_18123-三角做法","18.1.2.3 三角做法",[29,143594,143595],{},"该下标当经过最外层大盒子时会实现向上反转",[24,143597],{"style":26,"src":143598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[59,143600,143601],{"className":61,"code":136278,"language":63,"meta":64,"style":64},[66,143602,143603,143607,143613,143623,143633,143649,143659],{"__ignoreMap":64},[69,143604,143605],{"class":71,"line":72},[69,143606,136285],{"class":75},[69,143608,143609,143611],{"class":71,"line":79},[69,143610,136290],{"class":109},[69,143612,113],{"class":86},[69,143614,143615,143617,143619,143621],{"class":71,"line":106},[69,143616,385],{"class":90},[69,143618,94],{"class":86},[69,143620,1583],{"class":90},[69,143622,130],{"class":86},[69,143624,143625,143627,143629,143631],{"class":71,"line":116},[69,143626,72010],{"class":90},[69,143628,94],{"class":86},[69,143630,1583],{"class":90},[69,143632,130],{"class":86},[69,143634,143635,143637,143639,143641,143643,143645,143647],{"class":71,"line":133},[69,143636,72118],{"class":90},[69,143638,94],{"class":86},[69,143640,390],{"class":90},[69,143642,100],{"class":82},[69,143644,52752],{"class":90},[69,143646,65217],{"class":90},[69,143648,130],{"class":86},[69,143650,143651,143653,143655,143657],{"class":71,"line":139},[69,143652,136333],{"class":90},[69,143654,94],{"class":86},[69,143656,63595],{"class":90},[69,143658,130],{"class":86},[69,143660,143661],{"class":71,"line":401},[69,143662,142],{"class":86},[19,143664,143666],{"id":143665},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23237,143668,143670],{"id":143669},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[29,143672,143673],{},"设置中心点",[24,143675],{"style":26,"src":143676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[29,143678,143679],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23237,143681,143683],{"id":143682},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[59,143685,143687],{"className":61,"code":143686,"language":63,"meta":64,"style":64},"\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",[66,143688,143689,143694,143700,143715,143720,143725],{"__ignoreMap":64},[69,143690,143691],{"class":71,"line":72},[69,143692,143693],{"class":75},"\u002F* 转换中心点 *\u002F\n",[69,143695,143696,143698],{"class":71,"line":79},[69,143697,442],{"class":348},[69,143699,113],{"class":86},[69,143701,143702,143705,143707,143709,143711,143713],{"class":71,"line":106},[69,143703,143704],{"class":90},"  transform-origin",[69,143706,94],{"class":86},[69,143708,52823],{"class":90},[69,143710,18383],{"class":90},[69,143712,366],{"class":86},[69,143714,136431],{"class":75},[69,143716,143717],{"class":71,"line":116},[69,143718,143719],{"class":75},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[69,143721,143722],{"class":71,"line":133},[69,143723,143724],{"class":75},"  \u002F* transform-origin: left top; *\u002F\n",[69,143726,143727],{"class":71,"line":139},[69,143728,142],{"class":86},[23237,143730,143732],{"id":143731},"_18133-旋转案例","18.1.3.3 旋转案例",[24,143734],{"style":26,"src":143735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[59,143737,143738],{"className":61,"code":143558,"language":63,"meta":64,"style":64},[66,143739,143740,143746,143762],{"__ignoreMap":64},[69,143741,143742,143744],{"class":71,"line":72},[69,143743,442],{"class":348},[69,143745,113],{"class":86},[69,143747,143748,143750,143752,143754,143756,143758,143760],{"class":71,"line":79},[69,143749,137740],{"class":90},[69,143751,94],{"class":86},[69,143753,143575],{"class":90},[69,143755,1398],{"class":86},[69,143757,1917],{"class":90},[69,143759,143582],{"class":82},[69,143761,3963],{"class":86},[69,143763,143764],{"class":71,"line":106},[69,143765,142],{"class":86},[19,143767,143769],{"id":143768},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23237,143771,143773],{"id":143772},"_18141-scale介绍","18.1.4.1 scale介绍",[29,143775,143776],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[24,143778],{"style":26,"src":143779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23237,143781,143783],{"id":143782},"_18142-分页按钮","18.1.4.2 分页按钮",[24,143785],{"style":26,"src":143786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[59,143788,143790],{"className":61,"code":143789,"language":63,"meta":64,"style":64},"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",[66,143791,143792,143798,143814,143818,143822,143827,143833,143847,143852],{"__ignoreMap":64},[69,143793,143794,143796],{"class":71,"line":72},[69,143795,442],{"class":348},[69,143797,113],{"class":86},[69,143799,143800,143802,143804,143807,143809,143812],{"class":71,"line":79},[69,143801,137740],{"class":90},[69,143803,94],{"class":86},[69,143805,143806],{"class":90},"scale",[69,143808,1398],{"class":86},[69,143810,143811],{"class":90},"1.2",[69,143813,3963],{"class":86},[69,143815,143816],{"class":71,"line":106},[69,143817,142],{"class":86},[69,143819,143820],{"class":71,"line":116},[69,143821,467],{"class":86},[69,143823,143824],{"class":71,"line":133},[69,143825,143826],{"class":75},"\u002F* 2D 缩放 *\u002F\n",[69,143828,143829,143831],{"class":71,"line":139},[69,143830,442],{"class":348},[69,143832,113],{"class":86},[69,143834,143835,143837,143839,143841,143843,143845],{"class":71,"line":401},[69,143836,137740],{"class":90},[69,143838,94],{"class":86},[69,143840,143806],{"class":90},[69,143842,1398],{"class":86},[69,143844,143811],{"class":90},[69,143846,3963],{"class":86},[69,143848,143849],{"class":71,"line":470},[69,143850,143851],{"class":75},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[69,143853,143854],{"class":71,"line":475},[69,143855,142],{"class":86},[29,143857,143858],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[59,143860,143862],{"className":61,"code":143861,"language":63,"meta":64,"style":64},"\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",[66,143863,143864,143869,143879,143900,143921,143925,143930,143936,143963],{"__ignoreMap":64},[69,143865,143866],{"class":71,"line":72},[69,143867,143868],{"class":75},"\u002F* 定义动画 *\u002F\n",[69,143870,143871,143874,143877],{"class":71,"line":79},[69,143872,143873],{"class":82},"@keyframes",[69,143875,143876],{"class":6458}," move",[69,143878,113],{"class":86},[69,143880,143881,143884,143886,143888,143890,143893,143895,143897],{"class":71,"line":106},[69,143882,143883],{"class":109},"  0%",[69,143885,81028],{"class":86},[69,143887,49370],{"class":90},[69,143889,94],{"class":86},[69,143891,143892],{"class":90},"translateX",[69,143894,1398],{"class":86},[69,143896,1583],{"class":90},[69,143898,143899],{"class":86},"); }\n",[69,143901,143902,143905,143907,143909,143911,143913,143915,143917,143919],{"class":71,"line":116},[69,143903,143904],{"class":109},"  100%",[69,143906,81028],{"class":86},[69,143908,49370],{"class":90},[69,143910,94],{"class":86},[69,143912,143892],{"class":90},[69,143914,1398],{"class":86},[69,143916,124],{"class":90},[69,143918,100],{"class":82},[69,143920,143899],{"class":86},[69,143922,143923],{"class":71,"line":133},[69,143924,142],{"class":86},[69,143926,143927],{"class":71,"line":139},[69,143928,143929],{"class":75},"\u002F* 调用动画 *\u002F\n",[69,143931,143932,143934],{"class":71,"line":401},[69,143933,442],{"class":348},[69,143935,113],{"class":86},[69,143937,143938,143941,143943,143945,143947,143949,143951,143953,143955,143958,143961],{"class":71,"line":470},[69,143939,143940],{"class":90},"  animation",[69,143942,94],{"class":86},[69,143944,136444],{"class":90},[69,143946,26355],{"class":90},[69,143948,2082],{"class":82},[69,143950,79901],{"class":90},[69,143952,5337],{"class":90},[69,143954,2082],{"class":82},[69,143956,143957],{"class":90}," infinite",[69,143959,143960],{"class":90}," alternate",[69,143962,130],{"class":86},[69,143964,143965],{"class":71,"line":475},[69,143966,142],{"class":86},[29,143968,143858],{},[59,143970,143973],{"className":143971,"code":143972,"language":540},[538],"\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",[66,143974,143972],{"__ignoreMap":64},[23237,143976,143978],{"id":143977},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[29,143980,143981],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[24,143983],{"style":26,"src":143984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[59,143986,143987],{"className":61,"code":143861,"language":63,"meta":64,"style":64},[66,143988,143989,143993,144001,144019,144039,144043,144047,144053,144077],{"__ignoreMap":64},[69,143990,143991],{"class":71,"line":72},[69,143992,143868],{"class":75},[69,143994,143995,143997,143999],{"class":71,"line":79},[69,143996,143873],{"class":82},[69,143998,143876],{"class":6458},[69,144000,113],{"class":86},[69,144002,144003,144005,144007,144009,144011,144013,144015,144017],{"class":71,"line":106},[69,144004,143883],{"class":109},[69,144006,81028],{"class":86},[69,144008,49370],{"class":90},[69,144010,94],{"class":86},[69,144012,143892],{"class":90},[69,144014,1398],{"class":86},[69,144016,1583],{"class":90},[69,144018,143899],{"class":86},[69,144020,144021,144023,144025,144027,144029,144031,144033,144035,144037],{"class":71,"line":116},[69,144022,143904],{"class":109},[69,144024,81028],{"class":86},[69,144026,49370],{"class":90},[69,144028,94],{"class":86},[69,144030,143892],{"class":90},[69,144032,1398],{"class":86},[69,144034,124],{"class":90},[69,144036,100],{"class":82},[69,144038,143899],{"class":86},[69,144040,144041],{"class":71,"line":133},[69,144042,142],{"class":86},[69,144044,144045],{"class":71,"line":139},[69,144046,143929],{"class":75},[69,144048,144049,144051],{"class":71,"line":401},[69,144050,442],{"class":348},[69,144052,113],{"class":86},[69,144054,144055,144057,144059,144061,144063,144065,144067,144069,144071,144073,144075],{"class":71,"line":470},[69,144056,143940],{"class":90},[69,144058,94],{"class":86},[69,144060,136444],{"class":90},[69,144062,26355],{"class":90},[69,144064,2082],{"class":82},[69,144066,79901],{"class":90},[69,144068,5337],{"class":90},[69,144070,2082],{"class":82},[69,144072,143957],{"class":90},[69,144074,143960],{"class":90},[69,144076,130],{"class":86},[69,144078,144079],{"class":71,"line":475},[69,144080,142],{"class":86},[29,144082,144083],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[19,144085,144087],{"id":144086},"_1823-知识点回顾","18.2.3 知识点回顾",[59,144089,144090],{"className":61,"code":129934,"language":63,"meta":64,"style":64},[66,144091,144092,144098,144108],{"__ignoreMap":64},[69,144093,144094,144096],{"class":71,"line":72},[69,144095,442],{"class":348},[69,144097,113],{"class":86},[69,144099,144100,144102,144104,144106],{"class":71,"line":79},[69,144101,129947],{"class":90},[69,144103,94],{"class":86},[69,144105,62962],{"class":90},[69,144107,130],{"class":86},[69,144109,144110],{"class":71,"line":106},[69,144111,142],{"class":86},[14,144113,144115],{"id":144114},"_183-3d-转换","18.3 3D 转换",[29,144117,144118],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[19,144120,144122],{"id":144121},"_1831-坐标轴认识","18.3.1 坐标轴认识",[24,144124],{"style":26,"src":144125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[19,144127,144129],{"id":144128},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[24,144131],{"style":26,"src":144132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[29,144134,144135],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[29,144137,144138],{},"translate3d的效果需要搭配透视perspective来使用",[24,144140],{"style":26,"src":144141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[19,144143,144145],{"id":144144},"_1833-透视-perspective","18.3.3 透视 perspective",[24,144147],{"style":26,"src":144148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[29,144150,144151],{},"透视写在父盒子上，单位为像素",[19,144153,144155],{"id":144154},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23237,144157,144159],{"id":144158},"_18341-分开解释","18.3.4.1 分开解释",[24,144161],{"style":26,"src":144162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[24,144164],{"style":26,"src":144165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[24,144167],{"style":26,"src":144168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[29,144170,144171],{},"总结来说就是左手原则",[23237,144173,144175],{"id":144174},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[24,144177],{"style":26,"src":144178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[19,144180,144182],{"id":144181},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[24,144184],{"style":26,"src":144185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[24,144187],{"style":26,"src":144188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[59,144190,144192],{"className":61,"code":144191,"language":63,"meta":64,"style":64},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[66,144193,144194,144200,144213,144230],{"__ignoreMap":64},[69,144195,144196,144198],{"class":71,"line":72},[69,144197,442],{"class":348},[69,144199,113],{"class":86},[69,144201,144202,144205,144207,144209,144211],{"class":71,"line":79},[69,144203,144204],{"class":90},"  perspective",[69,144206,94],{"class":86},[69,144208,66300],{"class":90},[69,144210,100],{"class":82},[69,144212,130],{"class":86},[69,144214,144215,144217,144219,144222,144224,144226,144228],{"class":71,"line":106},[69,144216,137740],{"class":90},[69,144218,94],{"class":86},[69,144220,144221],{"class":90},"rotateX",[69,144223,1398],{"class":86},[69,144225,1917],{"class":90},[69,144227,143582],{"class":82},[69,144229,3963],{"class":86},[69,144231,144232],{"class":71,"line":116},[69,144233,142],{"class":86},[19,144235,144237],{"id":144236},"_1836-案例","18.3.6 案例",[23237,144239,144241],{"id":144240},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[24,144243],{"style":26,"src":144244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[24,144246],{"style":26,"src":144247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[24,144249],{"style":26,"src":144250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[59,144252,144254],{"className":61,"code":144253,"language":63,"meta":64,"style":64},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[66,144255,144256,144261,144267,144279],{"__ignoreMap":64},[69,144257,144258],{"class":71,"line":72},[69,144259,144260],{"class":75},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[69,144262,144263,144265],{"class":71,"line":79},[69,144264,134755],{"class":109},[69,144266,113],{"class":86},[69,144268,144269,144271,144273,144275,144277],{"class":71,"line":106},[69,144270,144204],{"class":90},[69,144272,94],{"class":86},[69,144274,66300],{"class":90},[69,144276,100],{"class":82},[69,144278,130],{"class":86},[69,144280,144281],{"class":71,"line":116},[69,144282,142],{"class":86},[23237,144284,144286],{"id":144285},"_18362-3d导航栏","18.3.6.2 3D导航栏",[24,144288],{"style":26,"src":144289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[59,144291,144292],{"className":997,"code":998,"language":999,"meta":64,"style":64},[66,144293,144294,144298,144312,144316],{"__ignoreMap":64},[69,144295,144296],{"class":71,"line":72},[69,144297,1006],{"class":75},[69,144299,144300,144302,144304,144306,144308,144310],{"class":71,"line":79},[69,144301,1011],{"class":86},[69,144303,442],{"class":348},[69,144305,1016],{"class":109},[69,144307,1019],{"class":86},[69,144309,1023],{"class":1022},[69,144311,1026],{"class":86},[69,144313,144314],{"class":71,"line":106},[69,144315,1031],{"class":86},[69,144317,144318,144320,144322],{"class":71,"line":116},[69,144319,1036],{"class":86},[69,144321,442],{"class":348},[69,144323,1026],{"class":86},[23237,144325,144327],{"id":144326},"_18363-旋转木马","18.3.6.3 旋转木马",[24,144329],{"style":26,"src":144330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[59,144332,144333],{"className":61,"code":143558,"language":63,"meta":64,"style":64},[66,144334,144335,144341,144357],{"__ignoreMap":64},[69,144336,144337,144339],{"class":71,"line":72},[69,144338,442],{"class":348},[69,144340,113],{"class":86},[69,144342,144343,144345,144347,144349,144351,144353,144355],{"class":71,"line":79},[69,144344,137740],{"class":90},[69,144346,94],{"class":86},[69,144348,143575],{"class":90},[69,144350,1398],{"class":86},[69,144352,1917],{"class":90},[69,144354,143582],{"class":82},[69,144356,3963],{"class":86},[69,144358,144359],{"class":71,"line":106},[69,144360,142],{"class":86},[1297,144362,144363],{},"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":64,"searchDepth":79,"depth":79,"links":144365},[144366,144373],{"id":143461,"depth":79,"text":143462,"children":144367},[144368,144369,144370,144371,144372],{"id":143485,"depth":106,"text":143486},{"id":143540,"depth":106,"text":143541},{"id":143665,"depth":106,"text":143666},{"id":143768,"depth":106,"text":143769},{"id":144086,"depth":106,"text":144087},{"id":144114,"depth":79,"text":144115,"children":144374},[144375,144376,144377,144378,144379,144380],{"id":144121,"depth":106,"text":144122},{"id":144128,"depth":106,"text":144129},{"id":144144,"depth":106,"text":144145},{"id":144154,"depth":106,"text":144155},{"id":144181,"depth":106,"text":144182},{"id":144236,"depth":106,"text":144237},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143453,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144387,"title":144388,"body":144389,"description":1322,"extension":1323,"meta":144592,"navigation":1325,"path":144593,"seo":144594,"stem":144595,"__hash__":144596},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144390,"toc":144581},[144391,144394,144398,144401,144404,144408,144411,144414,144417,144421,144424,144428,144431,144435,144438,144442,144456,144460,144485,144488,144491,144508,144512,144516,144519,144522,144526,144529,144532,144550,144554,144557,144571,144575,144578],[10,144392,144388],{"id":144393},"_19-移动端基础-前缀现状与视口",[14,144395,144397],{"id":144396},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[24,144399],{"style":26,"src":144400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[29,144402,144403],{},"意思就是加个前缀，增加兼容性",[14,144405,144407],{"id":144406},"_192-移动端现状认识","19.2 移动端现状认识",[24,144409],{"style":26,"src":144410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[29,144412,144413],{},"调试方法：",[24,144415],{"style":26,"src":144416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144418,144420],{"id":144419},"_193-视口","19.3 视口",[29,144422,144423],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[19,144425,144427],{"id":144426},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[24,144429],{"style":26,"src":144430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[19,144432,144434],{"id":144433},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[24,144436],{"style":26,"src":144437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[19,144439,144441],{"id":144440},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[162,144443,144444,144447,144450,144453],{},[40,144445,144446],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[40,144448,144449],{},"理想视口，对设备来讲，是最理想的视口尺寸",[40,144451,144452],{},"需要手动添写meta视口标签通知浏览器操作",[40,144454,144455],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[19,144457,144459],{"id":144458},"_1934-meta视口标签","19.3.4 meta视口标签",[59,144461,144463],{"className":997,"code":144462,"language":999,"meta":64,"style":64},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[66,144464,144465],{"__ignoreMap":64},[69,144466,144467,144469,144471,144473,144475,144477,144479,144481,144483],{"class":71,"line":72},[69,144468,1011],{"class":86},[69,144470,52577],{"class":348},[69,144472,16160],{"class":109},[69,144474,1019],{"class":86},[69,144476,52624],{"class":1022},[69,144478,52604],{"class":109},[69,144480,1019],{"class":86},[69,144482,52631],{"class":1022},[69,144484,1026],{"class":86},[24,144486],{"style":26,"src":144487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[29,144489,144490],{},"标准视口设置：",[37,144492,144493,144496,144499,144502,144505],{},[40,144494,144495],{},"视口宽度和设备保持一致",[40,144497,144498],{},"视口的默认缩放比例1.0",[40,144500,144501],{},"不允许用户自行缩放",[40,144503,144504],{},"最大允许的缩放比例1.0",[40,144506,144507],{},"最小允许的缩放比例1.0",[19,144509,144511],{"id":144510},"_1935-二倍图","19.3.5 二倍图",[23237,144513,144515],{"id":144514},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[24,144517],{"style":26,"src":144518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[24,144520],{"style":26,"src":144521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23237,144523,144525],{"id":144524},"_19352-多倍图","19.3.5.2 多倍图",[24,144527],{"style":26,"src":144528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[29,144530,144531],{},"二倍图法，代码如下：",[59,144533,144535],{"className":61,"code":144534,"language":63,"meta":64,"style":64},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[66,144536,144537,144542],{"__ignoreMap":64},[69,144538,144539],{"class":71,"line":72},[69,144540,144541],{"class":75},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[69,144543,144544,144547],{"class":71,"line":79},[69,144545,144546],{"class":348},"background-size",[69,144548,144549],{"class":86},": 50% 50%;\n",[23237,144551,144553],{"id":144552},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[24,144555],{"style":26,"src":144556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[37,144558,144559,144562,144565,144568],{},[40,144560,144561],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[40,144563,144564],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[40,144566,144567],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[40,144569,144570],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23237,144572,144574],{"id":144573},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[24,144576],{"style":26,"src":144577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1297,144579,144580],{},"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":64,"searchDepth":79,"depth":79,"links":144582},[144583,144584,144585],{"id":144396,"depth":79,"text":144397},{"id":144406,"depth":79,"text":144407},{"id":144419,"depth":79,"text":144420,"children":144586},[144587,144588,144589,144590,144591],{"id":144426,"depth":106,"text":144427},{"id":144433,"depth":106,"text":144434},{"id":144440,"depth":106,"text":144441},{"id":144458,"depth":106,"text":144459},{"id":144510,"depth":106,"text":144511},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144388,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144598,"title":144599,"body":144600,"description":1322,"extension":1323,"meta":145477,"navigation":1325,"path":145478,"seo":145479,"stem":145480,"__hash__":145481},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144601,"toc":145461},[144602,144605,144609,144616,144619,144626,144629,144634,144637,144641,144645,144652,144655,144658,144662,144665,144668,144671,144674,144677,144681,144684,144688,144690,144693,144696,144699,144702,144704,144707,144709,144739,144741,144771,144775,144778,144782,144785,144802,144805,144808,144884,144886,144889,144892,144895,144898,144900,144903,144906,144910,144932,144935,144938,144942,144945,144951,144954,144958,144961,144964,144968,144971,144974,144977,144981,144984,144987,144990,144993,144997,145000,145004,145011,145014,145017,145020,145023,145033,145036,145039,145046,145049,145053,145056,145059,145063,145066,145069,145072,145117,145120,145123,145126,145128,145257,145259,145297,145300,145303,145305,145423,145425,145459],[10,144603,144599],{"id":144604},"_20-移动端布局实战上篇",[14,144606,144608],{"id":144607},"_201-移动端主流方案","20.1 移动端主流方案",[37,144610,144611],{},[40,144612,144613],{},[195,144614,144615],{},"单独移动端页面（主流）",[24,144617],{"style":26,"src":144618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[37,144620,144621],{"start":79},[40,144622,144623],{},[195,144624,144625],{},"响应式兼容PC移动端",[24,144627],{"style":26,"src":144628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[37,144630,144631],{"start":106},[40,144632,144633],{},"两种页面选型布局方式",[24,144635],{"style":26,"src":144636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144638,144640],{"id":144639},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[19,144642,144644],{"id":144643},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[29,144646,144647,144648],{},"官网地址： ",[187,144649,144650],{"href":144650,"rel":144651},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[191],[24,144653],{"style":26,"src":144654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[24,144656],{"style":26,"src":144657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[19,144659,144661],{"id":144660},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[24,144663],{"style":26,"src":144664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[24,144666],{"style":26,"src":144667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[29,144669,144670],{},"去除高亮：",[29,144672,144673],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[29,144675,144676],{},"-webkit- tap-highlight-color: transparent;",[14,144678,144680],{"id":144679},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[24,144682],{"style":26,"src":144683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144685,144687],{"id":144686},"_204-流式布局案例","20.4 流式布局案例",[29,144689,272],{},[29,144691,144692],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[29,144694,144695],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[29,144697,144698],{},"图片格式：",[24,144700],{"style":26,"src":144701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[29,144703,973],{},[24,144705],{"style":26,"src":144706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[29,144708,141125],{},[59,144710,144711],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,144712,144713],{"__ignoreMap":64},[69,144714,144715,144717,144719,144721,144723,144725,144727,144729,144731,144733,144735,144737],{"class":71,"line":72},[69,144716,1011],{"class":86},[69,144718,24],{"class":348},[69,144720,56466],{"class":109},[69,144722,1019],{"class":86},[69,144724,135275],{"class":1022},[69,144726,56474],{"class":109},[69,144728,1019],{"class":86},[69,144730,135282],{"class":1022},[69,144732,135285],{"class":109},[69,144734,1019],{"class":86},[69,144736,135290],{"class":1022},[69,144738,1026],{"class":86},[29,144740,141214],{},[59,144742,144743],{"className":997,"code":135260,"language":999,"meta":64,"style":64},[66,144744,144745],{"__ignoreMap":64},[69,144746,144747,144749,144751,144753,144755,144757,144759,144761,144763,144765,144767,144769],{"class":71,"line":72},[69,144748,1011],{"class":86},[69,144750,24],{"class":348},[69,144752,56466],{"class":109},[69,144754,1019],{"class":86},[69,144756,135275],{"class":1022},[69,144758,56474],{"class":109},[69,144760,1019],{"class":86},[69,144762,135282],{"class":1022},[69,144764,135285],{"class":109},[69,144766,1019],{"class":86},[69,144768,135290],{"class":1022},[69,144770,1026],{"class":86},[14,144772,144774],{"id":144773},"_205-flex布局","20.5 flex布局",[24,144776],{"style":26,"src":144777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[19,144779,144781],{"id":144780},"_2051-布局原理","20.5.1 布局原理",[29,144783,144784],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[162,144786,144787,144790,144793,144796,144799],{},[40,144788,144789],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[40,144791,144792],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[40,144794,144795],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[40,144797,144798],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[40,144800,144801],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[29,144803,144804],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[29,144806,144807],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[59,144809,144811],{"className":61,"code":144810,"language":63,"meta":64,"style":64},"\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",[66,144812,144813,144818,144825,144835,144847,144858,144869,144880],{"__ignoreMap":64},[69,144814,144815],{"class":71,"line":72},[69,144816,144817],{"class":75},"\u002F* Flex 弹性布局 *\u002F\n",[69,144819,144820,144823],{"class":71,"line":79},[69,144821,144822],{"class":109},".container",[69,144824,113],{"class":86},[69,144826,144827,144829,144831,144833],{"class":71,"line":106},[69,144828,129381],{"class":90},[69,144830,94],{"class":86},[69,144832,52709],{"class":90},[69,144834,130],{"class":86},[69,144836,144837,144840,144842,144845],{"class":71,"line":116},[69,144838,144839],{"class":90},"  flex-direction",[69,144841,94],{"class":86},[69,144843,144844],{"class":90},"row",[69,144846,130],{"class":86},[69,144848,144849,144852,144854,144856],{"class":71,"line":133},[69,144850,144851],{"class":90},"  justify-content",[69,144853,94],{"class":86},[69,144855,52898],{"class":90},[69,144857,130],{"class":86},[69,144859,144860,144863,144865,144867],{"class":71,"line":139},[69,144861,144862],{"class":90},"  align-items",[69,144864,94],{"class":86},[69,144866,52823],{"class":90},[69,144868,130],{"class":86},[69,144870,144871,144874,144876,144878],{"class":71,"line":401},[69,144872,144873],{"class":90},"  flex-wrap",[69,144875,94],{"class":86},[69,144877,79831],{"class":90},[69,144879,130],{"class":86},[69,144881,144882],{"class":71,"line":470},[69,144883,142],{"class":86},[29,144885,1211],{},[29,144887,144888],{},".form-item .male-label {",[29,144890,144891],{},"   margin-right: 20px;",[29,144893,144894],{},"   display: inline-flex;",[29,144896,144897],{},"   align-items: center;",[29,144899,2332],{},[24,144901],{"style":26,"src":144902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[24,144904],{"style":26,"src":144905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[19,144907,144909],{"id":144908},"_2052-常见父项属性","20.5.2 常见父项属性",[37,144911,144912,144915,144918,144921,144924,144927,144930],{},[40,144913,144914],{},"flex-direction：设置主轴的方向",[40,144916,144917],{},"justify-content：设置主轴上的子元素排列方式",[40,144919,144920],{},"flex-wrap：设置子元素是否换行",[40,144922,144923],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[40,144925,144926],{},"align-items：设置侧轴上的子元素排列方式（单行）",[40,144928,144929],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[40,144931,144914],{},[24,144933],{"style":26,"src":144934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[24,144936],{"style":26,"src":144937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[37,144939,144940],{"start":79},[40,144941,144917],{},[24,144943],{"style":26,"src":144944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[29,144946,144947,144950],{},[66,144948,144949],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[29,144952,144953],{},"跟着主轴走",[37,144955,144956],{"start":106},[40,144957,144920],{},[24,144959],{"style":26,"src":144960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[29,144962,144963],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[37,144965,144966],{"start":116},[40,144967,144923],{},[24,144969],{"style":26,"src":144970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[29,144972,144973],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[29,144975,144976],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[37,144978,144979],{"start":133},[40,144980,144926],{},[24,144982],{"style":26,"src":144983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[29,144985,144986],{},"align-items与align-content之间的区别：",[29,144988,144989],{},"单找items，多找content",[24,144991],{"style":26,"src":144992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[37,144994,144995],{"start":139},[40,144996,144929],{},[24,144998],{"style":26,"src":144999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[19,145001,145003],{"id":145002},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[37,145005,145006],{},[40,145007,145008],{},[195,145009,145010],{},"flex 属性",[29,145012,145013],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[24,145015],{"style":26,"src":145016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[29,145018,145019],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[29,145021,145022],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[37,145024,145025],{"start":79},[40,145026,145027,15036,145030],{},[195,145028,145029],{},"align-self",[195,145031,145032],{},"控制子项自己在侧轴上的排列方式",[24,145034],{"style":26,"src":145035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[29,145037,145038],{},"单个子盒子在父盒子侧轴上的排列方式",[37,145040,145041],{"start":106},[40,145042,145043,145045],{},[195,145044,96518],{}," 属性定义项目的排列顺序",[24,145047],{"style":26,"src":145048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[19,145050,145052],{"id":145051},"_2054-背景线性渐变","20.5.4 背景线性渐变",[24,145054],{"style":26,"src":145055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[29,145057,145058],{},"必须要添加浏览器的私有前缀",[19,145060,145062],{"id":145061},"_2055-携程网首页案例","20.5.5 携程网首页案例",[29,145064,145065],{},"学到最重要的知识：",[29,145067,145068],{},"flex处理这样的布局思路",[24,145070],{"style":26,"src":145071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[59,145073,145075],{"className":61,"code":145074,"language":63,"meta":64,"style":64},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[66,145076,145077,145083,145093,145103,145113],{"__ignoreMap":64},[69,145078,145079,145081],{"class":71,"line":72},[69,145080,144822],{"class":109},[69,145082,113],{"class":86},[69,145084,145085,145087,145089,145091],{"class":71,"line":79},[69,145086,129381],{"class":90},[69,145088,94],{"class":86},[69,145090,52709],{"class":90},[69,145092,130],{"class":86},[69,145094,145095,145097,145099,145101],{"class":71,"line":106},[69,145096,144851],{"class":90},[69,145098,94],{"class":86},[69,145100,52823],{"class":90},[69,145102,130],{"class":86},[69,145104,145105,145107,145109,145111],{"class":71,"line":116},[69,145106,144862],{"class":90},[69,145108,94],{"class":86},[69,145110,52823],{"class":90},[69,145112,130],{"class":86},[69,145114,145115],{"class":71,"line":133},[69,145116,142],{"class":86},[29,145118,145119],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[29,145121,145122],{},"使用属性选择器",[24,145124],{"style":26,"src":145125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[29,145127,1181],{},[59,145129,145131],{"className":997,"code":145130,"language":999,"meta":64,"style":64},"\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",[66,145132,145133,145138,145152,145157,145177,145182,145201,145206,145225,145230,145249],{"__ignoreMap":64},[69,145134,145135],{"class":71,"line":72},[69,145136,145137],{"class":75},"\u003C!-- 携程网移动端案例结构 -->\n",[69,145139,145140,145142,145144,145146,145148,145150],{"class":71,"line":79},[69,145141,1011],{"class":86},[69,145143,442],{"class":348},[69,145145,1016],{"class":109},[69,145147,1019],{"class":86},[69,145149,93544],{"class":1022},[69,145151,1026],{"class":86},[69,145153,145154],{"class":71,"line":106},[69,145155,145156],{"class":75},"  \u003C!-- 搜索栏 -->\n",[69,145158,145159,145161,145163,145165,145167,145170,145173,145175],{"class":71,"line":116},[69,145160,53372],{"class":86},[69,145162,442],{"class":348},[69,145164,1016],{"class":109},[69,145166,1019],{"class":86},[69,145168,145169],{"class":1022},"\"search-index\"",[69,145171,145172],{"class":86},">...\u003C\u002F",[69,145174,442],{"class":348},[69,145176,1026],{"class":86},[69,145178,145179],{"class":71,"line":133},[69,145180,145181],{"class":75},"  \u003C!-- 焦点图 -->\n",[69,145183,145184,145186,145188,145190,145192,145195,145197,145199],{"class":71,"line":139},[69,145185,53372],{"class":86},[69,145187,442],{"class":348},[69,145189,1016],{"class":109},[69,145191,1019],{"class":86},[69,145193,145194],{"class":1022},"\"focus\"",[69,145196,145172],{"class":86},[69,145198,442],{"class":348},[69,145200,1026],{"class":86},[69,145202,145203],{"class":71,"line":401},[69,145204,145205],{"class":75},"  \u003C!-- 主导航 -->\n",[69,145207,145208,145210,145212,145214,145216,145219,145221,145223],{"class":71,"line":470},[69,145209,53372],{"class":86},[69,145211,442],{"class":348},[69,145213,1016],{"class":109},[69,145215,1019],{"class":86},[69,145217,145218],{"class":1022},"\"local-nav\"",[69,145220,145172],{"class":86},[69,145222,442],{"class":348},[69,145224,1026],{"class":86},[69,145226,145227],{"class":71,"line":475},[69,145228,145229],{"class":75},"  \u003C!-- 子导航 -->\n",[69,145231,145232,145234,145236,145238,145240,145243,145245,145247],{"class":71,"line":482},[69,145233,53372],{"class":86},[69,145235,442],{"class":348},[69,145237,1016],{"class":109},[69,145239,1019],{"class":86},[69,145241,145242],{"class":1022},"\"nav-common\"",[69,145244,145172],{"class":86},[69,145246,442],{"class":348},[69,145248,1026],{"class":86},[69,145250,145251,145253,145255],{"class":71,"line":497},[69,145252,1036],{"class":86},[69,145254,442],{"class":348},[69,145256,1026],{"class":86},[29,145258,1211],{},[59,145260,145261],{"className":61,"code":138208,"language":63,"meta":64,"style":64},[66,145262,145263,145277,145293],{"__ignoreMap":64},[69,145264,145265,145267,145269,145271,145273,145275],{"class":71,"line":72},[69,145266,55048],{"class":348},[69,145268,2277],{"class":86},[69,145270,104328],{"class":109},[69,145272,1019],{"class":82},[69,145274,63925],{"class":1022},[69,145276,138225],{"class":86},[69,145278,145279,145281,145283,145285,145287,145289,145291],{"class":71,"line":79},[69,145280,72118],{"class":90},[69,145282,94],{"class":86},[69,145284,1609],{"class":90},[69,145286,100],{"class":82},[69,145288,52752],{"class":90},[69,145290,131345],{"class":90},[69,145292,130],{"class":86},[69,145294,145295],{"class":71,"line":106},[69,145296,142],{"class":86},[29,145298,145299],{},"总代码和效果展示：",[24,145301],{"style":26,"src":145302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[29,145304,1181],{},[59,145306,145307],{"className":997,"code":145130,"language":999,"meta":64,"style":64},[66,145308,145309,145313,145327,145331,145349,145353,145371,145375,145393,145397,145415],{"__ignoreMap":64},[69,145310,145311],{"class":71,"line":72},[69,145312,145137],{"class":75},[69,145314,145315,145317,145319,145321,145323,145325],{"class":71,"line":79},[69,145316,1011],{"class":86},[69,145318,442],{"class":348},[69,145320,1016],{"class":109},[69,145322,1019],{"class":86},[69,145324,93544],{"class":1022},[69,145326,1026],{"class":86},[69,145328,145329],{"class":71,"line":106},[69,145330,145156],{"class":75},[69,145332,145333,145335,145337,145339,145341,145343,145345,145347],{"class":71,"line":116},[69,145334,53372],{"class":86},[69,145336,442],{"class":348},[69,145338,1016],{"class":109},[69,145340,1019],{"class":86},[69,145342,145169],{"class":1022},[69,145344,145172],{"class":86},[69,145346,442],{"class":348},[69,145348,1026],{"class":86},[69,145350,145351],{"class":71,"line":133},[69,145352,145181],{"class":75},[69,145354,145355,145357,145359,145361,145363,145365,145367,145369],{"class":71,"line":139},[69,145356,53372],{"class":86},[69,145358,442],{"class":348},[69,145360,1016],{"class":109},[69,145362,1019],{"class":86},[69,145364,145194],{"class":1022},[69,145366,145172],{"class":86},[69,145368,442],{"class":348},[69,145370,1026],{"class":86},[69,145372,145373],{"class":71,"line":401},[69,145374,145205],{"class":75},[69,145376,145377,145379,145381,145383,145385,145387,145389,145391],{"class":71,"line":470},[69,145378,53372],{"class":86},[69,145380,442],{"class":348},[69,145382,1016],{"class":109},[69,145384,1019],{"class":86},[69,145386,145218],{"class":1022},[69,145388,145172],{"class":86},[69,145390,442],{"class":348},[69,145392,1026],{"class":86},[69,145394,145395],{"class":71,"line":475},[69,145396,145229],{"class":75},[69,145398,145399,145401,145403,145405,145407,145409,145411,145413],{"class":71,"line":482},[69,145400,53372],{"class":86},[69,145402,442],{"class":348},[69,145404,1016],{"class":109},[69,145406,1019],{"class":86},[69,145408,145242],{"class":1022},[69,145410,145172],{"class":86},[69,145412,442],{"class":348},[69,145414,1026],{"class":86},[69,145416,145417,145419,145421],{"class":71,"line":497},[69,145418,1036],{"class":86},[69,145420,442],{"class":348},[69,145422,1026],{"class":86},[29,145424,1211],{},[59,145426,145427],{"className":997,"code":998,"language":999,"meta":64,"style":64},[66,145428,145429,145433,145447,145451],{"__ignoreMap":64},[69,145430,145431],{"class":71,"line":72},[69,145432,1006],{"class":75},[69,145434,145435,145437,145439,145441,145443,145445],{"class":71,"line":79},[69,145436,1011],{"class":86},[69,145438,442],{"class":348},[69,145440,1016],{"class":109},[69,145442,1019],{"class":86},[69,145444,1023],{"class":1022},[69,145446,1026],{"class":86},[69,145448,145449],{"class":71,"line":106},[69,145450,1031],{"class":86},[69,145452,145453,145455,145457],{"class":71,"line":116},[69,145454,1036],{"class":86},[69,145456,442],{"class":348},[69,145458,1026],{"class":86},[1297,145460,139157],{},{"title":64,"searchDepth":79,"depth":79,"links":145462},[145463,145464,145468,145469,145470],{"id":144607,"depth":79,"text":144608},{"id":144639,"depth":79,"text":144640,"children":145465},[145466,145467],{"id":144643,"depth":106,"text":144644},{"id":144660,"depth":106,"text":144661},{"id":144679,"depth":79,"text":144680},{"id":144686,"depth":79,"text":144687},{"id":144773,"depth":79,"text":144774,"children":145471},[145472,145473,145474,145475,145476],{"id":144780,"depth":106,"text":144781},{"id":144908,"depth":106,"text":144909},{"id":145002,"depth":106,"text":145003},{"id":145051,"depth":106,"text":145052},{"id":145061,"depth":106,"text":145062},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144599,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":4,"title":5,"body":145483,"description":1322,"extension":1323,"meta":146488,"navigation":1325,"path":1326,"seo":146489,"stem":1328,"__hash__":1329},{"type":7,"value":145484,"toc":146466},[145485,145487,145489,145491,145493,145495,145497,145501,145503,145505,145507,145509,145511,145561,145563,145567,145569,145571,145573,145581,145583,145585,145587,145592,145596,145598,145600,145605,145607,145609,145611,145617,145619,145621,145627,145629,145635,145637,145639,145645,145647,145649,145651,145663,145665,145667,145669,145671,145673,145675,145677,145679,145681,145683,145685,145687,145689,145691,145747,145749,145857,145861,145866,145868,145870,145872,145874,145876,145880,145882,145887,145889,145893,145897,145899,145901,145903,145905,145907,145909,145911,145913,145969,145971,145997,145999,146001,146003,146005,146011,146013,146015,146017,146073,146075,146077,146081,146090,146092,146096,146098,146100,146104,146106,146108,146110,146112,146114,146116,146118,146120,146144,146148,146150,146152,146154,146156,146158,146160,146164,146166,146168,146170,146176,146178,146184,146186,146188,146190,146214,146216,146218,146220,146222,146224,146226,146228,146230,146264,146266,146268,146302,146308,146310,146312,146314,146316,146318,146320,146326,146328,146330,146332,146334,146340,146342,146344,146350,146352,146354,146356,146358,146360,146362,146364,146366,146368,146370,146372,146374,146398,146400,146424,146426,146434,146436,146438,146440,146442,146444,146446,146448,146450,146452,146454,146456,146458,146460,146462,146464],[10,145486,5],{"id":12},[14,145488,17],{"id":16},[19,145490,22],{"id":21},[24,145492],{"style":26,"src":27},[29,145494,31],{},[19,145496,35],{"id":34},[37,145498,145499],{},[40,145500,42],{},[24,145502],{"style":26,"src":45},[24,145504],{"style":26,"src":48},[24,145506],{"style":26,"src":51},[24,145508],{"style":26,"src":54},[24,145510],{"style":26,"src":57},[59,145512,145513],{"className":61,"code":62,"language":63,"meta":64,"style":64},[66,145514,145515,145519,145535,145541,145553,145557],{"__ignoreMap":64},[69,145516,145517],{"class":71,"line":72},[69,145518,76],{"class":75},[69,145520,145521,145523,145525,145527,145529,145531,145533],{"class":71,"line":79},[69,145522,83],{"class":82},[69,145524,87],{"class":86},[69,145526,91],{"class":90},[69,145528,94],{"class":86},[69,145530,97],{"class":90},[69,145532,100],{"class":82},[69,145534,103],{"class":86},[69,145536,145537,145539],{"class":71,"line":106},[69,145538,110],{"class":109},[69,145540,113],{"class":86},[69,145542,145543,145545,145547,145549,145551],{"class":71,"line":116},[69,145544,119],{"class":90},[69,145546,94],{"class":86},[69,145548,124],{"class":90},[69,145550,127],{"class":82},[69,145552,130],{"class":86},[69,145554,145555],{"class":71,"line":133},[69,145556,136],{"class":86},[69,145558,145559],{"class":71,"line":139},[69,145560,142],{"class":86},[29,145562,145],{},[37,145564,145565],{"start":79},[40,145566,150],{},[24,145568],{"style":26,"src":153},[29,145570,156],{},[19,145572,160],{"id":159},[162,145574,145575,145577,145579],{},[40,145576,166],{},[40,145578,169],{},[40,145580,172],{},[14,145582,176],{"id":175},[29,145584,179],{},[29,145586,182],{},[29,145588,185,145589],{},[187,145590,189],{"href":189,"rel":145591},[191],[29,145593,145594],{},[195,145595,197],{},[19,145597,201],{"id":200},[29,145599,204],{},[29,145601,145602],{},[187,145603,209],{"href":209,"rel":145604},[191],[24,145606],{"style":26,"src":213},[19,145608,217],{"id":216},[29,145610,220],{},[37,145612,145613],{},[40,145614,145615],{},[195,145616,227],{},[24,145618],{"style":26,"src":230},[24,145620],{"style":26,"src":233},[37,145622,145623],{"start":79},[40,145624,145625],{},[195,145626,240],{},[24,145628],{"style":26,"src":243},[37,145630,145631],{"start":106},[40,145632,145633],{},[195,145634,250],{},[24,145636],{"style":26,"src":253},[24,145638],{"style":26,"src":256},[37,145640,145641],{"start":116},[40,145642,145643],{},[195,145644,263],{},[24,145646],{"style":26,"src":266},[29,145648,269],{},[29,145650,272],{},[162,145652,145653,145655,145657,145659,145661],{},[40,145654,277],{},[40,145656,280],{},[40,145658,283],{},[40,145660,286],{},[40,145662,289],{},[14,145664,293],{"id":292},[29,145666,296],{},[29,145668,299],{},[24,145670],{"style":26,"src":302},[19,145672,306],{"id":305},[29,145674,309],{},[24,145676],{"style":26,"src":312},[29,145678,315],{},[29,145680,318],{},[24,145682],{"style":26,"src":321},[29,145684,324],{},[29,145686,327],{},[24,145688],{"style":26,"src":330},[29,145690,333],{},[59,145692,145693],{"className":61,"code":336,"language":63,"meta":64,"style":64},[66,145694,145695,145699,145705,145719,145723,145729,145743],{"__ignoreMap":64},[69,145696,145697],{"class":71,"line":72},[69,145698,343],{"class":75},[69,145700,145701,145703],{"class":71,"line":79},[69,145702,349],{"class":348},[69,145704,113],{"class":86},[69,145706,145707,145709,145711,145713,145715,145717],{"class":71,"line":106},[69,145708,356],{"class":90},[69,145710,94],{"class":86},[69,145712,361],{"class":90},[69,145714,127],{"class":82},[69,145716,366],{"class":86},[69,145718,369],{"class":75},[69,145720,145721],{"class":71,"line":116},[69,145722,142],{"class":86},[69,145724,145725,145727],{"class":71,"line":133},[69,145726,378],{"class":109},[69,145728,113],{"class":86},[69,145730,145731,145733,145735,145737,145739,145741],{"class":71,"line":139},[69,145732,385],{"class":90},[69,145734,94],{"class":86},[69,145736,390],{"class":90},[69,145738,393],{"class":82},[69,145740,366],{"class":86},[69,145742,398],{"class":75},[69,145744,145745],{"class":71,"line":401},[69,145746,142],{"class":86},[29,145748,406],{},[59,145750,145751],{"className":61,"code":409,"language":63,"meta":64,"style":64},[66,145752,145753,145759,145773,145777,145783,145797,145801,145805,145809,145815,145829,145833,145839,145853],{"__ignoreMap":64},[69,145754,145755,145757],{"class":71,"line":72},[69,145756,349],{"class":348},[69,145758,113],{"class":86},[69,145760,145761,145763,145765,145767,145769,145771],{"class":71,"line":79},[69,145762,356],{"class":90},[69,145764,94],{"class":86},[69,145766,361],{"class":90},[69,145768,127],{"class":82},[69,145770,430],{"class":86},[69,145772,433],{"class":75},[69,145774,145775],{"class":71,"line":106},[69,145776,142],{"class":86},[69,145778,145779,145781],{"class":71,"line":116},[69,145780,442],{"class":348},[69,145782,113],{"class":86},[69,145784,145785,145787,145789,145791,145793,145795],{"class":71,"line":133},[69,145786,385],{"class":90},[69,145788,94],{"class":86},[69,145790,390],{"class":90},[69,145792,393],{"class":82},[69,145794,430],{"class":86},[69,145796,398],{"class":75},[69,145798,145799],{"class":71,"line":139},[69,145800,142],{"class":86},[69,145802,145803],{"class":71,"line":401},[69,145804,467],{"class":86},[69,145806,145807],{"class":71,"line":470},[69,145808,343],{"class":75},[69,145810,145811,145813],{"class":71,"line":475},[69,145812,349],{"class":348},[69,145814,113],{"class":86},[69,145816,145817,145819,145821,145823,145825,145827],{"class":71,"line":482},[69,145818,356],{"class":90},[69,145820,94],{"class":86},[69,145822,361],{"class":90},[69,145824,127],{"class":82},[69,145826,366],{"class":86},[69,145828,369],{"class":75},[69,145830,145831],{"class":71,"line":497},[69,145832,142],{"class":86},[69,145834,145835,145837],{"class":71,"line":502},[69,145836,378],{"class":109},[69,145838,113],{"class":86},[69,145840,145841,145843,145845,145847,145849,145851],{"class":71,"line":509},[69,145842,385],{"class":90},[69,145844,94],{"class":86},[69,145846,390],{"class":90},[69,145848,393],{"class":82},[69,145850,366],{"class":86},[69,145852,398],{"class":75},[69,145854,145855],{"class":71,"line":524},[69,145856,142],{"class":86},[29,145858,529,145859,534],{},[531,145860,533],{},[59,145862,145864],{"className":145863,"code":539,"language":540},[538],[66,145865,539],{"__ignoreMap":64},[29,145867,545],{},[29,145869,548],{},[19,145871,552],{"id":551},[24,145873],{"style":26,"src":555},[19,145875,559],{"id":558},[37,145877,145878],{},[40,145879,564],{},[24,145881],{"style":26,"src":567},[29,145883,570,145884],{},[187,145885,573],{"href":573,"rel":145886},[191],[29,145888,577],{},[29,145890,580,145891],{},[66,145892,583],{},[37,145894,145895],{"start":79},[40,145896,588],{},[24,145898],{"style":26,"src":591},[29,145900,594],{},[29,145902,597],{},[24,145904],{"style":26,"src":600},[29,145906,603],{},[24,145908],{"style":26,"src":606},[29,145910,609],{},[29,145912,612],{},[59,145914,145915],{"className":61,"code":336,"language":63,"meta":64,"style":64},[66,145916,145917,145921,145927,145941,145945,145951,145965],{"__ignoreMap":64},[69,145918,145919],{"class":71,"line":72},[69,145920,343],{"class":75},[69,145922,145923,145925],{"class":71,"line":79},[69,145924,349],{"class":348},[69,145926,113],{"class":86},[69,145928,145929,145931,145933,145935,145937,145939],{"class":71,"line":106},[69,145930,356],{"class":90},[69,145932,94],{"class":86},[69,145934,361],{"class":90},[69,145936,127],{"class":82},[69,145938,366],{"class":86},[69,145940,369],{"class":75},[69,145942,145943],{"class":71,"line":116},[69,145944,142],{"class":86},[69,145946,145947,145949],{"class":71,"line":133},[69,145948,378],{"class":109},[69,145950,113],{"class":86},[69,145952,145953,145955,145957,145959,145961,145963],{"class":71,"line":139},[69,145954,385],{"class":90},[69,145956,94],{"class":86},[69,145958,390],{"class":90},[69,145960,393],{"class":82},[69,145962,366],{"class":86},[69,145964,398],{"class":75},[69,145966,145967],{"class":71,"line":401},[69,145968,142],{"class":86},[29,145970,333],{},[59,145972,145973],{"className":61,"code":673,"language":63,"meta":64,"style":64},[66,145974,145975,145981,145993],{"__ignoreMap":64},[69,145976,145977,145979],{"class":71,"line":72},[69,145978,680],{"class":348},[69,145980,113],{"class":86},[69,145982,145983,145985,145987,145989,145991],{"class":71,"line":79},[69,145984,356],{"class":90},[69,145986,94],{"class":86},[69,145988,691],{"class":90},[69,145990,100],{"class":82},[69,145992,130],{"class":86},[69,145994,145995],{"class":71,"line":106},[69,145996,142],{"class":86},[14,145998,703],{"id":702},[29,146000,706],{},[24,146002],{"style":26,"src":709},[29,146004,712],{},[162,146006,146007,146009],{},[40,146008,717],{},[40,146010,720],{},[24,146012],{"style":26,"src":723},[29,146014,726],{},[19,146016,730],{"id":729},[59,146018,146019],{"className":61,"code":336,"language":63,"meta":64,"style":64},[66,146020,146021,146025,146031,146045,146049,146055,146069],{"__ignoreMap":64},[69,146022,146023],{"class":71,"line":72},[69,146024,343],{"class":75},[69,146026,146027,146029],{"class":71,"line":79},[69,146028,349],{"class":348},[69,146030,113],{"class":86},[69,146032,146033,146035,146037,146039,146041,146043],{"class":71,"line":106},[69,146034,356],{"class":90},[69,146036,94],{"class":86},[69,146038,361],{"class":90},[69,146040,127],{"class":82},[69,146042,366],{"class":86},[69,146044,369],{"class":75},[69,146046,146047],{"class":71,"line":116},[69,146048,142],{"class":86},[69,146050,146051,146053],{"class":71,"line":133},[69,146052,378],{"class":109},[69,146054,113],{"class":86},[69,146056,146057,146059,146061,146063,146065,146067],{"class":71,"line":139},[69,146058,385],{"class":90},[69,146060,94],{"class":86},[69,146062,390],{"class":90},[69,146064,393],{"class":82},[69,146066,366],{"class":86},[69,146068,398],{"class":75},[69,146070,146071],{"class":71,"line":401},[69,146072,142],{"class":86},[29,146074,789],{},[19,146076,793],{"id":792},[29,146078,796,146079],{},[195,146080,799],{},[162,146082,146083],{},[40,146084,804,146085],{},[195,146086,146087],{},[187,146088,809],{"href":809,"rel":146089},[191],[29,146091,813],{},[37,146093,146094],{},[40,146095,818],{},[29,146097,821],{},[29,146099,824],{},[29,146101,146102,830],{},[195,146103,829],{},[24,146105],{"style":26,"src":833},[29,146107,836],{},[24,146109],{"style":26,"src":839},[24,146111],{"style":26,"src":842},[29,146113,845],{},[29,146115,848],{},[29,146117,851],{},[24,146119],{"style":26,"src":854},[59,146121,146122],{"className":61,"code":857,"language":63,"meta":64,"style":64},[66,146123,146124,146130,146140],{"__ignoreMap":64},[69,146125,146126,146128],{"class":71,"line":72},[69,146127,864],{"class":109},[69,146129,113],{"class":86},[69,146131,146132,146134,146136,146138],{"class":71,"line":79},[69,146133,871],{"class":90},[69,146135,94],{"class":86},[69,146137,876],{"class":90},[69,146139,130],{"class":86},[69,146141,146142],{"class":71,"line":106},[69,146143,142],{"class":86},[29,146145,146146,888],{},[66,146147,887],{},[24,146149],{"style":26,"src":891},[24,146151],{"style":26,"src":894},[24,146153],{"style":26,"src":897},[29,146155,900],{},[24,146157],{"style":26,"src":903},[29,146159,906],{},[37,146161,146162],{"start":79},[40,146163,911],{},[24,146165],{"style":26,"src":914},[29,146167,917],{},[29,146169,920],{},[37,146171,146172],{"start":106},[40,146173,925,146174],{},[195,146175,928],{},[24,146177],{"style":26,"src":931},[37,146179,146180],{"start":116},[40,146181,146182],{},[195,146183,938],{},[24,146185],{"style":26,"src":941},[29,146187,944],{},[29,146189,327],{},[59,146191,146192],{"className":61,"code":857,"language":63,"meta":64,"style":64},[66,146193,146194,146200,146210],{"__ignoreMap":64},[69,146195,146196,146198],{"class":71,"line":72},[69,146197,864],{"class":109},[69,146199,113],{"class":86},[69,146201,146202,146204,146206,146208],{"class":71,"line":79},[69,146203,871],{"class":90},[69,146205,94],{"class":86},[69,146207,876],{"class":90},[69,146209,130],{"class":86},[69,146211,146212],{"class":71,"line":106},[69,146213,142],{"class":86},[29,146215,973],{},[24,146217],{"style":26,"src":976},[29,146219,979],{},[29,146221,982],{},[29,146223,985],{},[29,146225,988],{},[29,146227,991],{},[29,146229,994],{},[59,146231,146232],{"className":997,"code":998,"language":999,"meta":64,"style":64},[66,146233,146234,146238,146252,146256],{"__ignoreMap":64},[69,146235,146236],{"class":71,"line":72},[69,146237,1006],{"class":75},[69,146239,146240,146242,146244,146246,146248,146250],{"class":71,"line":79},[69,146241,1011],{"class":86},[69,146243,442],{"class":348},[69,146245,1016],{"class":109},[69,146247,1019],{"class":86},[69,146249,1023],{"class":1022},[69,146251,1026],{"class":86},[69,146253,146254],{"class":71,"line":106},[69,146255,1031],{"class":86},[69,146257,146258,146260,146262],{"class":71,"line":116},[69,146259,1036],{"class":86},[69,146261,442],{"class":348},[69,146263,1026],{"class":86},[24,146265],{"style":26,"src":1043},[29,146267,1046],{},[59,146269,146270],{"className":997,"code":998,"language":999,"meta":64,"style":64},[66,146271,146272,146276,146290,146294],{"__ignoreMap":64},[69,146273,146274],{"class":71,"line":72},[69,146275,1006],{"class":75},[69,146277,146278,146280,146282,146284,146286,146288],{"class":71,"line":79},[69,146279,1011],{"class":86},[69,146281,442],{"class":348},[69,146283,1016],{"class":109},[69,146285,1019],{"class":86},[69,146287,1023],{"class":1022},[69,146289,1026],{"class":86},[69,146291,146292],{"class":71,"line":106},[69,146293,1031],{"class":86},[69,146295,146296,146298,146300],{"class":71,"line":116},[69,146297,1036],{"class":86},[69,146299,442],{"class":348},[69,146301,1026],{"class":86},[37,146303,146304],{"start":133},[40,146305,146306],{},[195,146307,1087],{},[24,146309],{"style":26,"src":1090},[29,146311,1093],{},[29,146313,1096],{},[24,146315],{"style":26,"src":1099},[29,146317,1102],{},[24,146319],{"style":26,"src":1105},[37,146321,146322],{"start":139},[40,146323,146324],{},[195,146325,1112],{},[24,146327],{"style":26,"src":1115},[29,146329,1118],{},[29,146331,1121],{},[29,146333,1124],{},[37,146335,146336],{"start":401},[40,146337,146338],{},[195,146339,1131],{},[24,146341],{"style":26,"src":1134},[29,146343,1137],{},[37,146345,146346],{"start":470},[40,146347,146348],{},[195,146349,1144],{},[24,146351],{"style":26,"src":1147},[29,146353,1150],{},[19,146355,1154],{"id":1153},[29,146357,1157],{},[29,146359,1160],{},[29,146361,1163],{},[29,146363,1166],{},[29,146365,1169],{},[24,146367],{"style":26,"src":1172},[24,146369],{"style":26,"src":1175},[29,146371,1178],{},[29,146373,1181],{},[59,146375,146376],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,146377,146378,146384,146394],{"__ignoreMap":64},[69,146379,146380,146382],{"class":71,"line":72},[69,146381,378],{"class":109},[69,146383,113],{"class":86},[69,146385,146386,146388,146390,146392],{"class":71,"line":79},[69,146387,1197],{"class":90},[69,146389,94],{"class":86},[69,146391,1202],{"class":90},[69,146393,130],{"class":86},[69,146395,146396],{"class":71,"line":106},[69,146397,142],{"class":86},[29,146399,1211],{},[59,146401,146402],{"className":61,"code":1184,"language":63,"meta":64,"style":64},[66,146403,146404,146410,146420],{"__ignoreMap":64},[69,146405,146406,146408],{"class":71,"line":72},[69,146407,378],{"class":109},[69,146409,113],{"class":86},[69,146411,146412,146414,146416,146418],{"class":71,"line":79},[69,146413,1197],{"class":90},[69,146415,94],{"class":86},[69,146417,1202],{"class":90},[69,146419,130],{"class":86},[69,146421,146422],{"class":71,"line":106},[69,146423,142],{"class":86},[14,146425,1239],{"id":1238},[162,146427,146428,146430,146432],{},[40,146429,1244],{},[40,146431,1247],{},[40,146433,1250],{},[24,146435],{"style":26,"src":1253},[29,146437,1256],{},[24,146439],{"style":26,"src":1259},[29,146441,1262],{},[29,146443,1265],{},[24,146445],{"style":26,"src":1268},[29,146447,1271],{},[24,146449],{"style":26,"src":1274},[29,146451,1277],{},[24,146453],{"style":26,"src":1280},[29,146455,1283],{},[29,146457,1286],{},[24,146459],{"style":26,"src":1289},[29,146461,1292],{},[29,146463,1295],{},[1297,146465,1299],{},{"title":64,"searchDepth":79,"depth":79,"links":146467},[146468,146473,146477,146482,146487],{"id":16,"depth":79,"text":17,"children":146469},[146470,146471,146472],{"id":21,"depth":106,"text":22},{"id":34,"depth":106,"text":35},{"id":159,"depth":106,"text":160},{"id":175,"depth":79,"text":176,"children":146474},[146475,146476],{"id":200,"depth":106,"text":201},{"id":216,"depth":106,"text":217},{"id":292,"depth":79,"text":293,"children":146478},[146479,146480,146481],{"id":305,"depth":106,"text":306},{"id":551,"depth":106,"text":552},{"id":558,"depth":106,"text":559},{"id":702,"depth":79,"text":703,"children":146483},[146484,146485,146486],{"id":729,"depth":106,"text":730},{"id":792,"depth":106,"text":793},{"id":1153,"depth":106,"text":1154},{"id":1238,"depth":79,"text":1239},{},{"title":5,"description":1322},{"id":146491,"title":146492,"body":146493,"description":1322,"extension":1323,"meta":146713,"navigation":1325,"path":146714,"seo":146715,"stem":146716,"__hash__":146717},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146494,"toc":146709},[146495,146498,146502,146505,146520,146525,146528,146533,146568,146573,146585,146590,146603,146608,146625,146630,146650,146655,146673,146676,146679,146682,146685,146689,146692,146695,146698,146701,146704,146707],[10,146496,146492],{"id":146497},"_22-代码提交与新型相对单位",[14,146499,146501],{"id":146500},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[29,146503,146504],{},"法1：",[37,146506,146507,146514,146517],{},[40,146508,146509,146510],{},"登录网站注册：",[187,146511,146512],{"href":146512,"rel":146513},"https:\u002F\u002Fgitee.com\u002F",[191],[40,146515,146516],{},"码云创建新的仓库",[40,146518,146519],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[162,146521,146522],{},[40,146523,146524],{},"在网站根目录右键-- Git Bash Here",[24,146526],{"style":26,"src":146527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[162,146529,146530],{},[40,146531,146532],{},"如果是第一次利用git提交，请配置好全局选项",[59,146534,146536],{"className":118517,"code":146535,"language":118519,"meta":64,"style":64},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[66,146537,146538,146554],{"__ignoreMap":64},[69,146539,146540,146543,146545,146548,146551],{"class":71,"line":72},[69,146541,146542],{"class":109},"git",[69,146544,120940],{"class":1022},[69,146546,146547],{"class":90}," --global",[69,146549,146550],{"class":1022}," user.name",[69,146552,146553],{"class":1022}," \"你的名字\"\n",[69,146555,146556,146558,146560,146562,146565],{"class":71,"line":79},[69,146557,146542],{"class":109},[69,146559,120940],{"class":1022},[69,146561,146547],{"class":90},[69,146563,146564],{"class":1022}," user.email",[69,146566,146567],{"class":1022}," \"你的邮箱\"\n",[162,146569,146570],{},[40,146571,146572],{},"初始化仓库",[59,146574,146576],{"className":118517,"code":146575,"language":118519,"meta":64,"style":64},"git init\n",[66,146577,146578],{"__ignoreMap":64},[69,146579,146580,146582],{"class":71,"line":72},[69,146581,146542],{"class":109},[69,146583,146584],{"class":1022}," init\n",[162,146586,146587],{},[40,146588,146589],{},"把本地文件放到暂存区",[59,146591,146593],{"className":118517,"code":146592,"language":118519,"meta":64,"style":64},"git add .\n",[66,146594,146595],{"__ignoreMap":64},[69,146596,146597,146599,146601],{"class":71,"line":72},[69,146598,146542],{"class":109},[69,146600,6451],{"class":1022},[69,146602,29977],{"class":1022},[162,146604,146605],{},[40,146606,146607],{},"把本地文件放到本地仓库里面",[59,146609,146611],{"className":118517,"code":146610,"language":118519,"meta":64,"style":64},"git commit -m \"first commit\"\n",[66,146612,146613],{"__ignoreMap":64},[69,146614,146615,146617,146620,146622],{"class":71,"line":72},[69,146616,146542],{"class":109},[69,146618,146619],{"class":1022}," commit",[69,146621,102103],{"class":90},[69,146623,146624],{"class":1022}," \"first commit\"\n",[162,146626,146627],{},[40,146628,146629],{},"链接远程仓库",[59,146631,146633],{"className":118517,"code":146632,"language":118519,"meta":64,"style":64},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[66,146634,146635],{"__ignoreMap":64},[69,146636,146637,146639,146642,146644,146647],{"class":71,"line":72},[69,146638,146542],{"class":109},[69,146640,146641],{"class":1022}," remote",[69,146643,6451],{"class":1022},[69,146645,146646],{"class":1022}," origin",[69,146648,146649],{"class":1022}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[162,146651,146652],{},[40,146653,146654],{},"把本地仓库的文件推送到远程仓库 push",[59,146656,146658],{"className":118517,"code":146657,"language":118519,"meta":64,"style":64},"git push -u origin master\n",[66,146659,146660],{"__ignoreMap":64},[69,146661,146662,146664,146666,146668,146670],{"class":71,"line":72},[69,146663,146542],{"class":109},[69,146665,30252],{"class":1022},[69,146667,29526],{"class":90},[69,146669,146646],{"class":1022},[69,146671,146672],{"class":1022}," master\n",[24,146674],{"style":26,"src":146675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[29,146677,146678],{},"上方方法暂未实现，后边学完git后在整",[29,146680,146681],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[24,146683],{"style":26,"src":146684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146686,146688],{"id":146687},"_222-新型相对单位","22.2 新型相对单位",[24,146690],{"style":26,"src":146691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[24,146693],{"style":26,"src":146694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[29,146696,146697],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[29,146699,146700],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[24,146702],{"style":26,"src":146703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[29,146705,146706],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1297,146708,25194],{},{"title":64,"searchDepth":79,"depth":79,"links":146710},[146711,146712],{"id":146500,"depth":79,"text":146501},{"id":146687,"depth":79,"text":146688},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146492,"description":1322},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146719,"title":146720,"body":146721,"description":146725,"extension":1323,"meta":146726,"navigation":1325,"path":146727,"seo":146728,"stem":146729,"__hash__":146730},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146722,"toc":146723},[],{"title":64,"searchDepth":79,"depth":79,"links":146724},[],"自己正经开始学编程的第一门语言！",{"category":94060},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146720,"description":146725},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146732,"title":146733,"body":146734,"description":1322,"extension":1323,"meta":147881,"navigation":1325,"path":147882,"seo":147883,"stem":147884,"__hash__":147885},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146735,"toc":147857},[146736,146739,146743,146746,146749,146774,146777,146783,146787,146790,146817,146820,146860,146863,146875,146878,146884,146888,146892,146919,146936,146943,146947,146950,146976,146979,146983,146986,147026,147029,147046,147052,147056,147061,147105,147108,147126,147129,147197,147201,147208,147211,147226,147229,147238,147241,147252,147255,147264,147267,147284,147287,147302,147306,147310,147313,147315,147335,147339,147342,147345,147356,147359,147365,147369,147375,147402,147405,147417,147420,147431,147434,147440,147444,147450,147500,147503,147545,147548,147581,147584,147618,147622,147625,147645,147648,147684,147687,147700,147704,147708,147714,147717,147730,147734,147737,147743,147746,147750,147753,147756,147805,147809,147825,147831,147838,147844,147854],[10,146737,146733],{"id":146738},"_1-python环境与第一个程序",[14,146740,146742],{"id":146741},"_11-什么是python","1.1 什么是Python",[29,146744,146745],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[29,146747,146748],{},"理解 Python 时抓住三个关键词：",[37,146750,146751,146754,146757],{},[40,146752,146753],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[40,146755,146756],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[40,146758,146759,146760,1604,146763,1604,146766,1604,146769,1604,146771,29621],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[66,146761,146762],{},"os",[66,146764,146765],{},"sys",[66,146767,146768],{},"json",[66,146770,59086],{},[66,146772,146773],{},"datetime",[29,146775,146776],{},"Python 程序的运行链路：",[59,146778,146781],{"className":146779,"code":146780,"language":540,"meta":64},[538],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[66,146782,146780],{"__ignoreMap":64},[14,146784,146786],{"id":146785},"_12-python解释器","1.2 Python解释器",[29,146788,146789],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[59,146791,146793],{"className":25059,"code":146792,"language":25061,"meta":64,"style":64},"python --version\npython3 --version\npython\npython3\n",[66,146794,146795,146801,146807,146812],{"__ignoreMap":64},[69,146796,146797,146799],{"class":71,"line":72},[69,146798,31616],{"class":109},[69,146800,27529],{"class":90},[69,146802,146803,146805],{"class":71,"line":79},[69,146804,102100],{"class":109},[69,146806,27529],{"class":90},[69,146808,146809],{"class":71,"line":106},[69,146810,146811],{"class":109},"python\n",[69,146813,146814],{"class":71,"line":116},[69,146815,146816],{"class":109},"python3\n",[29,146818,146819],{},"进入交互模式后，可以直接输入表达式：",[59,146821,146823],{"className":31614,"code":146822,"language":31616,"meta":64,"style":64},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[66,146824,146825,146836,146841,146855],{"__ignoreMap":64},[69,146826,146827,146830,146832,146834],{"class":71,"line":72},[69,146828,146829],{"class":82},">>>",[69,146831,26355],{"class":90},[69,146833,46802],{"class":82},[69,146835,48959],{"class":90},[69,146837,146838],{"class":71,"line":79},[69,146839,146840],{"class":90},"3\n",[69,146842,146843,146845,146848,146850,146853],{"class":71,"line":106},[69,146844,146829],{"class":82},[69,146846,146847],{"class":90}," print",[69,146849,1398],{"class":86},[69,146851,146852],{"class":1022},"\"hello python\"",[69,146854,1404],{"class":86},[69,146856,146857],{"class":71,"line":116},[69,146858,146859],{"class":86},"hello python\n",[29,146861,146862],{},"退出交互模式：",[59,146864,146866],{"className":31614,"code":146865,"language":31616,"meta":64,"style":64},"exit()\n",[66,146867,146868],{"__ignoreMap":64},[69,146869,146870,146873],{"class":71,"line":72},[69,146871,146872],{"class":90},"exit",[69,146874,3220],{"class":86},[29,146876,146877],{},"或使用快捷键：",[59,146879,146882],{"className":146880,"code":146881,"language":540,"meta":64},[538],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[66,146883,146881],{"__ignoreMap":64},[14,146885,146887],{"id":146886},"_13-安装python","1.3 安装Python",[19,146889,146891],{"id":146890},"_131-windows安装","1.3.1 Windows安装",[37,146893,146894,146901,146904,146910,146916],{},[40,146895,146896,146897],{},"打开 Python 官网：",[187,146898,146899],{"href":146899,"rel":146900},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[191],[40,146902,146903],{},"下载 Windows Installer。",[40,146905,146906,146907,29621],{},"安装时勾选 ",[66,146908,146909],{},"Add Python to PATH",[40,146911,146912,146913,29621],{},"点击 ",[66,146914,146915],{},"Install Now",[40,146917,146918],{},"安装完成后打开命令提示符验证：",[59,146920,146922],{"className":25059,"code":146921,"language":25061,"meta":64,"style":64},"python --version\npip --version\n",[66,146923,146924,146930],{"__ignoreMap":64},[69,146925,146926,146928],{"class":71,"line":72},[69,146927,31616],{"class":109},[69,146929,27529],{"class":90},[69,146931,146932,146934],{"class":71,"line":79},[69,146933,25068],{"class":109},[69,146935,27529],{"class":90},[29,146937,146938,146939,146942],{},"如果提示 ",[66,146940,146941],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[19,146944,146946],{"id":146945},"_132-macos安装","1.3.2 macOS安装",[29,146948,146949],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[59,146951,146953],{"className":25059,"code":146952,"language":25061,"meta":64,"style":64},"brew install python\npython3 --version\npip3 --version\n",[66,146954,146955,146964,146970],{"__ignoreMap":64},[69,146956,146957,146960,146962],{"class":71,"line":72},[69,146958,146959],{"class":109},"brew",[69,146961,25071],{"class":1022},[69,146963,125539],{"class":1022},[69,146965,146966,146968],{"class":71,"line":79},[69,146967,102100],{"class":109},[69,146969,27529],{"class":90},[69,146971,146972,146974],{"class":71,"line":106},[69,146973,120921],{"class":109},[69,146975,27529],{"class":90},[29,146977,146978],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[19,146980,146982],{"id":146981},"_133-linux安装","1.3.3 Linux安装",[29,146984,146985],{},"Ubuntu\u002FDebian：",[59,146987,146989],{"className":25059,"code":146988,"language":25061,"meta":64,"style":64},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[66,146990,146991,146999,147014,147020],{"__ignoreMap":64},[69,146992,146993,146995,146997],{"class":71,"line":72},[69,146994,25813],{"class":109},[69,146996,118538],{"class":1022},[69,146998,27478],{"class":1022},[69,147000,147001,147003,147005,147007,147009,147011],{"class":71,"line":79},[69,147002,25813],{"class":109},[69,147004,118538],{"class":1022},[69,147006,25071],{"class":1022},[69,147008,105624],{"class":1022},[69,147010,102019],{"class":1022},[69,147012,147013],{"class":1022}," python3-venv\n",[69,147015,147016,147018],{"class":71,"line":106},[69,147017,102100],{"class":109},[69,147019,27529],{"class":90},[69,147021,147022,147024],{"class":71,"line":116},[69,147023,120921],{"class":109},[69,147025,27529],{"class":90},[29,147027,147028],{},"Fedora：",[59,147030,147032],{"className":25059,"code":147031,"language":25061,"meta":64,"style":64},"sudo dnf install python3 python3-pip\n",[66,147033,147034],{"__ignoreMap":64},[69,147035,147036,147038,147040,147042,147044],{"class":71,"line":72},[69,147037,25813],{"class":109},[69,147039,27551],{"class":1022},[69,147041,25071],{"class":1022},[69,147043,105624],{"class":1022},[69,147045,120986],{"class":1022},[29,147047,147048,147049,147051],{},"Linux 上通常使用 ",[66,147050,102100],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147053,147055],{"id":147054},"_14-pip包管理器","1.4 pip包管理器",[29,147057,147058,147060],{},[66,147059,25068],{}," 用来安装第三方库。",[59,147062,147064],{"className":25059,"code":147063,"language":25061,"meta":64,"style":64},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[66,147065,147066,147075,147084,147092,147098],{"__ignoreMap":64},[69,147067,147068,147070,147072],{"class":71,"line":72},[69,147069,25068],{"class":109},[69,147071,25071],{"class":1022},[69,147073,147074],{"class":1022}," requests\n",[69,147076,147077,147079,147082],{"class":71,"line":79},[69,147078,25068],{"class":109},[69,147080,147081],{"class":1022}," uninstall",[69,147083,147074],{"class":1022},[69,147085,147086,147088,147090],{"class":71,"line":106},[69,147087,25068],{"class":109},[69,147089,118795],{"class":1022},[69,147091,147074],{"class":1022},[69,147093,147094,147096],{"class":71,"line":116},[69,147095,25068],{"class":109},[69,147097,120176],{"class":1022},[69,147099,147100,147102],{"class":71,"line":133},[69,147101,25068],{"class":109},[69,147103,147104],{"class":1022}," freeze\n",[29,147106,147107],{},"国内网络较慢时可以临时使用镜像：",[59,147109,147111],{"className":25059,"code":147110,"language":25061,"meta":64,"style":64},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[66,147112,147113],{"__ignoreMap":64},[69,147114,147115,147117,147119,147122,147124],{"class":71,"line":72},[69,147116,25068],{"class":109},[69,147118,25071],{"class":1022},[69,147120,147121],{"class":1022}," requests",[69,147123,27666],{"class":90},[69,147125,120949],{"class":1022},[29,147127,147128],{},"常见第三方库：",[1530,147130,147131,147140],{},[1533,147132,147133],{},[1536,147134,147135,147138],{},[1539,147136,147137],{},"库",[1539,147139,103917],{},[1576,147141,147142,147150,147157,147165,147173,147181,147189],{},[1536,147143,147144,147147],{},[1581,147145,147146],{},"requests",[1581,147148,147149],{},"网络请求",[1536,147151,147152,147154],{},[1581,147153,101847],{},[1581,147155,147156],{},"数值计算",[1536,147158,147159,147162],{},[1581,147160,147161],{},"pandas",[1581,147163,147164],{},"表格数据处理",[1536,147166,147167,147170],{},[1581,147168,147169],{},"matplotlib",[1581,147171,147172],{},"绘图",[1536,147174,147175,147178],{},[1581,147176,147177],{},"pyecharts",[1581,147179,147180],{},"ECharts 图表",[1536,147182,147183,147186],{},[1581,147184,147185],{},"flask",[1581,147187,147188],{},"Web 后端",[1536,147190,147191,147194],{},[1581,147192,147193],{},"pytest",[1581,147195,147196],{},"自动化测试",[14,147198,147200],{"id":147199},"_15-虚拟环境","1.5 虚拟环境",[29,147202,147203,147204,147207],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[66,147205,147206],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[29,147209,147210],{},"创建虚拟环境：",[59,147212,147214],{"className":25059,"code":147213,"language":25061,"meta":64,"style":64},"python -m venv .venv\n",[66,147215,147216],{"__ignoreMap":64},[69,147217,147218,147220,147222,147224],{"class":71,"line":72},[69,147219,31616],{"class":109},[69,147221,102103],{"class":90},[69,147223,102106],{"class":1022},[69,147225,102109],{"class":1022},[29,147227,147228],{},"Windows 激活：",[59,147230,147232],{"className":25059,"code":147231,"language":25061,"meta":64,"style":64},".venv\\Scripts\\activate\n",[66,147233,147234],{"__ignoreMap":64},[69,147235,147236],{"class":71,"line":72},[69,147237,147231],{"class":109},[29,147239,147240],{},"macOS\u002FLinux 激活：",[59,147242,147244],{"className":25059,"code":147243,"language":25061,"meta":64,"style":64},"source .venv\u002Fbin\u002Factivate\n",[66,147245,147246],{"__ignoreMap":64},[69,147247,147248,147250],{"class":71,"line":72},[69,147249,102114],{"class":90},[69,147251,102117],{"class":1022},[29,147253,147254],{},"退出虚拟环境：",[59,147256,147258],{"className":25059,"code":147257,"language":25061,"meta":64,"style":64},"deactivate\n",[66,147259,147260],{"__ignoreMap":64},[69,147261,147262],{"class":71,"line":72},[69,147263,147257],{"class":109},[29,147265,147266],{},"保存依赖：",[59,147268,147270],{"className":25059,"code":147269,"language":25061,"meta":64,"style":64},"pip freeze > requirements.txt\n",[66,147271,147272],{"__ignoreMap":64},[69,147273,147274,147276,147279,147281],{"class":71,"line":72},[69,147275,25068],{"class":109},[69,147277,147278],{"class":1022}," freeze",[69,147280,27458],{"class":82},[69,147282,147283],{"class":1022}," requirements.txt\n",[29,147285,147286],{},"安装依赖：",[59,147288,147290],{"className":25059,"code":147289,"language":25061,"meta":64,"style":64},"pip install -r requirements.txt\n",[66,147291,147292],{"__ignoreMap":64},[69,147293,147294,147296,147298,147300],{"class":71,"line":72},[69,147295,25068],{"class":109},[69,147297,25071],{"class":1022},[69,147299,120860],{"class":90},[69,147301,147283],{"class":1022},[14,147303,147305],{"id":147304},"_16-开发工具","1.6 开发工具",[19,147307,147309],{"id":147308},"_161-pycharm","1.6.1 PyCharm",[29,147311,147312],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[29,147314,123283],{},[37,147316,147317,147320,147323,147329,147332],{},[40,147318,147319],{},"New Project：创建项目。",[40,147321,147322],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[40,147324,147325,147326,127204],{},"New Python File：创建 ",[66,147327,147328],{},".py",[40,147330,147331],{},"Run：运行当前文件。",[40,147333,147334],{},"Debug：断点调试。",[19,147336,147338],{"id":147337},"_162-vs-code","1.6.2 VS Code",[29,147340,147341],{},"VS Code 轻量，适合后续多语言开发。",[29,147343,147344],{},"建议安装插件：",[37,147346,147347,147350,147353],{},[40,147348,147349],{},"Python。",[40,147351,147352],{},"Pylance。",[40,147354,147355],{},"Jupyter。",[29,147357,147358],{},"选择解释器：",[59,147360,147363],{"className":147361,"code":147362,"language":540,"meta":64},[538],"Ctrl + Shift + P -> Python: Select Interpreter\n",[66,147364,147362],{"__ignoreMap":64},[14,147366,147368],{"id":147367},"_17-第一个python程序","1.7 第一个Python程序",[29,147370,147371,147372,25855],{},"创建文件 ",[66,147373,147374],{},"hello.py",[59,147376,147378],{"className":31614,"code":147377,"language":31616,"meta":64,"style":64},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[66,147379,147380,147391],{"__ignoreMap":64},[69,147381,147382,147384,147386,147389],{"class":71,"line":72},[69,147383,31651],{"class":90},[69,147385,1398],{"class":86},[69,147387,147388],{"class":1022},"\"Hello World\"",[69,147390,1404],{"class":86},[69,147392,147393,147395,147397,147400],{"class":71,"line":79},[69,147394,31651],{"class":90},[69,147396,1398],{"class":86},[69,147398,147399],{"class":1022},"\"你好，Python\"",[69,147401,1404],{"class":86},[29,147403,147404],{},"在终端运行：",[59,147406,147408],{"className":25059,"code":147407,"language":25061,"meta":64,"style":64},"python hello.py\n",[66,147409,147410],{"__ignoreMap":64},[69,147411,147412,147414],{"class":71,"line":72},[69,147413,31616],{"class":109},[69,147415,147416],{"class":1022}," hello.py\n",[29,147418,147419],{},"或：",[59,147421,147423],{"className":25059,"code":147422,"language":25061,"meta":64,"style":64},"python3 hello.py\n",[66,147424,147425],{"__ignoreMap":64},[69,147426,147427,147429],{"class":71,"line":72},[69,147428,102100],{"class":109},[69,147430,147416],{"class":1022},[29,147432,147433],{},"输出：",[59,147435,147438],{"className":147436,"code":147437,"language":540,"meta":64},[538],"Hello World\n你好，Python\n",[66,147439,147437],{"__ignoreMap":64},[14,147441,147443],{"id":147442},"_18-print函数","1.8 print函数",[29,147445,147446,147449],{},[66,147447,147448],{},"print()"," 用来输出内容。",[59,147451,147453],{"className":31614,"code":147452,"language":31616,"meta":64,"style":64},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[66,147454,147455,147465,147475,147485],{"__ignoreMap":64},[69,147456,147457,147459,147461,147463],{"class":71,"line":72},[69,147458,31651],{"class":90},[69,147460,1398],{"class":86},[69,147462,7086],{"class":1022},[69,147464,1404],{"class":86},[69,147466,147467,147469,147471,147473],{"class":71,"line":79},[69,147468,31651],{"class":90},[69,147470,1398],{"class":86},[69,147472,124],{"class":90},[69,147474,1404],{"class":86},[69,147476,147477,147479,147481,147483],{"class":71,"line":106},[69,147478,31651],{"class":90},[69,147480,1398],{"class":86},[69,147482,1444],{"class":90},[69,147484,1404],{"class":86},[69,147486,147487,147489,147491,147494,147496,147498],{"class":71,"line":116},[69,147488,31651],{"class":90},[69,147490,1398],{"class":86},[69,147492,147493],{"class":1022},"\"年龄:\"",[69,147495,13677],{"class":86},[69,147497,2037],{"class":90},[69,147499,1404],{"class":86},[29,147501,147502],{},"多个内容用逗号隔开，默认中间加空格：",[59,147504,147506],{"className":31614,"code":147505,"language":31616,"meta":64,"style":64},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[66,147507,147508,147518,147528],{"__ignoreMap":64},[69,147509,147510,147513,147515],{"class":71,"line":72},[69,147511,147512],{"class":86},"name ",[69,147514,1019],{"class":82},[69,147516,147517],{"class":1022}," \"张三\"\n",[69,147519,147520,147523,147525],{"class":71,"line":79},[69,147521,147522],{"class":86},"age ",[69,147524,1019],{"class":82},[69,147526,147527],{"class":90}," 18\n",[69,147529,147530,147532,147534,147537,147540,147542],{"class":71,"line":106},[69,147531,31651],{"class":90},[69,147533,1398],{"class":86},[69,147535,147536],{"class":1022},"\"姓名:\"",[69,147538,147539],{"class":86},", name, ",[69,147541,147493],{"class":1022},[69,147543,147544],{"class":86},", age)\n",[29,147546,147547],{},"修改分隔符：",[59,147549,147551],{"className":31614,"code":147550,"language":31616,"meta":64,"style":64},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[66,147552,147553],{"__ignoreMap":64},[69,147554,147555,147557,147559,147562,147564,147566,147568,147570,147572,147575,147577,147579],{"class":71,"line":72},[69,147556,31651],{"class":90},[69,147558,1398],{"class":86},[69,147560,147561],{"class":1022},"\"2024\"",[69,147563,13677],{"class":86},[69,147565,55543],{"class":1022},[69,147567,13677],{"class":86},[69,147569,55543],{"class":1022},[69,147571,13677],{"class":86},[69,147573,147574],{"class":6458},"sep",[69,147576,1019],{"class":82},[69,147578,33719],{"class":1022},[69,147580,1404],{"class":86},[29,147582,147583],{},"修改结尾符：",[59,147585,147587],{"className":31614,"code":147586,"language":31616,"meta":64,"style":64},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[66,147588,147589,147607],{"__ignoreMap":64},[69,147590,147591,147593,147595,147597,147599,147601,147603,147605],{"class":71,"line":72},[69,147592,31651],{"class":90},[69,147594,1398],{"class":86},[69,147596,7086],{"class":1022},[69,147598,13677],{"class":86},[69,147600,47037],{"class":6458},[69,147602,1019],{"class":82},[69,147604,5603],{"class":1022},[69,147606,1404],{"class":86},[69,147608,147609,147611,147613,147616],{"class":71,"line":79},[69,147610,31651],{"class":90},[69,147612,1398],{"class":86},[69,147614,147615],{"class":1022},"\"python\"",[69,147617,1404],{"class":86},[14,147619,147621],{"id":147620},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[29,147623,147624],{},"交互运行适合临时验证：",[59,147626,147628],{"className":31614,"code":147627,"language":31616,"meta":64,"style":64},">>> 10 * 3\n30\n",[66,147629,147630,147640],{"__ignoreMap":64},[69,147631,147632,147634,147636,147638],{"class":71,"line":72},[69,147633,146829],{"class":82},[69,147635,3282],{"class":90},[69,147637,7760],{"class":82},[69,147639,121257],{"class":90},[69,147641,147642],{"class":71,"line":79},[69,147643,147644],{"class":90},"30\n",[29,147646,147647],{},"脚本运行适合保存程序：",[59,147649,147651],{"className":31614,"code":147650,"language":31616,"meta":64,"style":64},"price = 8\ncount = 5\nprint(price * count)\n",[66,147652,147653,147663,147672],{"__ignoreMap":64},[69,147654,147655,147658,147660],{"class":71,"line":72},[69,147656,147657],{"class":86},"price ",[69,147659,1019],{"class":82},[69,147661,147662],{"class":90}," 8\n",[69,147664,147665,147668,147670],{"class":71,"line":79},[69,147666,147667],{"class":86},"count ",[69,147669,1019],{"class":82},[69,147671,55654],{"class":90},[69,147673,147674,147676,147679,147681],{"class":71,"line":106},[69,147675,31651],{"class":90},[69,147677,147678],{"class":86},"(price ",[69,147680,1843],{"class":82},[69,147682,147683],{"class":86}," count)\n",[29,147685,147686],{},"实际学习中推荐：",[37,147688,147689,147692,147697],{},[40,147690,147691],{},"临时试一个语法，用交互模式。",[40,147693,147694,147695,127204],{},"写完整练习，用 ",[66,147696,147328],{},[40,147698,147699],{},"写项目，用独立目录和虚拟环境。",[14,147701,147703],{"id":147702},"_110-常见错误","1.10 常见错误",[19,147705,147707],{"id":147706},"_1101-命令找不到","1.10.1 命令找不到",[59,147709,147712],{"className":147710,"code":147711,"language":540,"meta":64},[538],"python: command not found\n",[66,147713,147711],{"__ignoreMap":64},[29,147715,147716],{},"原因：",[37,147718,147719,147722,147725],{},[40,147720,147721],{},"没安装 Python。",[40,147723,147724],{},"PATH 没配置。",[40,147726,147727,147728,29621],{},"Linux\u002FmacOS 应该使用 ",[66,147729,102100],{},[19,147731,147733],{"id":147732},"_1102-文件名冲突","1.10.2 文件名冲突",[29,147735,147736],{},"不要把文件命名为：",[59,147738,147741],{"className":147739,"code":147740,"language":540,"meta":64},[538],"random.py\njson.py\ntime.py\nrequests.py\n",[66,147742,147740],{"__ignoreMap":64},[29,147744,147745],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[19,147747,147749],{"id":147748},"_1103-中文乱码","1.10.3 中文乱码",[29,147751,147752],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[29,147754,147755],{},"如果读写文件出现乱码，要明确指定编码：",[59,147757,147759],{"className":31614,"code":147758,"language":31616,"meta":64,"style":64},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[66,147760,147761,147795],{"__ignoreMap":64},[69,147762,147763,147765,147768,147770,147773,147775,147778,147780,147783,147785,147788,147790,147792],{"class":71,"line":72},[69,147764,109054],{"class":82},[69,147766,147767],{"class":90}," open",[69,147769,1398],{"class":86},[69,147771,147772],{"class":1022},"\"data.txt\"",[69,147774,13677],{"class":86},[69,147776,147777],{"class":1022},"\"r\"",[69,147779,13677],{"class":86},[69,147781,147782],{"class":6458},"encoding",[69,147784,1019],{"class":82},[69,147786,147787],{"class":1022},"\"utf-8\"",[69,147789,14955],{"class":86},[69,147791,32619],{"class":82},[69,147793,147794],{"class":86}," f:\n",[69,147796,147797,147800,147802],{"class":71,"line":79},[69,147798,147799],{"class":86},"    content ",[69,147801,1019],{"class":82},[69,147803,147804],{"class":86}," f.read()\n",[14,147806,147808],{"id":147807},"_111-本章练习","1.11 本章练习",[37,147810,147811,147814,147820],{},[40,147812,147813],{},"安装 Python，并在终端输出版本号。",[40,147815,147816,147817,147819],{},"新建 ",[66,147818,147374],{},"，输出自己的姓名、年龄、学习目标。",[40,147821,105587,147822,147824],{},[66,147823,147448],{}," 输出下面格式：",[59,147826,147829],{"className":147827,"code":147828,"language":540,"meta":64},[538],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[66,147830,147828],{"__ignoreMap":64},[37,147832,147833],{"start":116},[40,147834,105587,147835,147837],{},[66,147836,147574],{}," 输出日期：",[59,147839,147842],{"className":147840,"code":147841,"language":540,"meta":64},[538],"2024-10-10\n",[66,147843,147841],{"__ignoreMap":64},[37,147845,147846],{"start":133},[40,147847,105587,147848,147850,147851,147853],{},[66,147849,47037],{}," 让两次 ",[66,147852,147448],{}," 输出在同一行。",[1297,147855,147856],{},"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":64,"searchDepth":79,"depth":79,"links":147858},[147859,147860,147861,147866,147867,147868,147872,147873,147874,147875,147880],{"id":146741,"depth":79,"text":146742},{"id":146785,"depth":79,"text":146786},{"id":146886,"depth":79,"text":146887,"children":147862},[147863,147864,147865],{"id":146890,"depth":106,"text":146891},{"id":146945,"depth":106,"text":146946},{"id":146981,"depth":106,"text":146982},{"id":147054,"depth":79,"text":147055},{"id":147199,"depth":79,"text":147200},{"id":147304,"depth":79,"text":147305,"children":147869},[147870,147871],{"id":147308,"depth":106,"text":147309},{"id":147337,"depth":106,"text":147338},{"id":147367,"depth":79,"text":147368},{"id":147442,"depth":79,"text":147443},{"id":147620,"depth":79,"text":147621},{"id":147702,"depth":79,"text":147703,"children":147876},[147877,147878,147879],{"id":147706,"depth":106,"text":147707},{"id":147732,"depth":106,"text":147733},{"id":147748,"depth":106,"text":147749},{"id":147807,"depth":79,"text":147808},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146733,"description":1322},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147887,"title":147888,"body":147889,"description":1322,"extension":1323,"meta":150293,"navigation":1325,"path":150294,"seo":150295,"stem":150296,"__hash__":150297},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147890,"toc":150278},[147891,147894,147898,147901,147904,147921,147924,147966,147969,147973,147976,147979,148016,148019,148053,148056,148148,148152,148166,148169,148196,148199,148203,148306,148313,148316,148333,148337,148344,148533,148536,148609,148613,148616,148700,148703,148735,148739,148943,148946,148950,148956,149058,149061,149317,149321,149324,149327,149341,149343,149529,149533,149895,149901,149905,149908,150032,150035,150214,150217,150221,150254,150258,150275],[10,147892,147888],{"id":147893},"_10-json与pyecharts折线图",[14,147895,147897],{"id":147896},"_101-数据可视化","10.1 数据可视化",[29,147899,147900],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[29,147902,147903],{},"常见图表：",[37,147905,147906,147909,147912,147915,147918],{},[40,147907,147908],{},"折线图：看趋势。",[40,147910,147911],{},"柱状图：看分类对比。",[40,147913,147914],{},"饼图：看占比。",[40,147916,147917],{},"地图：看地域分布。",[40,147919,147920],{},"散点图：看两个变量之间的关系。",[29,147922,147923],{},"Python 可视化常用库：",[1530,147925,147926,147934],{},[1533,147927,147928],{},[1536,147929,147930,147932],{},[1539,147931,147137],{},[1539,147933,24977],{},[1576,147935,147936,147943,147951,147958],{},[1536,147937,147938,147940],{},[1581,147939,147169],{},[1581,147941,147942],{},"基础、经典、可定制",[1536,147944,147945,147948],{},[1581,147946,147947],{},"seaborn",[1581,147949,147950],{},"统计图表更美观",[1536,147952,147953,147955],{},[1581,147954,147177],{},[1581,147956,147957],{},"生成交互式网页图表",[1536,147959,147960,147963],{},[1581,147961,147962],{},"plotly",[1581,147964,147965],{},"交互图表能力强",[29,147967,147968],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147970,147972],{"id":147971},"_102-json回顾","10.2 JSON回顾",[29,147974,147975],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[29,147977,147978],{},"Python 字典：",[59,147980,147982],{"className":31614,"code":147981,"language":31616,"meta":64,"style":64},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[66,147983,147984,147992,148003,148012],{"__ignoreMap":64},[69,147985,147986,147988,147990],{"class":71,"line":72},[69,147987,102879],{"class":86},[69,147989,1019],{"class":82},[69,147991,113],{"class":86},[69,147993,147994,147997,147999,148001],{"class":71,"line":79},[69,147995,147996],{"class":1022},"    \"name\"",[69,147998,94],{"class":86},[69,148000,70494],{"class":1022},[69,148002,32702],{"class":86},[69,148004,148005,148008,148010],{"class":71,"line":106},[69,148006,148007],{"class":1022},"    \"value\"",[69,148009,94],{"class":86},[69,148011,98679],{"class":90},[69,148013,148014],{"class":71,"line":116},[69,148015,142],{"class":86},[29,148017,148018],{},"JSON 字符串：",[59,148020,148023],{"className":148021,"code":148022,"language":146768,"meta":64,"style":64},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[66,148024,148025,148029,148040,148049],{"__ignoreMap":64},[69,148026,148027],{"class":71,"line":72},[69,148028,2797],{"class":86},[69,148030,148031,148034,148036,148038],{"class":71,"line":79},[69,148032,148033],{"class":90},"  \"name\"",[69,148035,94],{"class":86},[69,148037,70494],{"class":1022},[69,148039,32702],{"class":86},[69,148041,148042,148045,148047],{"class":71,"line":106},[69,148043,148044],{"class":90},"  \"value\"",[69,148046,94],{"class":86},[69,148048,98679],{"class":90},[69,148050,148051],{"class":71,"line":116},[69,148052,142],{"class":86},[29,148054,148055],{},"Python 与 JSON 的转换：",[59,148057,148059],{"className":31614,"code":148058,"language":31616,"meta":64,"style":64},"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",[66,148060,148061,148068,148072,148097,148101,148120,148127,148131,148141],{"__ignoreMap":64},[69,148062,148063,148065],{"class":71,"line":72},[69,148064,31628],{"class":82},[69,148066,148067],{"class":86}," json\n",[69,148069,148070],{"class":71,"line":79},[69,148071,3644],{"emptyLinePlaceholder":1325},[69,148073,148074,148076,148078,148080,148082,148084,148086,148088,148091,148093,148095],{"class":71,"line":106},[69,148075,102879],{"class":86},[69,148077,1019],{"class":82},[69,148079,5692],{"class":86},[69,148081,63905],{"class":1022},[69,148083,94],{"class":86},[69,148085,70494],{"class":1022},[69,148087,13677],{"class":86},[69,148089,148090],{"class":1022},"\"value\"",[69,148092,94],{"class":86},[69,148094,124],{"class":90},[69,148096,142],{"class":86},[69,148098,148099],{"class":71,"line":116},[69,148100,3644],{"emptyLinePlaceholder":1325},[69,148102,148103,148106,148108,148111,148114,148116,148118],{"class":71,"line":133},[69,148104,148105],{"class":86},"json_text ",[69,148107,1019],{"class":82},[69,148109,148110],{"class":86}," json.dumps(data, ",[69,148112,148113],{"class":6458},"ensure_ascii",[69,148115,1019],{"class":82},[69,148117,35223],{"class":90},[69,148119,1404],{"class":86},[69,148121,148122,148124],{"class":71,"line":139},[69,148123,31651],{"class":90},[69,148125,148126],{"class":86},"(json_text)\n",[69,148128,148129],{"class":71,"line":401},[69,148130,3644],{"emptyLinePlaceholder":1325},[69,148132,148133,148136,148138],{"class":71,"line":470},[69,148134,148135],{"class":86},"new_data ",[69,148137,1019],{"class":82},[69,148139,148140],{"class":86}," json.loads(json_text)\n",[69,148142,148143,148145],{"class":71,"line":475},[69,148144,31651],{"class":90},[69,148146,148147],{"class":86},"(new_data)\n",[14,148149,148151],{"id":148150},"_103-安装pyecharts","10.3 安装pyecharts",[59,148153,148155],{"className":25059,"code":148154,"language":25061,"meta":64,"style":64},"pip install pyecharts\n",[66,148156,148157],{"__ignoreMap":64},[69,148158,148159,148161,148163],{"class":71,"line":72},[69,148160,25068],{"class":109},[69,148162,25071],{"class":1022},[69,148164,148165],{"class":1022}," pyecharts\n",[29,148167,148168],{},"验证：",[59,148170,148172],{"className":31614,"code":148171,"language":31616,"meta":64,"style":64},"import pyecharts\n\nprint(pyecharts.__version__)\n",[66,148173,148174,148180,148184],{"__ignoreMap":64},[69,148175,148176,148178],{"class":71,"line":72},[69,148177,31628],{"class":82},[69,148179,148165],{"class":86},[69,148181,148182],{"class":71,"line":79},[69,148183,3644],{"emptyLinePlaceholder":1325},[69,148185,148186,148188,148191,148194],{"class":71,"line":106},[69,148187,31651],{"class":90},[69,148189,148190],{"class":86},"(pyecharts.",[69,148192,148193],{"class":90},"__version__",[69,148195,1404],{"class":86},[29,148197,148198],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148200,148202],{"id":148201},"_104-第一个折线图","10.4 第一个折线图",[59,148204,148206],{"className":31614,"code":148205,"language":31616,"meta":64,"style":64},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[66,148207,148208,148220,148224,148234,148264,148296],{"__ignoreMap":64},[69,148209,148210,148212,148215,148217],{"class":71,"line":72},[69,148211,31973],{"class":82},[69,148213,148214],{"class":86}," pyecharts.charts ",[69,148216,31628],{"class":82},[69,148218,148219],{"class":86}," Line\n",[69,148221,148222],{"class":71,"line":79},[69,148223,3644],{"emptyLinePlaceholder":1325},[69,148225,148226,148229,148231],{"class":71,"line":106},[69,148227,148228],{"class":86},"line ",[69,148230,1019],{"class":82},[69,148232,148233],{"class":86}," Line()\n",[69,148235,148236,148239,148242,148244,148247,148249,148252,148254,148257,148259,148262],{"class":71,"line":116},[69,148237,148238],{"class":86},"line.add_xaxis([",[69,148240,148241],{"class":1022},"\"周一\"",[69,148243,13677],{"class":86},[69,148245,148246],{"class":1022},"\"周二\"",[69,148248,13677],{"class":86},[69,148250,148251],{"class":1022},"\"周三\"",[69,148253,13677],{"class":86},[69,148255,148256],{"class":1022},"\"周四\"",[69,148258,13677],{"class":86},[69,148260,148261],{"class":1022},"\"周五\"",[69,148263,5901],{"class":86},[69,148265,148266,148269,148272,148274,148276,148278,148280,148282,148284,148286,148289,148291,148294],{"class":71,"line":133},[69,148267,148268],{"class":86},"line.add_yaxis(",[69,148270,148271],{"class":1022},"\"销售额\"",[69,148273,78739],{"class":86},[69,148275,124],{"class":90},[69,148277,13677],{"class":86},[69,148279,2204],{"class":90},[69,148281,13677],{"class":86},[69,148283,2249],{"class":90},[69,148285,13677],{"class":86},[69,148287,148288],{"class":90},"150",[69,148290,13677],{"class":86},[69,148292,148293],{"class":90},"180",[69,148295,5901],{"class":86},[69,148297,148298,148301,148304],{"class":71,"line":139},[69,148299,148300],{"class":86},"line.render(",[69,148302,148303],{"class":1022},"\"line.html\"",[69,148305,1404],{"class":86},[29,148307,148308,148309,148312],{},"运行后会生成 ",[66,148310,148311],{},"line.html","，用浏览器打开即可看到图表。",[29,148314,148315],{},"核心步骤：",[37,148317,148318,148321,148324,148327,148330],{},[40,148319,148320],{},"导入图表类。",[40,148322,148323],{},"创建图表对象。",[40,148325,148326],{},"添加 x 轴数据。",[40,148328,148329],{},"添加 y 轴数据。",[40,148331,148332],{},"渲染为 HTML。",[14,148334,148336],{"id":148335},"_105-全局配置","10.5 全局配置",[29,148338,148339,148340,148343],{},"常用配置在 ",[66,148341,148342],{},"pyecharts.options"," 中。",[59,148345,148347],{"className":31614,"code":148346,"language":31616,"meta":64,"style":64},"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",[66,148348,148349,148366,148376,148380,148388,148412,148440,148445,148464,148483,148501,148521,148525],{"__ignoreMap":64},[69,148350,148351,148353,148356,148358,148361,148363],{"class":71,"line":72},[69,148352,31973],{"class":82},[69,148354,148355],{"class":86}," pyecharts ",[69,148357,31628],{"class":82},[69,148359,148360],{"class":86}," options ",[69,148362,32619],{"class":82},[69,148364,148365],{"class":86}," opts\n",[69,148367,148368,148370,148372,148374],{"class":71,"line":79},[69,148369,31973],{"class":82},[69,148371,148214],{"class":86},[69,148373,31628],{"class":82},[69,148375,148219],{"class":86},[69,148377,148378],{"class":71,"line":106},[69,148379,3644],{"emptyLinePlaceholder":1325},[69,148381,148382,148384,148386],{"class":71,"line":116},[69,148383,148228],{"class":86},[69,148385,1019],{"class":82},[69,148387,148233],{"class":86},[69,148389,148390,148392,148394,148396,148398,148400,148402,148404,148406,148408,148410],{"class":71,"line":133},[69,148391,148238],{"class":86},[69,148393,148241],{"class":1022},[69,148395,13677],{"class":86},[69,148397,148246],{"class":1022},[69,148399,13677],{"class":86},[69,148401,148251],{"class":1022},[69,148403,13677],{"class":86},[69,148405,148256],{"class":1022},[69,148407,13677],{"class":86},[69,148409,148261],{"class":1022},[69,148411,5901],{"class":86},[69,148413,148414,148416,148418,148420,148422,148424,148426,148428,148430,148432,148434,148436,148438],{"class":71,"line":139},[69,148415,148268],{"class":86},[69,148417,148271],{"class":1022},[69,148419,78739],{"class":86},[69,148421,124],{"class":90},[69,148423,13677],{"class":86},[69,148425,2204],{"class":90},[69,148427,13677],{"class":86},[69,148429,2249],{"class":90},[69,148431,13677],{"class":86},[69,148433,148288],{"class":90},[69,148435,13677],{"class":86},[69,148437,148293],{"class":90},[69,148439,5901],{"class":86},[69,148441,148442],{"class":71,"line":401},[69,148443,148444],{"class":86},"line.set_global_opts(\n",[69,148446,148447,148450,148452,148455,148457,148459,148462],{"class":71,"line":470},[69,148448,148449],{"class":6458},"    title_opts",[69,148451,1019],{"class":82},[69,148453,148454],{"class":86},"opts.TitleOpts(",[69,148456,52640],{"class":6458},[69,148458,1019],{"class":82},[69,148460,148461],{"class":1022},"\"一周销售额\"",[69,148463,39283],{"class":86},[69,148465,148466,148469,148471,148474,148476,148478,148481],{"class":71,"line":475},[69,148467,148468],{"class":6458},"    xaxis_opts",[69,148470,1019],{"class":82},[69,148472,148473],{"class":86},"opts.AxisOpts(",[69,148475,81031],{"class":6458},[69,148477,1019],{"class":82},[69,148479,148480],{"class":1022},"\"日期\"",[69,148482,39283],{"class":86},[69,148484,148485,148488,148490,148492,148494,148496,148499],{"class":71,"line":482},[69,148486,148487],{"class":6458},"    yaxis_opts",[69,148489,1019],{"class":82},[69,148491,148473],{"class":86},[69,148493,81031],{"class":6458},[69,148495,1019],{"class":82},[69,148497,148498],{"class":1022},"\"金额\"",[69,148500,39283],{"class":86},[69,148502,148503,148506,148508,148511,148514,148516,148519],{"class":71,"line":497},[69,148504,148505],{"class":6458},"    tooltip_opts",[69,148507,1019],{"class":82},[69,148509,148510],{"class":86},"opts.TooltipOpts(",[69,148512,148513],{"class":6458},"trigger",[69,148515,1019],{"class":82},[69,148517,148518],{"class":1022},"\"axis\"",[69,148520,39283],{"class":86},[69,148522,148523],{"class":71,"line":502},[69,148524,1404],{"class":86},[69,148526,148527,148529,148531],{"class":71,"line":509},[69,148528,148300],{"class":86},[69,148530,148303],{"class":1022},[69,148532,1404],{"class":86},[29,148534,148535],{},"常见全局配置：",[1530,148537,148538,148547],{},[1533,148539,148540],{},[1536,148541,148542,148545],{},[1539,148543,148544],{},"配置",[1539,148546,103917],{},[1576,148548,148549,148559,148569,148579,148589,148599],{},[1536,148550,148551,148556],{},[1581,148552,148553],{},[66,148554,148555],{},"TitleOpts",[1581,148557,148558],{},"标题",[1536,148560,148561,148566],{},[1581,148562,148563],{},[66,148564,148565],{},"LegendOpts",[1581,148567,148568],{},"图例",[1536,148570,148571,148576],{},[1581,148572,148573],{},[66,148574,148575],{},"TooltipOpts",[1581,148577,148578],{},"提示框",[1536,148580,148581,148586],{},[1581,148582,148583],{},[66,148584,148585],{},"AxisOpts",[1581,148587,148588],{},"坐标轴",[1536,148590,148591,148596],{},[1581,148592,148593],{},[66,148594,148595],{},"VisualMapOpts",[1581,148597,148598],{},"视觉映射",[1536,148600,148601,148606],{},[1581,148602,148603],{},[66,148604,148605],{},"DataZoomOpts",[1581,148607,148608],{},"区域缩放",[14,148610,148612],{"id":148611},"_106-系列配置","10.6 系列配置",[29,148614,148615],{},"系列配置作用于某一组数据。",[59,148617,148619],{"className":31614,"code":148618,"language":31616,"meta":64,"style":64},"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",[66,148620,148621,148626,148637,148666,148677,148696],{"__ignoreMap":64},[69,148622,148623],{"class":71,"line":72},[69,148624,148625],{"class":86},"line.add_yaxis(\n",[69,148627,148628,148631,148633,148635],{"class":71,"line":79},[69,148629,148630],{"class":6458},"    series_name",[69,148632,1019],{"class":82},[69,148634,148271],{"class":1022},[69,148636,32702],{"class":86},[69,148638,148639,148642,148644,148646,148648,148650,148652,148654,148656,148658,148660,148662,148664],{"class":71,"line":106},[69,148640,148641],{"class":6458},"    y_axis",[69,148643,1019],{"class":82},[69,148645,2277],{"class":86},[69,148647,124],{"class":90},[69,148649,13677],{"class":86},[69,148651,2204],{"class":90},[69,148653,13677],{"class":86},[69,148655,2249],{"class":90},[69,148657,13677],{"class":86},[69,148659,148288],{"class":90},[69,148661,13677],{"class":86},[69,148663,148293],{"class":90},[69,148665,89057],{"class":86},[69,148667,148668,148671,148673,148675],{"class":71,"line":116},[69,148669,148670],{"class":6458},"    is_smooth",[69,148672,1019],{"class":82},[69,148674,32712],{"class":90},[69,148676,32702],{"class":86},[69,148678,148679,148682,148684,148687,148690,148692,148694],{"class":71,"line":133},[69,148680,148681],{"class":6458},"    label_opts",[69,148683,1019],{"class":82},[69,148685,148686],{"class":86},"opts.LabelOpts(",[69,148688,148689],{"class":6458},"is_show",[69,148691,1019],{"class":82},[69,148693,32712],{"class":90},[69,148695,39283],{"class":86},[69,148697,148698],{"class":71,"line":139},[69,148699,1404],{"class":86},[29,148701,148702],{},"常用参数：",[37,148704,148705,148711,148717,148723,148729],{},[40,148706,148707,148710],{},[66,148708,148709],{},"series_name","：系列名称。",[40,148712,148713,148716],{},[66,148714,148715],{},"y_axis","：y 轴数据。",[40,148718,148719,148722],{},[66,148720,148721],{},"is_smooth","：是否平滑曲线。",[40,148724,148725,148728],{},[66,148726,148727],{},"label_opts","：标签配置。",[40,148730,148731,148734],{},[66,148732,148733],{},"symbol_size","：标记点大小。",[14,148736,148738],{"id":148737},"_107-多条折线","10.7 多条折线",[59,148740,148742],{"className":31614,"code":148741,"language":31616,"meta":64,"style":64},"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",[66,148743,148744,148758,148768,148772,148801,148805,148813,148818,148856,148893,148897,148914,148930,148934],{"__ignoreMap":64},[69,148745,148746,148748,148750,148752,148754,148756],{"class":71,"line":72},[69,148747,31973],{"class":82},[69,148749,148355],{"class":86},[69,148751,31628],{"class":82},[69,148753,148360],{"class":86},[69,148755,32619],{"class":82},[69,148757,148365],{"class":86},[69,148759,148760,148762,148764,148766],{"class":71,"line":79},[69,148761,31973],{"class":82},[69,148763,148214],{"class":86},[69,148765,31628],{"class":82},[69,148767,148219],{"class":86},[69,148769,148770],{"class":71,"line":106},[69,148771,3644],{"emptyLinePlaceholder":1325},[69,148773,148774,148777,148779,148781,148783,148785,148787,148789,148791,148793,148795,148797,148799],{"class":71,"line":116},[69,148775,148776],{"class":86},"dates ",[69,148778,1019],{"class":82},[69,148780,53454],{"class":86},[69,148782,148241],{"class":1022},[69,148784,13677],{"class":86},[69,148786,148246],{"class":1022},[69,148788,13677],{"class":86},[69,148790,148251],{"class":1022},[69,148792,13677],{"class":86},[69,148794,148256],{"class":1022},[69,148796,13677],{"class":86},[69,148798,148261],{"class":1022},[69,148800,34482],{"class":86},[69,148802,148803],{"class":71,"line":133},[69,148804,3644],{"emptyLinePlaceholder":1325},[69,148806,148807,148809,148811],{"class":71,"line":139},[69,148808,148228],{"class":86},[69,148810,1019],{"class":82},[69,148812,148233],{"class":86},[69,148814,148815],{"class":71,"line":401},[69,148816,148817],{"class":86},"line.add_xaxis(dates)\n",[69,148819,148820,148822,148825,148827,148829,148831,148834,148836,148838,148840,148842,148844,148846,148848,148850,148852,148854],{"class":71,"line":470},[69,148821,148268],{"class":86},[69,148823,148824],{"class":1022},"\"线上销售\"",[69,148826,78739],{"class":86},[69,148828,124],{"class":90},[69,148830,13677],{"class":86},[69,148832,148833],{"class":90},"130",[69,148835,13677],{"class":86},[69,148837,2204],{"class":90},[69,148839,13677],{"class":86},[69,148841,22287],{"class":90},[69,148843,13677],{"class":86},[69,148845,2967],{"class":90},[69,148847,113423],{"class":86},[69,148849,148721],{"class":6458},[69,148851,1019],{"class":82},[69,148853,32712],{"class":90},[69,148855,1404],{"class":86},[69,148857,148858,148860,148863,148865,148867,148869,148871,148873,148875,148877,148879,148881,148883,148885,148887,148889,148891],{"class":71,"line":475},[69,148859,148268],{"class":86},[69,148861,148862],{"class":1022},"\"线下销售\"",[69,148864,78739],{"class":86},[69,148866,1999],{"class":90},[69,148868,13677],{"class":86},[69,148870,2249],{"class":90},[69,148872,13677],{"class":86},[69,148874,124],{"class":90},[69,148876,13677],{"class":86},[69,148878,2204],{"class":90},[69,148880,13677],{"class":86},[69,148882,148288],{"class":90},[69,148884,113423],{"class":86},[69,148886,148721],{"class":6458},[69,148888,1019],{"class":82},[69,148890,32712],{"class":90},[69,148892,1404],{"class":86},[69,148894,148895],{"class":71,"line":482},[69,148896,148444],{"class":86},[69,148898,148899,148901,148903,148905,148907,148909,148912],{"class":71,"line":497},[69,148900,148449],{"class":6458},[69,148902,1019],{"class":82},[69,148904,148454],{"class":86},[69,148906,52640],{"class":6458},[69,148908,1019],{"class":82},[69,148910,148911],{"class":1022},"\"线上线下销售趋势\"",[69,148913,39283],{"class":86},[69,148915,148916,148918,148920,148922,148924,148926,148928],{"class":71,"line":502},[69,148917,148505],{"class":6458},[69,148919,1019],{"class":82},[69,148921,148510],{"class":86},[69,148923,148513],{"class":6458},[69,148925,1019],{"class":82},[69,148927,148518],{"class":1022},[69,148929,39283],{"class":86},[69,148931,148932],{"class":71,"line":509},[69,148933,1404],{"class":86},[69,148935,148936,148938,148941],{"class":71,"line":524},[69,148937,148300],{"class":86},[69,148939,148940],{"class":1022},"\"sales.html\"",[69,148942,1404],{"class":86},[29,148944,148945],{},"多条折线适合比较不同指标或不同地区。",[14,148947,148949],{"id":148948},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[29,148951,148952,148953,25855],{},"假设 ",[66,148954,148955],{},"sales.json",[59,148957,148959],{"className":148021,"code":148958,"language":146768,"meta":64,"style":64},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[66,148960,148961,148966,148998,149026,149054],{"__ignoreMap":64},[69,148962,148963],{"class":71,"line":72},[69,148964,148965],{"class":86},"[\n",[69,148967,148968,148971,148974,148976,148978,148980,148983,148985,148987,148989,148992,148994,148996],{"class":71,"line":79},[69,148969,148970],{"class":86},"  {",[69,148972,148973],{"class":90},"\"date\"",[69,148975,94],{"class":86},[69,148977,148241],{"class":1022},[69,148979,13677],{"class":86},[69,148981,148982],{"class":90},"\"online\"",[69,148984,94],{"class":86},[69,148986,124],{"class":90},[69,148988,13677],{"class":86},[69,148990,148991],{"class":90},"\"offline\"",[69,148993,94],{"class":86},[69,148995,1999],{"class":90},[69,148997,6174],{"class":86},[69,148999,149000,149002,149004,149006,149008,149010,149012,149014,149016,149018,149020,149022,149024],{"class":71,"line":106},[69,149001,148970],{"class":86},[69,149003,148973],{"class":90},[69,149005,94],{"class":86},[69,149007,148246],{"class":1022},[69,149009,13677],{"class":86},[69,149011,148982],{"class":90},[69,149013,94],{"class":86},[69,149015,148833],{"class":90},[69,149017,13677],{"class":86},[69,149019,148991],{"class":90},[69,149021,94],{"class":86},[69,149023,2249],{"class":90},[69,149025,6174],{"class":86},[69,149027,149028,149030,149032,149034,149036,149038,149040,149042,149044,149046,149048,149050,149052],{"class":71,"line":116},[69,149029,148970],{"class":86},[69,149031,148973],{"class":90},[69,149033,94],{"class":86},[69,149035,148251],{"class":1022},[69,149037,13677],{"class":86},[69,149039,148982],{"class":90},[69,149041,94],{"class":86},[69,149043,2204],{"class":90},[69,149045,13677],{"class":86},[69,149047,148991],{"class":90},[69,149049,94],{"class":86},[69,149051,124],{"class":90},[69,149053,142],{"class":86},[69,149055,149056],{"class":71,"line":133},[69,149057,34482],{"class":86},[29,149059,149060],{},"读取并绘图：",[59,149062,149064],{"className":31614,"code":149063,"language":31616,"meta":64,"style":64},"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",[66,149065,149066,149072,149086,149096,149100,149132,149145,149149,149157,149166,149175,149179,149191,149200,149209,149218,149222,149230,149234,149251,149268,149272,149289,149305,149309],{"__ignoreMap":64},[69,149067,149068,149070],{"class":71,"line":72},[69,149069,31628],{"class":82},[69,149071,148067],{"class":86},[69,149073,149074,149076,149078,149080,149082,149084],{"class":71,"line":79},[69,149075,31973],{"class":82},[69,149077,148355],{"class":86},[69,149079,31628],{"class":82},[69,149081,148360],{"class":86},[69,149083,32619],{"class":82},[69,149085,148365],{"class":86},[69,149087,149088,149090,149092,149094],{"class":71,"line":106},[69,149089,31973],{"class":82},[69,149091,148214],{"class":86},[69,149093,31628],{"class":82},[69,149095,148219],{"class":86},[69,149097,149098],{"class":71,"line":116},[69,149099,3644],{"emptyLinePlaceholder":1325},[69,149101,149102,149104,149106,149108,149111,149113,149115,149117,149119,149121,149123,149125,149127,149130],{"class":71,"line":133},[69,149103,109054],{"class":82},[69,149105,147767],{"class":90},[69,149107,1398],{"class":86},[69,149109,149110],{"class":1022},"\"sales.json\"",[69,149112,13677],{"class":86},[69,149114,147777],{"class":1022},[69,149116,13677],{"class":86},[69,149118,147782],{"class":6458},[69,149120,1019],{"class":82},[69,149122,147787],{"class":1022},[69,149124,14955],{"class":86},[69,149126,32619],{"class":82},[69,149128,149129],{"class":6458}," file",[69,149131,4983],{"class":86},[69,149133,149134,149136,149138,149141,149143],{"class":71,"line":139},[69,149135,102642],{"class":86},[69,149137,1019],{"class":82},[69,149139,149140],{"class":86}," json.load(",[69,149142,46590],{"class":6458},[69,149144,1404],{"class":86},[69,149146,149147],{"class":71,"line":401},[69,149148,3644],{"emptyLinePlaceholder":1325},[69,149150,149151,149153,149155],{"class":71,"line":470},[69,149152,148776],{"class":86},[69,149154,1019],{"class":82},[69,149156,53066],{"class":86},[69,149158,149159,149162,149164],{"class":71,"line":475},[69,149160,149161],{"class":86},"online_sales ",[69,149163,1019],{"class":82},[69,149165,53066],{"class":86},[69,149167,149168,149171,149173],{"class":71,"line":482},[69,149169,149170],{"class":86},"offline_sales ",[69,149172,1019],{"class":82},[69,149174,53066],{"class":86},[69,149176,149177],{"class":71,"line":497},[69,149178,3644],{"emptyLinePlaceholder":1325},[69,149180,149181,149183,149186,149188],{"class":71,"line":502},[69,149182,4269],{"class":82},[69,149184,149185],{"class":86}," item ",[69,149187,27280],{"class":82},[69,149189,149190],{"class":86}," data:\n",[69,149192,149193,149196,149198],{"class":71,"line":509},[69,149194,149195],{"class":86},"    dates.append(item[",[69,149197,148973],{"class":1022},[69,149199,5901],{"class":86},[69,149201,149202,149205,149207],{"class":71,"line":524},[69,149203,149204],{"class":86},"    online_sales.append(item[",[69,149206,148982],{"class":1022},[69,149208,5901],{"class":86},[69,149210,149211,149214,149216],{"class":71,"line":2888},[69,149212,149213],{"class":86},"    offline_sales.append(item[",[69,149215,148991],{"class":1022},[69,149217,5901],{"class":86},[69,149219,149220],{"class":71,"line":2893},[69,149221,3644],{"emptyLinePlaceholder":1325},[69,149223,149224,149226,149228],{"class":71,"line":2899},[69,149225,148228],{"class":86},[69,149227,1019],{"class":82},[69,149229,148233],{"class":86},[69,149231,149232],{"class":71,"line":2919},[69,149233,148817],{"class":86},[69,149235,149236,149238,149240,149243,149245,149247,149249],{"class":71,"line":2924},[69,149237,148268],{"class":86},[69,149239,148824],{"class":1022},[69,149241,149242],{"class":86},", online_sales, ",[69,149244,148721],{"class":6458},[69,149246,1019],{"class":82},[69,149248,32712],{"class":90},[69,149250,1404],{"class":86},[69,149252,149253,149255,149257,149260,149262,149264,149266],{"class":71,"line":2938},[69,149254,148268],{"class":86},[69,149256,148862],{"class":1022},[69,149258,149259],{"class":86},", offline_sales, ",[69,149261,148721],{"class":6458},[69,149263,1019],{"class":82},[69,149265,32712],{"class":90},[69,149267,1404],{"class":86},[69,149269,149270],{"class":71,"line":2943},[69,149271,148444],{"class":86},[69,149273,149274,149276,149278,149280,149282,149284,149287],{"class":71,"line":2972},[69,149275,148449],{"class":6458},[69,149277,1019],{"class":82},[69,149279,148454],{"class":86},[69,149281,52640],{"class":6458},[69,149283,1019],{"class":82},[69,149285,149286],{"class":1022},"\"销售趋势\"",[69,149288,39283],{"class":86},[69,149290,149291,149293,149295,149297,149299,149301,149303],{"class":71,"line":2977},[69,149292,148505],{"class":6458},[69,149294,1019],{"class":82},[69,149296,148510],{"class":86},[69,149298,148513],{"class":6458},[69,149300,1019],{"class":82},[69,149302,148518],{"class":1022},[69,149304,39283],{"class":86},[69,149306,149307],{"class":71,"line":2994},[69,149308,1404],{"class":86},[69,149310,149311,149313,149315],{"class":71,"line":2999},[69,149312,148300],{"class":86},[69,149314,148940],{"class":1022},[69,149316,1404],{"class":86},[14,149318,149320],{"id":149319},"_109-数据清洗","10.9 数据清洗",[29,149322,149323],{},"真实数据经常不整齐，需要清洗。",[29,149325,149326],{},"常见问题：",[37,149328,149329,149332,149335,149338],{},[40,149330,149331],{},"数字是字符串。",[40,149333,149334],{},"字段缺失。",[40,149336,149337],{},"空值。",[40,149339,149340],{},"日期格式不统一。",[29,149342,16375],{},[59,149344,149346],{"className":31614,"code":149345,"language":31616,"meta":64,"style":64},"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",[66,149347,149348,149357,149380,149400,149421,149425,149429,149437,149446,149450,149461,149475,149484,149489,149493,149501,149511,149515,149522],{"__ignoreMap":64},[69,149349,149350,149353,149355],{"class":71,"line":72},[69,149351,149352],{"class":86},"raw_data ",[69,149354,1019],{"class":82},[69,149356,56674],{"class":86},[69,149358,149359,149362,149364,149366,149368,149370,149373,149375,149378],{"class":71,"line":79},[69,149360,149361],{"class":86},"    {",[69,149363,148973],{"class":1022},[69,149365,94],{"class":86},[69,149367,148241],{"class":1022},[69,149369,13677],{"class":86},[69,149371,149372],{"class":1022},"\"sales\"",[69,149374,94],{"class":86},[69,149376,149377],{"class":1022},"\"100\"",[69,149379,6174],{"class":86},[69,149381,149382,149384,149386,149388,149390,149392,149394,149396,149398],{"class":71,"line":106},[69,149383,149361],{"class":86},[69,149385,148973],{"class":1022},[69,149387,94],{"class":86},[69,149389,148246],{"class":1022},[69,149391,13677],{"class":86},[69,149393,149372],{"class":1022},[69,149395,94],{"class":86},[69,149397,8894],{"class":1022},[69,149399,6174],{"class":86},[69,149401,149402,149404,149406,149408,149410,149412,149414,149416,149419],{"class":71,"line":116},[69,149403,149361],{"class":86},[69,149405,148973],{"class":1022},[69,149407,94],{"class":86},[69,149409,148251],{"class":1022},[69,149411,13677],{"class":86},[69,149413,149372],{"class":1022},[69,149415,94],{"class":86},[69,149417,149418],{"class":1022},"\"120\"",[69,149420,6174],{"class":86},[69,149422,149423],{"class":71,"line":133},[69,149424,34482],{"class":86},[69,149426,149427],{"class":71,"line":139},[69,149428,3644],{"emptyLinePlaceholder":1325},[69,149430,149431,149433,149435],{"class":71,"line":401},[69,149432,148776],{"class":86},[69,149434,1019],{"class":82},[69,149436,53066],{"class":86},[69,149438,149439,149442,149444],{"class":71,"line":470},[69,149440,149441],{"class":86},"sales ",[69,149443,1019],{"class":82},[69,149445,53066],{"class":86},[69,149447,149448],{"class":71,"line":475},[69,149449,3644],{"emptyLinePlaceholder":1325},[69,149451,149452,149454,149456,149458],{"class":71,"line":482},[69,149453,4269],{"class":82},[69,149455,149185],{"class":86},[69,149457,27280],{"class":82},[69,149459,149460],{"class":86}," raw_data:\n",[69,149462,149463,149466,149468,149471,149473],{"class":71,"line":497},[69,149464,149465],{"class":86},"    value ",[69,149467,1019],{"class":82},[69,149469,149470],{"class":86}," item.get(",[69,149472,149372],{"class":1022},[69,149474,1404],{"class":86},[69,149476,149477,149479,149481],{"class":71,"line":502},[69,149478,4345],{"class":82},[69,149480,40166],{"class":82},[69,149482,149483],{"class":86}," value:\n",[69,149485,149486],{"class":71,"line":509},[69,149487,149488],{"class":82},"        continue\n",[69,149490,149491],{"class":71,"line":524},[69,149492,3644],{"emptyLinePlaceholder":1325},[69,149494,149495,149497,149499],{"class":71,"line":2888},[69,149496,149195],{"class":86},[69,149498,148973],{"class":1022},[69,149500,5901],{"class":86},[69,149502,149503,149506,149508],{"class":71,"line":2893},[69,149504,149505],{"class":86},"    sales.append(",[69,149507,1401],{"class":90},[69,149509,149510],{"class":86},"(value))\n",[69,149512,149513],{"class":71,"line":2899},[69,149514,3644],{"emptyLinePlaceholder":1325},[69,149516,149517,149519],{"class":71,"line":2919},[69,149518,31651],{"class":90},[69,149520,149521],{"class":86},"(dates)\n",[69,149523,149524,149526],{"class":71,"line":2924},[69,149525,31651],{"class":90},[69,149527,149528],{"class":86},"(sales)\n",[14,149530,149532],{"id":149531},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[59,149534,149536],{"className":31614,"code":149535,"language":31616,"meta":64,"style":64},"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",[66,149537,149538,149552,149562,149566,149574,149595,149617,149639,149661,149683,149687,149691,149713,149734,149738,149746,149750,149754,149764,149773,149783,149799,149803,149807,149824,149840,149856,149872,149882,149886],{"__ignoreMap":64},[69,149539,149540,149542,149544,149546,149548,149550],{"class":71,"line":72},[69,149541,31973],{"class":82},[69,149543,148355],{"class":86},[69,149545,31628],{"class":82},[69,149547,148360],{"class":86},[69,149549,32619],{"class":82},[69,149551,148365],{"class":86},[69,149553,149554,149556,149558,149560],{"class":71,"line":79},[69,149555,31973],{"class":82},[69,149557,148214],{"class":86},[69,149559,31628],{"class":82},[69,149561,148219],{"class":86},[69,149563,149564],{"class":71,"line":106},[69,149565,3644],{"emptyLinePlaceholder":1325},[69,149567,149568,149570,149572],{"class":71,"line":116},[69,149569,149441],{"class":86},[69,149571,1019],{"class":82},[69,149573,56674],{"class":86},[69,149575,149576,149578,149580,149582,149585,149587,149589,149591,149593],{"class":71,"line":133},[69,149577,149361],{"class":86},[69,149579,148973],{"class":1022},[69,149581,94],{"class":86},[69,149583,149584],{"class":1022},"\"2024-10-01\"",[69,149586,13677],{"class":86},[69,149588,85305],{"class":1022},[69,149590,94],{"class":86},[69,149592,93244],{"class":90},[69,149594,6174],{"class":86},[69,149596,149597,149599,149601,149603,149606,149608,149610,149612,149615],{"class":71,"line":139},[69,149598,149361],{"class":86},[69,149600,148973],{"class":1022},[69,149602,94],{"class":86},[69,149604,149605],{"class":1022},"\"2024-10-02\"",[69,149607,13677],{"class":86},[69,149609,85305],{"class":1022},[69,149611,94],{"class":86},[69,149613,149614],{"class":90},"1800",[69,149616,6174],{"class":86},[69,149618,149619,149621,149623,149625,149628,149630,149632,149634,149637],{"class":71,"line":401},[69,149620,149361],{"class":86},[69,149622,148973],{"class":1022},[69,149624,94],{"class":86},[69,149626,149627],{"class":1022},"\"2024-10-03\"",[69,149629,13677],{"class":86},[69,149631,85305],{"class":1022},[69,149633,94],{"class":86},[69,149635,149636],{"class":90},"1500",[69,149638,6174],{"class":86},[69,149640,149641,149643,149645,149647,149650,149652,149654,149656,149659],{"class":71,"line":470},[69,149642,149361],{"class":86},[69,149644,148973],{"class":1022},[69,149646,94],{"class":86},[69,149648,149649],{"class":1022},"\"2024-10-04\"",[69,149651,13677],{"class":86},[69,149653,85305],{"class":1022},[69,149655,94],{"class":86},[69,149657,149658],{"class":90},"2100",[69,149660,6174],{"class":86},[69,149662,149663,149665,149667,149669,149672,149674,149676,149678,149681],{"class":71,"line":475},[69,149664,149361],{"class":86},[69,149666,148973],{"class":1022},[69,149668,94],{"class":86},[69,149670,149671],{"class":1022},"\"2024-10-05\"",[69,149673,13677],{"class":86},[69,149675,85305],{"class":1022},[69,149677,94],{"class":86},[69,149679,149680],{"class":90},"2600",[69,149682,6174],{"class":86},[69,149684,149685],{"class":71,"line":482},[69,149686,34482],{"class":86},[69,149688,149689],{"class":71,"line":497},[69,149690,3644],{"emptyLinePlaceholder":1325},[69,149692,149693,149695,149697,149700,149702,149704,149706,149708,149710],{"class":71,"line":502},[69,149694,148776],{"class":86},[69,149696,1019],{"class":82},[69,149698,149699],{"class":86}," [item[",[69,149701,148973],{"class":1022},[69,149703,5687],{"class":86},[69,149705,4269],{"class":82},[69,149707,149185],{"class":86},[69,149709,27280],{"class":82},[69,149711,149712],{"class":86}," sales]\n",[69,149714,149715,149718,149720,149722,149724,149726,149728,149730,149732],{"class":71,"line":509},[69,149716,149717],{"class":86},"amounts ",[69,149719,1019],{"class":82},[69,149721,149699],{"class":86},[69,149723,85305],{"class":1022},[69,149725,5687],{"class":86},[69,149727,4269],{"class":82},[69,149729,149185],{"class":86},[69,149731,27280],{"class":82},[69,149733,149712],{"class":86},[69,149735,149736],{"class":71,"line":524},[69,149737,3644],{"emptyLinePlaceholder":1325},[69,149739,149740,149742,149744],{"class":71,"line":2888},[69,149741,148228],{"class":86},[69,149743,1019],{"class":82},[69,149745,148233],{"class":86},[69,149747,149748],{"class":71,"line":2893},[69,149749,148817],{"class":86},[69,149751,149752],{"class":71,"line":2899},[69,149753,148625],{"class":86},[69,149755,149756,149758,149760,149762],{"class":71,"line":2919},[69,149757,148630],{"class":6458},[69,149759,1019],{"class":82},[69,149761,148271],{"class":1022},[69,149763,32702],{"class":86},[69,149765,149766,149768,149770],{"class":71,"line":2924},[69,149767,148641],{"class":6458},[69,149769,1019],{"class":82},[69,149771,149772],{"class":86},"amounts,\n",[69,149774,149775,149777,149779,149781],{"class":71,"line":2938},[69,149776,148670],{"class":6458},[69,149778,1019],{"class":82},[69,149780,32712],{"class":90},[69,149782,32702],{"class":86},[69,149784,149785,149787,149789,149791,149793,149795,149797],{"class":71,"line":2943},[69,149786,148681],{"class":6458},[69,149788,1019],{"class":82},[69,149790,148686],{"class":86},[69,149792,148689],{"class":6458},[69,149794,1019],{"class":82},[69,149796,32712],{"class":90},[69,149798,39283],{"class":86},[69,149800,149801],{"class":71,"line":2972},[69,149802,1404],{"class":86},[69,149804,149805],{"class":71,"line":2977},[69,149806,148444],{"class":86},[69,149808,149809,149811,149813,149815,149817,149819,149822],{"class":71,"line":2994},[69,149810,148449],{"class":6458},[69,149812,1019],{"class":82},[69,149814,148454],{"class":86},[69,149816,52640],{"class":6458},[69,149818,1019],{"class":82},[69,149820,149821],{"class":1022},"\"每日销售额\"",[69,149823,39283],{"class":86},[69,149825,149826,149828,149830,149832,149834,149836,149838],{"class":71,"line":2999},[69,149827,148468],{"class":6458},[69,149829,1019],{"class":82},[69,149831,148473],{"class":86},[69,149833,81031],{"class":6458},[69,149835,1019],{"class":82},[69,149837,148480],{"class":1022},[69,149839,39283],{"class":86},[69,149841,149842,149844,149846,149848,149850,149852,149854],{"class":71,"line":3004},[69,149843,148487],{"class":6458},[69,149845,1019],{"class":82},[69,149847,148473],{"class":86},[69,149849,81031],{"class":6458},[69,149851,1019],{"class":82},[69,149853,148498],{"class":1022},[69,149855,39283],{"class":86},[69,149857,149858,149860,149862,149864,149866,149868,149870],{"class":71,"line":3009},[69,149859,148505],{"class":6458},[69,149861,1019],{"class":82},[69,149863,148510],{"class":86},[69,149865,148513],{"class":6458},[69,149867,1019],{"class":82},[69,149869,148518],{"class":1022},[69,149871,39283],{"class":86},[69,149873,149874,149877,149879],{"class":71,"line":3023},[69,149875,149876],{"class":6458},"    datazoom_opts",[69,149878,1019],{"class":82},[69,149880,149881],{"class":86},"[opts.DataZoomOpts()],\n",[69,149883,149884],{"class":71,"line":3028},[69,149885,1404],{"class":86},[69,149887,149888,149890,149893],{"class":71,"line":3821},[69,149889,148300],{"class":86},[69,149891,149892],{"class":1022},"\"daily_sales.html\"",[69,149894,1404],{"class":86},[29,149896,149897,149900],{},[66,149898,149899],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149902,149904],{"id":149903},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[29,149906,149907],{},"如果数据结构如下：",[59,149909,149911],{"className":31614,"code":149910,"language":31616,"meta":64,"style":64},"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",[66,149912,149913,149921,149929,149951,149972,149977,149984,150004,150024,150028],{"__ignoreMap":64},[69,149914,149915,149917,149919],{"class":71,"line":72},[69,149916,102879],{"class":86},[69,149918,1019],{"class":82},[69,149920,113],{"class":86},[69,149922,149923,149926],{"class":71,"line":79},[69,149924,149925],{"class":1022},"    \"北京\"",[69,149927,149928],{"class":86},": [\n",[69,149930,149931,149933,149935,149937,149940,149942,149945,149947,149949],{"class":71,"line":106},[69,149932,6161],{"class":86},[69,149934,148973],{"class":1022},[69,149936,94],{"class":86},[69,149938,149939],{"class":1022},"\"2024-01-01\"",[69,149941,13677],{"class":86},[69,149943,149944],{"class":1022},"\"confirm\"",[69,149946,94],{"class":86},[69,149948,390],{"class":90},[69,149950,6174],{"class":86},[69,149952,149953,149955,149957,149959,149962,149964,149966,149968,149970],{"class":71,"line":116},[69,149954,6161],{"class":86},[69,149956,148973],{"class":1022},[69,149958,94],{"class":86},[69,149960,149961],{"class":1022},"\"2024-01-02\"",[69,149963,13677],{"class":86},[69,149965,149944],{"class":1022},[69,149967,94],{"class":86},[69,149969,1886],{"class":90},[69,149971,6174],{"class":86},[69,149973,149974],{"class":71,"line":133},[69,149975,149976],{"class":86},"    ],\n",[69,149978,149979,149982],{"class":71,"line":139},[69,149980,149981],{"class":1022},"    \"上海\"",[69,149983,149928],{"class":86},[69,149985,149986,149988,149990,149992,149994,149996,149998,150000,150002],{"class":71,"line":401},[69,149987,6161],{"class":86},[69,149989,148973],{"class":1022},[69,149991,94],{"class":86},[69,149993,149939],{"class":1022},[69,149995,13677],{"class":86},[69,149997,149944],{"class":1022},[69,149999,94],{"class":86},[69,150001,1784],{"class":90},[69,150003,6174],{"class":86},[69,150005,150006,150008,150010,150012,150014,150016,150018,150020,150022],{"class":71,"line":470},[69,150007,6161],{"class":86},[69,150009,148973],{"class":1022},[69,150011,94],{"class":86},[69,150013,149961],{"class":1022},[69,150015,13677],{"class":86},[69,150017,149944],{"class":1022},[69,150019,94],{"class":86},[69,150021,1911],{"class":90},[69,150023,6174],{"class":86},[69,150025,150026],{"class":71,"line":475},[69,150027,149976],{"class":86},[69,150029,150030],{"class":71,"line":482},[69,150031,142],{"class":86},[29,150033,150034],{},"绘制多地区趋势：",[59,150036,150038],{"className":31614,"code":150037,"language":31616,"meta":64,"style":64},"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",[66,150039,150040,150054,150064,150068,150093,150097,150105,150109,150113,150125,150147,150160,150164,150168,150185,150201,150205],{"__ignoreMap":64},[69,150041,150042,150044,150046,150048,150050,150052],{"class":71,"line":72},[69,150043,31973],{"class":82},[69,150045,148355],{"class":86},[69,150047,31628],{"class":82},[69,150049,148360],{"class":86},[69,150051,32619],{"class":82},[69,150053,148365],{"class":86},[69,150055,150056,150058,150060,150062],{"class":71,"line":79},[69,150057,31973],{"class":82},[69,150059,148214],{"class":86},[69,150061,31628],{"class":82},[69,150063,148219],{"class":86},[69,150065,150066],{"class":71,"line":106},[69,150067,3644],{"emptyLinePlaceholder":1325},[69,150069,150070,150072,150074,150076,150078,150080,150082,150084,150086,150089,150091],{"class":71,"line":116},[69,150071,148776],{"class":86},[69,150073,1019],{"class":82},[69,150075,149699],{"class":86},[69,150077,148973],{"class":1022},[69,150079,5687],{"class":86},[69,150081,4269],{"class":82},[69,150083,149185],{"class":86},[69,150085,27280],{"class":82},[69,150087,150088],{"class":86}," data[",[69,150090,70494],{"class":1022},[69,150092,78748],{"class":86},[69,150094,150095],{"class":71,"line":133},[69,150096,3644],{"emptyLinePlaceholder":1325},[69,150098,150099,150101,150103],{"class":71,"line":139},[69,150100,148228],{"class":86},[69,150102,1019],{"class":82},[69,150104,148233],{"class":86},[69,150106,150107],{"class":71,"line":401},[69,150108,148817],{"class":86},[69,150110,150111],{"class":71,"line":470},[69,150112,3644],{"emptyLinePlaceholder":1325},[69,150114,150115,150117,150120,150122],{"class":71,"line":475},[69,150116,4269],{"class":82},[69,150118,150119],{"class":86}," city, records ",[69,150121,27280],{"class":82},[69,150123,150124],{"class":86}," data.items():\n",[69,150126,150127,150130,150132,150134,150136,150138,150140,150142,150144],{"class":71,"line":482},[69,150128,150129],{"class":86},"    values ",[69,150131,1019],{"class":82},[69,150133,149699],{"class":86},[69,150135,149944],{"class":1022},[69,150137,5687],{"class":86},[69,150139,4269],{"class":82},[69,150141,149185],{"class":86},[69,150143,27280],{"class":82},[69,150145,150146],{"class":86}," records]\n",[69,150148,150149,150152,150154,150156,150158],{"class":71,"line":497},[69,150150,150151],{"class":86},"    line.add_yaxis(city, values, ",[69,150153,148721],{"class":6458},[69,150155,1019],{"class":82},[69,150157,32712],{"class":90},[69,150159,1404],{"class":86},[69,150161,150162],{"class":71,"line":502},[69,150163,3644],{"emptyLinePlaceholder":1325},[69,150165,150166],{"class":71,"line":509},[69,150167,148444],{"class":86},[69,150169,150170,150172,150174,150176,150178,150180,150183],{"class":71,"line":524},[69,150171,148449],{"class":6458},[69,150173,1019],{"class":82},[69,150175,148454],{"class":86},[69,150177,52640],{"class":6458},[69,150179,1019],{"class":82},[69,150181,150182],{"class":1022},"\"多地区趋势图\"",[69,150184,39283],{"class":86},[69,150186,150187,150189,150191,150193,150195,150197,150199],{"class":71,"line":2888},[69,150188,148505],{"class":6458},[69,150190,1019],{"class":82},[69,150192,148510],{"class":86},[69,150194,148513],{"class":6458},[69,150196,1019],{"class":82},[69,150198,148518],{"class":1022},[69,150200,39283],{"class":86},[69,150202,150203],{"class":71,"line":2893},[69,150204,1404],{"class":86},[69,150206,150207,150209,150212],{"class":71,"line":2899},[69,150208,148300],{"class":86},[69,150210,150211],{"class":1022},"\"trend.html\"",[69,150213,1404],{"class":86},[29,150215,150216],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150218,150220],{"id":150219},"_1012-易错点","10.12 易错点",[37,150222,150223,150229,150235,150245,150251],{},[40,150224,150225,150228],{},[66,150226,150227],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[40,150230,150231,150234],{},[66,150232,150233],{},"render()"," 生成的是 HTML，不是图片。",[40,150236,150237,150238,150241,150242,29621],{},"JSON 字符串用 ",[66,150239,150240],{},"json.loads()","，JSON 文件用 ",[66,150243,150244],{},"json.load()",[40,150246,150247,150248,29621],{},"中文 JSON 保存时加 ",[66,150249,150250],{},"ensure_ascii=False",[40,150252,150253],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150255,150257],{"id":150256},"_1013-本章练习","10.13 本章练习",[37,150259,150260,150263,150266,150269,150272],{},[40,150261,150262],{},"安装 pyecharts 并生成第一个折线图。",[40,150264,150265],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[40,150267,150268],{},"绘制两条折线，对比线上和线下销售额。",[40,150270,150271],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[40,150273,150274],{},"对含有空值的销售数据进行清洗后再绘图。",[1297,150276,150277],{},"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":64,"searchDepth":79,"depth":79,"links":150279},[150280,150281,150282,150283,150284,150285,150286,150287,150288,150289,150290,150291,150292],{"id":147896,"depth":79,"text":147897},{"id":147971,"depth":79,"text":147972},{"id":148150,"depth":79,"text":148151},{"id":148201,"depth":79,"text":148202},{"id":148335,"depth":79,"text":148336},{"id":148611,"depth":79,"text":148612},{"id":148737,"depth":79,"text":148738},{"id":148948,"depth":79,"text":148949},{"id":149319,"depth":79,"text":149320},{"id":149531,"depth":79,"text":149532},{"id":149903,"depth":79,"text":149904},{"id":150219,"depth":79,"text":150220},{"id":150256,"depth":79,"text":150257},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147888,"description":1322},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150299,"title":150300,"body":150301,"description":1322,"extension":1323,"meta":152661,"navigation":1325,"path":152662,"seo":152663,"stem":152664,"__hash__":152665},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150302,"toc":152638},[150303,150306,150310,150313,150316,150392,150395,150486,150489,150493,150496,150540,150553,150557,150560,150627,150630,150634,150637,150721,150729,150733,150738,150879,150882,150893,150899,150905,151019,151023,151026,151029,151282,151285,151289,151292,151396,151399,151403,151554,151558,151565,151678,151682,151685,151791,151794,151798,151801,151832,151835,151940,151943,151947,151951,151961,152029,152033,152040,152104,152107,152111,152117,152213,152222,152226,152550,152559,152563,152591,152595,152635],[10,150304,150300],{"id":150305},"_11-面向对象基础",[14,150307,150309],{"id":150308},"_111-什么是面向对象","11.1 什么是面向对象",[29,150311,150312],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[29,150314,150315],{},"面向过程：",[59,150317,150319],{"className":31614,"code":150318,"language":31616,"meta":64,"style":64},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[66,150320,150321,150330,150338,150342,150352,150383,150387],{"__ignoreMap":64},[69,150322,150323,150325,150327],{"class":71,"line":72},[69,150324,147512],{"class":86},[69,150326,1019],{"class":82},[69,150328,150329],{"class":1022}," \"小明\"\n",[69,150331,150332,150334,150336],{"class":71,"line":79},[69,150333,147522],{"class":86},[69,150335,1019],{"class":82},[69,150337,147527],{"class":90},[69,150339,150340],{"class":71,"line":106},[69,150341,3644],{"emptyLinePlaceholder":1325},[69,150343,150344,150346,150349],{"class":71,"line":116},[69,150345,33183],{"class":82},[69,150347,150348],{"class":109}," introduce",[69,150350,150351],{"class":86},"(name, age):\n",[69,150353,150354,150356,150358,150360,150363,150365,150367,150369,150372,150374,150376,150378,150381],{"class":71,"line":133},[69,150355,32535],{"class":90},[69,150357,1398],{"class":86},[69,150359,1447],{"class":82},[69,150361,150362],{"class":1022},"\"我叫",[69,150364,2283],{"class":90},[69,150366,81031],{"class":86},[69,150368,2332],{"class":90},[69,150370,150371],{"class":1022},"，今年",[69,150373,2283],{"class":90},[69,150375,71446],{"class":86},[69,150377,2332],{"class":90},[69,150379,150380],{"class":1022},"岁\"",[69,150382,1404],{"class":86},[69,150384,150385],{"class":71,"line":139},[69,150386,3644],{"emptyLinePlaceholder":1325},[69,150388,150389],{"class":71,"line":401},[69,150390,150391],{"class":86},"introduce(name, age)\n",[29,150393,150394],{},"面向对象：",[59,150396,150398],{"className":31614,"code":150397,"language":31616,"meta":64,"style":64},"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",[66,150399,150400,150408,150416,150445,150449,150453,150463,150472,150481],{"__ignoreMap":64},[69,150401,150402,150404,150406],{"class":71,"line":72},[69,150403,15934],{"class":82},[69,150405,9140],{"class":109},[69,150407,4983],{"class":86},[69,150409,150410,150412,150414],{"class":71,"line":79},[69,150411,32037],{"class":82},[69,150413,150348],{"class":109},[69,150415,32043],{"class":86},[69,150417,150418,150420,150422,150424,150426,150429,150431,150433,150435,150437,150439,150441,150443],{"class":71,"line":106},[69,150419,33687],{"class":90},[69,150421,1398],{"class":86},[69,150423,1447],{"class":82},[69,150425,150362],{"class":1022},[69,150427,150428],{"class":90},"{self",[69,150430,81522],{"class":86},[69,150432,2332],{"class":90},[69,150434,150371],{"class":1022},[69,150436,150428],{"class":90},[69,150438,81534],{"class":86},[69,150440,2332],{"class":90},[69,150442,150380],{"class":1022},[69,150444,1404],{"class":86},[69,150446,150447],{"class":71,"line":116},[69,150448,3644],{"emptyLinePlaceholder":1325},[69,150450,150451],{"class":71,"line":133},[69,150452,3644],{"emptyLinePlaceholder":1325},[69,150454,150455,150458,150460],{"class":71,"line":139},[69,150456,150457],{"class":86},"student ",[69,150459,1019],{"class":82},[69,150461,150462],{"class":86}," Student()\n",[69,150464,150465,150468,150470],{"class":71,"line":401},[69,150466,150467],{"class":86},"student.name ",[69,150469,1019],{"class":82},[69,150471,150329],{"class":1022},[69,150473,150474,150477,150479],{"class":71,"line":470},[69,150475,150476],{"class":86},"student.age ",[69,150478,1019],{"class":82},[69,150480,147527],{"class":90},[69,150482,150483],{"class":71,"line":475},[69,150484,150485],{"class":86},"student.introduce()\n",[29,150487,150488],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150490,150492],{"id":150491},"_112-类和对象","11.2 类和对象",[29,150494,150495],{},"类是模板，对象是根据模板创建出来的具体实例。",[59,150497,150499],{"className":31614,"code":150498,"language":31616,"meta":64,"style":64},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[66,150500,150501,150509,150514,150518,150522,150531],{"__ignoreMap":64},[69,150502,150503,150505,150507],{"class":71,"line":72},[69,150504,15934],{"class":82},[69,150506,9140],{"class":109},[69,150508,4983],{"class":86},[69,150510,150511],{"class":71,"line":79},[69,150512,150513],{"class":82},"    pass\n",[69,150515,150516],{"class":71,"line":106},[69,150517,3644],{"emptyLinePlaceholder":1325},[69,150519,150520],{"class":71,"line":116},[69,150521,3644],{"emptyLinePlaceholder":1325},[69,150523,150524,150527,150529],{"class":71,"line":133},[69,150525,150526],{"class":86},"student1 ",[69,150528,1019],{"class":82},[69,150530,150462],{"class":86},[69,150532,150533,150536,150538],{"class":71,"line":139},[69,150534,150535],{"class":86},"student2 ",[69,150537,1019],{"class":82},[69,150539,150462],{"class":86},[29,150541,150542,150545,150546,102239,150549,150552],{},[66,150543,150544],{},"Student"," 是类，",[66,150547,150548],{},"student1",[66,150550,150551],{},"student2"," 是对象。",[14,150554,150556],{"id":150555},"_113-属性","11.3 属性",[29,150558,150559],{},"属性是对象保存的数据。",[59,150561,150563],{"className":31614,"code":150562,"language":31616,"meta":64,"style":64},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[66,150564,150565,150573,150577,150581,150585,150593,150601,150609,150613,150620],{"__ignoreMap":64},[69,150566,150567,150569,150571],{"class":71,"line":72},[69,150568,15934],{"class":82},[69,150570,9140],{"class":109},[69,150572,4983],{"class":86},[69,150574,150575],{"class":71,"line":79},[69,150576,150513],{"class":82},[69,150578,150579],{"class":71,"line":106},[69,150580,3644],{"emptyLinePlaceholder":1325},[69,150582,150583],{"class":71,"line":116},[69,150584,3644],{"emptyLinePlaceholder":1325},[69,150586,150587,150589,150591],{"class":71,"line":133},[69,150588,150457],{"class":86},[69,150590,1019],{"class":82},[69,150592,150462],{"class":86},[69,150594,150595,150597,150599],{"class":71,"line":139},[69,150596,150467],{"class":86},[69,150598,1019],{"class":82},[69,150600,150329],{"class":1022},[69,150602,150603,150605,150607],{"class":71,"line":401},[69,150604,150476],{"class":86},[69,150606,1019],{"class":82},[69,150608,147527],{"class":90},[69,150610,150611],{"class":71,"line":470},[69,150612,3644],{"emptyLinePlaceholder":1325},[69,150614,150615,150617],{"class":71,"line":475},[69,150616,31651],{"class":90},[69,150618,150619],{"class":86},"(student.name)\n",[69,150621,150622,150624],{"class":71,"line":482},[69,150623,31651],{"class":90},[69,150625,150626],{"class":86},"(student.age)\n",[29,150628,150629],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150631,150633],{"id":150632},"_114-方法","11.4 方法",[29,150635,150636],{},"类中的函数叫方法。",[59,150638,150639],{"className":31614,"code":150397,"language":31616,"meta":64,"style":64},[66,150640,150641,150649,150657,150685,150689,150693,150701,150709,150717],{"__ignoreMap":64},[69,150642,150643,150645,150647],{"class":71,"line":72},[69,150644,15934],{"class":82},[69,150646,9140],{"class":109},[69,150648,4983],{"class":86},[69,150650,150651,150653,150655],{"class":71,"line":79},[69,150652,32037],{"class":82},[69,150654,150348],{"class":109},[69,150656,32043],{"class":86},[69,150658,150659,150661,150663,150665,150667,150669,150671,150673,150675,150677,150679,150681,150683],{"class":71,"line":106},[69,150660,33687],{"class":90},[69,150662,1398],{"class":86},[69,150664,1447],{"class":82},[69,150666,150362],{"class":1022},[69,150668,150428],{"class":90},[69,150670,81522],{"class":86},[69,150672,2332],{"class":90},[69,150674,150371],{"class":1022},[69,150676,150428],{"class":90},[69,150678,81534],{"class":86},[69,150680,2332],{"class":90},[69,150682,150380],{"class":1022},[69,150684,1404],{"class":86},[69,150686,150687],{"class":71,"line":116},[69,150688,3644],{"emptyLinePlaceholder":1325},[69,150690,150691],{"class":71,"line":133},[69,150692,3644],{"emptyLinePlaceholder":1325},[69,150694,150695,150697,150699],{"class":71,"line":139},[69,150696,150457],{"class":86},[69,150698,1019],{"class":82},[69,150700,150462],{"class":86},[69,150702,150703,150705,150707],{"class":71,"line":401},[69,150704,150467],{"class":86},[69,150706,1019],{"class":82},[69,150708,150329],{"class":1022},[69,150710,150711,150713,150715],{"class":71,"line":470},[69,150712,150476],{"class":86},[69,150714,1019],{"class":82},[69,150716,147527],{"class":90},[69,150718,150719],{"class":71,"line":475},[69,150720,150485],{"class":86},[29,150722,150723,150725,150726,150728],{},[66,150724,32059],{}," 表示当前对象。调用方法时不需要手动传入 ",[66,150727,32059],{},"，Python 会自动传。",[14,150730,150732],{"id":150731},"_115-构造方法__init__","11.5 构造方法__init__",[29,150734,150735,150737],{},[66,150736,32065],{}," 在对象创建时自动执行，用于初始化属性。",[59,150739,150741],{"className":31614,"code":150740,"language":31616,"meta":64,"style":64},"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",[66,150742,150743,150751,150760,150772,150784,150795,150799,150807,150845,150849,150853,150875],{"__ignoreMap":64},[69,150744,150745,150747,150749],{"class":71,"line":72},[69,150746,15934],{"class":82},[69,150748,9140],{"class":109},[69,150750,4983],{"class":86},[69,150752,150753,150755,150757],{"class":71,"line":79},[69,150754,32037],{"class":82},[69,150756,32040],{"class":90},[69,150758,150759],{"class":86},"(self, name, age, score):\n",[69,150761,150762,150764,150767,150769],{"class":71,"line":106},[69,150763,32081],{"class":90},[69,150765,150766],{"class":86},".name ",[69,150768,1019],{"class":82},[69,150770,150771],{"class":86}," name\n",[69,150773,150774,150776,150779,150781],{"class":71,"line":116},[69,150775,32081],{"class":90},[69,150777,150778],{"class":86},".age ",[69,150780,1019],{"class":82},[69,150782,150783],{"class":86}," age\n",[69,150785,150786,150788,150791,150793],{"class":71,"line":133},[69,150787,32081],{"class":90},[69,150789,150790],{"class":86},".score ",[69,150792,1019],{"class":82},[69,150794,2829],{"class":86},[69,150796,150797],{"class":71,"line":139},[69,150798,3644],{"emptyLinePlaceholder":1325},[69,150800,150801,150803,150805],{"class":71,"line":401},[69,150802,32037],{"class":82},[69,150804,150348],{"class":109},[69,150806,32043],{"class":86},[69,150808,150809,150811,150813,150815,150817,150819,150821,150823,150825,150827,150829,150831,150834,150836,150839,150841,150843],{"class":71,"line":470},[69,150810,33687],{"class":90},[69,150812,1398],{"class":86},[69,150814,1447],{"class":82},[69,150816,150362],{"class":1022},[69,150818,150428],{"class":90},[69,150820,81522],{"class":86},[69,150822,2332],{"class":90},[69,150824,150371],{"class":1022},[69,150826,150428],{"class":90},[69,150828,81534],{"class":86},[69,150830,2332],{"class":90},[69,150832,150833],{"class":1022},"岁，成绩",[69,150835,150428],{"class":90},[69,150837,150838],{"class":86},".score",[69,150840,2332],{"class":90},[69,150842,1642],{"class":1022},[69,150844,1404],{"class":86},[69,150846,150847],{"class":71,"line":475},[69,150848,3644],{"emptyLinePlaceholder":1325},[69,150850,150851],{"class":71,"line":482},[69,150852,3644],{"emptyLinePlaceholder":1325},[69,150854,150855,150857,150859,150862,150865,150867,150869,150871,150873],{"class":71,"line":497},[69,150856,150457],{"class":86},[69,150858,1019],{"class":82},[69,150860,150861],{"class":86}," Student(",[69,150863,150864],{"class":1022},"\"小明\"",[69,150866,13677],{"class":86},[69,150868,2037],{"class":90},[69,150870,13677],{"class":86},[69,150872,2375],{"class":90},[69,150874,1404],{"class":86},[69,150876,150877],{"class":71,"line":502},[69,150878,150485],{"class":86},[29,150880,150881],{},"构造方法的好处：",[37,150883,150884,150887,150890],{},[40,150885,150886],{},"创建对象时必须提供必要数据。",[40,150888,150889],{},"属性初始化集中，不容易漏。",[40,150891,150892],{},"对象状态更完整。",[14,150894,150896,150897],{"id":150895},"_116-str","11.6 ",[195,150898,2554],{},[29,150900,150901,150902,29621],{},"直接打印对象时，默认输出不直观。可以定义 ",[66,150903,150904],{},"__str__",[59,150906,150908],{"className":31614,"code":150907,"language":31616,"meta":64,"style":64},"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",[66,150909,150910,150918,150927,150937,150947,150951,150960,150988,150992,150996,151012],{"__ignoreMap":64},[69,150911,150912,150914,150916],{"class":71,"line":72},[69,150913,15934],{"class":82},[69,150915,9140],{"class":109},[69,150917,4983],{"class":86},[69,150919,150920,150922,150924],{"class":71,"line":79},[69,150921,32037],{"class":82},[69,150923,32040],{"class":90},[69,150925,150926],{"class":86},"(self, name, age):\n",[69,150928,150929,150931,150933,150935],{"class":71,"line":106},[69,150930,32081],{"class":90},[69,150932,150766],{"class":86},[69,150934,1019],{"class":82},[69,150936,150771],{"class":86},[69,150938,150939,150941,150943,150945],{"class":71,"line":116},[69,150940,32081],{"class":90},[69,150942,150778],{"class":86},[69,150944,1019],{"class":82},[69,150946,150783],{"class":86},[69,150948,150949],{"class":71,"line":133},[69,150950,3644],{"emptyLinePlaceholder":1325},[69,150952,150953,150955,150958],{"class":71,"line":139},[69,150954,32037],{"class":82},[69,150956,150957],{"class":90}," __str__",[69,150959,32043],{"class":86},[69,150961,150962,150964,150967,150970,150972,150974,150976,150979,150981,150983,150985],{"class":71,"line":401},[69,150963,15992],{"class":82},[69,150965,150966],{"class":82}," f",[69,150968,150969],{"class":1022},"\"Student(name=",[69,150971,150428],{"class":90},[69,150973,81522],{"class":86},[69,150975,2332],{"class":90},[69,150977,150978],{"class":1022},", age=",[69,150980,150428],{"class":90},[69,150982,81534],{"class":86},[69,150984,2332],{"class":90},[69,150986,150987],{"class":1022},")\"\n",[69,150989,150990],{"class":71,"line":470},[69,150991,3644],{"emptyLinePlaceholder":1325},[69,150993,150994],{"class":71,"line":475},[69,150995,3644],{"emptyLinePlaceholder":1325},[69,150997,150998,151000,151002,151004,151006,151008,151010],{"class":71,"line":482},[69,150999,150457],{"class":86},[69,151001,1019],{"class":82},[69,151003,150861],{"class":86},[69,151005,150864],{"class":1022},[69,151007,13677],{"class":86},[69,151009,2037],{"class":90},[69,151011,1404],{"class":86},[69,151013,151014,151016],{"class":71,"line":497},[69,151015,31651],{"class":90},[69,151017,151018],{"class":86},"(student)\n",[14,151020,151022],{"id":151021},"_117-封装","11.7 封装",[29,151024,151025],{},"封装就是把数据和方法放到类中，并控制访问方式。",[29,151027,151028],{},"Python 中以双下划线开头的属性通常视为私有属性。",[59,151030,151032],{"className":31614,"code":151031,"language":31616,"meta":64,"style":64},"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",[66,151033,151034,151043,151052,151064,151076,151080,151089,151098,151102,151112,151125,151136,151141,151152,151156,151165,151177,151188,151192,151205,151216,151220,151231,151235,151239,151257,151266,151275],{"__ignoreMap":64},[69,151035,151036,151038,151041],{"class":71,"line":72},[69,151037,15934],{"class":82},[69,151039,151040],{"class":109}," Account",[69,151042,4983],{"class":86},[69,151044,151045,151047,151049],{"class":71,"line":79},[69,151046,32037],{"class":82},[69,151048,32040],{"class":90},[69,151050,151051],{"class":86},"(self, owner, balance):\n",[69,151053,151054,151056,151059,151061],{"class":71,"line":106},[69,151055,32081],{"class":90},[69,151057,151058],{"class":86},".owner ",[69,151060,1019],{"class":82},[69,151062,151063],{"class":86}," owner\n",[69,151065,151066,151068,151071,151073],{"class":71,"line":116},[69,151067,32081],{"class":90},[69,151069,151070],{"class":86},".__balance ",[69,151072,1019],{"class":82},[69,151074,151075],{"class":86}," balance\n",[69,151077,151078],{"class":71,"line":133},[69,151079,3644],{"emptyLinePlaceholder":1325},[69,151081,151082,151084,151087],{"class":71,"line":139},[69,151083,32037],{"class":82},[69,151085,151086],{"class":109}," get_balance",[69,151088,32043],{"class":86},[69,151090,151091,151093,151095],{"class":71,"line":401},[69,151092,15992],{"class":82},[69,151094,40109],{"class":90},[69,151096,151097],{"class":86},".__balance\n",[69,151099,151100],{"class":71,"line":470},[69,151101,3644],{"emptyLinePlaceholder":1325},[69,151103,151104,151106,151109],{"class":71,"line":475},[69,151105,32037],{"class":82},[69,151107,151108],{"class":109}," deposit",[69,151110,151111],{"class":86},"(self, money):\n",[69,151113,151114,151116,151119,151121,151123],{"class":71,"line":482},[69,151115,3741],{"class":82},[69,151117,151118],{"class":86}," money ",[69,151120,2838],{"class":82},[69,151122,5337],{"class":90},[69,151124,4983],{"class":86},[69,151126,151127,151129,151131,151134],{"class":71,"line":497},[69,151128,35886],{"class":90},[69,151130,1398],{"class":86},[69,151132,151133],{"class":1022},"\"存款金额必须大于0\"",[69,151135,1404],{"class":86},[69,151137,151138],{"class":71,"line":502},[69,151139,151140],{"class":82},"            return\n",[69,151142,151143,151145,151147,151149],{"class":71,"line":509},[69,151144,32081],{"class":90},[69,151146,151070],{"class":86},[69,151148,10719],{"class":82},[69,151150,151151],{"class":86}," money\n",[69,151153,151154],{"class":71,"line":524},[69,151155,3644],{"emptyLinePlaceholder":1325},[69,151157,151158,151160,151163],{"class":71,"line":2888},[69,151159,32037],{"class":82},[69,151161,151162],{"class":109}," withdraw",[69,151164,151111],{"class":86},[69,151166,151167,151169,151171,151173,151175],{"class":71,"line":2893},[69,151168,3741],{"class":82},[69,151170,151118],{"class":86},[69,151172,2838],{"class":82},[69,151174,5337],{"class":90},[69,151176,4983],{"class":86},[69,151178,151179,151181,151183,151186],{"class":71,"line":2899},[69,151180,35886],{"class":90},[69,151182,1398],{"class":86},[69,151184,151185],{"class":1022},"\"取款金额必须大于0\"",[69,151187,1404],{"class":86},[69,151189,151190],{"class":71,"line":2919},[69,151191,151140],{"class":82},[69,151193,151194,151196,151198,151200,151202],{"class":71,"line":2924},[69,151195,3741],{"class":82},[69,151197,151118],{"class":86},[69,151199,2346],{"class":82},[69,151201,40109],{"class":90},[69,151203,151204],{"class":86},".__balance:\n",[69,151206,151207,151209,151211,151214],{"class":71,"line":2938},[69,151208,35886],{"class":90},[69,151210,1398],{"class":86},[69,151212,151213],{"class":1022},"\"余额不足\"",[69,151215,1404],{"class":86},[69,151217,151218],{"class":71,"line":2943},[69,151219,151140],{"class":82},[69,151221,151222,151224,151226,151229],{"class":71,"line":2972},[69,151223,32081],{"class":90},[69,151225,151070],{"class":86},[69,151227,151228],{"class":82},"-=",[69,151230,151151],{"class":86},[69,151232,151233],{"class":71,"line":2977},[69,151234,3644],{"emptyLinePlaceholder":1325},[69,151236,151237],{"class":71,"line":2994},[69,151238,3644],{"emptyLinePlaceholder":1325},[69,151240,151241,151244,151246,151249,151251,151253,151255],{"class":71,"line":2999},[69,151242,151243],{"class":86},"account ",[69,151245,1019],{"class":82},[69,151247,151248],{"class":86}," Account(",[69,151250,150864],{"class":1022},[69,151252,13677],{"class":86},[69,151254,7652],{"class":90},[69,151256,1404],{"class":86},[69,151258,151259,151262,151264],{"class":71,"line":3004},[69,151260,151261],{"class":86},"account.deposit(",[69,151263,2967],{"class":90},[69,151265,1404],{"class":86},[69,151267,151268,151271,151273],{"class":71,"line":3009},[69,151269,151270],{"class":86},"account.withdraw(",[69,151272,124],{"class":90},[69,151274,1404],{"class":86},[69,151276,151277,151279],{"class":71,"line":3023},[69,151278,31651],{"class":90},[69,151280,151281],{"class":86},"(account.get_balance())\n",[29,151283,151284],{},"封装的意义是避免外部随意修改内部状态。",[14,151286,151288],{"id":151287},"_118-继承","11.8 继承",[29,151290,151291],{},"继承可以让子类复用父类的属性和方法。",[59,151293,151295],{"className":31614,"code":151294,"language":31616,"meta":64,"style":64},"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",[66,151296,151297,151306,151315,151326,151330,151334,151348,151357,151368,151372,151376,151386,151391],{"__ignoreMap":64},[69,151298,151299,151301,151304],{"class":71,"line":72},[69,151300,15934],{"class":82},[69,151302,151303],{"class":109}," Animal",[69,151305,4983],{"class":86},[69,151307,151308,151310,151313],{"class":71,"line":79},[69,151309,32037],{"class":82},[69,151311,151312],{"class":109}," eat",[69,151314,32043],{"class":86},[69,151316,151317,151319,151321,151324],{"class":71,"line":106},[69,151318,33687],{"class":90},[69,151320,1398],{"class":86},[69,151322,151323],{"class":1022},"\"吃东西\"",[69,151325,1404],{"class":86},[69,151327,151328],{"class":71,"line":116},[69,151329,3644],{"emptyLinePlaceholder":1325},[69,151331,151332],{"class":71,"line":133},[69,151333,3644],{"emptyLinePlaceholder":1325},[69,151335,151336,151338,151341,151343,151346],{"class":71,"line":139},[69,151337,15934],{"class":82},[69,151339,151340],{"class":109}," Dog",[69,151342,1398],{"class":86},[69,151344,151345],{"class":109},"Animal",[69,151347,32022],{"class":86},[69,151349,151350,151352,151355],{"class":71,"line":401},[69,151351,32037],{"class":82},[69,151353,151354],{"class":109}," bark",[69,151356,32043],{"class":86},[69,151358,151359,151361,151363,151366],{"class":71,"line":470},[69,151360,33687],{"class":90},[69,151362,1398],{"class":86},[69,151364,151365],{"class":1022},"\"汪汪\"",[69,151367,1404],{"class":86},[69,151369,151370],{"class":71,"line":475},[69,151371,3644],{"emptyLinePlaceholder":1325},[69,151373,151374],{"class":71,"line":482},[69,151375,3644],{"emptyLinePlaceholder":1325},[69,151377,151378,151381,151383],{"class":71,"line":497},[69,151379,151380],{"class":86},"dog ",[69,151382,1019],{"class":82},[69,151384,151385],{"class":86}," Dog()\n",[69,151387,151388],{"class":71,"line":502},[69,151389,151390],{"class":86},"dog.eat()\n",[69,151392,151393],{"class":71,"line":509},[69,151394,151395],{"class":86},"dog.bark()\n",[29,151397,151398],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151400,151402],{"id":151401},"_119-方法重写","11.9 方法重写",[59,151404,151406],{"className":31614,"code":151405,"language":31616,"meta":64,"style":64},"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",[66,151407,151408,151416,151425,151436,151440,151444,151456,151464,151474,151478,151482,151495,151503,151514,151518,151522,151530,151540,151544,151549],{"__ignoreMap":64},[69,151409,151410,151412,151414],{"class":71,"line":72},[69,151411,15934],{"class":82},[69,151413,151303],{"class":109},[69,151415,4983],{"class":86},[69,151417,151418,151420,151423],{"class":71,"line":79},[69,151419,32037],{"class":82},[69,151421,151422],{"class":109}," speak",[69,151424,32043],{"class":86},[69,151426,151427,151429,151431,151434],{"class":71,"line":106},[69,151428,33687],{"class":90},[69,151430,1398],{"class":86},[69,151432,151433],{"class":1022},"\"动物叫\"",[69,151435,1404],{"class":86},[69,151437,151438],{"class":71,"line":116},[69,151439,3644],{"emptyLinePlaceholder":1325},[69,151441,151442],{"class":71,"line":133},[69,151443,3644],{"emptyLinePlaceholder":1325},[69,151445,151446,151448,151450,151452,151454],{"class":71,"line":139},[69,151447,15934],{"class":82},[69,151449,151340],{"class":109},[69,151451,1398],{"class":86},[69,151453,151345],{"class":109},[69,151455,32022],{"class":86},[69,151457,151458,151460,151462],{"class":71,"line":401},[69,151459,32037],{"class":82},[69,151461,151422],{"class":109},[69,151463,32043],{"class":86},[69,151465,151466,151468,151470,151472],{"class":71,"line":470},[69,151467,33687],{"class":90},[69,151469,1398],{"class":86},[69,151471,151365],{"class":1022},[69,151473,1404],{"class":86},[69,151475,151476],{"class":71,"line":475},[69,151477,3644],{"emptyLinePlaceholder":1325},[69,151479,151480],{"class":71,"line":482},[69,151481,3644],{"emptyLinePlaceholder":1325},[69,151483,151484,151486,151489,151491,151493],{"class":71,"line":497},[69,151485,15934],{"class":82},[69,151487,151488],{"class":109}," Cat",[69,151490,1398],{"class":86},[69,151492,151345],{"class":109},[69,151494,32022],{"class":86},[69,151496,151497,151499,151501],{"class":71,"line":502},[69,151498,32037],{"class":82},[69,151500,151422],{"class":109},[69,151502,32043],{"class":86},[69,151504,151505,151507,151509,151512],{"class":71,"line":509},[69,151506,33687],{"class":90},[69,151508,1398],{"class":86},[69,151510,151511],{"class":1022},"\"喵喵\"",[69,151513,1404],{"class":86},[69,151515,151516],{"class":71,"line":524},[69,151517,3644],{"emptyLinePlaceholder":1325},[69,151519,151520],{"class":71,"line":2888},[69,151521,3644],{"emptyLinePlaceholder":1325},[69,151523,151524,151526,151528],{"class":71,"line":2893},[69,151525,151380],{"class":86},[69,151527,1019],{"class":82},[69,151529,151385],{"class":86},[69,151531,151532,151535,151537],{"class":71,"line":2899},[69,151533,151534],{"class":86},"cat ",[69,151536,1019],{"class":82},[69,151538,151539],{"class":86}," Cat()\n",[69,151541,151542],{"class":71,"line":2919},[69,151543,3644],{"emptyLinePlaceholder":1325},[69,151545,151546],{"class":71,"line":2924},[69,151547,151548],{"class":86},"dog.speak()\n",[69,151550,151551],{"class":71,"line":2938},[69,151552,151553],{"class":86},"cat.speak()\n",[14,151555,151557],{"id":151556},"_1110-super","11.10 super",[29,151559,151560,151561,151564],{},"子类可以通过 ",[66,151562,151563],{},"super()"," 调用父类方法。",[59,151566,151568],{"className":31614,"code":151567,"language":31616,"meta":64,"style":64},"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",[66,151569,151570,151578,151587,151597,151601,151605,151617,151626,151637,151647,151651,151655,151671],{"__ignoreMap":64},[69,151571,151572,151574,151576],{"class":71,"line":72},[69,151573,15934],{"class":82},[69,151575,16809],{"class":109},[69,151577,4983],{"class":86},[69,151579,151580,151582,151584],{"class":71,"line":79},[69,151581,32037],{"class":82},[69,151583,32040],{"class":90},[69,151585,151586],{"class":86},"(self, name):\n",[69,151588,151589,151591,151593,151595],{"class":71,"line":106},[69,151590,32081],{"class":90},[69,151592,150766],{"class":86},[69,151594,1019],{"class":82},[69,151596,150771],{"class":86},[69,151598,151599],{"class":71,"line":116},[69,151600,3644],{"emptyLinePlaceholder":1325},[69,151602,151603],{"class":71,"line":133},[69,151604,3644],{"emptyLinePlaceholder":1325},[69,151606,151607,151609,151611,151613,151615],{"class":71,"line":139},[69,151608,15934],{"class":82},[69,151610,9140],{"class":109},[69,151612,1398],{"class":86},[69,151614,20285],{"class":109},[69,151616,32022],{"class":86},[69,151618,151619,151621,151623],{"class":71,"line":401},[69,151620,32037],{"class":82},[69,151622,32040],{"class":90},[69,151624,151625],{"class":86},"(self, name, score):\n",[69,151627,151628,151630,151632,151634],{"class":71,"line":470},[69,151629,32053],{"class":90},[69,151631,18500],{"class":86},[69,151633,32065],{"class":90},[69,151635,151636],{"class":86},"(name)\n",[69,151638,151639,151641,151643,151645],{"class":71,"line":475},[69,151640,32081],{"class":90},[69,151642,150790],{"class":86},[69,151644,1019],{"class":82},[69,151646,2829],{"class":86},[69,151648,151649],{"class":71,"line":482},[69,151650,3644],{"emptyLinePlaceholder":1325},[69,151652,151653],{"class":71,"line":497},[69,151654,3644],{"emptyLinePlaceholder":1325},[69,151656,151657,151659,151661,151663,151665,151667,151669],{"class":71,"line":502},[69,151658,150457],{"class":86},[69,151660,1019],{"class":82},[69,151662,150861],{"class":86},[69,151664,150864],{"class":1022},[69,151666,13677],{"class":86},[69,151668,2375],{"class":90},[69,151670,1404],{"class":86},[69,151672,151673,151675],{"class":71,"line":509},[69,151674,31651],{"class":90},[69,151676,151677],{"class":86},"(student.name, student.score)\n",[14,151679,151681],{"id":151680},"_1111-多态","11.11 多态",[29,151683,151684],{},"多态指不同对象响应同一个方法，表现出不同结果。",[59,151686,151688],{"className":31614,"code":151687,"language":31616,"meta":64,"style":64},"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",[66,151689,151690,151698,151706,151716,151720,151724,151732,151740,151750,151754,151758,151768,151773,151777,151781,151786],{"__ignoreMap":64},[69,151691,151692,151694,151696],{"class":71,"line":72},[69,151693,15934],{"class":82},[69,151695,151340],{"class":109},[69,151697,4983],{"class":86},[69,151699,151700,151702,151704],{"class":71,"line":79},[69,151701,32037],{"class":82},[69,151703,151422],{"class":109},[69,151705,32043],{"class":86},[69,151707,151708,151710,151712,151714],{"class":71,"line":106},[69,151709,33687],{"class":90},[69,151711,1398],{"class":86},[69,151713,151365],{"class":1022},[69,151715,1404],{"class":86},[69,151717,151718],{"class":71,"line":116},[69,151719,3644],{"emptyLinePlaceholder":1325},[69,151721,151722],{"class":71,"line":133},[69,151723,3644],{"emptyLinePlaceholder":1325},[69,151725,151726,151728,151730],{"class":71,"line":139},[69,151727,15934],{"class":82},[69,151729,151488],{"class":109},[69,151731,4983],{"class":86},[69,151733,151734,151736,151738],{"class":71,"line":401},[69,151735,32037],{"class":82},[69,151737,151422],{"class":109},[69,151739,32043],{"class":86},[69,151741,151742,151744,151746,151748],{"class":71,"line":470},[69,151743,33687],{"class":90},[69,151745,1398],{"class":86},[69,151747,151511],{"class":1022},[69,151749,1404],{"class":86},[69,151751,151752],{"class":71,"line":475},[69,151753,3644],{"emptyLinePlaceholder":1325},[69,151755,151756],{"class":71,"line":482},[69,151757,3644],{"emptyLinePlaceholder":1325},[69,151759,151760,151762,151765],{"class":71,"line":497},[69,151761,33183],{"class":82},[69,151763,151764],{"class":109}," make_sound",[69,151766,151767],{"class":86},"(animal):\n",[69,151769,151770],{"class":71,"line":502},[69,151771,151772],{"class":86},"    animal.speak()\n",[69,151774,151775],{"class":71,"line":509},[69,151776,3644],{"emptyLinePlaceholder":1325},[69,151778,151779],{"class":71,"line":524},[69,151780,3644],{"emptyLinePlaceholder":1325},[69,151782,151783],{"class":71,"line":2888},[69,151784,151785],{"class":86},"make_sound(Dog())\n",[69,151787,151788],{"class":71,"line":2893},[69,151789,151790],{"class":86},"make_sound(Cat())\n",[29,151792,151793],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151795,151797],{"id":151796},"_1112-类属性和实例属性","11.12 类属性和实例属性",[29,151799,151800],{},"实例属性属于对象：",[59,151802,151804],{"className":31614,"code":151803,"language":31616,"meta":64,"style":64},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[66,151805,151806,151814,151822],{"__ignoreMap":64},[69,151807,151808,151810,151812],{"class":71,"line":72},[69,151809,15934],{"class":82},[69,151811,9140],{"class":109},[69,151813,4983],{"class":86},[69,151815,151816,151818,151820],{"class":71,"line":79},[69,151817,32037],{"class":82},[69,151819,32040],{"class":90},[69,151821,151586],{"class":86},[69,151823,151824,151826,151828,151830],{"class":71,"line":106},[69,151825,32081],{"class":90},[69,151827,150766],{"class":86},[69,151829,1019],{"class":82},[69,151831,150771],{"class":86},[29,151833,151834],{},"类属性属于类，所有对象共享：",[59,151836,151838],{"className":31614,"code":151837,"language":31616,"meta":64,"style":64},"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",[66,151839,151840,151848,151858,151862,151870,151880,151884,151888,151901,151915,151919,151926,151933],{"__ignoreMap":64},[69,151841,151842,151844,151846],{"class":71,"line":72},[69,151843,15934],{"class":82},[69,151845,9140],{"class":109},[69,151847,4983],{"class":86},[69,151849,151850,151853,151855],{"class":71,"line":79},[69,151851,151852],{"class":86},"    school ",[69,151854,1019],{"class":82},[69,151856,151857],{"class":1022}," \"黑马学校\"\n",[69,151859,151860],{"class":71,"line":106},[69,151861,3644],{"emptyLinePlaceholder":1325},[69,151863,151864,151866,151868],{"class":71,"line":116},[69,151865,32037],{"class":82},[69,151867,32040],{"class":90},[69,151869,151586],{"class":86},[69,151871,151872,151874,151876,151878],{"class":71,"line":133},[69,151873,32081],{"class":90},[69,151875,150766],{"class":86},[69,151877,1019],{"class":82},[69,151879,150771],{"class":86},[69,151881,151882],{"class":71,"line":139},[69,151883,3644],{"emptyLinePlaceholder":1325},[69,151885,151886],{"class":71,"line":401},[69,151887,3644],{"emptyLinePlaceholder":1325},[69,151889,151890,151893,151895,151897,151899],{"class":71,"line":470},[69,151891,151892],{"class":86},"s1 ",[69,151894,1019],{"class":82},[69,151896,150861],{"class":86},[69,151898,150864],{"class":1022},[69,151900,1404],{"class":86},[69,151902,151903,151906,151908,151910,151913],{"class":71,"line":475},[69,151904,151905],{"class":86},"s2 ",[69,151907,1019],{"class":82},[69,151909,150861],{"class":86},[69,151911,151912],{"class":1022},"\"小红\"",[69,151914,1404],{"class":86},[69,151916,151917],{"class":71,"line":482},[69,151918,3644],{"emptyLinePlaceholder":1325},[69,151920,151921,151923],{"class":71,"line":497},[69,151922,31651],{"class":90},[69,151924,151925],{"class":86},"(s1.school)\n",[69,151927,151928,151930],{"class":71,"line":502},[69,151929,31651],{"class":90},[69,151931,151932],{"class":86},"(s2.school)\n",[69,151934,151935,151937],{"class":71,"line":509},[69,151936,31651],{"class":90},[69,151938,151939],{"class":86},"(Student.school)\n",[29,151941,151942],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151944,151946],{"id":151945},"_1113-类方法和静态方法","11.13 类方法和静态方法",[19,151948,151950],{"id":151949},"_11131-类方法","11.13.1 类方法",[29,151952,151953,151954,151957,151958,29621],{},"类方法使用 ",[66,151955,151956],{},"@classmethod","，第一个参数通常是 ",[66,151959,151960],{},"cls",[59,151962,151964],{"className":31614,"code":151963,"language":31616,"meta":64,"style":64},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[66,151965,151966,151974,151982,151986,151994,152004,152014,152018,152022],{"__ignoreMap":64},[69,151967,151968,151970,151972],{"class":71,"line":72},[69,151969,15934],{"class":82},[69,151971,9140],{"class":109},[69,151973,4983],{"class":86},[69,151975,151976,151978,151980],{"class":71,"line":79},[69,151977,151852],{"class":86},[69,151979,1019],{"class":82},[69,151981,151857],{"class":1022},[69,151983,151984],{"class":71,"line":106},[69,151985,3644],{"emptyLinePlaceholder":1325},[69,151987,151988,151991],{"class":71,"line":116},[69,151989,151990],{"class":109},"    @",[69,151992,151993],{"class":90},"classmethod\n",[69,151995,151996,151998,152001],{"class":71,"line":133},[69,151997,32037],{"class":82},[69,151999,152000],{"class":109}," get_school",[69,152002,152003],{"class":86},"(cls):\n",[69,152005,152006,152008,152011],{"class":71,"line":139},[69,152007,15992],{"class":82},[69,152009,152010],{"class":90}," cls",[69,152012,152013],{"class":86},".school\n",[69,152015,152016],{"class":71,"line":401},[69,152017,3644],{"emptyLinePlaceholder":1325},[69,152019,152020],{"class":71,"line":470},[69,152021,3644],{"emptyLinePlaceholder":1325},[69,152023,152024,152026],{"class":71,"line":475},[69,152025,31651],{"class":90},[69,152027,152028],{"class":86},"(Student.get_school())\n",[19,152030,152032],{"id":152031},"_11132-静态方法","11.13.2 静态方法",[29,152034,152035,152036,152039],{},"静态方法使用 ",[66,152037,152038],{},"@staticmethod","，不需要访问实例和类。",[59,152041,152043],{"className":31614,"code":152042,"language":31616,"meta":64,"style":64},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[66,152044,152045,152054,152061,152070,152081,152085,152089],{"__ignoreMap":64},[69,152046,152047,152049,152052],{"class":71,"line":72},[69,152048,15934],{"class":82},[69,152050,152051],{"class":109}," MathUtils",[69,152053,4983],{"class":86},[69,152055,152056,152058],{"class":71,"line":79},[69,152057,151990],{"class":109},[69,152059,152060],{"class":90},"staticmethod\n",[69,152062,152063,152065,152067],{"class":71,"line":106},[69,152064,32037],{"class":82},[69,152066,6451],{"class":109},[69,152068,152069],{"class":86},"(a, b):\n",[69,152071,152072,152074,152076,152078],{"class":71,"line":116},[69,152073,15992],{"class":82},[69,152075,12111],{"class":86},[69,152077,1869],{"class":82},[69,152079,152080],{"class":86}," b\n",[69,152082,152083],{"class":71,"line":133},[69,152084,3644],{"emptyLinePlaceholder":1325},[69,152086,152087],{"class":71,"line":139},[69,152088,3644],{"emptyLinePlaceholder":1325},[69,152090,152091,152093,152096,152098,152100,152102],{"class":71,"line":401},[69,152092,31651],{"class":90},[69,152094,152095],{"class":86},"(MathUtils.add(",[69,152097,1609],{"class":90},[69,152099,13677],{"class":86},[69,152101,1471],{"class":90},[69,152103,31733],{"class":86},[29,152105,152106],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152108,152110],{"id":152109},"_1114-dataclass","11.14 dataclass",[29,152112,152113,152116],{},[66,152114,152115],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[59,152118,152120],{"className":31614,"code":152119,"language":31616,"meta":64,"style":64},"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",[66,152121,152122,152134,152138,152142,152147,152155,152163,152171,152179,152183,152187,152207],{"__ignoreMap":64},[69,152123,152124,152126,152129,152131],{"class":71,"line":72},[69,152125,31973],{"class":82},[69,152127,152128],{"class":86}," dataclasses ",[69,152130,31628],{"class":82},[69,152132,152133],{"class":86}," dataclass\n",[69,152135,152136],{"class":71,"line":79},[69,152137,3644],{"emptyLinePlaceholder":1325},[69,152139,152140],{"class":71,"line":106},[69,152141,3644],{"emptyLinePlaceholder":1325},[69,152143,152144],{"class":71,"line":116},[69,152145,152146],{"class":109},"@dataclass\n",[69,152148,152149,152151,152153],{"class":71,"line":133},[69,152150,15934],{"class":82},[69,152152,9140],{"class":109},[69,152154,4983],{"class":86},[69,152156,152157,152160],{"class":71,"line":139},[69,152158,152159],{"class":86},"    name: ",[69,152161,152162],{"class":90},"str\n",[69,152164,152165,152168],{"class":71,"line":401},[69,152166,152167],{"class":86},"    age: ",[69,152169,152170],{"class":90},"int\n",[69,152172,152173,152176],{"class":71,"line":470},[69,152174,152175],{"class":86},"    score: ",[69,152177,152178],{"class":90},"float\n",[69,152180,152181],{"class":71,"line":475},[69,152182,3644],{"emptyLinePlaceholder":1325},[69,152184,152185],{"class":71,"line":482},[69,152186,3644],{"emptyLinePlaceholder":1325},[69,152188,152189,152191,152193,152195,152197,152199,152201,152203,152205],{"class":71,"line":497},[69,152190,150457],{"class":86},[69,152192,1019],{"class":82},[69,152194,150861],{"class":86},[69,152196,150864],{"class":1022},[69,152198,13677],{"class":86},[69,152200,2037],{"class":90},[69,152202,13677],{"class":86},[69,152204,2375],{"class":90},[69,152206,1404],{"class":86},[69,152208,152209,152211],{"class":71,"line":502},[69,152210,31651],{"class":90},[69,152212,151018],{"class":86},[29,152214,152215,152216,1604,152218,152221],{},"它会自动生成 ",[66,152217,32065],{},[66,152219,152220],{},"__repr__"," 等方法。适合数据模型类。",[14,152223,152225],{"id":152224},"_1115-小案例学生类","11.15 小案例：学生类",[59,152227,152229],{"className":31614,"code":152228,"language":31616,"meta":64,"style":64},"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",[66,152230,152231,152239,152248,152260,152270,152280,152290,152294,152303,152316,152320,152329,152335,152347,152359,152371,152383,152387,152391,152397,152407,152416,152426,152434,152442,152451,152455,152459,152467,152503,152507,152511,152536,152543],{"__ignoreMap":64},[69,152232,152233,152235,152237],{"class":71,"line":72},[69,152234,15934],{"class":82},[69,152236,9140],{"class":109},[69,152238,4983],{"class":86},[69,152240,152241,152243,152245],{"class":71,"line":79},[69,152242,32037],{"class":82},[69,152244,32040],{"class":90},[69,152246,152247],{"class":86},"(self, student_id, name, age, score):\n",[69,152249,152250,152252,152255,152257],{"class":71,"line":106},[69,152251,32081],{"class":90},[69,152253,152254],{"class":86},".student_id ",[69,152256,1019],{"class":82},[69,152258,152259],{"class":86}," student_id\n",[69,152261,152262,152264,152266,152268],{"class":71,"line":116},[69,152263,32081],{"class":90},[69,152265,150766],{"class":86},[69,152267,1019],{"class":82},[69,152269,150771],{"class":86},[69,152271,152272,152274,152276,152278],{"class":71,"line":133},[69,152273,32081],{"class":90},[69,152275,150778],{"class":86},[69,152277,1019],{"class":82},[69,152279,150783],{"class":86},[69,152281,152282,152284,152286,152288],{"class":71,"line":139},[69,152283,32081],{"class":90},[69,152285,150790],{"class":86},[69,152287,1019],{"class":82},[69,152289,2829],{"class":86},[69,152291,152292],{"class":71,"line":401},[69,152293,3644],{"emptyLinePlaceholder":1325},[69,152295,152296,152298,152301],{"class":71,"line":470},[69,152297,32037],{"class":82},[69,152299,152300],{"class":109}," is_passed",[69,152302,32043],{"class":86},[69,152304,152305,152307,152309,152311,152313],{"class":71,"line":475},[69,152306,15992],{"class":82},[69,152308,40109],{"class":90},[69,152310,150790],{"class":86},[69,152312,2955],{"class":82},[69,152314,152315],{"class":90}," 60\n",[69,152317,152318],{"class":71,"line":482},[69,152319,3644],{"emptyLinePlaceholder":1325},[69,152321,152322,152324,152327],{"class":71,"line":497},[69,152323,32037],{"class":82},[69,152325,152326],{"class":109}," to_dict",[69,152328,32043],{"class":86},[69,152330,152331,152333],{"class":71,"line":502},[69,152332,15992],{"class":82},[69,152334,113],{"class":86},[69,152336,152337,152340,152342,152344],{"class":71,"line":509},[69,152338,152339],{"class":1022},"            \"student_id\"",[69,152341,94],{"class":86},[69,152343,32059],{"class":90},[69,152345,152346],{"class":86},".student_id,\n",[69,152348,152349,152352,152354,152356],{"class":71,"line":524},[69,152350,152351],{"class":1022},"            \"name\"",[69,152353,94],{"class":86},[69,152355,32059],{"class":90},[69,152357,152358],{"class":86},".name,\n",[69,152360,152361,152364,152366,152368],{"class":71,"line":2888},[69,152362,152363],{"class":1022},"            \"age\"",[69,152365,94],{"class":86},[69,152367,32059],{"class":90},[69,152369,152370],{"class":86},".age,\n",[69,152372,152373,152376,152378,152380],{"class":71,"line":2893},[69,152374,152375],{"class":1022},"            \"score\"",[69,152377,94],{"class":86},[69,152379,32059],{"class":90},[69,152381,152382],{"class":86},".score,\n",[69,152384,152385],{"class":71,"line":2899},[69,152386,3773],{"class":86},[69,152388,152389],{"class":71,"line":2919},[69,152390,3644],{"emptyLinePlaceholder":1325},[69,152392,152393,152395],{"class":71,"line":2924},[69,152394,151990],{"class":109},[69,152396,151993],{"class":90},[69,152398,152399,152401,152404],{"class":71,"line":2938},[69,152400,32037],{"class":82},[69,152402,152403],{"class":109}," from_dict",[69,152405,152406],{"class":86},"(cls, data):\n",[69,152408,152409,152411,152413],{"class":71,"line":2943},[69,152410,15992],{"class":82},[69,152412,152010],{"class":90},[69,152414,152415],{"class":86},"(\n",[69,152417,152418,152421,152424],{"class":71,"line":2972},[69,152419,152420],{"class":86},"            data[",[69,152422,152423],{"class":1022},"\"student_id\"",[69,152425,89057],{"class":86},[69,152427,152428,152430,152432],{"class":71,"line":2977},[69,152429,152420],{"class":86},[69,152431,63905],{"class":1022},[69,152433,89057],{"class":86},[69,152435,152436,152438,152440],{"class":71,"line":2994},[69,152437,152420],{"class":86},[69,152439,70349],{"class":1022},[69,152441,89057],{"class":86},[69,152443,152444,152446,152449],{"class":71,"line":2999},[69,152445,152420],{"class":86},[69,152447,152448],{"class":1022},"\"score\"",[69,152450,89057],{"class":86},[69,152452,152453],{"class":71,"line":3004},[69,152454,39362],{"class":86},[69,152456,152457],{"class":71,"line":3009},[69,152458,3644],{"emptyLinePlaceholder":1325},[69,152460,152461,152463,152465],{"class":71,"line":3023},[69,152462,32037],{"class":82},[69,152464,150957],{"class":90},[69,152466,32043],{"class":86},[69,152468,152469,152471,152473,152475,152477,152480,152482,152485,152487,152489,152491,152493,152495,152497,152499,152501],{"class":71,"line":3028},[69,152470,15992],{"class":82},[69,152472,150966],{"class":82},[69,152474,1642],{"class":1022},[69,152476,150428],{"class":90},[69,152478,152479],{"class":86},".student_id",[69,152481,2332],{"class":90},[69,152483,152484],{"class":90}," {self",[69,152486,81522],{"class":86},[69,152488,2332],{"class":90},[69,152490,152484],{"class":90},[69,152492,81534],{"class":86},[69,152494,2332],{"class":90},[69,152496,152484],{"class":90},[69,152498,150838],{"class":86},[69,152500,2332],{"class":90},[69,152502,26370],{"class":1022},[69,152504,152505],{"class":71,"line":3821},[69,152506,3644],{"emptyLinePlaceholder":1325},[69,152508,152509],{"class":71,"line":3835},[69,152510,3644],{"emptyLinePlaceholder":1325},[69,152512,152513,152515,152517,152519,152522,152524,152526,152528,152530,152532,152534],{"class":71,"line":3843},[69,152514,150457],{"class":86},[69,152516,1019],{"class":82},[69,152518,150861],{"class":86},[69,152520,152521],{"class":1022},"\"001\"",[69,152523,13677],{"class":86},[69,152525,150864],{"class":1022},[69,152527,13677],{"class":86},[69,152529,2037],{"class":90},[69,152531,13677],{"class":86},[69,152533,2375],{"class":90},[69,152535,1404],{"class":86},[69,152537,152538,152540],{"class":71,"line":3848},[69,152539,31651],{"class":90},[69,152541,152542],{"class":86},"(student.is_passed())\n",[69,152544,152545,152547],{"class":71,"line":3854},[69,152546,31651],{"class":90},[69,152548,152549],{"class":86},"(student.to_dict())\n",[29,152551,152552,102239,152555,152558],{},[66,152553,152554],{},"to_dict()",[66,152556,152557],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152560,152562],{"id":152561},"_1116-易错点","11.16 易错点",[37,152564,152565,152571,152577,152582,152585,152588],{},[40,152566,152567,152568,29621],{},"类名推荐使用大驼峰，如 ",[66,152569,152570],{},"StudentManager",[40,152572,152573,152574,152576],{},"方法第一个参数必须写 ",[66,152575,32059],{},"，调用时不用传。",[40,152578,152579,152581],{},[66,152580,32065],{}," 不是普通方法，它在创建对象时自动执行。",[40,152583,152584],{},"私有属性不是绝对安全，只是约定和名称改写。",[40,152586,152587],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[40,152589,152590],{},"类中方法太多时，说明职责可能过重。",[14,152592,152594],{"id":152593},"_1117-本章练习","11.17 本章练习",[37,152596,152597,152603,152609,152614,152627],{},[40,152598,152599,152600,152602],{},"定义 ",[66,152601,150544],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[40,152604,152599,152605,152608],{},[66,152606,152607],{},"Account"," 类，实现存款、取款、查询余额。",[40,152610,152599,152611,152613],{},[66,152612,18465],{}," 类，计算圆的周长和面积。",[40,152615,152599,152616,1604,152619,152622,152623,152626],{},[66,152617,152618],{},"Dog",[66,152620,152621],{},"Cat"," 类，并用同一个函数调用它们的 ",[66,152624,152625],{},"speak()"," 方法。",[40,152628,105587,152629,152631,152632,29621],{},[66,152630,152115],{}," 定义一个商品类 ",[66,152633,152634],{},"Product",[1297,152636,152637],{},"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":64,"searchDepth":79,"depth":79,"links":152639},[152640,152641,152642,152643,152644,152645,152647,152648,152649,152650,152651,152652,152653,152657,152658,152659,152660],{"id":150308,"depth":79,"text":150309},{"id":150491,"depth":79,"text":150492},{"id":150555,"depth":79,"text":150556},{"id":150632,"depth":79,"text":150633},{"id":150731,"depth":79,"text":150732},{"id":150895,"depth":79,"text":152646},"11.6 str",{"id":151021,"depth":79,"text":151022},{"id":151287,"depth":79,"text":151288},{"id":151401,"depth":79,"text":151402},{"id":151556,"depth":79,"text":151557},{"id":151680,"depth":79,"text":151681},{"id":151796,"depth":79,"text":151797},{"id":151945,"depth":79,"text":151946,"children":152654},[152655,152656],{"id":151949,"depth":106,"text":151950},{"id":152031,"depth":106,"text":152032},{"id":152109,"depth":79,"text":152110},{"id":152224,"depth":79,"text":152225},{"id":152561,"depth":79,"text":152562},{"id":152593,"depth":79,"text":152594},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150300,"description":1322},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152667,"title":152668,"body":152669,"description":1322,"extension":1323,"meta":155982,"navigation":1325,"path":155983,"seo":155984,"stem":155985,"__hash__":155986},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152670,"toc":155958},[152671,152674,152678,152681,152684,152713,152716,152724,152728,152732,152735,152758,152761,152767,152771,154217,154220,154241,154245,154248,154260,154263,154447,154450,154576,154579,154583,154587,154723,154727,154813,154817,154899,154903,154940,154944,155133,155137,155140,155370,155374,155377,155558,155561,155565,155568,155574,155577,155603,155607,155610,155624,155627,155652,155655,155669,155672,155689,155692,155709,155712,155729,155733,155759,155763,155786,155790,155793,155795,155801,155803,155824,155827,155833,155839,155843,155846,155922,155925,155929,155955],[10,152672,152668],{"id":152673},"_12-综合案例与复习路线",[14,152675,152677],{"id":152676},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[29,152679,152680],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[29,152682,152683],{},"一个合格的入门综合项目最好覆盖：",[37,152685,152686,152689,152692,152695,152698,152701,152704,152707,152710],{},[40,152687,152688],{},"输入输出。",[40,152690,152691],{},"判断和循环。",[40,152693,152694],{},"函数拆分。",[40,152696,152697],{},"列表、字典等容器。",[40,152699,152700],{},"文件持久化。",[40,152702,152703],{},"异常处理。",[40,152705,152706],{},"模块拆分。",[40,152708,152709],{},"可选：面向对象。",[40,152711,152712],{},"可选：数据可视化。",[29,152714,152715],{},"本章整理两个方向：",[37,152717,152718,152721],{},[40,152719,152720],{},"学生管理系统。",[40,152722,152723],{},"销售数据统计和可视化。",[14,152725,152727],{"id":152726},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[19,152729,152731],{"id":152730},"_1221-需求","12.2.1 需求",[29,152733,152734],{},"实现一个命令行学生管理系统：",[37,152736,152737,152740,152743,152746,152749,152752,152755],{},[40,152738,152739],{},"添加学生。",[40,152741,152742],{},"删除学生。",[40,152744,152745],{},"修改学生。",[40,152747,152748],{},"查询学生。",[40,152750,152751],{},"显示所有学生。",[40,152753,152754],{},"保存到 JSON 文件。",[40,152756,152757],{},"程序启动时自动读取 JSON 文件。",[29,152759,152760],{},"学生字段：",[59,152762,152765],{"className":152763,"code":152764,"language":540,"meta":64},[538],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[66,152766,152764],{"__ignoreMap":64},[14,152768,152770],{"id":152769},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[59,152772,152774],{"className":31614,"code":152773,"language":31616,"meta":64,"style":64},"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",[66,152775,152776,152782,152792,152796,152810,152814,152818,152827,152839,152845,152849,152855,152886,152896,152903,152914,152920,152924,152928,152938,152969,152995,152999,153003,153012,153023,153034,153045,153056,153067,153078,153089,153093,153097,153107,153119,153135,153142,153149,153153,153157,153167,153175,153182,153195,153205,153216,153220,153224,153233,153241,153247,153259,153267,153278,153282,153286,153295,153311,153315,153322,153333,153338,153342,153358,153373,153388,153392,153397,153405,153413,153421,153429,153433,153438,153449,153453,153457,153466,153481,153491,153495,153507,153518,153522,153526,153531,153535,153546,153550,153554,153563,153578,153586,153590,153602,153612,153616,153620,153635,153648,153661,153665,153678,153690,153702,153706,153710,153721,153725,153729,153738,153753,153761,153765,153777,153787,153791,153795,153800,153804,153808,153818,153824,153846,153865,153884,153903,153908,153912,153916,153925,153933,153944,153948,153952,153978,153988,153993,153997,154001,154009,154019,154023,154031,154036,154052,154056,154070,154075,154089,154094,154107,154112,154125,154130,154143,154148,154161,154172,154176,154182,154193,154197,154201,154213],{"__ignoreMap":64},[69,152777,152778,152780],{"class":71,"line":72},[69,152779,31628],{"class":82},[69,152781,148067],{"class":86},[69,152783,152784,152786,152788,152790],{"class":71,"line":79},[69,152785,31973],{"class":82},[69,152787,109532],{"class":86},[69,152789,31628],{"class":82},[69,152791,109537],{"class":86},[69,152793,152794],{"class":71,"line":106},[69,152795,3644],{"emptyLinePlaceholder":1325},[69,152797,152798,152801,152803,152805,152808],{"class":71,"line":116},[69,152799,152800],{"class":90},"DATA_FILE",[69,152802,14805],{"class":82},[69,152804,109766],{"class":86},[69,152806,152807],{"class":1022},"\"students.json\"",[69,152809,1404],{"class":86},[69,152811,152812],{"class":71,"line":133},[69,152813,3644],{"emptyLinePlaceholder":1325},[69,152815,152816],{"class":71,"line":139},[69,152817,3644],{"emptyLinePlaceholder":1325},[69,152819,152820,152822,152825],{"class":71,"line":401},[69,152821,33183],{"class":82},[69,152823,152824],{"class":109}," load_students",[69,152826,33189],{"class":86},[69,152828,152829,152831,152833,152836],{"class":71,"line":470},[69,152830,4345],{"class":82},[69,152832,40166],{"class":82},[69,152834,152835],{"class":90}," DATA_FILE",[69,152837,152838],{"class":86},".exists():\n",[69,152840,152841,152843],{"class":71,"line":475},[69,152842,15992],{"class":82},[69,152844,53066],{"class":86},[69,152846,152847],{"class":71,"line":482},[69,152848,3644],{"emptyLinePlaceholder":1325},[69,152850,152851,152853],{"class":71,"line":497},[69,152852,127005],{"class":82},[69,152854,4983],{"class":86},[69,152856,152857,152860,152862,152864,152866,152868,152870,152872,152874,152876,152878,152880,152882,152884],{"class":71,"line":502},[69,152858,152859],{"class":82},"        with",[69,152861,147767],{"class":90},[69,152863,1398],{"class":86},[69,152865,152800],{"class":90},[69,152867,13677],{"class":86},[69,152869,147777],{"class":1022},[69,152871,13677],{"class":86},[69,152873,147782],{"class":6458},[69,152875,1019],{"class":82},[69,152877,147787],{"class":1022},[69,152879,14955],{"class":86},[69,152881,32619],{"class":82},[69,152883,149129],{"class":6458},[69,152885,4983],{"class":86},[69,152887,152888,152890,152892,152894],{"class":71,"line":509},[69,152889,16971],{"class":82},[69,152891,149140],{"class":86},[69,152893,46590],{"class":6458},[69,152895,1404],{"class":86},[69,152897,152898,152900],{"class":71,"line":524},[69,152899,127033],{"class":82},[69,152901,152902],{"class":86}," json.JSONDecodeError:\n",[69,152904,152905,152907,152909,152912],{"class":71,"line":2888},[69,152906,33687],{"class":90},[69,152908,1398],{"class":86},[69,152910,152911],{"class":1022},"\"数据文件格式错误，已使用空数据启动\"",[69,152913,1404],{"class":86},[69,152915,152916,152918],{"class":71,"line":2893},[69,152917,15992],{"class":82},[69,152919,53066],{"class":86},[69,152921,152922],{"class":71,"line":2899},[69,152923,3644],{"emptyLinePlaceholder":1325},[69,152925,152926],{"class":71,"line":2919},[69,152927,3644],{"emptyLinePlaceholder":1325},[69,152929,152930,152932,152935],{"class":71,"line":2924},[69,152931,33183],{"class":82},[69,152933,152934],{"class":109}," save_students",[69,152936,152937],{"class":86},"(students):\n",[69,152939,152940,152942,152944,152946,152948,152950,152953,152955,152957,152959,152961,152963,152965,152967],{"class":71,"line":2938},[69,152941,35414],{"class":82},[69,152943,147767],{"class":90},[69,152945,1398],{"class":86},[69,152947,152800],{"class":90},[69,152949,13677],{"class":86},[69,152951,152952],{"class":1022},"\"w\"",[69,152954,13677],{"class":86},[69,152956,147782],{"class":6458},[69,152958,1019],{"class":82},[69,152960,147787],{"class":1022},[69,152962,14955],{"class":86},[69,152964,32619],{"class":82},[69,152966,149129],{"class":6458},[69,152968,4983],{"class":86},[69,152970,152971,152974,152976,152978,152980,152982,152984,152986,152989,152991,152993],{"class":71,"line":2943},[69,152972,152973],{"class":86},"        json.dump(students, ",[69,152975,46590],{"class":6458},[69,152977,13677],{"class":86},[69,152979,148113],{"class":6458},[69,152981,1019],{"class":82},[69,152983,35223],{"class":90},[69,152985,13677],{"class":86},[69,152987,152988],{"class":6458},"indent",[69,152990,1019],{"class":82},[69,152992,1471],{"class":90},[69,152994,1404],{"class":86},[69,152996,152997],{"class":71,"line":2972},[69,152998,3644],{"emptyLinePlaceholder":1325},[69,153000,153001],{"class":71,"line":2977},[69,153002,3644],{"emptyLinePlaceholder":1325},[69,153004,153005,153007,153010],{"class":71,"line":2994},[69,153006,33183],{"class":82},[69,153008,153009],{"class":109}," show_menu",[69,153011,33189],{"class":86},[69,153013,153014,153016,153018,153021],{"class":71,"line":2999},[69,153015,32535],{"class":90},[69,153017,1398],{"class":86},[69,153019,153020],{"class":1022},"\"====== 学生管理系统 ======\"",[69,153022,1404],{"class":86},[69,153024,153025,153027,153029,153032],{"class":71,"line":3004},[69,153026,32535],{"class":90},[69,153028,1398],{"class":86},[69,153030,153031],{"class":1022},"\"1. 添加学生\"",[69,153033,1404],{"class":86},[69,153035,153036,153038,153040,153043],{"class":71,"line":3009},[69,153037,32535],{"class":90},[69,153039,1398],{"class":86},[69,153041,153042],{"class":1022},"\"2. 删除学生\"",[69,153044,1404],{"class":86},[69,153046,153047,153049,153051,153054],{"class":71,"line":3023},[69,153048,32535],{"class":90},[69,153050,1398],{"class":86},[69,153052,153053],{"class":1022},"\"3. 修改学生\"",[69,153055,1404],{"class":86},[69,153057,153058,153060,153062,153065],{"class":71,"line":3028},[69,153059,32535],{"class":90},[69,153061,1398],{"class":86},[69,153063,153064],{"class":1022},"\"4. 查询学生\"",[69,153066,1404],{"class":86},[69,153068,153069,153071,153073,153076],{"class":71,"line":3821},[69,153070,32535],{"class":90},[69,153072,1398],{"class":86},[69,153074,153075],{"class":1022},"\"5. 显示所有学生\"",[69,153077,1404],{"class":86},[69,153079,153080,153082,153084,153087],{"class":71,"line":3835},[69,153081,32535],{"class":90},[69,153083,1398],{"class":86},[69,153085,153086],{"class":1022},"\"0. 退出系统\"",[69,153088,1404],{"class":86},[69,153090,153091],{"class":71,"line":3843},[69,153092,3644],{"emptyLinePlaceholder":1325},[69,153094,153095],{"class":71,"line":3848},[69,153096,3644],{"emptyLinePlaceholder":1325},[69,153098,153099,153101,153104],{"class":71,"line":3854},[69,153100,33183],{"class":82},[69,153102,153103],{"class":109}," find_student",[69,153105,153106],{"class":86},"(students, student_id):\n",[69,153108,153109,153111,153114,153116],{"class":71,"line":3860},[69,153110,4445],{"class":82},[69,153112,153113],{"class":86}," student ",[69,153115,27280],{"class":82},[69,153117,153118],{"class":86}," students:\n",[69,153120,153121,153123,153126,153128,153130,153132],{"class":71,"line":3865},[69,153122,3741],{"class":82},[69,153124,153125],{"class":86}," student[",[69,153127,152423],{"class":1022},[69,153129,5687],{"class":86},[69,153131,4193],{"class":82},[69,153133,153134],{"class":86}," student_id:\n",[69,153136,153137,153139],{"class":71,"line":9190},[69,153138,16971],{"class":82},[69,153140,153141],{"class":86}," student\n",[69,153143,153144,153146],{"class":71,"line":9214},[69,153145,5334],{"class":82},[69,153147,153148],{"class":90}," None\n",[69,153150,153151],{"class":71,"line":9219},[69,153152,3644],{"emptyLinePlaceholder":1325},[69,153154,153155],{"class":71,"line":9225},[69,153156,3644],{"emptyLinePlaceholder":1325},[69,153158,153159,153161,153164],{"class":71,"line":9252},[69,153160,33183],{"class":82},[69,153162,153163],{"class":109}," input_int",[69,153165,153166],{"class":86},"(prompt):\n",[69,153168,153169,153171,153173],{"class":71,"line":9257},[69,153170,3495],{"class":82},[69,153172,96513],{"class":90},[69,153174,4983],{"class":86},[69,153176,153177,153180],{"class":71,"line":9263},[69,153178,153179],{"class":82},"        try",[69,153181,4983],{"class":86},[69,153183,153184,153186,153188,153190,153192],{"class":71,"line":9275},[69,153185,16971],{"class":82},[69,153187,3626],{"class":90},[69,153189,1398],{"class":86},[69,153191,55048],{"class":90},[69,153193,153194],{"class":86},"(prompt))\n",[69,153196,153197,153200,153203],{"class":71,"line":9287},[69,153198,153199],{"class":82},"        except",[69,153201,153202],{"class":90}," ValueError",[69,153204,4983],{"class":86},[69,153206,153207,153209,153211,153214],{"class":71,"line":9299},[69,153208,35886],{"class":90},[69,153210,1398],{"class":86},[69,153212,153213],{"class":1022},"\"请输入整数\"",[69,153215,1404],{"class":86},[69,153217,153218],{"class":71,"line":10958},[69,153219,3644],{"emptyLinePlaceholder":1325},[69,153221,153222],{"class":71,"line":10983},[69,153223,3644],{"emptyLinePlaceholder":1325},[69,153225,153226,153228,153231],{"class":71,"line":11006},[69,153227,33183],{"class":82},[69,153229,153230],{"class":109}," input_float",[69,153232,153166],{"class":86},[69,153234,153235,153237,153239],{"class":71,"line":11030},[69,153236,3495],{"class":82},[69,153238,96513],{"class":90},[69,153240,4983],{"class":86},[69,153242,153243,153245],{"class":71,"line":11035},[69,153244,153179],{"class":82},[69,153246,4983],{"class":86},[69,153248,153249,153251,153253,153255,153257],{"class":71,"line":11040},[69,153250,16971],{"class":82},[69,153252,111018],{"class":90},[69,153254,1398],{"class":86},[69,153256,55048],{"class":90},[69,153258,153194],{"class":86},[69,153260,153261,153263,153265],{"class":71,"line":11045},[69,153262,153199],{"class":82},[69,153264,153202],{"class":90},[69,153266,4983],{"class":86},[69,153268,153269,153271,153273,153276],{"class":71,"line":11054},[69,153270,35886],{"class":90},[69,153272,1398],{"class":86},[69,153274,153275],{"class":1022},"\"请输入数字\"",[69,153277,1404],{"class":86},[69,153279,153280],{"class":71,"line":11059},[69,153281,3644],{"emptyLinePlaceholder":1325},[69,153283,153284],{"class":71,"line":11065},[69,153285,3644],{"emptyLinePlaceholder":1325},[69,153287,153288,153290,153293],{"class":71,"line":11086},[69,153289,33183],{"class":82},[69,153291,153292],{"class":109}," add_student",[69,153294,152937],{"class":86},[69,153296,153297,153300,153302,153304,153306,153309],{"class":71,"line":11092},[69,153298,153299],{"class":86},"    student_id ",[69,153301,1019],{"class":82},[69,153303,61831],{"class":90},[69,153305,1398],{"class":86},[69,153307,153308],{"class":1022},"\"请输入学号:\"",[69,153310,1404],{"class":86},[69,153312,153313],{"class":71,"line":11106},[69,153314,3644],{"emptyLinePlaceholder":1325},[69,153316,153317,153319],{"class":71,"line":11112},[69,153318,4345],{"class":82},[69,153320,153321],{"class":86}," find_student(students, student_id):\n",[69,153323,153324,153326,153328,153331],{"class":71,"line":11139},[69,153325,33687],{"class":90},[69,153327,1398],{"class":86},[69,153329,153330],{"class":1022},"\"学号已存在\"",[69,153332,1404],{"class":86},[69,153334,153335],{"class":71,"line":11148},[69,153336,153337],{"class":82},"        return\n",[69,153339,153340],{"class":71,"line":11154},[69,153341,3644],{"emptyLinePlaceholder":1325},[69,153343,153344,153347,153349,153351,153353,153356],{"class":71,"line":11162},[69,153345,153346],{"class":86},"    name ",[69,153348,1019],{"class":82},[69,153350,61831],{"class":90},[69,153352,1398],{"class":86},[69,153354,153355],{"class":1022},"\"请输入姓名:\"",[69,153357,1404],{"class":86},[69,153359,153360,153363,153365,153368,153371],{"class":71,"line":11167},[69,153361,153362],{"class":86},"    age ",[69,153364,1019],{"class":82},[69,153366,153367],{"class":86}," input_int(",[69,153369,153370],{"class":1022},"\"请输入年龄:\"",[69,153372,1404],{"class":86},[69,153374,153375,153378,153380,153383,153386],{"class":71,"line":17843},[69,153376,153377],{"class":86},"    score ",[69,153379,1019],{"class":82},[69,153381,153382],{"class":86}," input_float(",[69,153384,153385],{"class":1022},"\"请输入成绩:\"",[69,153387,1404],{"class":86},[69,153389,153390],{"class":71,"line":17849},[69,153391,3644],{"emptyLinePlaceholder":1325},[69,153393,153394],{"class":71,"line":17872},[69,153395,153396],{"class":86},"    students.append({\n",[69,153398,153399,153402],{"class":71,"line":17878},[69,153400,153401],{"class":1022},"        \"student_id\"",[69,153403,153404],{"class":86},": student_id,\n",[69,153406,153407,153410],{"class":71,"line":17901},[69,153408,153409],{"class":1022},"        \"name\"",[69,153411,153412],{"class":86},": name,\n",[69,153414,153415,153418],{"class":71,"line":17915},[69,153416,153417],{"class":1022},"        \"age\"",[69,153419,153420],{"class":86},": age,\n",[69,153422,153423,153426],{"class":71,"line":17935},[69,153424,153425],{"class":1022},"        \"score\"",[69,153427,153428],{"class":86},": score,\n",[69,153430,153431],{"class":71,"line":17941},[69,153432,34697],{"class":86},[69,153434,153435],{"class":71,"line":17952},[69,153436,153437],{"class":86},"    save_students(students)\n",[69,153439,153440,153442,153444,153447],{"class":71,"line":17975},[69,153441,32535],{"class":90},[69,153443,1398],{"class":86},[69,153445,153446],{"class":1022},"\"添加成功\"",[69,153448,1404],{"class":86},[69,153450,153451],{"class":71,"line":17997},[69,153452,3644],{"emptyLinePlaceholder":1325},[69,153454,153455],{"class":71,"line":18002},[69,153456,3644],{"emptyLinePlaceholder":1325},[69,153458,153459,153461,153464],{"class":71,"line":18008},[69,153460,33183],{"class":82},[69,153462,153463],{"class":109}," delete_student",[69,153465,152937],{"class":86},[69,153467,153468,153470,153472,153474,153476,153479],{"class":71,"line":18022},[69,153469,153299],{"class":86},[69,153471,1019],{"class":82},[69,153473,61831],{"class":90},[69,153475,1398],{"class":86},[69,153477,153478],{"class":1022},"\"请输入要删除的学号:\"",[69,153480,1404],{"class":86},[69,153482,153483,153486,153488],{"class":71,"line":18035},[69,153484,153485],{"class":86},"    student ",[69,153487,1019],{"class":82},[69,153489,153490],{"class":86}," find_student(students, student_id)\n",[69,153492,153493],{"class":71,"line":18040},[69,153494,3644],{"emptyLinePlaceholder":1325},[69,153496,153497,153499,153501,153503,153505],{"class":71,"line":18054},[69,153498,4345],{"class":82},[69,153500,153113],{"class":86},[69,153502,40163],{"class":82},[69,153504,40169],{"class":90},[69,153506,4983],{"class":86},[69,153508,153509,153511,153513,153516],{"class":71,"line":18059},[69,153510,33687],{"class":90},[69,153512,1398],{"class":86},[69,153514,153515],{"class":1022},"\"学生不存在\"",[69,153517,1404],{"class":86},[69,153519,153520],{"class":71,"line":18065},[69,153521,153337],{"class":82},[69,153523,153524],{"class":71,"line":18070},[69,153525,3644],{"emptyLinePlaceholder":1325},[69,153527,153528],{"class":71,"line":18084},[69,153529,153530],{"class":86},"    students.remove(student)\n",[69,153532,153533],{"class":71,"line":18089},[69,153534,153437],{"class":86},[69,153536,153537,153539,153541,153544],{"class":71,"line":18094},[69,153538,32535],{"class":90},[69,153540,1398],{"class":86},[69,153542,153543],{"class":1022},"\"删除成功\"",[69,153545,1404],{"class":86},[69,153547,153548],{"class":71,"line":18108},[69,153549,3644],{"emptyLinePlaceholder":1325},[69,153551,153552],{"class":71,"line":18120},[69,153553,3644],{"emptyLinePlaceholder":1325},[69,153555,153556,153558,153561],{"class":71,"line":18125},[69,153557,33183],{"class":82},[69,153559,153560],{"class":109}," update_student",[69,153562,152937],{"class":86},[69,153564,153565,153567,153569,153571,153573,153576],{"class":71,"line":18138},[69,153566,153299],{"class":86},[69,153568,1019],{"class":82},[69,153570,61831],{"class":90},[69,153572,1398],{"class":86},[69,153574,153575],{"class":1022},"\"请输入要修改的学号:\"",[69,153577,1404],{"class":86},[69,153579,153580,153582,153584],{"class":71,"line":18143},[69,153581,153485],{"class":86},[69,153583,1019],{"class":82},[69,153585,153490],{"class":86},[69,153587,153588],{"class":71,"line":18148},[69,153589,3644],{"emptyLinePlaceholder":1325},[69,153591,153592,153594,153596,153598,153600],{"class":71,"line":18153},[69,153593,4345],{"class":82},[69,153595,153113],{"class":86},[69,153597,40163],{"class":82},[69,153599,40169],{"class":90},[69,153601,4983],{"class":86},[69,153603,153604,153606,153608,153610],{"class":71,"line":18166},[69,153605,33687],{"class":90},[69,153607,1398],{"class":86},[69,153609,153515],{"class":1022},[69,153611,1404],{"class":86},[69,153613,153614],{"class":71,"line":18171},[69,153615,153337],{"class":82},[69,153617,153618],{"class":71,"line":33869},[69,153619,3644],{"emptyLinePlaceholder":1325},[69,153621,153622,153624,153626,153628,153630,153633],{"class":71,"line":33875},[69,153623,153346],{"class":86},[69,153625,1019],{"class":82},[69,153627,61831],{"class":90},[69,153629,1398],{"class":86},[69,153631,153632],{"class":1022},"\"请输入新姓名:\"",[69,153634,1404],{"class":86},[69,153636,153637,153639,153641,153643,153646],{"class":71,"line":33881},[69,153638,153362],{"class":86},[69,153640,1019],{"class":82},[69,153642,153367],{"class":86},[69,153644,153645],{"class":1022},"\"请输入新年龄:\"",[69,153647,1404],{"class":86},[69,153649,153650,153652,153654,153656,153659],{"class":71,"line":33887},[69,153651,153377],{"class":86},[69,153653,1019],{"class":82},[69,153655,153382],{"class":86},[69,153657,153658],{"class":1022},"\"请输入新成绩:\"",[69,153660,1404],{"class":86},[69,153662,153663],{"class":71,"line":33893},[69,153664,3644],{"emptyLinePlaceholder":1325},[69,153666,153667,153670,153672,153674,153676],{"class":71,"line":33904},[69,153668,153669],{"class":86},"    student[",[69,153671,63905],{"class":1022},[69,153673,5687],{"class":86},[69,153675,1019],{"class":82},[69,153677,150771],{"class":86},[69,153679,153680,153682,153684,153686,153688],{"class":71,"line":33910},[69,153681,153669],{"class":86},[69,153683,70349],{"class":1022},[69,153685,5687],{"class":86},[69,153687,1019],{"class":82},[69,153689,150783],{"class":86},[69,153691,153692,153694,153696,153698,153700],{"class":71,"line":33930},[69,153693,153669],{"class":86},[69,153695,152448],{"class":1022},[69,153697,5687],{"class":86},[69,153699,1019],{"class":82},[69,153701,2829],{"class":86},[69,153703,153704],{"class":71,"line":33936},[69,153705,3644],{"emptyLinePlaceholder":1325},[69,153707,153708],{"class":71,"line":33947},[69,153709,153437],{"class":86},[69,153711,153712,153714,153716,153719],{"class":71,"line":33953},[69,153713,32535],{"class":90},[69,153715,1398],{"class":86},[69,153717,153718],{"class":1022},"\"修改成功\"",[69,153720,1404],{"class":86},[69,153722,153723],{"class":71,"line":33959},[69,153724,3644],{"emptyLinePlaceholder":1325},[69,153726,153727],{"class":71,"line":33965},[69,153728,3644],{"emptyLinePlaceholder":1325},[69,153730,153731,153733,153736],{"class":71,"line":33971},[69,153732,33183],{"class":82},[69,153734,153735],{"class":109}," query_student",[69,153737,152937],{"class":86},[69,153739,153740,153742,153744,153746,153748,153751],{"class":71,"line":33977},[69,153741,153299],{"class":86},[69,153743,1019],{"class":82},[69,153745,61831],{"class":90},[69,153747,1398],{"class":86},[69,153749,153750],{"class":1022},"\"请输入要查询的学号:\"",[69,153752,1404],{"class":86},[69,153754,153755,153757,153759],{"class":71,"line":33983},[69,153756,153485],{"class":86},[69,153758,1019],{"class":82},[69,153760,153490],{"class":86},[69,153762,153763],{"class":71,"line":33989},[69,153764,3644],{"emptyLinePlaceholder":1325},[69,153766,153767,153769,153771,153773,153775],{"class":71,"line":34009},[69,153768,4345],{"class":82},[69,153770,153113],{"class":86},[69,153772,40163],{"class":82},[69,153774,40169],{"class":90},[69,153776,4983],{"class":86},[69,153778,153779,153781,153783,153785],{"class":71,"line":34015},[69,153780,33687],{"class":90},[69,153782,1398],{"class":86},[69,153784,153515],{"class":1022},[69,153786,1404],{"class":86},[69,153788,153789],{"class":71,"line":34031},[69,153790,153337],{"class":82},[69,153792,153793],{"class":71,"line":34037},[69,153794,3644],{"emptyLinePlaceholder":1325},[69,153796,153797],{"class":71,"line":34051},[69,153798,153799],{"class":86},"    print_student(student)\n",[69,153801,153802],{"class":71,"line":34057},[69,153803,3644],{"emptyLinePlaceholder":1325},[69,153805,153806],{"class":71,"line":34072},[69,153807,3644],{"emptyLinePlaceholder":1325},[69,153809,153810,153812,153815],{"class":71,"line":34078},[69,153811,33183],{"class":82},[69,153813,153814],{"class":109}," print_student",[69,153816,153817],{"class":86},"(student):\n",[69,153819,153820,153822],{"class":71,"line":34087},[69,153821,32535],{"class":90},[69,153823,152415],{"class":86},[69,153825,153826,153829,153831,153833,153836,153839,153841,153844],{"class":71,"line":34093},[69,153827,153828],{"class":82},"        f",[69,153830,1642],{"class":1022},[69,153832,2283],{"class":90},[69,153834,153835],{"class":86},"student[",[69,153837,153838],{"class":1022},"'student_id'",[69,153840,2326],{"class":86},[69,153842,153843],{"class":90},"}\\t",[69,153845,26370],{"class":1022},[69,153847,153848,153850,153852,153854,153856,153859,153861,153863],{"class":71,"line":34102},[69,153849,153828],{"class":82},[69,153851,1642],{"class":1022},[69,153853,2283],{"class":90},[69,153855,153835],{"class":86},[69,153857,153858],{"class":1022},"'name'",[69,153860,2326],{"class":86},[69,153862,153843],{"class":90},[69,153864,26370],{"class":1022},[69,153866,153867,153869,153871,153873,153875,153878,153880,153882],{"class":71,"line":34108},[69,153868,153828],{"class":82},[69,153870,1642],{"class":1022},[69,153872,2283],{"class":90},[69,153874,153835],{"class":86},[69,153876,153877],{"class":1022},"'age'",[69,153879,2326],{"class":86},[69,153881,153843],{"class":90},[69,153883,26370],{"class":1022},[69,153885,153886,153888,153890,153892,153894,153897,153899,153901],{"class":71,"line":34114},[69,153887,153828],{"class":82},[69,153889,1642],{"class":1022},[69,153891,2283],{"class":90},[69,153893,153835],{"class":86},[69,153895,153896],{"class":1022},"'score'",[69,153898,2326],{"class":86},[69,153900,2332],{"class":90},[69,153902,26370],{"class":1022},[69,153904,153905],{"class":71,"line":34123},[69,153906,153907],{"class":86},"    )\n",[69,153909,153910],{"class":71,"line":34129},[69,153911,3644],{"emptyLinePlaceholder":1325},[69,153913,153914],{"class":71,"line":34140},[69,153915,3644],{"emptyLinePlaceholder":1325},[69,153917,153918,153920,153923],{"class":71,"line":34146},[69,153919,33183],{"class":82},[69,153921,153922],{"class":109}," show_all_students",[69,153924,152937],{"class":86},[69,153926,153927,153929,153931],{"class":71,"line":34165},[69,153928,4345],{"class":82},[69,153930,40166],{"class":82},[69,153932,153118],{"class":86},[69,153934,153935,153937,153939,153942],{"class":71,"line":34171},[69,153936,33687],{"class":90},[69,153938,1398],{"class":86},[69,153940,153941],{"class":1022},"\"暂无学生\"",[69,153943,1404],{"class":86},[69,153945,153946],{"class":71,"line":34182},[69,153947,153337],{"class":82},[69,153949,153950],{"class":71,"line":34188},[69,153951,3644],{"emptyLinePlaceholder":1325},[69,153953,153954,153956,153958,153961,153963,153966,153968,153971,153973,153976],{"class":71,"line":34208},[69,153955,32535],{"class":90},[69,153957,1398],{"class":86},[69,153959,153960],{"class":1022},"\"学号",[69,153962,2486],{"class":90},[69,153964,153965],{"class":1022},"姓名",[69,153967,2486],{"class":90},[69,153969,153970],{"class":1022},"年龄",[69,153972,2486],{"class":90},[69,153974,153975],{"class":1022},"成绩\"",[69,153977,1404],{"class":86},[69,153979,153980,153982,153984,153986],{"class":71,"line":34224},[69,153981,4445],{"class":82},[69,153983,153113],{"class":86},[69,153985,27280],{"class":82},[69,153987,153118],{"class":86},[69,153989,153990],{"class":71,"line":34230},[69,153991,153992],{"class":86},"        print_student(student)\n",[69,153994,153995],{"class":71,"line":34244},[69,153996,3644],{"emptyLinePlaceholder":1325},[69,153998,153999],{"class":71,"line":34250},[69,154000,3644],{"emptyLinePlaceholder":1325},[69,154002,154003,154005,154007],{"class":71,"line":34256},[69,154004,33183],{"class":82},[69,154006,3217],{"class":109},[69,154008,33189],{"class":86},[69,154010,154011,154014,154016],{"class":71,"line":34267},[69,154012,154013],{"class":86},"    students ",[69,154015,1019],{"class":82},[69,154017,154018],{"class":86}," load_students()\n",[69,154020,154021],{"class":71,"line":34273},[69,154022,3644],{"emptyLinePlaceholder":1325},[69,154024,154025,154027,154029],{"class":71,"line":34279},[69,154026,3495],{"class":82},[69,154028,96513],{"class":90},[69,154030,4983],{"class":86},[69,154032,154033],{"class":71,"line":34289},[69,154034,154035],{"class":86},"        show_menu()\n",[69,154037,154038,154041,154043,154045,154047,154050],{"class":71,"line":34295},[69,154039,154040],{"class":86},"        choice ",[69,154042,1019],{"class":82},[69,154044,61831],{"class":90},[69,154046,1398],{"class":86},[69,154048,154049],{"class":1022},"\"请输入操作:\"",[69,154051,1404],{"class":86},[69,154053,154054],{"class":71,"line":34306},[69,154055,3644],{"emptyLinePlaceholder":1325},[69,154057,154058,154060,154063,154065,154068],{"class":71,"line":34312},[69,154059,3741],{"class":82},[69,154061,154062],{"class":86}," choice ",[69,154064,4193],{"class":82},[69,154066,154067],{"class":1022}," \"1\"",[69,154069,4983],{"class":86},[69,154071,154072],{"class":71,"line":34322},[69,154073,154074],{"class":86},"            add_student(students)\n",[69,154076,154077,154080,154082,154084,154087],{"class":71,"line":34327},[69,154078,154079],{"class":82},"        elif",[69,154081,154062],{"class":86},[69,154083,4193],{"class":82},[69,154085,154086],{"class":1022}," \"2\"",[69,154088,4983],{"class":86},[69,154090,154091],{"class":71,"line":34333},[69,154092,154093],{"class":86},"            delete_student(students)\n",[69,154095,154096,154098,154100,154102,154105],{"class":71,"line":34382},[69,154097,154079],{"class":82},[69,154099,154062],{"class":86},[69,154101,4193],{"class":82},[69,154103,154104],{"class":1022}," \"3\"",[69,154106,4983],{"class":86},[69,154108,154109],{"class":71,"line":34429},[69,154110,154111],{"class":86},"            update_student(students)\n",[69,154113,154114,154116,154118,154120,154123],{"class":71,"line":34434},[69,154115,154079],{"class":82},[69,154117,154062],{"class":86},[69,154119,4193],{"class":82},[69,154121,154122],{"class":1022}," \"4\"",[69,154124,4983],{"class":86},[69,154126,154127],{"class":71,"line":34440},[69,154128,154129],{"class":86},"            query_student(students)\n",[69,154131,154132,154134,154136,154138,154141],{"class":71,"line":34459},[69,154133,154079],{"class":82},[69,154135,154062],{"class":86},[69,154137,4193],{"class":82},[69,154139,154140],{"class":1022}," \"5\"",[69,154142,4983],{"class":86},[69,154144,154145],{"class":71,"line":34465},[69,154146,154147],{"class":86},"            show_all_students(students)\n",[69,154149,154150,154152,154154,154156,154159],{"class":71,"line":34485},[69,154151,154079],{"class":82},[69,154153,154062],{"class":86},[69,154155,4193],{"class":82},[69,154157,154158],{"class":1022}," \"0\"",[69,154160,4983],{"class":86},[69,154162,154163,154165,154167,154170],{"class":71,"line":34491},[69,154164,35886],{"class":90},[69,154166,1398],{"class":86},[69,154168,154169],{"class":1022},"\"退出系统\"",[69,154171,1404],{"class":86},[69,154173,154174],{"class":71,"line":34497},[69,154175,116319],{"class":82},[69,154177,154178,154180],{"class":71,"line":34507},[69,154179,3778],{"class":82},[69,154181,4983],{"class":86},[69,154183,154184,154186,154188,154191],{"class":71,"line":34512},[69,154185,35886],{"class":90},[69,154187,1398],{"class":86},[69,154189,154190],{"class":1022},"\"输入错误\"",[69,154192,1404],{"class":86},[69,154194,154195],{"class":71,"line":34518},[69,154196,3644],{"emptyLinePlaceholder":1325},[69,154198,154199],{"class":71,"line":34534},[69,154200,3644],{"emptyLinePlaceholder":1325},[69,154202,154203,154205,154207,154209,154211],{"class":71,"line":34579},[69,154204,2782],{"class":82},[69,154206,32456],{"class":90},[69,154208,102780],{"class":82},[69,154210,102783],{"class":1022},[69,154212,4983],{"class":86},[69,154214,154215],{"class":71,"line":34585},[69,154216,102790],{"class":86},[29,154218,154219],{},"这个项目串联了：",[37,154221,154222,154225,154228,154231,154234,154236],{},[40,154223,154224],{},"菜单循环。",[40,154226,154227],{},"函数封装。",[40,154229,154230],{},"列表字典。",[40,154232,154233],{},"JSON 读写。",[40,154235,152703],{},[40,154237,154238,29621],{},[66,154239,154240],{},"if __name__ == \"__main__\"",[14,154242,154244],{"id":154243},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[29,154246,154247],{},"可以进一步拆成两个类：",[37,154249,154250,154255],{},[40,154251,154252,154254],{},[66,154253,150544],{},"：表示单个学生。",[40,154256,154257,154259],{},[66,154258,152570],{},"：负责学生增删改查和文件保存。",[29,154261,154262],{},"示意代码：",[59,154264,154266],{"className":31614,"code":154265,"language":31616,"meta":64,"style":64},"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",[66,154267,154268,154278,154282,154286,154290,154298,154305,154311,154317,154323,154327,154335,154341,154351,154361,154371,154381,154385,154389,154395,154403,154411,154419,154427,154435,154443],{"__ignoreMap":64},[69,154269,154270,154272,154274,154276],{"class":71,"line":72},[69,154271,31973],{"class":82},[69,154273,152128],{"class":86},[69,154275,31628],{"class":82},[69,154277,152133],{"class":86},[69,154279,154280],{"class":71,"line":79},[69,154281,3644],{"emptyLinePlaceholder":1325},[69,154283,154284],{"class":71,"line":106},[69,154285,3644],{"emptyLinePlaceholder":1325},[69,154287,154288],{"class":71,"line":116},[69,154289,152146],{"class":109},[69,154291,154292,154294,154296],{"class":71,"line":133},[69,154293,15934],{"class":82},[69,154295,9140],{"class":109},[69,154297,4983],{"class":86},[69,154299,154300,154303],{"class":71,"line":139},[69,154301,154302],{"class":86},"    student_id: ",[69,154304,152162],{"class":90},[69,154306,154307,154309],{"class":71,"line":401},[69,154308,152159],{"class":86},[69,154310,152162],{"class":90},[69,154312,154313,154315],{"class":71,"line":470},[69,154314,152167],{"class":86},[69,154316,152170],{"class":90},[69,154318,154319,154321],{"class":71,"line":475},[69,154320,152175],{"class":86},[69,154322,152178],{"class":90},[69,154324,154325],{"class":71,"line":482},[69,154326,3644],{"emptyLinePlaceholder":1325},[69,154328,154329,154331,154333],{"class":71,"line":497},[69,154330,32037],{"class":82},[69,154332,152326],{"class":109},[69,154334,32043],{"class":86},[69,154336,154337,154339],{"class":71,"line":502},[69,154338,15992],{"class":82},[69,154340,113],{"class":86},[69,154342,154343,154345,154347,154349],{"class":71,"line":509},[69,154344,152339],{"class":1022},[69,154346,94],{"class":86},[69,154348,32059],{"class":90},[69,154350,152346],{"class":86},[69,154352,154353,154355,154357,154359],{"class":71,"line":524},[69,154354,152351],{"class":1022},[69,154356,94],{"class":86},[69,154358,32059],{"class":90},[69,154360,152358],{"class":86},[69,154362,154363,154365,154367,154369],{"class":71,"line":2888},[69,154364,152363],{"class":1022},[69,154366,94],{"class":86},[69,154368,32059],{"class":90},[69,154370,152370],{"class":86},[69,154372,154373,154375,154377,154379],{"class":71,"line":2893},[69,154374,152375],{"class":1022},[69,154376,94],{"class":86},[69,154378,32059],{"class":90},[69,154380,152382],{"class":86},[69,154382,154383],{"class":71,"line":2899},[69,154384,3773],{"class":86},[69,154386,154387],{"class":71,"line":2919},[69,154388,3644],{"emptyLinePlaceholder":1325},[69,154390,154391,154393],{"class":71,"line":2924},[69,154392,151990],{"class":109},[69,154394,151993],{"class":90},[69,154396,154397,154399,154401],{"class":71,"line":2938},[69,154398,32037],{"class":82},[69,154400,152403],{"class":109},[69,154402,152406],{"class":86},[69,154404,154405,154407,154409],{"class":71,"line":2943},[69,154406,15992],{"class":82},[69,154408,152010],{"class":90},[69,154410,152415],{"class":86},[69,154412,154413,154415,154417],{"class":71,"line":2972},[69,154414,152420],{"class":86},[69,154416,152423],{"class":1022},[69,154418,89057],{"class":86},[69,154420,154421,154423,154425],{"class":71,"line":2977},[69,154422,152420],{"class":86},[69,154424,63905],{"class":1022},[69,154426,89057],{"class":86},[69,154428,154429,154431,154433],{"class":71,"line":2994},[69,154430,152420],{"class":86},[69,154432,70349],{"class":1022},[69,154434,89057],{"class":86},[69,154436,154437,154439,154441],{"class":71,"line":2999},[69,154438,152420],{"class":86},[69,154440,152448],{"class":1022},[69,154442,89057],{"class":86},[69,154444,154445],{"class":71,"line":3004},[69,154446,39362],{"class":86},[29,154448,154449],{},"管理器示意：",[59,154451,154453],{"className":31614,"code":154452,"language":31616,"meta":64,"style":64},"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",[66,154454,154455,154464,154472,154483,154487,154497,154510,154521,154528,154534,154538,154547,154556,154562,154569],{"__ignoreMap":64},[69,154456,154457,154459,154462],{"class":71,"line":72},[69,154458,15934],{"class":82},[69,154460,154461],{"class":109}," StudentManager",[69,154463,4983],{"class":86},[69,154465,154466,154468,154470],{"class":71,"line":79},[69,154467,32037],{"class":82},[69,154469,32040],{"class":90},[69,154471,32043],{"class":86},[69,154473,154474,154476,154479,154481],{"class":71,"line":106},[69,154475,32081],{"class":90},[69,154477,154478],{"class":86},".students ",[69,154480,1019],{"class":82},[69,154482,53066],{"class":86},[69,154484,154485],{"class":71,"line":116},[69,154486,3644],{"emptyLinePlaceholder":1325},[69,154488,154489,154491,154494],{"class":71,"line":133},[69,154490,32037],{"class":82},[69,154492,154493],{"class":109}," find_by_id",[69,154495,154496],{"class":86},"(self, student_id):\n",[69,154498,154499,154501,154503,154505,154507],{"class":71,"line":139},[69,154500,4647],{"class":82},[69,154502,153113],{"class":86},[69,154504,27280],{"class":82},[69,154506,40109],{"class":90},[69,154508,154509],{"class":86},".students:\n",[69,154511,154512,154514,154517,154519],{"class":71,"line":401},[69,154513,5886],{"class":82},[69,154515,154516],{"class":86}," student.student_id ",[69,154518,4193],{"class":82},[69,154520,153134],{"class":86},[69,154522,154523,154526],{"class":71,"line":470},[69,154524,154525],{"class":82},"                return",[69,154527,153141],{"class":86},[69,154529,154530,154532],{"class":71,"line":475},[69,154531,15992],{"class":82},[69,154533,153148],{"class":90},[69,154535,154536],{"class":71,"line":482},[69,154537,3644],{"emptyLinePlaceholder":1325},[69,154539,154540,154542,154544],{"class":71,"line":497},[69,154541,32037],{"class":82},[69,154543,6451],{"class":109},[69,154545,154546],{"class":86},"(self, student):\n",[69,154548,154549,154551,154553],{"class":71,"line":502},[69,154550,3741],{"class":82},[69,154552,40109],{"class":90},[69,154554,154555],{"class":86},".find_by_id(student.student_id):\n",[69,154557,154558,154560],{"class":71,"line":509},[69,154559,16971],{"class":82},[69,154561,127028],{"class":90},[69,154563,154564,154566],{"class":71,"line":524},[69,154565,32081],{"class":90},[69,154567,154568],{"class":86},".students.append(student)\n",[69,154570,154571,154573],{"class":71,"line":2888},[69,154572,15992],{"class":82},[69,154574,154575],{"class":90}," True\n",[29,154577,154578],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154580,154582],{"id":154581},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[19,154584,154586],{"id":154585},"_1251-数据结构","12.5.1 数据结构",[59,154588,154590],{"className":31614,"code":154589,"language":31616,"meta":64,"style":64},"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",[66,154591,154592,154600,154631,154661,154690,154719],{"__ignoreMap":64},[69,154593,154594,154596,154598],{"class":71,"line":72},[69,154595,149441],{"class":86},[69,154597,1019],{"class":82},[69,154599,56674],{"class":86},[69,154601,154602,154604,154606,154608,154610,154612,154615,154617,154620,154622,154624,154626,154629],{"class":71,"line":79},[69,154603,149361],{"class":86},[69,154605,148973],{"class":1022},[69,154607,94],{"class":86},[69,154609,149584],{"class":1022},[69,154611,13677],{"class":86},[69,154613,154614],{"class":1022},"\"category\"",[69,154616,94],{"class":86},[69,154618,154619],{"class":1022},"\"手机\"",[69,154621,13677],{"class":86},[69,154623,85305],{"class":1022},[69,154625,94],{"class":86},[69,154627,154628],{"class":90},"12000",[69,154630,6174],{"class":86},[69,154632,154633,154635,154637,154639,154641,154643,154645,154647,154650,154652,154654,154656,154659],{"class":71,"line":106},[69,154634,149361],{"class":86},[69,154636,148973],{"class":1022},[69,154638,94],{"class":86},[69,154640,149584],{"class":1022},[69,154642,13677],{"class":86},[69,154644,154614],{"class":1022},[69,154646,94],{"class":86},[69,154648,154649],{"class":1022},"\"电脑\"",[69,154651,13677],{"class":86},[69,154653,85305],{"class":1022},[69,154655,94],{"class":86},[69,154657,154658],{"class":90},"18000",[69,154660,6174],{"class":86},[69,154662,154663,154665,154667,154669,154671,154673,154675,154677,154679,154681,154683,154685,154688],{"class":71,"line":116},[69,154664,149361],{"class":86},[69,154666,148973],{"class":1022},[69,154668,94],{"class":86},[69,154670,149605],{"class":1022},[69,154672,13677],{"class":86},[69,154674,154614],{"class":1022},[69,154676,94],{"class":86},[69,154678,154619],{"class":1022},[69,154680,13677],{"class":86},[69,154682,85305],{"class":1022},[69,154684,94],{"class":86},[69,154686,154687],{"class":90},"15000",[69,154689,6174],{"class":86},[69,154691,154692,154694,154696,154698,154700,154702,154704,154706,154708,154710,154712,154714,154717],{"class":71,"line":133},[69,154693,149361],{"class":86},[69,154695,148973],{"class":1022},[69,154697,94],{"class":86},[69,154699,149605],{"class":1022},[69,154701,13677],{"class":86},[69,154703,154614],{"class":1022},[69,154705,94],{"class":86},[69,154707,154649],{"class":1022},[69,154709,13677],{"class":86},[69,154711,85305],{"class":1022},[69,154713,94],{"class":86},[69,154715,154716],{"class":90},"16000",[69,154718,6174],{"class":86},[69,154720,154721],{"class":71,"line":139},[69,154722,34482],{"class":86},[19,154724,154726],{"id":154725},"_1252-按日期统计","12.5.2 按日期统计",[59,154728,154730],{"className":31614,"code":154729,"language":31616,"meta":64,"style":64},"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",[66,154731,154732,154741,154745,154756,154770,154783,154802,154806],{"__ignoreMap":64},[69,154733,154734,154737,154739],{"class":71,"line":72},[69,154735,154736],{"class":86},"daily_total ",[69,154738,1019],{"class":82},[69,154740,89089],{"class":86},[69,154742,154743],{"class":71,"line":79},[69,154744,3644],{"emptyLinePlaceholder":1325},[69,154746,154747,154749,154751,154753],{"class":71,"line":106},[69,154748,4269],{"class":82},[69,154750,149185],{"class":86},[69,154752,27280],{"class":82},[69,154754,154755],{"class":86}," sales:\n",[69,154757,154758,154761,154763,154766,154768],{"class":71,"line":116},[69,154759,154760],{"class":86},"    date ",[69,154762,1019],{"class":82},[69,154764,154765],{"class":86}," item[",[69,154767,148973],{"class":1022},[69,154769,34482],{"class":86},[69,154771,154772,154775,154777,154779,154781],{"class":71,"line":133},[69,154773,154774],{"class":86},"    amount ",[69,154776,1019],{"class":82},[69,154778,154765],{"class":86},[69,154780,85305],{"class":1022},[69,154782,34482],{"class":86},[69,154784,154785,154788,154790,154793,154795,154797,154799],{"class":71,"line":139},[69,154786,154787],{"class":86},"    daily_total[date] ",[69,154789,1019],{"class":82},[69,154791,154792],{"class":86}," daily_total.get(date, ",[69,154794,1583],{"class":90},[69,154796,14955],{"class":86},[69,154798,1869],{"class":82},[69,154800,154801],{"class":86}," amount\n",[69,154803,154804],{"class":71,"line":401},[69,154805,3644],{"emptyLinePlaceholder":1325},[69,154807,154808,154810],{"class":71,"line":470},[69,154809,31651],{"class":90},[69,154811,154812],{"class":86},"(daily_total)\n",[19,154814,154816],{"id":154815},"_1253-按类别统计","12.5.3 按类别统计",[59,154818,154820],{"className":31614,"code":154819,"language":31616,"meta":64,"style":64},"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",[66,154821,154822,154831,154835,154845,154858,154870,154888,154892],{"__ignoreMap":64},[69,154823,154824,154827,154829],{"class":71,"line":72},[69,154825,154826],{"class":86},"category_total ",[69,154828,1019],{"class":82},[69,154830,89089],{"class":86},[69,154832,154833],{"class":71,"line":79},[69,154834,3644],{"emptyLinePlaceholder":1325},[69,154836,154837,154839,154841,154843],{"class":71,"line":106},[69,154838,4269],{"class":82},[69,154840,149185],{"class":86},[69,154842,27280],{"class":82},[69,154844,154755],{"class":86},[69,154846,154847,154850,154852,154854,154856],{"class":71,"line":116},[69,154848,154849],{"class":86},"    category ",[69,154851,1019],{"class":82},[69,154853,154765],{"class":86},[69,154855,154614],{"class":1022},[69,154857,34482],{"class":86},[69,154859,154860,154862,154864,154866,154868],{"class":71,"line":133},[69,154861,154774],{"class":86},[69,154863,1019],{"class":82},[69,154865,154765],{"class":86},[69,154867,85305],{"class":1022},[69,154869,34482],{"class":86},[69,154871,154872,154875,154877,154880,154882,154884,154886],{"class":71,"line":139},[69,154873,154874],{"class":86},"    category_total[category] ",[69,154876,1019],{"class":82},[69,154878,154879],{"class":86}," category_total.get(category, ",[69,154881,1583],{"class":90},[69,154883,14955],{"class":86},[69,154885,1869],{"class":82},[69,154887,154801],{"class":86},[69,154889,154890],{"class":71,"line":401},[69,154891,3644],{"emptyLinePlaceholder":1325},[69,154893,154894,154896],{"class":71,"line":470},[69,154895,31651],{"class":90},[69,154897,154898],{"class":86},"(category_total)\n",[19,154900,154902],{"id":154901},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[59,154904,154906],{"className":31614,"code":154905,"language":31616,"meta":64,"style":64},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[66,154907,154908,154933],{"__ignoreMap":64},[69,154909,154910,154913,154915,154917,154920,154923,154926,154929,154931],{"class":71,"line":72},[69,154911,154912],{"class":86},"top_date, top_amount ",[69,154914,1019],{"class":82},[69,154916,7193],{"class":90},[69,154918,154919],{"class":86},"(daily_total.items(), ",[69,154921,154922],{"class":6458},"key",[69,154924,154925],{"class":82},"=lambda",[69,154927,154928],{"class":86}," item: item[",[69,154930,1609],{"class":90},[69,154932,5901],{"class":86},[69,154934,154935,154937],{"class":71,"line":79},[69,154936,31651],{"class":90},[69,154938,154939],{"class":86},"(top_date, top_amount)\n",[14,154941,154943],{"id":154942},"_126-绘制柱状图","12.6 绘制柱状图",[59,154945,154947],{"className":31614,"code":154946,"language":31616,"meta":64,"style":64},"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",[66,154948,154949,154963,154974,154978,154986,154998,155010,155021,155025,155029,155039,155050,155064,155069,155086,155103,155119,155123],{"__ignoreMap":64},[69,154950,154951,154953,154955,154957,154959,154961],{"class":71,"line":72},[69,154952,31973],{"class":82},[69,154954,148355],{"class":86},[69,154956,31628],{"class":82},[69,154958,148360],{"class":86},[69,154960,32619],{"class":82},[69,154962,148365],{"class":86},[69,154964,154965,154967,154969,154971],{"class":71,"line":79},[69,154966,31973],{"class":82},[69,154968,148214],{"class":86},[69,154970,31628],{"class":82},[69,154972,154973],{"class":86}," Bar\n",[69,154975,154976],{"class":71,"line":106},[69,154977,3644],{"emptyLinePlaceholder":1325},[69,154979,154980,154982,154984],{"class":71,"line":116},[69,154981,154826],{"class":86},[69,154983,1019],{"class":82},[69,154985,113],{"class":86},[69,154987,154988,154991,154993,154996],{"class":71,"line":133},[69,154989,154990],{"class":1022},"    \"手机\"",[69,154992,94],{"class":86},[69,154994,154995],{"class":90},"27000",[69,154997,32702],{"class":86},[69,154999,155000,155003,155005,155008],{"class":71,"line":139},[69,155001,155002],{"class":1022},"    \"电脑\"",[69,155004,94],{"class":86},[69,155006,155007],{"class":90},"34000",[69,155009,32702],{"class":86},[69,155011,155012,155015,155017,155019],{"class":71,"line":401},[69,155013,155014],{"class":1022},"    \"耳机\"",[69,155016,94],{"class":86},[69,155018,125620],{"class":90},[69,155020,32702],{"class":86},[69,155022,155023],{"class":71,"line":470},[69,155024,142],{"class":86},[69,155026,155027],{"class":71,"line":475},[69,155028,3644],{"emptyLinePlaceholder":1325},[69,155030,155031,155034,155036],{"class":71,"line":482},[69,155032,155033],{"class":86},"bar ",[69,155035,1019],{"class":82},[69,155037,155038],{"class":86}," Bar()\n",[69,155040,155041,155044,155047],{"class":71,"line":497},[69,155042,155043],{"class":86},"bar.add_xaxis(",[69,155045,155046],{"class":90},"list",[69,155048,155049],{"class":86},"(category_total.keys()))\n",[69,155051,155052,155055,155057,155059,155061],{"class":71,"line":502},[69,155053,155054],{"class":86},"bar.add_yaxis(",[69,155056,148271],{"class":1022},[69,155058,13677],{"class":86},[69,155060,155046],{"class":90},[69,155062,155063],{"class":86},"(category_total.values()))\n",[69,155065,155066],{"class":71,"line":509},[69,155067,155068],{"class":86},"bar.set_global_opts(\n",[69,155070,155071,155073,155075,155077,155079,155081,155084],{"class":71,"line":524},[69,155072,148449],{"class":6458},[69,155074,1019],{"class":82},[69,155076,148454],{"class":86},[69,155078,52640],{"class":6458},[69,155080,1019],{"class":82},[69,155082,155083],{"class":1022},"\"品类销售额\"",[69,155085,39283],{"class":86},[69,155087,155088,155090,155092,155094,155096,155098,155101],{"class":71,"line":2888},[69,155089,148468],{"class":6458},[69,155091,1019],{"class":82},[69,155093,148473],{"class":86},[69,155095,81031],{"class":6458},[69,155097,1019],{"class":82},[69,155099,155100],{"class":1022},"\"品类\"",[69,155102,39283],{"class":86},[69,155104,155105,155107,155109,155111,155113,155115,155117],{"class":71,"line":2893},[69,155106,148487],{"class":6458},[69,155108,1019],{"class":82},[69,155110,148473],{"class":86},[69,155112,81031],{"class":6458},[69,155114,1019],{"class":82},[69,155116,148271],{"class":1022},[69,155118,39283],{"class":86},[69,155120,155121],{"class":71,"line":2899},[69,155122,1404],{"class":86},[69,155124,155125,155128,155131],{"class":71,"line":2919},[69,155126,155127],{"class":86},"bar.render(",[69,155129,155130],{"class":1022},"\"category_sales.html\"",[69,155132,1404],{"class":86},[14,155134,155136],{"id":155135},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[29,155138,155139],{},"时间线适合展示不同日期、月份、年份的数据变化。",[59,155141,155143],{"className":31614,"code":155142,"language":31616,"meta":64,"style":64},"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",[66,155144,155145,155159,155170,155174,155182,155206,155229,155254,155258,155262,155272,155276,155287,155296,155306,155320,155351,155356,155360],{"__ignoreMap":64},[69,155146,155147,155149,155151,155153,155155,155157],{"class":71,"line":72},[69,155148,31973],{"class":82},[69,155150,148355],{"class":86},[69,155152,31628],{"class":82},[69,155154,148360],{"class":86},[69,155156,32619],{"class":82},[69,155158,148365],{"class":86},[69,155160,155161,155163,155165,155167],{"class":71,"line":79},[69,155162,31973],{"class":82},[69,155164,148214],{"class":86},[69,155166,31628],{"class":82},[69,155168,155169],{"class":86}," Bar, Timeline\n",[69,155171,155172],{"class":71,"line":106},[69,155173,3644],{"emptyLinePlaceholder":1325},[69,155175,155176,155178,155180],{"class":71,"line":116},[69,155177,102879],{"class":86},[69,155179,1019],{"class":82},[69,155181,113],{"class":86},[69,155183,155184,155187,155190,155192,155194,155196,155198,155200,155202,155204],{"class":71,"line":133},[69,155185,155186],{"class":1022},"    \"2024-10-01\"",[69,155188,155189],{"class":86},": {",[69,155191,154619],{"class":1022},[69,155193,94],{"class":86},[69,155195,154628],{"class":90},[69,155197,13677],{"class":86},[69,155199,154649],{"class":1022},[69,155201,94],{"class":86},[69,155203,154658],{"class":90},[69,155205,6174],{"class":86},[69,155207,155208,155211,155213,155215,155217,155219,155221,155223,155225,155227],{"class":71,"line":139},[69,155209,155210],{"class":1022},"    \"2024-10-02\"",[69,155212,155189],{"class":86},[69,155214,154619],{"class":1022},[69,155216,94],{"class":86},[69,155218,154687],{"class":90},[69,155220,13677],{"class":86},[69,155222,154649],{"class":1022},[69,155224,94],{"class":86},[69,155226,154716],{"class":90},[69,155228,6174],{"class":86},[69,155230,155231,155234,155236,155238,155240,155243,155245,155247,155249,155252],{"class":71,"line":401},[69,155232,155233],{"class":1022},"    \"2024-10-03\"",[69,155235,155189],{"class":86},[69,155237,154619],{"class":1022},[69,155239,94],{"class":86},[69,155241,155242],{"class":90},"17000",[69,155244,13677],{"class":86},[69,155246,154649],{"class":1022},[69,155248,94],{"class":86},[69,155250,155251],{"class":90},"19000",[69,155253,6174],{"class":86},[69,155255,155256],{"class":71,"line":470},[69,155257,142],{"class":86},[69,155259,155260],{"class":71,"line":475},[69,155261,3644],{"emptyLinePlaceholder":1325},[69,155263,155264,155267,155269],{"class":71,"line":482},[69,155265,155266],{"class":86},"timeline ",[69,155268,1019],{"class":82},[69,155270,155271],{"class":86}," Timeline()\n",[69,155273,155274],{"class":71,"line":497},[69,155275,3644],{"emptyLinePlaceholder":1325},[69,155277,155278,155280,155283,155285],{"class":71,"line":502},[69,155279,4269],{"class":82},[69,155281,155282],{"class":86}," date, category_data ",[69,155284,27280],{"class":82},[69,155286,150124],{"class":86},[69,155288,155289,155292,155294],{"class":71,"line":509},[69,155290,155291],{"class":86},"    bar ",[69,155293,1019],{"class":82},[69,155295,155038],{"class":86},[69,155297,155298,155301,155303],{"class":71,"line":524},[69,155299,155300],{"class":86},"    bar.add_xaxis(",[69,155302,155046],{"class":90},[69,155304,155305],{"class":86},"(category_data.keys()))\n",[69,155307,155308,155311,155313,155315,155317],{"class":71,"line":2888},[69,155309,155310],{"class":86},"    bar.add_yaxis(",[69,155312,148271],{"class":1022},[69,155314,13677],{"class":86},[69,155316,155046],{"class":90},[69,155318,155319],{"class":86},"(category_data.values()))\n",[69,155321,155322,155325,155328,155330,155332,155334,155336,155338,155340,155342,155344,155346,155349],{"class":71,"line":2893},[69,155323,155324],{"class":86},"    bar.set_global_opts(",[69,155326,155327],{"class":6458},"title_opts",[69,155329,1019],{"class":82},[69,155331,148454],{"class":86},[69,155333,52640],{"class":6458},[69,155335,1019],{"class":82},[69,155337,1447],{"class":82},[69,155339,1642],{"class":1022},[69,155341,2283],{"class":90},[69,155343,75147],{"class":86},[69,155345,2332],{"class":90},[69,155347,155348],{"class":1022},"销售额\"",[69,155350,31733],{"class":86},[69,155352,155353],{"class":71,"line":2899},[69,155354,155355],{"class":86},"    timeline.add(bar, date)\n",[69,155357,155358],{"class":71,"line":2919},[69,155359,3644],{"emptyLinePlaceholder":1325},[69,155361,155362,155365,155368],{"class":71,"line":2924},[69,155363,155364],{"class":86},"timeline.render(",[69,155366,155367],{"class":1022},"\"timeline_sales.html\"",[69,155369,1404],{"class":86},[14,155371,155373],{"id":155372},"_128-绘制地图","12.8 绘制地图",[29,155375,155376],{},"地图适合展示地区数据。",[59,155378,155380],{"className":31614,"code":155379,"language":31616,"meta":64,"style":64},"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",[66,155381,155382,155396,155407,155411,155419,155432,155444,155457,155470,155474,155478,155488,155503,155508,155525,155544,155548],{"__ignoreMap":64},[69,155383,155384,155386,155388,155390,155392,155394],{"class":71,"line":72},[69,155385,31973],{"class":82},[69,155387,148355],{"class":86},[69,155389,31628],{"class":82},[69,155391,148360],{"class":86},[69,155393,32619],{"class":82},[69,155395,148365],{"class":86},[69,155397,155398,155400,155402,155404],{"class":71,"line":79},[69,155399,31973],{"class":82},[69,155401,148214],{"class":86},[69,155403,31628],{"class":82},[69,155405,155406],{"class":86}," Map\n",[69,155408,155409],{"class":71,"line":106},[69,155410,3644],{"emptyLinePlaceholder":1325},[69,155412,155413,155415,155417],{"class":71,"line":116},[69,155414,102879],{"class":86},[69,155416,1019],{"class":82},[69,155418,56674],{"class":86},[69,155420,155421,155424,155426,155428,155430],{"class":71,"line":133},[69,155422,155423],{"class":86},"    (",[69,155425,70494],{"class":1022},[69,155427,13677],{"class":86},[69,155429,2204],{"class":90},[69,155431,39283],{"class":86},[69,155433,155434,155436,155438,155440,155442],{"class":71,"line":139},[69,155435,155423],{"class":86},[69,155437,70514],{"class":1022},[69,155439,13677],{"class":86},[69,155441,148288],{"class":90},[69,155443,39283],{"class":86},[69,155445,155446,155448,155451,155453,155455],{"class":71,"line":401},[69,155447,155423],{"class":86},[69,155449,155450],{"class":1022},"\"广东\"",[69,155452,13677],{"class":86},[69,155454,2967],{"class":90},[69,155456,39283],{"class":86},[69,155458,155459,155461,155464,155466,155468],{"class":71,"line":470},[69,155460,155423],{"class":86},[69,155462,155463],{"class":1022},"\"浙江\"",[69,155465,13677],{"class":86},[69,155467,148293],{"class":90},[69,155469,39283],{"class":86},[69,155471,155472],{"class":71,"line":475},[69,155473,34482],{"class":86},[69,155475,155476],{"class":71,"line":482},[69,155477,3644],{"emptyLinePlaceholder":1325},[69,155479,155480,155483,155485],{"class":71,"line":497},[69,155481,155482],{"class":86},"map_chart ",[69,155484,1019],{"class":82},[69,155486,155487],{"class":86}," Map()\n",[69,155489,155490,155493,155495,155498,155501],{"class":71,"line":502},[69,155491,155492],{"class":86},"map_chart.add(",[69,155494,148271],{"class":1022},[69,155496,155497],{"class":86},", data, ",[69,155499,155500],{"class":1022},"\"china\"",[69,155502,1404],{"class":86},[69,155504,155505],{"class":71,"line":509},[69,155506,155507],{"class":86},"map_chart.set_global_opts(\n",[69,155509,155510,155512,155514,155516,155518,155520,155523],{"class":71,"line":524},[69,155511,148449],{"class":6458},[69,155513,1019],{"class":82},[69,155515,148454],{"class":86},[69,155517,52640],{"class":6458},[69,155519,1019],{"class":82},[69,155521,155522],{"class":1022},"\"地区销售额\"",[69,155524,39283],{"class":86},[69,155526,155527,155530,155532,155535,155538,155540,155542],{"class":71,"line":2888},[69,155528,155529],{"class":6458},"    visualmap_opts",[69,155531,1019],{"class":82},[69,155533,155534],{"class":86},"opts.VisualMapOpts(",[69,155536,155537],{"class":6458},"max_",[69,155539,1019],{"class":82},[69,155541,2967],{"class":90},[69,155543,39283],{"class":86},[69,155545,155546],{"class":71,"line":2893},[69,155547,1404],{"class":86},[69,155549,155550,155553,155556],{"class":71,"line":2899},[69,155551,155552],{"class":86},"map_chart.render(",[69,155554,155555],{"class":1022},"\"map_sales.html\"",[69,155557,1404],{"class":86},[29,155559,155560],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155562,155564],{"id":155563},"_129-项目拆分建议","12.9 项目拆分建议",[29,155566,155567],{},"当代码超过一个文件时，可以这样组织：",[59,155569,155572],{"className":155570,"code":155571,"language":540,"meta":64},[538],"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",[66,155573,155571],{"__ignoreMap":64},[29,155575,155576],{},"职责：",[37,155578,155579,155585,155591,155597],{},[40,155580,155581,155584],{},[66,155582,155583],{},"main.py","：程序入口。",[40,155586,155587,155590],{},[66,155588,155589],{},"file_utils.py","：读写 JSON。",[40,155592,155593,155596],{},[66,155594,155595],{},"sales_service.py","：统计销售数据。",[40,155598,155599,155602],{},[66,155600,155601],{},"chart_builder.py","：生成图表。",[14,155604,155606],{"id":155605},"_1210-python基础复习清单","12.10 Python基础复习清单",[29,155608,155609],{},"语法基础：",[37,155611,155612,155615,155618,155621],{},[40,155613,155614],{},"会写变量、注释、输入输出。",[40,155616,155617],{},"会使用 int、float、str、bool。",[40,155619,155620],{},"会做类型转换。",[40,155622,155623],{},"会使用 f-string 格式化输出。",[29,155625,155626],{},"流程控制：",[37,155628,155629,155635,155641,155649],{},[40,155630,155631,155632,29621],{},"会写 ",[66,155633,155634],{},"if elif else",[40,155636,155631,155637,102239,155639,29621],{},[66,155638,109884],{},[66,155640,4269],{},[40,155642,155643,155644,102239,155646,29621],{},"理解 ",[66,155645,3297],{},[66,155647,155648],{},"continue",[40,155650,155651],{},"能写嵌套循环。",[29,155653,155654],{},"函数：",[37,155656,155657,155660,155663,155666],{},[40,155658,155659],{},"会定义和调用函数。",[40,155661,155662],{},"理解参数和返回值。",[40,155664,155665],{},"知道局部变量和全局变量。",[40,155667,155668],{},"会使用默认参数、关键字参数、不定长参数。",[29,155670,155671],{},"容器：",[37,155673,155674,155677,155680,155683,155686],{},[40,155675,155676],{},"会使用列表增删改查。",[40,155678,155679],{},"会遍历列表、字典。",[40,155681,155682],{},"会使用切片。",[40,155684,155685],{},"会用集合去重。",[40,155687,155688],{},"会处理列表嵌套字典。",[29,155690,155691],{},"文件和模块：",[37,155693,155694,155697,155700,155703,155706],{},[40,155695,155696],{},"会读写文本文件。",[40,155698,155699],{},"会读写 JSON。",[40,155701,155702],{},"会捕获常见异常。",[40,155704,155705],{},"会导入模块和第三方包。",[40,155707,155708],{},"会创建简单包结构。",[29,155710,155711],{},"项目能力：",[37,155713,155714,155717,155720,155723,155726],{},[40,155715,155716],{},"能把代码拆成函数。",[40,155718,155719],{},"能把数据保存到文件。",[40,155721,155722],{},"能处理用户输入错误。",[40,155724,155725],{},"能写一个完整菜单程序。",[40,155727,155728],{},"能用 pyecharts 生成图表。",[14,155730,155732],{"id":155731},"_1211-推荐练习顺序","12.11 推荐练习顺序",[37,155734,155735,155738,155741,155744,155747,155750,155753,155756],{},[40,155736,155737],{},"猜数字游戏。",[40,155739,155740],{},"ATM 菜单程序。",[40,155742,155743],{},"学生成绩统计。",[40,155745,155746],{},"学生管理系统函数版。",[40,155748,155749],{},"学生管理系统文件持久化版。",[40,155751,155752],{},"学生管理系统面向对象版。",[40,155754,155755],{},"销售数据统计。",[40,155757,155758],{},"销售数据可视化。",[14,155760,155762],{"id":155761},"_1212-常见学习误区","12.12 常见学习误区",[37,155764,155765,155768,155771,155774,155777,155780,155783],{},[40,155766,155767],{},"只看视频不敲代码。",[40,155769,155770],{},"一报错就复制错误去搜，不先读报错位置。",[40,155772,155773],{},"变量名随便写，后续自己看不懂。",[40,155775,155776],{},"所有代码都写在一个文件一个函数里。",[40,155778,155779],{},"不保存练习代码，复习时没有材料。",[40,155781,155782],{},"还没掌握列表字典就急着学框架。",[40,155784,155785],{},"不会读官方文档，只依赖教程。",[14,155787,155789],{"id":155788},"_1213-如何读报错","12.13 如何读报错",[29,155791,155792],{},"报错通常从下往上看最后几行。",[29,155794,16375],{},[59,155796,155799],{"className":155797,"code":155798,"language":540,"meta":64},[538],"ValueError: invalid literal for int() with base 10: 'abc'\n",[66,155800,155798],{"__ignoreMap":64},[29,155802,25836],{},[37,155804,155805,155811,155821],{},[40,155806,155807,155808,29621],{},"异常类型是 ",[66,155809,155810],{},"ValueError",[40,155812,108566,155813,155816,155817,155820],{},[66,155814,155815],{},"int()"," 无法把 ",[66,155818,155819],{},"'abc'"," 转成整数。",[40,155822,155823],{},"应该检查输入内容或增加异常处理。",[29,155825,155826],{},"再看文件名和行号：",[59,155828,155831],{"className":155829,"code":155830,"language":540,"meta":64},[538],"File \"main.py\", line 10, in \u003Cmodule>\n",[66,155832,155830],{"__ignoreMap":64},[29,155834,155835,155836,155838],{},"表示错误发生在 ",[66,155837,155583],{}," 第 10 行。",[14,155840,155842],{"id":155841},"_1214-后续学习方向","12.14 后续学习方向",[29,155844,155845],{},"Python 基础完成后，可以按兴趣选择方向：",[37,155847,155848,155860,155869,155881,155892,155901,155911],{},[40,155849,155850,155851,1604,155854,1604,155857,29621],{},"自动化办公：",[66,155852,155853],{},"openpyxl",[66,155855,155856],{},"python-docx",[66,155858,155859],{},"pdfplumber",[40,155861,155862,155863,1604,155865,1604,155867,29621],{},"数据分析：",[66,155864,101847],{},[66,155866,147161],{},[66,155868,147169],{},[40,155870,155871,155872,1604,155875,1604,155878,29621],{},"Web 后端：",[66,155873,155874],{},"Flask",[66,155876,155877],{},"FastAPI",[66,155879,155880],{},"Django",[40,155882,155883,155884,1604,155886,1604,155889,29621],{},"爬虫：",[66,155885,147146],{},[66,155887,155888],{},"BeautifulSoup",[66,155890,155891],{},"Scrapy",[40,155893,155894,155895,1604,155897,155900],{},"测试开发：",[66,155896,147193],{},[66,155898,155899],{},"selenium","、接口测试。",[40,155902,155903,155904,1604,155906,1604,155908,29621],{},"人工智能：",[66,155905,101847],{},[66,155907,147161],{},[66,155909,155910],{},"pytorch",[40,155912,155913,155914,1604,155916,1604,155919,29621],{},"运维脚本：",[66,155915,146762],{},[66,155917,155918],{},"subprocess",[66,155920,155921],{},"paramiko",[29,155923,155924],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155926,155928],{"id":155927},"_1215-结课练习","12.15 结课练习",[37,155930,155931,155934,155937,155940,155943,155946,155949,155952],{},[40,155932,155933],{},"完成函数版学生管理系统。",[40,155935,155936],{},"给学生管理系统增加 JSON 持久化。",[40,155938,155939],{},"给学生管理系统增加异常处理。",[40,155941,155942],{},"把学生管理系统改成面向对象版。",[40,155944,155945],{},"使用 pyecharts 绘制学生成绩柱状图。",[40,155947,155948],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[40,155950,155951],{},"按品类统计销售额并绘制柱状图。",[40,155953,155954],{},"写一份自己的 Python 学习路线图。",[1297,155956,155957],{},"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":64,"searchDepth":79,"depth":79,"links":155959},[155960,155961,155964,155965,155966,155972,155973,155974,155975,155976,155977,155978,155979,155980,155981],{"id":152676,"depth":79,"text":152677},{"id":152726,"depth":79,"text":152727,"children":155962},[155963],{"id":152730,"depth":106,"text":152731},{"id":152769,"depth":79,"text":152770},{"id":154243,"depth":79,"text":154244},{"id":154581,"depth":79,"text":154582,"children":155967},[155968,155969,155970,155971],{"id":154585,"depth":106,"text":154586},{"id":154725,"depth":106,"text":154726},{"id":154815,"depth":106,"text":154816},{"id":154901,"depth":106,"text":154902},{"id":154942,"depth":79,"text":154943},{"id":155135,"depth":79,"text":155136},{"id":155372,"depth":79,"text":155373},{"id":155563,"depth":79,"text":155564},{"id":155605,"depth":79,"text":155606},{"id":155731,"depth":79,"text":155732},{"id":155761,"depth":79,"text":155762},{"id":155788,"depth":79,"text":155789},{"id":155841,"depth":79,"text":155842},{"id":155927,"depth":79,"text":155928},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152668,"description":1322},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155988,"title":155989,"body":155990,"description":1322,"extension":1323,"meta":158459,"navigation":1325,"path":158460,"seo":158461,"stem":158462,"__hash__":158463},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155991,"toc":158434},[155992,155995,155999,156002,156005,156025,156028,156051,156054,156057,156079,156082,156104,156108,156111,156151,156154,156275,156279,156282,156322,156325,156349,156352,156356,156359,156373,156406,156409,156444,156447,156470,156473,156506,156509,156511,156517,156592,156595,156601,156618,156658,156662,156665,156711,156713,156751,156754,156789,156792,156827,156830,156862,156865,156884,156888,156892,157005,157007,157082,157086,157132,157135,157161,157170,157174,157177,157240,157248,157276,157280,157320,157385,157389,157392,157431,157434,157479,157482,157543,157547,157574,157577,157605,157608,157612,157616,157681,157684,157722,157725,157757,157761,157860,157864,157867,157940,157943,157991,157995,158001,158041,158044,158091,158094,158143,158147,158149,158163,158165,158346,158350,158377,158397,158404,158408,158425,158431],[10,155993,155989],{"id":155994},"_2-基础语法变量与字符串",[14,155996,155998],{"id":155997},"_21-注释","2.1 注释",[29,156000,156001],{},"注释是给人看的说明文字，不会被 Python 执行。",[29,156003,156004],{},"单行注释：",[59,156006,156008],{"className":31614,"code":156007,"language":31616,"meta":64,"style":64},"# 这是单行注释\nprint(\"hello\")\n",[66,156009,156010,156015],{"__ignoreMap":64},[69,156011,156012],{"class":71,"line":72},[69,156013,156014],{"class":75},"# 这是单行注释\n",[69,156016,156017,156019,156021,156023],{"class":71,"line":79},[69,156018,31651],{"class":90},[69,156020,1398],{"class":86},[69,156022,7086],{"class":1022},[69,156024,1404],{"class":86},[29,156026,156027],{},"多行说明常用三引号：",[59,156029,156031],{"className":31614,"code":156030,"language":31616,"meta":64,"style":64},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[66,156032,156033,156037,156042,156047],{"__ignoreMap":64},[69,156034,156035],{"class":71,"line":72},[69,156036,96919],{"class":1022},[69,156038,156039],{"class":71,"line":79},[69,156040,156041],{"class":1022},"这是多行说明。\n",[69,156043,156044],{"class":71,"line":106},[69,156045,156046],{"class":1022},"常用于文件顶部说明、函数说明等。\n",[69,156048,156049],{"class":71,"line":116},[69,156050,96919],{"class":1022},[29,156052,156053],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[29,156055,156056],{},"不好：",[59,156058,156060],{"className":31614,"code":156059,"language":31616,"meta":64,"style":64},"# age 加 1\nage = age + 1\n",[66,156061,156062,156067],{"__ignoreMap":64},[69,156063,156064],{"class":71,"line":72},[69,156065,156066],{"class":75},"# age 加 1\n",[69,156068,156069,156071,156073,156075,156077],{"class":71,"line":79},[69,156070,147522],{"class":86},[69,156072,1019],{"class":82},[69,156074,16946],{"class":86},[69,156076,1869],{"class":82},[69,156078,56926],{"class":90},[29,156080,156081],{},"较好：",[59,156083,156085],{"className":31614,"code":156084,"language":31616,"meta":64,"style":64},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[66,156086,156087,156092],{"__ignoreMap":64},[69,156088,156089],{"class":71,"line":72},[69,156090,156091],{"class":75},"# 用户过完生日后，年龄增加一岁\n",[69,156093,156094,156096,156098,156100,156102],{"class":71,"line":79},[69,156095,147522],{"class":86},[69,156097,1019],{"class":82},[69,156099,16946],{"class":86},[69,156101,1869],{"class":82},[69,156103,56926],{"class":90},[14,156105,156107],{"id":156106},"_22-字面量","2.2 字面量",[29,156109,156110],{},"字面量就是代码中直接写出来的数据。",[59,156112,156114],{"className":31614,"code":156113,"language":31616,"meta":64,"style":64},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[66,156115,156116,156123,156130,156137,156144],{"__ignoreMap":64},[69,156117,156118,156120],{"class":71,"line":72},[69,156119,124],{"class":90},[69,156121,156122],{"class":75},"          # 整数\n",[69,156124,156125,156127],{"class":71,"line":79},[69,156126,1444],{"class":90},[69,156128,156129],{"class":75},"         # 小数\n",[69,156131,156132,156134],{"class":71,"line":106},[69,156133,7086],{"class":1022},[69,156135,156136],{"class":75},"      # 字符串\n",[69,156138,156139,156141],{"class":71,"line":116},[69,156140,32712],{"class":90},[69,156142,156143],{"class":75},"         # 布尔值\n",[69,156145,156146,156148],{"class":71,"line":133},[69,156147,96907],{"class":90},[69,156149,156150],{"class":75},"         # 空值\n",[29,156152,156153],{},"常见字面量类型：",[1530,156155,156156,156166],{},[1533,156157,156158],{},[1536,156159,156160,156162,156164],{},[1539,156161,24974],{},[1539,156163,28728],{},[1539,156165,27106],{},[1576,156167,156168,156179,156190,156201,156213,156225,156237,156250,156262],{},[1536,156169,156170,156172,156176],{},[1581,156171,1401],{},[1581,156173,156174],{},[66,156175,124],{},[1581,156177,156178],{},"整数",[1536,156180,156181,156183,156187],{},[1581,156182,1436],{},[1581,156184,156185],{},[66,156186,1444],{},[1581,156188,156189],{},"浮点数",[1536,156191,156192,156194,156198],{},[1581,156193,2554],{},[1581,156195,156196],{},[66,156197,7086],{},[1581,156199,156200],{},"字符串",[1536,156202,156203,156205,156211],{},[1581,156204,2606],{},[1581,156206,156207,1604,156209],{},[66,156208,32712],{},[66,156210,35223],{},[1581,156212,67241],{},[1536,156214,156215,156218,156222],{},[1581,156216,156217],{},"NoneType",[1581,156219,156220],{},[66,156221,96907],{},[1581,156223,156224],{},"空值",[1536,156226,156227,156229,156234],{},[1581,156228,155046],{},[1581,156230,156231],{},[66,156232,156233],{},"[1, 2, 3]",[1581,156235,156236],{},"列表",[1536,156238,156239,156242,156247],{},[1581,156240,156241],{},"tuple",[1581,156243,156244],{},[66,156245,156246],{},"(1, 2, 3)",[1581,156248,156249],{},"元组",[1536,156251,156252,156254,156259],{},[1581,156253,115767],{},[1581,156255,156256],{},[66,156257,156258],{},"{\"name\": \"张三\"}",[1581,156260,156261],{},"字典",[1536,156263,156264,156267,156272],{},[1581,156265,156266],{},"set",[1581,156268,156269],{},[66,156270,156271],{},"{1, 2, 3}",[1581,156273,156274],{},"集合",[14,156276,156278],{"id":156277},"_23-变量","2.3 变量",[29,156280,156281],{},"变量是保存数据的名字。",[59,156283,156285],{"className":31614,"code":156284,"language":31616,"meta":64,"style":64},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[66,156286,156287,156295,156303,156313],{"__ignoreMap":64},[69,156288,156289,156291,156293],{"class":71,"line":72},[69,156290,147512],{"class":86},[69,156292,1019],{"class":82},[69,156294,150329],{"class":1022},[69,156296,156297,156299,156301],{"class":71,"line":79},[69,156298,147522],{"class":86},[69,156300,1019],{"class":82},[69,156302,147527],{"class":90},[69,156304,156305,156308,156310],{"class":71,"line":106},[69,156306,156307],{"class":86},"height ",[69,156309,1019],{"class":82},[69,156311,156312],{"class":90}," 1.75\n",[69,156314,156315,156318,156320],{"class":71,"line":116},[69,156316,156317],{"class":86},"is_student ",[69,156319,1019],{"class":82},[69,156321,154575],{"class":90},[29,156323,156324],{},"Python 的变量不需要提前声明类型：",[59,156326,156328],{"className":31614,"code":156327,"language":31616,"meta":64,"style":64},"score = 100\nscore = \"满分\"\n",[66,156329,156330,156340],{"__ignoreMap":64},[69,156331,156332,156335,156337],{"class":71,"line":72},[69,156333,156334],{"class":86},"score ",[69,156336,1019],{"class":82},[69,156338,156339],{"class":90}," 100\n",[69,156341,156342,156344,156346],{"class":71,"line":79},[69,156343,156334],{"class":86},[69,156345,1019],{"class":82},[69,156347,156348],{"class":1022}," \"满分\"\n",[29,156350,156351],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156353,156355],{"id":156354},"_24-变量命名规则","2.4 变量命名规则",[29,156357,156358],{},"硬性规则：",[37,156360,156361,156364,156367,156370],{},[40,156362,156363],{},"只能由字母、数字、下划线组成。",[40,156365,156366],{},"不能以数字开头。",[40,156368,156369],{},"不能使用 Python 关键字。",[40,156371,156372],{},"区分大小写。",[59,156374,156376],{"className":31614,"code":156375,"language":31616,"meta":64,"style":64},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[66,156377,156378,156387,156396],{"__ignoreMap":64},[69,156379,156380,156383,156385],{"class":71,"line":72},[69,156381,156382],{"class":86},"user_name ",[69,156384,1019],{"class":82},[69,156386,147517],{"class":1022},[69,156388,156389,156392,156394],{"class":71,"line":79},[69,156390,156391],{"class":86},"age2 ",[69,156393,1019],{"class":82},[69,156395,147527],{"class":90},[69,156397,156398,156401,156403],{"class":71,"line":106},[69,156399,156400],{"class":86},"_token ",[69,156402,1019],{"class":82},[69,156404,156405],{"class":1022}," \"abc\"\n",[29,156407,156408],{},"错误写法：",[59,156410,156412],{"className":31614,"code":156411,"language":31616,"meta":64,"style":64},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[66,156413,156414,156423,156435],{"__ignoreMap":64},[69,156415,156416,156419,156421],{"class":71,"line":72},[69,156417,156418],{"class":78624},"2age",[69,156420,14805],{"class":82},[69,156422,147527],{"class":90},[69,156424,156425,156427,156429,156431,156433],{"class":71,"line":79},[69,156426,132790],{"class":86},[69,156428,1920],{"class":82},[69,156430,147512],{"class":86},[69,156432,1019],{"class":82},[69,156434,147517],{"class":1022},[69,156436,156437,156439,156441],{"class":71,"line":106},[69,156438,15934],{"class":82},[69,156440,14805],{"class":82},[69,156442,156443],{"class":1022}," \"一班\"\n",[29,156445,156446],{},"查看关键字：",[59,156448,156450],{"className":31614,"code":156449,"language":31616,"meta":64,"style":64},"import keyword\n\nprint(keyword.kwlist)\n",[66,156451,156452,156459,156463],{"__ignoreMap":64},[69,156453,156454,156456],{"class":71,"line":72},[69,156455,31628],{"class":82},[69,156457,156458],{"class":86}," keyword\n",[69,156460,156461],{"class":71,"line":79},[69,156462,3644],{"emptyLinePlaceholder":1325},[69,156464,156465,156467],{"class":71,"line":106},[69,156466,31651],{"class":90},[69,156468,156469],{"class":86},"(keyword.kwlist)\n",[29,156471,156472],{},"推荐命名风格：",[59,156474,156476],{"className":31614,"code":156475,"language":31616,"meta":64,"style":64},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[66,156477,156478,156487,156497],{"__ignoreMap":64},[69,156479,156480,156483,156485],{"class":71,"line":72},[69,156481,156482],{"class":86},"student_name ",[69,156484,1019],{"class":82},[69,156486,150329],{"class":1022},[69,156488,156489,156492,156494],{"class":71,"line":79},[69,156490,156491],{"class":86},"total_price ",[69,156493,1019],{"class":82},[69,156495,156496],{"class":90}," 99.8\n",[69,156498,156499,156502,156504],{"class":71,"line":106},[69,156500,156501],{"class":86},"is_finished ",[69,156503,1019],{"class":82},[69,156505,127028],{"class":90},[29,156507,156508],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156510,51967],{"id":51966},[29,156512,105587,156513,156516],{},[66,156514,156515],{},"type()"," 查看数据类型：",[59,156518,156520],{"className":31614,"code":156519,"language":31616,"meta":64,"style":64},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[66,156521,156522,156536,156550,156564,156578],{"__ignoreMap":64},[69,156523,156524,156526,156528,156530,156532,156534],{"class":71,"line":72},[69,156525,31651],{"class":90},[69,156527,1398],{"class":86},[69,156529,104328],{"class":90},[69,156531,1398],{"class":86},[69,156533,124],{"class":90},[69,156535,31733],{"class":86},[69,156537,156538,156540,156542,156544,156546,156548],{"class":71,"line":79},[69,156539,31651],{"class":90},[69,156541,1398],{"class":86},[69,156543,104328],{"class":90},[69,156545,1398],{"class":86},[69,156547,1444],{"class":90},[69,156549,31733],{"class":86},[69,156551,156552,156554,156556,156558,156560,156562],{"class":71,"line":106},[69,156553,31651],{"class":90},[69,156555,1398],{"class":86},[69,156557,104328],{"class":90},[69,156559,1398],{"class":86},[69,156561,7086],{"class":1022},[69,156563,31733],{"class":86},[69,156565,156566,156568,156570,156572,156574,156576],{"class":71,"line":116},[69,156567,31651],{"class":90},[69,156569,1398],{"class":86},[69,156571,104328],{"class":90},[69,156573,1398],{"class":86},[69,156575,32712],{"class":90},[69,156577,31733],{"class":86},[69,156579,156580,156582,156584,156586,156588,156590],{"class":71,"line":133},[69,156581,31651],{"class":90},[69,156583,1398],{"class":86},[69,156585,104328],{"class":90},[69,156587,1398],{"class":86},[69,156589,96907],{"class":90},[69,156591,31733],{"class":86},[29,156593,156594],{},"输出类似：",[59,156596,156599],{"className":156597,"code":156598,"language":540,"meta":64},[538],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[66,156600,156598],{"__ignoreMap":64},[29,156602,10267,156603,108504,156605,156607,156608,156610,156611,22739,156613,156610,156615,156617],{},[66,156604,2606],{},[66,156606,1401],{}," 的子类，",[66,156609,32712],{}," 可以当作 ",[66,156612,1609],{},[66,156614,35223],{},[66,156616,1583],{},"，但业务代码中不要滥用。",[59,156619,156621],{"className":31614,"code":156620,"language":31616,"meta":64,"style":64},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[66,156622,156623,156641],{"__ignoreMap":64},[69,156624,156625,156627,156629,156631,156633,156635,156638],{"class":71,"line":72},[69,156626,31651],{"class":90},[69,156628,1398],{"class":86},[69,156630,32712],{"class":90},[69,156632,46802],{"class":82},[69,156634,26355],{"class":90},[69,156636,156637],{"class":86},")   ",[69,156639,156640],{"class":75},"# 2\n",[69,156642,156643,156645,156647,156649,156651,156653,156655],{"class":71,"line":79},[69,156644,31651],{"class":90},[69,156646,1398],{"class":86},[69,156648,35223],{"class":90},[69,156650,46802],{"class":82},[69,156652,26355],{"class":90},[69,156654,47044],{"class":86},[69,156656,156657],{"class":75},"# 1\n",[14,156659,156661],{"id":156660},"_26-类型转换","2.6 类型转换",[29,156663,156664],{},"常用转换函数：",[59,156666,156668],{"className":31614,"code":156667,"language":31616,"meta":64,"style":64},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[66,156669,156670,156680,156691,156701],{"__ignoreMap":64},[69,156671,156672,156674,156676,156678],{"class":71,"line":72},[69,156673,1401],{"class":90},[69,156675,1398],{"class":86},[69,156677,55543],{"class":1022},[69,156679,1404],{"class":86},[69,156681,156682,156684,156686,156689],{"class":71,"line":79},[69,156683,1436],{"class":90},[69,156685,1398],{"class":86},[69,156687,156688],{"class":1022},"\"3.14\"",[69,156690,1404],{"class":86},[69,156692,156693,156695,156697,156699],{"class":71,"line":106},[69,156694,2554],{"class":90},[69,156696,1398],{"class":86},[69,156698,124],{"class":90},[69,156700,1404],{"class":86},[69,156702,156703,156705,156707,156709],{"class":71,"line":116},[69,156704,2606],{"class":90},[69,156706,1398],{"class":86},[69,156708,1609],{"class":90},[69,156710,1404],{"class":86},[29,156712,16375],{},[59,156714,156716],{"className":31614,"code":156715,"language":31616,"meta":64,"style":64},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[66,156717,156718,156727,156738],{"__ignoreMap":64},[69,156719,156720,156722,156724],{"class":71,"line":72},[69,156721,147522],{"class":86},[69,156723,1019],{"class":82},[69,156725,156726],{"class":1022}," \"18\"\n",[69,156728,156729,156731,156733,156735],{"class":71,"line":79},[69,156730,147522],{"class":86},[69,156732,1019],{"class":82},[69,156734,3626],{"class":90},[69,156736,156737],{"class":86},"(age)\n",[69,156739,156740,156742,156745,156747,156749],{"class":71,"line":106},[69,156741,31651],{"class":90},[69,156743,156744],{"class":86},"(age ",[69,156746,1869],{"class":82},[69,156748,26355],{"class":90},[69,156750,1404],{"class":86},[29,156752,156753],{},"输入得到的内容永远是字符串：",[59,156755,156757],{"className":31614,"code":156756,"language":31616,"meta":64,"style":64},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[66,156758,156759,156775],{"__ignoreMap":64},[69,156760,156761,156764,156766,156768,156770,156773],{"class":71,"line":72},[69,156762,156763],{"class":86},"num ",[69,156765,1019],{"class":82},[69,156767,61831],{"class":90},[69,156769,1398],{"class":86},[69,156771,156772],{"class":1022},"\"请输入数字:\"",[69,156774,1404],{"class":86},[69,156776,156777,156779,156781,156783,156786],{"class":71,"line":79},[69,156778,31651],{"class":90},[69,156780,1398],{"class":86},[69,156782,104328],{"class":90},[69,156784,156785],{"class":86},"(num))  ",[69,156787,156788],{"class":75},"# str\n",[29,156790,156791],{},"如果要做数学运算，必须转换：",[59,156793,156795],{"className":31614,"code":156794,"language":31616,"meta":64,"style":64},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[66,156796,156797,156815],{"__ignoreMap":64},[69,156798,156799,156801,156803,156805,156807,156809,156811,156813],{"class":71,"line":72},[69,156800,156763],{"class":86},[69,156802,1019],{"class":82},[69,156804,3626],{"class":90},[69,156806,1398],{"class":86},[69,156808,55048],{"class":90},[69,156810,1398],{"class":86},[69,156812,156772],{"class":1022},[69,156814,31733],{"class":86},[69,156816,156817,156819,156821,156823,156825],{"class":71,"line":79},[69,156818,31651],{"class":90},[69,156820,46855],{"class":86},[69,156822,1869],{"class":82},[69,156824,3282],{"class":90},[69,156826,1404],{"class":86},[29,156828,156829],{},"常见错误：",[59,156831,156833],{"className":31614,"code":156832,"language":31616,"meta":64,"style":64},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[66,156834,156835,156848],{"__ignoreMap":64},[69,156836,156837,156839,156841,156843,156845],{"class":71,"line":72},[69,156838,1401],{"class":90},[69,156840,1398],{"class":86},[69,156842,156688],{"class":1022},[69,156844,156637],{"class":86},[69,156846,156847],{"class":75},"# 错误\n",[69,156849,156850,156852,156854,156857,156860],{"class":71,"line":79},[69,156851,1401],{"class":90},[69,156853,1398],{"class":86},[69,156855,156856],{"class":1022},"\"abc\"",[69,156858,156859],{"class":86},")    ",[69,156861,156847],{"class":75},[29,156863,156864],{},"正确写法：",[59,156866,156868],{"className":31614,"code":156867,"language":31616,"meta":64,"style":64},"num = float(\"3.14\")\n",[66,156869,156870],{"__ignoreMap":64},[69,156871,156872,156874,156876,156878,156880,156882],{"class":71,"line":72},[69,156873,156763],{"class":86},[69,156875,1019],{"class":82},[69,156877,111018],{"class":90},[69,156879,1398],{"class":86},[69,156881,156688],{"class":1022},[69,156883,1404],{"class":86},[14,156885,156887],{"id":156886},"_27-运算符","2.7 运算符",[19,156889,156891],{"id":156890},"_271-算术运算符","2.7.1 算术运算符",[1530,156893,156894,156905],{},[1533,156895,156896],{},[1536,156897,156898,156901,156903],{},[1539,156899,156900],{},"运算符",[1539,156902,27106],{},[1539,156904,28728],{},[1576,156906,156907,156921,156935,156949,156963,156977,156991],{},[1536,156908,156909,156913,156916],{},[1581,156910,156911],{},[66,156912,1869],{},[1581,156914,156915],{},"加法",[1581,156917,156918],{},[66,156919,156920],{},"1 + 2",[1536,156922,156923,156927,156930],{},[1581,156924,156925],{},[66,156926,1920],{},[1581,156928,156929],{},"减法",[1581,156931,156932],{},[66,156933,156934],{},"5 - 3",[1536,156936,156937,156941,156944],{},[1581,156938,156939],{},[66,156940,1843],{},[1581,156942,156943],{},"乘法",[1581,156945,156946],{},[66,156947,156948],{},"2 * 3",[1536,156950,156951,156955,156958],{},[1581,156952,156953],{},[66,156954,1972],{},[1581,156956,156957],{},"除法，结果是浮点数",[1581,156959,156960],{},[66,156961,156962],{},"5 \u002F 2",[1536,156964,156965,156969,156972],{},[1581,156966,156967],{},[66,156968,34565],{},[1581,156970,156971],{},"整除",[1581,156973,156974],{},[66,156975,156976],{},"5 \u002F\u002F 2",[1536,156978,156979,156983,156986],{},[1581,156980,156981],{},[66,156982,127],{},[1581,156984,156985],{},"取余",[1581,156987,156988],{},[66,156989,156990],{},"5 % 2",[1536,156992,156993,156997,157000],{},[1581,156994,156995],{},[66,156996,11903],{},[1581,156998,156999],{},"幂运算",[1581,157001,157002],{},[66,157003,157004],{},"2 ** 3",[29,157006,16375],{},[59,157008,157010],{"className":31614,"code":157009,"language":31616,"meta":64,"style":64},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[66,157011,157012,157030,157047,157064],{"__ignoreMap":64},[69,157013,157014,157016,157018,157020,157023,157025,157027],{"class":71,"line":72},[69,157015,31651],{"class":90},[69,157017,1398],{"class":86},[69,157019,1709],{"class":90},[69,157021,157022],{"class":82}," \u002F",[69,157024,15995],{"class":90},[69,157026,156637],{"class":86},[69,157028,157029],{"class":75},"# 2.5\n",[69,157031,157032,157034,157036,157038,157041,157043,157045],{"class":71,"line":79},[69,157033,31651],{"class":90},[69,157035,1398],{"class":86},[69,157037,1709],{"class":90},[69,157039,157040],{"class":82}," \u002F\u002F",[69,157042,15995],{"class":90},[69,157044,47044],{"class":86},[69,157046,156640],{"class":75},[69,157048,157049,157051,157053,157055,157058,157060,157062],{"class":71,"line":106},[69,157050,31651],{"class":90},[69,157052,1398],{"class":86},[69,157054,1709],{"class":90},[69,157056,157057],{"class":82}," %",[69,157059,15995],{"class":90},[69,157061,156637],{"class":86},[69,157063,156657],{"class":75},[69,157065,157066,157068,157070,157072,157075,157077,157079],{"class":71,"line":116},[69,157067,31651],{"class":90},[69,157069,1398],{"class":86},[69,157071,1471],{"class":90},[69,157073,157074],{"class":82}," **",[69,157076,79291],{"class":90},[69,157078,47044],{"class":86},[69,157080,157081],{"class":75},"# 8\n",[19,157083,157085],{"id":157084},"_272-赋值运算符","2.7.2 赋值运算符",[59,157087,157089],{"className":31614,"code":157088,"language":31616,"meta":64,"style":64},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[66,157090,157091,157099,157107,157115,157123],{"__ignoreMap":64},[69,157092,157093,157095,157097],{"class":71,"line":72},[69,157094,156763],{"class":86},[69,157096,1019],{"class":82},[69,157098,59654],{"class":90},[69,157100,157101,157103,157105],{"class":71,"line":79},[69,157102,156763],{"class":86},[69,157104,10719],{"class":82},[69,157106,55654],{"class":90},[69,157108,157109,157111,157113],{"class":71,"line":106},[69,157110,156763],{"class":86},[69,157112,151228],{"class":82},[69,157114,48959],{"class":90},[69,157116,157117,157119,157121],{"class":71,"line":116},[69,157118,156763],{"class":86},[69,157120,138352],{"class":82},[69,157122,121257],{"class":90},[69,157124,157125,157127,157130],{"class":71,"line":133},[69,157126,156763],{"class":86},[69,157128,157129],{"class":82},"\u002F=",[69,157131,48959],{"class":90},[29,157133,157134],{},"等价关系：",[59,157136,157138],{"className":31614,"code":157137,"language":31616,"meta":64,"style":64},"num += 1\nnum = num + 1\n",[66,157139,157140,157148],{"__ignoreMap":64},[69,157141,157142,157144,157146],{"class":71,"line":72},[69,157143,156763],{"class":86},[69,157145,10719],{"class":82},[69,157147,56926],{"class":90},[69,157149,157150,157152,157154,157157,157159],{"class":71,"line":79},[69,157151,156763],{"class":86},[69,157153,1019],{"class":82},[69,157155,157156],{"class":86}," num ",[69,157158,1869],{"class":82},[69,157160,56926],{"class":90},[29,157162,157163,157164,102239,157167,29621],{},"Python 没有 ",[66,157165,157166],{},"num++",[66,157168,157169],{},"num--",[19,157171,157173],{"id":157172},"_273-比较运算符","2.7.3 比较运算符",[29,157175,157176],{},"比较运算结果是布尔值。",[59,157178,157180],{"className":31614,"code":157179,"language":31616,"meta":64,"style":64},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[66,157181,157182,157196,157211,157225],{"__ignoreMap":64},[69,157183,157184,157186,157188,157190,157192,157194],{"class":71,"line":72},[69,157185,31651],{"class":90},[69,157187,1398],{"class":86},[69,157189,390],{"class":90},[69,157191,27458],{"class":82},[69,157193,3392],{"class":90},[69,157195,1404],{"class":86},[69,157197,157198,157200,157202,157204,157207,157209],{"class":71,"line":79},[69,157199,31651],{"class":90},[69,157201,1398],{"class":86},[69,157203,390],{"class":90},[69,157205,157206],{"class":82}," >=",[69,157208,3282],{"class":90},[69,157210,1404],{"class":86},[69,157212,157213,157215,157217,157219,157221,157223],{"class":71,"line":106},[69,157214,31651],{"class":90},[69,157216,1398],{"class":86},[69,157218,390],{"class":90},[69,157220,102780],{"class":82},[69,157222,3327],{"class":90},[69,157224,1404],{"class":86},[69,157226,157227,157229,157231,157233,157236,157238],{"class":71,"line":116},[69,157228,31651],{"class":90},[69,157230,1398],{"class":86},[69,157232,390],{"class":90},[69,157234,157235],{"class":82}," !=",[69,157237,3327],{"class":90},[69,157239,1404],{"class":86},[29,157241,157242,157243,157245,157246,29621],{},"注意：判断相等用 ",[66,157244,4193],{},"，赋值用 ",[66,157247,1019],{},[59,157249,157251],{"className":31614,"code":157250,"language":31616,"meta":64,"style":64},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[66,157252,157253,157265],{"__ignoreMap":64},[69,157254,157255,157257,157259,157262],{"class":71,"line":72},[69,157256,147522],{"class":86},[69,157258,1019],{"class":82},[69,157260,157261],{"class":90}," 18",[69,157263,157264],{"class":75},"       # 赋值\n",[69,157266,157267,157269,157271,157273],{"class":71,"line":79},[69,157268,147522],{"class":86},[69,157270,4193],{"class":82},[69,157272,157261],{"class":90},[69,157274,157275],{"class":75},"      # 判断是否相等\n",[19,157277,157279],{"id":157278},"_274-逻辑运算符","2.7.4 逻辑运算符",[1530,157281,157282,157290],{},[1533,157283,157284],{},[1536,157285,157286,157288],{},[1539,157287,156900],{},[1539,157289,27106],{},[1576,157291,157292,157301,157310],{},[1536,157293,157294,157298],{},[1581,157295,157296],{},[66,157297,31698],{},[1581,157299,157300],{},"并且",[1536,157302,157303,157307],{},[1581,157304,157305],{},[66,157306,116311],{},[1581,157308,157309],{},"或者",[1536,157311,157312,157317],{},[1581,157313,157314],{},[66,157315,157316],{},"not",[1581,157318,157319],{},"取反",[59,157321,157323],{"className":31614,"code":157322,"language":31616,"meta":64,"style":64},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[66,157324,157325,157333,157342,157346,157361,157375],{"__ignoreMap":64},[69,157326,157327,157329,157331],{"class":71,"line":72},[69,157328,147522],{"class":86},[69,157330,1019],{"class":82},[69,157332,89286],{"class":90},[69,157334,157335,157338,157340],{"class":71,"line":79},[69,157336,157337],{"class":86},"has_ticket ",[69,157339,1019],{"class":82},[69,157341,154575],{"class":90},[69,157343,157344],{"class":71,"line":106},[69,157345,3644],{"emptyLinePlaceholder":1325},[69,157347,157348,157350,157352,157354,157356,157358],{"class":71,"line":116},[69,157349,31651],{"class":90},[69,157351,156744],{"class":86},[69,157353,2955],{"class":82},[69,157355,157261],{"class":90},[69,157357,121650],{"class":82},[69,157359,157360],{"class":86}," has_ticket)\n",[69,157362,157363,157365,157367,157369,157371,157373],{"class":71,"line":133},[69,157364,31651],{"class":90},[69,157366,156744],{"class":86},[69,157368,1011],{"class":82},[69,157370,157261],{"class":90},[69,157372,115422],{"class":82},[69,157374,157360],{"class":86},[69,157376,157377,157379,157381,157383],{"class":71,"line":139},[69,157378,31651],{"class":90},[69,157380,1398],{"class":86},[69,157382,157316],{"class":82},[69,157384,157360],{"class":86},[14,157386,157388],{"id":157387},"_28-字符串定义","2.8 字符串定义",[29,157390,157391],{},"三种常见写法：",[59,157393,157395],{"className":31614,"code":157394,"language":31616,"meta":64,"style":64},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[66,157396,157397,157407,157416,157426],{"__ignoreMap":64},[69,157398,157399,157402,157404],{"class":71,"line":72},[69,157400,157401],{"class":86},"name1 ",[69,157403,1019],{"class":82},[69,157405,157406],{"class":1022}," '小明'\n",[69,157408,157409,157412,157414],{"class":71,"line":79},[69,157410,157411],{"class":86},"name2 ",[69,157413,1019],{"class":82},[69,157415,150329],{"class":1022},[69,157417,157418,157421,157423],{"class":71,"line":106},[69,157419,157420],{"class":86},"text ",[69,157422,1019],{"class":82},[69,157424,157425],{"class":1022}," \"\"\"这是多行字符串\n",[69,157427,157428],{"class":71,"line":116},[69,157429,157430],{"class":1022},"可以换行\"\"\"\n",[29,157432,157433],{},"字符串中包含引号：",[59,157435,157437],{"className":31614,"code":157436,"language":31616,"meta":64,"style":64},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[66,157438,157439,157449,157459],{"__ignoreMap":64},[69,157440,157441,157444,157446],{"class":71,"line":72},[69,157442,157443],{"class":86},"msg ",[69,157445,1019],{"class":82},[69,157447,157448],{"class":1022}," \"他说:'你好'\"\n",[69,157450,157451,157454,157456],{"class":71,"line":79},[69,157452,157453],{"class":86},"msg2 ",[69,157455,1019],{"class":82},[69,157457,157458],{"class":1022}," '他说:\"你好\"'\n",[69,157460,157461,157464,157466,157469,157472,157475,157477],{"class":71,"line":106},[69,157462,157463],{"class":86},"msg3 ",[69,157465,1019],{"class":82},[69,157467,157468],{"class":1022}," \"他说:",[69,157470,157471],{"class":90},"\\\"",[69,157473,157474],{"class":1022},"你好",[69,157476,157471],{"class":90},[69,157478,26370],{"class":1022},[29,157480,157481],{},"常见转义字符：",[1530,157483,157484,157493],{},[1533,157485,157486],{},[1536,157487,157488,157491],{},[1539,157489,157490],{},"写法",[1539,157492,101921],{},[1576,157494,157495,157505,157514,157524,157533],{},[1536,157496,157497,157502],{},[1581,157498,157499],{},[66,157500,157501],{},"\\n",[1581,157503,157504],{},"换行",[1536,157506,157507,157511],{},[1581,157508,157509],{},[66,157510,2486],{},[1581,157512,157513],{},"制表符",[1536,157515,157516,157521],{},[1581,157517,157518],{},[66,157519,157520],{},"\\\\",[1581,157522,157523],{},"反斜杠",[1536,157525,157526,157530],{},[1581,157527,157528],{},[66,157529,157471],{},[1581,157531,157532],{},"双引号",[1536,157534,157535,157540],{},[1581,157536,157537],{},[66,157538,157539],{},"\\'",[1581,157541,157542],{},"单引号",[14,157544,157546],{"id":157545},"_29-字符串拼接","2.9 字符串拼接",[59,157548,157550],{"className":31614,"code":157549,"language":31616,"meta":64,"style":64},"name = \"小明\"\nprint(\"你好，\" + name)\n",[66,157551,157552,157560],{"__ignoreMap":64},[69,157553,157554,157556,157558],{"class":71,"line":72},[69,157555,147512],{"class":86},[69,157557,1019],{"class":82},[69,157559,150329],{"class":1022},[69,157561,157562,157564,157566,157569,157571],{"class":71,"line":79},[69,157563,31651],{"class":90},[69,157565,1398],{"class":86},[69,157567,157568],{"class":1022},"\"你好，\"",[69,157570,46802],{"class":82},[69,157572,157573],{"class":86}," name)\n",[29,157575,157576],{},"字符串只能和字符串拼接：",[59,157578,157580],{"className":31614,"code":157579,"language":31616,"meta":64,"style":64},"age = 18\nprint(\"年龄:\" + str(age))\n",[66,157581,157582,157590],{"__ignoreMap":64},[69,157583,157584,157586,157588],{"class":71,"line":72},[69,157585,147522],{"class":86},[69,157587,1019],{"class":82},[69,157589,147527],{"class":90},[69,157591,157592,157594,157596,157598,157600,157602],{"class":71,"line":79},[69,157593,31651],{"class":90},[69,157595,1398],{"class":86},[69,157597,147493],{"class":1022},[69,157599,46802],{"class":82},[69,157601,75140],{"class":90},[69,157603,157604],{"class":86},"(age))\n",[29,157606,157607],{},"更推荐使用格式化字符串。",[14,157609,157611],{"id":157610},"_210-字符串格式化","2.10 字符串格式化",[19,157613,157615],{"id":157614},"_2101-百分号格式化","2.10.1 百分号格式化",[59,157617,157619],{"className":31614,"code":157618,"language":31616,"meta":64,"style":64},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[66,157620,157621,157629,157637,157646,157650],{"__ignoreMap":64},[69,157622,157623,157625,157627],{"class":71,"line":72},[69,157624,147512],{"class":86},[69,157626,1019],{"class":82},[69,157628,150329],{"class":1022},[69,157630,157631,157633,157635],{"class":71,"line":79},[69,157632,147522],{"class":86},[69,157634,1019],{"class":82},[69,157636,147527],{"class":90},[69,157638,157639,157641,157643],{"class":71,"line":106},[69,157640,156334],{"class":86},[69,157642,1019],{"class":82},[69,157644,157645],{"class":90}," 95.5\n",[69,157647,157648],{"class":71,"line":116},[69,157649,3644],{"emptyLinePlaceholder":1325},[69,157651,157652,157654,157656,157659,157662,157665,157668,157671,157674,157676,157678],{"class":71,"line":133},[69,157653,31651],{"class":90},[69,157655,1398],{"class":86},[69,157657,157658],{"class":1022},"\"姓名:",[69,157660,157661],{"class":90},"%s",[69,157663,157664],{"class":1022}," 年龄:",[69,157666,157667],{"class":90},"%d",[69,157669,157670],{"class":1022}," 分数:",[69,157672,157673],{"class":90},"%.1f",[69,157675,1642],{"class":1022},[69,157677,157057],{"class":82},[69,157679,157680],{"class":86}," (name, age, score))\n",[29,157682,157683],{},"常用占位符：",[1530,157685,157686,157695],{},[1533,157687,157688],{},[1536,157689,157690,157693],{},[1539,157691,157692],{},"占位符",[1539,157694,27106],{},[1576,157696,157697,157705,157713],{},[1536,157698,157699,157703],{},[1581,157700,157701],{},[66,157702,157661],{},[1581,157704,156200],{},[1536,157706,157707,157711],{},[1581,157708,157709],{},[66,157710,157667],{},[1581,157712,156178],{},[1536,157714,157715,157720],{},[1581,157716,157717],{},[66,157718,157719],{},"%f",[1581,157721,156189],{},[29,157723,157724],{},"精度控制：",[59,157726,157728],{"className":31614,"code":157727,"language":31616,"meta":64,"style":64},"price = 12.3456\nprint(\"%.2f\" % price)\n",[66,157729,157730,157739],{"__ignoreMap":64},[69,157731,157732,157734,157736],{"class":71,"line":72},[69,157733,147657],{"class":86},[69,157735,1019],{"class":82},[69,157737,157738],{"class":90}," 12.3456\n",[69,157740,157741,157743,157745,157747,157750,157752,157754],{"class":71,"line":79},[69,157742,31651],{"class":90},[69,157744,1398],{"class":86},[69,157746,1642],{"class":1022},[69,157748,157749],{"class":90},"%.2f",[69,157751,1642],{"class":1022},[69,157753,157057],{"class":82},[69,157755,157756],{"class":86}," price)\n",[19,157758,157760],{"id":157759},"_2102-format方法","2.10.2 format方法",[59,157762,157764],{"className":31614,"code":157763,"language":31616,"meta":64,"style":64},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[66,157765,157766,157774,157782,157786,157805,157825],{"__ignoreMap":64},[69,157767,157768,157770,157772],{"class":71,"line":72},[69,157769,147512],{"class":86},[69,157771,1019],{"class":82},[69,157773,150329],{"class":1022},[69,157775,157776,157778,157780],{"class":71,"line":79},[69,157777,147522],{"class":86},[69,157779,1019],{"class":82},[69,157781,147527],{"class":90},[69,157783,157784],{"class":71,"line":106},[69,157785,3644],{"emptyLinePlaceholder":1325},[69,157787,157788,157790,157792,157794,157796,157798,157800,157802],{"class":71,"line":116},[69,157789,31651],{"class":90},[69,157791,1398],{"class":86},[69,157793,157658],{"class":1022},[69,157795,33695],{"class":90},[69,157797,157664],{"class":1022},[69,157799,33695],{"class":90},[69,157801,1642],{"class":1022},[69,157803,157804],{"class":86},".format(name, age))\n",[69,157806,157807,157809,157811,157813,157816,157818,157821,157823],{"class":71,"line":133},[69,157808,31651],{"class":90},[69,157810,1398],{"class":86},[69,157812,157658],{"class":1022},[69,157814,157815],{"class":90},"{0}",[69,157817,157664],{"class":1022},[69,157819,157820],{"class":90},"{1}",[69,157822,1642],{"class":1022},[69,157824,157804],{"class":86},[69,157826,157827,157829,157831,157833,157836,157838,157841,157843,157846,157848,157850,157853,157855,157857],{"class":71,"line":139},[69,157828,31651],{"class":90},[69,157830,1398],{"class":86},[69,157832,157658],{"class":1022},[69,157834,157835],{"class":90},"{name}",[69,157837,157664],{"class":1022},[69,157839,157840],{"class":90},"{age}",[69,157842,1642],{"class":1022},[69,157844,157845],{"class":86},".format(",[69,157847,81031],{"class":6458},[69,157849,1019],{"class":82},[69,157851,157852],{"class":86},"name, ",[69,157854,71446],{"class":6458},[69,157856,1019],{"class":82},[69,157858,157859],{"class":86},"age))\n",[19,157861,157863],{"id":157862},"_2103-f-string","2.10.3 f-string",[29,157865,157866],{},"推荐写法：",[59,157868,157870],{"className":31614,"code":157869,"language":31616,"meta":64,"style":64},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[66,157871,157872,157880,157888,157896,157900],{"__ignoreMap":64},[69,157873,157874,157876,157878],{"class":71,"line":72},[69,157875,147512],{"class":86},[69,157877,1019],{"class":82},[69,157879,150329],{"class":1022},[69,157881,157882,157884,157886],{"class":71,"line":79},[69,157883,147522],{"class":86},[69,157885,1019],{"class":82},[69,157887,147527],{"class":90},[69,157889,157890,157892,157894],{"class":71,"line":106},[69,157891,156334],{"class":86},[69,157893,1019],{"class":82},[69,157895,157645],{"class":90},[69,157897,157898],{"class":71,"line":116},[69,157899,3644],{"emptyLinePlaceholder":1325},[69,157901,157902,157904,157906,157908,157910,157912,157914,157916,157918,157920,157922,157924,157926,157928,157931,157934,157936,157938],{"class":71,"line":133},[69,157903,31651],{"class":90},[69,157905,1398],{"class":86},[69,157907,1447],{"class":82},[69,157909,157658],{"class":1022},[69,157911,2283],{"class":90},[69,157913,81031],{"class":86},[69,157915,2332],{"class":90},[69,157917,157664],{"class":1022},[69,157919,2283],{"class":90},[69,157921,71446],{"class":86},[69,157923,2332],{"class":90},[69,157925,157670],{"class":1022},[69,157927,2283],{"class":90},[69,157929,157930],{"class":86},"score",[69,157932,157933],{"class":82},":.1f",[69,157935,2332],{"class":90},[69,157937,1642],{"class":1022},[69,157939,1404],{"class":86},[29,157941,157942],{},"表达式也可以放进去：",[59,157944,157946],{"className":31614,"code":157945,"language":31616,"meta":64,"style":64},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[66,157947,157948,157956,157964],{"__ignoreMap":64},[69,157949,157950,157952,157954],{"class":71,"line":72},[69,157951,147657],{"class":86},[69,157953,1019],{"class":82},[69,157955,147662],{"class":90},[69,157957,157958,157960,157962],{"class":71,"line":79},[69,157959,147667],{"class":86},[69,157961,1019],{"class":82},[69,157963,55654],{"class":90},[69,157965,157966,157968,157970,157972,157975,157977,157979,157981,157984,157986,157989],{"class":71,"line":106},[69,157967,31651],{"class":90},[69,157969,1398],{"class":86},[69,157971,1447],{"class":82},[69,157973,157974],{"class":1022},"\"总价:",[69,157976,2283],{"class":90},[69,157978,147657],{"class":86},[69,157980,1843],{"class":82},[69,157982,157983],{"class":86}," count",[69,157985,2332],{"class":90},[69,157987,157988],{"class":1022},"元\"",[69,157990,1404],{"class":86},[14,157992,157994],{"id":157993},"_211-input输入","2.11 input输入",[29,157996,157997,158000],{},[66,157998,157999],{},"input()"," 会暂停程序，等待用户输入。",[59,158002,158004],{"className":31614,"code":158003,"language":31616,"meta":64,"style":64},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[66,158005,158006,158020],{"__ignoreMap":64},[69,158007,158008,158010,158012,158014,158016,158018],{"class":71,"line":72},[69,158009,147512],{"class":86},[69,158011,1019],{"class":82},[69,158013,61831],{"class":90},[69,158015,1398],{"class":86},[69,158017,153355],{"class":1022},[69,158019,1404],{"class":86},[69,158021,158022,158024,158026,158028,158031,158033,158035,158037,158039],{"class":71,"line":79},[69,158023,31651],{"class":90},[69,158025,1398],{"class":86},[69,158027,1447],{"class":82},[69,158029,158030],{"class":1022},"\"你好，",[69,158032,2283],{"class":90},[69,158034,81031],{"class":86},[69,158036,2332],{"class":90},[69,158038,1642],{"class":1022},[69,158040,1404],{"class":86},[29,158042,158043],{},"输入整数：",[59,158045,158047],{"className":31614,"code":158046,"language":31616,"meta":64,"style":64},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[66,158048,158049,158067],{"__ignoreMap":64},[69,158050,158051,158053,158055,158057,158059,158061,158063,158065],{"class":71,"line":72},[69,158052,147522],{"class":86},[69,158054,1019],{"class":82},[69,158056,3626],{"class":90},[69,158058,1398],{"class":86},[69,158060,55048],{"class":90},[69,158062,1398],{"class":86},[69,158064,153370],{"class":1022},[69,158066,31733],{"class":86},[69,158068,158069,158071,158073,158075,158078,158080,158082,158084,158087,158089],{"class":71,"line":79},[69,158070,31651],{"class":90},[69,158072,1398],{"class":86},[69,158074,1447],{"class":82},[69,158076,158077],{"class":1022},"\"明年你",[69,158079,2283],{"class":90},[69,158081,147522],{"class":86},[69,158083,1869],{"class":82},[69,158085,158086],{"class":90}," 1}",[69,158088,150380],{"class":1022},[69,158090,1404],{"class":86},[29,158092,158093],{},"输入小数：",[59,158095,158097],{"className":31614,"code":158096,"language":31616,"meta":64,"style":64},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[66,158098,158099,158118],{"__ignoreMap":64},[69,158100,158101,158103,158105,158107,158109,158111,158113,158116],{"class":71,"line":72},[69,158102,156307],{"class":86},[69,158104,1019],{"class":82},[69,158106,111018],{"class":90},[69,158108,1398],{"class":86},[69,158110,55048],{"class":90},[69,158112,1398],{"class":86},[69,158114,158115],{"class":1022},"\"请输入身高:\"",[69,158117,31733],{"class":86},[69,158119,158120,158122,158124,158126,158129,158131,158133,158136,158138,158141],{"class":71,"line":79},[69,158121,31651],{"class":90},[69,158123,1398],{"class":86},[69,158125,1447],{"class":82},[69,158127,158128],{"class":1022},"\"身高:",[69,158130,2283],{"class":90},[69,158132,26218],{"class":86},[69,158134,158135],{"class":82},":.2f",[69,158137,2332],{"class":90},[69,158139,158140],{"class":1022},"米\"",[69,158142,1404],{"class":86},[14,158144,158146],{"id":158145},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[29,158148,124513],{},[37,158150,158151,158154,158157,158160],{},[40,158152,158153],{},"输入商品单价。",[40,158155,158156],{},"输入购买数量。",[40,158158,158159],{},"输入折扣，例如 0.8 表示八折。",[40,158161,158162],{},"输出最终金额，保留两位小数。",[29,158164,11277],{},[59,158166,158168],{"className":31614,"code":158167,"language":31616,"meta":64,"style":64},"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",[66,158169,158170,158189,158208,158228,158232,158252,158256,158279,158300,158322],{"__ignoreMap":64},[69,158171,158172,158174,158176,158178,158180,158182,158184,158187],{"class":71,"line":72},[69,158173,147657],{"class":86},[69,158175,1019],{"class":82},[69,158177,111018],{"class":90},[69,158179,1398],{"class":86},[69,158181,55048],{"class":90},[69,158183,1398],{"class":86},[69,158185,158186],{"class":1022},"\"请输入商品单价:\"",[69,158188,31733],{"class":86},[69,158190,158191,158193,158195,158197,158199,158201,158203,158206],{"class":71,"line":79},[69,158192,147667],{"class":86},[69,158194,1019],{"class":82},[69,158196,3626],{"class":90},[69,158198,1398],{"class":86},[69,158200,55048],{"class":90},[69,158202,1398],{"class":86},[69,158204,158205],{"class":1022},"\"请输入购买数量:\"",[69,158207,31733],{"class":86},[69,158209,158210,158213,158215,158217,158219,158221,158223,158226],{"class":71,"line":106},[69,158211,158212],{"class":86},"discount ",[69,158214,1019],{"class":82},[69,158216,111018],{"class":90},[69,158218,1398],{"class":86},[69,158220,55048],{"class":90},[69,158222,1398],{"class":86},[69,158224,158225],{"class":1022},"\"请输入折扣:\"",[69,158227,31733],{"class":86},[69,158229,158230],{"class":71,"line":116},[69,158231,3644],{"emptyLinePlaceholder":1325},[69,158233,158234,158237,158239,158242,158244,158247,158249],{"class":71,"line":133},[69,158235,158236],{"class":86},"total ",[69,158238,1019],{"class":82},[69,158240,158241],{"class":86}," price ",[69,158243,1843],{"class":82},[69,158245,158246],{"class":86}," count ",[69,158248,1843],{"class":82},[69,158250,158251],{"class":86}," discount\n",[69,158253,158254],{"class":71,"line":139},[69,158255,3644],{"emptyLinePlaceholder":1325},[69,158257,158258,158260,158262,158264,158267,158269,158271,158273,158275,158277],{"class":71,"line":401},[69,158259,31651],{"class":90},[69,158261,1398],{"class":86},[69,158263,1447],{"class":82},[69,158265,158266],{"class":1022},"\"商品单价:",[69,158268,2283],{"class":90},[69,158270,81036],{"class":86},[69,158272,158135],{"class":82},[69,158274,2332],{"class":90},[69,158276,1642],{"class":1022},[69,158278,1404],{"class":86},[69,158280,158281,158283,158285,158287,158290,158292,158294,158296,158298],{"class":71,"line":470},[69,158282,31651],{"class":90},[69,158284,1398],{"class":86},[69,158286,1447],{"class":82},[69,158288,158289],{"class":1022},"\"购买数量:",[69,158291,2283],{"class":90},[69,158293,85655],{"class":86},[69,158295,2332],{"class":90},[69,158297,1642],{"class":1022},[69,158299,1404],{"class":86},[69,158301,158302,158304,158306,158308,158311,158313,158316,158318,158320],{"class":71,"line":475},[69,158303,31651],{"class":90},[69,158305,1398],{"class":86},[69,158307,1447],{"class":82},[69,158309,158310],{"class":1022},"\"折扣:",[69,158312,2283],{"class":90},[69,158314,158315],{"class":86},"discount",[69,158317,2332],{"class":90},[69,158319,1642],{"class":1022},[69,158321,1404],{"class":86},[69,158323,158324,158326,158328,158330,158333,158335,158338,158340,158342,158344],{"class":71,"line":482},[69,158325,31651],{"class":90},[69,158327,1398],{"class":86},[69,158329,1447],{"class":82},[69,158331,158332],{"class":1022},"\"应付金额:",[69,158334,2283],{"class":90},[69,158336,158337],{"class":86},"total",[69,158339,158135],{"class":82},[69,158341,2332],{"class":90},[69,158343,157988],{"class":1022},[69,158345,1404],{"class":86},[14,158347,158349],{"id":158348},"_213-易错点","2.13 易错点",[37,158351,158352,158357,158363,158371,158374],{},[40,158353,158354,158356],{},[66,158355,157999],{}," 的结果是字符串，做运算前要转换。",[40,158358,158359,158360,29621],{},"字符串拼接时，数字要先 ",[66,158361,158362],{},"str()",[40,158364,158365,158367,158368,158370],{},[66,158366,1019],{}," 是赋值，",[66,158369,4193],{}," 是比较。",[40,158372,158373],{},"Python 没有自增自减运算符。",[40,158375,158376],{},"浮点数计算可能有精度误差：",[59,158378,158380],{"className":31614,"code":158379,"language":31616,"meta":64,"style":64},"print(0.1 + 0.2)\n",[66,158381,158382],{"__ignoreMap":64},[69,158383,158384,158386,158388,158390,158392,158395],{"class":71,"line":72},[69,158385,31651],{"class":90},[69,158387,1398],{"class":86},[69,158389,87431],{"class":90},[69,158391,46802],{"class":82},[69,158393,158394],{"class":90}," 0.2",[69,158396,1404],{"class":86},[29,158398,158399,158400,158403],{},"金额计算如果要求严格，可以后续学习 ",[66,158401,158402],{},"decimal"," 模块。",[14,158405,158407],{"id":158406},"_214-本章练习","2.14 本章练习",[37,158409,158410,158413,158416,158419,158422],{},[40,158411,158412],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[40,158414,158415],{},"输入圆的半径，计算面积，保留两位小数。",[40,158417,158418],{},"输入工资和奖金，计算总收入。",[40,158420,158421],{},"输入摄氏温度，转换为华氏温度。",[40,158423,158424],{},"写一个 BMI 计算程序：",[59,158426,158429],{"className":158427,"code":158428,"language":540,"meta":64},[538],"BMI = 体重kg \u002F 身高m ** 2\n",[66,158430,158428],{"__ignoreMap":64},[1297,158432,158433],{},"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":64,"searchDepth":79,"depth":79,"links":158435},[158436,158437,158438,158439,158440,158441,158442,158448,158449,158450,158455,158456,158457,158458],{"id":155997,"depth":79,"text":155998},{"id":156106,"depth":79,"text":156107},{"id":156277,"depth":79,"text":156278},{"id":156354,"depth":79,"text":156355},{"id":51966,"depth":79,"text":51967},{"id":156660,"depth":79,"text":156661},{"id":156886,"depth":79,"text":156887,"children":158443},[158444,158445,158446,158447],{"id":156890,"depth":106,"text":156891},{"id":157084,"depth":106,"text":157085},{"id":157172,"depth":106,"text":157173},{"id":157278,"depth":106,"text":157279},{"id":157387,"depth":79,"text":157388},{"id":157545,"depth":79,"text":157546},{"id":157610,"depth":79,"text":157611,"children":158451},[158452,158453,158454],{"id":157614,"depth":106,"text":157615},{"id":157759,"depth":106,"text":157760},{"id":157862,"depth":106,"text":157863},{"id":157993,"depth":79,"text":157994},{"id":158145,"depth":79,"text":158146},{"id":158348,"depth":79,"text":158349},{"id":158406,"depth":79,"text":158407},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155989,"description":1322},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158465,"title":158466,"body":158467,"description":1322,"extension":1323,"meta":160103,"navigation":1325,"path":160104,"seo":160105,"stem":160106,"__hash__":160107},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158468,"toc":160084},[158469,158472,158476,158479,158494,158497,158525,158529,158579,158581,158597,158600,158626,158629,158633,158700,158703,158719,158723,158726,158844,158847,158854,158903,158909,158913,158916,159029,159032,159036,159040,159043,159093,159097,159100,159150,159154,159157,159195,159199,159202,159248,159251,159286,159290,159295,159298,159344,159346,159413,159417,159423,159534,159543,159547,159549,159560,159562,159728,159732,159734,159748,159750,159964,159968,159987,160004,160007,160053,160057,160081],[10,158470,158466],{"id":158471},"_3-判断语句",[14,158473,158475],{"id":158474},"_31-布尔值","3.1 布尔值",[29,158477,158478],{},"判断语句依赖布尔值：",[59,158480,158482],{"className":31614,"code":158481,"language":31616,"meta":64,"style":64},"True\nFalse\n",[66,158483,158484,158489],{"__ignoreMap":64},[69,158485,158486],{"class":71,"line":72},[69,158487,158488],{"class":90},"True\n",[69,158490,158491],{"class":71,"line":79},[69,158492,158493],{"class":90},"False\n",[29,158495,158496],{},"比较表达式会产生布尔值：",[59,158498,158500],{"className":31614,"code":158499,"language":31616,"meta":64,"style":64},"age = 18\nprint(age >= 18)  # True\n",[66,158501,158502,158510],{"__ignoreMap":64},[69,158503,158504,158506,158508],{"class":71,"line":72},[69,158505,147522],{"class":86},[69,158507,1019],{"class":82},[69,158509,147527],{"class":90},[69,158511,158512,158514,158516,158518,158520,158522],{"class":71,"line":79},[69,158513,31651],{"class":90},[69,158515,156744],{"class":86},[69,158517,2955],{"class":82},[69,158519,157261],{"class":90},[69,158521,47044],{"class":86},[69,158523,158524],{"class":75},"# True\n",[14,158526,158528],{"id":158527},"_32-if基础语法","3.2 if基础语法",[59,158530,158532],{"className":31614,"code":158531,"language":31616,"meta":64,"style":64},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[66,158533,158534,158552,158556,158568],{"__ignoreMap":64},[69,158535,158536,158538,158540,158542,158544,158546,158548,158550],{"class":71,"line":72},[69,158537,147522],{"class":86},[69,158539,1019],{"class":82},[69,158541,3626],{"class":90},[69,158543,1398],{"class":86},[69,158545,55048],{"class":90},[69,158547,1398],{"class":86},[69,158549,153370],{"class":1022},[69,158551,31733],{"class":86},[69,158553,158554],{"class":71,"line":79},[69,158555,3644],{"emptyLinePlaceholder":1325},[69,158557,158558,158560,158562,158564,158566],{"class":71,"line":106},[69,158559,2782],{"class":82},[69,158561,16946],{"class":86},[69,158563,2955],{"class":82},[69,158565,157261],{"class":90},[69,158567,4983],{"class":86},[69,158569,158570,158572,158574,158577],{"class":71,"line":116},[69,158571,32535],{"class":90},[69,158573,1398],{"class":86},[69,158575,158576],{"class":1022},"\"可以进入网吧\"",[69,158578,1404],{"class":86},[29,158580,10267],{},[37,158582,158583,158588,158591,158594],{},[40,158584,158585,158587],{},[66,158586,2782],{}," 后面是条件表达式。",[40,158589,158590],{},"条件后面必须写冒号。",[40,158592,158593],{},"条件成立时执行缩进代码块。",[40,158595,158596],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[29,158598,158599],{},"错误示例：",[59,158601,158603],{"className":31614,"code":158602,"language":31616,"meta":64,"style":64},"if age >= 18\n    print(\"可以进入\")\n",[66,158604,158605,158615],{"__ignoreMap":64},[69,158606,158607,158609,158611,158613],{"class":71,"line":72},[69,158608,2782],{"class":82},[69,158610,16946],{"class":86},[69,158612,2955],{"class":82},[69,158614,147527],{"class":90},[69,158616,158617,158619,158621,158624],{"class":71,"line":79},[69,158618,32535],{"class":90},[69,158620,1398],{"class":86},[69,158622,158623],{"class":1022},"\"可以进入\"",[69,158625,1404],{"class":86},[29,158627,158628],{},"缺少冒号。",[14,158630,158632],{"id":158631},"_33-if-else","3.3 if else",[59,158634,158636],{"className":31614,"code":158635,"language":31616,"meta":64,"style":64},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[66,158637,158638,158656,158660,158672,158683,158689],{"__ignoreMap":64},[69,158639,158640,158642,158644,158646,158648,158650,158652,158654],{"class":71,"line":72},[69,158641,147522],{"class":86},[69,158643,1019],{"class":82},[69,158645,3626],{"class":90},[69,158647,1398],{"class":86},[69,158649,55048],{"class":90},[69,158651,1398],{"class":86},[69,158653,153370],{"class":1022},[69,158655,31733],{"class":86},[69,158657,158658],{"class":71,"line":79},[69,158659,3644],{"emptyLinePlaceholder":1325},[69,158661,158662,158664,158666,158668,158670],{"class":71,"line":106},[69,158663,2782],{"class":82},[69,158665,16946],{"class":86},[69,158667,2955],{"class":82},[69,158669,157261],{"class":90},[69,158671,4983],{"class":86},[69,158673,158674,158676,158678,158681],{"class":71,"line":116},[69,158675,32535],{"class":90},[69,158677,1398],{"class":86},[69,158679,158680],{"class":1022},"\"成年人\"",[69,158682,1404],{"class":86},[69,158684,158685,158687],{"class":71,"line":133},[69,158686,2946],{"class":82},[69,158688,4983],{"class":86},[69,158690,158691,158693,158695,158698],{"class":71,"line":139},[69,158692,32535],{"class":90},[69,158694,1398],{"class":86},[69,158696,158697],{"class":1022},"\"未成年人\"",[69,158699,1404],{"class":86},[29,158701,158702],{},"执行逻辑：",[37,158704,158705,158711,158716],{},[40,158706,158707,158708,158710],{},"条件成立，执行 ",[66,158709,2782],{}," 代码块。",[40,158712,158713,158714,158710],{},"条件不成立，执行 ",[66,158715,2946],{},[40,158717,158718],{},"两个代码块只会执行其中一个。",[14,158720,158722],{"id":158721},"_34-if-elif-else","3.4 if elif else",[29,158724,158725],{},"多条件判断：",[59,158727,158729],{"className":31614,"code":158728,"language":31616,"meta":64,"style":64},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[66,158730,158731,158749,158753,158767,158778,158792,158803,158816,158827,158833],{"__ignoreMap":64},[69,158732,158733,158735,158737,158739,158741,158743,158745,158747],{"class":71,"line":72},[69,158734,156334],{"class":86},[69,158736,1019],{"class":82},[69,158738,3626],{"class":90},[69,158740,1398],{"class":86},[69,158742,55048],{"class":90},[69,158744,1398],{"class":86},[69,158746,153385],{"class":1022},[69,158748,31733],{"class":86},[69,158750,158751],{"class":71,"line":79},[69,158752,3644],{"emptyLinePlaceholder":1325},[69,158754,158755,158757,158760,158762,158765],{"class":71,"line":106},[69,158756,2782],{"class":82},[69,158758,158759],{"class":86}," score ",[69,158761,2955],{"class":82},[69,158763,158764],{"class":90}," 90",[69,158766,4983],{"class":86},[69,158768,158769,158771,158773,158776],{"class":71,"line":116},[69,158770,32535],{"class":90},[69,158772,1398],{"class":86},[69,158774,158775],{"class":1022},"\"优秀\"",[69,158777,1404],{"class":86},[69,158779,158780,158783,158785,158787,158790],{"class":71,"line":133},[69,158781,158782],{"class":82},"elif",[69,158784,158759],{"class":86},[69,158786,2955],{"class":82},[69,158788,158789],{"class":90}," 80",[69,158791,4983],{"class":86},[69,158793,158794,158796,158798,158801],{"class":71,"line":139},[69,158795,32535],{"class":90},[69,158797,1398],{"class":86},[69,158799,158800],{"class":1022},"\"良好\"",[69,158802,1404],{"class":86},[69,158804,158805,158807,158809,158811,158814],{"class":71,"line":401},[69,158806,158782],{"class":82},[69,158808,158759],{"class":86},[69,158810,2955],{"class":82},[69,158812,158813],{"class":90}," 60",[69,158815,4983],{"class":86},[69,158817,158818,158820,158822,158825],{"class":71,"line":470},[69,158819,32535],{"class":90},[69,158821,1398],{"class":86},[69,158823,158824],{"class":1022},"\"及格\"",[69,158826,1404],{"class":86},[69,158828,158829,158831],{"class":71,"line":475},[69,158830,2946],{"class":82},[69,158832,4983],{"class":86},[69,158834,158835,158837,158839,158842],{"class":71,"line":482},[69,158836,32535],{"class":90},[69,158838,1398],{"class":86},[69,158840,158841],{"class":1022},"\"不及格\"",[69,158843,1404],{"class":86},[29,158845,158846],{},"注意判断顺序很重要。",[29,158848,158849,158850,158853],{},"如果把 ",[66,158851,158852],{},"score >= 60"," 放在最前面：",[59,158855,158857],{"className":31614,"code":158856,"language":31616,"meta":64,"style":64},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[66,158858,158859,158871,158881,158893],{"__ignoreMap":64},[69,158860,158861,158863,158865,158867,158869],{"class":71,"line":72},[69,158862,2782],{"class":82},[69,158864,158759],{"class":86},[69,158866,2955],{"class":82},[69,158868,158813],{"class":90},[69,158870,4983],{"class":86},[69,158872,158873,158875,158877,158879],{"class":71,"line":79},[69,158874,32535],{"class":90},[69,158876,1398],{"class":86},[69,158878,158824],{"class":1022},[69,158880,1404],{"class":86},[69,158882,158883,158885,158887,158889,158891],{"class":71,"line":106},[69,158884,158782],{"class":82},[69,158886,158759],{"class":86},[69,158888,2955],{"class":82},[69,158890,158764],{"class":90},[69,158892,4983],{"class":86},[69,158894,158895,158897,158899,158901],{"class":71,"line":116},[69,158896,32535],{"class":90},[69,158898,1398],{"class":86},[69,158900,158775],{"class":1022},[69,158902,1404],{"class":86},[29,158904,158905,158906,158908],{},"成绩 95 会先满足 ",[66,158907,158852],{},"，后面的优秀分支就不会执行。",[14,158910,158912],{"id":158911},"_35-判断语句嵌套","3.5 判断语句嵌套",[29,158914,158915],{},"嵌套判断就是在一个判断内部再写判断。",[59,158917,158919],{"className":31614,"code":158918,"language":31616,"meta":64,"style":64},"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",[66,158920,158921,158939,158954,158958,158970,158984,158994,159001,159012,159018],{"__ignoreMap":64},[69,158922,158923,158925,158927,158929,158931,158933,158935,158937],{"class":71,"line":72},[69,158924,147522],{"class":86},[69,158926,1019],{"class":82},[69,158928,3626],{"class":90},[69,158930,1398],{"class":86},[69,158932,55048],{"class":90},[69,158934,1398],{"class":86},[69,158936,153370],{"class":1022},[69,158938,31733],{"class":86},[69,158940,158941,158943,158945,158947,158949,158952],{"class":71,"line":79},[69,158942,157337],{"class":86},[69,158944,1019],{"class":82},[69,158946,61831],{"class":90},[69,158948,1398],{"class":86},[69,158950,158951],{"class":1022},"\"是否有票(y\u002Fn):\"",[69,158953,1404],{"class":86},[69,158955,158956],{"class":71,"line":106},[69,158957,3644],{"emptyLinePlaceholder":1325},[69,158959,158960,158962,158964,158966,158968],{"class":71,"line":116},[69,158961,2782],{"class":82},[69,158963,16946],{"class":86},[69,158965,2955],{"class":82},[69,158967,157261],{"class":90},[69,158969,4983],{"class":86},[69,158971,158972,158974,158977,158979,158982],{"class":71,"line":133},[69,158973,4345],{"class":82},[69,158975,158976],{"class":86}," has_ticket ",[69,158978,4193],{"class":82},[69,158980,158981],{"class":1022}," \"y\"",[69,158983,4983],{"class":86},[69,158985,158986,158988,158990,158992],{"class":71,"line":139},[69,158987,33687],{"class":90},[69,158989,1398],{"class":86},[69,158991,158623],{"class":1022},[69,158993,1404],{"class":86},[69,158995,158996,158999],{"class":71,"line":401},[69,158997,158998],{"class":82},"    else",[69,159000,4983],{"class":86},[69,159002,159003,159005,159007,159010],{"class":71,"line":470},[69,159004,33687],{"class":90},[69,159006,1398],{"class":86},[69,159008,159009],{"class":1022},"\"请先买票\"",[69,159011,1404],{"class":86},[69,159013,159014,159016],{"class":71,"line":475},[69,159015,2946],{"class":82},[69,159017,4983],{"class":86},[69,159019,159020,159022,159024,159027],{"class":71,"line":482},[69,159021,32535],{"class":90},[69,159023,1398],{"class":86},[69,159025,159026],{"class":1022},"\"未成年人禁止进入\"",[69,159028,1404],{"class":86},[29,159030,159031],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159033,159035],{"id":159034},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[19,159037,159039],{"id":159038},"_361-and","3.6.1 and",[29,159041,159042],{},"两个条件都成立才成立。",[59,159044,159046],{"className":31614,"code":159045,"language":31616,"meta":64,"style":64},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[66,159047,159048,159056,159064,159068,159083],{"__ignoreMap":64},[69,159049,159050,159052,159054],{"class":71,"line":72},[69,159051,147522],{"class":86},[69,159053,1019],{"class":82},[69,159055,89286],{"class":90},[69,159057,159058,159060,159062],{"class":71,"line":79},[69,159059,157337],{"class":86},[69,159061,1019],{"class":82},[69,159063,154575],{"class":90},[69,159065,159066],{"class":71,"line":106},[69,159067,3644],{"emptyLinePlaceholder":1325},[69,159069,159070,159072,159074,159076,159078,159080],{"class":71,"line":116},[69,159071,2782],{"class":82},[69,159073,16946],{"class":86},[69,159075,2955],{"class":82},[69,159077,157261],{"class":90},[69,159079,121650],{"class":82},[69,159081,159082],{"class":86}," has_ticket:\n",[69,159084,159085,159087,159089,159091],{"class":71,"line":133},[69,159086,32535],{"class":90},[69,159088,1398],{"class":86},[69,159090,158623],{"class":1022},[69,159092,1404],{"class":86},[19,159094,159096],{"id":159095},"_362-or","3.6.2 or",[29,159098,159099],{},"只要一个条件成立就成立。",[59,159101,159103],{"className":31614,"code":159102,"language":31616,"meta":64,"style":64},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[66,159104,159105,159114,159123,159127,159139],{"__ignoreMap":64},[69,159106,159107,159110,159112],{"class":71,"line":72},[69,159108,159109],{"class":86},"is_vip ",[69,159111,1019],{"class":82},[69,159113,127028],{"class":90},[69,159115,159116,159119,159121],{"class":71,"line":79},[69,159117,159118],{"class":86},"coupon ",[69,159120,1019],{"class":82},[69,159122,154575],{"class":90},[69,159124,159125],{"class":71,"line":106},[69,159126,3644],{"emptyLinePlaceholder":1325},[69,159128,159129,159131,159134,159136],{"class":71,"line":116},[69,159130,2782],{"class":82},[69,159132,159133],{"class":86}," is_vip ",[69,159135,116311],{"class":82},[69,159137,159138],{"class":86}," coupon:\n",[69,159140,159141,159143,159145,159148],{"class":71,"line":133},[69,159142,32535],{"class":90},[69,159144,1398],{"class":86},[69,159146,159147],{"class":1022},"\"可以享受优惠\"",[69,159149,1404],{"class":86},[19,159151,159153],{"id":159152},"_363-not","3.6.3 not",[29,159155,159156],{},"取反。",[59,159158,159160],{"className":31614,"code":159159,"language":31616,"meta":64,"style":64},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[66,159161,159162,159171,159175,159184],{"__ignoreMap":64},[69,159163,159164,159167,159169],{"class":71,"line":72},[69,159165,159166],{"class":86},"is_closed ",[69,159168,1019],{"class":82},[69,159170,127028],{"class":90},[69,159172,159173],{"class":71,"line":79},[69,159174,3644],{"emptyLinePlaceholder":1325},[69,159176,159177,159179,159181],{"class":71,"line":106},[69,159178,2782],{"class":82},[69,159180,40166],{"class":82},[69,159182,159183],{"class":86}," is_closed:\n",[69,159185,159186,159188,159190,159193],{"class":71,"line":116},[69,159187,32535],{"class":90},[69,159189,1398],{"class":86},[69,159191,159192],{"class":1022},"\"店铺营业中\"",[69,159194,1404],{"class":86},[14,159196,159198],{"id":159197},"_37-链式比较","3.7 链式比较",[29,159200,159201],{},"Python 支持链式比较：",[59,159203,159205],{"className":31614,"code":159204,"language":31616,"meta":64,"style":64},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[66,159206,159207,159216,159220,159237],{"__ignoreMap":64},[69,159208,159209,159211,159213],{"class":71,"line":72},[69,159210,156334],{"class":86},[69,159212,1019],{"class":82},[69,159214,159215],{"class":90}," 85\n",[69,159217,159218],{"class":71,"line":79},[69,159219,3644],{"emptyLinePlaceholder":1325},[69,159221,159222,159224,159226,159229,159231,159233,159235],{"class":71,"line":106},[69,159223,2782],{"class":82},[69,159225,5337],{"class":90},[69,159227,159228],{"class":82}," \u003C=",[69,159230,158759],{"class":86},[69,159232,2838],{"class":82},[69,159234,6996],{"class":90},[69,159236,4983],{"class":86},[69,159238,159239,159241,159243,159246],{"class":71,"line":116},[69,159240,32535],{"class":90},[69,159242,1398],{"class":86},[69,159244,159245],{"class":1022},"\"成绩合法\"",[69,159247,1404],{"class":86},[29,159249,159250],{},"等价于：",[59,159252,159254],{"className":31614,"code":159253,"language":31616,"meta":64,"style":64},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[66,159255,159256,159276],{"__ignoreMap":64},[69,159257,159258,159260,159262,159264,159266,159268,159270,159272,159274],{"class":71,"line":72},[69,159259,2782],{"class":82},[69,159261,158759],{"class":86},[69,159263,2955],{"class":82},[69,159265,5337],{"class":90},[69,159267,121650],{"class":82},[69,159269,158759],{"class":86},[69,159271,2838],{"class":82},[69,159273,6996],{"class":90},[69,159275,4983],{"class":86},[69,159277,159278,159280,159282,159284],{"class":71,"line":79},[69,159279,32535],{"class":90},[69,159281,1398],{"class":86},[69,159283,159245],{"class":1022},[69,159285,1404],{"class":86},[14,159287,159289],{"id":159288},"_38-真值和假值","3.8 真值和假值",[29,159291,117688,159292,159294],{},[66,159293,2782],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[29,159296,159297],{},"假值：",[59,159299,159301],{"className":31614,"code":159300,"language":31616,"meta":64,"style":64},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[66,159302,159303,159307,159312,159316,159320,159325,159329,159333,159338],{"__ignoreMap":64},[69,159304,159305],{"class":71,"line":72},[69,159306,158493],{"class":90},[69,159308,159309],{"class":71,"line":79},[69,159310,159311],{"class":90},"None\n",[69,159313,159314],{"class":71,"line":106},[69,159315,4329],{"class":90},[69,159317,159318],{"class":71,"line":116},[69,159319,33578],{"class":90},[69,159321,159322],{"class":71,"line":133},[69,159323,159324],{"class":1022},"\"\"\n",[69,159326,159327],{"class":71,"line":139},[69,159328,33593],{"class":86},[69,159330,159331],{"class":71,"line":401},[69,159332,3220],{"class":86},[69,159334,159335],{"class":71,"line":470},[69,159336,159337],{"class":86},"{}\n",[69,159339,159340,159342],{"class":71,"line":475},[69,159341,156266],{"class":90},[69,159343,3220],{"class":86},[29,159345,16375],{},[59,159347,159349],{"className":31614,"code":159348,"language":31616,"meta":64,"style":64},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[66,159350,159351,159365,159369,159376,159396,159402],{"__ignoreMap":64},[69,159352,159353,159355,159357,159359,159361,159363],{"class":71,"line":72},[69,159354,147512],{"class":86},[69,159356,1019],{"class":82},[69,159358,61831],{"class":90},[69,159360,1398],{"class":86},[69,159362,153355],{"class":1022},[69,159364,1404],{"class":86},[69,159366,159367],{"class":71,"line":79},[69,159368,3644],{"emptyLinePlaceholder":1325},[69,159370,159371,159373],{"class":71,"line":106},[69,159372,2782],{"class":82},[69,159374,159375],{"class":86}," name:\n",[69,159377,159378,159380,159382,159384,159386,159388,159390,159392,159394],{"class":71,"line":116},[69,159379,32535],{"class":90},[69,159381,1398],{"class":86},[69,159383,1447],{"class":82},[69,159385,158030],{"class":1022},[69,159387,2283],{"class":90},[69,159389,81031],{"class":86},[69,159391,2332],{"class":90},[69,159393,1642],{"class":1022},[69,159395,1404],{"class":86},[69,159397,159398,159400],{"class":71,"line":133},[69,159399,2946],{"class":82},[69,159401,4983],{"class":86},[69,159403,159404,159406,159408,159411],{"class":71,"line":139},[69,159405,32535],{"class":90},[69,159407,1398],{"class":86},[69,159409,159410],{"class":1022},"\"姓名不能为空\"",[69,159412,1404],{"class":86},[14,159414,159416],{"id":159415},"_39-match语句","3.9 match语句",[29,159418,159419,159420,159422],{},"Python 3.10 开始支持 ",[66,159421,72486],{},"。它适合处理固定选项。",[59,159424,159426],{"className":31614,"code":159425,"language":31616,"meta":64,"style":64},"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",[66,159427,159428,159444,159448,159455,159465,159476,159485,159496,159505,159516,159523],{"__ignoreMap":64},[69,159429,159430,159433,159435,159437,159439,159442],{"class":71,"line":72},[69,159431,159432],{"class":86},"command ",[69,159434,1019],{"class":82},[69,159436,61831],{"class":90},[69,159438,1398],{"class":86},[69,159440,159441],{"class":1022},"\"请输入命令:\"",[69,159443,1404],{"class":86},[69,159445,159446],{"class":71,"line":79},[69,159447,3644],{"emptyLinePlaceholder":1325},[69,159449,159450,159452],{"class":71,"line":106},[69,159451,72486],{"class":82},[69,159453,159454],{"class":86}," command:\n",[69,159456,159457,159460,159463],{"class":71,"line":116},[69,159458,159459],{"class":82},"    case",[69,159461,159462],{"class":1022}," \"start\"",[69,159464,4983],{"class":86},[69,159466,159467,159469,159471,159474],{"class":71,"line":133},[69,159468,33687],{"class":90},[69,159470,1398],{"class":86},[69,159472,159473],{"class":1022},"\"启动\"",[69,159475,1404],{"class":86},[69,159477,159478,159480,159483],{"class":71,"line":139},[69,159479,159459],{"class":82},[69,159481,159482],{"class":1022}," \"stop\"",[69,159484,4983],{"class":86},[69,159486,159487,159489,159491,159494],{"class":71,"line":401},[69,159488,33687],{"class":90},[69,159490,1398],{"class":86},[69,159492,159493],{"class":1022},"\"停止\"",[69,159495,1404],{"class":86},[69,159497,159498,159500,159503],{"class":71,"line":470},[69,159499,159459],{"class":82},[69,159501,159502],{"class":1022}," \"restart\"",[69,159504,4983],{"class":86},[69,159506,159507,159509,159511,159514],{"class":71,"line":475},[69,159508,33687],{"class":90},[69,159510,1398],{"class":86},[69,159512,159513],{"class":1022},"\"重启\"",[69,159515,1404],{"class":86},[69,159517,159518,159520],{"class":71,"line":482},[69,159519,159459],{"class":82},[69,159521,159522],{"class":86}," _:\n",[69,159524,159525,159527,159529,159532],{"class":71,"line":497},[69,159526,33687],{"class":90},[69,159528,1398],{"class":86},[69,159530,159531],{"class":1022},"\"未知命令\"",[69,159533,1404],{"class":86},[29,159535,159536,159537,159539,159540,159542],{},"入门阶段掌握 ",[66,159538,155634],{}," 更重要，",[66,159541,72486],{}," 可以作为补充。",[14,159544,159546],{"id":159545},"_310-小案例成绩等级","3.10 小案例：成绩等级",[29,159548,124513],{},[37,159550,159551,159554,159557],{},[40,159552,159553],{},"输入成绩。",[40,159555,159556],{},"判断成绩是否合法。",[40,159558,159559],{},"输出等级。",[29,159561,11277],{},[59,159563,159565],{"className":31614,"code":159564,"language":31616,"meta":64,"style":64},"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",[66,159566,159567,159585,159589,159607,159618,159630,159641,159653,159664,159677,159688,159700,159711,159717],{"__ignoreMap":64},[69,159568,159569,159571,159573,159575,159577,159579,159581,159583],{"class":71,"line":72},[69,159570,156334],{"class":86},[69,159572,1019],{"class":82},[69,159574,111018],{"class":90},[69,159576,1398],{"class":86},[69,159578,55048],{"class":90},[69,159580,1398],{"class":86},[69,159582,153385],{"class":1022},[69,159584,31733],{"class":86},[69,159586,159587],{"class":71,"line":79},[69,159588,3644],{"emptyLinePlaceholder":1325},[69,159590,159591,159593,159595,159597,159599,159601,159603,159605],{"class":71,"line":106},[69,159592,2782],{"class":82},[69,159594,40166],{"class":82},[69,159596,5337],{"class":90},[69,159598,159228],{"class":82},[69,159600,158759],{"class":86},[69,159602,2838],{"class":82},[69,159604,6996],{"class":90},[69,159606,4983],{"class":86},[69,159608,159609,159611,159613,159616],{"class":71,"line":116},[69,159610,32535],{"class":90},[69,159612,1398],{"class":86},[69,159614,159615],{"class":1022},"\"成绩不合法\"",[69,159617,1404],{"class":86},[69,159619,159620,159622,159624,159626,159628],{"class":71,"line":133},[69,159621,158782],{"class":82},[69,159623,158759],{"class":86},[69,159625,2955],{"class":82},[69,159627,158764],{"class":90},[69,159629,4983],{"class":86},[69,159631,159632,159634,159636,159639],{"class":71,"line":139},[69,159633,32535],{"class":90},[69,159635,1398],{"class":86},[69,159637,159638],{"class":1022},"\"等级:A\"",[69,159640,1404],{"class":86},[69,159642,159643,159645,159647,159649,159651],{"class":71,"line":401},[69,159644,158782],{"class":82},[69,159646,158759],{"class":86},[69,159648,2955],{"class":82},[69,159650,158789],{"class":90},[69,159652,4983],{"class":86},[69,159654,159655,159657,159659,159662],{"class":71,"line":470},[69,159656,32535],{"class":90},[69,159658,1398],{"class":86},[69,159660,159661],{"class":1022},"\"等级:B\"",[69,159663,1404],{"class":86},[69,159665,159666,159668,159670,159672,159675],{"class":71,"line":475},[69,159667,158782],{"class":82},[69,159669,158759],{"class":86},[69,159671,2955],{"class":82},[69,159673,159674],{"class":90}," 70",[69,159676,4983],{"class":86},[69,159678,159679,159681,159683,159686],{"class":71,"line":482},[69,159680,32535],{"class":90},[69,159682,1398],{"class":86},[69,159684,159685],{"class":1022},"\"等级:C\"",[69,159687,1404],{"class":86},[69,159689,159690,159692,159694,159696,159698],{"class":71,"line":497},[69,159691,158782],{"class":82},[69,159693,158759],{"class":86},[69,159695,2955],{"class":82},[69,159697,158813],{"class":90},[69,159699,4983],{"class":86},[69,159701,159702,159704,159706,159709],{"class":71,"line":502},[69,159703,32535],{"class":90},[69,159705,1398],{"class":86},[69,159707,159708],{"class":1022},"\"等级:D\"",[69,159710,1404],{"class":86},[69,159712,159713,159715],{"class":71,"line":509},[69,159714,2946],{"class":82},[69,159716,4983],{"class":86},[69,159718,159719,159721,159723,159726],{"class":71,"line":524},[69,159720,32535],{"class":90},[69,159722,1398],{"class":86},[69,159724,159725],{"class":1022},"\"等级:E\"",[69,159727,1404],{"class":86},[14,159729,159731],{"id":159730},"_311-小案例会员折扣","3.11 小案例：会员折扣",[29,159733,124513],{},[37,159735,159736,159739,159742,159745],{},[40,159737,159738],{},"输入消费金额。",[40,159740,159741],{},"输入会员等级，普通、银卡、金卡。",[40,159743,159744],{},"普通不打折，银卡 9 折，金卡 8 折。",[40,159746,159747],{},"满 500 再减 50。",[29,159749,11277],{},[59,159751,159753],{"className":31614,"code":159752,"language":31616,"meta":64,"style":64},"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",[66,159754,159755,159775,159791,159795,159803,159807,159821,159831,159844,159853,159866,159874,159880,159891,159895,159909,159913,159927,159937,159941],{"__ignoreMap":64},[69,159756,159757,159760,159762,159764,159766,159768,159770,159773],{"class":71,"line":72},[69,159758,159759],{"class":86},"amount ",[69,159761,1019],{"class":82},[69,159763,111018],{"class":90},[69,159765,1398],{"class":86},[69,159767,55048],{"class":90},[69,159769,1398],{"class":86},[69,159771,159772],{"class":1022},"\"请输入消费金额:\"",[69,159774,31733],{"class":86},[69,159776,159777,159780,159782,159784,159786,159789],{"class":71,"line":79},[69,159778,159779],{"class":86},"level ",[69,159781,1019],{"class":82},[69,159783,61831],{"class":90},[69,159785,1398],{"class":86},[69,159787,159788],{"class":1022},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[69,159790,1404],{"class":86},[69,159792,159793],{"class":71,"line":106},[69,159794,3644],{"emptyLinePlaceholder":1325},[69,159796,159797,159799,159801],{"class":71,"line":116},[69,159798,158212],{"class":86},[69,159800,1019],{"class":82},[69,159802,56926],{"class":90},[69,159804,159805],{"class":71,"line":133},[69,159806,3644],{"emptyLinePlaceholder":1325},[69,159808,159809,159811,159814,159816,159819],{"class":71,"line":139},[69,159810,2782],{"class":82},[69,159812,159813],{"class":86}," level ",[69,159815,4193],{"class":82},[69,159817,159818],{"class":1022}," \"银卡\"",[69,159820,4983],{"class":86},[69,159822,159823,159826,159828],{"class":71,"line":401},[69,159824,159825],{"class":86},"    discount ",[69,159827,1019],{"class":82},[69,159829,159830],{"class":90}," 0.9\n",[69,159832,159833,159835,159837,159839,159842],{"class":71,"line":470},[69,159834,158782],{"class":82},[69,159836,159813],{"class":86},[69,159838,4193],{"class":82},[69,159840,159841],{"class":1022}," \"金卡\"",[69,159843,4983],{"class":86},[69,159845,159846,159848,159850],{"class":71,"line":475},[69,159847,159825],{"class":86},[69,159849,1019],{"class":82},[69,159851,159852],{"class":90}," 0.8\n",[69,159854,159855,159857,159859,159861,159864],{"class":71,"line":482},[69,159856,158782],{"class":82},[69,159858,159813],{"class":86},[69,159860,4193],{"class":82},[69,159862,159863],{"class":1022}," \"普通\"",[69,159865,4983],{"class":86},[69,159867,159868,159870,159872],{"class":71,"line":497},[69,159869,159825],{"class":86},[69,159871,1019],{"class":82},[69,159873,56926],{"class":90},[69,159875,159876,159878],{"class":71,"line":502},[69,159877,2946],{"class":82},[69,159879,4983],{"class":86},[69,159881,159882,159884,159886,159889],{"class":71,"line":509},[69,159883,32535],{"class":90},[69,159885,1398],{"class":86},[69,159887,159888],{"class":1022},"\"会员等级输入错误，按普通会员计算\"",[69,159890,1404],{"class":86},[69,159892,159893],{"class":71,"line":524},[69,159894,3644],{"emptyLinePlaceholder":1325},[69,159896,159897,159900,159902,159905,159907],{"class":71,"line":2888},[69,159898,159899],{"class":86},"pay ",[69,159901,1019],{"class":82},[69,159903,159904],{"class":86}," amount ",[69,159906,1843],{"class":82},[69,159908,158251],{"class":86},[69,159910,159911],{"class":71,"line":2893},[69,159912,3644],{"emptyLinePlaceholder":1325},[69,159914,159915,159917,159920,159922,159925],{"class":71,"line":2899},[69,159916,2782],{"class":82},[69,159918,159919],{"class":86}," pay ",[69,159921,2955],{"class":82},[69,159923,159924],{"class":90}," 500",[69,159926,4983],{"class":86},[69,159928,159929,159932,159934],{"class":71,"line":2919},[69,159930,159931],{"class":86},"    pay ",[69,159933,151228],{"class":82},[69,159935,159936],{"class":90}," 50\n",[69,159938,159939],{"class":71,"line":2924},[69,159940,3644],{"emptyLinePlaceholder":1325},[69,159942,159943,159945,159947,159949,159951,159953,159956,159958,159960,159962],{"class":71,"line":2938},[69,159944,31651],{"class":90},[69,159946,1398],{"class":86},[69,159948,1447],{"class":82},[69,159950,158332],{"class":1022},[69,159952,2283],{"class":90},[69,159954,159955],{"class":86},"pay",[69,159957,158135],{"class":82},[69,159959,2332],{"class":90},[69,159961,157988],{"class":1022},[69,159963,1404],{"class":86},[14,159965,159967],{"id":159966},"_312-易错点","3.12 易错点",[37,159969,159970,159973,159976,159979,159984],{},[40,159971,159972],{},"冒号不能漏。",[40,159974,159975],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[40,159977,159978],{},"多分支判断要注意顺序。",[40,159980,159981,159982,29621],{},"判断相等用 ",[66,159983,4193],{},[40,159985,159986],{},"字符串比较区分大小写：",[59,159988,159990],{"className":31614,"code":159989,"language":31616,"meta":64,"style":64},"\"Y\" == \"y\"  # False\n",[66,159991,159992],{"__ignoreMap":64},[69,159993,159994,159997,159999,160001],{"class":71,"line":72},[69,159995,159996],{"class":1022},"\"Y\"",[69,159998,102780],{"class":82},[69,160000,158981],{"class":1022},[69,160002,160003],{"class":75},"  # False\n",[29,160005,160006],{},"可转换后再判断：",[59,160008,160010],{"className":31614,"code":160009,"language":31616,"meta":64,"style":64},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[66,160011,160012,160029,160042],{"__ignoreMap":64},[69,160013,160014,160017,160019,160021,160023,160026],{"class":71,"line":72},[69,160015,160016],{"class":86},"answer ",[69,160018,1019],{"class":82},[69,160020,61831],{"class":90},[69,160022,1398],{"class":86},[69,160024,160025],{"class":1022},"\"是否继续(y\u002Fn):\"",[69,160027,160028],{"class":86},").lower()\n",[69,160030,160031,160033,160036,160038,160040],{"class":71,"line":79},[69,160032,2782],{"class":82},[69,160034,160035],{"class":86}," answer ",[69,160037,4193],{"class":82},[69,160039,158981],{"class":1022},[69,160041,4983],{"class":86},[69,160043,160044,160046,160048,160051],{"class":71,"line":106},[69,160045,32535],{"class":90},[69,160047,1398],{"class":86},[69,160049,160050],{"class":1022},"\"继续\"",[69,160052,1404],{"class":86},[14,160054,160056],{"id":160055},"_313-本章练习","3.13 本章练习",[37,160058,160059,160062,160065,160068,160078],{},[40,160060,160061],{},"输入年龄，判断是否成年。",[40,160063,160064],{},"输入年份，判断是否为闰年。",[40,160066,160067],{},"输入三个数字，输出最大值。",[40,160069,160070,160071,160074,160075,160077],{},"写登录判断：用户名是 ",[66,160072,160073],{},"admin"," 且密码是 ",[66,160076,16324],{}," 才登录成功。",[40,160079,160080],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1297,160082,160083],{},"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":64,"searchDepth":79,"depth":79,"links":160085},[160086,160087,160088,160089,160090,160091,160096,160097,160098,160099,160100,160101,160102],{"id":158474,"depth":79,"text":158475},{"id":158527,"depth":79,"text":158528},{"id":158631,"depth":79,"text":158632},{"id":158721,"depth":79,"text":158722},{"id":158911,"depth":79,"text":158912},{"id":159034,"depth":79,"text":159035,"children":160092},[160093,160094,160095],{"id":159038,"depth":106,"text":159039},{"id":159095,"depth":106,"text":159096},{"id":159152,"depth":106,"text":159153},{"id":159197,"depth":79,"text":159198},{"id":159288,"depth":79,"text":159289},{"id":159415,"depth":79,"text":159416},{"id":159545,"depth":79,"text":159546},{"id":159730,"depth":79,"text":159731},{"id":159966,"depth":79,"text":159967},{"id":160055,"depth":79,"text":160056},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158466,"description":1322},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160109,"title":160110,"body":160111,"description":1322,"extension":1323,"meta":161880,"navigation":1325,"path":161881,"seo":161882,"stem":161883,"__hash__":161884},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160112,"toc":161860},[160113,160116,160120,160126,160129,160146,160150,160152,160169,160171,160216,160218,160235,160239,160242,160308,160311,160329,160333,160494,160503,160507,160511,160516,160563,160565,160571,160575,160580,160627,160629,160635,160639,160644,160680,160683,160730,160734,160740,160798,160803,160834,160839,160843,160898,160901,160973,160976,161035,161039,161042,161117,161120,161124,161230,161233,161259,161263,161275,161344,161347,161439,161443,161445,161456,161458,161588,161592,161794,161802,161806,161836,161840,161857],[10,160114,160110],{"id":160115},"_4-循环语句",[14,160117,160119],{"id":160118},"_41-为什么需要循环","4.1 为什么需要循环",[29,160121,160122,160123,160125],{},"如果要输出 1 到 100，不应该写 100 行 ",[66,160124,147448],{},"，而应该用循环。",[29,160127,160128],{},"循环适合处理重复任务：",[37,160130,160131,160134,160137,160140,160143],{},[40,160132,160133],{},"重复输出。",[40,160135,160136],{},"重复输入。",[40,160138,160139],{},"遍历数据。",[40,160141,160142],{},"持续执行菜单。",[40,160144,160145],{},"批量处理文件或数据。",[14,160147,160149],{"id":160148},"_42-while循环","4.2 while循环",[29,160151,6425],{},[59,160153,160155],{"className":31614,"code":160154,"language":31616,"meta":64,"style":64},"while 条件:\n    循环体\n",[66,160156,160157,160164],{"__ignoreMap":64},[69,160158,160159,160161],{"class":71,"line":72},[69,160160,109884],{"class":82},[69,160162,160163],{"class":86}," 条件:\n",[69,160165,160166],{"class":71,"line":79},[69,160167,160168],{"class":86},"    循环体\n",[29,160170,16375],{},[59,160172,160174],{"className":31614,"code":160173,"language":31616,"meta":64,"style":64},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[66,160175,160176,160184,160188,160200,160207],{"__ignoreMap":64},[69,160177,160178,160180,160182],{"class":71,"line":72},[69,160179,101369],{"class":86},[69,160181,1019],{"class":82},[69,160183,56926],{"class":90},[69,160185,160186],{"class":71,"line":79},[69,160187,3644],{"emptyLinePlaceholder":1325},[69,160189,160190,160192,160194,160196,160198],{"class":71,"line":106},[69,160191,109884],{"class":82},[69,160193,10680],{"class":86},[69,160195,2838],{"class":82},[69,160197,3392],{"class":90},[69,160199,4983],{"class":86},[69,160201,160202,160204],{"class":71,"line":116},[69,160203,32535],{"class":90},[69,160205,160206],{"class":86},"(i)\n",[69,160208,160209,160212,160214],{"class":71,"line":133},[69,160210,160211],{"class":86},"    i ",[69,160213,10719],{"class":82},[69,160215,56926],{"class":90},[29,160217,82150],{},[37,160219,160220,160226,160229,160232],{},[40,160221,160222,160223,29621],{},"判断条件 ",[66,160224,160225],{},"i \u003C= 5",[40,160227,160228],{},"条件成立，执行循环体。",[40,160230,160231],{},"执行完后回到条件判断。",[40,160233,160234],{},"条件不成立，退出循环。",[14,160236,160238],{"id":160237},"_43-while累加","4.3 while累加",[29,160240,160241],{},"计算 1 到 100 的和：",[59,160243,160245],{"className":31614,"code":160244,"language":31616,"meta":64,"style":64},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[66,160246,160247,160255,160263,160267,160279,160289,160297,160301],{"__ignoreMap":64},[69,160248,160249,160251,160253],{"class":71,"line":72},[69,160250,101369],{"class":86},[69,160252,1019],{"class":82},[69,160254,56926],{"class":90},[69,160256,160257,160259,160261],{"class":71,"line":79},[69,160258,158236],{"class":86},[69,160260,1019],{"class":82},[69,160262,48569],{"class":90},[69,160264,160265],{"class":71,"line":106},[69,160266,3644],{"emptyLinePlaceholder":1325},[69,160268,160269,160271,160273,160275,160277],{"class":71,"line":116},[69,160270,109884],{"class":82},[69,160272,10680],{"class":86},[69,160274,2838],{"class":82},[69,160276,6996],{"class":90},[69,160278,4983],{"class":86},[69,160280,160281,160284,160286],{"class":71,"line":133},[69,160282,160283],{"class":86},"    total ",[69,160285,10719],{"class":82},[69,160287,160288],{"class":86}," i\n",[69,160290,160291,160293,160295],{"class":71,"line":139},[69,160292,160211],{"class":86},[69,160294,10719],{"class":82},[69,160296,56926],{"class":90},[69,160298,160299],{"class":71,"line":401},[69,160300,3644],{"emptyLinePlaceholder":1325},[69,160302,160303,160305],{"class":71,"line":470},[69,160304,31651],{"class":90},[69,160306,160307],{"class":86},"(total)\n",[29,160309,160310],{},"核心思想：",[37,160312,160313,160318,160323],{},[40,160314,160315,160317],{},[66,160316,1830],{}," 控制循环次数。",[40,160319,160320,160322],{},[66,160321,158337],{}," 保存累加结果。",[40,160324,160325,160326,160328],{},"每轮循环都要更新 ",[66,160327,1830],{},"，否则可能死循环。",[14,160330,160332],{"id":160331},"_44-while猜数字","4.4 while猜数字",[59,160334,160336],{"className":31614,"code":160335,"language":31616,"meta":64,"style":64},"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",[66,160337,160338,160344,160348,160365,160373,160377,160385,160405,160414,160418,160430,160441,160451,160462,160468,160490],{"__ignoreMap":64},[69,160339,160340,160342],{"class":71,"line":72},[69,160341,31628],{"class":82},[69,160343,46564],{"class":86},[69,160345,160346],{"class":71,"line":79},[69,160347,3644],{"emptyLinePlaceholder":1325},[69,160349,160350,160352,160354,160357,160359,160361,160363],{"class":71,"line":106},[69,160351,160016],{"class":86},[69,160353,1019],{"class":82},[69,160355,160356],{"class":86}," random.randint(",[69,160358,1609],{"class":90},[69,160360,13677],{"class":86},[69,160362,124],{"class":90},[69,160364,1404],{"class":86},[69,160366,160367,160369,160371],{"class":71,"line":116},[69,160368,147667],{"class":86},[69,160370,1019],{"class":82},[69,160372,48569],{"class":90},[69,160374,160375],{"class":71,"line":133},[69,160376,3644],{"emptyLinePlaceholder":1325},[69,160378,160379,160381,160383],{"class":71,"line":139},[69,160380,109884],{"class":82},[69,160382,96513],{"class":90},[69,160384,4983],{"class":86},[69,160386,160387,160390,160392,160394,160396,160398,160400,160403],{"class":71,"line":401},[69,160388,160389],{"class":86},"    guess ",[69,160391,1019],{"class":82},[69,160393,3626],{"class":90},[69,160395,1398],{"class":86},[69,160397,55048],{"class":90},[69,160399,1398],{"class":86},[69,160401,160402],{"class":1022},"\"请输入1到100之间的数字:\"",[69,160404,31733],{"class":86},[69,160406,160407,160410,160412],{"class":71,"line":470},[69,160408,160409],{"class":86},"    count ",[69,160411,10719],{"class":82},[69,160413,56926],{"class":90},[69,160415,160416],{"class":71,"line":475},[69,160417,3644],{"emptyLinePlaceholder":1325},[69,160419,160420,160422,160425,160427],{"class":71,"line":482},[69,160421,4345],{"class":82},[69,160423,160424],{"class":86}," guess ",[69,160426,2346],{"class":82},[69,160428,160429],{"class":86}," answer:\n",[69,160431,160432,160434,160436,160439],{"class":71,"line":497},[69,160433,33687],{"class":90},[69,160435,1398],{"class":86},[69,160437,160438],{"class":1022},"\"猜大了\"",[69,160440,1404],{"class":86},[69,160442,160443,160445,160447,160449],{"class":71,"line":502},[69,160444,40529],{"class":82},[69,160446,160424],{"class":86},[69,160448,1011],{"class":82},[69,160450,160429],{"class":86},[69,160452,160453,160455,160457,160460],{"class":71,"line":509},[69,160454,33687],{"class":90},[69,160456,1398],{"class":86},[69,160458,160459],{"class":1022},"\"猜小了\"",[69,160461,1404],{"class":86},[69,160463,160464,160466],{"class":71,"line":524},[69,160465,158998],{"class":82},[69,160467,4983],{"class":86},[69,160469,160470,160472,160474,160476,160479,160481,160483,160485,160488],{"class":71,"line":2888},[69,160471,33687],{"class":90},[69,160473,1398],{"class":86},[69,160475,1447],{"class":82},[69,160477,160478],{"class":1022},"\"猜对了，一共猜了",[69,160480,2283],{"class":90},[69,160482,85655],{"class":86},[69,160484,2332],{"class":90},[69,160486,160487],{"class":1022},"次\"",[69,160489,1404],{"class":86},[69,160491,160492],{"class":71,"line":2893},[69,160493,32863],{"class":82},[29,160495,160496,160499,160500,160502],{},[66,160497,160498],{},"while True"," 表示无限循环，通常配合 ",[66,160501,3297],{}," 使用。",[14,160504,160506],{"id":160505},"_45-break和continue","4.5 break和continue",[19,160508,160510],{"id":160509},"_451-break","4.5.1 break",[29,160512,160513,160515],{},[66,160514,3297],{}," 直接结束整个循环。",[59,160517,160519],{"className":31614,"code":160518,"language":31616,"meta":64,"style":64},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[66,160520,160521,160541,160553,160557],{"__ignoreMap":64},[69,160522,160523,160525,160527,160529,160531,160533,160535,160537,160539],{"class":71,"line":72},[69,160524,4269],{"class":82},[69,160526,10680],{"class":86},[69,160528,27280],{"class":82},[69,160530,33679],{"class":90},[69,160532,1398],{"class":86},[69,160534,1609],{"class":90},[69,160536,13677],{"class":86},[69,160538,1733],{"class":90},[69,160540,32022],{"class":86},[69,160542,160543,160545,160547,160549,160551],{"class":71,"line":79},[69,160544,4345],{"class":82},[69,160546,10680],{"class":86},[69,160548,4193],{"class":82},[69,160550,79291],{"class":90},[69,160552,4983],{"class":86},[69,160554,160555],{"class":71,"line":106},[69,160556,32863],{"class":82},[69,160558,160559,160561],{"class":71,"line":116},[69,160560,32535],{"class":90},[69,160562,160206],{"class":86},[29,160564,147433],{},[59,160566,160569],{"className":160567,"code":160568,"language":540,"meta":64},[538],"1\n2\n",[66,160570,160568],{"__ignoreMap":64},[19,160572,160574],{"id":160573},"_452-continue","4.5.2 continue",[29,160576,160577,160579],{},[66,160578,155648],{}," 跳过本轮剩余代码，进入下一轮循环。",[59,160581,160583],{"className":31614,"code":160582,"language":31616,"meta":64,"style":64},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[66,160584,160585,160605,160617,160621],{"__ignoreMap":64},[69,160586,160587,160589,160591,160593,160595,160597,160599,160601,160603],{"class":71,"line":72},[69,160588,4269],{"class":82},[69,160590,10680],{"class":86},[69,160592,27280],{"class":82},[69,160594,33679],{"class":90},[69,160596,1398],{"class":86},[69,160598,1609],{"class":90},[69,160600,13677],{"class":86},[69,160602,1733],{"class":90},[69,160604,32022],{"class":86},[69,160606,160607,160609,160611,160613,160615],{"class":71,"line":79},[69,160608,4345],{"class":82},[69,160610,10680],{"class":86},[69,160612,4193],{"class":82},[69,160614,79291],{"class":90},[69,160616,4983],{"class":86},[69,160618,160619],{"class":71,"line":106},[69,160620,149488],{"class":82},[69,160622,160623,160625],{"class":71,"line":116},[69,160624,32535],{"class":90},[69,160626,160206],{"class":86},[29,160628,147433],{},[59,160630,160633],{"className":160631,"code":160632,"language":540,"meta":64},[538],"1\n2\n4\n5\n",[66,160634,160632],{"__ignoreMap":64},[14,160636,160638],{"id":160637},"_46-for循环","4.6 for循环",[29,160640,160641,160643],{},[66,160642,4269],{}," 常用于遍历序列。",[59,160645,160647],{"className":31614,"code":160646,"language":31616,"meta":64,"style":64},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[66,160648,160649,160658,160662,160673],{"__ignoreMap":64},[69,160650,160651,160653,160655],{"class":71,"line":72},[69,160652,147512],{"class":86},[69,160654,1019],{"class":82},[69,160656,160657],{"class":1022}," \"python\"\n",[69,160659,160660],{"class":71,"line":79},[69,160661,3644],{"emptyLinePlaceholder":1325},[69,160663,160664,160666,160669,160671],{"class":71,"line":106},[69,160665,4269],{"class":82},[69,160667,160668],{"class":86}," ch ",[69,160670,27280],{"class":82},[69,160672,159375],{"class":86},[69,160674,160675,160677],{"class":71,"line":116},[69,160676,32535],{"class":90},[69,160678,160679],{"class":86},"(ch)\n",[29,160681,160682],{},"遍历列表：",[59,160684,160686],{"className":31614,"code":160685,"language":31616,"meta":64,"style":64},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[66,160687,160688,160710,160714,160724],{"__ignoreMap":64},[69,160689,160690,160693,160695,160697,160699,160701,160703,160705,160708],{"class":71,"line":72},[69,160691,160692],{"class":86},"students ",[69,160694,1019],{"class":82},[69,160696,53454],{"class":86},[69,160698,150864],{"class":1022},[69,160700,13677],{"class":86},[69,160702,151912],{"class":1022},[69,160704,13677],{"class":86},[69,160706,160707],{"class":1022},"\"小刚\"",[69,160709,34482],{"class":86},[69,160711,160712],{"class":71,"line":79},[69,160713,3644],{"emptyLinePlaceholder":1325},[69,160715,160716,160718,160720,160722],{"class":71,"line":106},[69,160717,4269],{"class":82},[69,160719,153113],{"class":86},[69,160721,27280],{"class":82},[69,160723,153118],{"class":86},[69,160725,160726,160728],{"class":71,"line":116},[69,160727,32535],{"class":90},[69,160729,151018],{"class":86},[14,160731,160733],{"id":160732},"_47-range函数","4.7 range函数",[29,160735,160736,160739],{},[66,160737,160738],{},"range()"," 用于生成整数序列。",[59,160741,160743],{"className":31614,"code":160742,"language":31616,"meta":64,"style":64},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[66,160744,160745,160759,160777],{"__ignoreMap":64},[69,160746,160747,160749,160751,160753,160756],{"class":71,"line":72},[69,160748,34652],{"class":90},[69,160750,1398],{"class":86},[69,160752,1709],{"class":90},[69,160754,160755],{"class":86},")          ",[69,160757,160758],{"class":75},"# 0,1,2,3,4\n",[69,160760,160761,160763,160765,160767,160769,160771,160774],{"class":71,"line":79},[69,160762,34652],{"class":90},[69,160764,1398],{"class":86},[69,160766,1609],{"class":90},[69,160768,13677],{"class":86},[69,160770,1709],{"class":90},[69,160772,160773],{"class":86},")       ",[69,160775,160776],{"class":75},"# 1,2,3,4\n",[69,160778,160779,160781,160783,160785,160787,160789,160791,160793,160795],{"class":71,"line":106},[69,160780,34652],{"class":90},[69,160782,1398],{"class":86},[69,160784,1609],{"class":90},[69,160786,13677],{"class":86},[69,160788,390],{"class":90},[69,160790,13677],{"class":86},[69,160792,1471],{"class":90},[69,160794,156637],{"class":86},[69,160796,160797],{"class":75},"# 1,3,5,7,9\n",[29,160799,160800,160801,25855],{},"配合 ",[66,160802,4269],{},[59,160804,160806],{"className":31614,"code":160805,"language":31616,"meta":64,"style":64},"for i in range(1, 6):\n    print(i)\n",[66,160807,160808,160828],{"__ignoreMap":64},[69,160809,160810,160812,160814,160816,160818,160820,160822,160824,160826],{"class":71,"line":72},[69,160811,4269],{"class":82},[69,160813,10680],{"class":86},[69,160815,27280],{"class":82},[69,160817,33679],{"class":90},[69,160819,1398],{"class":86},[69,160821,1609],{"class":90},[69,160823,13677],{"class":86},[69,160825,1733],{"class":90},[69,160827,32022],{"class":86},[69,160829,160830,160832],{"class":71,"line":79},[69,160831,32535],{"class":90},[69,160833,160206],{"class":86},[29,160835,10267,160836,160838],{},[66,160837,34652],{}," 的结束值不包含在内。",[14,160840,160842],{"id":160841},"_48-for循环求和","4.8 for循环求和",[59,160844,160846],{"className":31614,"code":160845,"language":31616,"meta":64,"style":64},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[66,160847,160848,160856,160860,160880,160888,160892],{"__ignoreMap":64},[69,160849,160850,160852,160854],{"class":71,"line":72},[69,160851,158236],{"class":86},[69,160853,1019],{"class":82},[69,160855,48569],{"class":90},[69,160857,160858],{"class":71,"line":79},[69,160859,3644],{"emptyLinePlaceholder":1325},[69,160861,160862,160864,160866,160868,160870,160872,160874,160876,160878],{"class":71,"line":106},[69,160863,4269],{"class":82},[69,160865,10680],{"class":86},[69,160867,27280],{"class":82},[69,160869,33679],{"class":90},[69,160871,1398],{"class":86},[69,160873,1609],{"class":90},[69,160875,13677],{"class":86},[69,160877,1726],{"class":90},[69,160879,32022],{"class":86},[69,160881,160882,160884,160886],{"class":71,"line":116},[69,160883,160283],{"class":86},[69,160885,10719],{"class":82},[69,160887,160288],{"class":86},[69,160889,160890],{"class":71,"line":133},[69,160891,3644],{"emptyLinePlaceholder":1325},[69,160893,160894,160896],{"class":71,"line":139},[69,160895,31651],{"class":90},[69,160897,160307],{"class":86},[29,160899,160900],{},"求偶数和：",[59,160902,160904],{"className":31614,"code":160903,"language":31616,"meta":64,"style":64},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[66,160905,160906,160914,160918,160938,160954,160963,160967],{"__ignoreMap":64},[69,160907,160908,160910,160912],{"class":71,"line":72},[69,160909,158236],{"class":86},[69,160911,1019],{"class":82},[69,160913,48569],{"class":90},[69,160915,160916],{"class":71,"line":79},[69,160917,3644],{"emptyLinePlaceholder":1325},[69,160919,160920,160922,160924,160926,160928,160930,160932,160934,160936],{"class":71,"line":106},[69,160921,4269],{"class":82},[69,160923,10680],{"class":86},[69,160925,27280],{"class":82},[69,160927,33679],{"class":90},[69,160929,1398],{"class":86},[69,160931,1609],{"class":90},[69,160933,13677],{"class":86},[69,160935,1726],{"class":90},[69,160937,32022],{"class":86},[69,160939,160940,160942,160944,160946,160948,160950,160952],{"class":71,"line":116},[69,160941,4345],{"class":82},[69,160943,10680],{"class":86},[69,160945,127],{"class":82},[69,160947,15995],{"class":90},[69,160949,102780],{"class":82},[69,160951,5337],{"class":90},[69,160953,4983],{"class":86},[69,160955,160956,160959,160961],{"class":71,"line":133},[69,160957,160958],{"class":86},"        total ",[69,160960,10719],{"class":82},[69,160962,160288],{"class":86},[69,160964,160965],{"class":71,"line":139},[69,160966,3644],{"emptyLinePlaceholder":1325},[69,160968,160969,160971],{"class":71,"line":401},[69,160970,31651],{"class":90},[69,160972,160307],{"class":86},[29,160974,160975],{},"也可以：",[59,160977,160979],{"className":31614,"code":160978,"language":31616,"meta":64,"style":64},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[66,160980,160981,160989,160993,161017,161025,161029],{"__ignoreMap":64},[69,160982,160983,160985,160987],{"class":71,"line":72},[69,160984,158236],{"class":86},[69,160986,1019],{"class":82},[69,160988,48569],{"class":90},[69,160990,160991],{"class":71,"line":79},[69,160992,3644],{"emptyLinePlaceholder":1325},[69,160994,160995,160997,160999,161001,161003,161005,161007,161009,161011,161013,161015],{"class":71,"line":106},[69,160996,4269],{"class":82},[69,160998,10680],{"class":86},[69,161000,27280],{"class":82},[69,161002,33679],{"class":90},[69,161004,1398],{"class":86},[69,161006,1471],{"class":90},[69,161008,13677],{"class":86},[69,161010,1726],{"class":90},[69,161012,13677],{"class":86},[69,161014,1471],{"class":90},[69,161016,32022],{"class":86},[69,161018,161019,161021,161023],{"class":71,"line":116},[69,161020,160283],{"class":86},[69,161022,10719],{"class":82},[69,161024,160288],{"class":86},[69,161026,161027],{"class":71,"line":133},[69,161028,3644],{"emptyLinePlaceholder":1325},[69,161030,161031,161033],{"class":71,"line":139},[69,161032,31651],{"class":90},[69,161034,160307],{"class":86},[14,161036,161038],{"id":161037},"_49-循环嵌套","4.9 循环嵌套",[29,161040,161041],{},"嵌套循环就是循环里面再写循环。",[59,161043,161045],{"className":31614,"code":161044,"language":31616,"meta":64,"style":64},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[66,161046,161047,161067,161087],{"__ignoreMap":64},[69,161048,161049,161051,161053,161055,161057,161059,161061,161063,161065],{"class":71,"line":72},[69,161050,4269],{"class":82},[69,161052,10680],{"class":86},[69,161054,27280],{"class":82},[69,161056,33679],{"class":90},[69,161058,1398],{"class":86},[69,161060,1609],{"class":90},[69,161062,13677],{"class":86},[69,161064,1684],{"class":90},[69,161066,32022],{"class":86},[69,161068,161069,161071,161073,161075,161077,161079,161081,161083,161085],{"class":71,"line":79},[69,161070,4445],{"class":82},[69,161072,10742],{"class":86},[69,161074,27280],{"class":82},[69,161076,33679],{"class":90},[69,161078,1398],{"class":86},[69,161080,1609],{"class":90},[69,161082,13677],{"class":86},[69,161084,1684],{"class":90},[69,161086,32022],{"class":86},[69,161088,161089,161091,161093,161095,161098,161100,161102,161104,161107,161109,161111,161113,161115],{"class":71,"line":106},[69,161090,33687],{"class":90},[69,161092,1398],{"class":86},[69,161094,1447],{"class":82},[69,161096,161097],{"class":1022},"\"i=",[69,161099,2283],{"class":90},[69,161101,1830],{"class":86},[69,161103,2332],{"class":90},[69,161105,161106],{"class":1022},", j=",[69,161108,2283],{"class":90},[69,161110,1855],{"class":86},[69,161112,2332],{"class":90},[69,161114,1642],{"class":1022},[69,161116,1404],{"class":86},[29,161118,161119],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161121,161123],{"id":161122},"_410-九九乘法表","4.10 九九乘法表",[59,161125,161127],{"className":31614,"code":161126,"language":31616,"meta":64,"style":64},"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",[66,161128,161129,161149,161172,161224],{"__ignoreMap":64},[69,161130,161131,161133,161135,161137,161139,161141,161143,161145,161147],{"class":71,"line":72},[69,161132,4269],{"class":82},[69,161134,10680],{"class":86},[69,161136,27280],{"class":82},[69,161138,33679],{"class":90},[69,161140,1398],{"class":86},[69,161142,1609],{"class":90},[69,161144,13677],{"class":86},[69,161146,390],{"class":90},[69,161148,32022],{"class":86},[69,161150,161151,161153,161155,161157,161159,161161,161163,161166,161168,161170],{"class":71,"line":79},[69,161152,4445],{"class":82},[69,161154,10742],{"class":86},[69,161156,27280],{"class":82},[69,161158,33679],{"class":90},[69,161160,1398],{"class":86},[69,161162,1609],{"class":90},[69,161164,161165],{"class":86},", i ",[69,161167,1869],{"class":82},[69,161169,26355],{"class":90},[69,161171,32022],{"class":86},[69,161173,161174,161176,161178,161180,161182,161184,161186,161188,161190,161192,161194,161196,161198,161200,161202,161204,161206,161208,161210,161212,161214,161216,161218,161220,161222],{"class":71,"line":106},[69,161175,33687],{"class":90},[69,161177,1398],{"class":86},[69,161179,1447],{"class":82},[69,161181,1642],{"class":1022},[69,161183,2283],{"class":90},[69,161185,1855],{"class":86},[69,161187,2332],{"class":90},[69,161189,1843],{"class":1022},[69,161191,2283],{"class":90},[69,161193,1830],{"class":86},[69,161195,2332],{"class":90},[69,161197,1019],{"class":1022},[69,161199,2283],{"class":90},[69,161201,101369],{"class":86},[69,161203,1843],{"class":82},[69,161205,4654],{"class":86},[69,161207,2332],{"class":90},[69,161209,1642],{"class":1022},[69,161211,13677],{"class":86},[69,161213,47037],{"class":6458},[69,161215,1019],{"class":82},[69,161217,1642],{"class":1022},[69,161219,2486],{"class":90},[69,161221,1642],{"class":1022},[69,161223,1404],{"class":86},[69,161225,161226,161228],{"class":71,"line":116},[69,161227,32535],{"class":90},[69,161229,3220],{"class":86},[29,161231,161232],{},"关键点：",[37,161234,161235,161241,161247,161253],{},[40,161236,161237,161238,161240],{},"外层 ",[66,161239,1830],{}," 控制行。",[40,161242,161243,161244,161246],{},"内层 ",[66,161245,1855],{}," 控制列。",[40,161248,161249,161250,161252],{},"每行结束后用 ",[66,161251,147448],{}," 换行。",[40,161254,161255,161258],{},[66,161256,161257],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161260,161262],{"id":161261},"_411-循环else","4.11 循环else",[29,161264,161265,161266,161268,161269,161271,161272,161274],{},"Python 的循环可以带 ",[66,161267,2946],{},"。当循环正常结束时执行 ",[66,161270,2946],{},"，如果被 ",[66,161273,3297],{}," 打断，则不执行。",[59,161276,161278],{"className":31614,"code":161277,"language":31616,"meta":64,"style":64},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[66,161279,161280,161300,161312,161323,161327,161333],{"__ignoreMap":64},[69,161281,161282,161284,161286,161288,161290,161292,161294,161296,161298],{"class":71,"line":72},[69,161283,4269],{"class":82},[69,161285,10680],{"class":86},[69,161287,27280],{"class":82},[69,161289,33679],{"class":90},[69,161291,1398],{"class":86},[69,161293,1609],{"class":90},[69,161295,13677],{"class":86},[69,161297,1733],{"class":90},[69,161299,32022],{"class":86},[69,161301,161302,161304,161306,161308,161310],{"class":71,"line":79},[69,161303,4345],{"class":82},[69,161305,10680],{"class":86},[69,161307,4193],{"class":82},[69,161309,3282],{"class":90},[69,161311,4983],{"class":86},[69,161313,161314,161316,161318,161321],{"class":71,"line":106},[69,161315,33687],{"class":90},[69,161317,1398],{"class":86},[69,161319,161320],{"class":1022},"\"找到了\"",[69,161322,1404],{"class":86},[69,161324,161325],{"class":71,"line":116},[69,161326,32863],{"class":82},[69,161328,161329,161331],{"class":71,"line":133},[69,161330,2946],{"class":82},[69,161332,4983],{"class":86},[69,161334,161335,161337,161339,161342],{"class":71,"line":139},[69,161336,32535],{"class":90},[69,161338,1398],{"class":86},[69,161340,161341],{"class":1022},"\"没找到\"",[69,161343,1404],{"class":86},[29,161345,161346],{},"常用于搜索。",[59,161348,161350],{"className":31614,"code":161349,"language":31616,"meta":64,"style":64},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[66,161351,161352,161373,161382,161386,161398,161409,161419,161423,161429],{"__ignoreMap":64},[69,161353,161354,161357,161359,161361,161363,161365,161367,161369,161371],{"class":71,"line":72},[69,161355,161356],{"class":86},"names ",[69,161358,1019],{"class":82},[69,161360,53454],{"class":86},[69,161362,150864],{"class":1022},[69,161364,13677],{"class":86},[69,161366,151912],{"class":1022},[69,161368,13677],{"class":86},[69,161370,160707],{"class":1022},[69,161372,34482],{"class":86},[69,161374,161375,161377,161379],{"class":71,"line":79},[69,161376,112799],{"class":86},[69,161378,1019],{"class":82},[69,161380,161381],{"class":1022}," \"小李\"\n",[69,161383,161384],{"class":71,"line":106},[69,161385,3644],{"emptyLinePlaceholder":1325},[69,161387,161388,161390,161393,161395],{"class":71,"line":116},[69,161389,4269],{"class":82},[69,161391,161392],{"class":86}," name ",[69,161394,27280],{"class":82},[69,161396,161397],{"class":86}," names:\n",[69,161399,161400,161402,161404,161406],{"class":71,"line":133},[69,161401,4345],{"class":82},[69,161403,161392],{"class":86},[69,161405,4193],{"class":82},[69,161407,161408],{"class":86}," target:\n",[69,161410,161411,161413,161415,161417],{"class":71,"line":139},[69,161412,33687],{"class":90},[69,161414,1398],{"class":86},[69,161416,161320],{"class":1022},[69,161418,1404],{"class":86},[69,161420,161421],{"class":71,"line":401},[69,161422,32863],{"class":82},[69,161424,161425,161427],{"class":71,"line":470},[69,161426,2946],{"class":82},[69,161428,4983],{"class":86},[69,161430,161431,161433,161435,161437],{"class":71,"line":475},[69,161432,32535],{"class":90},[69,161434,1398],{"class":86},[69,161436,161341],{"class":1022},[69,161438,1404],{"class":86},[14,161440,161442],{"id":161441},"_412-小案例登录重试","4.12 小案例：登录重试",[29,161444,124513],{},[37,161446,161447,161450,161453],{},[40,161448,161449],{},"用户最多输入 3 次密码。",[40,161451,161452],{},"密码正确则登录成功。",[40,161454,161455],{},"3 次都错误则锁定账号。",[29,161457,11277],{},[59,161459,161461],{"className":31614,"code":161460,"language":31616,"meta":64,"style":64},"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",[66,161462,161463,161473,161477,161493,161509,161513,161525,161536,161540,161546,161571,161577],{"__ignoreMap":64},[69,161464,161465,161468,161470],{"class":71,"line":72},[69,161466,161467],{"class":86},"password ",[69,161469,1019],{"class":82},[69,161471,161472],{"class":1022}," \"123456\"\n",[69,161474,161475],{"class":71,"line":79},[69,161476,3644],{"emptyLinePlaceholder":1325},[69,161478,161479,161481,161483,161485,161487,161489,161491],{"class":71,"line":106},[69,161480,4269],{"class":82},[69,161482,10680],{"class":86},[69,161484,27280],{"class":82},[69,161486,33679],{"class":90},[69,161488,1398],{"class":86},[69,161490,1465],{"class":90},[69,161492,32022],{"class":86},[69,161494,161495,161498,161500,161502,161504,161507],{"class":71,"line":116},[69,161496,161497],{"class":86},"    user_password ",[69,161499,1019],{"class":82},[69,161501,61831],{"class":90},[69,161503,1398],{"class":86},[69,161505,161506],{"class":1022},"\"请输入密码:\"",[69,161508,1404],{"class":86},[69,161510,161511],{"class":71,"line":133},[69,161512,3644],{"emptyLinePlaceholder":1325},[69,161514,161515,161517,161520,161522],{"class":71,"line":139},[69,161516,4345],{"class":82},[69,161518,161519],{"class":86}," user_password ",[69,161521,4193],{"class":82},[69,161523,161524],{"class":86}," password:\n",[69,161526,161527,161529,161531,161534],{"class":71,"line":401},[69,161528,33687],{"class":90},[69,161530,1398],{"class":86},[69,161532,161533],{"class":1022},"\"登录成功\"",[69,161535,1404],{"class":86},[69,161537,161538],{"class":71,"line":470},[69,161539,32863],{"class":82},[69,161541,161542,161544],{"class":71,"line":475},[69,161543,158998],{"class":82},[69,161545,4983],{"class":86},[69,161547,161548,161550,161552,161554,161557,161560,161562,161564,161566,161569],{"class":71,"line":482},[69,161549,33687],{"class":90},[69,161551,1398],{"class":86},[69,161553,1447],{"class":82},[69,161555,161556],{"class":1022},"\"密码错误，还剩",[69,161558,161559],{"class":90},"{2",[69,161561,53499],{"class":82},[69,161563,4276],{"class":86},[69,161565,2332],{"class":90},[69,161567,161568],{"class":1022},"次机会\"",[69,161570,1404],{"class":86},[69,161572,161573,161575],{"class":71,"line":497},[69,161574,2946],{"class":82},[69,161576,4983],{"class":86},[69,161578,161579,161581,161583,161586],{"class":71,"line":502},[69,161580,32535],{"class":90},[69,161582,1398],{"class":86},[69,161584,161585],{"class":1022},"\"账号已锁定\"",[69,161587,1404],{"class":86},[14,161589,161591],{"id":161590},"_413-小案例菜单程序","4.13 小案例：菜单程序",[59,161593,161595],{"className":31614,"code":161594,"language":31616,"meta":64,"style":64},"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",[66,161596,161597,161605,161616,161627,161638,161649,161660,161664,161679,161683,161695,161706,161718,161729,161741,161752,161764,161774,161778,161784],{"__ignoreMap":64},[69,161598,161599,161601,161603],{"class":71,"line":72},[69,161600,109884],{"class":82},[69,161602,96513],{"class":90},[69,161604,4983],{"class":86},[69,161606,161607,161609,161611,161614],{"class":71,"line":79},[69,161608,32535],{"class":90},[69,161610,1398],{"class":86},[69,161612,161613],{"class":1022},"\"====== 菜单 ======\"",[69,161615,1404],{"class":86},[69,161617,161618,161620,161622,161625],{"class":71,"line":106},[69,161619,32535],{"class":90},[69,161621,1398],{"class":86},[69,161623,161624],{"class":1022},"\"1. 查询余额\"",[69,161626,1404],{"class":86},[69,161628,161629,161631,161633,161636],{"class":71,"line":116},[69,161630,32535],{"class":90},[69,161632,1398],{"class":86},[69,161634,161635],{"class":1022},"\"2. 存款\"",[69,161637,1404],{"class":86},[69,161639,161640,161642,161644,161647],{"class":71,"line":133},[69,161641,32535],{"class":90},[69,161643,1398],{"class":86},[69,161645,161646],{"class":1022},"\"3. 取款\"",[69,161648,1404],{"class":86},[69,161650,161651,161653,161655,161658],{"class":71,"line":139},[69,161652,32535],{"class":90},[69,161654,1398],{"class":86},[69,161656,161657],{"class":1022},"\"0. 退出\"",[69,161659,1404],{"class":86},[69,161661,161662],{"class":71,"line":401},[69,161663,3644],{"emptyLinePlaceholder":1325},[69,161665,161666,161669,161671,161673,161675,161677],{"class":71,"line":470},[69,161667,161668],{"class":86},"    choice ",[69,161670,1019],{"class":82},[69,161672,61831],{"class":90},[69,161674,1398],{"class":86},[69,161676,154049],{"class":1022},[69,161678,1404],{"class":86},[69,161680,161681],{"class":71,"line":475},[69,161682,3644],{"emptyLinePlaceholder":1325},[69,161684,161685,161687,161689,161691,161693],{"class":71,"line":482},[69,161686,4345],{"class":82},[69,161688,154062],{"class":86},[69,161690,4193],{"class":82},[69,161692,154067],{"class":1022},[69,161694,4983],{"class":86},[69,161696,161697,161699,161701,161704],{"class":71,"line":497},[69,161698,33687],{"class":90},[69,161700,1398],{"class":86},[69,161702,161703],{"class":1022},"\"余额为1000元\"",[69,161705,1404],{"class":86},[69,161707,161708,161710,161712,161714,161716],{"class":71,"line":502},[69,161709,40529],{"class":82},[69,161711,154062],{"class":86},[69,161713,4193],{"class":82},[69,161715,154086],{"class":1022},[69,161717,4983],{"class":86},[69,161719,161720,161722,161724,161727],{"class":71,"line":509},[69,161721,33687],{"class":90},[69,161723,1398],{"class":86},[69,161725,161726],{"class":1022},"\"存款功能\"",[69,161728,1404],{"class":86},[69,161730,161731,161733,161735,161737,161739],{"class":71,"line":524},[69,161732,40529],{"class":82},[69,161734,154062],{"class":86},[69,161736,4193],{"class":82},[69,161738,154104],{"class":1022},[69,161740,4983],{"class":86},[69,161742,161743,161745,161747,161750],{"class":71,"line":2888},[69,161744,33687],{"class":90},[69,161746,1398],{"class":86},[69,161748,161749],{"class":1022},"\"取款功能\"",[69,161751,1404],{"class":86},[69,161753,161754,161756,161758,161760,161762],{"class":71,"line":2893},[69,161755,40529],{"class":82},[69,161757,154062],{"class":86},[69,161759,4193],{"class":82},[69,161761,154158],{"class":1022},[69,161763,4983],{"class":86},[69,161765,161766,161768,161770,161772],{"class":71,"line":2899},[69,161767,33687],{"class":90},[69,161769,1398],{"class":86},[69,161771,154169],{"class":1022},[69,161773,1404],{"class":86},[69,161775,161776],{"class":71,"line":2919},[69,161777,32863],{"class":82},[69,161779,161780,161782],{"class":71,"line":2924},[69,161781,158998],{"class":82},[69,161783,4983],{"class":86},[69,161785,161786,161788,161790,161792],{"class":71,"line":2938},[69,161787,33687],{"class":90},[69,161789,1398],{"class":86},[69,161791,154190],{"class":1022},[69,161793,1404],{"class":86},[29,161795,161796,161797,161799,161800,29621],{},"菜单类程序通常使用 ",[66,161798,160498],{},"，用户选择退出时 ",[66,161801,3297],{},[14,161803,161805],{"id":161804},"_414-易错点","4.14 易错点",[37,161807,161808,161813,161819,161827,161833],{},[40,161809,161810,161812],{},[66,161811,109884],{}," 循环必须更新控制变量。",[40,161814,161815,161818],{},[66,161816,161817],{},"range(1, 10)"," 不包含 10。",[40,161820,161821,161823,161824,161826],{},[66,161822,3297],{}," 结束整个循环，",[66,161825,155648],{}," 只跳过本轮。",[40,161828,161829,161830,161832],{},"嵌套循环中，",[66,161831,3297],{}," 只跳出当前所在的一层循环。",[40,161834,161835],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161837,161839],{"id":161838},"_415-本章练习","4.15 本章练习",[37,161841,161842,161845,161848,161851,161854],{},[40,161843,161844],{},"输出 1 到 100。",[40,161846,161847],{},"计算 1 到 100 的偶数和。",[40,161849,161850],{},"输出 100 以内能被 3 和 5 同时整除的数。",[40,161852,161853],{},"编写猜数字游戏，限制最多猜 7 次。",[40,161855,161856],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1297,161858,161859],{},"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":64,"searchDepth":79,"depth":79,"links":161861},[161862,161863,161864,161865,161866,161870,161871,161872,161873,161874,161875,161876,161877,161878,161879],{"id":160118,"depth":79,"text":160119},{"id":160148,"depth":79,"text":160149},{"id":160237,"depth":79,"text":160238},{"id":160331,"depth":79,"text":160332},{"id":160505,"depth":79,"text":160506,"children":161867},[161868,161869],{"id":160509,"depth":106,"text":160510},{"id":160573,"depth":106,"text":160574},{"id":160637,"depth":79,"text":160638},{"id":160732,"depth":79,"text":160733},{"id":160841,"depth":79,"text":160842},{"id":161037,"depth":79,"text":161038},{"id":161122,"depth":79,"text":161123},{"id":161261,"depth":79,"text":161262},{"id":161441,"depth":79,"text":161442},{"id":161590,"depth":79,"text":161591},{"id":161804,"depth":79,"text":161805},{"id":161838,"depth":79,"text":161839},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160110,"description":1322},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161886,"title":161887,"body":161888,"description":1322,"extension":1323,"meta":163893,"navigation":1325,"path":163894,"seo":163895,"stem":163896,"__hash__":163897},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161889,"toc":163873},[161890,161893,161897,161900,161903,161917,161920,161934,161938,161940,161959,161961,162008,162010,162024,162028,162102,162105,162109,162112,162171,162179,162182,162235,162238,162242,162247,162302,162310,162360,162364,162369,162377,162476,162482,162486,162491,162494,162505,162546,162559,162563,162566,162602,162605,162618,162621,162681,162685,162689,162692,162743,162747,162750,162797,162803,162869,162872,162876,162879,162995,162998,163002,163005,163111,163115,163118,163156,163159,163201,163204,163264,163267,163271,163735,163738,163742,163769,163775,163836,163840,163870],[10,161891,161887],{"id":161892},"_5-函数基础",[14,161894,161896],{"id":161895},"_51-为什么需要函数","5.1 为什么需要函数",[29,161898,161899],{},"函数用于封装一段可以重复使用的代码。",[29,161901,161902],{},"不使用函数的问题：",[37,161904,161905,161908,161911,161914],{},[40,161906,161907],{},"重复代码多。",[40,161909,161910],{},"修改逻辑时容易漏改。",[40,161912,161913],{},"主流程不清晰。",[40,161915,161916],{},"程序越写越长，难以维护。",[29,161918,161919],{},"使用函数后的好处：",[37,161921,161922,161925,161928,161931],{},[40,161923,161924],{},"提高复用性。",[40,161926,161927],{},"提高可读性。",[40,161929,161930],{},"便于调试。",[40,161932,161933],{},"便于分工。",[14,161935,161937],{"id":161936},"_52-函数定义","5.2 函数定义",[29,161939,6425],{},[59,161941,161943],{"className":31614,"code":161942,"language":31616,"meta":64,"style":64},"def 函数名():\n    函数体\n",[66,161944,161945,161954],{"__ignoreMap":64},[69,161946,161947,161949,161952],{"class":71,"line":72},[69,161948,33183],{"class":82},[69,161950,161951],{"class":109}," 函数名",[69,161953,33189],{"class":86},[69,161955,161956],{"class":71,"line":79},[69,161957,161958],{"class":86},"    函数体\n",[29,161960,16375],{},[59,161962,161964],{"className":31614,"code":161963,"language":31616,"meta":64,"style":64},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[66,161965,161966,161975,161985,161995,161999,162003],{"__ignoreMap":64},[69,161967,161968,161970,161973],{"class":71,"line":72},[69,161969,33183],{"class":82},[69,161971,161972],{"class":109}," say_hello",[69,161974,33189],{"class":86},[69,161976,161977,161979,161981,161983],{"class":71,"line":79},[69,161978,32535],{"class":90},[69,161980,1398],{"class":86},[69,161982,7086],{"class":1022},[69,161984,1404],{"class":86},[69,161986,161987,161989,161991,161993],{"class":71,"line":106},[69,161988,32535],{"class":90},[69,161990,1398],{"class":86},[69,161992,147615],{"class":1022},[69,161994,1404],{"class":86},[69,161996,161997],{"class":71,"line":116},[69,161998,3644],{"emptyLinePlaceholder":1325},[69,162000,162001],{"class":71,"line":133},[69,162002,3644],{"emptyLinePlaceholder":1325},[69,162004,162005],{"class":71,"line":139},[69,162006,162007],{"class":86},"say_hello()\n",[29,162009,10267],{},[37,162011,162012,162015,162018,162021],{},[40,162013,162014],{},"函数必须先定义，再调用。",[40,162016,162017],{},"函数名遵循变量命名规则。",[40,162019,162020],{},"函数体需要缩进。",[40,162022,162023],{},"函数不调用就不会执行。",[14,162025,162027],{"id":162026},"_53-函数调用","5.3 函数调用",[59,162029,162031],{"className":31614,"code":162030,"language":31616,"meta":64,"style":64},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[66,162032,162033,162042,162053,162064,162075,162085,162089,162093,162098],{"__ignoreMap":64},[69,162034,162035,162037,162040],{"class":71,"line":72},[69,162036,33183],{"class":82},[69,162038,162039],{"class":109}," print_menu",[69,162041,33189],{"class":86},[69,162043,162044,162046,162048,162051],{"class":71,"line":79},[69,162045,32535],{"class":90},[69,162047,1398],{"class":86},[69,162049,162050],{"class":1022},"\"1. 查询\"",[69,162052,1404],{"class":86},[69,162054,162055,162057,162059,162062],{"class":71,"line":106},[69,162056,32535],{"class":90},[69,162058,1398],{"class":86},[69,162060,162061],{"class":1022},"\"2. 添加\"",[69,162063,1404],{"class":86},[69,162065,162066,162068,162070,162073],{"class":71,"line":116},[69,162067,32535],{"class":90},[69,162069,1398],{"class":86},[69,162071,162072],{"class":1022},"\"3. 删除\"",[69,162074,1404],{"class":86},[69,162076,162077,162079,162081,162083],{"class":71,"line":133},[69,162078,32535],{"class":90},[69,162080,1398],{"class":86},[69,162082,161657],{"class":1022},[69,162084,1404],{"class":86},[69,162086,162087],{"class":71,"line":139},[69,162088,3644],{"emptyLinePlaceholder":1325},[69,162090,162091],{"class":71,"line":401},[69,162092,3644],{"emptyLinePlaceholder":1325},[69,162094,162095],{"class":71,"line":470},[69,162096,162097],{"class":86},"print_menu()\n",[69,162099,162100],{"class":71,"line":475},[69,162101,162097],{"class":86},[29,162103,162104],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162106,162108],{"id":162107},"_54-参数","5.4 参数",[29,162110,162111],{},"参数用于向函数传递数据。",[59,162113,162115],{"className":31614,"code":162114,"language":31616,"meta":64,"style":64},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[66,162116,162117,162126,162146,162150,162154,162163],{"__ignoreMap":64},[69,162118,162119,162121,162123],{"class":71,"line":72},[69,162120,33183],{"class":82},[69,162122,161972],{"class":109},[69,162124,162125],{"class":86},"(name):\n",[69,162127,162128,162130,162132,162134,162136,162138,162140,162142,162144],{"class":71,"line":79},[69,162129,32535],{"class":90},[69,162131,1398],{"class":86},[69,162133,1447],{"class":82},[69,162135,158030],{"class":1022},[69,162137,2283],{"class":90},[69,162139,81031],{"class":86},[69,162141,2332],{"class":90},[69,162143,1642],{"class":1022},[69,162145,1404],{"class":86},[69,162147,162148],{"class":71,"line":106},[69,162149,3644],{"emptyLinePlaceholder":1325},[69,162151,162152],{"class":71,"line":116},[69,162153,3644],{"emptyLinePlaceholder":1325},[69,162155,162156,162159,162161],{"class":71,"line":133},[69,162157,162158],{"class":86},"say_hello(",[69,162160,150864],{"class":1022},[69,162162,1404],{"class":86},[69,162164,162165,162167,162169],{"class":71,"line":139},[69,162166,162158],{"class":86},[69,162168,151912],{"class":1022},[69,162170,1404],{"class":86},[29,162172,162173,162175,162176,162178],{},[66,162174,81031],{}," 是形参，",[66,162177,150864],{}," 是实参。",[29,162180,162181],{},"多个参数：",[59,162183,162185],{"className":31614,"code":162184,"language":31616,"meta":64,"style":64},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[66,162186,162187,162195,162208,162214,162218,162222],{"__ignoreMap":64},[69,162188,162189,162191,162193],{"class":71,"line":72},[69,162190,33183],{"class":82},[69,162192,6451],{"class":109},[69,162194,152069],{"class":86},[69,162196,162197,162200,162202,162204,162206],{"class":71,"line":79},[69,162198,162199],{"class":86},"    result ",[69,162201,1019],{"class":82},[69,162203,12111],{"class":86},[69,162205,1869],{"class":82},[69,162207,152080],{"class":86},[69,162209,162210,162212],{"class":71,"line":106},[69,162211,32535],{"class":90},[69,162213,77806],{"class":86},[69,162215,162216],{"class":71,"line":116},[69,162217,3644],{"emptyLinePlaceholder":1325},[69,162219,162220],{"class":71,"line":133},[69,162221,3644],{"emptyLinePlaceholder":1325},[69,162223,162224,162227,162229,162231,162233],{"class":71,"line":139},[69,162225,162226],{"class":86},"add(",[69,162228,390],{"class":90},[69,162230,13677],{"class":86},[69,162232,2087],{"class":90},[69,162234,1404],{"class":86},[29,162236,162237],{},"调用时参数数量必须匹配。",[14,162239,162241],{"id":162240},"_55-返回值","5.5 返回值",[29,162243,162244,162246],{},[66,162245,18285],{}," 用于把函数内部的结果返回给调用者。",[59,162248,162250],{"className":31614,"code":162249,"language":31616,"meta":64,"style":64},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[66,162251,162252,162260,162270,162274,162278,162296],{"__ignoreMap":64},[69,162253,162254,162256,162258],{"class":71,"line":72},[69,162255,33183],{"class":82},[69,162257,6451],{"class":109},[69,162259,152069],{"class":86},[69,162261,162262,162264,162266,162268],{"class":71,"line":79},[69,162263,5334],{"class":82},[69,162265,12111],{"class":86},[69,162267,1869],{"class":82},[69,162269,152080],{"class":86},[69,162271,162272],{"class":71,"line":106},[69,162273,3644],{"emptyLinePlaceholder":1325},[69,162275,162276],{"class":71,"line":116},[69,162277,3644],{"emptyLinePlaceholder":1325},[69,162279,162280,162283,162285,162288,162290,162292,162294],{"class":71,"line":133},[69,162281,162282],{"class":86},"result ",[69,162284,1019],{"class":82},[69,162286,162287],{"class":86}," add(",[69,162289,390],{"class":90},[69,162291,13677],{"class":86},[69,162293,2087],{"class":90},[69,162295,1404],{"class":86},[69,162297,162298,162300],{"class":71,"line":139},[69,162299,31651],{"class":90},[69,162301,77806],{"class":86},[29,162303,162304,162305,162307,162308,29621],{},"如果函数没有写 ",[66,162306,18285],{},"，默认返回 ",[66,162309,96907],{},[59,162311,162313],{"className":31614,"code":162312,"language":31616,"meta":64,"style":64},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[66,162314,162315,162323,162333,162337,162341,162350],{"__ignoreMap":64},[69,162316,162317,162319,162321],{"class":71,"line":72},[69,162318,33183],{"class":82},[69,162320,161972],{"class":109},[69,162322,33189],{"class":86},[69,162324,162325,162327,162329,162331],{"class":71,"line":79},[69,162326,32535],{"class":90},[69,162328,1398],{"class":86},[69,162330,7086],{"class":1022},[69,162332,1404],{"class":86},[69,162334,162335],{"class":71,"line":106},[69,162336,3644],{"emptyLinePlaceholder":1325},[69,162338,162339],{"class":71,"line":116},[69,162340,3644],{"emptyLinePlaceholder":1325},[69,162342,162343,162345,162347],{"class":71,"line":133},[69,162344,162282],{"class":86},[69,162346,1019],{"class":82},[69,162348,162349],{"class":86}," say_hello()\n",[69,162351,162352,162354,162357],{"class":71,"line":139},[69,162353,31651],{"class":90},[69,162355,162356],{"class":86},"(result)  ",[69,162358,162359],{"class":75},"# None\n",[14,162361,162363],{"id":162362},"_56-return的作用","5.6 return的作用",[29,162365,162366,162368],{},[66,162367,18285],{}," 有两个作用：",[37,162370,162371,162374],{},[40,162372,162373],{},"返回结果。",[40,162375,162376],{},"结束函数。",[59,162378,162380],{"className":31614,"code":162379,"language":31616,"meta":64,"style":64},"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",[66,162381,162382,162392,162404,162411,162415,162427,162434,162438,162445,162449,162453,162464],{"__ignoreMap":64},[69,162383,162384,162386,162389],{"class":71,"line":72},[69,162385,33183],{"class":82},[69,162387,162388],{"class":109}," check_age",[69,162390,162391],{"class":86},"(age):\n",[69,162393,162394,162396,162398,162400,162402],{"class":71,"line":79},[69,162395,4345],{"class":82},[69,162397,16946],{"class":86},[69,162399,1011],{"class":82},[69,162401,5337],{"class":90},[69,162403,4983],{"class":86},[69,162405,162406,162408],{"class":71,"line":106},[69,162407,15992],{"class":82},[69,162409,162410],{"class":1022}," \"年龄不合法\"\n",[69,162412,162413],{"class":71,"line":116},[69,162414,3644],{"emptyLinePlaceholder":1325},[69,162416,162417,162419,162421,162423,162425],{"class":71,"line":133},[69,162418,4345],{"class":82},[69,162420,16946],{"class":86},[69,162422,2955],{"class":82},[69,162424,157261],{"class":90},[69,162426,4983],{"class":86},[69,162428,162429,162431],{"class":71,"line":139},[69,162430,15992],{"class":82},[69,162432,162433],{"class":1022}," \"成年人\"\n",[69,162435,162436],{"class":71,"line":401},[69,162437,3644],{"emptyLinePlaceholder":1325},[69,162439,162440,162442],{"class":71,"line":470},[69,162441,5334],{"class":82},[69,162443,162444],{"class":1022}," \"未成年人\"\n",[69,162446,162447],{"class":71,"line":475},[69,162448,3644],{"emptyLinePlaceholder":1325},[69,162450,162451],{"class":71,"line":482},[69,162452,3644],{"emptyLinePlaceholder":1325},[69,162454,162455,162457,162460,162462],{"class":71,"line":497},[69,162456,31651],{"class":90},[69,162458,162459],{"class":86},"(check_age(",[69,162461,2087],{"class":90},[69,162463,31733],{"class":86},[69,162465,162466,162468,162470,162472,162474],{"class":71,"line":502},[69,162467,31651],{"class":90},[69,162469,162459],{"class":86},[69,162471,1920],{"class":82},[69,162473,1609],{"class":90},[69,162475,31733],{"class":86},[29,162477,162478,162479,162481],{},"函数执行到 ",[66,162480,18285],{}," 后，后面的代码不会继续执行。",[14,162483,162485],{"id":162484},"_57-none","5.7 None",[29,162487,162488,162490],{},[66,162489,96907],{}," 表示空值或没有结果。",[29,162492,162493],{},"常见使用场景：",[37,162495,162496,162499,162502],{},[40,162497,162498],{},"函数没有返回值。",[40,162500,162501],{},"变量暂时没有具体值。",[40,162503,162504],{},"表示查询不到结果。",[59,162506,162508],{"className":31614,"code":162507,"language":31616,"meta":64,"style":64},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[66,162509,162510,162518,162522,162535],{"__ignoreMap":64},[69,162511,162512,162514,162516],{"class":71,"line":72},[69,162513,162282],{"class":86},[69,162515,1019],{"class":82},[69,162517,153148],{"class":90},[69,162519,162520],{"class":71,"line":79},[69,162521,3644],{"emptyLinePlaceholder":1325},[69,162523,162524,162526,162529,162531,162533],{"class":71,"line":106},[69,162525,2782],{"class":82},[69,162527,162528],{"class":86}," result ",[69,162530,40163],{"class":82},[69,162532,40169],{"class":90},[69,162534,4983],{"class":86},[69,162536,162537,162539,162541,162544],{"class":71,"line":116},[69,162538,32535],{"class":90},[69,162540,1398],{"class":86},[69,162542,162543],{"class":1022},"\"没有数据\"",[69,162545,1404],{"class":86},[29,162547,162548,162549,162551,162552,162555,162556,29621],{},"判断 ",[66,162550,96907],{}," 推荐使用 ",[66,162553,162554],{},"is None","，不要写成 ",[66,162557,162558],{},"== None",[14,162560,162562],{"id":162561},"_58-函数文档字符串","5.8 函数文档字符串",[29,162564,162565],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[59,162567,162569],{"className":31614,"code":162568,"language":31616,"meta":64,"style":64},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[66,162570,162571,162581,162586],{"__ignoreMap":64},[69,162572,162573,162575,162578],{"class":71,"line":72},[69,162574,33183],{"class":82},[69,162576,162577],{"class":109}," calculate_bmi",[69,162579,162580],{"class":86},"(weight, height):\n",[69,162582,162583],{"class":71,"line":79},[69,162584,162585],{"class":1022},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[69,162587,162588,162590,162593,162595,162598,162600],{"class":71,"line":106},[69,162589,5334],{"class":82},[69,162591,162592],{"class":86}," weight ",[69,162594,1972],{"class":82},[69,162596,162597],{"class":86}," height ",[69,162599,11903],{"class":82},[69,162601,48959],{"class":90},[29,162603,162604],{},"查看说明：",[59,162606,162608],{"className":31614,"code":162607,"language":31616,"meta":64,"style":64},"help(calculate_bmi)\n",[66,162609,162610],{"__ignoreMap":64},[69,162611,162612,162615],{"class":71,"line":72},[69,162613,162614],{"class":90},"help",[69,162616,162617],{"class":86},"(calculate_bmi)\n",[29,162619,162620],{},"较完整的写法：",[59,162622,162624],{"className":31614,"code":162623,"language":31616,"meta":64,"style":64},"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",[66,162625,162626,162634,162639,162644,162648,162653,162658,162663,162667],{"__ignoreMap":64},[69,162627,162628,162630,162632],{"class":71,"line":72},[69,162629,33183],{"class":82},[69,162631,162577],{"class":109},[69,162633,162580],{"class":86},[69,162635,162636],{"class":71,"line":79},[69,162637,162638],{"class":1022},"    \"\"\"\n",[69,162640,162641],{"class":71,"line":106},[69,162642,162643],{"class":1022},"    计算BMI。\n",[69,162645,162646],{"class":71,"line":116},[69,162647,3644],{"emptyLinePlaceholder":1325},[69,162649,162650],{"class":71,"line":133},[69,162651,162652],{"class":1022},"    :param weight: 体重，单位kg\n",[69,162654,162655],{"class":71,"line":139},[69,162656,162657],{"class":1022},"    :param height: 身高，单位m\n",[69,162659,162660],{"class":71,"line":401},[69,162661,162662],{"class":1022},"    :return: BMI数值\n",[69,162664,162665],{"class":71,"line":470},[69,162666,162638],{"class":1022},[69,162668,162669,162671,162673,162675,162677,162679],{"class":71,"line":475},[69,162670,5334],{"class":82},[69,162672,162592],{"class":86},[69,162674,1972],{"class":82},[69,162676,162597],{"class":86},[69,162678,11903],{"class":82},[69,162680,48959],{"class":90},[14,162682,162684],{"id":162683},"_59-变量作用域","5.9 变量作用域",[19,162686,162688],{"id":162687},"_591-局部变量","5.9.1 局部变量",[29,162690,162691],{},"在函数内部定义的变量，只能在函数内部使用。",[59,162693,162695],{"className":31614,"code":162694,"language":31616,"meta":64,"style":64},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[66,162696,162697,162706,162714,162720,162724,162728,162733],{"__ignoreMap":64},[69,162698,162699,162701,162704],{"class":71,"line":72},[69,162700,33183],{"class":82},[69,162702,162703],{"class":109}," test",[69,162705,33189],{"class":86},[69,162707,162708,162710,162712],{"class":71,"line":79},[69,162709,46829],{"class":86},[69,162711,1019],{"class":82},[69,162713,59654],{"class":90},[69,162715,162716,162718],{"class":71,"line":106},[69,162717,32535],{"class":90},[69,162719,1411],{"class":86},[69,162721,162722],{"class":71,"line":116},[69,162723,3644],{"emptyLinePlaceholder":1325},[69,162725,162726],{"class":71,"line":133},[69,162727,3644],{"emptyLinePlaceholder":1325},[69,162729,162730],{"class":71,"line":139},[69,162731,162732],{"class":86},"test()\n",[69,162734,162735,162737,162740],{"class":71,"line":401},[69,162736,31651],{"class":90},[69,162738,162739],{"class":86},"(num)  ",[69,162741,162742],{"class":75},"# 报错\n",[19,162744,162746],{"id":162745},"_592-全局变量","5.9.2 全局变量",[29,162748,162749],{},"在函数外部定义的变量，可以在函数内部读取。",[59,162751,162753],{"className":31614,"code":162752,"language":31616,"meta":64,"style":64},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[66,162754,162755,162763,162767,162771,162779,162785,162789,162793],{"__ignoreMap":64},[69,162756,162757,162759,162761],{"class":71,"line":72},[69,162758,147512],{"class":86},[69,162760,1019],{"class":82},[69,162762,150329],{"class":1022},[69,162764,162765],{"class":71,"line":79},[69,162766,3644],{"emptyLinePlaceholder":1325},[69,162768,162769],{"class":71,"line":106},[69,162770,3644],{"emptyLinePlaceholder":1325},[69,162772,162773,162775,162777],{"class":71,"line":116},[69,162774,33183],{"class":82},[69,162776,161972],{"class":109},[69,162778,33189],{"class":86},[69,162780,162781,162783],{"class":71,"line":133},[69,162782,32535],{"class":90},[69,162784,151636],{"class":86},[69,162786,162787],{"class":71,"line":139},[69,162788,3644],{"emptyLinePlaceholder":1325},[69,162790,162791],{"class":71,"line":401},[69,162792,3644],{"emptyLinePlaceholder":1325},[69,162794,162795],{"class":71,"line":470},[69,162796,162007],{"class":86},[29,162798,162799,162800,29621],{},"如果要在函数内部修改全局变量，需要 ",[66,162801,162802],{},"global",[59,162804,162806],{"className":31614,"code":162805,"language":31616,"meta":64,"style":64},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[66,162807,162808,162816,162820,162824,162833,162841,162849,162853,162857,162862],{"__ignoreMap":64},[69,162809,162810,162812,162814],{"class":71,"line":72},[69,162811,147667],{"class":86},[69,162813,1019],{"class":82},[69,162815,48569],{"class":90},[69,162817,162818],{"class":71,"line":79},[69,162819,3644],{"emptyLinePlaceholder":1325},[69,162821,162822],{"class":71,"line":106},[69,162823,3644],{"emptyLinePlaceholder":1325},[69,162825,162826,162828,162831],{"class":71,"line":116},[69,162827,33183],{"class":82},[69,162829,162830],{"class":109}," add_count",[69,162832,33189],{"class":86},[69,162834,162835,162838],{"class":71,"line":133},[69,162836,162837],{"class":82},"    global",[69,162839,162840],{"class":86}," count\n",[69,162842,162843,162845,162847],{"class":71,"line":139},[69,162844,160409],{"class":86},[69,162846,10719],{"class":82},[69,162848,56926],{"class":90},[69,162850,162851],{"class":71,"line":401},[69,162852,3644],{"emptyLinePlaceholder":1325},[69,162854,162855],{"class":71,"line":470},[69,162856,3644],{"emptyLinePlaceholder":1325},[69,162858,162859],{"class":71,"line":475},[69,162860,162861],{"class":86},"add_count()\n",[69,162863,162864,162866],{"class":71,"line":482},[69,162865,31651],{"class":90},[69,162867,162868],{"class":86},"(count)\n",[29,162870,162871],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162873,162875],{"id":162874},"_510-函数嵌套调用","5.10 函数嵌套调用",[29,162877,162878],{},"一个函数中可以调用另一个函数。",[59,162880,162882],{"className":31614,"code":162881,"language":31616,"meta":64,"style":64},"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",[66,162883,162884,162893,162907,162911,162915,162924,162929,162949,162970,162974,162978,162982],{"__ignoreMap":64},[69,162885,162886,162888,162891],{"class":71,"line":72},[69,162887,33183],{"class":82},[69,162889,162890],{"class":109}," print_line",[69,162892,33189],{"class":86},[69,162894,162895,162897,162899,162901,162903,162905],{"class":71,"line":79},[69,162896,32535],{"class":90},[69,162898,1398],{"class":86},[69,162900,33719],{"class":1022},[69,162902,7760],{"class":82},[69,162904,79886],{"class":90},[69,162906,1404],{"class":86},[69,162908,162909],{"class":71,"line":106},[69,162910,3644],{"emptyLinePlaceholder":1325},[69,162912,162913],{"class":71,"line":116},[69,162914,3644],{"emptyLinePlaceholder":1325},[69,162916,162917,162919,162922],{"class":71,"line":133},[69,162918,33183],{"class":82},[69,162920,162921],{"class":109}," print_info",[69,162923,150351],{"class":86},[69,162925,162926],{"class":71,"line":139},[69,162927,162928],{"class":86},"    print_line()\n",[69,162930,162931,162933,162935,162937,162939,162941,162943,162945,162947],{"class":71,"line":401},[69,162932,32535],{"class":90},[69,162934,1398],{"class":86},[69,162936,1447],{"class":82},[69,162938,157658],{"class":1022},[69,162940,2283],{"class":90},[69,162942,81031],{"class":86},[69,162944,2332],{"class":90},[69,162946,1642],{"class":1022},[69,162948,1404],{"class":86},[69,162950,162951,162953,162955,162957,162960,162962,162964,162966,162968],{"class":71,"line":470},[69,162952,32535],{"class":90},[69,162954,1398],{"class":86},[69,162956,1447],{"class":82},[69,162958,162959],{"class":1022},"\"年龄:",[69,162961,2283],{"class":90},[69,162963,71446],{"class":86},[69,162965,2332],{"class":90},[69,162967,1642],{"class":1022},[69,162969,1404],{"class":86},[69,162971,162972],{"class":71,"line":475},[69,162973,162928],{"class":86},[69,162975,162976],{"class":71,"line":482},[69,162977,3644],{"emptyLinePlaceholder":1325},[69,162979,162980],{"class":71,"line":497},[69,162981,3644],{"emptyLinePlaceholder":1325},[69,162983,162984,162987,162989,162991,162993],{"class":71,"line":502},[69,162985,162986],{"class":86},"print_info(",[69,162988,150864],{"class":1022},[69,162990,13677],{"class":86},[69,162992,2037],{"class":90},[69,162994,1404],{"class":86},[29,162996,162997],{},"这种方式可以把小功能组合成大功能。",[14,162999,163001],{"id":163000},"_511-参数检查","5.11 参数检查",[29,163003,163004],{},"函数内部可以检查参数是否合法。",[59,163006,163008],{"className":31614,"code":163007,"language":31616,"meta":64,"style":64},"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",[66,163009,163010,163019,163031,163037,163047,163051,163055,163072,163076,163088,163099,163105],{"__ignoreMap":64},[69,163011,163012,163014,163017],{"class":71,"line":72},[69,163013,33183],{"class":82},[69,163015,163016],{"class":109}," divide",[69,163018,152069],{"class":86},[69,163020,163021,163023,163025,163027,163029],{"class":71,"line":79},[69,163022,4345],{"class":82},[69,163024,12124],{"class":86},[69,163026,4193],{"class":82},[69,163028,5337],{"class":90},[69,163030,4983],{"class":86},[69,163032,163033,163035],{"class":71,"line":106},[69,163034,15992],{"class":82},[69,163036,153148],{"class":90},[69,163038,163039,163041,163043,163045],{"class":71,"line":116},[69,163040,5334],{"class":82},[69,163042,12111],{"class":86},[69,163044,1972],{"class":82},[69,163046,152080],{"class":86},[69,163048,163049],{"class":71,"line":133},[69,163050,3644],{"emptyLinePlaceholder":1325},[69,163052,163053],{"class":71,"line":139},[69,163054,3644],{"emptyLinePlaceholder":1325},[69,163056,163057,163059,163061,163064,163066,163068,163070],{"class":71,"line":401},[69,163058,162282],{"class":86},[69,163060,1019],{"class":82},[69,163062,163063],{"class":86}," divide(",[69,163065,390],{"class":90},[69,163067,13677],{"class":86},[69,163069,1583],{"class":90},[69,163071,1404],{"class":86},[69,163073,163074],{"class":71,"line":470},[69,163075,3644],{"emptyLinePlaceholder":1325},[69,163077,163078,163080,163082,163084,163086],{"class":71,"line":475},[69,163079,2782],{"class":82},[69,163081,162528],{"class":86},[69,163083,40163],{"class":82},[69,163085,40169],{"class":90},[69,163087,4983],{"class":86},[69,163089,163090,163092,163094,163097],{"class":71,"line":482},[69,163091,32535],{"class":90},[69,163093,1398],{"class":86},[69,163095,163096],{"class":1022},"\"除数不能为0\"",[69,163098,1404],{"class":86},[69,163100,163101,163103],{"class":71,"line":497},[69,163102,2946],{"class":82},[69,163104,4983],{"class":86},[69,163106,163107,163109],{"class":71,"line":502},[69,163108,32535],{"class":90},[69,163110,77806],{"class":86},[14,163112,163114],{"id":163113},"_512-类型提示","5.12 类型提示",[29,163116,163117],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[59,163119,163121],{"className":31614,"code":163120,"language":31616,"meta":64,"style":64},"def add(a: int, b: int) -> int:\n    return a + b\n",[66,163122,163123,163146],{"__ignoreMap":64},[69,163124,163125,163127,163129,163132,163134,163137,163139,163142,163144],{"class":71,"line":72},[69,163126,33183],{"class":82},[69,163128,6451],{"class":109},[69,163130,163131],{"class":86},"(a: ",[69,163133,1401],{"class":90},[69,163135,163136],{"class":86},", b: ",[69,163138,1401],{"class":90},[69,163140,163141],{"class":86},") -> ",[69,163143,1401],{"class":90},[69,163145,4983],{"class":86},[69,163147,163148,163150,163152,163154],{"class":71,"line":79},[69,163149,5334],{"class":82},[69,163151,12111],{"class":86},[69,163153,1869],{"class":82},[69,163155,152080],{"class":86},[29,163157,163158],{},"字符串参数：",[59,163160,163162],{"className":31614,"code":163161,"language":31616,"meta":64,"style":64},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[66,163163,163164,163181],{"__ignoreMap":64},[69,163165,163166,163168,163170,163173,163175,163177,163179],{"class":71,"line":72},[69,163167,33183],{"class":82},[69,163169,161972],{"class":109},[69,163171,163172],{"class":86},"(name: ",[69,163174,2554],{"class":90},[69,163176,163141],{"class":86},[69,163178,96907],{"class":90},[69,163180,4983],{"class":86},[69,163182,163183,163185,163187,163189,163191,163193,163195,163197,163199],{"class":71,"line":79},[69,163184,32535],{"class":90},[69,163186,1398],{"class":86},[69,163188,1447],{"class":82},[69,163190,158030],{"class":1022},[69,163192,2283],{"class":90},[69,163194,81031],{"class":86},[69,163196,2332],{"class":90},[69,163198,1642],{"class":1022},[69,163200,1404],{"class":86},[29,163202,163203],{},"列表参数：",[59,163205,163207],{"className":31614,"code":163206,"language":31616,"meta":64,"style":64},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[66,163208,163209,163228,163236,163248,163257],{"__ignoreMap":64},[69,163210,163211,163213,163216,163219,163221,163224,163226],{"class":71,"line":72},[69,163212,33183],{"class":82},[69,163214,163215],{"class":109}," get_total",[69,163217,163218],{"class":86},"(numbers: list[",[69,163220,1401],{"class":90},[69,163222,163223],{"class":86},"]) -> ",[69,163225,1401],{"class":90},[69,163227,4983],{"class":86},[69,163229,163230,163232,163234],{"class":71,"line":79},[69,163231,160283],{"class":86},[69,163233,1019],{"class":82},[69,163235,48569],{"class":90},[69,163237,163238,163240,163243,163245],{"class":71,"line":106},[69,163239,4445],{"class":82},[69,163241,163242],{"class":86}," number ",[69,163244,27280],{"class":82},[69,163246,163247],{"class":86}," numbers:\n",[69,163249,163250,163252,163254],{"class":71,"line":116},[69,163251,160958],{"class":86},[69,163253,10719],{"class":82},[69,163255,163256],{"class":86}," number\n",[69,163258,163259,163261],{"class":71,"line":133},[69,163260,5334],{"class":82},[69,163262,163263],{"class":86}," total\n",[29,163265,163266],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163268,163270],{"id":163269},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[59,163272,163274],{"className":31614,"code":163273,"language":31616,"meta":64,"style":64},"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",[66,163275,163276,163286,163290,163294,163302,163313,163323,163333,163343,163353,163357,163361,163370,163392,163396,163400,163409,163415,163435,163447,163458,163462,163471,163482,163487,163491,163495,163504,163510,163529,163541,163551,163555,163566,163576,163580,163588,163599,163603,163607,163611,163619,163624,163638,163642,163654,163659,163671,163676,163688,163693,163705,163715,163719,163725],{"__ignoreMap":64},[69,163277,163278,163281,163283],{"class":71,"line":72},[69,163279,163280],{"class":86},"balance ",[69,163282,1019],{"class":82},[69,163284,163285],{"class":90}," 1000\n",[69,163287,163288],{"class":71,"line":79},[69,163289,3644],{"emptyLinePlaceholder":1325},[69,163291,163292],{"class":71,"line":106},[69,163293,3644],{"emptyLinePlaceholder":1325},[69,163295,163296,163298,163300],{"class":71,"line":116},[69,163297,33183],{"class":82},[69,163299,153009],{"class":109},[69,163301,33189],{"class":86},[69,163303,163304,163306,163308,163311],{"class":71,"line":133},[69,163305,32535],{"class":90},[69,163307,1398],{"class":86},[69,163309,163310],{"class":1022},"\"====== ATM ======\"",[69,163312,1404],{"class":86},[69,163314,163315,163317,163319,163321],{"class":71,"line":139},[69,163316,32535],{"class":90},[69,163318,1398],{"class":86},[69,163320,161624],{"class":1022},[69,163322,1404],{"class":86},[69,163324,163325,163327,163329,163331],{"class":71,"line":401},[69,163326,32535],{"class":90},[69,163328,1398],{"class":86},[69,163330,161635],{"class":1022},[69,163332,1404],{"class":86},[69,163334,163335,163337,163339,163341],{"class":71,"line":470},[69,163336,32535],{"class":90},[69,163338,1398],{"class":86},[69,163340,161646],{"class":1022},[69,163342,1404],{"class":86},[69,163344,163345,163347,163349,163351],{"class":71,"line":475},[69,163346,32535],{"class":90},[69,163348,1398],{"class":86},[69,163350,161657],{"class":1022},[69,163352,1404],{"class":86},[69,163354,163355],{"class":71,"line":482},[69,163356,3644],{"emptyLinePlaceholder":1325},[69,163358,163359],{"class":71,"line":497},[69,163360,3644],{"emptyLinePlaceholder":1325},[69,163362,163363,163365,163368],{"class":71,"line":502},[69,163364,33183],{"class":82},[69,163366,163367],{"class":109}," show_balance",[69,163369,33189],{"class":86},[69,163371,163372,163374,163376,163378,163381,163383,163386,163388,163390],{"class":71,"line":509},[69,163373,32535],{"class":90},[69,163375,1398],{"class":86},[69,163377,1447],{"class":82},[69,163379,163380],{"class":1022},"\"当前余额:",[69,163382,2283],{"class":90},[69,163384,163385],{"class":86},"balance",[69,163387,2332],{"class":90},[69,163389,157988],{"class":1022},[69,163391,1404],{"class":86},[69,163393,163394],{"class":71,"line":524},[69,163395,3644],{"emptyLinePlaceholder":1325},[69,163397,163398],{"class":71,"line":2888},[69,163399,3644],{"emptyLinePlaceholder":1325},[69,163401,163402,163404,163407],{"class":71,"line":2893},[69,163403,33183],{"class":82},[69,163405,163406],{"class":109}," save_money",[69,163408,33189],{"class":86},[69,163410,163411,163413],{"class":71,"line":2899},[69,163412,162837],{"class":82},[69,163414,151075],{"class":86},[69,163416,163417,163420,163422,163424,163426,163428,163430,163433],{"class":71,"line":2919},[69,163418,163419],{"class":86},"    money ",[69,163421,1019],{"class":82},[69,163423,111018],{"class":90},[69,163425,1398],{"class":86},[69,163427,55048],{"class":90},[69,163429,1398],{"class":86},[69,163431,163432],{"class":1022},"\"请输入存款金额:\"",[69,163434,31733],{"class":86},[69,163436,163437,163439,163441,163443,163445],{"class":71,"line":2924},[69,163438,4345],{"class":82},[69,163440,151118],{"class":86},[69,163442,2838],{"class":82},[69,163444,5337],{"class":90},[69,163446,4983],{"class":86},[69,163448,163449,163451,163453,163456],{"class":71,"line":2938},[69,163450,33687],{"class":90},[69,163452,1398],{"class":86},[69,163454,163455],{"class":1022},"\"金额必须大于0\"",[69,163457,1404],{"class":86},[69,163459,163460],{"class":71,"line":2943},[69,163461,153337],{"class":82},[69,163463,163464,163467,163469],{"class":71,"line":2972},[69,163465,163466],{"class":86},"    balance ",[69,163468,10719],{"class":82},[69,163470,151151],{"class":86},[69,163472,163473,163475,163477,163480],{"class":71,"line":2977},[69,163474,32535],{"class":90},[69,163476,1398],{"class":86},[69,163478,163479],{"class":1022},"\"存款成功\"",[69,163481,1404],{"class":86},[69,163483,163484],{"class":71,"line":2994},[69,163485,163486],{"class":86},"    show_balance()\n",[69,163488,163489],{"class":71,"line":2999},[69,163490,3644],{"emptyLinePlaceholder":1325},[69,163492,163493],{"class":71,"line":3004},[69,163494,3644],{"emptyLinePlaceholder":1325},[69,163496,163497,163499,163502],{"class":71,"line":3009},[69,163498,33183],{"class":82},[69,163500,163501],{"class":109}," withdraw_money",[69,163503,33189],{"class":86},[69,163505,163506,163508],{"class":71,"line":3023},[69,163507,162837],{"class":82},[69,163509,151075],{"class":86},[69,163511,163512,163514,163516,163518,163520,163522,163524,163527],{"class":71,"line":3028},[69,163513,163419],{"class":86},[69,163515,1019],{"class":82},[69,163517,111018],{"class":90},[69,163519,1398],{"class":86},[69,163521,55048],{"class":90},[69,163523,1398],{"class":86},[69,163525,163526],{"class":1022},"\"请输入取款金额:\"",[69,163528,31733],{"class":86},[69,163530,163531,163533,163535,163537,163539],{"class":71,"line":3821},[69,163532,4345],{"class":82},[69,163534,151118],{"class":86},[69,163536,2838],{"class":82},[69,163538,5337],{"class":90},[69,163540,4983],{"class":86},[69,163542,163543,163545,163547,163549],{"class":71,"line":3835},[69,163544,33687],{"class":90},[69,163546,1398],{"class":86},[69,163548,163455],{"class":1022},[69,163550,1404],{"class":86},[69,163552,163553],{"class":71,"line":3843},[69,163554,153337],{"class":82},[69,163556,163557,163559,163561,163563],{"class":71,"line":3848},[69,163558,4345],{"class":82},[69,163560,151118],{"class":86},[69,163562,2346],{"class":82},[69,163564,163565],{"class":86}," balance:\n",[69,163567,163568,163570,163572,163574],{"class":71,"line":3854},[69,163569,33687],{"class":90},[69,163571,1398],{"class":86},[69,163573,151213],{"class":1022},[69,163575,1404],{"class":86},[69,163577,163578],{"class":71,"line":3860},[69,163579,153337],{"class":82},[69,163581,163582,163584,163586],{"class":71,"line":3865},[69,163583,163466],{"class":86},[69,163585,151228],{"class":82},[69,163587,151151],{"class":86},[69,163589,163590,163592,163594,163597],{"class":71,"line":9190},[69,163591,32535],{"class":90},[69,163593,1398],{"class":86},[69,163595,163596],{"class":1022},"\"取款成功\"",[69,163598,1404],{"class":86},[69,163600,163601],{"class":71,"line":9214},[69,163602,163486],{"class":86},[69,163604,163605],{"class":71,"line":9219},[69,163606,3644],{"emptyLinePlaceholder":1325},[69,163608,163609],{"class":71,"line":9225},[69,163610,3644],{"emptyLinePlaceholder":1325},[69,163612,163613,163615,163617],{"class":71,"line":9252},[69,163614,109884],{"class":82},[69,163616,96513],{"class":90},[69,163618,4983],{"class":86},[69,163620,163621],{"class":71,"line":9257},[69,163622,163623],{"class":86},"    show_menu()\n",[69,163625,163626,163628,163630,163632,163634,163636],{"class":71,"line":9263},[69,163627,161668],{"class":86},[69,163629,1019],{"class":82},[69,163631,61831],{"class":90},[69,163633,1398],{"class":86},[69,163635,154049],{"class":1022},[69,163637,1404],{"class":86},[69,163639,163640],{"class":71,"line":9275},[69,163641,3644],{"emptyLinePlaceholder":1325},[69,163643,163644,163646,163648,163650,163652],{"class":71,"line":9287},[69,163645,4345],{"class":82},[69,163647,154062],{"class":86},[69,163649,4193],{"class":82},[69,163651,154067],{"class":1022},[69,163653,4983],{"class":86},[69,163655,163656],{"class":71,"line":9299},[69,163657,163658],{"class":86},"        show_balance()\n",[69,163660,163661,163663,163665,163667,163669],{"class":71,"line":10958},[69,163662,40529],{"class":82},[69,163664,154062],{"class":86},[69,163666,4193],{"class":82},[69,163668,154086],{"class":1022},[69,163670,4983],{"class":86},[69,163672,163673],{"class":71,"line":10983},[69,163674,163675],{"class":86},"        save_money()\n",[69,163677,163678,163680,163682,163684,163686],{"class":71,"line":11006},[69,163679,40529],{"class":82},[69,163681,154062],{"class":86},[69,163683,4193],{"class":82},[69,163685,154104],{"class":1022},[69,163687,4983],{"class":86},[69,163689,163690],{"class":71,"line":11030},[69,163691,163692],{"class":86},"        withdraw_money()\n",[69,163694,163695,163697,163699,163701,163703],{"class":71,"line":11035},[69,163696,40529],{"class":82},[69,163698,154062],{"class":86},[69,163700,4193],{"class":82},[69,163702,154158],{"class":1022},[69,163704,4983],{"class":86},[69,163706,163707,163709,163711,163713],{"class":71,"line":11040},[69,163708,33687],{"class":90},[69,163710,1398],{"class":86},[69,163712,154169],{"class":1022},[69,163714,1404],{"class":86},[69,163716,163717],{"class":71,"line":11045},[69,163718,32863],{"class":82},[69,163720,163721,163723],{"class":71,"line":11054},[69,163722,158998],{"class":82},[69,163724,4983],{"class":86},[69,163726,163727,163729,163731,163733],{"class":71,"line":11059},[69,163728,33687],{"class":90},[69,163730,1398],{"class":86},[69,163732,154190],{"class":1022},[69,163734,1404],{"class":86},[29,163736,163737],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163739,163741],{"id":163740},"_514-易错点","5.14 易错点",[37,163743,163744,163747,163750,163755,163760,163763],{},[40,163745,163746],{},"函数定义后必须调用才会执行。",[40,163748,163749],{},"函数名后面有括号才是调用。",[40,163751,163752,163754],{},[66,163753,18285],{}," 后面的代码不会执行。",[40,163756,163757,163758,29621],{},"没有返回值的函数默认返回 ",[66,163759,96907],{},[40,163761,163762],{},"局部变量不能在函数外部访问。",[40,163764,163765,163766,163768],{},"不要滥用 ",[66,163767,162802],{},"，更好的方式是让函数返回新值。",[29,163770,163771,163772,163774],{},"例如不用 ",[66,163773,162802],{}," 改写存款：",[59,163776,163778],{"className":31614,"code":163777,"language":31616,"meta":64,"style":64},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[66,163779,163780,163789,163800,163804,163808,163816,163829],{"__ignoreMap":64},[69,163781,163782,163784,163786],{"class":71,"line":72},[69,163783,33183],{"class":82},[69,163785,163406],{"class":109},[69,163787,163788],{"class":86},"(balance, money):\n",[69,163790,163791,163793,163796,163798],{"class":71,"line":79},[69,163792,5334],{"class":82},[69,163794,163795],{"class":86}," balance ",[69,163797,1869],{"class":82},[69,163799,151151],{"class":86},[69,163801,163802],{"class":71,"line":106},[69,163803,3644],{"emptyLinePlaceholder":1325},[69,163805,163806],{"class":71,"line":116},[69,163807,3644],{"emptyLinePlaceholder":1325},[69,163809,163810,163812,163814],{"class":71,"line":133},[69,163811,163280],{"class":86},[69,163813,1019],{"class":82},[69,163815,163285],{"class":90},[69,163817,163818,163820,163822,163825,163827],{"class":71,"line":139},[69,163819,163280],{"class":86},[69,163821,1019],{"class":82},[69,163823,163824],{"class":86}," save_money(balance, ",[69,163826,2967],{"class":90},[69,163828,1404],{"class":86},[69,163830,163831,163833],{"class":71,"line":401},[69,163832,31651],{"class":90},[69,163834,163835],{"class":86},"(balance)\n",[14,163837,163839],{"id":163838},"_515-本章练习","5.15 本章练习",[37,163841,163842,163849,163855,163861,163867],{},[40,163843,163844,163845,163848],{},"定义函数 ",[66,163846,163847],{},"print_student(name, age)","，输出学生信息。",[40,163850,163844,163851,163854],{},[66,163852,163853],{},"get_max(a, b, c)","，返回三个数中的最大值。",[40,163856,163844,163857,163860],{},[66,163858,163859],{},"is_even(num)","，判断一个数是否为偶数。",[40,163862,163844,163863,163866],{},[66,163864,163865],{},"calculate_bmi(weight, height)","，返回 BMI。",[40,163868,163869],{},"把第 4 章的菜单程序拆分成多个函数。",[1297,163871,163872],{},"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":64,"searchDepth":79,"depth":79,"links":163874},[163875,163876,163877,163878,163879,163880,163881,163882,163883,163887,163888,163889,163890,163891,163892],{"id":161895,"depth":79,"text":161896},{"id":161936,"depth":79,"text":161937},{"id":162026,"depth":79,"text":162027},{"id":162107,"depth":79,"text":162108},{"id":162240,"depth":79,"text":162241},{"id":162362,"depth":79,"text":162363},{"id":162484,"depth":79,"text":162485},{"id":162561,"depth":79,"text":162562},{"id":162683,"depth":79,"text":162684,"children":163884},[163885,163886],{"id":162687,"depth":106,"text":162688},{"id":162745,"depth":106,"text":162746},{"id":162874,"depth":79,"text":162875},{"id":163000,"depth":79,"text":163001},{"id":163113,"depth":79,"text":163114},{"id":163269,"depth":79,"text":163270},{"id":163740,"depth":79,"text":163741},{"id":163838,"depth":79,"text":163839},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161887,"description":1322},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163899,"title":163900,"body":163901,"description":1322,"extension":1323,"meta":166945,"navigation":1325,"path":166946,"seo":166947,"stem":166948,"__hash__":166949},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163902,"toc":166926},[163903,163906,163910,163913,163916,164020,164023,164027,164030,164110,164113,164117,164120,164180,164183,164219,164222,164237,164241,164314,164317,164372,164375,164445,164448,164532,164542,164600,164604,164649,164652,164678,164681,164787,164791,164794,164836,164839,164903,164906,164910,164913,164974,164977,165007,165010,165048,165052,165055,165064,165067,165191,165194,165235,165239,165242,165253,165293,165296,165311,165316,165319,165386,165389,165479,165483,165486,165534,165537,165564,165566,165596,165599,165619,165622,165653,165656,165689,165693,165696,165720,165723,165747,165750,165774,165778,165781,165911,165914,165994,165997,166072,166076,166079,166129,166132,166174,166177,166201,166203,166227,166230,166285,166288,166354,166358,166361,166364,166402,166405,166458,166461,166507,166510,166543,166546,166550,166869,166873,166902,166906,166923],[10,163904,163900],{"id":163905},"_6-数据容器",[14,163907,163909],{"id":163908},"_61-什么是数据容器","6.1 什么是数据容器",[29,163911,163912],{},"数据容器用于一次保存多个数据。",[29,163914,163915],{},"常见容器：",[1530,163917,163918,163935],{},[1533,163919,163920],{},[1536,163921,163922,163924,163927,163930,163933],{},[1539,163923,27008],{},[1539,163925,163926],{},"是否有序",[1539,163928,163929],{},"是否可变",[1539,163931,163932],{},"是否允许重复",[1539,163934,28728],{},[1576,163936,163937,163955,163971,163986,164003],{},[1536,163938,163939,163942,163945,163948,163951],{},[1581,163940,163941],{},"list列表",[1581,163943,163944],{},"有序",[1581,163946,163947],{},"可变",[1581,163949,163950],{},"允许",[1581,163952,163953],{},[66,163954,156233],{},[1536,163956,163957,163960,163962,163965,163967],{},[1581,163958,163959],{},"tuple元组",[1581,163961,163944],{},[1581,163963,163964],{},"不可变",[1581,163966,163950],{},[1581,163968,163969],{},[66,163970,156246],{},[1536,163972,163973,163976,163978,163980,163982],{},[1581,163974,163975],{},"str字符串",[1581,163977,163944],{},[1581,163979,163964],{},[1581,163981,163950],{},[1581,163983,163984],{},[66,163985,156856],{},[1536,163987,163988,163991,163994,163996,163999],{},[1581,163989,163990],{},"set集合",[1581,163992,163993],{},"无序",[1581,163995,163947],{},[1581,163997,163998],{},"不允许",[1581,164000,164001],{},[66,164002,156271],{},[1536,164004,164005,164008,164010,164012,164015],{},[1581,164006,164007],{},"dict字典",[1581,164009,163944],{},[1581,164011,163947],{},[1581,164013,164014],{},"key不允许重复",[1581,164016,164017],{},[66,164018,164019],{},"{\"name\": \"小明\"}",[29,164021,164022],{},"Python 3.7 之后，字典保持插入顺序。",[14,164024,164026],{"id":164025},"_62-列表list","6.2 列表list",[29,164028,164029],{},"列表用于保存一组有顺序的数据。",[59,164031,164033],{"className":31614,"code":164032,"language":31616,"meta":64,"style":64},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[66,164034,164035,164055,164080,164101],{"__ignoreMap":64},[69,164036,164037,164039,164041,164043,164045,164047,164049,164051,164053],{"class":71,"line":72},[69,164038,161356],{"class":86},[69,164040,1019],{"class":82},[69,164042,53454],{"class":86},[69,164044,150864],{"class":1022},[69,164046,13677],{"class":86},[69,164048,151912],{"class":1022},[69,164050,13677],{"class":86},[69,164052,160707],{"class":1022},[69,164054,34482],{"class":86},[69,164056,164057,164060,164062,164064,164066,164068,164070,164072,164074,164076,164078],{"class":71,"line":79},[69,164058,164059],{"class":86},"numbers ",[69,164061,1019],{"class":82},[69,164063,53454],{"class":86},[69,164065,1609],{"class":90},[69,164067,13677],{"class":86},[69,164069,1471],{"class":90},[69,164071,13677],{"class":86},[69,164073,1465],{"class":90},[69,164075,13677],{"class":86},[69,164077,1684],{"class":90},[69,164079,34482],{"class":86},[69,164081,164082,164085,164087,164089,164091,164093,164095,164097,164099],{"class":71,"line":106},[69,164083,164084],{"class":86},"mixed ",[69,164086,1019],{"class":82},[69,164088,53454],{"class":86},[69,164090,150864],{"class":1022},[69,164092,13677],{"class":86},[69,164094,2037],{"class":90},[69,164096,13677],{"class":86},[69,164098,32712],{"class":90},[69,164100,34482],{"class":86},[69,164102,164103,164106,164108],{"class":71,"line":116},[69,164104,164105],{"class":86},"empty ",[69,164107,1019],{"class":82},[69,164109,53066],{"class":86},[29,164111,164112],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164114,164116],{"id":164115},"_63-列表索引","6.3 列表索引",[29,164118,164119],{},"正向索引从 0 开始：",[59,164121,164123],{"className":31614,"code":164122,"language":31616,"meta":64,"style":64},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[66,164124,164125,164145,164149,164160,164170],{"__ignoreMap":64},[69,164126,164127,164129,164131,164133,164135,164137,164139,164141,164143],{"class":71,"line":72},[69,164128,161356],{"class":86},[69,164130,1019],{"class":82},[69,164132,53454],{"class":86},[69,164134,150864],{"class":1022},[69,164136,13677],{"class":86},[69,164138,151912],{"class":1022},[69,164140,13677],{"class":86},[69,164142,160707],{"class":1022},[69,164144,34482],{"class":86},[69,164146,164147],{"class":71,"line":79},[69,164148,3644],{"emptyLinePlaceholder":1325},[69,164150,164151,164153,164156,164158],{"class":71,"line":106},[69,164152,31651],{"class":90},[69,164154,164155],{"class":86},"(names[",[69,164157,1583],{"class":90},[69,164159,5901],{"class":86},[69,164161,164162,164164,164166,164168],{"class":71,"line":116},[69,164163,31651],{"class":90},[69,164165,164155],{"class":86},[69,164167,1609],{"class":90},[69,164169,5901],{"class":86},[69,164171,164172,164174,164176,164178],{"class":71,"line":133},[69,164173,31651],{"class":90},[69,164175,164155],{"class":86},[69,164177,1471],{"class":90},[69,164179,5901],{"class":86},[29,164181,164182],{},"反向索引从 -1 开始：",[59,164184,164186],{"className":31614,"code":164185,"language":31616,"meta":64,"style":64},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[66,164187,164188,164204],{"__ignoreMap":64},[69,164189,164190,164192,164194,164196,164198,164201],{"class":71,"line":72},[69,164191,31651],{"class":90},[69,164193,164155],{"class":86},[69,164195,1920],{"class":82},[69,164197,1609],{"class":90},[69,164199,164200],{"class":86},"])  ",[69,164202,164203],{"class":75},"# 小刚\n",[69,164205,164206,164208,164210,164212,164214,164216],{"class":71,"line":79},[69,164207,31651],{"class":90},[69,164209,164155],{"class":86},[69,164211,1920],{"class":82},[69,164213,1471],{"class":90},[69,164215,164200],{"class":86},[69,164217,164218],{"class":75},"# 小红\n",[29,164220,164221],{},"索引越界会报错：",[59,164223,164225],{"className":31614,"code":164224,"language":31616,"meta":64,"style":64},"print(names[3])\n",[66,164226,164227],{"__ignoreMap":64},[69,164228,164229,164231,164233,164235],{"class":71,"line":72},[69,164230,31651],{"class":90},[69,164232,164155],{"class":86},[69,164234,1465],{"class":90},[69,164236,5901],{"class":86},[14,164238,164240],{"id":164239},"_64-列表常用方法","6.4 列表常用方法",[59,164242,164244],{"className":31614,"code":164243,"language":31616,"meta":64,"style":64},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[66,164245,164246,164262,164266,164275,164289,164303,164307],{"__ignoreMap":64},[69,164247,164248,164250,164252,164254,164256,164258,164260],{"class":71,"line":72},[69,164249,161356],{"class":86},[69,164251,1019],{"class":82},[69,164253,53454],{"class":86},[69,164255,150864],{"class":1022},[69,164257,13677],{"class":86},[69,164259,151912],{"class":1022},[69,164261,34482],{"class":86},[69,164263,164264],{"class":71,"line":79},[69,164265,3644],{"emptyLinePlaceholder":1325},[69,164267,164268,164271,164273],{"class":71,"line":106},[69,164269,164270],{"class":86},"names.append(",[69,164272,160707],{"class":1022},[69,164274,1404],{"class":86},[69,164276,164277,164280,164282,164284,164287],{"class":71,"line":116},[69,164278,164279],{"class":86},"names.insert(",[69,164281,1609],{"class":90},[69,164283,13677],{"class":86},[69,164285,164286],{"class":1022},"\"小李\"",[69,164288,1404],{"class":86},[69,164290,164291,164294,164296,164298,164301],{"class":71,"line":133},[69,164292,164293],{"class":86},"names.extend([",[69,164295,9925],{"class":1022},[69,164297,13677],{"class":86},[69,164299,164300],{"class":1022},"\"小赵\"",[69,164302,5901],{"class":86},[69,164304,164305],{"class":71,"line":139},[69,164306,3644],{"emptyLinePlaceholder":1325},[69,164308,164309,164311],{"class":71,"line":401},[69,164310,31651],{"class":90},[69,164312,164313],{"class":86},"(names)\n",[29,164315,164316],{},"删除元素：",[59,164318,164320],{"className":31614,"code":164319,"language":31616,"meta":64,"style":64},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[66,164321,164322,164331,164341,164355,164367],{"__ignoreMap":64},[69,164323,164324,164327,164329],{"class":71,"line":72},[69,164325,164326],{"class":86},"names.remove(",[69,164328,151912],{"class":1022},[69,164330,1404],{"class":86},[69,164332,164333,164336,164338],{"class":71,"line":79},[69,164334,164335],{"class":86},"last ",[69,164337,1019],{"class":82},[69,164339,164340],{"class":86}," names.pop()\n",[69,164342,164343,164346,164348,164351,164353],{"class":71,"line":106},[69,164344,164345],{"class":86},"first ",[69,164347,1019],{"class":82},[69,164349,164350],{"class":86}," names.pop(",[69,164352,1583],{"class":90},[69,164354,1404],{"class":86},[69,164356,164357,164360,164363,164365],{"class":71,"line":116},[69,164358,164359],{"class":82},"del",[69,164361,164362],{"class":86}," names[",[69,164364,1583],{"class":90},[69,164366,34482],{"class":86},[69,164368,164369],{"class":71,"line":133},[69,164370,164371],{"class":86},"names.clear()\n",[29,164373,164374],{},"查询和统计：",[59,164376,164378],{"className":31614,"code":164377,"language":31616,"meta":64,"style":64},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[66,164379,164380,164408,164412,164423,164434],{"__ignoreMap":64},[69,164381,164382,164384,164386,164388,164390,164392,164394,164396,164398,164400,164402,164404,164406],{"class":71,"line":72},[69,164383,164059],{"class":86},[69,164385,1019],{"class":82},[69,164387,53454],{"class":86},[69,164389,1609],{"class":90},[69,164391,13677],{"class":86},[69,164393,1471],{"class":90},[69,164395,13677],{"class":86},[69,164397,1465],{"class":90},[69,164399,13677],{"class":86},[69,164401,1471],{"class":90},[69,164403,13677],{"class":86},[69,164405,1684],{"class":90},[69,164407,34482],{"class":86},[69,164409,164410],{"class":71,"line":79},[69,164411,3644],{"emptyLinePlaceholder":1325},[69,164413,164414,164416,164419,164421],{"class":71,"line":106},[69,164415,31651],{"class":90},[69,164417,164418],{"class":86},"(numbers.index(",[69,164420,1465],{"class":90},[69,164422,31733],{"class":86},[69,164424,164425,164427,164430,164432],{"class":71,"line":116},[69,164426,31651],{"class":90},[69,164428,164429],{"class":86},"(numbers.count(",[69,164431,1471],{"class":90},[69,164433,31733],{"class":86},[69,164435,164436,164438,164440,164442],{"class":71,"line":133},[69,164437,31651],{"class":90},[69,164439,1398],{"class":86},[69,164441,8600],{"class":90},[69,164443,164444],{"class":86},"(numbers))\n",[29,164446,164447],{},"排序：",[59,164449,164451],{"className":31614,"code":164450,"language":31616,"meta":64,"style":64},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[66,164452,164453,164477,164481,164486,164493,164497,164511,164517,164521,164526],{"__ignoreMap":64},[69,164454,164455,164457,164459,164461,164463,164465,164467,164469,164471,164473,164475],{"class":71,"line":72},[69,164456,164059],{"class":86},[69,164458,1019],{"class":82},[69,164460,53454],{"class":86},[69,164462,1465],{"class":90},[69,164464,13677],{"class":86},[69,164466,1609],{"class":90},[69,164468,13677],{"class":86},[69,164470,1709],{"class":90},[69,164472,13677],{"class":86},[69,164474,1471],{"class":90},[69,164476,34482],{"class":86},[69,164478,164479],{"class":71,"line":79},[69,164480,3644],{"emptyLinePlaceholder":1325},[69,164482,164483],{"class":71,"line":106},[69,164484,164485],{"class":86},"numbers.sort()\n",[69,164487,164488,164490],{"class":71,"line":116},[69,164489,31651],{"class":90},[69,164491,164492],{"class":86},"(numbers)\n",[69,164494,164495],{"class":71,"line":133},[69,164496,3644],{"emptyLinePlaceholder":1325},[69,164498,164499,164502,164505,164507,164509],{"class":71,"line":139},[69,164500,164501],{"class":86},"numbers.sort(",[69,164503,164504],{"class":6458},"reverse",[69,164506,1019],{"class":82},[69,164508,32712],{"class":90},[69,164510,1404],{"class":86},[69,164512,164513,164515],{"class":71,"line":401},[69,164514,31651],{"class":90},[69,164516,164492],{"class":86},[69,164518,164519],{"class":71,"line":470},[69,164520,3644],{"emptyLinePlaceholder":1325},[69,164522,164523],{"class":71,"line":475},[69,164524,164525],{"class":86},"numbers.reverse()\n",[69,164527,164528,164530],{"class":71,"line":482},[69,164529,31651],{"class":90},[69,164531,164492],{"class":86},[29,164533,164534,164537,164538,164541],{},[66,164535,164536],{},"sort()"," 会修改原列表，",[66,164539,164540],{},"sorted()"," 返回新列表。",[59,164543,164545],{"className":31614,"code":164544,"language":31616,"meta":64,"style":64},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[66,164546,164547,164571,164583,164587,164593],{"__ignoreMap":64},[69,164548,164549,164551,164553,164555,164557,164559,164561,164563,164565,164567,164569],{"class":71,"line":72},[69,164550,164059],{"class":86},[69,164552,1019],{"class":82},[69,164554,53454],{"class":86},[69,164556,1465],{"class":90},[69,164558,13677],{"class":86},[69,164560,1609],{"class":90},[69,164562,13677],{"class":86},[69,164564,1709],{"class":90},[69,164566,13677],{"class":86},[69,164568,1471],{"class":90},[69,164570,34482],{"class":86},[69,164572,164573,164576,164578,164581],{"class":71,"line":79},[69,164574,164575],{"class":86},"new_numbers ",[69,164577,1019],{"class":82},[69,164579,164580],{"class":90}," sorted",[69,164582,164492],{"class":86},[69,164584,164585],{"class":71,"line":106},[69,164586,3644],{"emptyLinePlaceholder":1325},[69,164588,164589,164591],{"class":71,"line":116},[69,164590,31651],{"class":90},[69,164592,164492],{"class":86},[69,164594,164595,164597],{"class":71,"line":133},[69,164596,31651],{"class":90},[69,164598,164599],{"class":86},"(new_numbers)\n",[14,164601,164603],{"id":164602},"_65-列表遍历","6.5 列表遍历",[59,164605,164607],{"className":31614,"code":164606,"language":31616,"meta":64,"style":64},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[66,164608,164609,164629,164633,164643],{"__ignoreMap":64},[69,164610,164611,164613,164615,164617,164619,164621,164623,164625,164627],{"class":71,"line":72},[69,164612,161356],{"class":86},[69,164614,1019],{"class":82},[69,164616,53454],{"class":86},[69,164618,150864],{"class":1022},[69,164620,13677],{"class":86},[69,164622,151912],{"class":1022},[69,164624,13677],{"class":86},[69,164626,160707],{"class":1022},[69,164628,34482],{"class":86},[69,164630,164631],{"class":71,"line":79},[69,164632,3644],{"emptyLinePlaceholder":1325},[69,164634,164635,164637,164639,164641],{"class":71,"line":106},[69,164636,4269],{"class":82},[69,164638,161392],{"class":86},[69,164640,27280],{"class":82},[69,164642,161397],{"class":86},[69,164644,164645,164647],{"class":71,"line":116},[69,164646,32535],{"class":90},[69,164648,151636],{"class":86},[29,164650,164651],{},"需要索引时：",[59,164653,164655],{"className":31614,"code":164654,"language":31616,"meta":64,"style":64},"for index, name in enumerate(names):\n    print(index, name)\n",[66,164656,164657,164671],{"__ignoreMap":64},[69,164658,164659,164661,164664,164666,164668],{"class":71,"line":72},[69,164660,4269],{"class":82},[69,164662,164663],{"class":86}," index, name ",[69,164665,27280],{"class":82},[69,164667,32842],{"class":90},[69,164669,164670],{"class":86},"(names):\n",[69,164672,164673,164675],{"class":71,"line":79},[69,164674,32535],{"class":90},[69,164676,164677],{"class":86},"(index, name)\n",[29,164679,164680],{},"统计总分：",[59,164682,164684],{"className":31614,"code":164683,"language":31616,"meta":64,"style":64},"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",[66,164685,164686,164711,164719,164723,164734,164742,164746,164763],{"__ignoreMap":64},[69,164687,164688,164691,164693,164695,164697,164699,164701,164703,164705,164707,164709],{"class":71,"line":72},[69,164689,164690],{"class":86},"scores ",[69,164692,1019],{"class":82},[69,164694,53454],{"class":86},[69,164696,2249],{"class":90},[69,164698,13677],{"class":86},[69,164700,2123],{"class":90},[69,164702,13677],{"class":86},[69,164704,1645],{"class":90},[69,164706,13677],{"class":86},[69,164708,1949],{"class":90},[69,164710,34482],{"class":86},[69,164712,164713,164715,164717],{"class":71,"line":79},[69,164714,158236],{"class":86},[69,164716,1019],{"class":82},[69,164718,48569],{"class":90},[69,164720,164721],{"class":71,"line":106},[69,164722,3644],{"emptyLinePlaceholder":1325},[69,164724,164725,164727,164729,164731],{"class":71,"line":116},[69,164726,4269],{"class":82},[69,164728,158759],{"class":86},[69,164730,27280],{"class":82},[69,164732,164733],{"class":86}," scores:\n",[69,164735,164736,164738,164740],{"class":71,"line":133},[69,164737,160283],{"class":86},[69,164739,10719],{"class":82},[69,164741,2829],{"class":86},[69,164743,164744],{"class":71,"line":139},[69,164745,3644],{"emptyLinePlaceholder":1325},[69,164747,164748,164751,164753,164756,164758,164760],{"class":71,"line":401},[69,164749,164750],{"class":86},"avg ",[69,164752,1019],{"class":82},[69,164754,164755],{"class":86}," total ",[69,164757,1972],{"class":82},[69,164759,8573],{"class":90},[69,164761,164762],{"class":86},"(scores)\n",[69,164764,164765,164767,164769,164771,164774,164776,164779,164781,164783,164785],{"class":71,"line":470},[69,164766,31651],{"class":90},[69,164768,1398],{"class":86},[69,164770,1447],{"class":82},[69,164772,164773],{"class":1022},"\"平均分:",[69,164775,2283],{"class":90},[69,164777,164778],{"class":86},"avg",[69,164780,158135],{"class":82},[69,164782,2332],{"class":90},[69,164784,1642],{"class":1022},[69,164786,1404],{"class":86},[14,164788,164790],{"id":164789},"_66-元组tuple","6.6 元组tuple",[29,164792,164793],{},"元组和列表类似，但不可修改。",[59,164795,164797],{"className":31614,"code":164796,"language":31616,"meta":64,"style":64},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[66,164798,164799,164816],{"__ignoreMap":64},[69,164800,164801,164804,164806,164808,164810,164812,164814],{"class":71,"line":72},[69,164802,164803],{"class":86},"point ",[69,164805,1019],{"class":82},[69,164807,87],{"class":86},[69,164809,390],{"class":90},[69,164811,13677],{"class":86},[69,164813,2087],{"class":90},[69,164815,1404],{"class":86},[69,164817,164818,164820,164822,164824,164826,164828,164830,164832,164834],{"class":71,"line":79},[69,164819,117535],{"class":86},[69,164821,1019],{"class":82},[69,164823,87],{"class":86},[69,164825,150864],{"class":1022},[69,164827,13677],{"class":86},[69,164829,2037],{"class":90},[69,164831,13677],{"class":86},[69,164833,70494],{"class":1022},[69,164835,1404],{"class":86},[29,164837,164838],{},"单元素元组必须加逗号：",[59,164840,164842],{"className":31614,"code":164841,"language":31616,"meta":64,"style":64},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[66,164843,164844,164858,164871,164875,164889],{"__ignoreMap":64},[69,164845,164846,164849,164851,164853,164855],{"class":71,"line":72},[69,164847,164848],{"class":86},"t1 ",[69,164850,1019],{"class":82},[69,164852,87],{"class":86},[69,164854,390],{"class":90},[69,164856,164857],{"class":86},",)\n",[69,164859,164860,164863,164865,164867,164869],{"class":71,"line":79},[69,164861,164862],{"class":86},"t2 ",[69,164864,1019],{"class":82},[69,164866,87],{"class":86},[69,164868,390],{"class":90},[69,164870,1404],{"class":86},[69,164872,164873],{"class":71,"line":106},[69,164874,3644],{"emptyLinePlaceholder":1325},[69,164876,164877,164879,164881,164883,164886],{"class":71,"line":116},[69,164878,31651],{"class":90},[69,164880,1398],{"class":86},[69,164882,104328],{"class":90},[69,164884,164885],{"class":86},"(t1))  ",[69,164887,164888],{"class":75},"# tuple\n",[69,164890,164891,164893,164895,164897,164900],{"class":71,"line":133},[69,164892,31651],{"class":90},[69,164894,1398],{"class":86},[69,164896,104328],{"class":90},[69,164898,164899],{"class":86},"(t2))  ",[69,164901,164902],{"class":75},"# int\n",[29,164904,164905],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164907,164909],{"id":164908},"_67-字符串str","6.7 字符串str",[29,164911,164912],{},"字符串也是序列，可以索引、切片和遍历。",[59,164914,164916],{"className":31614,"code":164915,"language":31616,"meta":64,"style":64},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[66,164917,164918,164926,164930,164941,164953,164957,164968],{"__ignoreMap":64},[69,164919,164920,164922,164924],{"class":71,"line":72},[69,164921,157420],{"class":86},[69,164923,1019],{"class":82},[69,164925,160657],{"class":1022},[69,164927,164928],{"class":71,"line":79},[69,164929,3644],{"emptyLinePlaceholder":1325},[69,164931,164932,164934,164937,164939],{"class":71,"line":106},[69,164933,31651],{"class":90},[69,164935,164936],{"class":86},"(text[",[69,164938,1583],{"class":90},[69,164940,5901],{"class":86},[69,164942,164943,164945,164947,164949,164951],{"class":71,"line":116},[69,164944,31651],{"class":90},[69,164946,164936],{"class":86},[69,164948,1920],{"class":82},[69,164950,1609],{"class":90},[69,164952,5901],{"class":86},[69,164954,164955],{"class":71,"line":133},[69,164956,3644],{"emptyLinePlaceholder":1325},[69,164958,164959,164961,164963,164965],{"class":71,"line":139},[69,164960,4269],{"class":82},[69,164962,160668],{"class":86},[69,164964,27280],{"class":82},[69,164966,164967],{"class":86}," text:\n",[69,164969,164970,164972],{"class":71,"line":401},[69,164971,32535],{"class":90},[69,164973,160679],{"class":86},[29,164975,164976],{},"字符串不可变：",[59,164978,164980],{"className":31614,"code":164979,"language":31616,"meta":64,"style":64},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[66,164981,164982,164990],{"__ignoreMap":64},[69,164983,164984,164986,164988],{"class":71,"line":72},[69,164985,157420],{"class":86},[69,164987,1019],{"class":82},[69,164989,160657],{"class":1022},[69,164991,164992,164995,164997,164999,165001,165004],{"class":71,"line":79},[69,164993,164994],{"class":86},"text[",[69,164996,1583],{"class":90},[69,164998,5687],{"class":86},[69,165000,1019],{"class":82},[69,165002,165003],{"class":1022}," \"P\"",[69,165005,165006],{"class":75},"  # 报错\n",[29,165008,165009],{},"如果要得到新字符串：",[59,165011,165013],{"className":31614,"code":165012,"language":31616,"meta":64,"style":64},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[66,165014,165015,165023,165041],{"__ignoreMap":64},[69,165016,165017,165019,165021],{"class":71,"line":72},[69,165018,157420],{"class":86},[69,165020,1019],{"class":82},[69,165022,160657],{"class":1022},[69,165024,165025,165027,165029,165031,165033,165036,165038],{"class":71,"line":79},[69,165026,157420],{"class":86},[69,165028,1019],{"class":82},[69,165030,165003],{"class":1022},[69,165032,46802],{"class":82},[69,165034,165035],{"class":86}," text[",[69,165037,1609],{"class":90},[69,165039,165040],{"class":86},":]\n",[69,165042,165043,165045],{"class":71,"line":106},[69,165044,31651],{"class":90},[69,165046,165047],{"class":86},"(text)\n",[14,165049,165051],{"id":165050},"_68-切片","6.8 切片",[29,165053,165054],{},"切片用于从序列中取一部分。",[59,165056,165058],{"className":31614,"code":165057,"language":31616,"meta":64,"style":64},"序列[开始:结束:步长]\n",[66,165059,165060],{"__ignoreMap":64},[69,165061,165062],{"class":71,"line":72},[69,165063,165057],{"class":86},[29,165065,165066],{},"结束位置不包含。",[59,165068,165070],{"className":31614,"code":165069,"language":31616,"meta":64,"style":64},"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",[66,165071,165072,165109,165113,165132,165147,165161,165175],{"__ignoreMap":64},[69,165073,165074,165077,165079,165081,165083,165085,165087,165089,165091,165093,165095,165097,165099,165101,165103,165105,165107],{"class":71,"line":72},[69,165075,165076],{"class":86},"nums ",[69,165078,1019],{"class":82},[69,165080,53454],{"class":86},[69,165082,1583],{"class":90},[69,165084,13677],{"class":86},[69,165086,1609],{"class":90},[69,165088,13677],{"class":86},[69,165090,1471],{"class":90},[69,165092,13677],{"class":86},[69,165094,1465],{"class":90},[69,165096,13677],{"class":86},[69,165098,1684],{"class":90},[69,165100,13677],{"class":86},[69,165102,1709],{"class":90},[69,165104,13677],{"class":86},[69,165106,1733],{"class":90},[69,165108,34482],{"class":86},[69,165110,165111],{"class":71,"line":79},[69,165112,3644],{"emptyLinePlaceholder":1325},[69,165114,165115,165117,165120,165122,165124,165126,165129],{"class":71,"line":106},[69,165116,31651],{"class":90},[69,165118,165119],{"class":86},"(nums[",[69,165121,1609],{"class":90},[69,165123,2246],{"class":86},[69,165125,1684],{"class":90},[69,165127,165128],{"class":86},"])    ",[69,165130,165131],{"class":75},"# [1, 2, 3]\n",[69,165133,165134,165136,165139,165141,165144],{"class":71,"line":116},[69,165135,31651],{"class":90},[69,165137,165138],{"class":86},"(nums[:",[69,165140,1465],{"class":90},[69,165142,165143],{"class":86},"])     ",[69,165145,165146],{"class":75},"# [0, 1, 2]\n",[69,165148,165149,165151,165153,165155,165158],{"class":71,"line":133},[69,165150,31651],{"class":90},[69,165152,165119],{"class":86},[69,165154,1465],{"class":90},[69,165156,165157],{"class":86},":])     ",[69,165159,165160],{"class":75},"# [3, 4, 5, 6]\n",[69,165162,165163,165165,165168,165170,165172],{"class":71,"line":139},[69,165164,31651],{"class":90},[69,165166,165167],{"class":86},"(nums[::",[69,165169,1471],{"class":90},[69,165171,165128],{"class":86},[69,165173,165174],{"class":75},"# [0, 2, 4, 6]\n",[69,165176,165177,165179,165181,165183,165185,165188],{"class":71,"line":401},[69,165178,31651],{"class":90},[69,165180,165167],{"class":86},[69,165182,1920],{"class":82},[69,165184,1609],{"class":90},[69,165186,165187],{"class":86},"])   ",[69,165189,165190],{"class":75},"# 反转\n",[29,165192,165193],{},"字符串切片：",[59,165195,165197],{"className":31614,"code":165196,"language":31616,"meta":64,"style":64},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[66,165198,165199,165208,165222],{"__ignoreMap":64},[69,165200,165201,165203,165205],{"class":71,"line":72},[69,165202,157420],{"class":86},[69,165204,1019],{"class":82},[69,165206,165207],{"class":1022}," \"abcdef\"\n",[69,165209,165210,165212,165214,165216,165218,165220],{"class":71,"line":79},[69,165211,31651],{"class":90},[69,165213,164936],{"class":86},[69,165215,1609],{"class":90},[69,165217,2246],{"class":86},[69,165219,1684],{"class":90},[69,165221,5901],{"class":86},[69,165223,165224,165226,165229,165231,165233],{"class":71,"line":106},[69,165225,31651],{"class":90},[69,165227,165228],{"class":86},"(text[::",[69,165230,1920],{"class":82},[69,165232,1609],{"class":90},[69,165234,5901],{"class":86},[14,165236,165238],{"id":165237},"_69-集合set","6.9 集合set",[29,165240,165241],{},"集合特点：",[37,165243,165244,165247,165250],{},[40,165245,165246],{},"无序。",[40,165248,165249],{},"元素不重复。",[40,165251,165252],{},"可以做交集、并集、差集。",[59,165254,165256],{"className":31614,"code":165255,"language":31616,"meta":64,"style":64},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[66,165257,165258,165286],{"__ignoreMap":64},[69,165259,165260,165262,165264,165266,165268,165270,165272,165274,165276,165278,165280,165282,165284],{"class":71,"line":72},[69,165261,165076],{"class":86},[69,165263,1019],{"class":82},[69,165265,5692],{"class":86},[69,165267,1609],{"class":90},[69,165269,13677],{"class":86},[69,165271,1471],{"class":90},[69,165273,13677],{"class":86},[69,165275,1465],{"class":90},[69,165277,13677],{"class":86},[69,165279,1465],{"class":90},[69,165281,13677],{"class":86},[69,165283,1684],{"class":90},[69,165285,142],{"class":86},[69,165287,165288,165290],{"class":71,"line":79},[69,165289,31651],{"class":90},[69,165291,165292],{"class":86},"(nums)\n",[29,165294,165295],{},"创建空集合：",[59,165297,165299],{"className":31614,"code":165298,"language":31616,"meta":64,"style":64},"s = set()\n",[66,165300,165301],{"__ignoreMap":64},[69,165302,165303,165305,165307,165309],{"class":71,"line":72},[69,165304,11821],{"class":86},[69,165306,1019],{"class":82},[69,165308,120943],{"class":90},[69,165310,3220],{"class":86},[29,165312,10267,165313,165315],{},[66,165314,33695],{}," 是空字典，不是空集合。",[29,165317,165318],{},"集合常用操作：",[59,165320,165322],{"className":31614,"code":165321,"language":31616,"meta":64,"style":64},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[66,165323,165324,165344,165348,165357,165366,165375],{"__ignoreMap":64},[69,165325,165326,165328,165330,165332,165334,165336,165338,165340,165342],{"class":71,"line":72},[69,165327,11821],{"class":86},[69,165329,1019],{"class":82},[69,165331,5692],{"class":86},[69,165333,1609],{"class":90},[69,165335,13677],{"class":86},[69,165337,1471],{"class":90},[69,165339,13677],{"class":86},[69,165341,1465],{"class":90},[69,165343,142],{"class":86},[69,165345,165346],{"class":71,"line":79},[69,165347,3644],{"emptyLinePlaceholder":1325},[69,165349,165350,165353,165355],{"class":71,"line":106},[69,165351,165352],{"class":86},"s.add(",[69,165354,1684],{"class":90},[69,165356,1404],{"class":86},[69,165358,165359,165362,165364],{"class":71,"line":116},[69,165360,165361],{"class":86},"s.remove(",[69,165363,1471],{"class":90},[69,165365,1404],{"class":86},[69,165367,165368,165371,165373],{"class":71,"line":133},[69,165369,165370],{"class":86},"s.discard(",[69,165372,390],{"class":90},[69,165374,1404],{"class":86},[69,165376,165377,165379,165381,165383],{"class":71,"line":139},[69,165378,31651],{"class":90},[69,165380,1398],{"class":86},[69,165382,8600],{"class":90},[69,165384,165385],{"class":86},"(s))\n",[29,165387,165388],{},"交并差：",[59,165390,165392],{"className":31614,"code":165391,"language":31616,"meta":64,"style":64},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[66,165393,165394,165414,165434,165438,165453,165466],{"__ignoreMap":64},[69,165395,165396,165398,165400,165402,165404,165406,165408,165410,165412],{"class":71,"line":72},[69,165397,12161],{"class":86},[69,165399,1019],{"class":82},[69,165401,5692],{"class":86},[69,165403,1609],{"class":90},[69,165405,13677],{"class":86},[69,165407,1471],{"class":90},[69,165409,13677],{"class":86},[69,165411,1465],{"class":90},[69,165413,142],{"class":86},[69,165415,165416,165418,165420,165422,165424,165426,165428,165430,165432],{"class":71,"line":79},[69,165417,12187],{"class":86},[69,165419,1019],{"class":82},[69,165421,5692],{"class":86},[69,165423,1465],{"class":90},[69,165425,13677],{"class":86},[69,165427,1684],{"class":90},[69,165429,13677],{"class":86},[69,165431,1709],{"class":90},[69,165433,142],{"class":86},[69,165435,165436],{"class":71,"line":106},[69,165437,3644],{"emptyLinePlaceholder":1325},[69,165439,165440,165442,165445,165447,165450],{"class":71,"line":116},[69,165441,31651],{"class":90},[69,165443,165444],{"class":86},"(a ",[69,165446,1742],{"class":82},[69,165448,165449],{"class":86}," b)  ",[69,165451,165452],{"class":75},"# 交集\n",[69,165454,165455,165457,165459,165461,165463],{"class":71,"line":133},[69,165456,31651],{"class":90},[69,165458,165444],{"class":86},[69,165460,2307],{"class":82},[69,165462,165449],{"class":86},[69,165464,165465],{"class":75},"# 并集\n",[69,165467,165468,165470,165472,165474,165476],{"class":71,"line":139},[69,165469,31651],{"class":90},[69,165471,165444],{"class":86},[69,165473,1920],{"class":82},[69,165475,165449],{"class":86},[69,165477,165478],{"class":75},"# 差集\n",[14,165480,165482],{"id":165481},"_610-字典dict","6.10 字典dict",[29,165484,165485],{},"字典通过 key-value 保存数据。",[59,165487,165489],{"className":31614,"code":165488,"language":31616,"meta":64,"style":64},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[66,165490,165491,165499,165509,165520,165530],{"__ignoreMap":64},[69,165492,165493,165495,165497],{"class":71,"line":72},[69,165494,150457],{"class":86},[69,165496,1019],{"class":82},[69,165498,113],{"class":86},[69,165500,165501,165503,165505,165507],{"class":71,"line":79},[69,165502,147996],{"class":1022},[69,165504,94],{"class":86},[69,165506,150864],{"class":1022},[69,165508,32702],{"class":86},[69,165510,165511,165514,165516,165518],{"class":71,"line":106},[69,165512,165513],{"class":1022},"    \"age\"",[69,165515,94],{"class":86},[69,165517,2037],{"class":90},[69,165519,32702],{"class":86},[69,165521,165522,165525,165527],{"class":71,"line":116},[69,165523,165524],{"class":1022},"    \"score\"",[69,165526,94],{"class":86},[69,165528,165529],{"class":90},"95\n",[69,165531,165532],{"class":71,"line":133},[69,165533,142],{"class":86},[29,165535,165536],{},"获取值：",[59,165538,165540],{"className":31614,"code":165539,"language":31616,"meta":64,"style":64},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[66,165541,165542,165553],{"__ignoreMap":64},[69,165543,165544,165546,165549,165551],{"class":71,"line":72},[69,165545,31651],{"class":90},[69,165547,165548],{"class":86},"(student[",[69,165550,63905],{"class":1022},[69,165552,5901],{"class":86},[69,165554,165555,165557,165560,165562],{"class":71,"line":79},[69,165556,31651],{"class":90},[69,165558,165559],{"class":86},"(student.get(",[69,165561,63905],{"class":1022},[69,165563,31733],{"class":86},[29,165565,16628],{},[59,165567,165569],{"className":31614,"code":165568,"language":31616,"meta":64,"style":64},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[66,165570,165571,165584],{"__ignoreMap":64},[69,165572,165573,165575,165578,165581],{"class":71,"line":72},[69,165574,153835],{"class":86},[69,165576,165577],{"class":1022},"\"address\"",[69,165579,165580],{"class":86},"]     ",[69,165582,165583],{"class":75},"# key不存在会报错\n",[69,165585,165586,165589,165591,165593],{"class":71,"line":79},[69,165587,165588],{"class":86},"student.get(",[69,165590,165577],{"class":1022},[69,165592,14955],{"class":86},[69,165594,165595],{"class":75},"# key不存在返回None\n",[29,165597,165598],{},"设置默认值：",[59,165600,165602],{"className":31614,"code":165601,"language":31616,"meta":64,"style":64},"print(student.get(\"address\", \"未知\"))\n",[66,165603,165604],{"__ignoreMap":64},[69,165605,165606,165608,165610,165612,165614,165617],{"class":71,"line":72},[69,165607,31651],{"class":90},[69,165609,165559],{"class":86},[69,165611,165577],{"class":1022},[69,165613,13677],{"class":86},[69,165615,165616],{"class":1022},"\"未知\"",[69,165618,31733],{"class":86},[29,165620,165621],{},"新增和修改：",[59,165623,165625],{"className":31614,"code":165624,"language":31616,"meta":64,"style":64},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[66,165626,165627,165640],{"__ignoreMap":64},[69,165628,165629,165631,165633,165635,165637],{"class":71,"line":72},[69,165630,153835],{"class":86},[69,165632,70349],{"class":1022},[69,165634,5687],{"class":86},[69,165636,1019],{"class":82},[69,165638,165639],{"class":90}," 19\n",[69,165641,165642,165644,165646,165648,165650],{"class":71,"line":79},[69,165643,153835],{"class":86},[69,165645,165577],{"class":1022},[69,165647,5687],{"class":86},[69,165649,1019],{"class":82},[69,165651,165652],{"class":1022}," \"北京\"\n",[29,165654,165655],{},"删除：",[59,165657,165659],{"className":31614,"code":165658,"language":31616,"meta":64,"style":64},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[66,165660,165661,165674,165684],{"__ignoreMap":64},[69,165662,165663,165665,165667,165670,165672],{"class":71,"line":72},[69,165664,156334],{"class":86},[69,165666,1019],{"class":82},[69,165668,165669],{"class":86}," student.pop(",[69,165671,152448],{"class":1022},[69,165673,1404],{"class":86},[69,165675,165676,165678,165680,165682],{"class":71,"line":79},[69,165677,164359],{"class":82},[69,165679,153125],{"class":86},[69,165681,70349],{"class":1022},[69,165683,34482],{"class":86},[69,165685,165686],{"class":71,"line":106},[69,165687,165688],{"class":86},"student.clear()\n",[14,165690,165692],{"id":165691},"_611-字典遍历","6.11 字典遍历",[29,165694,165695],{},"遍历 key：",[59,165697,165699],{"className":31614,"code":165698,"language":31616,"meta":64,"style":64},"for key in student:\n    print(key, student[key])\n",[66,165700,165701,165713],{"__ignoreMap":64},[69,165702,165703,165705,165708,165710],{"class":71,"line":72},[69,165704,4269],{"class":82},[69,165706,165707],{"class":86}," key ",[69,165709,27280],{"class":82},[69,165711,165712],{"class":86}," student:\n",[69,165714,165715,165717],{"class":71,"line":79},[69,165716,32535],{"class":90},[69,165718,165719],{"class":86},"(key, student[key])\n",[29,165721,165722],{},"遍历 value：",[59,165724,165726],{"className":31614,"code":165725,"language":31616,"meta":64,"style":64},"for value in student.values():\n    print(value)\n",[66,165727,165728,165740],{"__ignoreMap":64},[69,165729,165730,165732,165735,165737],{"class":71,"line":72},[69,165731,4269],{"class":82},[69,165733,165734],{"class":86}," value ",[69,165736,27280],{"class":82},[69,165738,165739],{"class":86}," student.values():\n",[69,165741,165742,165744],{"class":71,"line":79},[69,165743,32535],{"class":90},[69,165745,165746],{"class":86},"(value)\n",[29,165748,165749],{},"遍历 key 和 value：",[59,165751,165753],{"className":31614,"code":165752,"language":31616,"meta":64,"style":64},"for key, value in student.items():\n    print(key, value)\n",[66,165754,165755,165767],{"__ignoreMap":64},[69,165756,165757,165759,165762,165764],{"class":71,"line":72},[69,165758,4269],{"class":82},[69,165760,165761],{"class":86}," key, value ",[69,165763,27280],{"class":82},[69,165765,165766],{"class":86}," student.items():\n",[69,165768,165769,165771],{"class":71,"line":79},[69,165770,32535],{"class":90},[69,165772,165773],{"class":86},"(key, value)\n",[14,165775,165777],{"id":165776},"_612-嵌套容器","6.12 嵌套容器",[29,165779,165780],{},"列表中保存字典，是项目中最常见的结构之一。",[59,165782,165784],{"className":31614,"code":165783,"language":31616,"meta":64,"style":64},"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",[66,165785,165786,165794,165822,165850,165878,165882,165886,165896],{"__ignoreMap":64},[69,165787,165788,165790,165792],{"class":71,"line":72},[69,165789,160692],{"class":86},[69,165791,1019],{"class":82},[69,165793,56674],{"class":86},[69,165795,165796,165798,165800,165802,165804,165806,165808,165810,165812,165814,165816,165818,165820],{"class":71,"line":79},[69,165797,149361],{"class":86},[69,165799,63905],{"class":1022},[69,165801,94],{"class":86},[69,165803,150864],{"class":1022},[69,165805,13677],{"class":86},[69,165807,70349],{"class":1022},[69,165809,94],{"class":86},[69,165811,2037],{"class":90},[69,165813,13677],{"class":86},[69,165815,152448],{"class":1022},[69,165817,94],{"class":86},[69,165819,2375],{"class":90},[69,165821,6174],{"class":86},[69,165823,165824,165826,165828,165830,165832,165834,165836,165838,165840,165842,165844,165846,165848],{"class":71,"line":106},[69,165825,149361],{"class":86},[69,165827,63905],{"class":1022},[69,165829,94],{"class":86},[69,165831,151912],{"class":1022},[69,165833,13677],{"class":86},[69,165835,70349],{"class":1022},[69,165837,94],{"class":86},[69,165839,2012],{"class":90},[69,165841,13677],{"class":86},[69,165843,152448],{"class":1022},[69,165845,94],{"class":86},[69,165847,2198],{"class":90},[69,165849,6174],{"class":86},[69,165851,165852,165854,165856,165858,165860,165862,165864,165866,165868,165870,165872,165874,165876],{"class":71,"line":116},[69,165853,149361],{"class":86},[69,165855,63905],{"class":1022},[69,165857,94],{"class":86},[69,165859,160707],{"class":1022},[69,165861,13677],{"class":86},[69,165863,70349],{"class":1022},[69,165865,94],{"class":86},[69,165867,2062],{"class":90},[69,165869,13677],{"class":86},[69,165871,152448],{"class":1022},[69,165873,94],{"class":86},[69,165875,1795],{"class":90},[69,165877,6174],{"class":86},[69,165879,165880],{"class":71,"line":133},[69,165881,34482],{"class":86},[69,165883,165884],{"class":71,"line":139},[69,165885,3644],{"emptyLinePlaceholder":1325},[69,165887,165888,165890,165892,165894],{"class":71,"line":401},[69,165889,4269],{"class":82},[69,165891,153113],{"class":86},[69,165893,27280],{"class":82},[69,165895,153118],{"class":86},[69,165897,165898,165900,165902,165904,165907,165909],{"class":71,"line":470},[69,165899,32535],{"class":90},[69,165901,165548],{"class":86},[69,165903,63905],{"class":1022},[69,165905,165906],{"class":86},"], student[",[69,165908,152448],{"class":1022},[69,165910,5901],{"class":86},[29,165912,165913],{},"统计平均分：",[59,165915,165917],{"className":31614,"code":165916,"language":31616,"meta":64,"style":64},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[66,165918,165919,165927,165931,165941,165953,165957,165972],{"__ignoreMap":64},[69,165920,165921,165923,165925],{"class":71,"line":72},[69,165922,158236],{"class":86},[69,165924,1019],{"class":82},[69,165926,48569],{"class":90},[69,165928,165929],{"class":71,"line":79},[69,165930,3644],{"emptyLinePlaceholder":1325},[69,165932,165933,165935,165937,165939],{"class":71,"line":106},[69,165934,4269],{"class":82},[69,165936,153113],{"class":86},[69,165938,27280],{"class":82},[69,165940,153118],{"class":86},[69,165942,165943,165945,165947,165949,165951],{"class":71,"line":116},[69,165944,160283],{"class":86},[69,165946,10719],{"class":82},[69,165948,153125],{"class":86},[69,165950,152448],{"class":1022},[69,165952,34482],{"class":86},[69,165954,165955],{"class":71,"line":133},[69,165956,3644],{"emptyLinePlaceholder":1325},[69,165958,165959,165961,165963,165965,165967,165969],{"class":71,"line":139},[69,165960,164750],{"class":86},[69,165962,1019],{"class":82},[69,165964,164755],{"class":86},[69,165966,1972],{"class":82},[69,165968,8573],{"class":90},[69,165970,165971],{"class":86},"(students)\n",[69,165973,165974,165976,165978,165980,165982,165984,165986,165988,165990,165992],{"class":71,"line":401},[69,165975,31651],{"class":90},[69,165977,1398],{"class":86},[69,165979,1447],{"class":82},[69,165981,164773],{"class":1022},[69,165983,2283],{"class":90},[69,165985,164778],{"class":86},[69,165987,158135],{"class":82},[69,165989,2332],{"class":90},[69,165991,1642],{"class":1022},[69,165993,1404],{"class":86},[29,165995,165996],{},"查找学生：",[59,165998,166000],{"className":31614,"code":165999,"language":31616,"meta":64,"style":64},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[66,166001,166002,166017,166021,166031,166045,166051,166055,166061],{"__ignoreMap":64},[69,166003,166004,166006,166008,166010,166012,166015],{"class":71,"line":72},[69,166005,112799],{"class":86},[69,166007,1019],{"class":82},[69,166009,61831],{"class":90},[69,166011,1398],{"class":86},[69,166013,166014],{"class":1022},"\"请输入学生姓名:\"",[69,166016,1404],{"class":86},[69,166018,166019],{"class":71,"line":79},[69,166020,3644],{"emptyLinePlaceholder":1325},[69,166022,166023,166025,166027,166029],{"class":71,"line":106},[69,166024,4269],{"class":82},[69,166026,153113],{"class":86},[69,166028,27280],{"class":82},[69,166030,153118],{"class":86},[69,166032,166033,166035,166037,166039,166041,166043],{"class":71,"line":116},[69,166034,4345],{"class":82},[69,166036,153125],{"class":86},[69,166038,63905],{"class":1022},[69,166040,5687],{"class":86},[69,166042,4193],{"class":82},[69,166044,161408],{"class":86},[69,166046,166047,166049],{"class":71,"line":133},[69,166048,33687],{"class":90},[69,166050,151018],{"class":86},[69,166052,166053],{"class":71,"line":139},[69,166054,32863],{"class":82},[69,166056,166057,166059],{"class":71,"line":401},[69,166058,2946],{"class":82},[69,166060,4983],{"class":86},[69,166062,166063,166065,166067,166070],{"class":71,"line":470},[69,166064,32535],{"class":90},[69,166066,1398],{"class":86},[69,166068,166069],{"class":1022},"\"没有找到\"",[69,166071,1404],{"class":86},[14,166073,166075],{"id":166074},"_613-容器通用操作","6.13 容器通用操作",[29,166077,166078],{},"长度：",[59,166080,166082],{"className":31614,"code":166081,"language":31616,"meta":64,"style":64},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[66,166083,166084,166103,166113],{"__ignoreMap":64},[69,166085,166086,166088,166091,166093,166095,166097,166099,166101],{"class":71,"line":72},[69,166087,8600],{"class":90},[69,166089,166090],{"class":86},"([",[69,166092,1609],{"class":90},[69,166094,13677],{"class":86},[69,166096,1471],{"class":90},[69,166098,13677],{"class":86},[69,166100,1465],{"class":90},[69,166102,5901],{"class":86},[69,166104,166105,166107,166109,166111],{"class":71,"line":79},[69,166106,8600],{"class":90},[69,166108,1398],{"class":86},[69,166110,156856],{"class":1022},[69,166112,1404],{"class":86},[69,166114,166115,166117,166120,166122,166124,166126],{"class":71,"line":106},[69,166116,8600],{"class":90},[69,166118,166119],{"class":86},"({",[69,166121,63905],{"class":1022},[69,166123,94],{"class":86},[69,166125,150864],{"class":1022},[69,166127,166128],{"class":86},"})\n",[29,166130,166131],{},"最大最小：",[59,166133,166135],{"className":31614,"code":166134,"language":31616,"meta":64,"style":64},"max([1, 2, 3])\nmin([1, 2, 3])\n",[66,166136,166137,166155],{"__ignoreMap":64},[69,166138,166139,166141,166143,166145,166147,166149,166151,166153],{"class":71,"line":72},[69,166140,7257],{"class":90},[69,166142,166090],{"class":86},[69,166144,1609],{"class":90},[69,166146,13677],{"class":86},[69,166148,1471],{"class":90},[69,166150,13677],{"class":86},[69,166152,1465],{"class":90},[69,166154,5901],{"class":86},[69,166156,166157,166160,166162,166164,166166,166168,166170,166172],{"class":71,"line":79},[69,166158,166159],{"class":90},"min",[69,166161,166090],{"class":86},[69,166163,1609],{"class":90},[69,166165,13677],{"class":86},[69,166167,1471],{"class":90},[69,166169,13677],{"class":86},[69,166171,1465],{"class":90},[69,166173,5901],{"class":86},[29,166175,166176],{},"求和：",[59,166178,166180],{"className":31614,"code":166179,"language":31616,"meta":64,"style":64},"sum([1, 2, 3])\n",[66,166181,166182],{"__ignoreMap":64},[69,166183,166184,166187,166189,166191,166193,166195,166197,166199],{"class":71,"line":72},[69,166185,166186],{"class":90},"sum",[69,166188,166090],{"class":86},[69,166190,1609],{"class":90},[69,166192,13677],{"class":86},[69,166194,1471],{"class":90},[69,166196,13677],{"class":86},[69,166198,1465],{"class":90},[69,166200,5901],{"class":86},[29,166202,164447],{},[59,166204,166206],{"className":31614,"code":166205,"language":31616,"meta":64,"style":64},"sorted([3, 1, 2])\n",[66,166207,166208],{"__ignoreMap":64},[69,166209,166210,166213,166215,166217,166219,166221,166223,166225],{"class":71,"line":72},[69,166211,166212],{"class":90},"sorted",[69,166214,166090],{"class":86},[69,166216,1465],{"class":90},[69,166218,13677],{"class":86},[69,166220,1609],{"class":90},[69,166222,13677],{"class":86},[69,166224,1471],{"class":90},[69,166226,5901],{"class":86},[29,166228,166229],{},"类型转换：",[59,166231,166233],{"className":31614,"code":166232,"language":31616,"meta":64,"style":64},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[66,166234,166235,166245,166263],{"__ignoreMap":64},[69,166236,166237,166239,166241,166243],{"class":71,"line":72},[69,166238,155046],{"class":90},[69,166240,1398],{"class":86},[69,166242,156856],{"class":1022},[69,166244,1404],{"class":86},[69,166246,166247,166249,166251,166253,166255,166257,166259,166261],{"class":71,"line":79},[69,166248,156241],{"class":90},[69,166250,166090],{"class":86},[69,166252,1609],{"class":90},[69,166254,13677],{"class":86},[69,166256,1471],{"class":90},[69,166258,13677],{"class":86},[69,166260,1465],{"class":90},[69,166262,5901],{"class":86},[69,166264,166265,166267,166269,166271,166273,166275,166277,166279,166281,166283],{"class":71,"line":106},[69,166266,156266],{"class":90},[69,166268,166090],{"class":86},[69,166270,1609],{"class":90},[69,166272,13677],{"class":86},[69,166274,1609],{"class":90},[69,166276,13677],{"class":86},[69,166278,1471],{"class":90},[69,166280,13677],{"class":86},[69,166282,1465],{"class":90},[69,166284,5901],{"class":86},[29,166286,166287],{},"成员判断：",[59,166289,166291],{"className":31614,"code":166290,"language":31616,"meta":64,"style":64},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[66,166292,166293,166310,166334],{"__ignoreMap":64},[69,166294,166295,166297,166299,166302,166305,166308],{"class":71,"line":72},[69,166296,31651],{"class":90},[69,166298,1398],{"class":86},[69,166300,166301],{"class":1022},"\"a\"",[69,166303,166304],{"class":82}," in",[69,166306,166307],{"class":1022}," \"abc\"",[69,166309,1404],{"class":86},[69,166311,166312,166314,166316,166318,166320,166322,166324,166326,166328,166330,166332],{"class":71,"line":79},[69,166313,31651],{"class":90},[69,166315,1398],{"class":86},[69,166317,1609],{"class":90},[69,166319,166304],{"class":82},[69,166321,53454],{"class":86},[69,166323,1609],{"class":90},[69,166325,13677],{"class":86},[69,166327,1471],{"class":90},[69,166329,13677],{"class":86},[69,166331,1465],{"class":90},[69,166333,5901],{"class":86},[69,166335,166336,166338,166340,166342,166344,166346,166348,166350,166352],{"class":71,"line":106},[69,166337,31651],{"class":90},[69,166339,1398],{"class":86},[69,166341,63905],{"class":1022},[69,166343,166304],{"class":82},[69,166345,5692],{"class":86},[69,166347,63905],{"class":1022},[69,166349,94],{"class":86},[69,166351,150864],{"class":1022},[69,166353,166128],{"class":86},[14,166355,166357],{"id":166356},"_614-推导式","6.14 推导式",[29,166359,166360],{},"推导式用于快速生成容器。",[29,166362,166363],{},"列表推导式：",[59,166365,166367],{"className":31614,"code":166366,"language":31616,"meta":64,"style":64},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[66,166368,166369,166396],{"__ignoreMap":64},[69,166370,166371,166373,166375,166378,166380,166382,166384,166386,166388,166390,166392,166394],{"class":71,"line":72},[69,166372,165076],{"class":86},[69,166374,1019],{"class":82},[69,166376,166377],{"class":86}," [i ",[69,166379,4269],{"class":82},[69,166381,10680],{"class":86},[69,166383,27280],{"class":82},[69,166385,33679],{"class":90},[69,166387,1398],{"class":86},[69,166389,1609],{"class":90},[69,166391,13677],{"class":86},[69,166393,1733],{"class":90},[69,166395,98521],{"class":86},[69,166397,166398,166400],{"class":71,"line":79},[69,166399,31651],{"class":90},[69,166401,165292],{"class":86},[29,166403,166404],{},"带条件：",[59,166406,166408],{"className":31614,"code":166407,"language":31616,"meta":64,"style":64},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[66,166409,166410,166451],{"__ignoreMap":64},[69,166411,166412,166415,166417,166419,166421,166423,166425,166427,166429,166431,166433,166435,166437,166439,166441,166443,166445,166447,166449],{"class":71,"line":72},[69,166413,166414],{"class":86},"even_nums ",[69,166416,1019],{"class":82},[69,166418,166377],{"class":86},[69,166420,4269],{"class":82},[69,166422,10680],{"class":86},[69,166424,27280],{"class":82},[69,166426,33679],{"class":90},[69,166428,1398],{"class":86},[69,166430,1609],{"class":90},[69,166432,13677],{"class":86},[69,166434,1726],{"class":90},[69,166436,14955],{"class":86},[69,166438,2782],{"class":82},[69,166440,10680],{"class":86},[69,166442,127],{"class":82},[69,166444,15995],{"class":90},[69,166446,102780],{"class":82},[69,166448,5337],{"class":90},[69,166450,34482],{"class":86},[69,166452,166453,166455],{"class":71,"line":79},[69,166454,31651],{"class":90},[69,166456,166457],{"class":86},"(even_nums)\n",[29,166459,166460],{},"字典推导式：",[59,166462,166464],{"className":31614,"code":166463,"language":31616,"meta":64,"style":64},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[66,166465,166466,166500],{"__ignoreMap":64},[69,166467,166468,166471,166473,166476,166478,166480,166483,166485,166487,166489,166491,166493,166495,166497],{"class":71,"line":72},[69,166469,166470],{"class":86},"squares ",[69,166472,1019],{"class":82},[69,166474,166475],{"class":86}," {i: i ",[69,166477,11903],{"class":82},[69,166479,15995],{"class":90},[69,166481,166482],{"class":82}," for",[69,166484,10680],{"class":86},[69,166486,27280],{"class":82},[69,166488,33679],{"class":90},[69,166490,1398],{"class":86},[69,166492,1609],{"class":90},[69,166494,13677],{"class":86},[69,166496,1733],{"class":90},[69,166498,166499],{"class":86},")}\n",[69,166501,166502,166504],{"class":71,"line":79},[69,166503,31651],{"class":90},[69,166505,166506],{"class":86},"(squares)\n",[29,166508,166509],{},"集合推导式：",[59,166511,166513],{"className":31614,"code":166512,"language":31616,"meta":64,"style":64},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[66,166514,166515,166536],{"__ignoreMap":64},[69,166516,166517,166520,166522,166525,166527,166529,166531,166534],{"class":71,"line":72},[69,166518,166519],{"class":86},"chars ",[69,166521,1019],{"class":82},[69,166523,166524],{"class":86}," {ch ",[69,166526,4269],{"class":82},[69,166528,160668],{"class":86},[69,166530,27280],{"class":82},[69,166532,166533],{"class":1022}," \"hello\"",[69,166535,142],{"class":86},[69,166537,166538,166540],{"class":71,"line":79},[69,166539,31651],{"class":90},[69,166541,166542],{"class":86},"(chars)\n",[29,166544,166545],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166547,166549],{"id":166548},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[59,166551,166553],{"className":31614,"code":166552,"language":31616,"meta":64,"style":64},"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",[66,166554,166555,166563,166583,166603,166623,166643,166647,166651,166659,166673,166682,166686,166696,166708,166712,166732,166741,166745,166761,166766,166770,166784,166788,166810,166846],{"__ignoreMap":64},[69,166556,166557,166559,166561],{"class":71,"line":72},[69,166558,160692],{"class":86},[69,166560,1019],{"class":82},[69,166562,56674],{"class":86},[69,166564,166565,166567,166569,166571,166573,166575,166577,166579,166581],{"class":71,"line":79},[69,166566,149361],{"class":86},[69,166568,63905],{"class":1022},[69,166570,94],{"class":86},[69,166572,150864],{"class":1022},[69,166574,13677],{"class":86},[69,166576,152448],{"class":1022},[69,166578,94],{"class":86},[69,166580,2375],{"class":90},[69,166582,6174],{"class":86},[69,166584,166585,166587,166589,166591,166593,166595,166597,166599,166601],{"class":71,"line":106},[69,166586,149361],{"class":86},[69,166588,63905],{"class":1022},[69,166590,94],{"class":86},[69,166592,151912],{"class":1022},[69,166594,13677],{"class":86},[69,166596,152448],{"class":1022},[69,166598,94],{"class":86},[69,166600,2198],{"class":90},[69,166602,6174],{"class":86},[69,166604,166605,166607,166609,166611,166613,166615,166617,166619,166621],{"class":71,"line":116},[69,166606,149361],{"class":86},[69,166608,63905],{"class":1022},[69,166610,94],{"class":86},[69,166612,160707],{"class":1022},[69,166614,13677],{"class":86},[69,166616,152448],{"class":1022},[69,166618,94],{"class":86},[69,166620,1795],{"class":90},[69,166622,6174],{"class":86},[69,166624,166625,166627,166629,166631,166633,166635,166637,166639,166641],{"class":71,"line":133},[69,166626,149361],{"class":86},[69,166628,63905],{"class":1022},[69,166630,94],{"class":86},[69,166632,164286],{"class":1022},[69,166634,13677],{"class":86},[69,166636,152448],{"class":1022},[69,166638,94],{"class":86},[69,166640,2269],{"class":90},[69,166642,6174],{"class":86},[69,166644,166645],{"class":71,"line":139},[69,166646,34482],{"class":86},[69,166648,166649],{"class":71,"line":401},[69,166650,3644],{"emptyLinePlaceholder":1325},[69,166652,166653,166655,166657],{"class":71,"line":470},[69,166654,158236],{"class":86},[69,166656,1019],{"class":82},[69,166658,48569],{"class":90},[69,166660,166661,166664,166666,166669,166671],{"class":71,"line":475},[69,166662,166663],{"class":86},"max_student ",[69,166665,1019],{"class":82},[69,166667,166668],{"class":86}," students[",[69,166670,1583],{"class":90},[69,166672,34482],{"class":86},[69,166674,166675,166678,166680],{"class":71,"line":482},[69,166676,166677],{"class":86},"passed ",[69,166679,1019],{"class":82},[69,166681,53066],{"class":86},[69,166683,166684],{"class":71,"line":497},[69,166685,3644],{"emptyLinePlaceholder":1325},[69,166687,166688,166690,166692,166694],{"class":71,"line":502},[69,166689,4269],{"class":82},[69,166691,153113],{"class":86},[69,166693,27280],{"class":82},[69,166695,153118],{"class":86},[69,166697,166698,166700,166702,166704,166706],{"class":71,"line":509},[69,166699,160283],{"class":86},[69,166701,10719],{"class":82},[69,166703,153125],{"class":86},[69,166705,152448],{"class":1022},[69,166707,34482],{"class":86},[69,166709,166710],{"class":71,"line":524},[69,166711,3644],{"emptyLinePlaceholder":1325},[69,166713,166714,166716,166718,166720,166722,166724,166727,166729],{"class":71,"line":2888},[69,166715,4345],{"class":82},[69,166717,153125],{"class":86},[69,166719,152448],{"class":1022},[69,166721,5687],{"class":86},[69,166723,2346],{"class":82},[69,166725,166726],{"class":86}," max_student[",[69,166728,152448],{"class":1022},[69,166730,166731],{"class":86},"]:\n",[69,166733,166734,166737,166739],{"class":71,"line":2893},[69,166735,166736],{"class":86},"        max_student ",[69,166738,1019],{"class":82},[69,166740,153141],{"class":86},[69,166742,166743],{"class":71,"line":2899},[69,166744,3644],{"emptyLinePlaceholder":1325},[69,166746,166747,166749,166751,166753,166755,166757,166759],{"class":71,"line":2919},[69,166748,4345],{"class":82},[69,166750,153125],{"class":86},[69,166752,152448],{"class":1022},[69,166754,5687],{"class":86},[69,166756,2955],{"class":82},[69,166758,158813],{"class":90},[69,166760,4983],{"class":86},[69,166762,166763],{"class":71,"line":2924},[69,166764,166765],{"class":86},"        passed.append(student)\n",[69,166767,166768],{"class":71,"line":2938},[69,166769,3644],{"emptyLinePlaceholder":1325},[69,166771,166772,166774,166776,166778,166780,166782],{"class":71,"line":2943},[69,166773,164750],{"class":86},[69,166775,1019],{"class":82},[69,166777,164755],{"class":86},[69,166779,1972],{"class":82},[69,166781,8573],{"class":90},[69,166783,165971],{"class":86},[69,166785,166786],{"class":71,"line":2972},[69,166787,3644],{"emptyLinePlaceholder":1325},[69,166789,166790,166792,166794,166796,166798,166800,166802,166804,166806,166808],{"class":71,"line":2977},[69,166791,31651],{"class":90},[69,166793,1398],{"class":86},[69,166795,1447],{"class":82},[69,166797,164773],{"class":1022},[69,166799,2283],{"class":90},[69,166801,164778],{"class":86},[69,166803,158135],{"class":82},[69,166805,2332],{"class":90},[69,166807,1642],{"class":1022},[69,166809,1404],{"class":86},[69,166811,166812,166814,166816,166818,166821,166823,166826,166828,166830,166832,166834,166836,166838,166840,166842,166844],{"class":71,"line":2994},[69,166813,31651],{"class":90},[69,166815,1398],{"class":86},[69,166817,1447],{"class":82},[69,166819,166820],{"class":1022},"\"最高分学生:",[69,166822,2283],{"class":90},[69,166824,166825],{"class":86},"max_student[",[69,166827,153858],{"class":1022},[69,166829,2326],{"class":86},[69,166831,2332],{"class":90},[69,166833,5692],{"class":90},[69,166835,166825],{"class":86},[69,166837,153896],{"class":1022},[69,166839,2326],{"class":86},[69,166841,2332],{"class":90},[69,166843,1642],{"class":1022},[69,166845,1404],{"class":86},[69,166847,166848,166850,166852,166854,166857,166860,166863,166865,166867],{"class":71,"line":2999},[69,166849,31651],{"class":90},[69,166851,1398],{"class":86},[69,166853,1447],{"class":82},[69,166855,166856],{"class":1022},"\"及格人数:",[69,166858,166859],{"class":90},"{len",[69,166861,166862],{"class":86},"(passed)",[69,166864,2332],{"class":90},[69,166866,1642],{"class":1022},[69,166868,1404],{"class":86},[14,166870,166872],{"id":166871},"_616-易错点","6.16 易错点",[37,166874,166875,166878,166881,166884,166890,166899],{},[40,166876,166877],{},"列表可变，元组和字符串不可变。",[40,166879,166880],{},"切片结束位置不包含。",[40,166882,166883],{},"字典通过 key 取值，不是通过索引。",[40,166885,166886,166887,29621],{},"空集合要用 ",[66,166888,166889],{},"set()",[40,166891,105587,166892,166895,166896,29621],{},[66,166893,166894],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[66,166897,166898],{},"get()",[40,166900,166901],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166903,166905],{"id":166904},"_617-本章练习","6.17 本章练习",[37,166907,166908,166911,166914,166917,166920],{},[40,166909,166910],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[40,166912,166913],{},"输入一句话，统计每个字符出现次数。",[40,166915,166916],{},"使用集合去除列表中的重复元素。",[40,166918,166919],{},"使用字典保存一个学生的信息，并实现修改成绩。",[40,166921,166922],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1297,166924,166925],{},"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":64,"searchDepth":79,"depth":79,"links":166927},[166928,166929,166930,166931,166932,166933,166934,166935,166936,166937,166938,166939,166940,166941,166942,166943,166944],{"id":163908,"depth":79,"text":163909},{"id":164025,"depth":79,"text":164026},{"id":164115,"depth":79,"text":164116},{"id":164239,"depth":79,"text":164240},{"id":164602,"depth":79,"text":164603},{"id":164789,"depth":79,"text":164790},{"id":164908,"depth":79,"text":164909},{"id":165050,"depth":79,"text":165051},{"id":165237,"depth":79,"text":165238},{"id":165481,"depth":79,"text":165482},{"id":165691,"depth":79,"text":165692},{"id":165776,"depth":79,"text":165777},{"id":166074,"depth":79,"text":166075},{"id":166356,"depth":79,"text":166357},{"id":166548,"depth":79,"text":166549},{"id":166871,"depth":79,"text":166872},{"id":166904,"depth":79,"text":166905},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163900,"description":1322},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166951,"title":166952,"body":166953,"description":1322,"extension":1323,"meta":169125,"navigation":1325,"path":169126,"seo":169127,"stem":169128,"__hash__":169129},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166954,"toc":169100},[166955,166958,166962,166965,167045,167048,167069,167072,167076,167079,167141,167144,167161,167165,167168,167213,167215,167223,167227,167230,167312,167315,167318,167343,167346,167369,167373,167376,167378,167440,167443,167445,167496,167500,167504,167510,167615,167619,167625,167696,167700,167703,167771,167774,167854,167858,167864,167900,167903,167906,168016,168022,168026,168029,168101,168104,168108,168112,168117,168179,168183,168188,168256,168260,168265,168381,168385,168388,168468,168471,168475,168478,168582,168584,168599,168602,168606,168744,168752,168756,168758,168769,168771,169029,169033,169065,169069,169097],[10,166956,166952],{"id":166957},"_7-函数进阶",[14,166959,166961],{"id":166960},"_71-多返回值","7.1 多返回值",[29,166963,166964],{},"Python 函数可以返回多个值，本质上返回的是元组。",[59,166966,166968],{"className":31614,"code":166967,"language":31616,"meta":64,"style":64},"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",[66,166969,166970,166979,166987,166995,167004,167011,167015,167019,167028,167034],{"__ignoreMap":64},[69,166971,166972,166974,166977],{"class":71,"line":72},[69,166973,33183],{"class":82},[69,166975,166976],{"class":109}," get_info",[69,166978,33189],{"class":86},[69,166980,166981,166983,166985],{"class":71,"line":79},[69,166982,153346],{"class":86},[69,166984,1019],{"class":82},[69,166986,150329],{"class":1022},[69,166988,166989,166991,166993],{"class":71,"line":106},[69,166990,153362],{"class":86},[69,166992,1019],{"class":82},[69,166994,147527],{"class":90},[69,166996,166997,166999,167001],{"class":71,"line":116},[69,166998,153377],{"class":86},[69,167000,1019],{"class":82},[69,167002,167003],{"class":90}," 95\n",[69,167005,167006,167008],{"class":71,"line":133},[69,167007,5334],{"class":82},[69,167009,167010],{"class":86}," name, age, score\n",[69,167012,167013],{"class":71,"line":139},[69,167014,3644],{"emptyLinePlaceholder":1325},[69,167016,167017],{"class":71,"line":401},[69,167018,3644],{"emptyLinePlaceholder":1325},[69,167020,167021,167023,167025],{"class":71,"line":470},[69,167022,162282],{"class":86},[69,167024,1019],{"class":82},[69,167026,167027],{"class":86}," get_info()\n",[69,167029,167030,167032],{"class":71,"line":475},[69,167031,31651],{"class":90},[69,167033,77806],{"class":86},[69,167035,167036,167038,167040,167042],{"class":71,"line":482},[69,167037,31651],{"class":90},[69,167039,1398],{"class":86},[69,167041,104328],{"class":90},[69,167043,167044],{"class":86},"(result))\n",[29,167046,167047],{},"可以直接解包：",[59,167049,167051],{"className":31614,"code":167050,"language":31616,"meta":64,"style":64},"name, age, score = get_info()\nprint(name, age, score)\n",[66,167052,167053,167062],{"__ignoreMap":64},[69,167054,167055,167058,167060],{"class":71,"line":72},[69,167056,167057],{"class":86},"name, age, score ",[69,167059,1019],{"class":82},[69,167061,167027],{"class":86},[69,167063,167064,167066],{"class":71,"line":79},[69,167065,31651],{"class":90},[69,167067,167068],{"class":86},"(name, age, score)\n",[29,167070,167071],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167073,167075],{"id":167074},"_72-位置参数","7.2 位置参数",[29,167077,167078],{},"位置参数按顺序传递。",[59,167080,167082],{"className":31614,"code":167081,"language":31616,"meta":64,"style":64},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[66,167083,167084,167092,167120,167124,167128],{"__ignoreMap":64},[69,167085,167086,167088,167090],{"class":71,"line":72},[69,167087,33183],{"class":82},[69,167089,150348],{"class":109},[69,167091,150351],{"class":86},[69,167093,167094,167096,167098,167100,167102,167104,167106,167108,167110,167112,167114,167116,167118],{"class":71,"line":79},[69,167095,32535],{"class":90},[69,167097,1398],{"class":86},[69,167099,1447],{"class":82},[69,167101,150362],{"class":1022},[69,167103,2283],{"class":90},[69,167105,81031],{"class":86},[69,167107,2332],{"class":90},[69,167109,150371],{"class":1022},[69,167111,2283],{"class":90},[69,167113,71446],{"class":86},[69,167115,2332],{"class":90},[69,167117,150380],{"class":1022},[69,167119,1404],{"class":86},[69,167121,167122],{"class":71,"line":106},[69,167123,3644],{"emptyLinePlaceholder":1325},[69,167125,167126],{"class":71,"line":116},[69,167127,3644],{"emptyLinePlaceholder":1325},[69,167129,167130,167133,167135,167137,167139],{"class":71,"line":133},[69,167131,167132],{"class":86},"introduce(",[69,167134,150864],{"class":1022},[69,167136,13677],{"class":86},[69,167138,2037],{"class":90},[69,167140,1404],{"class":86},[29,167142,167143],{},"顺序错了就会得到错误含义：",[59,167145,167147],{"className":31614,"code":167146,"language":31616,"meta":64,"style":64},"introduce(18, \"小明\")\n",[66,167148,167149],{"__ignoreMap":64},[69,167150,167151,167153,167155,167157,167159],{"class":71,"line":72},[69,167152,167132],{"class":86},[69,167154,2037],{"class":90},[69,167156,13677],{"class":86},[69,167158,150864],{"class":1022},[69,167160,1404],{"class":86},[14,167162,167164],{"id":167163},"_73-关键字参数","7.3 关键字参数",[29,167166,167167],{},"关键字参数按参数名传递。",[59,167169,167171],{"className":31614,"code":167170,"language":31616,"meta":64,"style":64},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[66,167172,167173,167193],{"__ignoreMap":64},[69,167174,167175,167177,167179,167181,167183,167185,167187,167189,167191],{"class":71,"line":72},[69,167176,167132],{"class":86},[69,167178,81031],{"class":6458},[69,167180,1019],{"class":82},[69,167182,150864],{"class":1022},[69,167184,13677],{"class":86},[69,167186,71446],{"class":6458},[69,167188,1019],{"class":82},[69,167190,2037],{"class":90},[69,167192,1404],{"class":86},[69,167194,167195,167197,167199,167201,167203,167205,167207,167209,167211],{"class":71,"line":79},[69,167196,167132],{"class":86},[69,167198,71446],{"class":6458},[69,167200,1019],{"class":82},[69,167202,2037],{"class":90},[69,167204,13677],{"class":86},[69,167206,81031],{"class":6458},[69,167208,1019],{"class":82},[69,167210,150864],{"class":1022},[69,167212,1404],{"class":86},[29,167214,119155],{},[37,167216,167217,167220],{},[40,167218,167219],{},"顺序不容易错。",[40,167221,167222],{},"调用时可读性更强。",[14,167224,167226],{"id":167225},"_74-默认参数","7.4 默认参数",[29,167228,167229],{},"默认参数给参数设置默认值。",[59,167231,167233],{"className":31614,"code":167232,"language":31616,"meta":64,"style":64},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[66,167234,167235,167251,167281,167285,167289,167299],{"__ignoreMap":64},[69,167236,167237,167239,167241,167244,167246,167249],{"class":71,"line":72},[69,167238,33183],{"class":82},[69,167240,123314],{"class":109},[69,167242,167243],{"class":86},"(host, port",[69,167245,1019],{"class":82},[69,167247,167248],{"class":90},"3306",[69,167250,32022],{"class":86},[69,167252,167253,167255,167257,167259,167262,167264,167266,167268,167270,167272,167275,167277,167279],{"class":71,"line":79},[69,167254,32535],{"class":90},[69,167256,1398],{"class":86},[69,167258,1447],{"class":82},[69,167260,167261],{"class":1022},"\"连接",[69,167263,2283],{"class":90},[69,167265,28631],{"class":86},[69,167267,2332],{"class":90},[69,167269,2246],{"class":1022},[69,167271,2283],{"class":90},[69,167273,167274],{"class":86},"port",[69,167276,2332],{"class":90},[69,167278,1642],{"class":1022},[69,167280,1404],{"class":86},[69,167282,167283],{"class":71,"line":106},[69,167284,3644],{"emptyLinePlaceholder":1325},[69,167286,167287],{"class":71,"line":116},[69,167288,3644],{"emptyLinePlaceholder":1325},[69,167290,167291,167294,167297],{"class":71,"line":133},[69,167292,167293],{"class":86},"connect(",[69,167295,167296],{"class":1022},"\"localhost\"",[69,167298,1404],{"class":86},[69,167300,167301,167303,167305,167307,167310],{"class":71,"line":139},[69,167302,167293],{"class":86},[69,167304,167296],{"class":1022},[69,167306,13677],{"class":86},[69,167308,167309],{"class":90},"6379",[69,167311,1404],{"class":86},[29,167313,167314],{},"注意：默认参数必须放在非默认参数后面。",[29,167316,167317],{},"错误：",[59,167319,167321],{"className":31614,"code":167320,"language":31616,"meta":64,"style":64},"def connect(port=3306, host):\n    pass\n",[66,167322,167323,167339],{"__ignoreMap":64},[69,167324,167325,167327,167329,167332,167334,167336],{"class":71,"line":72},[69,167326,33183],{"class":82},[69,167328,123314],{"class":109},[69,167330,167331],{"class":86},"(port",[69,167333,1019],{"class":82},[69,167335,167248],{"class":90},[69,167337,167338],{"class":86},", host):\n",[69,167340,167341],{"class":71,"line":79},[69,167342,150513],{"class":82},[29,167344,167345],{},"正确：",[59,167347,167349],{"className":31614,"code":167348,"language":31616,"meta":64,"style":64},"def connect(host, port=3306):\n    pass\n",[66,167350,167351,167365],{"__ignoreMap":64},[69,167352,167353,167355,167357,167359,167361,167363],{"class":71,"line":72},[69,167354,33183],{"class":82},[69,167356,123314],{"class":109},[69,167358,167243],{"class":86},[69,167360,1019],{"class":82},[69,167362,167248],{"class":90},[69,167364,32022],{"class":86},[69,167366,167367],{"class":71,"line":79},[69,167368,150513],{"class":82},[14,167370,167372],{"id":167371},"_75-默认参数的坑","7.5 默认参数的坑",[29,167374,167375],{},"不要使用可变对象作为默认参数。",[29,167377,158599],{},[59,167379,167381],{"className":31614,"code":167380,"language":31616,"meta":64,"style":64},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[66,167382,167383,167398,167403,167410,167414,167418,167429],{"__ignoreMap":64},[69,167384,167385,167387,167390,167393,167395],{"class":71,"line":72},[69,167386,33183],{"class":82},[69,167388,167389],{"class":109}," add_item",[69,167391,167392],{"class":86},"(item, items",[69,167394,1019],{"class":82},[69,167396,167397],{"class":86},"[]):\n",[69,167399,167400],{"class":71,"line":79},[69,167401,167402],{"class":86},"    items.append(item)\n",[69,167404,167405,167407],{"class":71,"line":106},[69,167406,5334],{"class":82},[69,167408,167409],{"class":86}," items\n",[69,167411,167412],{"class":71,"line":116},[69,167413,3644],{"emptyLinePlaceholder":1325},[69,167415,167416],{"class":71,"line":133},[69,167417,3644],{"emptyLinePlaceholder":1325},[69,167419,167420,167422,167425,167427],{"class":71,"line":139},[69,167421,31651],{"class":90},[69,167423,167424],{"class":86},"(add_item(",[69,167426,166301],{"class":1022},[69,167428,31733],{"class":86},[69,167430,167431,167433,167435,167438],{"class":71,"line":401},[69,167432,31651],{"class":90},[69,167434,167424],{"class":86},[69,167436,167437],{"class":1022},"\"b\"",[69,167439,31733],{"class":86},[29,167441,167442],{},"第二次调用会复用第一次的列表。",[29,167444,156864],{},[59,167446,167448],{"className":31614,"code":167447,"language":31616,"meta":64,"style":64},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[66,167449,167450,167464,167477,167486,167490],{"__ignoreMap":64},[69,167451,167452,167454,167456,167458,167460,167462],{"class":71,"line":72},[69,167453,33183],{"class":82},[69,167455,167389],{"class":109},[69,167457,167392],{"class":86},[69,167459,1019],{"class":82},[69,167461,96907],{"class":90},[69,167463,32022],{"class":86},[69,167465,167466,167468,167471,167473,167475],{"class":71,"line":79},[69,167467,4345],{"class":82},[69,167469,167470],{"class":86}," items ",[69,167472,40163],{"class":82},[69,167474,40169],{"class":90},[69,167476,4983],{"class":86},[69,167478,167479,167482,167484],{"class":71,"line":106},[69,167480,167481],{"class":86},"        items ",[69,167483,1019],{"class":82},[69,167485,53066],{"class":86},[69,167487,167488],{"class":71,"line":116},[69,167489,167402],{"class":86},[69,167491,167492,167494],{"class":71,"line":133},[69,167493,5334],{"class":82},[69,167495,167409],{"class":86},[14,167497,167499],{"id":167498},"_76-不定长参数","7.6 不定长参数",[19,167501,167503],{"id":167502},"_761-args","7.6.1 *args",[29,167505,167506,167509],{},[66,167507,167508],{},"*args"," 接收任意数量的位置参数，得到元组。",[59,167511,167513],{"className":31614,"code":167512,"language":31616,"meta":64,"style":64},"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",[66,167514,167515,167528,167536,167547,167556,167562,167566,167570,167589],{"__ignoreMap":64},[69,167516,167517,167519,167521,167523,167525],{"class":71,"line":72},[69,167518,33183],{"class":82},[69,167520,6451],{"class":109},[69,167522,1398],{"class":86},[69,167524,1843],{"class":82},[69,167526,167527],{"class":86},"args):\n",[69,167529,167530,167532,167534],{"class":71,"line":79},[69,167531,160283],{"class":86},[69,167533,1019],{"class":82},[69,167535,48569],{"class":90},[69,167537,167538,167540,167542,167544],{"class":71,"line":106},[69,167539,4445],{"class":82},[69,167541,157156],{"class":86},[69,167543,27280],{"class":82},[69,167545,167546],{"class":86}," args:\n",[69,167548,167549,167551,167553],{"class":71,"line":116},[69,167550,160958],{"class":86},[69,167552,10719],{"class":82},[69,167554,167555],{"class":86}," num\n",[69,167557,167558,167560],{"class":71,"line":133},[69,167559,5334],{"class":82},[69,167561,163263],{"class":86},[69,167563,167564],{"class":71,"line":139},[69,167565,3644],{"emptyLinePlaceholder":1325},[69,167567,167568],{"class":71,"line":401},[69,167569,3644],{"emptyLinePlaceholder":1325},[69,167571,167572,167574,167577,167579,167581,167583,167585,167587],{"class":71,"line":470},[69,167573,31651],{"class":90},[69,167575,167576],{"class":86},"(add(",[69,167578,1609],{"class":90},[69,167580,13677],{"class":86},[69,167582,1471],{"class":90},[69,167584,13677],{"class":86},[69,167586,1465],{"class":90},[69,167588,31733],{"class":86},[69,167590,167591,167593,167595,167597,167599,167601,167603,167605,167607,167609,167611,167613],{"class":71,"line":475},[69,167592,31651],{"class":90},[69,167594,167576],{"class":86},[69,167596,1609],{"class":90},[69,167598,13677],{"class":86},[69,167600,1471],{"class":90},[69,167602,13677],{"class":86},[69,167604,1465],{"class":90},[69,167606,13677],{"class":86},[69,167608,1684],{"class":90},[69,167610,13677],{"class":86},[69,167612,1709],{"class":90},[69,167614,31733],{"class":86},[19,167616,167618],{"id":167617},"_762-kwargs","7.6.2 **kwargs",[29,167620,167621,167624],{},[66,167622,167623],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[59,167626,167628],{"className":31614,"code":167627,"language":31616,"meta":64,"style":64},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[66,167629,167630,167643,167654,167660,167664,167668],{"__ignoreMap":64},[69,167631,167632,167634,167636,167638,167640],{"class":71,"line":72},[69,167633,33183],{"class":82},[69,167635,162921],{"class":109},[69,167637,1398],{"class":86},[69,167639,11903],{"class":82},[69,167641,167642],{"class":86},"kwargs):\n",[69,167644,167645,167647,167649,167651],{"class":71,"line":79},[69,167646,4445],{"class":82},[69,167648,165761],{"class":86},[69,167650,27280],{"class":82},[69,167652,167653],{"class":86}," kwargs.items():\n",[69,167655,167656,167658],{"class":71,"line":106},[69,167657,33687],{"class":90},[69,167659,165773],{"class":86},[69,167661,167662],{"class":71,"line":116},[69,167663,3644],{"emptyLinePlaceholder":1325},[69,167665,167666],{"class":71,"line":133},[69,167667,3644],{"emptyLinePlaceholder":1325},[69,167669,167670,167672,167674,167676,167678,167680,167682,167684,167686,167688,167690,167692,167694],{"class":71,"line":139},[69,167671,162986],{"class":86},[69,167673,81031],{"class":6458},[69,167675,1019],{"class":82},[69,167677,150864],{"class":1022},[69,167679,13677],{"class":86},[69,167681,71446],{"class":6458},[69,167683,1019],{"class":82},[69,167685,2037],{"class":90},[69,167687,13677],{"class":86},[69,167689,71497],{"class":6458},[69,167691,1019],{"class":82},[69,167693,70494],{"class":1022},[69,167695,1404],{"class":86},[14,167697,167699],{"id":167698},"_77-参数解包","7.7 参数解包",[29,167701,167702],{},"列表或元组解包为位置参数：",[59,167704,167706],{"className":31614,"code":167705,"language":31616,"meta":64,"style":64},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[66,167707,167708,167717,167732,167736,167740,167760],{"__ignoreMap":64},[69,167709,167710,167712,167714],{"class":71,"line":72},[69,167711,33183],{"class":82},[69,167713,6451],{"class":109},[69,167715,167716],{"class":86},"(a, b, c):\n",[69,167718,167719,167721,167723,167725,167727,167729],{"class":71,"line":79},[69,167720,5334],{"class":82},[69,167722,12111],{"class":86},[69,167724,1869],{"class":82},[69,167726,12124],{"class":86},[69,167728,1869],{"class":82},[69,167730,167731],{"class":86}," c\n",[69,167733,167734],{"class":71,"line":106},[69,167735,3644],{"emptyLinePlaceholder":1325},[69,167737,167738],{"class":71,"line":116},[69,167739,3644],{"emptyLinePlaceholder":1325},[69,167741,167742,167744,167746,167748,167750,167752,167754,167756,167758],{"class":71,"line":133},[69,167743,165076],{"class":86},[69,167745,1019],{"class":82},[69,167747,53454],{"class":86},[69,167749,1609],{"class":90},[69,167751,13677],{"class":86},[69,167753,1471],{"class":90},[69,167755,13677],{"class":86},[69,167757,1465],{"class":90},[69,167759,34482],{"class":86},[69,167761,167762,167764,167766,167768],{"class":71,"line":139},[69,167763,31651],{"class":90},[69,167765,167576],{"class":86},[69,167767,1843],{"class":82},[69,167769,167770],{"class":86},"nums))\n",[29,167772,167773],{},"字典解包为关键字参数：",[59,167775,167777],{"className":31614,"code":167776,"language":31616,"meta":64,"style":64},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[66,167778,167779,167787,167813,167817,167821,167845],{"__ignoreMap":64},[69,167780,167781,167783,167785],{"class":71,"line":72},[69,167782,33183],{"class":82},[69,167784,150348],{"class":109},[69,167786,150351],{"class":86},[69,167788,167789,167791,167793,167795,167797,167799,167801,167803,167805,167807,167809,167811],{"class":71,"line":79},[69,167790,32535],{"class":90},[69,167792,1398],{"class":86},[69,167794,1447],{"class":82},[69,167796,1642],{"class":1022},[69,167798,2283],{"class":90},[69,167800,81031],{"class":86},[69,167802,2332],{"class":90},[69,167804,5692],{"class":90},[69,167806,71446],{"class":86},[69,167808,2332],{"class":90},[69,167810,1642],{"class":1022},[69,167812,1404],{"class":86},[69,167814,167815],{"class":71,"line":106},[69,167816,3644],{"emptyLinePlaceholder":1325},[69,167818,167819],{"class":71,"line":116},[69,167820,3644],{"emptyLinePlaceholder":1325},[69,167822,167823,167825,167827,167829,167831,167833,167835,167837,167839,167841,167843],{"class":71,"line":133},[69,167824,117535],{"class":86},[69,167826,1019],{"class":82},[69,167828,5692],{"class":86},[69,167830,63905],{"class":1022},[69,167832,94],{"class":86},[69,167834,150864],{"class":1022},[69,167836,13677],{"class":86},[69,167838,70349],{"class":1022},[69,167840,94],{"class":86},[69,167842,2037],{"class":90},[69,167844,142],{"class":86},[69,167846,167847,167849,167851],{"class":71,"line":139},[69,167848,167132],{"class":86},[69,167850,11903],{"class":82},[69,167852,167853],{"class":86},"info)\n",[14,167855,167857],{"id":167856},"_78-匿名函数lambda","7.8 匿名函数lambda",[29,167859,167860,167863],{},[66,167861,167862],{},"lambda"," 用于定义简单匿名函数。",[59,167865,167867],{"className":31614,"code":167866,"language":31616,"meta":64,"style":64},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[66,167868,167869,167886],{"__ignoreMap":64},[69,167870,167871,167874,167876,167879,167882,167884],{"class":71,"line":72},[69,167872,167873],{"class":86},"add ",[69,167875,1019],{"class":82},[69,167877,167878],{"class":82}," lambda",[69,167880,167881],{"class":86}," a, b: a ",[69,167883,1869],{"class":82},[69,167885,152080],{"class":86},[69,167887,167888,167890,167892,167894,167896,167898],{"class":71,"line":79},[69,167889,31651],{"class":90},[69,167891,167576],{"class":86},[69,167893,1609],{"class":90},[69,167895,13677],{"class":86},[69,167897,1471],{"class":90},[69,167899,31733],{"class":86},[29,167901,167902],{},"常和排序、过滤等函数一起使用。",[29,167904,167905],{},"按分数排序：",[59,167907,167909],{"className":31614,"code":167908,"language":31616,"meta":64,"style":64},"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",[66,167910,167911,167919,167939,167959,167979,167983,167987,168010],{"__ignoreMap":64},[69,167912,167913,167915,167917],{"class":71,"line":72},[69,167914,160692],{"class":86},[69,167916,1019],{"class":82},[69,167918,56674],{"class":86},[69,167920,167921,167923,167925,167927,167929,167931,167933,167935,167937],{"class":71,"line":79},[69,167922,149361],{"class":86},[69,167924,63905],{"class":1022},[69,167926,94],{"class":86},[69,167928,150864],{"class":1022},[69,167930,13677],{"class":86},[69,167932,152448],{"class":1022},[69,167934,94],{"class":86},[69,167936,2375],{"class":90},[69,167938,6174],{"class":86},[69,167940,167941,167943,167945,167947,167949,167951,167953,167955,167957],{"class":71,"line":106},[69,167942,149361],{"class":86},[69,167944,63905],{"class":1022},[69,167946,94],{"class":86},[69,167948,151912],{"class":1022},[69,167950,13677],{"class":86},[69,167952,152448],{"class":1022},[69,167954,94],{"class":86},[69,167956,2198],{"class":90},[69,167958,6174],{"class":86},[69,167960,167961,167963,167965,167967,167969,167971,167973,167975,167977],{"class":71,"line":116},[69,167962,149361],{"class":86},[69,167964,63905],{"class":1022},[69,167966,94],{"class":86},[69,167968,160707],{"class":1022},[69,167970,13677],{"class":86},[69,167972,152448],{"class":1022},[69,167974,94],{"class":86},[69,167976,1795],{"class":90},[69,167978,6174],{"class":86},[69,167980,167981],{"class":71,"line":133},[69,167982,34482],{"class":86},[69,167984,167985],{"class":71,"line":139},[69,167986,3644],{"emptyLinePlaceholder":1325},[69,167988,167989,167992,167994,167996,167998,168000,168002,168004,168006,168008],{"class":71,"line":401},[69,167990,167991],{"class":86},"students.sort(",[69,167993,154922],{"class":6458},[69,167995,154925],{"class":82},[69,167997,154928],{"class":86},[69,167999,152448],{"class":1022},[69,168001,113423],{"class":86},[69,168003,164504],{"class":6458},[69,168005,1019],{"class":82},[69,168007,32712],{"class":90},[69,168009,1404],{"class":86},[69,168011,168012,168014],{"class":71,"line":470},[69,168013,31651],{"class":90},[69,168015,165971],{"class":86},[29,168017,168018,168019,168021],{},"如果逻辑复杂，不要硬写 ",[66,168020,167862],{},"，定义普通函数更清晰。",[14,168023,168025],{"id":168024},"_79-函数作为参数","7.9 函数作为参数",[29,168027,168028],{},"函数可以作为参数传给另一个函数。",[59,168030,168032],{"className":31614,"code":168031,"language":31616,"meta":64,"style":64},"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",[66,168033,168034,168042,168052,168056,168060,168070,168077,168081,168085],{"__ignoreMap":64},[69,168035,168036,168038,168040],{"class":71,"line":72},[69,168037,33183],{"class":82},[69,168039,6451],{"class":109},[69,168041,152069],{"class":86},[69,168043,168044,168046,168048,168050],{"class":71,"line":79},[69,168045,5334],{"class":82},[69,168047,12111],{"class":86},[69,168049,1869],{"class":82},[69,168051,152080],{"class":86},[69,168053,168054],{"class":71,"line":106},[69,168055,3644],{"emptyLinePlaceholder":1325},[69,168057,168058],{"class":71,"line":116},[69,168059,3644],{"emptyLinePlaceholder":1325},[69,168061,168062,168064,168067],{"class":71,"line":133},[69,168063,33183],{"class":82},[69,168065,168066],{"class":109}," calculate",[69,168068,168069],{"class":86},"(a, b, func):\n",[69,168071,168072,168074],{"class":71,"line":139},[69,168073,5334],{"class":82},[69,168075,168076],{"class":86}," func(a, b)\n",[69,168078,168079],{"class":71,"line":401},[69,168080,3644],{"emptyLinePlaceholder":1325},[69,168082,168083],{"class":71,"line":470},[69,168084,3644],{"emptyLinePlaceholder":1325},[69,168086,168087,168089,168092,168094,168096,168098],{"class":71,"line":475},[69,168088,31651],{"class":90},[69,168090,168091],{"class":86},"(calculate(",[69,168093,390],{"class":90},[69,168095,13677],{"class":86},[69,168097,2087],{"class":90},[69,168099,168100],{"class":86},", add))\n",[29,168102,168103],{},"这种思想在排序、回调、框架中经常出现。",[14,168105,168107],{"id":168106},"_710-mapfiltersorted","7.10 map、filter、sorted",[19,168109,168111],{"id":168110},"_7101-map","7.10.1 map",[29,168113,168114,168116],{},[66,168115,75265],{}," 对每个元素执行函数。",[59,168118,168120],{"className":31614,"code":168119,"language":31616,"meta":64,"style":64},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[66,168121,168122,168146,168169],{"__ignoreMap":64},[69,168123,168124,168126,168128,168130,168132,168134,168136,168138,168140,168142,168144],{"class":71,"line":72},[69,168125,165076],{"class":86},[69,168127,1019],{"class":82},[69,168129,53454],{"class":86},[69,168131,1609],{"class":90},[69,168133,13677],{"class":86},[69,168135,1471],{"class":90},[69,168137,13677],{"class":86},[69,168139,1465],{"class":90},[69,168141,13677],{"class":86},[69,168143,1684],{"class":90},[69,168145,34482],{"class":86},[69,168147,168148,168150,168152,168155,168157,168159,168162,168164,168166],{"class":71,"line":79},[69,168149,162282],{"class":86},[69,168151,1019],{"class":82},[69,168153,168154],{"class":90}," map",[69,168156,1398],{"class":86},[69,168158,167862],{"class":82},[69,168160,168161],{"class":86}," x: x ",[69,168163,1843],{"class":82},[69,168165,15995],{"class":90},[69,168167,168168],{"class":86},", nums)\n",[69,168170,168171,168173,168175,168177],{"class":71,"line":106},[69,168172,31651],{"class":90},[69,168174,1398],{"class":86},[69,168176,155046],{"class":90},[69,168178,167044],{"class":86},[19,168180,168182],{"id":168181},"_7102-filter","7.10.2 filter",[29,168184,168185,168187],{},[66,168186,81272],{}," 保留满足条件的元素。",[59,168189,168191],{"className":31614,"code":168190,"language":31616,"meta":64,"style":64},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[66,168192,168193,168221,168246],{"__ignoreMap":64},[69,168194,168195,168197,168199,168201,168203,168205,168207,168209,168211,168213,168215,168217,168219],{"class":71,"line":72},[69,168196,165076],{"class":86},[69,168198,1019],{"class":82},[69,168200,53454],{"class":86},[69,168202,1609],{"class":90},[69,168204,13677],{"class":86},[69,168206,1471],{"class":90},[69,168208,13677],{"class":86},[69,168210,1465],{"class":90},[69,168212,13677],{"class":86},[69,168214,1684],{"class":90},[69,168216,13677],{"class":86},[69,168218,1709],{"class":90},[69,168220,34482],{"class":86},[69,168222,168223,168225,168227,168230,168232,168234,168236,168238,168240,168242,168244],{"class":71,"line":79},[69,168224,162282],{"class":86},[69,168226,1019],{"class":82},[69,168228,168229],{"class":90}," filter",[69,168231,1398],{"class":86},[69,168233,167862],{"class":82},[69,168235,168161],{"class":86},[69,168237,127],{"class":82},[69,168239,15995],{"class":90},[69,168241,102780],{"class":82},[69,168243,5337],{"class":90},[69,168245,168168],{"class":86},[69,168247,168248,168250,168252,168254],{"class":71,"line":106},[69,168249,31651],{"class":90},[69,168251,1398],{"class":86},[69,168253,155046],{"class":90},[69,168255,167044],{"class":86},[19,168257,168259],{"id":168258},"_7103-sorted","7.10.3 sorted",[29,168261,168262,168264],{},[66,168263,166212],{}," 返回排序后的新列表。",[59,168266,168268],{"className":31614,"code":168267,"language":31616,"meta":64,"style":64},"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",[66,168269,168270,168278,168298,168318,168338,168342,168346,168375],{"__ignoreMap":64},[69,168271,168272,168274,168276],{"class":71,"line":72},[69,168273,160692],{"class":86},[69,168275,1019],{"class":82},[69,168277,56674],{"class":86},[69,168279,168280,168282,168284,168286,168288,168290,168292,168294,168296],{"class":71,"line":79},[69,168281,149361],{"class":86},[69,168283,63905],{"class":1022},[69,168285,94],{"class":86},[69,168287,150864],{"class":1022},[69,168289,13677],{"class":86},[69,168291,152448],{"class":1022},[69,168293,94],{"class":86},[69,168295,2375],{"class":90},[69,168297,6174],{"class":86},[69,168299,168300,168302,168304,168306,168308,168310,168312,168314,168316],{"class":71,"line":106},[69,168301,149361],{"class":86},[69,168303,63905],{"class":1022},[69,168305,94],{"class":86},[69,168307,151912],{"class":1022},[69,168309,13677],{"class":86},[69,168311,152448],{"class":1022},[69,168313,94],{"class":86},[69,168315,2198],{"class":90},[69,168317,6174],{"class":86},[69,168319,168320,168322,168324,168326,168328,168330,168332,168334,168336],{"class":71,"line":116},[69,168321,149361],{"class":86},[69,168323,63905],{"class":1022},[69,168325,94],{"class":86},[69,168327,160707],{"class":1022},[69,168329,13677],{"class":86},[69,168331,152448],{"class":1022},[69,168333,94],{"class":86},[69,168335,1795],{"class":90},[69,168337,6174],{"class":86},[69,168339,168340],{"class":71,"line":133},[69,168341,34482],{"class":86},[69,168343,168344],{"class":71,"line":139},[69,168345,3644],{"emptyLinePlaceholder":1325},[69,168347,168348,168350,168352,168354,168357,168359,168361,168363,168365,168367,168369,168371,168373],{"class":71,"line":401},[69,168349,162282],{"class":86},[69,168351,1019],{"class":82},[69,168353,164580],{"class":90},[69,168355,168356],{"class":86},"(students, ",[69,168358,154922],{"class":6458},[69,168360,154925],{"class":82},[69,168362,154928],{"class":86},[69,168364,152448],{"class":1022},[69,168366,113423],{"class":86},[69,168368,164504],{"class":6458},[69,168370,1019],{"class":82},[69,168372,32712],{"class":90},[69,168374,1404],{"class":86},[69,168376,168377,168379],{"class":71,"line":470},[69,168378,31651],{"class":90},[69,168380,77806],{"class":86},[14,168382,168384],{"id":168383},"_711-闭包入门","7.11 闭包入门",[29,168386,168387],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[59,168389,168391],{"className":31614,"code":168390,"language":31616,"meta":64,"style":64},"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",[66,168392,168393,168403,168413,168424,168428,168435,168439,168443,168457],{"__ignoreMap":64},[69,168394,168395,168397,168400],{"class":71,"line":72},[69,168396,33183],{"class":82},[69,168398,168399],{"class":109}," outer",[69,168401,168402],{"class":86},"(base):\n",[69,168404,168405,168407,168410],{"class":71,"line":79},[69,168406,32037],{"class":82},[69,168408,168409],{"class":109}," inner",[69,168411,168412],{"class":86},"(num):\n",[69,168414,168415,168417,168420,168422],{"class":71,"line":106},[69,168416,15992],{"class":82},[69,168418,168419],{"class":86}," base ",[69,168421,1869],{"class":82},[69,168423,167555],{"class":86},[69,168425,168426],{"class":71,"line":116},[69,168427,3644],{"emptyLinePlaceholder":1325},[69,168429,168430,168432],{"class":71,"line":133},[69,168431,5334],{"class":82},[69,168433,168434],{"class":86}," inner\n",[69,168436,168437],{"class":71,"line":139},[69,168438,3644],{"emptyLinePlaceholder":1325},[69,168440,168441],{"class":71,"line":401},[69,168442,3644],{"emptyLinePlaceholder":1325},[69,168444,168445,168448,168450,168453,168455],{"class":71,"line":470},[69,168446,168447],{"class":86},"add_10 ",[69,168449,1019],{"class":82},[69,168451,168452],{"class":86}," outer(",[69,168454,390],{"class":90},[69,168456,1404],{"class":86},[69,168458,168459,168461,168464,168466],{"class":71,"line":475},[69,168460,31651],{"class":90},[69,168462,168463],{"class":86},"(add_10(",[69,168465,1709],{"class":90},[69,168467,31733],{"class":86},[29,168469,168470],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168472,168474],{"id":168473},"_712-装饰器入门","7.12 装饰器入门",[29,168476,168477],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[59,168479,168481],{"className":31614,"code":168480,"language":31616,"meta":64,"style":64},"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",[66,168482,168483,168492,168501,168512,168517,168528,168532,168539,168543,168547,168552,168560,168570,168574,168578],{"__ignoreMap":64},[69,168484,168485,168487,168489],{"class":71,"line":72},[69,168486,33183],{"class":82},[69,168488,88412],{"class":109},[69,168490,168491],{"class":86},"(func):\n",[69,168493,168494,168496,168499],{"class":71,"line":79},[69,168495,32037],{"class":82},[69,168497,168498],{"class":109}," wrapper",[69,168500,33189],{"class":86},[69,168502,168503,168505,168507,168510],{"class":71,"line":106},[69,168504,33687],{"class":90},[69,168506,1398],{"class":86},[69,168508,168509],{"class":1022},"\"函数开始执行\"",[69,168511,1404],{"class":86},[69,168513,168514],{"class":71,"line":116},[69,168515,168516],{"class":86},"        func()\n",[69,168518,168519,168521,168523,168526],{"class":71,"line":133},[69,168520,33687],{"class":90},[69,168522,1398],{"class":86},[69,168524,168525],{"class":1022},"\"函数执行结束\"",[69,168527,1404],{"class":86},[69,168529,168530],{"class":71,"line":139},[69,168531,3644],{"emptyLinePlaceholder":1325},[69,168533,168534,168536],{"class":71,"line":401},[69,168535,5334],{"class":82},[69,168537,168538],{"class":86}," wrapper\n",[69,168540,168541],{"class":71,"line":470},[69,168542,3644],{"emptyLinePlaceholder":1325},[69,168544,168545],{"class":71,"line":475},[69,168546,3644],{"emptyLinePlaceholder":1325},[69,168548,168549],{"class":71,"line":482},[69,168550,168551],{"class":109},"@log\n",[69,168553,168554,168556,168558],{"class":71,"line":497},[69,168555,33183],{"class":82},[69,168557,161972],{"class":109},[69,168559,33189],{"class":86},[69,168561,168562,168564,168566,168568],{"class":71,"line":502},[69,168563,32535],{"class":90},[69,168565,1398],{"class":86},[69,168567,7086],{"class":1022},[69,168569,1404],{"class":86},[69,168571,168572],{"class":71,"line":509},[69,168573,3644],{"emptyLinePlaceholder":1325},[69,168575,168576],{"class":71,"line":524},[69,168577,3644],{"emptyLinePlaceholder":1325},[69,168579,168580],{"class":71,"line":2888},[69,168581,162007],{"class":86},[29,168583,159250],{},[59,168585,168587],{"className":31614,"code":168586,"language":31616,"meta":64,"style":64},"say_hello = log(say_hello)\n",[66,168588,168589],{"__ignoreMap":64},[69,168590,168591,168594,168596],{"class":71,"line":72},[69,168592,168593],{"class":86},"say_hello ",[69,168595,1019],{"class":82},[69,168597,168598],{"class":86}," log(say_hello)\n",[29,168600,168601],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168603,168605],{"id":168604},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[59,168607,168609],{"className":31614,"code":168608,"language":31616,"meta":64,"style":64},"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",[66,168610,168611,168619,168636,168646,168665,168675,168682,168686,168692,168696,168700,168704,168712,168722,168726,168730],{"__ignoreMap":64},[69,168612,168613,168615,168617],{"class":71,"line":72},[69,168614,33183],{"class":82},[69,168616,88412],{"class":109},[69,168618,168491],{"class":86},[69,168620,168621,168623,168625,168627,168629,168632,168634],{"class":71,"line":79},[69,168622,32037],{"class":82},[69,168624,168498],{"class":109},[69,168626,1398],{"class":86},[69,168628,1843],{"class":82},[69,168630,168631],{"class":86},"args, ",[69,168633,11903],{"class":82},[69,168635,167642],{"class":86},[69,168637,168638,168640,168642,168644],{"class":71,"line":106},[69,168639,33687],{"class":90},[69,168641,1398],{"class":86},[69,168643,168509],{"class":1022},[69,168645,1404],{"class":86},[69,168647,168648,168651,168653,168656,168658,168660,168662],{"class":71,"line":116},[69,168649,168650],{"class":86},"        result ",[69,168652,1019],{"class":82},[69,168654,168655],{"class":86}," func(",[69,168657,1843],{"class":82},[69,168659,168631],{"class":86},[69,168661,11903],{"class":82},[69,168663,168664],{"class":86},"kwargs)\n",[69,168666,168667,168669,168671,168673],{"class":71,"line":133},[69,168668,33687],{"class":90},[69,168670,1398],{"class":86},[69,168672,168525],{"class":1022},[69,168674,1404],{"class":86},[69,168676,168677,168679],{"class":71,"line":139},[69,168678,15992],{"class":82},[69,168680,168681],{"class":86}," result\n",[69,168683,168684],{"class":71,"line":401},[69,168685,3644],{"emptyLinePlaceholder":1325},[69,168687,168688,168690],{"class":71,"line":470},[69,168689,5334],{"class":82},[69,168691,168538],{"class":86},[69,168693,168694],{"class":71,"line":475},[69,168695,3644],{"emptyLinePlaceholder":1325},[69,168697,168698],{"class":71,"line":482},[69,168699,3644],{"emptyLinePlaceholder":1325},[69,168701,168702],{"class":71,"line":497},[69,168703,168551],{"class":109},[69,168705,168706,168708,168710],{"class":71,"line":502},[69,168707,33183],{"class":82},[69,168709,6451],{"class":109},[69,168711,152069],{"class":86},[69,168713,168714,168716,168718,168720],{"class":71,"line":509},[69,168715,5334],{"class":82},[69,168717,12111],{"class":86},[69,168719,1869],{"class":82},[69,168721,152080],{"class":86},[69,168723,168724],{"class":71,"line":524},[69,168725,3644],{"emptyLinePlaceholder":1325},[69,168727,168728],{"class":71,"line":2888},[69,168729,3644],{"emptyLinePlaceholder":1325},[69,168731,168732,168734,168736,168738,168740,168742],{"class":71,"line":2893},[69,168733,31651],{"class":90},[69,168735,167576],{"class":86},[69,168737,390],{"class":90},[69,168739,13677],{"class":86},[69,168741,2087],{"class":90},[69,168743,31733],{"class":86},[29,168745,168746,168747,102239,168749,168751],{},"这个写法使用 ",[66,168748,167508],{},[66,168750,167623],{}," 接收原函数的所有参数。",[14,168753,168755],{"id":168754},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[29,168757,124513],{},[37,168759,168760,168763,168766],{},[40,168761,168762],{},"给定一组学生数据。",[40,168764,168765],{},"封装函数，根据传入规则筛选学生。",[40,168767,168768],{},"筛选及格、优秀、未成年学生。",[29,168770,11277],{},[59,168772,168774],{"className":31614,"code":168773,"language":31616,"meta":64,"style":64},"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",[66,168775,168776,168784,168812,168840,168868,168872,168876,168880,168890,168898,168908,168915,168920,168926,168930,168934,168958,168981,169004,169008,169015,169022],{"__ignoreMap":64},[69,168777,168778,168780,168782],{"class":71,"line":72},[69,168779,160692],{"class":86},[69,168781,1019],{"class":82},[69,168783,56674],{"class":86},[69,168785,168786,168788,168790,168792,168794,168796,168798,168800,168802,168804,168806,168808,168810],{"class":71,"line":79},[69,168787,149361],{"class":86},[69,168789,63905],{"class":1022},[69,168791,94],{"class":86},[69,168793,150864],{"class":1022},[69,168795,13677],{"class":86},[69,168797,70349],{"class":1022},[69,168799,94],{"class":86},[69,168801,2037],{"class":90},[69,168803,13677],{"class":86},[69,168805,152448],{"class":1022},[69,168807,94],{"class":86},[69,168809,2375],{"class":90},[69,168811,6174],{"class":86},[69,168813,168814,168816,168818,168820,168822,168824,168826,168828,168830,168832,168834,168836,168838],{"class":71,"line":106},[69,168815,149361],{"class":86},[69,168817,63905],{"class":1022},[69,168819,94],{"class":86},[69,168821,151912],{"class":1022},[69,168823,13677],{"class":86},[69,168825,70349],{"class":1022},[69,168827,94],{"class":86},[69,168829,2012],{"class":90},[69,168831,13677],{"class":86},[69,168833,152448],{"class":1022},[69,168835,94],{"class":86},[69,168837,2198],{"class":90},[69,168839,6174],{"class":86},[69,168841,168842,168844,168846,168848,168850,168852,168854,168856,168858,168860,168862,168864,168866],{"class":71,"line":116},[69,168843,149361],{"class":86},[69,168845,63905],{"class":1022},[69,168847,94],{"class":86},[69,168849,160707],{"class":1022},[69,168851,13677],{"class":86},[69,168853,70349],{"class":1022},[69,168855,94],{"class":86},[69,168857,2062],{"class":90},[69,168859,13677],{"class":86},[69,168861,152448],{"class":1022},[69,168863,94],{"class":86},[69,168865,2269],{"class":90},[69,168867,6174],{"class":86},[69,168869,168870],{"class":71,"line":133},[69,168871,34482],{"class":86},[69,168873,168874],{"class":71,"line":139},[69,168875,3644],{"emptyLinePlaceholder":1325},[69,168877,168878],{"class":71,"line":401},[69,168879,3644],{"emptyLinePlaceholder":1325},[69,168881,168882,168884,168887],{"class":71,"line":470},[69,168883,33183],{"class":82},[69,168885,168886],{"class":109}," filter_students",[69,168888,168889],{"class":86},"(students, condition):\n",[69,168891,168892,168894,168896],{"class":71,"line":475},[69,168893,162199],{"class":86},[69,168895,1019],{"class":82},[69,168897,53066],{"class":86},[69,168899,168900,168902,168904,168906],{"class":71,"line":482},[69,168901,4445],{"class":82},[69,168903,153113],{"class":86},[69,168905,27280],{"class":82},[69,168907,153118],{"class":86},[69,168909,168910,168912],{"class":71,"line":497},[69,168911,3741],{"class":82},[69,168913,168914],{"class":86}," condition(student):\n",[69,168916,168917],{"class":71,"line":502},[69,168918,168919],{"class":86},"            result.append(student)\n",[69,168921,168922,168924],{"class":71,"line":509},[69,168923,5334],{"class":82},[69,168925,168681],{"class":86},[69,168927,168928],{"class":71,"line":524},[69,168929,3644],{"emptyLinePlaceholder":1325},[69,168931,168932],{"class":71,"line":2888},[69,168933,3644],{"emptyLinePlaceholder":1325},[69,168935,168936,168938,168940,168943,168945,168948,168950,168952,168954,168956],{"class":71,"line":2893},[69,168937,166677],{"class":86},[69,168939,1019],{"class":82},[69,168941,168942],{"class":86}," filter_students(students, ",[69,168944,167862],{"class":82},[69,168946,168947],{"class":86}," s: s[",[69,168949,152448],{"class":1022},[69,168951,5687],{"class":86},[69,168953,2955],{"class":82},[69,168955,158813],{"class":90},[69,168957,1404],{"class":86},[69,168959,168960,168963,168965,168967,168969,168971,168973,168975,168977,168979],{"class":71,"line":2899},[69,168961,168962],{"class":86},"excellent ",[69,168964,1019],{"class":82},[69,168966,168942],{"class":86},[69,168968,167862],{"class":82},[69,168970,168947],{"class":86},[69,168972,152448],{"class":1022},[69,168974,5687],{"class":86},[69,168976,2955],{"class":82},[69,168978,158764],{"class":90},[69,168980,1404],{"class":86},[69,168982,168983,168986,168988,168990,168992,168994,168996,168998,169000,169002],{"class":71,"line":2919},[69,168984,168985],{"class":86},"under_age ",[69,168987,1019],{"class":82},[69,168989,168942],{"class":86},[69,168991,167862],{"class":82},[69,168993,168947],{"class":86},[69,168995,70349],{"class":1022},[69,168997,5687],{"class":86},[69,168999,1011],{"class":82},[69,169001,157261],{"class":90},[69,169003,1404],{"class":86},[69,169005,169006],{"class":71,"line":2924},[69,169007,3644],{"emptyLinePlaceholder":1325},[69,169009,169010,169012],{"class":71,"line":2938},[69,169011,31651],{"class":90},[69,169013,169014],{"class":86},"(passed)\n",[69,169016,169017,169019],{"class":71,"line":2943},[69,169018,31651],{"class":90},[69,169020,169021],{"class":86},"(excellent)\n",[69,169023,169024,169026],{"class":71,"line":2972},[69,169025,31651],{"class":90},[69,169027,169028],{"class":86},"(under_age)\n",[14,169030,169032],{"id":169031},"_715-易错点","7.15 易错点",[37,169034,169035,169038,169046,169051,169062],{},[40,169036,169037],{},"默认参数不要写可变对象。",[40,169039,169040,169042,169043,169045],{},[66,169041,167508],{}," 是元组，",[66,169044,167623],{}," 是字典。",[40,169047,169048,169050],{},[66,169049,167862],{}," 只适合简单表达式。",[40,169052,169053,102239,169055,169057,169058,169061],{},[66,169054,75265],{},[66,169056,81272],{}," 的结果是迭代器，常用 ",[66,169059,169060],{},"list()"," 转换查看。",[40,169063,169064],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169066,169068],{"id":169067},"_716-本章练习","7.16 本章练习",[37,169070,169071,169078,169084,169089,169094],{},[40,169072,169073,169074,169077],{},"写函数 ",[66,169075,169076],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[40,169079,169073,169080,169083],{},[66,169081,169082],{},"print_user(**kwargs)","，输出用户所有字段。",[40,169085,105587,169086,169088],{},[66,169087,167862],{}," 对学生列表按年龄排序。",[40,169090,105587,169091,169093],{},[66,169092,81272],{}," 找出成绩不及格的学生。",[40,169095,169096],{},"写一个装饰器，统计函数执行前后的提示信息。",[1297,169098,169099],{},"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":64,"searchDepth":79,"depth":79,"links":169101},[169102,169103,169104,169105,169106,169107,169111,169112,169113,169114,169119,169120,169121,169122,169123,169124],{"id":166960,"depth":79,"text":166961},{"id":167074,"depth":79,"text":167075},{"id":167163,"depth":79,"text":167164},{"id":167225,"depth":79,"text":167226},{"id":167371,"depth":79,"text":167372},{"id":167498,"depth":79,"text":167499,"children":169108},[169109,169110],{"id":167502,"depth":106,"text":167503},{"id":167617,"depth":106,"text":167618},{"id":167698,"depth":79,"text":167699},{"id":167856,"depth":79,"text":167857},{"id":168024,"depth":79,"text":168025},{"id":168106,"depth":79,"text":168107,"children":169115},[169116,169117,169118],{"id":168110,"depth":106,"text":168111},{"id":168181,"depth":106,"text":168182},{"id":168258,"depth":106,"text":168259},{"id":168383,"depth":79,"text":168384},{"id":168473,"depth":79,"text":168474},{"id":168604,"depth":79,"text":168605},{"id":168754,"depth":79,"text":168755},{"id":169031,"depth":79,"text":169032},{"id":169067,"depth":79,"text":169068},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166952,"description":1322},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169131,"title":169132,"body":169133,"description":1322,"extension":1323,"meta":171652,"navigation":1325,"path":171653,"seo":171654,"stem":171655,"__hash__":171656},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169134,"toc":171627},[169135,169138,169142,169145,169148,169179,169183,169187,169190,169217,169221,169224,169275,169278,169293,169296,169331,169335,169337,169361,169364,169424,169428,169432,169435,169492,169495,169515,169519,169522,169585,169589,169592,169648,169655,169679,169683,169686,169749,169753,169758,169809,169812,169816,169821,169888,169891,169973,169977,169982,170033,170036,170040,170043,170046,170054,170057,170103,170106,170152,170156,170162,170206,170209,170255,170258,170298,170301,170362,170366,170369,170459,170462,170604,170607,170674,170678,170681,170684,170825,170828,170906,170909,171085,171089,171091,171102,171104,171303,171307,171551,171555,171589,171593,171624],[10,169136,169132],{"id":169137},"_8-文件操作",[14,169139,169141],{"id":169140},"_81-文件操作的意义","8.1 文件操作的意义",[29,169143,169144],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[29,169146,169147],{},"常见文件类型：",[37,169149,169150,169156,169162,169168,169174],{},[40,169151,169152,169155],{},[66,169153,169154],{},".txt","：普通文本。",[40,169157,169158,169161],{},[66,169159,169160],{},".csv","：表格文本。",[40,169163,169164,169167],{},[66,169165,169166],{},".json","：结构化数据。",[40,169169,169170,169173],{},[66,169171,169172],{},".log","：日志文件。",[40,169175,169176,169178],{},[66,169177,147328],{},"：Python 源代码。",[14,169180,169182],{"id":169181},"_82-路径","8.2 路径",[19,169184,169186],{"id":169185},"_821-相对路径","8.2.1 相对路径",[29,169188,169189],{},"相对当前运行目录：",[59,169191,169193],{"className":31614,"code":169192,"language":31616,"meta":64,"style":64},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[66,169194,169195],{"__ignoreMap":64},[69,169196,169197,169199,169201,169203,169205,169207,169209,169211,169213,169215],{"class":71,"line":72},[69,169198,88136],{"class":90},[69,169200,1398],{"class":86},[69,169202,147772],{"class":1022},[69,169204,13677],{"class":86},[69,169206,147777],{"class":1022},[69,169208,13677],{"class":86},[69,169210,147782],{"class":6458},[69,169212,1019],{"class":82},[69,169214,147787],{"class":1022},[69,169216,1404],{"class":86},[19,169218,169220],{"id":169219},"_822-绝对路径","8.2.2 绝对路径",[29,169222,169223],{},"从根目录或盘符开始：",[59,169225,169227],{"className":31614,"code":169226,"language":31616,"meta":64,"style":64},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[66,169228,169229,169252],{"__ignoreMap":64},[69,169230,169231,169233,169235,169238,169240,169242,169244,169246,169248,169250],{"class":71,"line":72},[69,169232,88136],{"class":90},[69,169234,1398],{"class":86},[69,169236,169237],{"class":1022},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[69,169239,13677],{"class":86},[69,169241,147777],{"class":1022},[69,169243,13677],{"class":86},[69,169245,147782],{"class":6458},[69,169247,1019],{"class":82},[69,169249,147787],{"class":1022},[69,169251,1404],{"class":86},[69,169253,169254,169256,169258,169261,169263,169265,169267,169269,169271,169273],{"class":71,"line":79},[69,169255,88136],{"class":90},[69,169257,1398],{"class":86},[69,169259,169260],{"class":1022},"\"D:\u002Fdata\u002Fdata.txt\"",[69,169262,13677],{"class":86},[69,169264,147777],{"class":1022},[69,169266,13677],{"class":86},[69,169268,147782],{"class":6458},[69,169270,1019],{"class":82},[69,169272,147787],{"class":1022},[69,169274,1404],{"class":86},[29,169276,169277],{},"Windows 路径建议写成：",[59,169279,169281],{"className":31614,"code":169280,"language":31616,"meta":64,"style":64},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[66,169282,169283],{"__ignoreMap":64},[69,169284,169285,169288,169290],{"class":71,"line":72},[69,169286,169287],{"class":86},"path ",[69,169289,1019],{"class":82},[69,169291,169292],{"class":1022}," \"D:\u002Fdata\u002Fdata.txt\"\n",[29,169294,169295],{},"或原始字符串：",[59,169297,169299],{"className":31614,"code":169298,"language":31616,"meta":64,"style":64},"path = r\"D:\\data\\data.txt\"\n",[66,169300,169301],{"__ignoreMap":64},[69,169302,169303,169305,169307,169309,169311,169314,169317,169320,169322,169324,169326,169329],{"class":71,"line":72},[69,169304,169287],{"class":86},[69,169306,1019],{"class":82},[69,169308,18360],{"class":82},[69,169310,1642],{"class":1022},[69,169312,169313],{"class":49213},"D:",[69,169315,169316],{"class":90},"\\d",[69,169318,169319],{"class":49213},"ata",[69,169321,169316],{"class":90},[69,169323,169319],{"class":49213},[69,169325,1946],{"class":90},[69,169327,169328],{"class":49213},"txt",[69,169330,26370],{"class":1022},[14,169332,169334],{"id":169333},"_83-open函数","8.3 open函数",[29,169336,6425],{},[59,169338,169340],{"className":31614,"code":169339,"language":31616,"meta":64,"style":64},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[66,169341,169342],{"__ignoreMap":64},[69,169343,169344,169346,169348,169350,169353,169355,169357,169359],{"class":71,"line":72},[69,169345,46590],{"class":6458},[69,169347,14805],{"class":82},[69,169349,147767],{"class":90},[69,169351,169352],{"class":86},"(文件路径, 打开模式, ",[69,169354,147782],{"class":6458},[69,169356,1019],{"class":82},[69,169358,147787],{"class":1022},[69,169360,1404],{"class":86},[29,169362,169363],{},"常见模式：",[1530,169365,169366,169375],{},[1533,169367,169368],{},[1536,169369,169370,169373],{},[1539,169371,169372],{},"模式",[1539,169374,27106],{},[1576,169376,169377,169386,169395,169404,169414],{},[1536,169378,169379,169383],{},[1581,169380,169381],{},[66,169382,2057],{},[1581,169384,169385],{},"只读，文件不存在会报错",[1536,169387,169388,169392],{},[1581,169389,169390],{},[66,169391,2182],{},[1581,169393,169394],{},"只写，文件不存在会创建，存在会清空",[1536,169396,169397,169401],{},[1581,169398,169399],{},[66,169400,187],{},[1581,169402,169403],{},"追加，文件不存在会创建",[1536,169405,169406,169411],{},[1581,169407,169408],{},[66,169409,169410],{},"rb",[1581,169412,169413],{},"二进制只读",[1536,169415,169416,169421],{},[1581,169417,169418],{},[66,169419,169420],{},"wb",[1581,169422,169423],{},"二进制只写",[14,169425,169427],{"id":169426},"_84-读取文件","8.4 读取文件",[19,169429,169431],{"id":169430},"_841-read","8.4.1 read",[29,169433,169434],{},"一次读取全部内容：",[59,169436,169438],{"className":31614,"code":169437,"language":31616,"meta":64,"style":64},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[66,169439,169440,169466,169478,169485],{"__ignoreMap":64},[69,169441,169442,169444,169446,169448,169450,169452,169454,169456,169458,169460,169462,169464],{"class":71,"line":72},[69,169443,46590],{"class":6458},[69,169445,14805],{"class":82},[69,169447,147767],{"class":90},[69,169449,1398],{"class":86},[69,169451,147772],{"class":1022},[69,169453,13677],{"class":86},[69,169455,147777],{"class":1022},[69,169457,13677],{"class":86},[69,169459,147782],{"class":6458},[69,169461,1019],{"class":82},[69,169463,147787],{"class":1022},[69,169465,1404],{"class":86},[69,169467,169468,169471,169473,169475],{"class":71,"line":79},[69,169469,169470],{"class":86},"content ",[69,169472,1019],{"class":82},[69,169474,149129],{"class":6458},[69,169476,169477],{"class":86},".read()\n",[69,169479,169480,169482],{"class":71,"line":106},[69,169481,31651],{"class":90},[69,169483,169484],{"class":86},"(content)\n",[69,169486,169487,169489],{"class":71,"line":116},[69,169488,46590],{"class":6458},[69,169490,169491],{"class":86},".close()\n",[29,169493,169494],{},"可以指定读取字符数：",[59,169496,169498],{"className":31614,"code":169497,"language":31616,"meta":64,"style":64},"content = file.read(10)\n",[66,169499,169500],{"__ignoreMap":64},[69,169501,169502,169504,169506,169508,169511,169513],{"class":71,"line":72},[69,169503,169470],{"class":86},[69,169505,1019],{"class":82},[69,169507,149129],{"class":6458},[69,169509,169510],{"class":86},".read(",[69,169512,390],{"class":90},[69,169514,1404],{"class":86},[19,169516,169518],{"id":169517},"_842-readline","8.4.2 readline",[29,169520,169521],{},"一次读取一行：",[59,169523,169525],{"className":31614,"code":169524,"language":31616,"meta":64,"style":64},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[66,169526,169527,169553,169557,169568,169575,169579],{"__ignoreMap":64},[69,169528,169529,169531,169533,169535,169537,169539,169541,169543,169545,169547,169549,169551],{"class":71,"line":72},[69,169530,46590],{"class":6458},[69,169532,14805],{"class":82},[69,169534,147767],{"class":90},[69,169536,1398],{"class":86},[69,169538,147772],{"class":1022},[69,169540,13677],{"class":86},[69,169542,147777],{"class":1022},[69,169544,13677],{"class":86},[69,169546,147782],{"class":6458},[69,169548,1019],{"class":82},[69,169550,147787],{"class":1022},[69,169552,1404],{"class":86},[69,169554,169555],{"class":71,"line":79},[69,169556,3644],{"emptyLinePlaceholder":1325},[69,169558,169559,169561,169563,169565],{"class":71,"line":106},[69,169560,148228],{"class":86},[69,169562,1019],{"class":82},[69,169564,149129],{"class":6458},[69,169566,169567],{"class":86},".readline()\n",[69,169569,169570,169572],{"class":71,"line":116},[69,169571,31651],{"class":90},[69,169573,169574],{"class":86},"(line)\n",[69,169576,169577],{"class":71,"line":133},[69,169578,3644],{"emptyLinePlaceholder":1325},[69,169580,169581,169583],{"class":71,"line":139},[69,169582,46590],{"class":6458},[69,169584,169491],{"class":86},[19,169586,169588],{"id":169587},"_843-readlines","8.4.3 readlines",[29,169590,169591],{},"读取所有行，返回列表：",[59,169593,169595],{"className":31614,"code":169594,"language":31616,"meta":64,"style":64},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[66,169596,169597,169623,169635,169642],{"__ignoreMap":64},[69,169598,169599,169601,169603,169605,169607,169609,169611,169613,169615,169617,169619,169621],{"class":71,"line":72},[69,169600,46590],{"class":6458},[69,169602,14805],{"class":82},[69,169604,147767],{"class":90},[69,169606,1398],{"class":86},[69,169608,147772],{"class":1022},[69,169610,13677],{"class":86},[69,169612,147777],{"class":1022},[69,169614,13677],{"class":86},[69,169616,147782],{"class":6458},[69,169618,1019],{"class":82},[69,169620,147787],{"class":1022},[69,169622,1404],{"class":86},[69,169624,169625,169628,169630,169632],{"class":71,"line":79},[69,169626,169627],{"class":86},"lines ",[69,169629,1019],{"class":82},[69,169631,149129],{"class":6458},[69,169633,169634],{"class":86},".readlines()\n",[69,169636,169637,169639],{"class":71,"line":106},[69,169638,31651],{"class":90},[69,169640,169641],{"class":86},"(lines)\n",[69,169643,169644,169646],{"class":71,"line":116},[69,169645,46590],{"class":6458},[69,169647,169491],{"class":86},[29,169649,169650,169651,169654],{},"每一行通常带有换行符，可以用 ",[66,169652,169653],{},"strip()"," 去掉：",[59,169656,169658],{"className":31614,"code":169657,"language":31616,"meta":64,"style":64},"for line in lines:\n    print(line.strip())\n",[66,169659,169660,169672],{"__ignoreMap":64},[69,169661,169662,169664,169667,169669],{"class":71,"line":72},[69,169663,4269],{"class":82},[69,169665,169666],{"class":86}," line ",[69,169668,27280],{"class":82},[69,169670,169671],{"class":86}," lines:\n",[69,169673,169674,169676],{"class":71,"line":79},[69,169675,32535],{"class":90},[69,169677,169678],{"class":86},"(line.strip())\n",[19,169680,169682],{"id":169681},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[29,169684,169685],{},"推荐读取大文件时使用：",[59,169687,169689],{"className":31614,"code":169688,"language":31616,"meta":64,"style":64},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[66,169690,169691,169717,169721,169733,169739,169743],{"__ignoreMap":64},[69,169692,169693,169695,169697,169699,169701,169703,169705,169707,169709,169711,169713,169715],{"class":71,"line":72},[69,169694,46590],{"class":6458},[69,169696,14805],{"class":82},[69,169698,147767],{"class":90},[69,169700,1398],{"class":86},[69,169702,147772],{"class":1022},[69,169704,13677],{"class":86},[69,169706,147777],{"class":1022},[69,169708,13677],{"class":86},[69,169710,147782],{"class":6458},[69,169712,1019],{"class":82},[69,169714,147787],{"class":1022},[69,169716,1404],{"class":86},[69,169718,169719],{"class":71,"line":79},[69,169720,3644],{"emptyLinePlaceholder":1325},[69,169722,169723,169725,169727,169729,169731],{"class":71,"line":106},[69,169724,4269],{"class":82},[69,169726,169666],{"class":86},[69,169728,27280],{"class":82},[69,169730,149129],{"class":6458},[69,169732,4983],{"class":86},[69,169734,169735,169737],{"class":71,"line":116},[69,169736,32535],{"class":90},[69,169738,169678],{"class":86},[69,169740,169741],{"class":71,"line":133},[69,169742,3644],{"emptyLinePlaceholder":1325},[69,169744,169745,169747],{"class":71,"line":139},[69,169746,46590],{"class":6458},[69,169748,169491],{"class":86},[14,169750,169752],{"id":169751},"_85-with语句","8.5 with语句",[29,169754,169755,169757],{},[66,169756,109054],{}," 会自动关闭文件，推荐使用。",[59,169759,169761],{"className":31614,"code":169760,"language":31616,"meta":64,"style":64},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[66,169762,169763,169793,169803],{"__ignoreMap":64},[69,169764,169765,169767,169769,169771,169773,169775,169777,169779,169781,169783,169785,169787,169789,169791],{"class":71,"line":72},[69,169766,109054],{"class":82},[69,169768,147767],{"class":90},[69,169770,1398],{"class":86},[69,169772,147772],{"class":1022},[69,169774,13677],{"class":86},[69,169776,147777],{"class":1022},[69,169778,13677],{"class":86},[69,169780,147782],{"class":6458},[69,169782,1019],{"class":82},[69,169784,147787],{"class":1022},[69,169786,14955],{"class":86},[69,169788,32619],{"class":82},[69,169790,149129],{"class":6458},[69,169792,4983],{"class":86},[69,169794,169795,169797,169799,169801],{"class":71,"line":79},[69,169796,147799],{"class":86},[69,169798,1019],{"class":82},[69,169800,149129],{"class":6458},[69,169802,169477],{"class":86},[69,169804,169805,169807],{"class":71,"line":106},[69,169806,32535],{"class":90},[69,169808,169484],{"class":86},[29,169810,169811],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169813,169815],{"id":169814},"_86-写入文件","8.6 写入文件",[29,169817,169818,169820],{},[66,169819,2182],{}," 模式会清空原文件。",[59,169822,169824],{"className":31614,"code":169823,"language":31616,"meta":64,"style":64},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[66,169825,169826,169856,169873],{"__ignoreMap":64},[69,169827,169828,169830,169832,169834,169836,169838,169840,169842,169844,169846,169848,169850,169852,169854],{"class":71,"line":72},[69,169829,109054],{"class":82},[69,169831,147767],{"class":90},[69,169833,1398],{"class":86},[69,169835,147772],{"class":1022},[69,169837,13677],{"class":86},[69,169839,152952],{"class":1022},[69,169841,13677],{"class":86},[69,169843,147782],{"class":6458},[69,169845,1019],{"class":82},[69,169847,147787],{"class":1022},[69,169849,14955],{"class":86},[69,169851,32619],{"class":82},[69,169853,149129],{"class":6458},[69,169855,4983],{"class":86},[69,169857,169858,169861,169864,169867,169869,169871],{"class":71,"line":79},[69,169859,169860],{"class":6458},"    file",[69,169862,169863],{"class":86},".write(",[69,169865,169866],{"class":1022},"\"hello",[69,169868,157501],{"class":90},[69,169870,1642],{"class":1022},[69,169872,1404],{"class":86},[69,169874,169875,169877,169879,169882,169884,169886],{"class":71,"line":106},[69,169876,169860],{"class":6458},[69,169878,169863],{"class":86},[69,169880,169881],{"class":1022},"\"python",[69,169883,157501],{"class":90},[69,169885,1642],{"class":1022},[69,169887,1404],{"class":86},[29,169889,169890],{},"写入多行：",[59,169892,169894],{"className":31614,"code":169893,"language":31616,"meta":64,"style":64},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[66,169895,169896,169931,169935,169966],{"__ignoreMap":64},[69,169897,169898,169900,169902,169904,169907,169909,169911,169913,169916,169918,169920,169922,169925,169927,169929],{"class":71,"line":72},[69,169899,169627],{"class":86},[69,169901,1019],{"class":82},[69,169903,53454],{"class":86},[69,169905,169906],{"class":1022},"\"小明,18",[69,169908,157501],{"class":90},[69,169910,1642],{"class":1022},[69,169912,13677],{"class":86},[69,169914,169915],{"class":1022},"\"小红,17",[69,169917,157501],{"class":90},[69,169919,1642],{"class":1022},[69,169921,13677],{"class":86},[69,169923,169924],{"class":1022},"\"小刚,19",[69,169926,157501],{"class":90},[69,169928,1642],{"class":1022},[69,169930,34482],{"class":86},[69,169932,169933],{"class":71,"line":79},[69,169934,3644],{"emptyLinePlaceholder":1325},[69,169936,169937,169939,169941,169943,169946,169948,169950,169952,169954,169956,169958,169960,169962,169964],{"class":71,"line":106},[69,169938,109054],{"class":82},[69,169940,147767],{"class":90},[69,169942,1398],{"class":86},[69,169944,169945],{"class":1022},"\"students.txt\"",[69,169947,13677],{"class":86},[69,169949,152952],{"class":1022},[69,169951,13677],{"class":86},[69,169953,147782],{"class":6458},[69,169955,1019],{"class":82},[69,169957,147787],{"class":1022},[69,169959,14955],{"class":86},[69,169961,32619],{"class":82},[69,169963,149129],{"class":6458},[69,169965,4983],{"class":86},[69,169967,169968,169970],{"class":71,"line":116},[69,169969,169860],{"class":6458},[69,169971,169972],{"class":86},".writelines(lines)\n",[14,169974,169976],{"id":169975},"_87-追加文件","8.7 追加文件",[29,169978,169979,169981],{},[66,169980,187],{}," 模式不会清空原内容，而是在末尾追加。",[59,169983,169985],{"className":31614,"code":169984,"language":31616,"meta":64,"style":64},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[66,169986,169987,170018],{"__ignoreMap":64},[69,169988,169989,169991,169993,169995,169998,170000,170002,170004,170006,170008,170010,170012,170014,170016],{"class":71,"line":72},[69,169990,109054],{"class":82},[69,169992,147767],{"class":90},[69,169994,1398],{"class":86},[69,169996,169997],{"class":1022},"\"log.txt\"",[69,169999,13677],{"class":86},[69,170001,166301],{"class":1022},[69,170003,13677],{"class":86},[69,170005,147782],{"class":6458},[69,170007,1019],{"class":82},[69,170009,147787],{"class":1022},[69,170011,14955],{"class":86},[69,170013,32619],{"class":82},[69,170015,149129],{"class":6458},[69,170017,4983],{"class":86},[69,170019,170020,170022,170024,170027,170029,170031],{"class":71,"line":79},[69,170021,169860],{"class":6458},[69,170023,169863],{"class":86},[69,170025,170026],{"class":1022},"\"程序启动",[69,170028,157501],{"class":90},[69,170030,1642],{"class":1022},[69,170032,1404],{"class":86},[29,170034,170035],{},"日志类文件常用追加模式。",[14,170037,170039],{"id":170038},"_88-文件编码","8.8 文件编码",[29,170041,170042],{},"编码决定文字如何保存为字节。",[29,170044,170045],{},"常见编码：",[37,170047,170048,170051],{},[40,170049,170050],{},"UTF-8：推荐。",[40,170052,170053],{},"GBK：部分 Windows 中文文件常见。",[29,170055,170056],{},"读取文件乱码时，可以尝试：",[59,170058,170060],{"className":31614,"code":170059,"language":31616,"meta":64,"style":64},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[66,170061,170062,170093],{"__ignoreMap":64},[69,170063,170064,170066,170068,170070,170072,170074,170076,170078,170080,170082,170085,170087,170089,170091],{"class":71,"line":72},[69,170065,109054],{"class":82},[69,170067,147767],{"class":90},[69,170069,1398],{"class":86},[69,170071,147772],{"class":1022},[69,170073,13677],{"class":86},[69,170075,147777],{"class":1022},[69,170077,13677],{"class":86},[69,170079,147782],{"class":6458},[69,170081,1019],{"class":82},[69,170083,170084],{"class":1022},"\"gbk\"",[69,170086,14955],{"class":86},[69,170088,32619],{"class":82},[69,170090,149129],{"class":6458},[69,170092,4983],{"class":86},[69,170094,170095,170097,170099,170101],{"class":71,"line":79},[69,170096,147799],{"class":86},[69,170098,1019],{"class":82},[69,170100,149129],{"class":6458},[69,170102,169477],{"class":86},[29,170104,170105],{},"写文件时建议统一 UTF-8：",[59,170107,170109],{"className":31614,"code":170108,"language":31616,"meta":64,"style":64},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[66,170110,170111,170141],{"__ignoreMap":64},[69,170112,170113,170115,170117,170119,170121,170123,170125,170127,170129,170131,170133,170135,170137,170139],{"class":71,"line":72},[69,170114,109054],{"class":82},[69,170116,147767],{"class":90},[69,170118,1398],{"class":86},[69,170120,147772],{"class":1022},[69,170122,13677],{"class":86},[69,170124,152952],{"class":1022},[69,170126,13677],{"class":86},[69,170128,147782],{"class":6458},[69,170130,1019],{"class":82},[69,170132,147787],{"class":1022},[69,170134,14955],{"class":86},[69,170136,32619],{"class":82},[69,170138,149129],{"class":6458},[69,170140,4983],{"class":86},[69,170142,170143,170145,170147,170150],{"class":71,"line":79},[69,170144,169860],{"class":6458},[69,170146,169863],{"class":86},[69,170148,170149],{"class":1022},"\"中文内容\"",[69,170151,1404],{"class":86},[14,170153,170155],{"id":170154},"_89-pathlib","8.9 pathlib",[29,170157,170158,170161],{},[66,170159,170160],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[59,170163,170165],{"className":31614,"code":170164,"language":31616,"meta":64,"style":64},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[66,170166,170167,170177,170181,170199],{"__ignoreMap":64},[69,170168,170169,170171,170173,170175],{"class":71,"line":72},[69,170170,31973],{"class":82},[69,170172,109532],{"class":86},[69,170174,31628],{"class":82},[69,170176,109537],{"class":86},[69,170178,170179],{"class":71,"line":79},[69,170180,3644],{"emptyLinePlaceholder":1325},[69,170182,170183,170185,170187,170189,170192,170194,170196],{"class":71,"line":106},[69,170184,169287],{"class":86},[69,170186,1019],{"class":82},[69,170188,109766],{"class":86},[69,170190,170191],{"class":1022},"\"data\"",[69,170193,14955],{"class":86},[69,170195,1972],{"class":82},[69,170197,170198],{"class":1022}," \"students.txt\"\n",[69,170200,170201,170203],{"class":71,"line":116},[69,170202,31651],{"class":90},[69,170204,170205],{"class":86},"(path)\n",[29,170207,170208],{},"创建目录：",[59,170210,170212],{"className":31614,"code":170211,"language":31616,"meta":64,"style":64},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[66,170213,170214,170224,170228,170241],{"__ignoreMap":64},[69,170215,170216,170218,170220,170222],{"class":71,"line":72},[69,170217,31973],{"class":82},[69,170219,109532],{"class":86},[69,170221,31628],{"class":82},[69,170223,109537],{"class":86},[69,170225,170226],{"class":71,"line":79},[69,170227,3644],{"emptyLinePlaceholder":1325},[69,170229,170230,170233,170235,170237,170239],{"class":71,"line":106},[69,170231,170232],{"class":86},"data_dir ",[69,170234,1019],{"class":82},[69,170236,109766],{"class":86},[69,170238,170191],{"class":1022},[69,170240,1404],{"class":86},[69,170242,170243,170246,170249,170251,170253],{"class":71,"line":116},[69,170244,170245],{"class":86},"data_dir.mkdir(",[69,170247,170248],{"class":6458},"exist_ok",[69,170250,1019],{"class":82},[69,170252,32712],{"class":90},[69,170254,1404],{"class":86},[29,170256,170257],{},"判断文件是否存在：",[59,170259,170261],{"className":31614,"code":170260,"language":31616,"meta":64,"style":64},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[66,170262,170263,170276,170280,170287],{"__ignoreMap":64},[69,170264,170265,170267,170269,170271,170274],{"class":71,"line":72},[69,170266,169287],{"class":86},[69,170268,1019],{"class":82},[69,170270,109766],{"class":86},[69,170272,170273],{"class":1022},"\"data\u002Fstudents.txt\"",[69,170275,1404],{"class":86},[69,170277,170278],{"class":71,"line":79},[69,170279,3644],{"emptyLinePlaceholder":1325},[69,170281,170282,170284],{"class":71,"line":106},[69,170283,2782],{"class":82},[69,170285,170286],{"class":86}," path.exists():\n",[69,170288,170289,170291,170293,170296],{"class":71,"line":116},[69,170290,32535],{"class":90},[69,170292,1398],{"class":86},[69,170294,170295],{"class":1022},"\"文件存在\"",[69,170297,1404],{"class":86},[29,170299,170300],{},"读写文本：",[59,170302,170304],{"className":31614,"code":170303,"language":31616,"meta":64,"style":64},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[66,170305,170306,170318,170322,170339,170356],{"__ignoreMap":64},[69,170307,170308,170310,170312,170314,170316],{"class":71,"line":72},[69,170309,169287],{"class":86},[69,170311,1019],{"class":82},[69,170313,109766],{"class":86},[69,170315,147772],{"class":1022},[69,170317,1404],{"class":86},[69,170319,170320],{"class":71,"line":79},[69,170321,3644],{"emptyLinePlaceholder":1325},[69,170323,170324,170327,170329,170331,170333,170335,170337],{"class":71,"line":106},[69,170325,170326],{"class":86},"path.write_text(",[69,170328,146852],{"class":1022},[69,170330,13677],{"class":86},[69,170332,147782],{"class":6458},[69,170334,1019],{"class":82},[69,170336,147787],{"class":1022},[69,170338,1404],{"class":86},[69,170340,170341,170343,170345,170348,170350,170352,170354],{"class":71,"line":116},[69,170342,169470],{"class":86},[69,170344,1019],{"class":82},[69,170346,170347],{"class":86}," path.read_text(",[69,170349,147782],{"class":6458},[69,170351,1019],{"class":82},[69,170353,147787],{"class":1022},[69,170355,1404],{"class":86},[69,170357,170358,170360],{"class":71,"line":133},[69,170359,31651],{"class":90},[69,170361,169484],{"class":86},[14,170363,170365],{"id":170364},"_810-json文件","8.10 JSON文件",[29,170367,170368],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[59,170370,170372],{"className":31614,"code":170371,"language":31616,"meta":64,"style":64},"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",[66,170373,170374,170380,170384,170392,170402,170412,170420,170424,170428,170453],{"__ignoreMap":64},[69,170375,170376,170378],{"class":71,"line":72},[69,170377,31628],{"class":82},[69,170379,148067],{"class":86},[69,170381,170382],{"class":71,"line":79},[69,170383,3644],{"emptyLinePlaceholder":1325},[69,170385,170386,170388,170390],{"class":71,"line":106},[69,170387,150457],{"class":86},[69,170389,1019],{"class":82},[69,170391,113],{"class":86},[69,170393,170394,170396,170398,170400],{"class":71,"line":116},[69,170395,147996],{"class":1022},[69,170397,94],{"class":86},[69,170399,150864],{"class":1022},[69,170401,32702],{"class":86},[69,170403,170404,170406,170408,170410],{"class":71,"line":133},[69,170405,165513],{"class":1022},[69,170407,94],{"class":86},[69,170409,2037],{"class":90},[69,170411,32702],{"class":86},[69,170413,170414,170416,170418],{"class":71,"line":139},[69,170415,165524],{"class":1022},[69,170417,94],{"class":86},[69,170419,165529],{"class":90},[69,170421,170422],{"class":71,"line":401},[69,170423,142],{"class":86},[69,170425,170426],{"class":71,"line":470},[69,170427,3644],{"emptyLinePlaceholder":1325},[69,170429,170430,170432,170434,170437,170439,170441,170443,170445,170447,170449,170451],{"class":71,"line":475},[69,170431,157420],{"class":86},[69,170433,1019],{"class":82},[69,170435,170436],{"class":86}," json.dumps(student, ",[69,170438,148113],{"class":6458},[69,170440,1019],{"class":82},[69,170442,35223],{"class":90},[69,170444,13677],{"class":86},[69,170446,152988],{"class":6458},[69,170448,1019],{"class":82},[69,170450,1471],{"class":90},[69,170452,1404],{"class":86},[69,170454,170455,170457],{"class":71,"line":482},[69,170456,31651],{"class":90},[69,170458,165047],{"class":86},[29,170460,170461],{},"写入 JSON 文件：",[59,170463,170465],{"className":31614,"code":170464,"language":31616,"meta":64,"style":64},"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",[66,170466,170467,170473,170477,170485,170513,170541,170545,170549,170579],{"__ignoreMap":64},[69,170468,170469,170471],{"class":71,"line":72},[69,170470,31628],{"class":82},[69,170472,148067],{"class":86},[69,170474,170475],{"class":71,"line":79},[69,170476,3644],{"emptyLinePlaceholder":1325},[69,170478,170479,170481,170483],{"class":71,"line":106},[69,170480,160692],{"class":86},[69,170482,1019],{"class":82},[69,170484,56674],{"class":86},[69,170486,170487,170489,170491,170493,170495,170497,170499,170501,170503,170505,170507,170509,170511],{"class":71,"line":116},[69,170488,149361],{"class":86},[69,170490,63905],{"class":1022},[69,170492,94],{"class":86},[69,170494,150864],{"class":1022},[69,170496,13677],{"class":86},[69,170498,70349],{"class":1022},[69,170500,94],{"class":86},[69,170502,2037],{"class":90},[69,170504,13677],{"class":86},[69,170506,152448],{"class":1022},[69,170508,94],{"class":86},[69,170510,2375],{"class":90},[69,170512,6174],{"class":86},[69,170514,170515,170517,170519,170521,170523,170525,170527,170529,170531,170533,170535,170537,170539],{"class":71,"line":133},[69,170516,149361],{"class":86},[69,170518,63905],{"class":1022},[69,170520,94],{"class":86},[69,170522,151912],{"class":1022},[69,170524,13677],{"class":86},[69,170526,70349],{"class":1022},[69,170528,94],{"class":86},[69,170530,2012],{"class":90},[69,170532,13677],{"class":86},[69,170534,152448],{"class":1022},[69,170536,94],{"class":86},[69,170538,2198],{"class":90},[69,170540,6174],{"class":86},[69,170542,170543],{"class":71,"line":139},[69,170544,34482],{"class":86},[69,170546,170547],{"class":71,"line":401},[69,170548,3644],{"emptyLinePlaceholder":1325},[69,170550,170551,170553,170555,170557,170559,170561,170563,170565,170567,170569,170571,170573,170575,170577],{"class":71,"line":470},[69,170552,109054],{"class":82},[69,170554,147767],{"class":90},[69,170556,1398],{"class":86},[69,170558,152807],{"class":1022},[69,170560,13677],{"class":86},[69,170562,152952],{"class":1022},[69,170564,13677],{"class":86},[69,170566,147782],{"class":6458},[69,170568,1019],{"class":82},[69,170570,147787],{"class":1022},[69,170572,14955],{"class":86},[69,170574,32619],{"class":82},[69,170576,149129],{"class":6458},[69,170578,4983],{"class":86},[69,170580,170581,170584,170586,170588,170590,170592,170594,170596,170598,170600,170602],{"class":71,"line":475},[69,170582,170583],{"class":86},"    json.dump(students, ",[69,170585,46590],{"class":6458},[69,170587,13677],{"class":86},[69,170589,148113],{"class":6458},[69,170591,1019],{"class":82},[69,170593,35223],{"class":90},[69,170595,13677],{"class":86},[69,170597,152988],{"class":6458},[69,170599,1019],{"class":82},[69,170601,1471],{"class":90},[69,170603,1404],{"class":86},[29,170605,170606],{},"读取 JSON 文件：",[59,170608,170610],{"className":31614,"code":170609,"language":31616,"meta":64,"style":64},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[66,170611,170612,170618,170622,170652,170664,170668],{"__ignoreMap":64},[69,170613,170614,170616],{"class":71,"line":72},[69,170615,31628],{"class":82},[69,170617,148067],{"class":86},[69,170619,170620],{"class":71,"line":79},[69,170621,3644],{"emptyLinePlaceholder":1325},[69,170623,170624,170626,170628,170630,170632,170634,170636,170638,170640,170642,170644,170646,170648,170650],{"class":71,"line":106},[69,170625,109054],{"class":82},[69,170627,147767],{"class":90},[69,170629,1398],{"class":86},[69,170631,152807],{"class":1022},[69,170633,13677],{"class":86},[69,170635,147777],{"class":1022},[69,170637,13677],{"class":86},[69,170639,147782],{"class":6458},[69,170641,1019],{"class":82},[69,170643,147787],{"class":1022},[69,170645,14955],{"class":86},[69,170647,32619],{"class":82},[69,170649,149129],{"class":6458},[69,170651,4983],{"class":86},[69,170653,170654,170656,170658,170660,170662],{"class":71,"line":116},[69,170655,154013],{"class":86},[69,170657,1019],{"class":82},[69,170659,149140],{"class":86},[69,170661,46590],{"class":6458},[69,170663,1404],{"class":86},[69,170665,170666],{"class":71,"line":133},[69,170667,3644],{"emptyLinePlaceholder":1325},[69,170669,170670,170672],{"class":71,"line":139},[69,170671,31651],{"class":90},[69,170673,165971],{"class":86},[14,170675,170677],{"id":170676},"_811-csv文件","8.11 CSV文件",[29,170679,170680],{},"CSV 是逗号分隔值，常用于表格数据。",[29,170682,170683],{},"写入 CSV：",[59,170685,170687],{"className":31614,"code":170686,"language":31616,"meta":64,"style":64},"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",[66,170688,170689,170696,170700,170708,170726,170742,170758,170762,170766,170806,170820],{"__ignoreMap":64},[69,170690,170691,170693],{"class":71,"line":72},[69,170692,31628],{"class":82},[69,170694,170695],{"class":86}," csv\n",[69,170697,170698],{"class":71,"line":79},[69,170699,3644],{"emptyLinePlaceholder":1325},[69,170701,170702,170704,170706],{"class":71,"line":106},[69,170703,160692],{"class":86},[69,170705,1019],{"class":82},[69,170707,56674],{"class":86},[69,170709,170710,170713,170715,170717,170719,170721,170724],{"class":71,"line":116},[69,170711,170712],{"class":86},"    [",[69,170714,74320],{"class":1022},[69,170716,13677],{"class":86},[69,170718,74353],{"class":1022},[69,170720,13677],{"class":86},[69,170722,170723],{"class":1022},"\"成绩\"",[69,170725,89057],{"class":86},[69,170727,170728,170730,170732,170734,170736,170738,170740],{"class":71,"line":133},[69,170729,170712],{"class":86},[69,170731,150864],{"class":1022},[69,170733,13677],{"class":86},[69,170735,2037],{"class":90},[69,170737,13677],{"class":86},[69,170739,2375],{"class":90},[69,170741,89057],{"class":86},[69,170743,170744,170746,170748,170750,170752,170754,170756],{"class":71,"line":139},[69,170745,170712],{"class":86},[69,170747,151912],{"class":1022},[69,170749,13677],{"class":86},[69,170751,2012],{"class":90},[69,170753,13677],{"class":86},[69,170755,2198],{"class":90},[69,170757,89057],{"class":86},[69,170759,170760],{"class":71,"line":401},[69,170761,34482],{"class":86},[69,170763,170764],{"class":71,"line":470},[69,170765,3644],{"emptyLinePlaceholder":1325},[69,170767,170768,170770,170772,170774,170777,170779,170781,170783,170785,170787,170789,170791,170794,170796,170798,170800,170802,170804],{"class":71,"line":475},[69,170769,109054],{"class":82},[69,170771,147767],{"class":90},[69,170773,1398],{"class":86},[69,170775,170776],{"class":1022},"\"students.csv\"",[69,170778,13677],{"class":86},[69,170780,152952],{"class":1022},[69,170782,13677],{"class":86},[69,170784,147782],{"class":6458},[69,170786,1019],{"class":82},[69,170788,147787],{"class":1022},[69,170790,13677],{"class":86},[69,170792,170793],{"class":6458},"newline",[69,170795,1019],{"class":82},[69,170797,8894],{"class":1022},[69,170799,14955],{"class":86},[69,170801,32619],{"class":82},[69,170803,149129],{"class":6458},[69,170805,4983],{"class":86},[69,170807,170808,170811,170813,170816,170818],{"class":71,"line":482},[69,170809,170810],{"class":86},"    writer ",[69,170812,1019],{"class":82},[69,170814,170815],{"class":86}," csv.writer(",[69,170817,46590],{"class":6458},[69,170819,1404],{"class":86},[69,170821,170822],{"class":71,"line":497},[69,170823,170824],{"class":86},"    writer.writerows(students)\n",[29,170826,170827],{},"读取 CSV：",[59,170829,170831],{"className":31614,"code":170830,"language":31616,"meta":64,"style":64},"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",[66,170832,170833,170839,170843,170873,170887,170899],{"__ignoreMap":64},[69,170834,170835,170837],{"class":71,"line":72},[69,170836,31628],{"class":82},[69,170838,170695],{"class":86},[69,170840,170841],{"class":71,"line":79},[69,170842,3644],{"emptyLinePlaceholder":1325},[69,170844,170845,170847,170849,170851,170853,170855,170857,170859,170861,170863,170865,170867,170869,170871],{"class":71,"line":106},[69,170846,109054],{"class":82},[69,170848,147767],{"class":90},[69,170850,1398],{"class":86},[69,170852,170776],{"class":1022},[69,170854,13677],{"class":86},[69,170856,147777],{"class":1022},[69,170858,13677],{"class":86},[69,170860,147782],{"class":6458},[69,170862,1019],{"class":82},[69,170864,147787],{"class":1022},[69,170866,14955],{"class":86},[69,170868,32619],{"class":82},[69,170870,149129],{"class":6458},[69,170872,4983],{"class":86},[69,170874,170875,170878,170880,170883,170885],{"class":71,"line":116},[69,170876,170877],{"class":86},"    reader ",[69,170879,1019],{"class":82},[69,170881,170882],{"class":86}," csv.reader(",[69,170884,46590],{"class":6458},[69,170886,1404],{"class":86},[69,170888,170889,170891,170894,170896],{"class":71,"line":133},[69,170890,4445],{"class":82},[69,170892,170893],{"class":86}," row ",[69,170895,27280],{"class":82},[69,170897,170898],{"class":86}," reader:\n",[69,170900,170901,170903],{"class":71,"line":139},[69,170902,33687],{"class":90},[69,170904,170905],{"class":86},"(row)\n",[29,170907,170908],{},"使用字典写入：",[59,170910,170912],{"className":31614,"code":170911,"language":31616,"meta":64,"style":64},"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",[66,170913,170914,170920,170924,170932,170960,170988,170992,170996,171034,171055,171076,171081],{"__ignoreMap":64},[69,170915,170916,170918],{"class":71,"line":72},[69,170917,31628],{"class":82},[69,170919,170695],{"class":86},[69,170921,170922],{"class":71,"line":79},[69,170923,3644],{"emptyLinePlaceholder":1325},[69,170925,170926,170928,170930],{"class":71,"line":106},[69,170927,160692],{"class":86},[69,170929,1019],{"class":82},[69,170931,56674],{"class":86},[69,170933,170934,170936,170938,170940,170942,170944,170946,170948,170950,170952,170954,170956,170958],{"class":71,"line":116},[69,170935,149361],{"class":86},[69,170937,63905],{"class":1022},[69,170939,94],{"class":86},[69,170941,150864],{"class":1022},[69,170943,13677],{"class":86},[69,170945,70349],{"class":1022},[69,170947,94],{"class":86},[69,170949,2037],{"class":90},[69,170951,13677],{"class":86},[69,170953,152448],{"class":1022},[69,170955,94],{"class":86},[69,170957,2375],{"class":90},[69,170959,6174],{"class":86},[69,170961,170962,170964,170966,170968,170970,170972,170974,170976,170978,170980,170982,170984,170986],{"class":71,"line":133},[69,170963,149361],{"class":86},[69,170965,63905],{"class":1022},[69,170967,94],{"class":86},[69,170969,151912],{"class":1022},[69,170971,13677],{"class":86},[69,170973,70349],{"class":1022},[69,170975,94],{"class":86},[69,170977,2012],{"class":90},[69,170979,13677],{"class":86},[69,170981,152448],{"class":1022},[69,170983,94],{"class":86},[69,170985,2198],{"class":90},[69,170987,6174],{"class":86},[69,170989,170990],{"class":71,"line":139},[69,170991,34482],{"class":86},[69,170993,170994],{"class":71,"line":401},[69,170995,3644],{"emptyLinePlaceholder":1325},[69,170997,170998,171000,171002,171004,171006,171008,171010,171012,171014,171016,171018,171020,171022,171024,171026,171028,171030,171032],{"class":71,"line":470},[69,170999,109054],{"class":82},[69,171001,147767],{"class":90},[69,171003,1398],{"class":86},[69,171005,170776],{"class":1022},[69,171007,13677],{"class":86},[69,171009,152952],{"class":1022},[69,171011,13677],{"class":86},[69,171013,147782],{"class":6458},[69,171015,1019],{"class":82},[69,171017,147787],{"class":1022},[69,171019,13677],{"class":86},[69,171021,170793],{"class":6458},[69,171023,1019],{"class":82},[69,171025,8894],{"class":1022},[69,171027,14955],{"class":86},[69,171029,32619],{"class":82},[69,171031,149129],{"class":6458},[69,171033,4983],{"class":86},[69,171035,171036,171039,171041,171043,171045,171047,171049,171051,171053],{"class":71,"line":475},[69,171037,171038],{"class":86},"    fieldnames ",[69,171040,1019],{"class":82},[69,171042,53454],{"class":86},[69,171044,63905],{"class":1022},[69,171046,13677],{"class":86},[69,171048,70349],{"class":1022},[69,171050,13677],{"class":86},[69,171052,152448],{"class":1022},[69,171054,34482],{"class":86},[69,171056,171057,171059,171061,171064,171066,171068,171071,171073],{"class":71,"line":482},[69,171058,170810],{"class":86},[69,171060,1019],{"class":82},[69,171062,171063],{"class":86}," csv.DictWriter(",[69,171065,46590],{"class":6458},[69,171067,13677],{"class":86},[69,171069,171070],{"class":6458},"fieldnames",[69,171072,1019],{"class":82},[69,171074,171075],{"class":86},"fieldnames)\n",[69,171077,171078],{"class":71,"line":497},[69,171079,171080],{"class":86},"    writer.writeheader()\n",[69,171082,171083],{"class":71,"line":502},[69,171084,170824],{"class":86},[14,171086,171088],{"id":171087},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[29,171090,124513],{},[37,171092,171093,171096,171099],{},[40,171094,171095],{},"读取文本文件。",[40,171097,171098],{},"统计每个单词出现次数。",[40,171100,171101],{},"输出出现次数最多的前 10 个单词。",[29,171103,11277],{},[59,171105,171107],{"className":31614,"code":171106,"language":31616,"meta":64,"style":64},"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",[66,171108,171109,171119,171123,171136,171152,171156,171166,171175,171179,171191,171211,171220,171224,171242,171246,171276,171280,171296],{"__ignoreMap":64},[69,171110,171111,171113,171115,171117],{"class":71,"line":72},[69,171112,31973],{"class":82},[69,171114,109532],{"class":86},[69,171116,31628],{"class":82},[69,171118,109537],{"class":86},[69,171120,171121],{"class":71,"line":79},[69,171122,3644],{"emptyLinePlaceholder":1325},[69,171124,171125,171127,171129,171131,171134],{"class":71,"line":106},[69,171126,169287],{"class":86},[69,171128,1019],{"class":82},[69,171130,109766],{"class":86},[69,171132,171133],{"class":1022},"\"article.txt\"",[69,171135,1404],{"class":86},[69,171137,171138,171140,171142,171144,171146,171148,171150],{"class":71,"line":116},[69,171139,169470],{"class":86},[69,171141,1019],{"class":82},[69,171143,170347],{"class":86},[69,171145,147782],{"class":6458},[69,171147,1019],{"class":82},[69,171149,147787],{"class":1022},[69,171151,1404],{"class":86},[69,171153,171154],{"class":71,"line":133},[69,171155,3644],{"emptyLinePlaceholder":1325},[69,171157,171158,171161,171163],{"class":71,"line":139},[69,171159,171160],{"class":86},"words ",[69,171162,1019],{"class":82},[69,171164,171165],{"class":86}," content.lower().split()\n",[69,171167,171168,171171,171173],{"class":71,"line":401},[69,171169,171170],{"class":86},"counter ",[69,171172,1019],{"class":82},[69,171174,89089],{"class":86},[69,171176,171177],{"class":71,"line":470},[69,171178,3644],{"emptyLinePlaceholder":1325},[69,171180,171181,171183,171186,171188],{"class":71,"line":475},[69,171182,4269],{"class":82},[69,171184,171185],{"class":86}," word ",[69,171187,27280],{"class":82},[69,171189,171190],{"class":86}," words:\n",[69,171192,171193,171196,171198,171201,171204,171206,171209],{"class":71,"line":482},[69,171194,171195],{"class":86},"    word ",[69,171197,1019],{"class":82},[69,171199,171200],{"class":86}," word.strip(",[69,171202,171203],{"class":1022},"\".,!?;:",[69,171205,157471],{"class":90},[69,171207,171208],{"class":1022},"'()[]\"",[69,171210,1404],{"class":86},[69,171212,171213,171215,171217],{"class":71,"line":497},[69,171214,4345],{"class":82},[69,171216,40166],{"class":82},[69,171218,171219],{"class":86}," word:\n",[69,171221,171222],{"class":71,"line":502},[69,171223,149488],{"class":82},[69,171225,171226,171229,171231,171234,171236,171238,171240],{"class":71,"line":509},[69,171227,171228],{"class":86},"    counter[word] ",[69,171230,1019],{"class":82},[69,171232,171233],{"class":86}," counter.get(word, ",[69,171235,1583],{"class":90},[69,171237,14955],{"class":86},[69,171239,1869],{"class":82},[69,171241,56926],{"class":90},[69,171243,171244],{"class":71,"line":524},[69,171245,3644],{"emptyLinePlaceholder":1325},[69,171247,171248,171251,171253,171255,171258,171260,171262,171264,171266,171268,171270,171272,171274],{"class":71,"line":2888},[69,171249,171250],{"class":86},"items ",[69,171252,1019],{"class":82},[69,171254,164580],{"class":90},[69,171256,171257],{"class":86},"(counter.items(), ",[69,171259,154922],{"class":6458},[69,171261,154925],{"class":82},[69,171263,154928],{"class":86},[69,171265,1609],{"class":90},[69,171267,113423],{"class":86},[69,171269,164504],{"class":6458},[69,171271,1019],{"class":82},[69,171273,32712],{"class":90},[69,171275,1404],{"class":86},[69,171277,171278],{"class":71,"line":2893},[69,171279,3644],{"emptyLinePlaceholder":1325},[69,171281,171282,171284,171287,171289,171292,171294],{"class":71,"line":2899},[69,171283,4269],{"class":82},[69,171285,171286],{"class":86}," word, count ",[69,171288,27280],{"class":82},[69,171290,171291],{"class":86}," items[:",[69,171293,390],{"class":90},[69,171295,166731],{"class":86},[69,171297,171298,171300],{"class":71,"line":2919},[69,171299,32535],{"class":90},[69,171301,171302],{"class":86},"(word, count)\n",[14,171304,171306],{"id":171305},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[59,171308,171310],{"className":31614,"code":171309,"language":31616,"meta":64,"style":64},"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",[66,171311,171312,171318,171328,171332,171344,171348,171352,171360,171370,171376,171380,171410,171420,171424,171428,171436,171466,171490,171494,171498,171506,171535,171540],{"__ignoreMap":64},[69,171313,171314,171316],{"class":71,"line":72},[69,171315,31628],{"class":82},[69,171317,148067],{"class":86},[69,171319,171320,171322,171324,171326],{"class":71,"line":79},[69,171321,31973],{"class":82},[69,171323,109532],{"class":86},[69,171325,31628],{"class":82},[69,171327,109537],{"class":86},[69,171329,171330],{"class":71,"line":106},[69,171331,3644],{"emptyLinePlaceholder":1325},[69,171333,171334,171336,171338,171340,171342],{"class":71,"line":116},[69,171335,152800],{"class":90},[69,171337,14805],{"class":82},[69,171339,109766],{"class":86},[69,171341,152807],{"class":1022},[69,171343,1404],{"class":86},[69,171345,171346],{"class":71,"line":133},[69,171347,3644],{"emptyLinePlaceholder":1325},[69,171349,171350],{"class":71,"line":139},[69,171351,3644],{"emptyLinePlaceholder":1325},[69,171353,171354,171356,171358],{"class":71,"line":401},[69,171355,33183],{"class":82},[69,171357,152824],{"class":109},[69,171359,33189],{"class":86},[69,171361,171362,171364,171366,171368],{"class":71,"line":470},[69,171363,4345],{"class":82},[69,171365,40166],{"class":82},[69,171367,152835],{"class":90},[69,171369,152838],{"class":86},[69,171371,171372,171374],{"class":71,"line":475},[69,171373,15992],{"class":82},[69,171375,53066],{"class":86},[69,171377,171378],{"class":71,"line":482},[69,171379,3644],{"emptyLinePlaceholder":1325},[69,171381,171382,171384,171386,171388,171390,171392,171394,171396,171398,171400,171402,171404,171406,171408],{"class":71,"line":497},[69,171383,35414],{"class":82},[69,171385,147767],{"class":90},[69,171387,1398],{"class":86},[69,171389,152800],{"class":90},[69,171391,13677],{"class":86},[69,171393,147777],{"class":1022},[69,171395,13677],{"class":86},[69,171397,147782],{"class":6458},[69,171399,1019],{"class":82},[69,171401,147787],{"class":1022},[69,171403,14955],{"class":86},[69,171405,32619],{"class":82},[69,171407,149129],{"class":6458},[69,171409,4983],{"class":86},[69,171411,171412,171414,171416,171418],{"class":71,"line":502},[69,171413,15992],{"class":82},[69,171415,149140],{"class":86},[69,171417,46590],{"class":6458},[69,171419,1404],{"class":86},[69,171421,171422],{"class":71,"line":509},[69,171423,3644],{"emptyLinePlaceholder":1325},[69,171425,171426],{"class":71,"line":524},[69,171427,3644],{"emptyLinePlaceholder":1325},[69,171429,171430,171432,171434],{"class":71,"line":2888},[69,171431,33183],{"class":82},[69,171433,152934],{"class":109},[69,171435,152937],{"class":86},[69,171437,171438,171440,171442,171444,171446,171448,171450,171452,171454,171456,171458,171460,171462,171464],{"class":71,"line":2893},[69,171439,35414],{"class":82},[69,171441,147767],{"class":90},[69,171443,1398],{"class":86},[69,171445,152800],{"class":90},[69,171447,13677],{"class":86},[69,171449,152952],{"class":1022},[69,171451,13677],{"class":86},[69,171453,147782],{"class":6458},[69,171455,1019],{"class":82},[69,171457,147787],{"class":1022},[69,171459,14955],{"class":86},[69,171461,32619],{"class":82},[69,171463,149129],{"class":6458},[69,171465,4983],{"class":86},[69,171467,171468,171470,171472,171474,171476,171478,171480,171482,171484,171486,171488],{"class":71,"line":2899},[69,171469,152973],{"class":86},[69,171471,46590],{"class":6458},[69,171473,13677],{"class":86},[69,171475,148113],{"class":6458},[69,171477,1019],{"class":82},[69,171479,35223],{"class":90},[69,171481,13677],{"class":86},[69,171483,152988],{"class":6458},[69,171485,1019],{"class":82},[69,171487,1471],{"class":90},[69,171489,1404],{"class":86},[69,171491,171492],{"class":71,"line":2919},[69,171493,3644],{"emptyLinePlaceholder":1325},[69,171495,171496],{"class":71,"line":2924},[69,171497,3644],{"emptyLinePlaceholder":1325},[69,171499,171500,171502,171504],{"class":71,"line":2938},[69,171501,160692],{"class":86},[69,171503,1019],{"class":82},[69,171505,154018],{"class":86},[69,171507,171508,171511,171513,171515,171517,171519,171521,171523,171525,171527,171529,171531,171533],{"class":71,"line":2943},[69,171509,171510],{"class":86},"students.append({",[69,171512,63905],{"class":1022},[69,171514,94],{"class":86},[69,171516,150864],{"class":1022},[69,171518,13677],{"class":86},[69,171520,70349],{"class":1022},[69,171522,94],{"class":86},[69,171524,2037],{"class":90},[69,171526,13677],{"class":86},[69,171528,152448],{"class":1022},[69,171530,94],{"class":86},[69,171532,2375],{"class":90},[69,171534,166128],{"class":86},[69,171536,171537],{"class":71,"line":2972},[69,171538,171539],{"class":86},"save_students(students)\n",[69,171541,171542,171544,171546,171549],{"class":71,"line":2977},[69,171543,31651],{"class":90},[69,171545,1398],{"class":86},[69,171547,171548],{"class":1022},"\"保存成功\"",[69,171550,1404],{"class":86},[14,171552,171554],{"id":171553},"_814-易错点","8.14 易错点",[37,171556,171557,171561,171567,171572,171579,171586],{},[40,171558,171559,169820],{},[66,171560,2182],{},[40,171562,171563,171564,29621],{},"读写中文要指定 ",[66,171565,171566],{},"encoding=\"utf-8\"",[40,171568,171569,171570,29621],{},"打开文件后要关闭，推荐使用 ",[66,171571,109054],{},[40,171573,171574,171575,171578],{},"读取大文件不要直接 ",[66,171576,171577],{},"read()"," 全部内容。",[40,171580,171581,171582,171585],{},"Windows 写 CSV 时建议加 ",[66,171583,171584],{},"newline=\"\"","，避免空行。",[40,171587,171588],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171590,171592],{"id":171591},"_815-本章练习","8.15 本章练习",[37,171594,171595,171602,171607,171610,171613],{},[40,171596,171597,171598,171601],{},"写入一个 ",[66,171599,171600],{},"students.txt","，每行保存一个学生姓名。",[40,171603,105576,171604,171606],{},[66,171605,171600],{}," 并输出所有学生。",[40,171608,171609],{},"把学生列表保存为 JSON 文件。",[40,171611,171612],{},"从 JSON 文件读取学生数据，计算平均分。",[40,171614,171615,171616,171619,171620,171623],{},"写一个日志函数 ",[66,171617,171618],{},"write_log(message)","，每次调用向 ",[66,171621,171622],{},"app.log"," 追加一行。",[1297,171625,171626],{},"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":64,"searchDepth":79,"depth":79,"links":171628},[171629,171630,171634,171635,171641,171642,171643,171644,171645,171646,171647,171648,171649,171650,171651],{"id":169140,"depth":79,"text":169141},{"id":169181,"depth":79,"text":169182,"children":171631},[171632,171633],{"id":169185,"depth":106,"text":169186},{"id":169219,"depth":106,"text":169220},{"id":169333,"depth":79,"text":169334},{"id":169426,"depth":79,"text":169427,"children":171636},[171637,171638,171639,171640],{"id":169430,"depth":106,"text":169431},{"id":169517,"depth":106,"text":169518},{"id":169587,"depth":106,"text":169588},{"id":169681,"depth":106,"text":169682},{"id":169751,"depth":79,"text":169752},{"id":169814,"depth":79,"text":169815},{"id":169975,"depth":79,"text":169976},{"id":170038,"depth":79,"text":170039},{"id":170154,"depth":79,"text":170155},{"id":170364,"depth":79,"text":170365},{"id":170676,"depth":79,"text":170677},{"id":171087,"depth":79,"text":171088},{"id":171305,"depth":79,"text":171306},{"id":171553,"depth":79,"text":171554},{"id":171591,"depth":79,"text":171592},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169132,"description":1322},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171658,"title":171659,"body":171660,"description":1322,"extension":1323,"meta":173846,"navigation":1325,"path":173847,"seo":173848,"stem":173849,"__hash__":173850},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171661,"toc":173813},[171662,171665,171669,171672,171675,171767,171769,171788,171793,171797,171800,171803,171832,171839,171842,171846,171849,171878,171880,171932,171938,171991,171995,172093,172096,172163,172167,172224,172226,172232,172236,172241,172247,172338,172343,172347,172350,172428,172431,172469,172473,172591,172594,172598,172601,172646,172649,172653,172658,172664,172714,172717,172748,172752,172756,172786,172790,172825,172829,172864,172904,172908,172924,172927,172931,172935,173014,173018,173059,173063,173118,173122,173156,173160,173190,173199,173206,173212,173269,173272,173280,173283,173287,173294,173297,173303,173306,173323,173328,173332,173338,173351,173354,173391,173394,173405,173408,173422,173425,173439,173443,173450,173483,173486,173488,173494,173497,173501,173503,173509,173514,173687,173691,173754,173758,173782,173786,173810],[10,171663,171659],{"id":171664},"_9-异常模块与包",[14,171666,171668],{"id":171667},"_91-什么是异常","9.1 什么是异常",[29,171670,171671],{},"异常是程序运行过程中出现的错误。",[29,171673,171674],{},"常见异常：",[1530,171676,171677,171686],{},[1533,171678,171679],{},[1536,171680,171681,171684],{},[1539,171682,171683],{},"异常",[1539,171685,27106],{},[1576,171687,171688,171698,171708,171717,171727,171737,171747,171757],{},[1536,171689,171690,171695],{},[1581,171691,171692],{},[66,171693,171694],{},"NameError",[1581,171696,171697],{},"使用了未定义变量",[1536,171699,171700,171705],{},[1581,171701,171702],{},[66,171703,171704],{},"TypeError",[1581,171706,171707],{},"类型不匹配",[1536,171709,171710,171714],{},[1581,171711,171712],{},[66,171713,155810],{},[1581,171715,171716],{},"值不合法",[1536,171718,171719,171724],{},[1581,171720,171721],{},[66,171722,171723],{},"IndexError",[1581,171725,171726],{},"列表索引越界",[1536,171728,171729,171734],{},[1581,171730,171731],{},[66,171732,171733],{},"KeyError",[1581,171735,171736],{},"字典 key 不存在",[1536,171738,171739,171744],{},[1581,171740,171741],{},[66,171742,171743],{},"FileNotFoundError",[1581,171745,171746],{},"文件不存在",[1536,171748,171749,171754],{},[1581,171750,171751],{},[66,171752,171753],{},"ZeroDivisionError",[1581,171755,171756],{},"除数为 0",[1536,171758,171759,171764],{},[1581,171760,171761],{},[66,171762,171763],{},"ImportError",[1581,171765,171766],{},"导入失败",[29,171768,16375],{},[59,171770,171772],{"className":31614,"code":171771,"language":31616,"meta":64,"style":64},"num = int(\"abc\")\n",[66,171773,171774],{"__ignoreMap":64},[69,171775,171776,171778,171780,171782,171784,171786],{"class":71,"line":72},[69,171777,156763],{"class":86},[69,171779,1019],{"class":82},[69,171781,3626],{"class":90},[69,171783,1398],{"class":86},[69,171785,156856],{"class":1022},[69,171787,1404],{"class":86},[29,171789,171790,171791,29621],{},"会触发 ",[66,171792,155810],{},[14,171794,171796],{"id":171795},"_92-为什么要处理异常","9.2 为什么要处理异常",[29,171798,171799],{},"如果不处理异常，程序会直接终止。",[29,171801,171802],{},"例如用户输入年龄：",[59,171804,171806],{"className":31614,"code":171805,"language":31616,"meta":64,"style":64},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[66,171807,171808,171826],{"__ignoreMap":64},[69,171809,171810,171812,171814,171816,171818,171820,171822,171824],{"class":71,"line":72},[69,171811,147522],{"class":86},[69,171813,1019],{"class":82},[69,171815,3626],{"class":90},[69,171817,1398],{"class":86},[69,171819,55048],{"class":90},[69,171821,1398],{"class":86},[69,171823,153370],{"class":1022},[69,171825,31733],{"class":86},[69,171827,171828,171830],{"class":71,"line":79},[69,171829,31651],{"class":90},[69,171831,156737],{"class":86},[29,171833,171834,171835,171838],{},"用户输入 ",[66,171836,171837],{},"abc","，程序就会报错退出。",[29,171840,171841],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171843,171845],{"id":171844},"_93-try-except","9.3 try except",[29,171847,171848],{},"基础语法：",[59,171850,171852],{"className":31614,"code":171851,"language":31616,"meta":64,"style":64},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[66,171853,171854,171861,171866,171873],{"__ignoreMap":64},[69,171855,171856,171859],{"class":71,"line":72},[69,171857,171858],{"class":82},"try",[69,171860,4983],{"class":86},[69,171862,171863],{"class":71,"line":79},[69,171864,171865],{"class":86},"    可能出错的代码\n",[69,171867,171868,171871],{"class":71,"line":106},[69,171869,171870],{"class":82},"except",[69,171872,4983],{"class":86},[69,171874,171875],{"class":71,"line":116},[69,171876,171877],{"class":86},"    出错后的处理代码\n",[29,171879,16375],{},[59,171881,171883],{"className":31614,"code":171882,"language":31616,"meta":64,"style":64},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[66,171884,171885,171891,171909,171915,171921],{"__ignoreMap":64},[69,171886,171887,171889],{"class":71,"line":72},[69,171888,171858],{"class":82},[69,171890,4983],{"class":86},[69,171892,171893,171895,171897,171899,171901,171903,171905,171907],{"class":71,"line":79},[69,171894,153362],{"class":86},[69,171896,1019],{"class":82},[69,171898,3626],{"class":90},[69,171900,1398],{"class":86},[69,171902,55048],{"class":90},[69,171904,1398],{"class":86},[69,171906,153370],{"class":1022},[69,171908,31733],{"class":86},[69,171910,171911,171913],{"class":71,"line":106},[69,171912,32535],{"class":90},[69,171914,156737],{"class":86},[69,171916,171917,171919],{"class":71,"line":116},[69,171918,171870],{"class":82},[69,171920,4983],{"class":86},[69,171922,171923,171925,171927,171930],{"class":71,"line":133},[69,171924,32535],{"class":90},[69,171926,1398],{"class":86},[69,171928,171929],{"class":1022},"\"年龄必须是数字\"",[69,171931,1404],{"class":86},[29,171933,171934,171935,171937],{},"不建议裸写 ",[66,171936,171870],{},"，最好指定异常类型。",[59,171939,171941],{"className":31614,"code":171940,"language":31616,"meta":64,"style":64},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[66,171942,171943,171949,171967,171973,171981],{"__ignoreMap":64},[69,171944,171945,171947],{"class":71,"line":72},[69,171946,171858],{"class":82},[69,171948,4983],{"class":86},[69,171950,171951,171953,171955,171957,171959,171961,171963,171965],{"class":71,"line":79},[69,171952,153362],{"class":86},[69,171954,1019],{"class":82},[69,171956,3626],{"class":90},[69,171958,1398],{"class":86},[69,171960,55048],{"class":90},[69,171962,1398],{"class":86},[69,171964,153370],{"class":1022},[69,171966,31733],{"class":86},[69,171968,171969,171971],{"class":71,"line":106},[69,171970,32535],{"class":90},[69,171972,156737],{"class":86},[69,171974,171975,171977,171979],{"class":71,"line":116},[69,171976,171870],{"class":82},[69,171978,153202],{"class":90},[69,171980,4983],{"class":86},[69,171982,171983,171985,171987,171989],{"class":71,"line":133},[69,171984,32535],{"class":90},[69,171986,1398],{"class":86},[69,171988,171929],{"class":1022},[69,171990,1404],{"class":86},[14,171992,171994],{"id":171993},"_94-捕获多个异常","9.4 捕获多个异常",[59,171996,171998],{"className":31614,"code":171997,"language":31616,"meta":64,"style":64},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[66,171999,172000,172006,172027,172047,172054,172062,172073,172082],{"__ignoreMap":64},[69,172001,172002,172004],{"class":71,"line":72},[69,172003,171858],{"class":82},[69,172005,4983],{"class":86},[69,172007,172008,172011,172013,172015,172017,172019,172021,172023,172025],{"class":71,"line":79},[69,172009,172010],{"class":86},"    nums ",[69,172012,1019],{"class":82},[69,172014,53454],{"class":86},[69,172016,1609],{"class":90},[69,172018,13677],{"class":86},[69,172020,1471],{"class":90},[69,172022,13677],{"class":86},[69,172024,1465],{"class":90},[69,172026,34482],{"class":86},[69,172028,172029,172032,172034,172036,172038,172040,172042,172045],{"class":71,"line":106},[69,172030,172031],{"class":86},"    index ",[69,172033,1019],{"class":82},[69,172035,3626],{"class":90},[69,172037,1398],{"class":86},[69,172039,55048],{"class":90},[69,172041,1398],{"class":86},[69,172043,172044],{"class":1022},"\"请输入索引:\"",[69,172046,31733],{"class":86},[69,172048,172049,172051],{"class":71,"line":116},[69,172050,32535],{"class":90},[69,172052,172053],{"class":86},"(nums[index])\n",[69,172055,172056,172058,172060],{"class":71,"line":133},[69,172057,171870],{"class":82},[69,172059,153202],{"class":90},[69,172061,4983],{"class":86},[69,172063,172064,172066,172068,172071],{"class":71,"line":139},[69,172065,32535],{"class":90},[69,172067,1398],{"class":86},[69,172069,172070],{"class":1022},"\"索引必须是整数\"",[69,172072,1404],{"class":86},[69,172074,172075,172077,172080],{"class":71,"line":401},[69,172076,171870],{"class":82},[69,172078,172079],{"class":90}," IndexError",[69,172081,4983],{"class":86},[69,172083,172084,172086,172088,172091],{"class":71,"line":470},[69,172085,32535],{"class":90},[69,172087,1398],{"class":86},[69,172089,172090],{"class":1022},"\"索引越界\"",[69,172092,1404],{"class":86},[29,172094,172095],{},"多个异常使用相同处理逻辑：",[59,172097,172099],{"className":31614,"code":172098,"language":31616,"meta":64,"style":64},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[66,172100,172101,172107,172125,172138,172152],{"__ignoreMap":64},[69,172102,172103,172105],{"class":71,"line":72},[69,172104,171858],{"class":82},[69,172106,4983],{"class":86},[69,172108,172109,172111,172113,172115,172117,172119,172121,172123],{"class":71,"line":79},[69,172110,46829],{"class":86},[69,172112,1019],{"class":82},[69,172114,3626],{"class":90},[69,172116,1398],{"class":86},[69,172118,55048],{"class":90},[69,172120,1398],{"class":86},[69,172122,156772],{"class":1022},[69,172124,31733],{"class":86},[69,172126,172127,172129,172131,172133,172135],{"class":71,"line":106},[69,172128,32535],{"class":90},[69,172130,1398],{"class":86},[69,172132,390],{"class":90},[69,172134,157022],{"class":82},[69,172136,172137],{"class":86}," num)\n",[69,172139,172140,172142,172144,172146,172148,172150],{"class":71,"line":116},[69,172141,171870],{"class":82},[69,172143,87],{"class":86},[69,172145,155810],{"class":90},[69,172147,13677],{"class":86},[69,172149,171753],{"class":90},[69,172151,32022],{"class":86},[69,172153,172154,172156,172158,172161],{"class":71,"line":133},[69,172155,32535],{"class":90},[69,172157,1398],{"class":86},[69,172159,172160],{"class":1022},"\"输入不合法\"",[69,172162,1404],{"class":86},[14,172164,172166],{"id":172165},"_95-获取异常信息","9.5 获取异常信息",[59,172168,172170],{"className":31614,"code":172169,"language":31616,"meta":64,"style":64},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[66,172171,172172,172178,172192,172203],{"__ignoreMap":64},[69,172173,172174,172176],{"class":71,"line":72},[69,172175,171858],{"class":82},[69,172177,4983],{"class":86},[69,172179,172180,172182,172184,172186,172188,172190],{"class":71,"line":79},[69,172181,46829],{"class":86},[69,172183,1019],{"class":82},[69,172185,3626],{"class":90},[69,172187,1398],{"class":86},[69,172189,156856],{"class":1022},[69,172191,1404],{"class":86},[69,172193,172194,172196,172198,172200],{"class":71,"line":106},[69,172195,171870],{"class":82},[69,172197,153202],{"class":90},[69,172199,65830],{"class":82},[69,172201,172202],{"class":86}," e:\n",[69,172204,172205,172207,172209,172211,172214,172216,172218,172220,172222],{"class":71,"line":116},[69,172206,32535],{"class":90},[69,172208,1398],{"class":86},[69,172210,1447],{"class":82},[69,172212,172213],{"class":1022},"\"出错了:",[69,172215,2283],{"class":90},[69,172217,1468],{"class":86},[69,172219,2332],{"class":90},[69,172221,1642],{"class":1022},[69,172223,1404],{"class":86},[29,172225,147433],{},[59,172227,172230],{"className":172228,"code":172229,"language":540,"meta":64},[538],"出错了:invalid literal for int() with base 10: 'abc'\n",[66,172231,172229],{"__ignoreMap":64},[14,172233,172235],{"id":172234},"_96-else和finally","9.6 else和finally",[29,172237,172238,172240],{},[66,172239,2946],{},"：没有异常时执行。",[29,172242,172243,172246],{},[66,172244,172245],{},"finally","：无论是否异常都会执行。",[59,172248,172250],{"className":31614,"code":172249,"language":31616,"meta":64,"style":64},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[66,172251,172252,172258,172276,172284,172294,172300,172321,172327],{"__ignoreMap":64},[69,172253,172254,172256],{"class":71,"line":72},[69,172255,171858],{"class":82},[69,172257,4983],{"class":86},[69,172259,172260,172262,172264,172266,172268,172270,172272,172274],{"class":71,"line":79},[69,172261,46829],{"class":86},[69,172263,1019],{"class":82},[69,172265,3626],{"class":90},[69,172267,1398],{"class":86},[69,172269,55048],{"class":90},[69,172271,1398],{"class":86},[69,172273,156772],{"class":1022},[69,172275,31733],{"class":86},[69,172277,172278,172280,172282],{"class":71,"line":106},[69,172279,171870],{"class":82},[69,172281,153202],{"class":90},[69,172283,4983],{"class":86},[69,172285,172286,172288,172290,172292],{"class":71,"line":116},[69,172287,32535],{"class":90},[69,172289,1398],{"class":86},[69,172291,154190],{"class":1022},[69,172293,1404],{"class":86},[69,172295,172296,172298],{"class":71,"line":133},[69,172297,2946],{"class":82},[69,172299,4983],{"class":86},[69,172301,172302,172304,172306,172308,172311,172313,172315,172317,172319],{"class":71,"line":139},[69,172303,32535],{"class":90},[69,172305,1398],{"class":86},[69,172307,1447],{"class":82},[69,172309,172310],{"class":1022},"\"输入正确:",[69,172312,2283],{"class":90},[69,172314,2910],{"class":86},[69,172316,2332],{"class":90},[69,172318,1642],{"class":1022},[69,172320,1404],{"class":86},[69,172322,172323,172325],{"class":71,"line":401},[69,172324,172245],{"class":82},[69,172326,4983],{"class":86},[69,172328,172329,172331,172333,172336],{"class":71,"line":470},[69,172330,32535],{"class":90},[69,172332,1398],{"class":86},[69,172334,172335],{"class":1022},"\"程序结束\"",[69,172337,1404],{"class":86},[29,172339,172340,172342],{},[66,172341,172245],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172344,172346],{"id":172345},"_97-抛出异常","9.7 抛出异常",[29,172348,172349],{},"程序可以主动抛出异常。",[59,172351,172353],{"className":31614,"code":172352,"language":31616,"meta":64,"style":64},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[66,172354,172355,172364,172376,172389,172409,172413,172417],{"__ignoreMap":64},[69,172356,172357,172359,172362],{"class":71,"line":72},[69,172358,33183],{"class":82},[69,172360,172361],{"class":109}," set_age",[69,172363,162391],{"class":86},[69,172365,172366,172368,172370,172372,172374],{"class":71,"line":79},[69,172367,4345],{"class":82},[69,172369,16946],{"class":86},[69,172371,1011],{"class":82},[69,172373,5337],{"class":90},[69,172375,4983],{"class":86},[69,172377,172378,172380,172382,172384,172387],{"class":71,"line":106},[69,172379,104653],{"class":82},[69,172381,153202],{"class":90},[69,172383,1398],{"class":86},[69,172385,172386],{"class":1022},"\"年龄不能为负数\"",[69,172388,1404],{"class":86},[69,172390,172391,172393,172395,172397,172399,172401,172403,172405,172407],{"class":71,"line":116},[69,172392,32535],{"class":90},[69,172394,1398],{"class":86},[69,172396,1447],{"class":82},[69,172398,162959],{"class":1022},[69,172400,2283],{"class":90},[69,172402,71446],{"class":86},[69,172404,2332],{"class":90},[69,172406,1642],{"class":1022},[69,172408,1404],{"class":86},[69,172410,172411],{"class":71,"line":133},[69,172412,3644],{"emptyLinePlaceholder":1325},[69,172414,172415],{"class":71,"line":139},[69,172416,3644],{"emptyLinePlaceholder":1325},[69,172418,172419,172422,172424,172426],{"class":71,"line":401},[69,172420,172421],{"class":86},"set_age(",[69,172423,1920],{"class":82},[69,172425,1609],{"class":90},[69,172427,1404],{"class":86},[29,172429,172430],{},"调用者可以捕获：",[59,172432,172434],{"className":31614,"code":172433,"language":31616,"meta":64,"style":64},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[66,172435,172436,172442,172453,172463],{"__ignoreMap":64},[69,172437,172438,172440],{"class":71,"line":72},[69,172439,171858],{"class":82},[69,172441,4983],{"class":86},[69,172443,172444,172447,172449,172451],{"class":71,"line":79},[69,172445,172446],{"class":86},"    set_age(",[69,172448,1920],{"class":82},[69,172450,1609],{"class":90},[69,172452,1404],{"class":86},[69,172454,172455,172457,172459,172461],{"class":71,"line":106},[69,172456,171870],{"class":82},[69,172458,153202],{"class":90},[69,172460,65830],{"class":82},[69,172462,172202],{"class":86},[69,172464,172465,172467],{"class":71,"line":116},[69,172466,32535],{"class":90},[69,172468,68225],{"class":86},[14,172470,172472],{"id":172471},"_98-自定义异常","9.8 自定义异常",[59,172474,172476],{"className":31614,"code":172475,"language":31616,"meta":64,"style":64},"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",[66,172477,172478,172492,172496,172500,172504,172512,172522,172533,172543,172547,172551,172557,172574,172585],{"__ignoreMap":64},[69,172479,172480,172482,172485,172487,172490],{"class":71,"line":72},[69,172481,15934],{"class":82},[69,172483,172484],{"class":109}," BalanceNotEnoughError",[69,172486,1398],{"class":86},[69,172488,172489],{"class":90},"Exception",[69,172491,32022],{"class":86},[69,172493,172494],{"class":71,"line":79},[69,172495,150513],{"class":82},[69,172497,172498],{"class":71,"line":106},[69,172499,3644],{"emptyLinePlaceholder":1325},[69,172501,172502],{"class":71,"line":116},[69,172503,3644],{"emptyLinePlaceholder":1325},[69,172505,172506,172508,172510],{"class":71,"line":133},[69,172507,33183],{"class":82},[69,172509,151162],{"class":109},[69,172511,163788],{"class":86},[69,172513,172514,172516,172518,172520],{"class":71,"line":139},[69,172515,4345],{"class":82},[69,172517,151118],{"class":86},[69,172519,2346],{"class":82},[69,172521,163565],{"class":86},[69,172523,172524,172526,172529,172531],{"class":71,"line":401},[69,172525,104653],{"class":82},[69,172527,172528],{"class":86}," BalanceNotEnoughError(",[69,172530,151213],{"class":1022},[69,172532,1404],{"class":86},[69,172534,172535,172537,172539,172541],{"class":71,"line":470},[69,172536,5334],{"class":82},[69,172538,163795],{"class":86},[69,172540,1920],{"class":82},[69,172542,151151],{"class":86},[69,172544,172545],{"class":71,"line":475},[69,172546,3644],{"emptyLinePlaceholder":1325},[69,172548,172549],{"class":71,"line":482},[69,172550,3644],{"emptyLinePlaceholder":1325},[69,172552,172553,172555],{"class":71,"line":497},[69,172554,171858],{"class":82},[69,172556,4983],{"class":86},[69,172558,172559,172561,172563,172566,172568,172570,172572],{"class":71,"line":502},[69,172560,163466],{"class":86},[69,172562,1019],{"class":82},[69,172564,172565],{"class":86}," withdraw(",[69,172567,124],{"class":90},[69,172569,13677],{"class":86},[69,172571,2967],{"class":90},[69,172573,1404],{"class":86},[69,172575,172576,172578,172581,172583],{"class":71,"line":509},[69,172577,171870],{"class":82},[69,172579,172580],{"class":86}," BalanceNotEnoughError ",[69,172582,32619],{"class":82},[69,172584,172202],{"class":86},[69,172586,172587,172589],{"class":71,"line":524},[69,172588,32535],{"class":90},[69,172590,68225],{"class":86},[29,172592,172593],{},"入门阶段大多数情况使用内置异常即可。",[14,172595,172597],{"id":172596},"_99-traceback","9.9 traceback",[29,172599,172600],{},"调试时可以输出完整异常堆栈。",[59,172602,172604],{"className":31614,"code":172603,"language":31616,"meta":64,"style":64},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[66,172605,172606,172613,172617,172623,172633,172641],{"__ignoreMap":64},[69,172607,172608,172610],{"class":71,"line":72},[69,172609,31628],{"class":82},[69,172611,172612],{"class":86}," traceback\n",[69,172614,172615],{"class":71,"line":79},[69,172616,3644],{"emptyLinePlaceholder":1325},[69,172618,172619,172621],{"class":71,"line":106},[69,172620,171858],{"class":82},[69,172622,4983],{"class":86},[69,172624,172625,172627,172629,172631],{"class":71,"line":116},[69,172626,3229],{"class":90},[69,172628,1398],{"class":86},[69,172630,156856],{"class":1022},[69,172632,1404],{"class":86},[69,172634,172635,172637,172639],{"class":71,"line":133},[69,172636,171870],{"class":82},[69,172638,153202],{"class":90},[69,172640,4983],{"class":86},[69,172642,172643],{"class":71,"line":139},[69,172644,172645],{"class":86},"    traceback.print_exc()\n",[29,172647,172648],{},"日志系统中常把异常堆栈记录到文件。",[14,172650,172652],{"id":172651},"_910-什么是模块","9.10 什么是模块",[29,172654,172655,172656,127204],{},"模块就是一个 ",[66,172657,147328],{},[29,172659,172660,172661,25855],{},"例如创建 ",[66,172662,172663],{},"my_math.py",[59,172665,172667],{"className":31614,"code":172666,"language":31616,"meta":64,"style":64},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[66,172668,172669,172677,172687,172691,172695,172704],{"__ignoreMap":64},[69,172670,172671,172673,172675],{"class":71,"line":72},[69,172672,33183],{"class":82},[69,172674,6451],{"class":109},[69,172676,152069],{"class":86},[69,172678,172679,172681,172683,172685],{"class":71,"line":79},[69,172680,5334],{"class":82},[69,172682,12111],{"class":86},[69,172684,1869],{"class":82},[69,172686,152080],{"class":86},[69,172688,172689],{"class":71,"line":106},[69,172690,3644],{"emptyLinePlaceholder":1325},[69,172692,172693],{"class":71,"line":116},[69,172694,3644],{"emptyLinePlaceholder":1325},[69,172696,172697,172699,172702],{"class":71,"line":133},[69,172698,33183],{"class":82},[69,172700,172701],{"class":109}," sub",[69,172703,152069],{"class":86},[69,172705,172706,172708,172710,172712],{"class":71,"line":139},[69,172707,5334],{"class":82},[69,172709,12111],{"class":86},[69,172711,1920],{"class":82},[69,172713,152080],{"class":86},[29,172715,172716],{},"在另一个文件中导入：",[59,172718,172720],{"className":31614,"code":172719,"language":31616,"meta":64,"style":64},"import my_math\n\nprint(my_math.add(1, 2))\n",[66,172721,172722,172729,172733],{"__ignoreMap":64},[69,172723,172724,172726],{"class":71,"line":72},[69,172725,31628],{"class":82},[69,172727,172728],{"class":86}," my_math\n",[69,172730,172731],{"class":71,"line":79},[69,172732,3644],{"emptyLinePlaceholder":1325},[69,172734,172735,172737,172740,172742,172744,172746],{"class":71,"line":106},[69,172736,31651],{"class":90},[69,172738,172739],{"class":86},"(my_math.add(",[69,172741,1609],{"class":90},[69,172743,13677],{"class":86},[69,172745,1471],{"class":90},[69,172747,31733],{"class":86},[14,172749,172751],{"id":172750},"_911-import导入","9.11 import导入",[19,172753,172755],{"id":172754},"_9111-导入模块","9.11.1 导入模块",[59,172757,172759],{"className":31614,"code":172758,"language":31616,"meta":64,"style":64},"import random\n\nprint(random.randint(1, 10))\n",[66,172760,172761,172767,172771],{"__ignoreMap":64},[69,172762,172763,172765],{"class":71,"line":72},[69,172764,31628],{"class":82},[69,172766,46564],{"class":86},[69,172768,172769],{"class":71,"line":79},[69,172770,3644],{"emptyLinePlaceholder":1325},[69,172772,172773,172775,172778,172780,172782,172784],{"class":71,"line":106},[69,172774,31651],{"class":90},[69,172776,172777],{"class":86},"(random.randint(",[69,172779,1609],{"class":90},[69,172781,13677],{"class":86},[69,172783,390],{"class":90},[69,172785,31733],{"class":86},[19,172787,172789],{"id":172788},"_9112-导入指定内容","9.11.2 导入指定内容",[59,172791,172793],{"className":31614,"code":172792,"language":31616,"meta":64,"style":64},"from random import randint\n\nprint(randint(1, 10))\n",[66,172794,172795,172806,172810],{"__ignoreMap":64},[69,172796,172797,172799,172801,172803],{"class":71,"line":72},[69,172798,31973],{"class":82},[69,172800,59022],{"class":86},[69,172802,31628],{"class":82},[69,172804,172805],{"class":86}," randint\n",[69,172807,172808],{"class":71,"line":79},[69,172809,3644],{"emptyLinePlaceholder":1325},[69,172811,172812,172814,172817,172819,172821,172823],{"class":71,"line":106},[69,172813,31651],{"class":90},[69,172815,172816],{"class":86},"(randint(",[69,172818,1609],{"class":90},[69,172820,13677],{"class":86},[69,172822,390],{"class":90},[69,172824,31733],{"class":86},[19,172826,172828],{"id":172827},"_9113-起别名","9.11.3 起别名",[59,172830,172832],{"className":31614,"code":172831,"language":31616,"meta":64,"style":64},"import random as rd\n\nprint(rd.randint(1, 10))\n",[66,172833,172834,172845,172849],{"__ignoreMap":64},[69,172835,172836,172838,172840,172842],{"class":71,"line":72},[69,172837,31628],{"class":82},[69,172839,59022],{"class":86},[69,172841,32619],{"class":82},[69,172843,172844],{"class":86}," rd\n",[69,172846,172847],{"class":71,"line":79},[69,172848,3644],{"emptyLinePlaceholder":1325},[69,172850,172851,172853,172856,172858,172860,172862],{"class":71,"line":106},[69,172852,31651],{"class":90},[69,172854,172855],{"class":86},"(rd.randint(",[69,172857,1609],{"class":90},[69,172859,13677],{"class":86},[69,172861,390],{"class":90},[69,172863,31733],{"class":86},[59,172865,172867],{"className":31614,"code":172866,"language":31616,"meta":64,"style":64},"from random import randint as rint\n\nprint(rint(1, 10))\n",[66,172868,172869,172885,172889],{"__ignoreMap":64},[69,172870,172871,172873,172875,172877,172880,172882],{"class":71,"line":72},[69,172872,31973],{"class":82},[69,172874,59022],{"class":86},[69,172876,31628],{"class":82},[69,172878,172879],{"class":86}," randint ",[69,172881,32619],{"class":82},[69,172883,172884],{"class":86}," rint\n",[69,172886,172887],{"class":71,"line":79},[69,172888,3644],{"emptyLinePlaceholder":1325},[69,172890,172891,172893,172896,172898,172900,172902],{"class":71,"line":106},[69,172892,31651],{"class":90},[69,172894,172895],{"class":86},"(rint(",[69,172897,1609],{"class":90},[69,172899,13677],{"class":86},[69,172901,390],{"class":90},[69,172903,31733],{"class":86},[19,172905,172907],{"id":172906},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[59,172909,172911],{"className":31614,"code":172910,"language":31616,"meta":64,"style":64},"from random import *\n",[66,172912,172913],{"__ignoreMap":64},[69,172914,172915,172917,172919,172921],{"class":71,"line":72},[69,172916,31973],{"class":82},[69,172918,59022],{"class":86},[69,172920,31628],{"class":82},[69,172922,172923],{"class":82}," *\n",[29,172925,172926],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172928,172930],{"id":172929},"_912-常用内置模块","9.12 常用内置模块",[19,172932,172934],{"id":172933},"_9121-random","9.12.1 random",[59,172936,172938],{"className":31614,"code":172937,"language":31616,"meta":64,"style":64},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[66,172939,172940,172946,172950,172964,172983],{"__ignoreMap":64},[69,172941,172942,172944],{"class":71,"line":72},[69,172943,31628],{"class":82},[69,172945,46564],{"class":86},[69,172947,172948],{"class":71,"line":79},[69,172949,3644],{"emptyLinePlaceholder":1325},[69,172951,172952,172954,172956,172958,172960,172962],{"class":71,"line":106},[69,172953,31651],{"class":90},[69,172955,172777],{"class":86},[69,172957,1609],{"class":90},[69,172959,13677],{"class":86},[69,172961,390],{"class":90},[69,172963,31733],{"class":86},[69,172965,172966,172968,172971,172973,172975,172977,172979,172981],{"class":71,"line":116},[69,172967,31651],{"class":90},[69,172969,172970],{"class":86},"(random.choice([",[69,172972,150864],{"class":1022},[69,172974,13677],{"class":86},[69,172976,151912],{"class":1022},[69,172978,13677],{"class":86},[69,172980,160707],{"class":1022},[69,172982,34379],{"class":86},[69,172984,172985,172987,172990,172992,172994,172996,172998,173000,173002,173004,173006,173008,173010,173012],{"class":71,"line":133},[69,172986,31651],{"class":90},[69,172988,172989],{"class":86},"(random.sample([",[69,172991,1609],{"class":90},[69,172993,13677],{"class":86},[69,172995,1471],{"class":90},[69,172997,13677],{"class":86},[69,172999,1465],{"class":90},[69,173001,13677],{"class":86},[69,173003,1684],{"class":90},[69,173005,13677],{"class":86},[69,173007,1709],{"class":90},[69,173009,113423],{"class":86},[69,173011,1471],{"class":90},[69,173013,31733],{"class":86},[19,173015,173017],{"id":173016},"_9122-time","9.12.2 time",[59,173019,173021],{"className":31614,"code":173020,"language":31616,"meta":64,"style":64},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[66,173022,173023,173029,173033,173040,173048],{"__ignoreMap":64},[69,173024,173025,173027],{"class":71,"line":72},[69,173026,31628],{"class":82},[69,173028,33065],{"class":86},[69,173030,173031],{"class":71,"line":79},[69,173032,3644],{"emptyLinePlaceholder":1325},[69,173034,173035,173037],{"class":71,"line":106},[69,173036,31651],{"class":90},[69,173038,173039],{"class":86},"(time.time())\n",[69,173041,173042,173044,173046],{"class":71,"line":116},[69,173043,96292],{"class":86},[69,173045,1609],{"class":90},[69,173047,1404],{"class":86},[69,173049,173050,173052,173054,173057],{"class":71,"line":133},[69,173051,31651],{"class":90},[69,173053,1398],{"class":86},[69,173055,173056],{"class":1022},"\"1秒后执行\"",[69,173058,1404],{"class":86},[19,173060,173062],{"id":173061},"_9123-datetime","9.12.3 datetime",[59,173064,173066],{"className":31614,"code":173065,"language":31616,"meta":64,"style":64},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[66,173067,173068,173080,173084,173094,173101],{"__ignoreMap":64},[69,173069,173070,173072,173075,173077],{"class":71,"line":72},[69,173071,31973],{"class":82},[69,173073,173074],{"class":86}," datetime ",[69,173076,31628],{"class":82},[69,173078,173079],{"class":86}," datetime\n",[69,173081,173082],{"class":71,"line":79},[69,173083,3644],{"emptyLinePlaceholder":1325},[69,173085,173086,173089,173091],{"class":71,"line":106},[69,173087,173088],{"class":86},"now ",[69,173090,1019],{"class":82},[69,173092,173093],{"class":86}," datetime.now()\n",[69,173095,173096,173098],{"class":71,"line":116},[69,173097,31651],{"class":90},[69,173099,173100],{"class":86},"(now)\n",[69,173102,173103,173105,173108,173111,173113,173116],{"class":71,"line":133},[69,173104,31651],{"class":90},[69,173106,173107],{"class":86},"(now.strftime(",[69,173109,173110],{"class":1022},"\"%Y-%m-",[69,173112,157667],{"class":90},[69,173114,173115],{"class":1022}," %H:%M:%S\"",[69,173117,31733],{"class":86},[19,173119,173121],{"id":173120},"_9124-os","9.12.4 os",[59,173123,173125],{"className":31614,"code":173124,"language":31616,"meta":64,"style":64},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[66,173126,173127,173133,173137,173144],{"__ignoreMap":64},[69,173128,173129,173131],{"class":71,"line":72},[69,173130,31628],{"class":82},[69,173132,46541],{"class":86},[69,173134,173135],{"class":71,"line":79},[69,173136,3644],{"emptyLinePlaceholder":1325},[69,173138,173139,173141],{"class":71,"line":106},[69,173140,31651],{"class":90},[69,173142,173143],{"class":86},"(os.getcwd())\n",[69,173145,173146,173148,173151,173154],{"class":71,"line":116},[69,173147,31651],{"class":90},[69,173149,173150],{"class":86},"(os.listdir(",[69,173152,173153],{"class":1022},"\".\"",[69,173155,31733],{"class":86},[19,173157,173159],{"id":173158},"_9125-sys","9.12.5 sys",[59,173161,173163],{"className":31614,"code":173162,"language":31616,"meta":64,"style":64},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[66,173164,173165,173172,173176,173183],{"__ignoreMap":64},[69,173166,173167,173169],{"class":71,"line":72},[69,173168,31628],{"class":82},[69,173170,173171],{"class":86}," sys\n",[69,173173,173174],{"class":71,"line":79},[69,173175,3644],{"emptyLinePlaceholder":1325},[69,173177,173178,173180],{"class":71,"line":106},[69,173179,31651],{"class":90},[69,173181,173182],{"class":86},"(sys.version)\n",[69,173184,173185,173187],{"class":71,"line":116},[69,173186,31651],{"class":90},[69,173188,173189],{"class":86},"(sys.path)\n",[14,173191,173193,173194,173196,173197,1642],{"id":173192},"_913-if-name-main","9.13 if ",[195,173195,81031],{}," == \"",[195,173198,103279],{},[29,173200,173201,173202,173205],{},"模块被直接运行和被导入时，",[66,173203,173204],{},"__name__"," 的值不同。",[29,173207,173208,173209,25855],{},"创建 ",[66,173210,173211],{},"my_module.py",[59,173213,173215],{"className":31614,"code":173214,"language":31616,"meta":64,"style":64},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[66,173216,173217,173225,173235,173239,173243,173255],{"__ignoreMap":64},[69,173218,173219,173221,173223],{"class":71,"line":72},[69,173220,33183],{"class":82},[69,173222,6451],{"class":109},[69,173224,152069],{"class":86},[69,173226,173227,173229,173231,173233],{"class":71,"line":79},[69,173228,5334],{"class":82},[69,173230,12111],{"class":86},[69,173232,1869],{"class":82},[69,173234,152080],{"class":86},[69,173236,173237],{"class":71,"line":106},[69,173238,3644],{"emptyLinePlaceholder":1325},[69,173240,173241],{"class":71,"line":116},[69,173242,3644],{"emptyLinePlaceholder":1325},[69,173244,173245,173247,173249,173251,173253],{"class":71,"line":133},[69,173246,2782],{"class":82},[69,173248,32456],{"class":90},[69,173250,102780],{"class":82},[69,173252,102783],{"class":1022},[69,173254,4983],{"class":86},[69,173256,173257,173259,173261,173263,173265,173267],{"class":71,"line":139},[69,173258,32535],{"class":90},[69,173260,167576],{"class":86},[69,173262,1609],{"class":90},[69,173264,13677],{"class":86},[69,173266,1471],{"class":90},[69,173268,31733],{"class":86},[29,173270,173271],{},"作用：",[37,173273,173274,173277],{},[40,173275,173276],{},"直接运行该文件时，执行测试代码。",[40,173278,173279],{},"被其他文件导入时，不执行测试代码。",[29,173281,173282],{},"这是写模块时很常用的习惯。",[14,173284,173286],{"id":173285},"_914-包","9.14 包",[29,173288,173289,173290,173293],{},"包是包含 ",[66,173291,173292],{},"__init__.py"," 的目录，用于组织多个模块。",[29,173295,173296],{},"目录结构：",[59,173298,173301],{"className":173299,"code":173300,"language":540,"meta":64},[538],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[66,173302,173300],{"__ignoreMap":64},[29,173304,173305],{},"导入：",[59,173307,173309],{"className":31614,"code":173308,"language":31616,"meta":64,"style":64},"from utils.file_utils import read_file\n",[66,173310,173311],{"__ignoreMap":64},[69,173312,173313,173315,173318,173320],{"class":71,"line":72},[69,173314,31973],{"class":82},[69,173316,173317],{"class":86}," utils.file_utils ",[69,173319,31628],{"class":82},[69,173321,173322],{"class":86}," read_file\n",[29,173324,173325,173327],{},[66,173326,173292],{}," 可以为空，也可以写包初始化逻辑。",[14,173329,173331],{"id":173330},"_915-第三方包","9.15 第三方包",[29,173333,173334,173335,173337],{},"第三方包通过 ",[66,173336,25068],{}," 安装。",[59,173339,173341],{"className":25059,"code":173340,"language":25061,"meta":64,"style":64},"pip install requests\n",[66,173342,173343],{"__ignoreMap":64},[69,173344,173345,173347,173349],{"class":71,"line":72},[69,173346,25068],{"class":109},[69,173348,25071],{"class":1022},[69,173350,147074],{"class":1022},[29,173352,173353],{},"使用：",[59,173355,173357],{"className":31614,"code":173356,"language":31616,"meta":64,"style":64},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[66,173358,173359,173365,173369,173384],{"__ignoreMap":64},[69,173360,173361,173363],{"class":71,"line":72},[69,173362,31628],{"class":82},[69,173364,147074],{"class":86},[69,173366,173367],{"class":71,"line":79},[69,173368,3644],{"emptyLinePlaceholder":1325},[69,173370,173371,173374,173376,173379,173382],{"class":71,"line":106},[69,173372,173373],{"class":86},"response ",[69,173375,1019],{"class":82},[69,173377,173378],{"class":86}," requests.get(",[69,173380,173381],{"class":1022},"\"https:\u002F\u002Fwww.example.com\"",[69,173383,1404],{"class":86},[69,173385,173386,173388],{"class":71,"line":116},[69,173387,31651],{"class":90},[69,173389,173390],{"class":86},"(response.status_code)\n",[29,173392,173393],{},"查看已安装包：",[59,173395,173397],{"className":25059,"code":173396,"language":25061,"meta":64,"style":64},"pip list\n",[66,173398,173399],{"__ignoreMap":64},[69,173400,173401,173403],{"class":71,"line":72},[69,173402,25068],{"class":109},[69,173404,120176],{"class":1022},[29,173406,173407],{},"导出项目依赖：",[59,173409,173410],{"className":25059,"code":147269,"language":25061,"meta":64,"style":64},[66,173411,173412],{"__ignoreMap":64},[69,173413,173414,173416,173418,173420],{"class":71,"line":72},[69,173415,25068],{"class":109},[69,173417,147278],{"class":1022},[69,173419,27458],{"class":82},[69,173421,147283],{"class":1022},[29,173423,173424],{},"安装项目依赖：",[59,173426,173427],{"className":25059,"code":147289,"language":25061,"meta":64,"style":64},[66,173428,173429],{"__ignoreMap":64},[69,173430,173431,173433,173435,173437],{"class":71,"line":72},[69,173432,25068],{"class":109},[69,173434,25071],{"class":1022},[69,173436,120860],{"class":90},[69,173438,147283],{"class":1022},[14,173440,173442],{"id":173441},"_916-模块搜索路径","9.16 模块搜索路径",[29,173444,173445,173446,173449],{},"Python 导入模块时会在 ",[66,173447,173448],{},"sys.path"," 中查找。",[59,173451,173453],{"className":31614,"code":173452,"language":31616,"meta":64,"style":64},"import sys\n\nfor path in sys.path:\n    print(path)\n",[66,173454,173455,173461,173465,173477],{"__ignoreMap":64},[69,173456,173457,173459],{"class":71,"line":72},[69,173458,31628],{"class":82},[69,173460,173171],{"class":86},[69,173462,173463],{"class":71,"line":79},[69,173464,3644],{"emptyLinePlaceholder":1325},[69,173466,173467,173469,173472,173474],{"class":71,"line":106},[69,173468,4269],{"class":82},[69,173470,173471],{"class":86}," path ",[69,173473,27280],{"class":82},[69,173475,173476],{"class":86}," sys.path:\n",[69,173478,173479,173481],{"class":71,"line":116},[69,173480,32535],{"class":90},[69,173482,170205],{"class":86},[29,173484,173485],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[29,173487,158599],{},[59,173489,173492],{"className":173490,"code":173491,"language":540,"meta":64},[538],"random.py\njson.py\ntime.py\n",[66,173493,173491],{"__ignoreMap":64},[29,173495,173496],{},"这些文件名可能导致导入异常。",[14,173498,173500],{"id":173499},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[29,173502,173296],{},[59,173504,173507],{"className":173505,"code":173506,"language":540,"meta":64},[538],"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",[66,173508,173506],{"__ignoreMap":64},[29,173510,173511,25855],{},[66,173512,173513],{},"utils\u002Ffile_utils.py",[59,173515,173517],{"className":31614,"code":173516,"language":31616,"meta":64,"style":64},"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",[66,173518,173519,173525,173535,173539,173543,173553,173563,173571,173577,173581,173608,173618,173622,173626,173636,173662],{"__ignoreMap":64},[69,173520,173521,173523],{"class":71,"line":72},[69,173522,31628],{"class":82},[69,173524,148067],{"class":86},[69,173526,173527,173529,173531,173533],{"class":71,"line":79},[69,173528,31973],{"class":82},[69,173530,109532],{"class":86},[69,173532,31628],{"class":82},[69,173534,109537],{"class":86},[69,173536,173537],{"class":71,"line":106},[69,173538,3644],{"emptyLinePlaceholder":1325},[69,173540,173541],{"class":71,"line":116},[69,173542,3644],{"emptyLinePlaceholder":1325},[69,173544,173545,173547,173550],{"class":71,"line":133},[69,173546,33183],{"class":82},[69,173548,173549],{"class":109}," read_json",[69,173551,173552],{"class":86},"(path):\n",[69,173554,173555,173558,173560],{"class":71,"line":139},[69,173556,173557],{"class":86},"    path ",[69,173559,1019],{"class":82},[69,173561,173562],{"class":86}," Path(path)\n",[69,173564,173565,173567,173569],{"class":71,"line":401},[69,173566,4345],{"class":82},[69,173568,40166],{"class":82},[69,173570,170286],{"class":86},[69,173572,173573,173575],{"class":71,"line":470},[69,173574,15992],{"class":82},[69,173576,53066],{"class":86},[69,173578,173579],{"class":71,"line":475},[69,173580,3644],{"emptyLinePlaceholder":1325},[69,173582,173583,173585,173587,173590,173592,173594,173596,173598,173600,173602,173604,173606],{"class":71,"line":482},[69,173584,35414],{"class":82},[69,173586,147767],{"class":90},[69,173588,173589],{"class":86},"(path, ",[69,173591,147777],{"class":1022},[69,173593,13677],{"class":86},[69,173595,147782],{"class":6458},[69,173597,1019],{"class":82},[69,173599,147787],{"class":1022},[69,173601,14955],{"class":86},[69,173603,32619],{"class":82},[69,173605,149129],{"class":6458},[69,173607,4983],{"class":86},[69,173609,173610,173612,173614,173616],{"class":71,"line":497},[69,173611,15992],{"class":82},[69,173613,149140],{"class":86},[69,173615,46590],{"class":6458},[69,173617,1404],{"class":86},[69,173619,173620],{"class":71,"line":502},[69,173621,3644],{"emptyLinePlaceholder":1325},[69,173623,173624],{"class":71,"line":509},[69,173625,3644],{"emptyLinePlaceholder":1325},[69,173627,173628,173630,173633],{"class":71,"line":524},[69,173629,33183],{"class":82},[69,173631,173632],{"class":109}," write_json",[69,173634,173635],{"class":86},"(path, data):\n",[69,173637,173638,173640,173642,173644,173646,173648,173650,173652,173654,173656,173658,173660],{"class":71,"line":2888},[69,173639,35414],{"class":82},[69,173641,147767],{"class":90},[69,173643,173589],{"class":86},[69,173645,152952],{"class":1022},[69,173647,13677],{"class":86},[69,173649,147782],{"class":6458},[69,173651,1019],{"class":82},[69,173653,147787],{"class":1022},[69,173655,14955],{"class":86},[69,173657,32619],{"class":82},[69,173659,149129],{"class":6458},[69,173661,4983],{"class":86},[69,173663,173664,173667,173669,173671,173673,173675,173677,173679,173681,173683,173685],{"class":71,"line":2893},[69,173665,173666],{"class":86},"        json.dump(data, ",[69,173668,46590],{"class":6458},[69,173670,13677],{"class":86},[69,173672,148113],{"class":6458},[69,173674,1019],{"class":82},[69,173676,35223],{"class":90},[69,173678,13677],{"class":86},[69,173680,152988],{"class":6458},[69,173682,1019],{"class":82},[69,173684,1471],{"class":90},[69,173686,1404],{"class":86},[29,173688,173689,25855],{},[66,173690,155583],{},[59,173692,173694],{"className":31614,"code":173693,"language":31616,"meta":64,"style":64},"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",[66,173695,173696,173707,173711,173724,173744],{"__ignoreMap":64},[69,173697,173698,173700,173702,173704],{"class":71,"line":72},[69,173699,31973],{"class":82},[69,173701,173317],{"class":86},[69,173703,31628],{"class":82},[69,173705,173706],{"class":86}," read_json, write_json\n",[69,173708,173709],{"class":71,"line":79},[69,173710,3644],{"emptyLinePlaceholder":1325},[69,173712,173713,173715,173717,173720,173722],{"class":71,"line":106},[69,173714,160692],{"class":86},[69,173716,1019],{"class":82},[69,173718,173719],{"class":86}," read_json(",[69,173721,152807],{"class":1022},[69,173723,1404],{"class":86},[69,173725,173726,173728,173730,173732,173734,173736,173738,173740,173742],{"class":71,"line":116},[69,173727,171510],{"class":86},[69,173729,63905],{"class":1022},[69,173731,94],{"class":86},[69,173733,150864],{"class":1022},[69,173735,13677],{"class":86},[69,173737,152448],{"class":1022},[69,173739,94],{"class":86},[69,173741,2375],{"class":90},[69,173743,166128],{"class":86},[69,173745,173746,173749,173751],{"class":71,"line":133},[69,173747,173748],{"class":86},"write_json(",[69,173750,152807],{"class":1022},[69,173752,173753],{"class":86},", students)\n",[14,173755,173757],{"id":173756},"_918-易错点","9.18 易错点",[37,173759,173760,173763,173768,173773,173776,173779],{},[40,173761,173762],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[40,173764,173765,173766,29621],{},"能指定异常类型就不要裸写 ",[66,173767,171870],{},[40,173769,173770,173772],{},[66,173771,172245],{}," 无论是否出错都会执行。",[40,173774,173775],{},"模块文件名不要和标准库重名。",[40,173777,173778],{},"导入自己写的模块时，要注意运行目录。",[40,173780,173781],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173783,173785],{"id":173784},"_919-本章练习","9.19 本章练习",[37,173787,173788,173791,173794,173800,173807],{},[40,173789,173790],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[40,173792,173793],{},"写函数读取文件，如果文件不存在则返回空字符串。",[40,173795,173208,173796,173799],{},[66,173797,173798],{},"math_utils.py","，实现加减乘除函数并导入使用。",[40,173801,173802,173803,173806],{},"创建一个 ",[66,173804,173805],{},"utils"," 包，把 JSON 读写函数放进去。",[40,173808,173809],{},"写一个程序，捕获除零异常和输入格式异常。",[1297,173811,173812],{},"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":64,"searchDepth":79,"depth":79,"links":173814},[173815,173816,173817,173818,173819,173820,173821,173822,173823,173824,173825,173831,173838,173840,173841,173842,173843,173844,173845],{"id":171667,"depth":79,"text":171668},{"id":171795,"depth":79,"text":171796},{"id":171844,"depth":79,"text":171845},{"id":171993,"depth":79,"text":171994},{"id":172165,"depth":79,"text":172166},{"id":172234,"depth":79,"text":172235},{"id":172345,"depth":79,"text":172346},{"id":172471,"depth":79,"text":172472},{"id":172596,"depth":79,"text":172597},{"id":172651,"depth":79,"text":172652},{"id":172750,"depth":79,"text":172751,"children":173826},[173827,173828,173829,173830],{"id":172754,"depth":106,"text":172755},{"id":172788,"depth":106,"text":172789},{"id":172827,"depth":106,"text":172828},{"id":172906,"depth":106,"text":172907},{"id":172929,"depth":79,"text":172930,"children":173832},[173833,173834,173835,173836,173837],{"id":172933,"depth":106,"text":172934},{"id":173016,"depth":106,"text":173017},{"id":173061,"depth":106,"text":173062},{"id":173120,"depth":106,"text":173121},{"id":173158,"depth":106,"text":173159},{"id":173192,"depth":79,"text":173839},"9.13 if name == \"main\"",{"id":173285,"depth":79,"text":173286},{"id":173330,"depth":79,"text":173331},{"id":173441,"depth":79,"text":173442},{"id":173499,"depth":79,"text":173500},{"id":173756,"depth":79,"text":173757},{"id":173784,"depth":79,"text":173785},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171659,"description":1322},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173852,"title":173853,"body":173854,"description":174017,"extension":1323,"meta":174018,"navigation":1325,"path":174019,"seo":174020,"stem":174021,"__hash__":174022},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173855,"toc":174012},[173856,173859,173862,173865,173876,173878,173952,173955,173958,173961,173964,173967,173970,173973,173976,173979,173982],[10,173857,173853],{"id":173858},"python教程",[29,173860,173861],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[29,173863,173864],{},"建议学习环境：",[37,173866,173867,173870,173873],{},[40,173868,173869],{},"Python 版本：Python 3.10 及以上。",[40,173871,173872],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[40,173874,173875],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173877,118299],{"id":118299},[37,173879,173880,173886,173892,173898,173904,173910,173916,173922,173928,173934,173940,173946],{},[40,173881,173882],{},[187,173883,173885],{"href":173884},".\u002Fch1-Python","Python环境与第一个程序",[40,173887,173888],{},[187,173889,173891],{"href":173890},".\u002Fch2","基础语法、变量与字符串",[40,173893,173894],{},[187,173895,173897],{"href":173896},".\u002Fch3","判断语句",[40,173899,173900],{},[187,173901,173903],{"href":173902},".\u002Fch4","循环语句",[40,173905,173906],{},[187,173907,173909],{"href":173908},".\u002Fch5","函数基础",[40,173911,173912],{},[187,173913,173915],{"href":173914},".\u002Fch6","数据容器",[40,173917,173918],{},[187,173919,173921],{"href":173920},".\u002Fch7","函数进阶",[40,173923,173924],{},[187,173925,173927],{"href":173926},".\u002Fch8","文件操作",[40,173929,173930],{},[187,173931,173933],{"href":173932},".\u002Fch9","异常、模块与包",[40,173935,173936],{},[187,173937,173939],{"href":173938},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[40,173941,173942],{},[187,173943,173945],{"href":173944},".\u002Fch11","面向对象基础",[40,173947,173948],{},[187,173949,173951],{"href":173950},".\u002Fch12","综合案例与复习路线",[14,173953,173954],{"id":173954},"学习路线",[29,173956,173957],{},"第一阶段：能运行程序。",[29,173959,173960],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[29,173962,173963],{},"第二阶段：能组织数据。",[29,173965,173966],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[29,173968,173969],{},"第三阶段：能封装逻辑。",[29,173971,173972],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[29,173974,173975],{},"第四阶段：能做小项目。",[29,173977,173978],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173980,173981],{"id":173981},"参考资料",[37,173983,173984,173991,173998,174005],{},[40,173985,173986,173987],{},"黑马程序员 Python 入门教程推荐：",[187,173988,173989],{"href":173989,"rel":173990},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[191],[40,173992,173993,173994],{},"Python 官方中文教程：",[187,173995,173996],{"href":173996,"rel":173997},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[191],[40,173999,174000,174001],{},"Python 标准库文档：",[187,174002,174003],{"href":174003,"rel":174004},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[191],[40,174006,174007,174008],{},"pyecharts 文档：",[187,174009,174010],{"href":174010,"rel":174011},"https:\u002F\u002Fpyecharts.org\u002F",[191],{"title":64,"searchDepth":79,"depth":79,"links":174013},[174014,174015,174016],{"id":118299,"depth":79,"text":118299},{"id":173954,"depth":79,"text":173954},{"id":173981,"depth":79,"text":173981},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24617},"\u002Fwiki\u002F2024-10-10-python",{"title":173853,"description":174017},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331444208]